diff --git a/.gitignore b/.gitignore index c8e3ed4fac5..281548f93c4 100644 --- a/.gitignore +++ b/.gitignore @@ -180,3 +180,5 @@ Temporary Items .apdisk + +*.before \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1e8673bc449..747a618c804 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -11,9 +11,6 @@ Hello and welcome to /tg/station's contributing page. You are here because you a But first we want to make it clear how you can contribute, if contributing is a new experience for you, and what powers the team has over your pull request so you do not get any surprises when submitting pull requests, and it is closed for a reason you did not anticipate. ##Getting Started - -####EOF settings of main repo are forbidden territory one must avoid wandering into - At /tg/station we do not have a list of goals and features to add, we instead allow freedom for contributors to suggest and create their ideas for the game. That does not mean we aren't determined to squash bugs, which unfortunately pop up a lot due to the deep complexity of the game. Here are some useful getting started guides, if you want to contribute or if you want to know what challenges you can tackle with zero knowledge about the game's code structure. If you want to contribute the first thing you'll need to do is [set up Git](http://tgstation13.org/wiki/Setting_up_git) so you can download the source code. @@ -273,3 +270,12 @@ There is no strict process when it comes to merging pull requests, pull requests * If you are proposing multiple changes, which change many different aspects of the code, you are expected to section them off into different pull requests in order to make it easier to review them and to deny/accept the changes that are deemed acceptable. * If your pull request is accepted, the code you add no longer belongs exclusively to you but to everyone; everyone is free to work on it, but you are also free to object to any changes being made, which will be noted by a Project Lead or Project Manager. It is a shame this has to be explicitly said, but there have been cases where this would've saved some trouble. + +## Banned content +Do not add any of the following in a Pull Request or risk getting the PR closed: + - National Socialist Party of Germany content, National Socialist Party of Germany related content, or National Socialist Party of Germany references + +##A word on git +Yes we know that the files have a tonne of mixed windows and linux line endings, attempts to fix this have been met with less than stellar success and as such we have decided to give up caring until such a time as it matters. + +Therefore EOF settings of main repo are forbidden territory one must avoid wandering into diff --git a/README.md b/README.md index 6a4241a790f..4c13f6c78dc 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ ##/tg/station v1.0.1 -[![Build Status](https://travis-ci.org/tgstation/-tg-station.png)](https://travis-ci.org/tgstation/-tg-station) +[![Build Status](https://travis-ci.org/tgstation/tgstation.png)](https://travis-ci.org/tgstation/tgstation) **Website:** http://www.tgstation13.org
-**Code:** https://github.com/tgstation/-tg-station
+**Code:** https://github.com/tgstation/tgstation
**Wiki** http://tgstation13.org/wiki/Main_Page
**IRC:** irc://irc.rizon.net/coderbus or if you dont have an IRC client, you can click [here](https://kiwiirc.com/client/irc.rizon.net:6667/?&theme=cli#coderbus).
@@ -19,11 +19,11 @@ Follow this: http://www.tgstation13.org/wiki/Setting_up_git Option 2: Install GitHub::windows from http://windows.github.com/ It handles most of the setup and configuraton of Git for you. -Then you simply search for the -tg-station repository and click the big clone +Then you simply search for the tgstation repository and click the big clone button. Option 3: Download the source code as a zip by clicking the ZIP button in the -code tab of https://github.com/tgstation/-tg-station +code tab of https://github.com/tgstation/tgstation (note: this will use a lot of bandwidth if you wish to update and is a lot of hassle if you want to make any changes at all, so it's not recommended.) @@ -131,9 +131,9 @@ Please see [CONTRIBUTING.md](CONTRIBUTING.md) ##LICENSE -All code after commit 333c566b88108de218d882840e61928a9b759d8f on 2014/31/12 at 4:38 PM PST (https://github.com/tgstation/-tg-station/commit/333c566b88108de218d882840e61928a9b759d8f) is licensed under GNU AGPL v3 (http://www.gnu.org/licenses/agpl-3.0.html). +All code after commit 333c566b88108de218d882840e61928a9b759d8f on 2014/31/12 at 4:38 PM PST (https://github.com/tgstation/tgstation/commit/333c566b88108de218d882840e61928a9b759d8f) is licensed under GNU AGPL v3 (http://www.gnu.org/licenses/agpl-3.0.html). -All code before commit 333c566b88108de218d882840e61928a9b759d8f on 2014/31/12 at 4:38 PM PST (https://github.com/tgstation/-tg-station/commit/333c566b88108de218d882840e61928a9b759d8f) is licensed under GNU GPL v3 (https://www.gnu.org/licenses/gpl-3.0.html). +All code before commit 333c566b88108de218d882840e61928a9b759d8f on 2014/31/12 at 4:38 PM PST (https://github.com/tgstation/tgstation/commit/333c566b88108de218d882840e61928a9b759d8f) is licensed under GNU GPL v3 (https://www.gnu.org/licenses/gpl-3.0.html). (Including tools unless their readme specifies otherwise.) See LICENSE-AGPLv3.txt and LICENSE-GPLv3.txt for more details. diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm index 0d13efc45a1..d7b57ad8021 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_ash_walker1.dmm @@ -1,6 +1,6 @@ "a" = (/turf/closed/mineral/volcanic/lava_land_surface,/area/lavaland/surface/outdoors) "b" = (/turf/open/floor/plating/asteroid/basalt/lava_land_surface,/area/lavaland/surface/outdoors) -"c" = (/turf/closed/wall/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/unpowered) +"c" = (/turf/closed/wall/mineral/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/unpowered) "d" = (/obj/effect/light_emitter,/mob/living/simple_animal/hostile/spawner/ash_walker,/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/unpowered) "e" = (/obj/effect/decal/cleanable/blood,/obj/effect/mob_spawn/human/ash_walker,/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/unpowered) "f" = (/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/unpowered) @@ -33,7 +33,7 @@ "G" = (/obj/item/weapon/twohanded/spear,/obj/structure/rack,/obj/item/weapon/twohanded/spear,/obj/item/weapon/twohanded/spear,/obj/item/weapon/twohanded/spear,/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/unpowered) "H" = (/obj/item/weapon/twohanded/spear,/obj/structure/rack,/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/unpowered) "I" = (/obj/structure/mineral_door/iron,/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth;blocks_air = 1},/area/ruin/unpowered) -"J" = (/turf/closed/wall/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/lavaland/surface/outdoors) +"J" = (/turf/closed/wall/mineral/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/lavaland/surface/outdoors) "K" = (/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth;initial_gas_mix = "o2=13;n2=24;TEMP=300"},/area/lavaland/surface/outdoors) "L" = (/obj/item/weapon/twohanded/spear,/obj/structure/table,/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/unpowered) "M" = (/obj/item/weapon/pickaxe,/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth;initial_gas_mix = "o2=13;n2=24;TEMP=300"},/area/lavaland/surface/outdoors) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_fountain_hall.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_fountain_hall.dmm index 6288a076004..8bb45a4dde7 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_fountain_hall.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_fountain_hall.dmm @@ -1,5 +1,5 @@ "a" = (/turf/template_noop,/area/template_noop) -"b" = (/turf/closed/wall/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/unpowered) +"b" = (/turf/closed/wall/mineral/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/unpowered) "c" = (/obj/structure/divine/healingfountain/anyone,/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/unpowered) "d" = (/obj/structure/divine/conduit,/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/unpowered) "e" = (/obj/structure/divine/sacrificealtar,/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/unpowered) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_greed.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_greed.dmm index 542e27d84dc..6f66a0086de 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_greed.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_greed.dmm @@ -1,7 +1,7 @@ "a" = (/turf/open/floor/plating/asteroid/basalt/lava_land_surface,/area/lavaland/surface/outdoors) "b" = (/turf/closed/mineral/volcanic/lava_land_surface,/area/lavaland/surface/outdoors) "c" = (/turf/open/floor/plating/lava/smooth/lava_land_surface,/area/lavaland/surface/outdoors) -"d" = (/turf/closed/wall/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered) +"d" = (/turf/closed/wall/mineral/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/ruin/powered) "e" = (/obj/structure/table/wood/poker,/obj/item/weapon/gun/projectile/revolver/russian/soul,/turf/open/floor/carpet{baseturf = /turf/open/floor/plating/lava/smooth; icon_state = "carpetsymbol"},/area/ruin/powered) "f" = (/obj/structure/cursed_slot_machine,/turf/open/floor/carpet{baseturf = /turf/open/floor/plating/lava/smooth; icon_state = "carpetsymbol"},/area/ruin/powered) "g" = (/obj/structure/table/wood/poker,/obj/item/weapon/coin/mythril,/turf/open/floor/carpet{baseturf = /turf/open/floor/plating/lava/smooth; icon_state = "carpetsymbol"},/area/ruin/powered) diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_survivalpod.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_survivalpod.dmm new file mode 100644 index 00000000000..5d7751cb668 --- /dev/null +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_survivalpod.dmm @@ -0,0 +1,372 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/template_noop, +/area/template_noop) +"b" = ( +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"c" = ( +/obj/structure/sign/mining/survival{ + pixel_y = -32 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"d" = ( +/turf/closed/wall/shuttle/survival/pod{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + }, +/area/ruin/powered) +"e" = ( +/obj/structure/sign/mining/survival{ + dir = 4; + icon_state = "survival"; + pixel_x = 32; + tag = "icon-survival (EAST)" + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"f" = ( +/obj/structure/fans, +/turf/open/floor/pod/dark{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + }, +/area/ruin/powered) +"g" = ( +/obj/machinery/smartfridge/survival_pod/empty, +/turf/open/floor/pod/dark{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + }, +/area/ruin/powered) +"h" = ( +/obj/item/device/gps/computer, +/obj/structure/tubes, +/turf/open/floor/pod/dark{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + }, +/area/ruin/powered) +"i" = ( +/obj/structure/sign/mining/survival{ + dir = 8; + icon_state = "survival"; + pixel_x = -32; + tag = "icon-survival (WEST)" + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"j" = ( +/obj/effect/decal/cleanable/blood/drip, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"k" = ( +/obj/machinery/sleeper/survival_pod, +/turf/open/floor/pod/dark{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + }, +/area/ruin/powered) +"l" = ( +/obj/item/weapon/pickaxe, +/obj/effect/decal/cleanable/blood, +/turf/open/floor/pod/dark{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + }, +/area/ruin/powered) +"m" = ( +/obj/structure/bed/pod, +/obj/item/weapon/bedsheet/black, +/obj/structure/tubes, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/pod/dark{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + }, +/area/ruin/powered) +"n" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"o" = ( +/obj/effect/decal/cleanable/blood, +/mob/living/simple_animal/hostile/asteroid/goliath/beast{ + health = 0 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"p" = ( +/obj/structure/table/survival_pod, +/obj/item/weapon/kitchen/knife/combat/survival, +/turf/open/floor/pod/dark{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + }, +/area/ruin/powered) +"q" = ( +/obj/effect/mob_spawn/human/miner/explorer{ + brute_damage = 150; + oxy_damage = 50 + }, +/obj/effect/decal/cleanable/blood, +/obj/effect/decal/cleanable/blood/drip, +/obj/effect/decal/cleanable/blood/footprints{ + tag = "icon-blood1 (NORTH)"; + icon_state = "blood1"; + dir = 1 + }, +/turf/open/floor/pod/dark{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + }, +/area/ruin/powered) +"r" = ( +/obj/structure/tubes, +/obj/item/weapon/crowbar, +/obj/effect/decal/cleanable/blood/drip, +/turf/open/floor/pod/dark{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + }, +/area/ruin/powered) +"s" = ( +/obj/effect/decal/cleanable/blood/footprints{ + icon_state = "blood1" + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"t" = ( +/obj/effect/decal/cleanable/blood/footprints{ + tag = "icon-blood1 (NORTH)"; + icon_state = "blood1"; + dir = 1 + }, +/obj/machinery/door/airlock/survival_pod, +/turf/open/floor/pod/dark{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + }, +/area/ruin/powered) +"u" = ( +/obj/effect/decal/cleanable/blood/footprints{ + tag = "icon-blood1 (WEST)"; + icon_state = "blood1"; + dir = 8 + }, +/obj/effect/decal/cleanable/blood/drip, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"v" = ( +/obj/effect/decal/cleanable/blood/footprints{ + tag = "icon-blood1 (WEST)"; + icon_state = "blood1"; + dir = 8 + }, +/obj/effect/decal/cleanable/blood/footprints{ + icon_state = "blood1" + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"w" = ( +/obj/structure/sign/mining/survival{ + pixel_y = 32 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"x" = ( +/obj/effect/decal/cleanable/blood/drip, +/obj/effect/decal/cleanable/blood/footprints{ + tag = "icon-blood1 (NORTH)"; + icon_state = "blood1"; + dir = 1 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"y" = ( +/obj/structure/sign/mining{ + pixel_y = 32 + }, +/obj/effect/decal/cleanable/blood/footprints{ + tag = "icon-blood1 (WEST)"; + icon_state = "blood1"; + dir = 8 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"z" = ( +/obj/effect/decal/cleanable/blood/footprints{ + tag = "icon-blood1 (WEST)"; + icon_state = "blood1"; + dir = 8 + }, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) +"A" = ( +/obj/effect/decal/cleanable/blood/footprints{ + icon_state = "blood1" + }, +/obj/effect/decal/cleanable/blood/drip, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) + +(1,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +"} +(2,1,1) = {" +a +a +a +a +b +b +b +b +b +a +a +a +"} +(3,1,1) = {" +a +a +a +b +b +e +b +e +b +b +a +a +"} +(4,1,1) = {" +a +a +a +b +d +d +d +d +d +b +a +a +"} +(5,1,1) = {" +a +a +b +c +d +f +k +p +d +w +b +b +"} +(6,1,1) = {" +a +a +b +b +d +g +l +q +t +x +b +b +"} +(7,1,1) = {" +a +b +b +c +d +h +m +r +d +y +b +b +"} +(8,1,1) = {" +a +a +b +b +d +d +d +d +d +z +j +j +"} +(9,1,1) = {" +a +a +a +b +b +i +b +i +u +A +b +b +"} +(10,1,1) = {" +a +a +a +b +b +j +n +s +v +a +a +a +"} +(11,1,1) = {" +a +a +a +a +a +a +o +j +b +a +a +a +"} +(12,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +"} diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_tomb.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_tomb.dmm new file mode 100644 index 00000000000..c4f10ea6087 --- /dev/null +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_tomb.dmm @@ -0,0 +1,852 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/template_noop, +/area/template_noop) +"b" = ( +/turf/closed/mineral/volcanic/lava_land_surface, +/area/lavaland/underground) +"c" = ( +/turf/template_noop, +/area/lavaland/underground) +"d" = ( +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/underground) +"e" = ( +/obj/effect/decal/remains/human, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/underground) +"f" = ( +/turf/open/floor/plating/lava/smooth/lava_land_surface, +/area/lavaland/underground) +"g" = ( +/turf/closed/indestructible/riveted{ + icon = 'icons/turf/walls/iron_wall.dmi'; + icon_state = "iron"; + name = "dense wall" + }, +/area/ruin/powered) +"h" = ( +/obj/structure/table, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + }, +/area/ruin/powered) +"i" = ( +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + }, +/area/ruin/powered) +"j" = ( +/mob/living/simple_animal/hostile/skeleton, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + }, +/area/ruin/powered) +"k" = ( +/obj/structure/bodycontainer/morgue{ + desc = "An oddly modernized tomb, at least compared to where it currently is."; + name = "tomb" + }, +/obj/effect/mob_spawn/human/skeleton, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + }, +/area/ruin/powered) +"l" = ( +/obj/item/weapon/grown/bananapeel, +/obj/structure/mineral_door/transparent/diamond, +/turf/open/floor/vault{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + }, +/area/ruin/powered) +"m" = ( +/obj/item/weapon/ore/diamond, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + }, +/area/ruin/powered) +"n" = ( +/turf/open/floor/vault{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + }, +/area/ruin/powered) +"o" = ( +/obj/item/weapon/ore/gold, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + }, +/area/ruin/powered) +"p" = ( +/turf/open/floor/plating/lava/smooth/lava_land_surface, +/area/ruin/powered) +"q" = ( +/obj/structure/table, +/obj/item/weapon/tome, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + }, +/area/ruin/powered) +"r" = ( +/obj/item/weapon/grown/bananapeel, +/obj/structure/mineral_door/silver, +/turf/open/floor/vault{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + }, +/area/ruin/powered) +"s" = ( +/obj/item/weapon/ore/bananium, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + }, +/area/ruin/powered) +"t" = ( +/obj/item/weapon/grown/bananapeel, +/obj/structure/mineral_door/gold, +/turf/open/floor/vault{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + }, +/area/ruin/powered) +"u" = ( +/obj/structure/table/optable/abductor{ + desc = "A strange, alien-like table for cutting up things, like people."; + name = "strange alien slab" + }, +/obj/effect/gibspawner/human, +/obj/effect/mob_spawn/human/skeleton, +/obj/item/weapon/veilrender/honkrender, +/obj/item/clothing/mask/gas/clown_hat, +/turf/open/floor/vault{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + }, +/area/ruin/powered) +"v" = ( +/obj/structure/table, +/obj/item/weapon/spellbook/oneuse/charge, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + }, +/area/ruin/powered) +"w" = ( +/obj/structure/bodycontainer/morgue{ + desc = "An oddly modernized tomb, at least compared to where it currently is."; + name = "tomb" + }, +/obj/effect/mob_spawn/human/skeleton{ + helmet = /obj/item/clothing/head/ushanka; + name = "russian remains"; + uniform = /obj/item/clothing/under/soviet + }, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + }, +/area/ruin/powered) +"x" = ( +/obj/item/weapon/ore/uranium, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + }, +/area/ruin/powered) +"y" = ( +/obj/item/weapon/ore/plasma, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + }, +/area/ruin/powered) +"z" = ( +/obj/item/weapon/grown/bananapeel, +/obj/structure/mineral_door/iron, +/turf/open/floor/vault{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + }, +/area/ruin/powered) +"A" = ( +/obj/structure/table, +/obj/item/weapon/twohanded/spear, +/obj/item/weapon/shield/riot/buckler, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + }, +/area/ruin/powered) +"B" = ( +/obj/item/weapon/grown/bananapeel, +/obj/structure/mineral_door/iron, +/turf/open/floor/plasteel/black{ + baseturf = /turf/open/floor/plating/lava/smooth/lava_land_surface + }, +/area/ruin/powered) + +(1,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +b +b +b +a +a +a +a +a +a +a +a +a +a +a +"} +(2,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +b +d +d +e +d +b +b +d +a +a +a +a +a +a +"} +(3,1,1) = {" +a +a +a +a +a +a +a +a +d +b +b +b +e +b +b +b +b +b +e +d +d +a +a +a +a +"} +(4,1,1) = {" +a +a +a +b +a +e +d +d +b +g +g +g +g +g +g +g +g +g +b +f +f +d +a +a +a +"} +(5,1,1) = {" +a +a +a +b +b +d +d +e +b +g +k +h +j +k +j +v +w +g +b +b +f +d +a +a +a +"} +(6,1,1) = {" +a +a +b +b +b +d +f +b +g +g +j +i +i +i +i +i +j +g +b +f +f +e +d +a +a +"} +(7,1,1) = {" +a +a +b +b +b +e +b +g +g +g +g +g +r +g +r +g +g +g +g +e +b +b +b +a +a +"} +(8,1,1) = {" +a +b +b +b +g +g +g +g +g +m +n +n +n +i +n +n +n +x +g +g +b +b +b +b +b +"} +(9,1,1) = {" +a +b +b +b +g +h +i +j +g +n +m +n +n +i +n +n +x +n +g +g +g +g +g +b +b +"} +(10,1,1) = {" +a +a +b +b +g +i +k +i +g +n +i +p +p +i +p +p +i +n +g +A +A +A +g +b +b +"} +(11,1,1) = {" +a +a +c +d +g +i +i +i +g +n +p +i +p +i +p +i +p +n +g +i +i +i +g +b +b +"} +(12,1,1) = {" +a +a +b +e +g +j +i +i +l +n +p +p +n +s +n +p +p +n +z +i +j +i +B +b +b +"} +(13,1,1) = {" +a +a +b +b +g +i +k +i +g +i +i +i +s +u +s +i +i +i +g +i +i +i +g +d +d +"} +(14,1,1) = {" +a +a +b +b +g +j +i +i +l +n +p +p +n +s +n +p +p +n +z +i +j +i +B +b +b +"} +(15,1,1) = {" +a +a +b +b +g +i +i +i +g +n +p +i +p +i +p +i +p +n +g +i +i +i +g +b +b +"} +(16,1,1) = {" +a +a +b +e +g +i +k +i +g +n +i +p +p +i +p +p +i +n +g +A +A +A +g +b +b +"} +(17,1,1) = {" +a +a +b +d +g +h +i +j +g +n +o +n +n +i +n +n +y +n +g +g +g +g +g +b +b +"} +(18,1,1) = {" +a +a +b +f +g +g +g +g +g +o +n +n +n +i +n +n +n +y +g +g +b +e +b +b +b +"} +(19,1,1) = {" +a +a +b +d +b +b +d +g +g +g +g +g +t +g +t +g +g +g +g +b +e +d +d +d +d +"} +(20,1,1) = {" +a +a +a +a +b +b +e +d +g +g +k +q +i +k +i +h +k +g +b +b +d +f +d +a +a +"} +(21,1,1) = {" +a +a +a +a +a +b +b +e +d +g +j +i +j +i +j +i +j +g +b +e +d +a +a +a +a +"} +(22,1,1) = {" +a +a +a +a +a +b +b +b +d +g +g +g +g +g +g +g +g +g +b +b +b +a +a +a +a +"} +(23,1,1) = {" +a +a +a +a +a +d +b +b +f +b +b +b +b +b +e +f +b +b +b +b +b +a +a +a +a +"} +(24,1,1) = {" +a +a +a +a +a +a +a +a +a +b +b +d +e +b +b +d +d +b +b +a +a +a +a +a +a +"} +(25,1,1) = {" +a +a +a +a +a +a +a +a +a +a +b +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} diff --git a/_maps/RandomZLevels/caves.dmm b/_maps/RandomZLevels/caves.dmm index 0eac402bedb..b3e84ff5c62 100644 --- a/_maps/RandomZLevels/caves.dmm +++ b/_maps/RandomZLevels/caves.dmm @@ -21,7 +21,7 @@ "au" = (/obj/structure/cult/talisman,/obj/effect/decal/remains/human,/obj/item/stack/sheet/runed_metal{amount = 25},/obj/item/weapon/veilrender/honkrender,/obj/item/clothing/mask/gas/clown_hat,/obj/item/organ/internal/heart/demon,/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth; initial_gas_mix = "n2=23;o2=14"},/area/awaymission/BMPship{name = "\improper BMP Asteroid Level 4"}) "av" = (/obj/structure/divine/trap/stun{desc = "A rune inscribed in the floor, the air feeling electrified around it."; name = "shock rune"},/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth; initial_gas_mix = "n2=23;o2=14"},/area/awaymission/BMPship{name = "\improper BMP Asteroid Level 4"}) "aw" = (/obj/effect/decal/remains/human,/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth; initial_gas_mix = "n2=23;o2=14"},/area/awaymission/BMPship{name = "\improper BMP Asteroid Level 4"}) -"ax" = (/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth; initial_gas_mix = "n2=23;o2=14"},/turf/closed/wall/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/awaymission/BMPship{name = "\improper BMP Asteroid Level 4"}) +"ax" = (/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth; initial_gas_mix = "n2=23;o2=14"},/turf/closed/wall/mineral/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/awaymission/BMPship{name = "\improper BMP Asteroid Level 4"}) "ay" = (/obj/structure/cult/tome,/obj/item/weapon/tome,/obj/item/stack/sheet/runed_metal{amount = 25},/obj/item/weapon/coin/antagtoken,/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth; initial_gas_mix = "n2=23;o2=14"},/area/awaymission/BMPship{name = "\improper BMP Asteroid Level 4"}) "az" = (/obj/structure/constructshell,/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth; initial_gas_mix = "n2=23;o2=14"},/area/awaymission/BMPship{name = "\improper BMP Asteroid Level 4"}) "aA" = (/obj/structure/cultgirder,/obj/item/stack/sheet/runed_metal,/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth; initial_gas_mix = "n2=23;o2=14"},/area/awaymission/BMPship{name = "\improper BMP Asteroid Level 4"}) @@ -53,7 +53,7 @@ "ba" = (/obj/structure/cult/talisman,/obj/item/weapon/plasma_fist_scroll,/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth; initial_gas_mix = "n2=23;o2=14"},/area/awaymission/BMPship{name = "\improper BMP Asteroid Level 4"}) "bb" = (/mob/living/simple_animal/hostile/poison/giant_spider/hunter,/turf/open/floor/plating/asteroid/basalt{initial_gas_mix = "n2=23;o2=14"},/area/awaymission/BMPship{name = "\improper BMP Asteroid Level 3"}) "bc" = (/obj/effect/spider/stickyweb,/turf/open/floor/plating/asteroid/basalt{initial_gas_mix = "n2=23;o2=14"},/area/awaymission/BMPship{name = "\improper BMP Asteroid Level 3"}) -"bd" = (/turf/open/floor/plating/asteroid/basalt/lava{initial_gas_mix = "n2=23;o2=14"},/turf/closed/wall/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/awaymission/BMPship{name = "\improper BMP Asteroid Level 4"}) +"bd" = (/turf/open/floor/plating/asteroid/basalt/lava{initial_gas_mix = "n2=23;o2=14"},/turf/closed/wall/mineral/cult{baseturf = /turf/open/floor/plating/lava/smooth},/area/awaymission/BMPship{name = "\improper BMP Asteroid Level 4"}) "be" = (/mob/living/simple_animal/hostile/spawner/mining/goliath,/turf/open/floor/plating/asteroid/basalt{initial_gas_mix = "n2=23;o2=14"},/area/awaymission/BMPship{name = "\improper BMP Asteroid Level 3"}) "bf" = (/obj/effect/decal/cleanable/blood,/turf/open/floor/engine/cult{baseturf = /turf/open/floor/plating/lava/smooth; initial_gas_mix = "n2=23;o2=14"},/area/awaymission/BMPship{name = "\improper BMP Asteroid Level 4"}) "bg" = (/mob/living/simple_animal/hostile/poison/giant_spider/nurse,/turf/open/floor/plating/asteroid/basalt{initial_gas_mix = "n2=23;o2=14"},/area/awaymission/BMPship{name = "\improper BMP Asteroid Level 3"}) diff --git a/_maps/map_files/AsteroidStation/AsteroidStation.dmm b/_maps/map_files/AsteroidStation/AsteroidStation.dmm index 7aa34319ef8..ca889ab1ac7 100644 --- a/_maps/map_files/AsteroidStation/AsteroidStation.dmm +++ b/_maps/map_files/AsteroidStation/AsteroidStation.dmm @@ -488,9 +488,8 @@ /turf/closed/mineral/random, /area/mine/explored) "abg" = ( -/obj/machinery/sleeper{ - icon_state = "sleeper-open"; - dir = 4 +/obj/machinery/sleeper/syndie{ + dir = 4 }, /turf/open/floor/plasteel/shuttle{ icon_state = "shuttlefloor4" diff --git a/_maps/map_files/BirdStation/BirdStation.dmm b/_maps/map_files/BirdStation/BirdStation.dmm index 23fe48b8871..c15747c8fc1 100644 --- a/_maps/map_files/BirdStation/BirdStation.dmm +++ b/_maps/map_files/BirdStation/BirdStation.dmm @@ -56,7 +56,7 @@ "abd" = (/obj/machinery/door/window{dir = 4; name = "Infirmary"; req_access_txt = "150"},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) "abe" = (/obj/machinery/door/window/westright{name = "Tool Storage"; req_access_txt = "150"},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) "abf" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/syndicate,/obj/item/weapon/crowbar/red,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) -"abg" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 4},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) +"abg" = (/obj/machinery/sleeper/syndie{dir = 4},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) "abh" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Infirmary"; req_access_txt = "150"},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) "abi" = (/obj/machinery/door/window{dir = 8; name = "Tool Storage"; req_access_txt = "150"},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) "abj" = (/obj/structure/table,/obj/item/weapon/gun/syringe{pixel_x = 1; pixel_y = 2},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/syndicate) diff --git a/_maps/map_files/DreamStation/dreamstation04.dmm b/_maps/map_files/DreamStation/dreamstation04.dmm index 801662b4f4d..a2c597f1c0a 100644 --- a/_maps/map_files/DreamStation/dreamstation04.dmm +++ b/_maps/map_files/DreamStation/dreamstation04.dmm @@ -15,10 +15,7 @@ /area/space) "aad" = ( /obj/structure/lattice, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /turf/open/space, /area/space) "aae" = ( @@ -2971,8 +2968,7 @@ }, /area/shuttle/syndicate) "afH" = ( -/obj/machinery/sleeper{ - icon_state = "sleeper-open"; +/obj/machinery/sleeper/syndie{ dir = 4 }, /turf/open/floor/plasteel/shuttle{ @@ -7678,10 +7674,7 @@ tag = "icon-2-5"; icon_state = "2-5" }, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /turf/open/floor/plating/airless, /area/engine/engineering) "aql" = ( @@ -11496,10 +11489,7 @@ tag = "icon-1-2"; icon_state = "1-2" }, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/effect/spawner/lootdrop{ loot = list(/obj/item/stack/sheet/metal = 1, /obj/item/stack/rods = 2, /obj/item/weapon/shard = 2, "" = 3); lootcount = 2; @@ -12196,10 +12186,7 @@ tag = "icon-2-4"; icon_state = "2-4" }, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, @@ -12347,10 +12334,7 @@ tag = "icon-1-8"; icon_state = "1-8" }, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -13394,6 +13378,7 @@ pixel_x = 0; pixel_y = 0 }, +/obj/machinery/portable_atmospherics/canister/bz, /turf/open/floor/plasteel{ tag = "icon-escape (NORTH)"; icon_state = "escape"; @@ -13646,10 +13631,7 @@ /turf/open/floor/plating, /area/maintenance/asmaint) "aBz" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/effect/spawner/lootdrop{ loot = list(/obj/item/stack/sheet/metal = 1, /obj/item/stack/rods = 2, /obj/item/weapon/shard = 2, "" = 3); lootcount = 2; @@ -14374,10 +14356,7 @@ tag = "icon-1-2"; icon_state = "1-2" }, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ tag = "icon-manifold-b-f (EAST)"; dir = 4 @@ -15969,10 +15948,7 @@ /turf/closed/wall/r_wall, /area/engine/engine_smes) "aGe" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, /area/maintenance/aft) @@ -19423,10 +19399,7 @@ }, /area/engine/engineering) "aNv" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -26679,10 +26652,7 @@ /turf/open/floor/plating, /area/maintenance/asmaint) "bbe" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/item/weapon/shard, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -28183,10 +28153,7 @@ /turf/open/floor/plating, /area/maintenance/asmaint) "bed" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/structure/cable/green{ tag = "icon-4-8"; icon_state = "4-8" @@ -28648,10 +28615,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/item/weapon/shard, /turf/open/floor/plating, /area/maintenance/atmos_control) @@ -28661,10 +28625,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/effect/spawner/lootdrop{ loot = list(/obj/item/stack/sheet/metal = 1, /obj/item/stack/rods = 2, /obj/item/weapon/shard = 2, "" = 3); lootcount = 2; @@ -28969,10 +28930,7 @@ /turf/open/floor/plating, /area/maintenance/asmaint) "bfB" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/item/weapon/shard{ icon_state = "medium" }, @@ -36382,10 +36340,7 @@ /area/engine/gravity_generator) "btm" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /turf/open/floor/plating, /area/maintenance/fsmaint2) "btn" = ( @@ -36920,10 +36875,7 @@ tag = "icon-1-6"; icon_state = "1-6" }, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /turf/open/floor/plating/airless, /area/engine/engineering) "buj" = ( @@ -48257,10 +48209,7 @@ /turf/open/floor/plating, /area/maintenance/fpmaint) "bOb" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/item/weapon/shard{ icon_state = "medium" }, @@ -50377,10 +50326,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /turf/open/floor/plating, /area/maintenance/fsmaint2) "bSf" = ( @@ -57203,10 +57149,7 @@ /turf/closed/wall/rust, /area/storage/emergency2) "cfk" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, /area/maintenance/fsmaint) @@ -57947,10 +57890,7 @@ /turf/closed/wall, /area/maintenance/fsmaint) "cgP" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/meter, /obj/effect/spawner/lootdrop{ @@ -58575,10 +58515,7 @@ /turf/open/floor/plating, /area/maintenance/apmaint) "chV" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -59544,10 +59481,7 @@ tag = "icon-4-8"; icon_state = "4-8" }, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -60472,10 +60406,7 @@ tag = "icon-1-4"; icon_state = "1-4" }, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/item/device/assembly/mousetrap/armed, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -62381,10 +62312,7 @@ tag = "icon-4-8"; icon_state = "4-8" }, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/effect/spawner/lootdrop{ loot = list(/obj/item/stack/sheet/metal = 1, /obj/item/stack/rods = 2); name = "random metal material damage spawner" @@ -62637,10 +62565,7 @@ /turf/open/floor/plating, /area/maintenance/fsmaint) "cpH" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/item/device/assembly/mousetrap, /obj/item/trash/deadmouse, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -64086,10 +64011,7 @@ /turf/open/floor/plating, /area/maintenance/fsmaint) "csA" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -64139,17 +64061,11 @@ /turf/open/floor/plating, /area/maintenance/portsolar) "csH" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /turf/open/floor/plating, /area/maintenance/fsmaint) "csI" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /turf/open/floor/plating{ broken = 1; icon_state = "platingdmg1" @@ -64296,10 +64212,7 @@ tag = "icon-1-2"; icon_state = "1-2" }, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, /area/maintenance/fsmaint) @@ -64934,10 +64847,7 @@ tag = "icon-4-8"; icon_state = "4-8" }, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -64951,10 +64861,7 @@ tag = "icon-4-8"; icon_state = "4-8" }, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/item/device/assembly/mousetrap/armed, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -70349,6 +70256,7 @@ dir = 4; network = list("SS13","Sci") }, +/obj/machinery/portable_atmospherics/canister/bz, /turf/open/floor/plasteel{ icon_state = "floorgrime" }, @@ -70904,10 +70812,7 @@ }, /area/maintenance/asmaint2) "cFf" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/effect/spawner/lootdrop{ loot = list(/obj/item/stack/sheet/metal = 1, /obj/item/stack/rods = 2, /obj/item/weapon/shard = 2, "" = 3); lootcount = 2; @@ -70931,6 +70836,7 @@ icon_state = "tube1"; dir = 8 }, +/obj/machinery/portable_atmospherics/canister/bz, /turf/open/floor/plasteel{ icon_state = "floorgrime" }, @@ -71329,10 +71235,7 @@ tag = "icon-4-8"; icon_state = "4-8" }, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/effect/spawner/lootdrop{ loot = list(/obj/item/stack/sheet/metal = 1, /obj/item/stack/rods = 2, /obj/item/weapon/shard = 2, "" = 3); lootcount = 2; @@ -71842,10 +71745,7 @@ /turf/open/floor/plating, /area/maintenance/apmaint) "cGI" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/effect/spawner/lootdrop{ loot = list(/obj/item/stack/sheet/metal = 1, /obj/item/stack/rods = 2, /obj/item/weapon/shard = 2, "" = 3); lootcount = 2; @@ -73195,10 +73095,7 @@ /turf/open/floor/plating, /area/maintenance/asmaint2) "cJa" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/effect/spawner/lootdrop/maintenance{ lootcount = 2; name = "2maintenance loot spawner" @@ -73226,10 +73123,7 @@ /turf/open/floor/plating, /area/maintenance/asmaint2) "cJc" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/item/weapon/shard, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -73774,10 +73668,7 @@ tag = "icon-1-2"; icon_state = "1-2" }, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/effect/spawner/lootdrop{ loot = list(/obj/item/stack/sheet/metal = 1, /obj/item/stack/rods = 2, /obj/item/weapon/shard = 2, "" = 3); lootcount = 2; @@ -73861,10 +73752,7 @@ "cKl" = ( /obj/structure/lattice, /obj/structure/lattice, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /turf/open/space, /area/space) "cKm" = ( @@ -73913,10 +73801,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/effect/spawner/lootdrop{ loot = list(/obj/item/stack/sheet/metal = 1, /obj/item/stack/rods = 2, /obj/item/weapon/shard = 2, "" = 3); lootcount = 2; @@ -73944,10 +73829,7 @@ }, /area/maintenance/apmaint) "cKu" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /turf/open/floor/plating, /area/maintenance/apmaint) "cKv" = ( @@ -74173,10 +74055,7 @@ tag = "icon-4-8"; icon_state = "4-8" }, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/effect/spawner/lootdrop{ loot = list(/obj/item/stack/sheet/metal = 1, /obj/item/stack/rods = 2, /obj/item/weapon/shard = 2, "" = 3); lootcount = 2; @@ -75307,10 +75186,7 @@ /turf/open/floor/plating, /area/maintenance/asmaint2) "cNe" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/item/weapon/shard{ icon_state = "small" }, @@ -75417,10 +75293,7 @@ /turf/open/floor/plating, /area/toxins/xenobiology) "cNn" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/effect/spawner/lootdrop{ loot = list(/obj/item/stack/sheet/metal = 1, /obj/item/stack/rods = 2); name = "random metal material damage spawner" @@ -75428,10 +75301,7 @@ /turf/open/floor/plating, /area/maintenance/asmaint2) "cNo" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/item/weapon/wrench, /turf/open/floor/plating, /area/maintenance/asmaint2) diff --git a/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm b/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm index f030f88a39d..cfece55a966 100644 --- a/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm +++ b/_maps/map_files/EfficiencyStation/EfficiencyStation.dmm @@ -2176,8 +2176,7 @@ name = "AI Satellite Service" }) "adT" = ( -/obj/machinery/sleeper{ - icon_state = "sleeper-open"; +/obj/machinery/sleeper/syndie{ dir = 4 }, /turf/open/floor/plasteel/shuttle{ @@ -8556,10 +8555,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, @@ -26523,6 +26519,7 @@ /obj/machinery/camera{ c_tag = "Atmospherics Monitoring" }, +/obj/machinery/portable_atmospherics/canister/bz, /turf/open/floor/plasteel{ icon_state = "cautioncorner"; dir = 1 @@ -35039,10 +35036,7 @@ /obj/item/weapon/shard{ icon_state = "medium" }, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/maintenance/fpmaint{ @@ -36486,10 +36480,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/item/stack/rods, /obj/structure/disposalpipe/segment{ dir = 1; @@ -37324,7 +37315,7 @@ }, /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater, /obj/item/weapon/nullrod, -/obj/item/device/soulstone/anybody, +/obj/item/device/soulstone/anybody/chaplain, /turf/open/floor/plasteel{ icon_state = "grimy" }, @@ -38555,10 +38546,7 @@ /turf/open/floor/plating, /area/maintenance/fsmaint2) "bsw" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/effect/decal/cleanable/oil{ icon_state = "floor6" }, @@ -40620,10 +40608,7 @@ /turf/open/floor/plating, /area/maintenance/fsmaint2) "bwr" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/effect/decal/cleanable/ash, /turf/open/floor/plating, /area/maintenance/fsmaint2) @@ -40702,10 +40687,7 @@ on = 1; pressure_checks = 1 }, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /turf/open/floor/plating, /area/maintenance/fsmaint2) "bwB" = ( @@ -46061,10 +46043,7 @@ d2 = 8; icon_state = "1-8" }, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/item/stack/rods, /turf/open/floor/plating, /area/maintenance/starboard) @@ -61750,6 +61729,12 @@ icon_state = "diagonalWall3" }, /area/shuttle/syndicate) +"ckj" = ( +/obj/machinery/portable_atmospherics/canister/bz, +/turf/open/floor/plasteel{ + icon_state = "floorgrime" + }, +/area/toxins/storage) (1,1,1) = {" aaa @@ -89101,7 +89086,7 @@ aze aAw aBE aCO -aFp +ckj aFn aGo aCO diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index e165b51f680..37d91dd73ba 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -52,10 +52,7 @@ /turf/open/floor/plating/airless, /area/solar/auxport) "aai" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/structure/lattice, /turf/open/space, /area/space) @@ -401,8 +398,11 @@ /turf/open/floor/plating/airless, /area/solar/auxstarboard) "aaQ" = ( -/turf/open/space, -/area/security/prison) +/obj/machinery/portable_atmospherics/canister/air, +/turf/open/floor/plasteel{ + icon_state = "bot" + }, +/area/atmos) "aaR" = ( /obj/machinery/hydroponics/constructable, /obj/item/weapon/cultivator, @@ -590,9 +590,9 @@ d2 = 8; icon_state = "4-8" }, -/obj/structure/flora/kirbyplants{ - icon_state = "plant-13" - }, +/obj/structure/easel, +/obj/item/weapon/canvas/twentythreeXtwentythree, +/obj/item/weapon/canvas/twentythreeXtwentythree, /turf/open/floor/plasteel{ icon_state = "floorgrime" }, @@ -607,6 +607,7 @@ icon_state = "1-2" }, /obj/item/weapon/pen, +/obj/item/weapon/storage/crayons, /turf/open/floor/plasteel{ icon_state = "floorgrime" }, @@ -1417,6 +1418,9 @@ dir = 1; initialize_directions = 11 }, +/obj/structure/flora/kirbyplants{ + icon_state = "plant-13" + }, /turf/open/floor/plasteel{ icon_state = "floorgrime" }, @@ -5422,8 +5426,11 @@ }, /area/security/range) "aiT" = ( -/turf/open/floor/plating, -/area/maintenance/fore) +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/floor/plasteel{ + icon_state = "bot" + }, +/area/atmos) "aiU" = ( /obj/structure/chair/stool{ pixel_y = 8 @@ -7925,7 +7932,7 @@ dir = 8 }, /obj/machinery/conveyor{ - dir = 9; + dir = 2; id = "garbage" }, /turf/open/floor/plating, @@ -7938,6 +7945,10 @@ /turf/open/floor/plating, /area/maintenance/disposal) "amW" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "garbage" + }, /obj/machinery/door/window/eastright{ base_state = "left"; dir = 4; @@ -7945,11 +7956,6 @@ name = "Danger: Conveyor Access"; req_access_txt = "12" }, -/obj/machinery/conveyor{ - dir = 6; - id = "garbage"; - verted = -1 - }, /turf/open/floor/plating, /area/maintenance/disposal) "amX" = ( @@ -8592,8 +8598,7 @@ req_access_txt = "12" }, /obj/machinery/conveyor{ - dir = 10; - icon_state = "conveyor0"; + dir = 2; id = "garbage" }, /turf/open/floor/plating, @@ -9530,12 +9535,22 @@ name = "Port Maintenance" }) "apF" = ( -/turf/open/floor/plating{ - icon_state = "platingdmg3" +/obj/structure/rack{ + dir = 8; + layer = 2.9 }, -/area/maintenance/fpmaint2{ - name = "Port Maintenance" - }) +/obj/item/weapon/circuitboard/computer/secure_data{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/weapon/circuitboard/computer/security{ + pixel_x = 1; + pixel_y = -1 + }, +/turf/open/floor/plasteel{ + icon_state = "dark" + }, +/area/storage/tech) "apG" = ( /obj/machinery/light_construct/small{ dir = 4 @@ -9554,11 +9569,19 @@ name = "Port Maintenance" }) "apI" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plating, -/area/maintenance/fpmaint2{ - name = "Port Maintenance" - }) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/sign/kiddieplaque{ + desc = "A long list of rules to be followed when in the library, extolling the virtues of being quiet at all times and threatening those who would dare eat hot food inside."; + name = "Library Rules Sign"; + pixel_y = -32 + }, +/turf/open/floor/plasteel{ + dir = 8; + icon_state = "neutralcorner" + }, +/area/hallway/primary/port) "apJ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 @@ -10160,10 +10183,7 @@ /area/maintenance/auxsolarstarboard) "aqJ" = ( /obj/structure/lattice, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /turf/open/space, /area/space) "aqK" = ( @@ -13475,19 +13495,15 @@ }, /area/maintenance/starboard) "avT" = ( -/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/pipe/manifold/scrubbers/hidden{ + dir = 1; + initialize_directions = 11 }, -/turf/open/floor/plating{ - icon_state = "warnplate"; - dir = 4 +/turf/open/floor/plasteel{ + dir = 8; + icon_state = "neutralcorner" }, -/area/maintenance/starboard) +/area/hallway/primary/port) "avU" = ( /obj/structure/closet/crate, /obj/item/stack/sheet/metal{ @@ -14199,15 +14215,18 @@ }, /area/engine/gravity_generator) "awY" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'RADIOACTIVE AREA'"; - icon_state = "radiation"; - name = "RADIOACTIVE AREA"; - pixel_x = 0; - pixel_y = 0 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 }, -/turf/closed/wall/r_wall, -/area/maintenance/starboard) +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/turf/open/floor/plasteel{ + dir = 8; + icon_state = "neutralcorner" + }, +/area/hallway/primary/port) "awZ" = ( /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance, @@ -15643,13 +15662,12 @@ /turf/open/floor/plating/airless, /area/engine/engineering) "azv" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE" +/obj/structure/flora/kirbyplants{ + icon_state = "plant-22" }, -/turf/closed/wall/r_wall, -/area/engine/engineering) +/obj/effect/decal/cleanable/cobweb2, +/turf/open/floor/wood, +/area/library) "azw" = ( /obj/structure/grille, /turf/open/floor/plating/airless, @@ -16604,13 +16622,20 @@ /turf/open/floor/plating/airless, /area/engine/engineering) "aAQ" = ( -/obj/machinery/camera/emp_proof{ - c_tag = "Fore Arm - Far"; - dir = 8; - network = list("Singulo") +/obj/structure/table/wood, +/obj/item/device/flashlight/lamp/green{ + pixel_x = 1; + pixel_y = 5 }, -/turf/open/floor/plating/airless, -/area/engine/engineering) +/obj/machinery/computer/security/telescreen/entertainment{ + pixel_y = 30 + }, +/obj/effect/decal/cleanable/cobweb, +/turf/open/floor/plasteel{ + icon_state = "cult"; + dir = 2 + }, +/area/library) "aAR" = ( /obj/machinery/door/airlock/shuttle{ name = "Mining Shuttle Airlock"; @@ -19977,15 +20002,19 @@ /turf/open/floor/plating/airless, /area/space) "aGc" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'RADIOACTIVE AREA'"; - icon_state = "radiation"; - name = "RADIOACTIVE AREA"; +/obj/structure/table/wood, +/obj/machinery/newscaster{ pixel_x = 0; - pixel_y = 0 + pixel_y = 32 }, -/turf/closed/wall/r_wall, -/area/space) +/obj/item/weapon/folder, +/obj/item/weapon/folder, +/obj/effect/decal/cleanable/cobweb2, +/turf/open/floor/plasteel{ + icon_state = "cult"; + dir = 2 + }, +/area/library) "aGd" = ( /obj/structure/grille, /obj/structure/window/reinforced/fulltile, @@ -24782,8 +24811,12 @@ }, /area/engine/engineering) "aOo" = ( -/turf/open/floor/plating, -/area/maintenance/starboard) +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/open/floor/carpet, +/area/library) "aOp" = ( /turf/open/floor/plating{ icon_plating = "warnplate"; @@ -31729,7 +31762,12 @@ /obj/structure/rack, /obj/item/weapon/circuitboard/machine/telecomms/processor, /obj/item/weapon/circuitboard/machine/telecomms/receiver, -/obj/machinery/computer/telecomms/server, +/obj/item/weapon/circuitboard/machine/telecomms/server, +/obj/item/weapon/circuitboard/machine/telecomms/bus, +/obj/item/weapon/circuitboard/machine/telecomms/broadcaster, +/obj/item/weapon/circuitboard/computer/message_monitor{ + pixel_y = -5 + }, /turf/open/floor/plasteel{ icon_state = "dark" }, @@ -32781,11 +32819,17 @@ }, /area/security/checkpoint/engineering) "bbn" = ( -/obj/machinery/door/airlock/external{ - name = "South Containment Arm Access" +/obj/structure/closet/emcloset, +/obj/machinery/status_display{ + density = 0; + layer = 4; + pixel_x = -32; + pixel_y = 0 }, -/turf/open/floor/plating, -/area/engine/engineering) +/turf/open/floor/plasteel{ + icon_state = "dark" + }, +/area/hallway/primary/central) "bbo" = ( /obj/machinery/space_heater, /obj/effect/decal/cleanable/cobweb2, @@ -33789,9 +33833,16 @@ dir = 8; layer = 2.9 }, +/obj/item/weapon/circuitboard/computer/borgupload{ + pixel_x = -1; + pixel_y = 1 + }, +/obj/item/weapon/circuitboard/computer/aiupload{ + pixel_x = 2; + pixel_y = -2 + }, /turf/open/floor/plasteel{ - icon_state = "vault"; - dir = 4 + icon_state = "dark" }, /area/storage/tech) "bcK" = ( @@ -33809,7 +33860,8 @@ dir = 4 }, /turf/open/floor/plasteel{ - icon_state = "dark" + icon_state = "vault"; + dir = 8 }, /area/storage/tech) "bcL" = ( @@ -33817,7 +33869,8 @@ dir = 8 }, /turf/open/floor/plasteel{ - icon_state = "dark" + icon_state = "vault"; + dir = 8 }, /area/storage/tech) "bcM" = ( @@ -33825,6 +33878,16 @@ dir = 8; layer = 2.9 }, +/obj/item/weapon/circuitboard/computer/cloning{ + pixel_x = 0 + }, +/obj/item/weapon/circuitboard/computer/med_data{ + pixel_x = 3; + pixel_y = -3 + }, +/obj/item/weapon/circuitboard/machine/clonescanner, +/obj/item/weapon/circuitboard/machine/clonepod, +/obj/item/weapon/circuitboard/computer/scan_consolenew, /turf/open/floor/plasteel{ icon_state = "dark" }, @@ -33837,6 +33900,18 @@ dir = 8; layer = 2.9 }, +/obj/item/weapon/circuitboard/computer/powermonitor{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/weapon/circuitboard/computer/stationalert{ + pixel_x = 1; + pixel_y = -1 + }, +/obj/item/weapon/circuitboard/computer/atmos_alert{ + pixel_x = 3; + pixel_y = -3 + }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel{ icon_state = "dark" @@ -34523,9 +34598,20 @@ dir = 8; layer = 2.9 }, +/obj/item/weapon/circuitboard/computer/crew{ + pixel_x = -1; + pixel_y = 1 + }, +/obj/item/weapon/circuitboard/computer/card{ + pixel_x = 2; + pixel_y = -2 + }, +/obj/item/weapon/circuitboard/computer/communications{ + pixel_x = 5; + pixel_y = -5 + }, /turf/open/floor/plasteel{ - icon_state = "vault"; - dir = 8 + icon_state = "dark" }, /area/storage/tech) "bea" = ( @@ -35444,9 +35530,16 @@ dir = 8; layer = 2.9 }, +/obj/item/weapon/circuitboard/computer/robotics{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/weapon/circuitboard/computer/mecha_control{ + pixel_x = 1; + pixel_y = -1 + }, /turf/open/floor/plasteel{ - icon_state = "vault"; - dir = 1 + icon_state = "dark" }, /area/storage/tech) "bfE" = ( @@ -35454,7 +35547,8 @@ dir = 4 }, /turf/open/floor/plasteel{ - icon_state = "dark" + icon_state = "vault"; + dir = 8 }, /area/storage/tech) "bfF" = ( @@ -41321,10 +41415,15 @@ /area/engine/break_room) "boU" = ( /obj/structure/table/glass, +/obj/item/device/lightreplacer{ + pixel_y = 7 + }, /turf/open/floor/plasteel, /area/engine/break_room) "boV" = ( -/obj/item/weapon/reagent_containers/food/drinks/soda_cans/thirteenloko, +/obj/item/weapon/reagent_containers/food/drinks/soda_cans/thirteenloko{ + pixel_y = 4 + }, /obj/structure/table/glass, /turf/open/floor/plasteel, /area/engine/break_room) @@ -45160,10 +45259,6 @@ dir = 4 }, /obj/machinery/light, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, /turf/open/floor/plasteel{ dir = 8; icon_state = "neutralcorner" @@ -46064,14 +46159,17 @@ /turf/closed/wall, /area/library) "bwi" = ( -/obj/structure/grille, -/obj/structure/window/fulltile, -/turf/open/floor/plating, -/area/library) +/obj/structure/closet/firecloset, +/turf/open/floor/plasteel{ + icon_state = "dark" + }, +/area/hallway/primary/central) "bwj" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass{ - name = "Library" +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/door/airlock/centcom{ + name = "Library"; + opacity = 1 }, /turf/open/floor/wood, /area/library) @@ -46080,8 +46178,9 @@ req_access_txt = 1 }, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass{ - name = "Library" +/obj/machinery/door/airlock/centcom{ + name = "Library"; + opacity = 1 }, /turf/open/floor/wood, /area/library) @@ -47217,14 +47316,15 @@ }) "byd" = ( /obj/structure/table/wood, -/obj/item/device/flashlight/lamp/green{ - pixel_x = 1; - pixel_y = 5 - }, /obj/machinery/computer/security/telescreen/entertainment{ pixel_x = -32; pixel_y = 0 }, +/obj/effect/decal/cleanable/cobweb, +/obj/item/device/flashlight/lamp/green{ + pixel_x = 1; + pixel_y = 5 + }, /turf/open/floor/wood, /area/library) "bye" = ( @@ -49525,11 +49625,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ req_access_txt = 1 }, -/obj/item/device/radio/intercom{ - dir = 4; - name = "Station Intercom (General)"; - pixel_x = 27 - }, /turf/open/floor/carpet, /area/library) "bBK" = ( @@ -49554,20 +49649,9 @@ /area/library) "bBM" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/item/device/radio/intercom{ - freerange = 1; - frequency = 1459; - name = "Station Intercom (General)"; - pixel_x = -30 - }, /obj/machinery/light{ dir = 8 }, -/obj/machinery/camera{ - c_tag = "Central Primary Hallway - Port"; - dir = 4; - network = list("SS13") - }, /turf/open/floor/plasteel{ dir = 8; icon_state = "neutralcorner" @@ -50487,19 +50571,17 @@ /turf/open/floor/wood, /area/library) "bDx" = ( -/obj/structure/chair/comfy/black, -/turf/open/floor/wood, -/area/library) -"bDy" = ( -/obj/item/device/flashlight/lamp/green{ - pixel_x = 1; - pixel_y = 5 +/obj/machinery/portable_atmospherics/canister/bz, +/turf/open/floor/plasteel{ + icon_state = "bot" }, +/area/atmos) +"bDy" = ( +/obj/machinery/vending/coffee, /obj/machinery/newscaster{ pixel_x = 0; pixel_y = 32 }, -/obj/structure/table/wood, /turf/open/floor/wood, /area/library) "bDz" = ( @@ -50510,23 +50592,11 @@ /turf/open/floor/wood, /area/library) "bDA" = ( -/obj/machinery/vending/coffee, -/obj/machinery/newscaster{ - pixel_x = 0; - pixel_y = 32 - }, -/obj/machinery/light{ - dir = 1 - }, +/obj/machinery/bookbinder, /turf/open/floor/wood, /area/library) "bDB" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber{ - dir = 2; - on = 1; - scrub_N2O = 0; - scrub_Toxins = 0 - }, +/obj/effect/decal/cleanable/cobweb2, /turf/open/floor/wood, /area/library) "bDC" = ( @@ -50676,7 +50746,7 @@ dir = 4 }, /turf/open/floor/goonplaque{ - desc = "\"This is a plaque in honour of our comrades on the G4407 Stations. Hopefully TG4407 model can live up to your fame and fortune.\" Scratched in beneath that is a crude image of sentient postcards in a realm of darkness. The station model number is MS-160511" + desc = "\"This is a plaque in honour of our comrades on the G4407 Stations. Hopefully TG4407 model can live up to your fame and fortune.\" Scratched in beneath that is a crude image of sentient postcards in a realm of darkness. The station model number is MSv42A-160516" }, /area/hallway/primary/port) "bDM" = ( @@ -52316,8 +52386,9 @@ /turf/open/floor/wood, /area/library) "bGD" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 6 +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8; + initialize_directions = 11 }, /turf/open/floor/carpet, /area/library) @@ -52337,21 +52408,21 @@ /turf/open/floor/carpet, /area/library) "bGG" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 2; - initialize_directions = 11 +/obj/machinery/camera/autoname{ + dir = 8; + network = list("SS13") + }, +/obj/machinery/newscaster{ + pixel_x = 29; + pixel_y = 1 }, /turf/open/floor/carpet, /area/library) "bGH" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 + dir = 10 }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass{ - name = "Library" - }, -/turf/open/floor/wood, +/turf/open/floor/carpet, /area/library) "bGI" = ( /obj/structure/cable/yellow{ @@ -52365,9 +52436,6 @@ d2 = 4; icon_state = "1-4" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 10 - }, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=11.1-Command-Starboard"; location = "11-Command-Port" @@ -53721,28 +53789,31 @@ }, /area/library) "bIB" = ( -/obj/machinery/bookbinder, +/obj/machinery/atmospherics/components/unary/vent_scrubber{ + dir = 1; + on = 1; + scrub_N2O = 0; + scrub_Toxins = 0 + }, /turf/open/floor/wood, /area/library) "bIC" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 5 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/central) -"bID" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ +/obj/item/device/radio/intercom{ dir = 4; - initialize_directions = 11 + name = "Station Intercom (General)"; + pixel_x = 0 + }, +/turf/closed/wall, +/area/library) +"bID" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/camera{ + c_tag = "Central Primary Hallway - Port"; + dir = 8; + network = list("SS13") }, /turf/open/floor/plasteel{ - dir = 4; + dir = 2; icon_state = "neutralcorner" }, /area/hallway/primary/central) @@ -54551,15 +54622,11 @@ name = "\improper Auxiliary Restrooms" }) "bJY" = ( -/obj/structure/bookcase{ - name = "bookcase (Non-Fiction)" - }, +/obj/structure/bookcase/random/nonfiction, /turf/open/floor/wood, /area/library) "bJZ" = ( -/obj/structure/bookcase{ - name = "bookcase (Fiction)" - }, +/obj/structure/bookcase/random/fiction, /turf/open/floor/wood, /area/library) "bKa" = ( @@ -54571,14 +54638,7 @@ /turf/open/floor/wood, /area/library) "bKb" = ( -/obj/item/device/camera_film{ - pixel_y = 9 - }, -/obj/item/device/camera_film{ - pixel_x = -3; - pixel_y = 5 - }, -/obj/structure/table/wood, +/obj/machinery/hologram/holopad, /turf/open/floor/wood, /area/library) "bKc" = ( @@ -54586,16 +54646,11 @@ /turf/open/floor/wood, /area/library) "bKd" = ( -/obj/item/weapon/paper_bin{ - pixel_x = 1; - pixel_y = 9 - }, -/obj/item/device/radio/intercom{ - dir = 4; - name = "Station Intercom (General)"; - pixel_x = 27 - }, /obj/structure/table/wood, +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, /turf/open/floor/wood, /area/library) "bKe" = ( @@ -55504,6 +55559,7 @@ dir = 8; pixel_x = -24 }, +/obj/effect/decal/cleanable/cobweb, /turf/open/floor/wood, /area/library) "bLH" = ( @@ -55532,21 +55588,33 @@ /turf/open/floor/wood, /area/library) "bLK" = ( -/obj/structure/table/wood, -/obj/structure/noticeboard{ - desc = "A board for pinning important notices upon. Probably helpful for keeping track of requests."; - name = "requests board"; - pixel_x = 32; - pixel_y = 0 +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/item/device/radio/intercom{ + freerange = 1; + frequency = 1459; + name = "Station Intercom (General)"; + pixel_x = -30 }, -/obj/machinery/computer/libraryconsole/bookmanagement, -/turf/open/floor/wood, -/area/library) -"bLL" = ( -/obj/structure/closet/firecloset, /turf/open/floor/plasteel{ - icon_state = "dark" + dir = 8; + icon_state = "neutralcorner" }, +/area/hallway/primary/central) +"bLL" = ( +/obj/item/device/radio/intercom{ + dir = 4; + name = "Station Intercom (General)"; + pixel_x = 27 + }, +/obj/structure/table/wood, +/obj/item/device/camera_film{ + pixel_y = 9 + }, +/obj/item/device/camera_film{ + pixel_x = -3; + pixel_y = 5 + }, +/turf/open/floor/wood, /area/library) "bLM" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -56472,15 +56540,11 @@ name = "Port Maintenance" }) "bNr" = ( -/obj/structure/bookcase{ - name = "bookcase (Religious)" - }, +/obj/structure/bookcase/random/religion, /turf/open/floor/wood, /area/library) "bNs" = ( -/obj/structure/bookcase{ - name = "bookcase (Adult)" - }, +/obj/structure/bookcase/random/adult, /turf/open/floor/wood, /area/library) "bNt" = ( @@ -56493,9 +56557,7 @@ /turf/open/floor/carpet, /area/library) "bNu" = ( -/obj/structure/bookcase{ - name = "bookcase (Reference)" - }, +/obj/structure/bookcase/random/reference, /turf/open/floor/wood, /area/library) "bNv" = ( @@ -56516,16 +56578,16 @@ /turf/open/floor/wood, /area/library) "bNx" = ( -/obj/structure/closet/emcloset, -/obj/machinery/status_display{ - density = 0; - layer = 4; - pixel_x = -32; +/obj/structure/table/wood, +/obj/structure/noticeboard{ + desc = "A board for pinning important notices upon. Probably helpful for keeping track of requests."; + dir = 8; + name = "requests board"; + pixel_x = 32; pixel_y = 0 }, -/turf/open/floor/plasteel{ - icon_state = "dark" - }, +/obj/machinery/computer/libraryconsole/bookmanagement, +/turf/open/floor/wood, /area/library) "bNy" = ( /obj/item/stack/sheet/rglass{ @@ -57011,15 +57073,17 @@ name = "Telecoms Storage" }) "bOj" = ( -/obj/structure/closet/wardrobe/grey, -/turf/open/floor/plating, +/obj/structure/closet, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, /area/maintenance/starboard) "bOk" = ( /obj/machinery/portable_atmospherics/canister/oxygen, /turf/open/floor/plating, /area/maintenance/starboard) "bOl" = ( -/obj/item/weapon/storage/box/lights/mixed, +/obj/structure/closet/cardboard, /turf/open/floor/plating, /area/maintenance/starboard) "bOm" = ( @@ -57442,6 +57506,7 @@ d2 = 4; icon_state = "0-4" }, +/obj/effect/decal/cleanable/cobweb, /turf/open/floor/wood, /area/library) "bOU" = ( @@ -57492,12 +57557,15 @@ /area/library) "bOZ" = ( /obj/machinery/light/small, -/obj/machinery/hologram/holopad, +/obj/machinery/photocopier{ + pixel_y = 3 + }, /turf/open/floor/wood, /area/library) "bPa" = ( -/obj/machinery/light_switch{ - pixel_y = -28 +/obj/machinery/newscaster{ + pixel_x = -1; + pixel_y = -29 }, /turf/open/floor/wood, /area/library) @@ -57506,13 +57574,17 @@ dir = 4; pixel_x = 24 }, +/obj/structure/table/wood, +/obj/item/weapon/clipboard, +/obj/item/device/taperecorder, +/obj/item/device/tape, /turf/open/floor/wood, /area/library) "bPc" = ( -/obj/structure/closet/emcloset, -/turf/open/floor/plasteel{ - icon_state = "vault" - }, +/obj/structure/easel, +/obj/item/weapon/canvas/twentythreeXtwentythree, +/obj/item/weapon/canvas/twentythreeXtwentythree, +/turf/open/floor/wood, /area/library) "bPd" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -59299,6 +59371,7 @@ pixel_y = 4 }, /obj/item/weapon/pen, +/obj/effect/decal/cleanable/cobweb, /turf/open/floor/wood, /area/library) "bSb" = ( @@ -59344,15 +59417,17 @@ /obj/structure/table/wood, /obj/item/weapon/dice/d20, /obj/item/weapon/dice, +/obj/effect/decal/cleanable/cobweb2, /turf/open/floor/wood, /area/library) "bSh" = ( /obj/structure/cult/tome, /obj/machinery/newscaster{ - pixel_x = -32; + pixel_x = -30; pixel_y = 0 }, /obj/item/clothing/under/suit_jacket/red, +/obj/effect/decal/cleanable/cobweb, /turf/open/floor/plasteel{ icon_state = "cult"; dir = 2 @@ -59907,21 +59982,7 @@ }, /area/crew_quarters/kitchen) "bSU" = ( -/obj/structure/closet/crate{ - desc = "It's a storage unit for kitchen clothes and equipment."; - name = "Kitchen Crate" - }, -/obj/item/clothing/head/chefhat, -/obj/item/clothing/under/rank/chef, -/obj/item/weapon/storage/box/mousetraps{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/weapon/storage/box/mousetraps, -/obj/item/clothing/under/waiter, -/obj/item/clothing/under/waiter, -/obj/item/weapon/storage/box/donkpockets, -/obj/item/weapon/storage/box/donkpockets, +/obj/structure/closet/chefcloset, /turf/open/floor/plasteel{ icon_state = "showroomfloor" }, @@ -61124,8 +61185,8 @@ /turf/open/floor/wood, /area/library) "bUM" = ( -/obj/item/toy/cards/deck, /obj/structure/table/wood, +/obj/item/weapon/storage/crayons, /turf/open/floor/wood, /area/library) "bUN" = ( @@ -61691,11 +61752,18 @@ "bVL" = ( /obj/structure/table/wood, /obj/machinery/light, -/obj/item/toy/cards/deck/cas, /obj/item/toy/cards/deck/cas/black{ pixel_x = -2; pixel_y = 6 }, +/obj/item/toy/cards/deck{ + pixel_x = 2; + pixel_y = 7 + }, +/obj/item/toy/cards/deck/cas{ + pixel_x = -1; + pixel_y = 2 + }, /turf/open/floor/wood, /area/library) "bVM" = ( @@ -74676,6 +74744,10 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, +/obj/item/stack/sheet/mineral/plasma{ + layer = 2.9; + pixel_y = 4 + }, /turf/open/floor/plasteel{ icon_state = "white" }, @@ -78076,6 +78148,7 @@ /obj/structure/sign/nosmoking_2{ pixel_y = 32 }, +/obj/machinery/portable_atmospherics/canister/bz, /turf/open/floor/plasteel{ dir = 5; icon_state = "warning" @@ -78131,10 +78204,7 @@ /turf/open/space, /area/space) "cvy" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /turf/open/space, /area/space) "cvz" = ( @@ -80514,6 +80584,7 @@ /obj/machinery/light_switch{ pixel_y = -23 }, +/obj/machinery/portable_atmospherics/canister/bz, /turf/open/floor/plasteel{ dir = 10; icon_state = "warning" @@ -90537,7 +90608,7 @@ pixel_x = 4 }, /obj/item/organ/heart, -/obj/item/device/soulstone/anybody, +/obj/item/device/soulstone/anybody/chaplain, /obj/effect/landmark{ name = "revenantspawn" }, @@ -91042,31 +91113,27 @@ "cPb" = ( /obj/item/candle, /obj/machinery/light_switch{ - pixel_x = 6; + pixel_x = 0; pixel_y = 25 }, /obj/effect/decal/cleanable/cobweb2, /obj/structure/table/wood, -/obj/machinery/button/door{ - id = "chapel_shutters"; - name = "chapel shutters control"; - pixel_x = -6; - pixel_y = 25; - req_access_txt = "0" - }, /turf/open/floor/plasteel{ icon_state = "vault" }, /area/chapel/main) "cPc" = ( -/obj/structure/grille, -/obj/structure/window/fulltile, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "chapel_shutters"; - name = "chapel shutters" +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 }, -/turf/open/floor/plating, -/area/chapel/main) +/obj/structure/noticeboard{ + pixel_y = 32 + }, +/turf/open/floor/plasteel{ + icon_state = "neutral"; + dir = 1 + }, +/area/hallway/primary/central) "cPd" = ( /obj/structure/table, /obj/item/candle, @@ -93689,12 +93756,6 @@ dir = 1; on = 1 }, -/obj/item/device/radio/intercom{ - freerange = 0; - frequency = 1459; - name = "Station Intercom (General)"; - pixel_x = 29 - }, /turf/open/floor/plasteel{ dir = 8; icon_state = "chapel" @@ -96205,10 +96266,9 @@ /turf/closed/indestructible/opshuttle, /area/shuttle/syndicate) "cXn" = ( -/obj/structure/closet/cardboard, -/turf/open/floor/plating{ - icon_state = "platingdmg3" - }, +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/obj/item/weapon/storage/box/lights/mixed, +/turf/open/floor/plating, /area/maintenance/starboard) "cXo" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -96515,8 +96575,7 @@ }, /area/shuttle/syndicate) "cXV" = ( -/obj/machinery/sleeper{ - icon_state = "sleeper-open"; +/obj/machinery/sleeper/syndie{ dir = 4 }, /turf/open/floor/plasteel/shuttle{ @@ -99022,9 +99081,8 @@ }, /area/shuttle/abandoned) "dcy" = ( -/turf/open/space, /turf/closed/wall/shuttle{ - icon_state = "swall_f6"; + icon_state = "swall7"; dir = 2 }, /area/shuttle/escape) @@ -99053,17 +99111,29 @@ /area/shuttle/escape) "dcD" = ( /obj/machinery/door/airlock/shuttle{ - name = "Emergency Shuttle Cargo Bay Airlock" + name = "Emergency Shuttle Airlock" }, -/turf/open/floor/plating{ - dir = 1; - icon_state = "delivery" +/obj/docking_port/mobile/emergency{ + dir = 2; + dwidth = 5; + height = 14; + name = "MetaStation emergency shuttle"; + width = 25 }, +/obj/docking_port/stationary{ + dheight = 0; + dir = 2; + dwidth = 5; + height = 14; + id = "emergency_home"; + name = "emergency evac bay"; + width = 25 + }, +/turf/open/floor/plasteel/shuttle, /area/shuttle/escape) "dcE" = ( -/turf/open/space, /turf/closed/wall/shuttle{ - icon_state = "swall_f10"; + icon_state = "swall8"; dir = 2 }, /area/shuttle/escape) @@ -99170,17 +99240,15 @@ /turf/open/floor/plasteel/shuttle, /area/shuttle/escape) "dcJ" = ( -/obj/machinery/status_display{ - pixel_y = 32 +/turf/closed/wall/shuttle{ + icon_state = "swall4"; + dir = 2 }, -/obj/machinery/hologram/holopad, -/turf/open/floor/plasteel/shuttle, /area/shuttle/escape) "dcK" = ( -/obj/structure/sign/nosmoking_2, +/obj/structure/sign/bluecross_2, /turf/closed/wall/shuttle{ - icon_state = "swall3"; - dir = 2 + icon_state = "swall2" }, /area/shuttle/escape) "dcL" = ( @@ -99193,17 +99261,25 @@ }, /area/shuttle/escape) "dcM" = ( -/turf/open/floor/plating{ - dir = 1; - icon_state = "delivery" +/obj/item/device/radio/intercom{ + dir = 4; + name = "Station Intercom (General)"; + pixel_x = 0; + pixel_y = 27 }, +/obj/structure/chair, +/turf/open/floor/plasteel/shuttle/white, /area/shuttle/escape) "dcN" = ( -/obj/machinery/recharge_station, -/turf/open/floor/plating{ - icon_state = "bot" +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/area/shuttle/escape) +/turf/open/floor/plasteel{ + icon_state = "white" + }, +/area/toxins/xenobiology) "dcO" = ( /obj/structure/table, /obj/item/weapon/clipboard, @@ -99220,16 +99296,16 @@ }, /area/shuttle/escape) "dcQ" = ( -/obj/item/device/radio/intercom{ - dir = 4; - name = "Station Intercom (General)"; - pixel_x = 31 +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4"; + tag = "90Curve" }, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/open/floor/plating{ - icon_state = "bot" +/turf/open/floor/plasteel{ + icon_state = "white" }, -/area/shuttle/escape) +/area/toxins/xenobiology) "dcR" = ( /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" @@ -99270,31 +99346,35 @@ }, /area/shuttle/escape) "dcU" = ( -/obj/structure/chair{ - dir = 4 - }, -/turf/open/floor/plasteel/shuttle{ - icon_state = "shuttlefloor3" +/obj/structure/extinguisher_cabinet, +/turf/closed/wall/shuttle{ + icon_state = "swall12"; + dir = 2 }, /area/shuttle/escape) "dcV" = ( -/obj/structure/chair{ - dir = 8 +/obj/machinery/vending/wallmed{ + name = "Emergency NanoMed"; + pixel_x = 0; + pixel_y = 0; + req_access_txt = "0"; + use_power = 0 }, -/turf/open/floor/plasteel/shuttle{ - icon_state = "shuttlefloor3" +/turf/closed/wall/shuttle{ + icon_state = "swall12"; + dir = 2 }, /area/shuttle/escape) "dcW" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/structure/extinguisher_cabinet{ - pixel_x = -27; - pixel_y = 0 +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/turf/open/floor/plating{ - icon_state = "bot" +/turf/open/floor/plasteel{ + icon_state = "white" }, -/area/shuttle/escape) +/area/toxins/xenobiology) "dcX" = ( /obj/structure/closet/crate{ name = "emergency supplies crate" @@ -99317,155 +99397,112 @@ }, /area/shuttle/escape) "dcY" = ( -/obj/docking_port/stationary{ - dheight = 0; - dir = 4; - dwidth = 5; - height = 14; - id = "emergency_home"; - name = "emergency evac bay"; - width = 25 +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8"; + tag = "" }, -/obj/docking_port/mobile/emergency{ - dheight = 0; - dir = 4; - dwidth = 5; - height = 14; - width = 25 +/obj/machinery/light/small{ + dir = 4 }, -/obj/machinery/door/airlock/shuttle{ - name = "Emergency Shuttle Airlock" +/turf/open/floor/plasteel{ + icon_state = "white" }, -/turf/open/floor/plasteel/shuttle, -/area/shuttle/escape) +/area/toxins/xenobiology) "dcZ" = ( -/obj/machinery/vending/wallmed{ - name = "Emergency NanoMed"; - pixel_x = 0; - pixel_y = 0; - req_access_txt = "0"; - use_power = 0 +/obj/item/device/radio/intercom{ + freerange = 0; + frequency = 1459; + name = "Station Intercom (General)"; + pixel_x = 29 }, -/turf/closed/wall/shuttle{ - icon_state = "swall3"; - dir = 2 +/turf/open/floor/plasteel{ + icon_state = "chapel" }, -/area/shuttle/escape) +/area/chapel/main) "dda" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/open/floor/plating{ - icon_state = "bot" +/obj/structure/chair/comfy/black{ + dir = 8 }, -/area/shuttle/escape) +/turf/open/floor/plasteel{ + dir = 4; + icon_state = "chapel" + }, +/area/chapel/main) "ddb" = ( -/obj/machinery/space_heater, -/obj/structure/extinguisher_cabinet{ - pixel_x = 27; - pixel_y = 0 - }, -/turf/open/floor/plating{ - icon_state = "bot" +/turf/closed/wall/shuttle{ + icon_state = "swall_s6"; + dir = 2 }, /area/shuttle/escape) "ddc" = ( -/obj/structure/chair{ - dir = 4 - }, -/obj/item/device/radio/intercom{ - dir = 4; - name = "Station Intercom (General)"; - pixel_x = -31 - }, -/turf/open/floor/plasteel/shuttle{ - icon_state = "shuttlefloor3" +/turf/closed/wall/shuttle{ + icon_state = "swall1" }, /area/shuttle/escape) "ddd" = ( -/obj/structure/rack, -/obj/item/weapon/storage/toolbox/electrical{ - pixel_x = -3; - pixel_y = 1 - }, -/obj/item/weapon/storage/toolbox/mechanical{ - pixel_x = 0; - pixel_y = -1 - }, -/obj/item/weapon/storage/toolbox/emergency{ - pixel_x = 3; - pixel_y = -5 - }, -/turf/open/floor/plating{ - dir = 1; - icon_state = "warning" +/obj/structure/sign/nosmoking_2, +/turf/closed/wall/shuttle{ + icon_state = "swall12"; + dir = 2 }, /area/shuttle/escape) "dde" = ( -/obj/structure/rack, -/obj/item/weapon/crowbar, -/obj/item/weapon/wrench, -/obj/item/weapon/weldingtool, -/obj/item/weapon/wirecutters, -/obj/item/stack/cable_coil, -/turf/open/floor/plating{ - dir = 1; - icon_state = "warning" +/turf/closed/wall/shuttle{ + icon_state = "swall_s10"; + dir = 2 }, /area/shuttle/escape) "ddf" = ( -/obj/structure/rack{ - dir = 1 - }, -/obj/item/weapon/tank/internals/oxygen/red, -/obj/item/clothing/suit/fire/firefighter, -/obj/item/clothing/mask/gas, -/obj/item/clothing/head/hardhat/red, -/turf/open/floor/plating{ - dir = 1; - icon_state = "warning" - }, +/obj/structure/chair, +/turf/open/floor/plasteel/shuttle/white, /area/shuttle/escape) "ddg" = ( -/turf/open/floor/plating{ - dir = 1; - icon_state = "warning" +/obj/structure/shuttle/engine/propulsion{ + dir = 4 }, +/turf/open/floor/plating/airless, /area/shuttle/escape) "ddh" = ( -/obj/structure/extinguisher_cabinet, -/turf/closed/wall/shuttle{ - icon_state = "swall3"; - dir = 2 +/obj/item/device/radio/intercom{ + dir = 2; + name = "Station Intercom (General)"; + pixel_x = 0; + pixel_y = -31 }, +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/plasteel/shuttle/white, /area/shuttle/escape) "ddi" = ( -/turf/closed/wall/shuttle{ - icon_state = "swall7"; - dir = 2 - }, -/area/shuttle/escape) -"ddj" = ( -/obj/structure/chair{ +/obj/structure/shuttle/engine/heater{ dir = 8 }, -/obj/structure/sign/bluecross_2{ - pixel_x = 32 +/obj/structure/window/reinforced{ + dir = 4 }, -/turf/open/floor/plasteel/shuttle{ - icon_state = "shuttlefloor3" +/turf/open/floor/plating/airless, +/area/shuttle/escape) +"ddj" = ( +/obj/structure/chair/office/dark{ + dir = 1 }, +/turf/open/floor/plasteel/shuttle, /area/shuttle/escape) "ddk" = ( +/obj/machinery/status_display, /turf/closed/wall/shuttle{ - icon_state = "swall8"; + icon_state = "swall3"; dir = 2 }, /area/shuttle/escape) "ddl" = ( -/obj/structure/sign/bluecross_2, -/turf/closed/wall/shuttle{ - icon_state = "swall4"; - dir = 2 +/obj/structure/chair{ + dir = 1 }, +/turf/open/floor/plasteel/shuttle/white, /area/shuttle/escape) "ddm" = ( /obj/machinery/door/airlock/glass_medical{ @@ -99482,12 +99519,11 @@ }, /area/shuttle/escape) "ddo" = ( -/obj/machinery/sleeper{ +/obj/structure/sign/bluecross_2, +/turf/closed/wall/shuttle{ + icon_state = "swall14"; dir = 2 }, -/turf/open/floor/plasteel/shuttle{ - icon_state = "shuttlefloor3" - }, /area/shuttle/escape) "ddp" = ( /obj/structure/table, @@ -99512,21 +99548,16 @@ }, /area/shuttle/escape) "ddr" = ( -/obj/machinery/shower{ - dir = 4; - icon_state = "shower"; - name = "emergency shower" +/obj/machinery/status_display{ + dir = 8; + pixel_x = 32; + pixel_y = 0 }, +/obj/machinery/hologram/holopad, /turf/open/floor/plasteel/shuttle, /area/shuttle/escape) "dds" = ( -/obj/structure/sink{ - dir = 4; - icon_state = "sink"; - pixel_x = 11; - pixel_y = 0 - }, -/turf/open/floor/plasteel/shuttle, +/turf/open/floor/plasteel/floorgrime, /area/shuttle/escape) "ddt" = ( /obj/structure/table, @@ -99574,27 +99605,17 @@ /area/shuttle/escape) "ddv" = ( /obj/structure/table, -/obj/item/weapon/scalpel{ - pixel_y = 12 +/obj/item/weapon/paper_bin{ + pixel_x = -2; + pixel_y = 8 }, -/obj/item/weapon/circular_saw, -/obj/item/weapon/retractor{ - pixel_x = 4 - }, -/obj/item/weapon/hemostat{ - pixel_x = -4 - }, -/obj/item/clothing/gloves/color/latex, -/obj/item/clothing/mask/surgical, /obj/item/device/radio/intercom{ - dir = 4; + dir = 2; name = "Station Intercom (General)"; pixel_x = 0; - pixel_y = -27 - }, -/turf/open/floor/plasteel/shuttle{ - icon_state = "shuttlefloor3" + pixel_y = -31 }, +/turf/open/floor/plasteel/shuttle, /area/shuttle/escape) "ddw" = ( /obj/structure/table/optable, @@ -99604,32 +99625,31 @@ }, /area/shuttle/escape) "ddx" = ( -/obj/structure/chair{ - dir = 8 - }, -/obj/item/device/radio/intercom{ +/obj/structure/table, +/obj/item/weapon/folder/blue, +/obj/structure/extinguisher_cabinet{ dir = 4; - name = "Station Intercom (General)"; - pixel_x = 31 - }, -/turf/open/floor/plasteel/shuttle{ - icon_state = "shuttlefloor3" + pixel_x = 0; + pixel_y = -27 }, +/turf/open/floor/plasteel/shuttle, /area/shuttle/escape) "ddy" = ( -/obj/machinery/status_display, -/turf/closed/wall/shuttle{ - icon_state = "swall12"; - dir = 2 +/obj/machinery/space_heater, +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = 0; + pixel_y = -27 + }, +/turf/open/floor/plating{ + icon_state = "bot" }, /area/shuttle/escape) "ddz" = ( -/obj/structure/chair, -/obj/structure/reagent_dispensers/peppertank{ - pixel_x = 0; - pixel_y = 29 +/obj/machinery/door/airlock/shuttle{ + name = "Emergency Shuttle Cargo Bay Airlock" }, -/turf/open/floor/plasteel/shuttle/red, +/turf/open/floor/plasteel/delivery, /area/shuttle/escape) "ddA" = ( /obj/structure/chair{ @@ -99682,60 +99702,37 @@ }, /area/shuttle/escape) "ddI" = ( -/obj/machinery/flasher{ - id = "emshuttlebridgeflash"; - pixel_y = -24 +/obj/structure/chair{ + dir = 4 + }, +/turf/open/floor/plating{ + icon_state = "floorgrime" }, -/turf/open/floor/plasteel/shuttle, /area/shuttle/escape) "ddJ" = ( -/obj/structure/chair{ - dir = 1 - }, -/obj/machinery/flasher{ - id = "emshuttleflash"; - pixel_y = -24 - }, -/turf/open/floor/plasteel/shuttle/red, +/obj/machinery/shower, +/turf/open/floor/plasteel/shuttle, /area/shuttle/escape) "ddK" = ( -/obj/structure/chair{ - dir = 1 +/obj/machinery/sleeper{ + dir = 8 }, -/obj/machinery/button/flasher{ - id = "emshuttleflash"; - name = "brig flasher button"; - pixel_y = -23; - req_access_txt = "0"; - req_one_access_txt = "1;63;19" - }, -/turf/open/floor/plasteel/shuttle/red, +/turf/open/floor/plasteel/shuttle/white, /area/shuttle/escape) "ddL" = ( -/obj/structure/table, -/obj/item/weapon/folder/red{ - pixel_x = 3 +/obj/structure/rack, +/obj/item/weapon/crowbar, +/obj/item/weapon/wrench, +/obj/item/weapon/weldingtool, +/obj/item/weapon/wirecutters, +/obj/item/stack/cable_coil, +/turf/open/floor/plasteel/warning{ + dir = 4 }, -/obj/item/weapon/folder/white{ - pixel_x = -4; - pixel_y = 2 - }, -/obj/item/device/radio/intercom{ - dir = 4; - name = "Station Intercom (General)"; - pixel_x = 31 - }, -/obj/item/weapon/book/manual/wiki/security_space_law{ - pixel_x = -4; - pixel_y = 4 - }, -/turf/open/floor/plasteel/shuttle/red, /area/shuttle/escape) "ddM" = ( -/obj/structure/chair{ - dir = 1 - }, -/turf/open/floor/plasteel/shuttle/red, +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plasteel/delivery, /area/shuttle/escape) "ddN" = ( /obj/machinery/door/airlock/glass_command{ @@ -99763,14 +99760,8 @@ /turf/open/floor/plasteel/shuttle, /area/shuttle/escape) "ddR" = ( -/obj/machinery/button/flasher{ - id = "emshuttlebridgeflash"; - name = "cockpit flasher button"; - pixel_y = 24; - req_access_txt = "0"; - req_one_access_txt = "1;63;19" - }, -/turf/open/floor/plasteel/shuttle, +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plasteel/delivery, /area/shuttle/escape) "ddS" = ( /obj/machinery/door/airlock/command{ @@ -99781,30 +99772,17 @@ /turf/open/floor/plasteel/shuttle, /area/shuttle/escape) "ddT" = ( -/turf/open/floor/plasteel/shuttle{ - icon_state = "shuttlefloor4" - }, +/turf/open/floor/plasteel/delivery, /area/shuttle/escape) "ddU" = ( -/obj/machinery/suit_storage_unit/standard_unit, -/obj/item/device/radio/intercom{ - dir = 4; - name = "Station Intercom (General)"; - pixel_x = 0; - pixel_y = 27 - }, -/turf/open/floor/plating{ - icon_state = "floorgrime" - }, +/obj/machinery/recharge_station, +/turf/open/floor/plasteel/delivery, /area/shuttle/escape) "ddV" = ( -/obj/machinery/suit_storage_unit/standard_unit, -/obj/machinery/status_display{ - pixel_y = 31 - }, -/turf/open/floor/plating{ - icon_state = "floorgrime" +/obj/structure/chair{ + dir = 8 }, +/turf/open/floor/plasteel/shuttle/red, /area/shuttle/escape) "ddW" = ( /obj/structure/chair/office/dark{ @@ -99817,24 +99795,34 @@ /turf/open/floor/plasteel/shuttle, /area/shuttle/escape) "ddY" = ( -/obj/structure/chair/office/dark{ - dir = 4 +/obj/structure/reagent_dispensers/peppertank, +/turf/closed/wall/shuttle{ + icon_state = "swall3"; + dir = 2 }, -/turf/open/floor/plasteel/shuttle, /area/shuttle/escape) "ddZ" = ( -/obj/structure/table, -/obj/item/weapon/folder/blue, -/obj/structure/extinguisher_cabinet{ - pixel_x = 27; - pixel_y = 0 +/obj/structure/rack, +/obj/item/weapon/storage/toolbox/electrical{ + pixel_x = -3; + pixel_y = 1 + }, +/obj/item/weapon/storage/toolbox/mechanical{ + pixel_x = 0; + pixel_y = -1 + }, +/obj/item/weapon/storage/toolbox/emergency{ + pixel_x = 3; + pixel_y = -5 + }, +/turf/open/floor/plasteel/warning{ + dir = 4 }, -/turf/open/floor/plasteel/shuttle, /area/shuttle/escape) "dea" = ( -/turf/closed/wall/shuttle{ - icon_state = "swallc4"; - dir = 2 +/obj/machinery/suit_storage_unit/standard_unit, +/turf/open/floor/plating{ + icon_state = "floorgrime" }, /area/shuttle/escape) "deb" = ( @@ -99854,17 +99842,9 @@ /turf/open/floor/plasteel/shuttle, /area/shuttle/escape) "dee" = ( -/obj/structure/table, -/obj/item/weapon/paper_bin{ - pixel_x = -2; - pixel_y = 8 +/turf/open/floor/plasteel/warning{ + dir = 4 }, -/obj/item/device/radio/intercom{ - dir = 4; - name = "Station Intercom (General)"; - pixel_x = 31 - }, -/turf/open/floor/plasteel/shuttle, /area/shuttle/escape) "def" = ( /obj/structure/table, @@ -99913,24 +99893,30 @@ /turf/open/floor/plasteel/shuttle, /area/shuttle/escape) "dem" = ( -/obj/structure/chair{ - dir = 1 - }, -/turf/open/floor/plating{ - icon_state = "floorgrime" +/turf/closed/wall/shuttle{ + icon_state = "diagonalWall3" }, /area/shuttle/escape) "den" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = -27; - pixel_y = 0 +/obj/structure/table, +/obj/item/weapon/folder/red{ + pixel_x = 3 }, -/obj/structure/chair{ - dir = 1 +/obj/item/weapon/folder/white{ + pixel_x = -4; + pixel_y = 2 }, -/turf/open/floor/plating{ - icon_state = "floorgrime" +/obj/item/device/radio/intercom{ + dir = 2; + name = "Station Intercom (General)"; + pixel_x = 0; + pixel_y = -31 }, +/obj/item/weapon/book/manual/wiki/security_space_law{ + pixel_x = -4; + pixel_y = 4 + }, +/turf/open/floor/plasteel/shuttle/red, /area/shuttle/escape) "deo" = ( /obj/structure/reagent_dispensers/watertank, @@ -99939,13 +99925,27 @@ }, /area/shuttle/escape) "dep" = ( -/turf/open/space, -/turf/closed/wall/shuttle{ - icon_state = "diagonalWall3" +/obj/structure/table, +/obj/item/weapon/scalpel{ + pixel_y = 12 }, -/turf/closed/wall/shuttle{ - icon_state = "swall_f5"; - dir = 2 +/obj/item/weapon/circular_saw, +/obj/item/weapon/retractor{ + pixel_x = 4 + }, +/obj/item/weapon/hemostat{ + pixel_x = -4 + }, +/obj/item/clothing/gloves/color/latex, +/obj/item/clothing/mask/surgical, +/obj/item/device/radio/intercom{ + dir = 2; + name = "Station Intercom (General)"; + pixel_x = -27; + pixel_y = 0 + }, +/turf/open/floor/plasteel/shuttle{ + icon_state = "shuttlefloor3" }, /area/shuttle/escape) "deq" = ( @@ -99955,23 +99955,31 @@ }, /area/shuttle/escape) "der" = ( -/turf/open/space, -/turf/closed/wall/shuttle{ - icon_state = "swall_f9"; - dir = 2 - }, +/obj/structure/sink, +/turf/open/floor/plasteel/shuttle, /area/shuttle/escape) "des" = ( -/obj/structure/window/reinforced{ +/obj/structure/rack{ dir = 1 }, -/obj/structure/shuttle/engine/heater, -/turf/open/floor/plating/airless, +/obj/item/weapon/tank/internals/oxygen/red, +/obj/item/clothing/suit/fire/firefighter, +/obj/item/clothing/mask/gas, +/obj/item/clothing/head/hardhat/red, +/turf/open/floor/plasteel/warning{ + dir = 4 + }, /area/shuttle/escape) "det" = ( -/turf/open/space, -/turf/closed/wall/shuttle{ - icon_state = "diagonalWall3" +/obj/item/device/radio/intercom{ + dir = 2; + name = "Station Intercom (General)"; + pixel_x = 0; + pixel_y = -31 + }, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/floor/plating{ + icon_state = "bot" }, /area/shuttle/escape) "deu" = ( @@ -99980,15 +99988,16 @@ }, /area/shuttle/escape) "dev" = ( -/turf/open/space, /turf/closed/wall/shuttle{ - dir = 4; - icon_state = "diagonalWall3" + icon_state = "swall_s5"; + dir = 2 }, /area/shuttle/escape) "dew" = ( -/obj/structure/shuttle/engine/propulsion, -/turf/open/floor/plating/airless, +/turf/closed/wall/shuttle{ + icon_state = "swall_s9"; + dir = 2 + }, /area/shuttle/escape) "dex" = ( /obj/structure/grille, @@ -100602,6 +100611,18 @@ icon_state = "warning" }, /area/hydroponics) +"dfK" = ( +/turf/closed/wall/shuttle{ + icon_state = "swall2" + }, +/area/shuttle/escape) +"dfJ" = ( +/turf/closed/wall/shuttle{ + tag = "icon-wall3 (NORTHWEST)"; + icon_state = "wall3"; + dir = 9 + }, +/area/shuttle/escape) (1,1,1) = {" aaa @@ -120001,8 +120022,8 @@ bmc bdr bpS bsj -buz -bwi +apI +bwh bye bzZ bBI @@ -120014,7 +120035,7 @@ bJY bLH bNs bOU -bwi +bwh bSb bTt bUK @@ -120258,13 +120279,13 @@ bmd bnY bpS bsj -buz +avT bwj -byf -byf -byf -byf -byf +bFa +bFa +bFa +bFa +bFa bGD bFa bFa @@ -120772,12 +120793,12 @@ bmf bbS bpS bsj -buz -bwi -byh -byh +awY bwh -bDx +azv +byh +bIC +bKa byf bGF bIz @@ -120785,7 +120806,7 @@ bJZ bBI bNu bBI -bwi +bwh bSe bSd bDw @@ -121037,13 +121058,13 @@ bwh bDy byf bGF -bBI +bIA bJZ bBI bNu bOX bwh -bSf +bPc bTv bUN bSd @@ -121288,13 +121309,13 @@ bqb bsj buJ bwh -byi +aAQ bAa bBK bBI byf -bGF -bBI +bGH +bIB bKa bLI bNv @@ -121550,9 +121571,9 @@ bAb bwh bDz byf -bGF +byf bBI -bKb +bSf bBI bBI bOZ @@ -121741,7 +121762,7 @@ aaa aaf aaa aaa -aaQ +aaa aax aax aax @@ -121807,8 +121828,8 @@ bwh bwh bDA byf -bGF -bBI +byf +bKb bKc bLJ bBI @@ -122063,13 +122084,13 @@ byi bAa bBL bDB -bFa +aOo bGG -bIA +bDC bKd -bLK -bNw -bPb +bBI +bBI +bBI bQy bSi bTy @@ -122316,17 +122337,17 @@ bpS bsu buz bwh -byj +aGc bAb bwh -bDC -byf -bGF -bIB bwh bwh bwh bwh +bLL +bNx +bNw +bPb bwh bSj bTz @@ -122577,13 +122598,13 @@ bwh bwh bwh bwi -bwj -bGH -bwi +bbn +aXs +bwh +bwh +bwh +bwh bwh -bLL -bNx -bPc bwh bwh bwh @@ -122654,7 +122675,7 @@ aaa aaa aaa aaa -aaa +aac aaa aaa aaa @@ -122835,8 +122856,8 @@ bAc bBM bwm bFb -buM bwm +bLK bFb bwm bwm @@ -122898,17 +122919,17 @@ cOU cOU cOU cOU -aaf -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa aaa +ddg +ddg +ddg +deu +ddg +ddg +deu +ddg +ddg +ddg aaa aaa aaa @@ -123093,7 +123114,7 @@ bcf bcf bFc bGI -bIC +bcf bKe bcf bcf @@ -123155,18 +123176,18 @@ cOU cTH cOU aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +dfJ +ddi +ddi +ddi +deu +ddi +ddi +deu +ddi +ddi +ddi +dem aaa aaa aaa @@ -123346,11 +123367,11 @@ bsy bwo bgR bmm -bgR +bID bgR bFd bGJ -bID +bKf bKf bLM bKf @@ -123411,20 +123432,20 @@ cSX cTo cTI cOU -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +ddb +dcF +dcF +dcF +dcF +dcF +dcF +dcF +dcy +dcF +dcF +dcF +dcF +dev aaa aaa aaa @@ -123668,20 +123689,20 @@ cSY cTp cTJ cUh -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aac +dcz +deg +def +deh +dei +dek +dej +del +dcU +ddI +ddI +ddI +deo +dcz aaa aaa aaa @@ -123925,20 +123946,20 @@ cSY cRe cTJ cUh -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +dcz +dec +dcI +ded +ddW +ddj +dcI +ddv +dcA +dcP +dcP +dcP +dcP +deb aaa aaa aaa @@ -124182,20 +124203,20 @@ cSZ cTq cTK cUh -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +dcz +ddX +ddj +dcI +dcI +dcI +ded +ddx +dcE +deb +dcJ +dcP +dcP +deb aaa aaa aaa @@ -124439,20 +124460,20 @@ cSY cRe cTJ cUh -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +dcz +ddQ +ddP +dcI +dcI +dcI +dcI +dcI +ddS +ddD +dcA +dea +dea +dcz aaa aaa aaa @@ -124696,20 +124717,20 @@ cSY cTp cTJ cUh -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +dcC +dcF +ddk +ddc +ddN +dfK +ddk +dcF +ddO +dcF +ddn +ddk +dcF +deq aaa aaa aaa @@ -124953,29 +124974,29 @@ cTa cTr cTL cOU -dcy -dcF -dcF -dcB -dcz -dcY -dcF -dcz -dcz -dcz -dcK -dcB -dcz -dcB -dcF -dcz -dcF -ddi -dcz -dcz -dcz -dcz -dep +dcA +ddH +dcI +dcI +dcI +dcI +dcI +ddH +dcE +ddA +ddA +ddA +den +dcA +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -125199,41 +125220,41 @@ cLJ cKP cNv bVE -cPc +cOU cPT cQB -cPc +cOU cOU cSd cSB cTb +dcZ +dda cOU -cOU -cOU -dcA -dcH +dcz dcI dcI -dcU dcI -ddc -dcU -dcU -dcU -dcU dcI -dcU dcI -dcU dcI -ddH -dcA -ddQ -ddX -dec -deg -dcA -det +dcI +ddF +ddD +ddD +ddD +ddG +dcz +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -125462,36 +125483,36 @@ cQC cPd cOU cOU -cPc cOU cOU -aaa -aaf -dcz -dcG -dcI -dcI -dcI -dcI -dcI -dcI -dcI -dcI -dcI -dcI -dcI -dcI -dcI -dcI -dcI -ddy -ddP -ddW -dcI -def +cOU +cOU +cOU dcA -des -dew +ddf +dcI +ddl +dcz +ddf +dcI +ddl +dcz +ddC +ddD +ddD +ddE +dcz +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -125721,34 +125742,34 @@ cPh cSe cSC cTc -cRK -cRK -cRK +cTs +cTM +cTs +dcB +dcI +dcI +ddl +dcV +ddf +dcI +ddl dcA -dcH -dcI -dcI -dcV -dcV -dcV -dcV -dcV -dcI -dcV -dcV -dcV -dcV -dcV -dcI -dcI +ddC +ddV +ddV +ddB dcA -dcI -dcI -ddY -dei -dcA -des -dew +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -125978,34 +125999,34 @@ cNy cNy cSD cTd -cTs -cTM -cTs -dcB -dcI -dcI -dcI +cRK +cRK +cRK dcz -dcZ +ddf +dcI +ddl dcz +ddf +dcI ddh -dcz -dcI -dcz -ddh -dcz -dcZ -dcz -dcI -dcI -ddN -dcI -dcI -ded -deh -dcA -des -dew +dcC +dcF +ddY +ddk +dcF +deq +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -126235,34 +126256,34 @@ cNy cSf cSE cTe -cRK -cRK -cRK +cTs +cTd +cTs +dcB +dcI +dcI +ddl +dcU +ddf +dcI +ddl dcA -dcJ -dcI -dcI -dcU -dcU -dcU -dcU -dcU -dcI -dcU -dcU -dcU -dcU -dcU -dcI -ddI +ddu +ddt +ddw +dep dcA -ddR -dcI -ddW -dek -dcA -deu -deu +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -126492,34 +126513,34 @@ cNy cSg cSD cTd -cTs -cTd -cTs -dcB +cRK +cRK +cRK +ddd +ddf +dcI +ddl +dcz +ddf +dcI +ddl +dcz +ddJ dcI dcI -dcI -dcI -dcI -dcI -dcI -dcI -dcI -dcI -dcI -dcI -dcI -dcI -dcI -dcI -ddy -dcI -ddY -dcI -dej -dcA -des -dew +der +dcz +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -126750,33 +126771,33 @@ cSh cSD cTd cRK -cRK -cRK -dcA -dcL +aaa +aaf +dcz +ddf dcI dcI -dcV -dcV -dcV -ddj -dcV dcI -dcV -dcV -ddx -dcV -dcV dcI -ddH -dcA dcI -ddZ -dee -del -dcA -des -dew +dcI +ddm +dcI +dcI +dcI +ddq +dcz +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -127009,31 +127030,31 @@ cTf cRK aaa aaf -dcC -dcK -dcD -dcD -dcF dcz -dcF -ddi +ddf +dcI +ddl dcz -ddm +ddf +dcI +ddl dcz -dcF -ddi -dcF -dcz -ddF -dcF -ddO -ddS -ddi -dcF -dcF -deq -deu -deu +ddK +ddK +dcI +ddp +dcA +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -127264,33 +127285,33 @@ cSj cSD cTd cRK -cRK -cRK -dcA -dcN -dcM -dcM -dcW -dda -dde -ddk -ddo +aaa +aaf +dcz +ddf dcI -ddr -ddu -dcA -ddA -ddA -ddD -ddK -dcA -ddT -deb -dcP -den -dcA -des -dew +ddl +dcU +ddf +dcI +ddl +ddo +dcF +dcz +ddm +dcK +deq +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -127471,7 +127492,7 @@ bQM bSu bTL bNI -bWb +cPc bXr bYE cad @@ -127520,34 +127541,34 @@ cNy cSg cSD cTd -cTs -cTd -cTs -dcD +cRK +cRK +cRK +dcA dcM -dcP -dcP -dcP -dcT -ddd +dcI +ddl dcz -ddo +ddf dcI -dcI -ddt -dcA -ddz -ddD -ddD -ddJ -dcC -dcF -dea -dcP -dem +ddl dcA +ddL +ddZ +dee des -dew +dcA +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -127778,33 +127799,33 @@ cSk cSF cTg cTs -cTN +cTd cTs dcD -dcM -dcP -dcT -dcP -dcP -ddg -ddm dcI dcI +ddl +dcV +ddf dcI -ddw -ddy -ddC -ddD -ddD +ddl +dcz ddM +dcT +dds +ddy dcA -ddV -dcP -dcP -dem -dcA -des -dew +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -128037,30 +128058,30 @@ cTh cRK cRK cRK -dcA -dcO -dcQ -dcS -dcX -ddb +dcz ddf +dcI ddl -ddp -ddq +dcz +ddf +dcI +ddl +dcU +ddR dds -ddv -dcA -ddB -ddE -ddG -ddL -dcA -ddU -dcP -dcP -deo -dcA -dev +dds +dcX +dcz +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -128291,32 +128312,32 @@ cRJ cSl cSG cTi -cRK +cTs +cTN +cTs +dcB +dcI +dcI +dcI +dcI +dcI +dcI +dcI +ddz +ddT +dds +dcT +dcS +dcz +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa -aaf -dcE -dcF -dcF -dcz -dcz -dcF -dcF -ddn -dcF -dcz -dcz -dcF -ddn -dcF -dcz -dcz -dcF -ddn -dcz -deb -deb -dcz -der aaa aaa aaa @@ -128548,23 +128569,23 @@ cRK cRq cRK cRq -cRq -aaa -aaf -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cRK +cRK +cRK +dcA +dcI +dcI +dcI +dcI +dcI +dcI +dcI +ddz +ddT +dds +dds +det +dcA aaa aaa aaa @@ -128808,20 +128829,20 @@ aaf aaa aaa aaf -aaa -aaa -aaa -aaf -aaa -aaa -aaa -aaa -aaf -aaf -aaf -aaf -aaf -aaf +dcA +dcH +dcG +dcH +dcI +ddr +dcI +dcL +ddd +ddU +ddT +ddT +dcO +dcA aaf aaf aaf @@ -129065,20 +129086,20 @@ aaf aaf aaf aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaa -aaa -aaa -aaa -aaa +dde +dcF +dcz +dcF +dcz +dcF +dcz +dcF +ddn +dcF +dcz +dcz +dcF +dew aaa aaa aaf @@ -129316,7 +129337,8 @@ cQd cQM cRs aaa -aaf +aaa +aaa aaa aaa aaf @@ -129325,29 +129347,28 @@ aaa aaa aaa aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaf aaa aaa aaa aaa -aaf -cTC -cTC -cTC -cTC -cTC aaa aaa -aaf -aaf aaa -aaf -aaf aaa -aaf -aaf -aai -aag +aaa aaa aaa aaa @@ -129573,39 +129594,39 @@ cQe cQN cRq aaa -aaf aaa -cTC -cTC -cTy -cTy -cTC -cTC -cTC -cTC -cTC -cTC -cTC -cTC -cTC -cTC -cVt -dfw -cVB -cTC -cTC -cTC -aaf +aaa aaa aaa aaf aaa aaa aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaf aaa -aag -aag +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -129829,40 +129850,40 @@ bVE bVE bVE bVE -aaf -aaf -aaf -cTC -cUl -cUz -cUS -cVc -cVo -cVt -cVD -cVN -cVo -cVt -dfs -cVN -cVo -cVs -cVC -cVB -cTC -cXd -cTC -cTC -cTC -cTC -cTC -cTC -cTC -cTC -aaf +aaa +aaa +aaa +aaa +aaa aaf aaa -aai +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaf +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -130087,38 +130108,41 @@ cQf cPq acn acn +aaa +aaa +aaa +aaa aaf aaa -cTC -cUk -cUy -cUR -cVb -cVo -cVs -cVC -cVB -cVo -cVs -cVC -cVB -cVo -cVs -cVB -cVB -cTC -cXb -cXv -cXv -cXv -cXv -cXv -cXv -deO -cTC +aaa +aaf aaa aaa aaa +aaa +aaa +aaf +aaa +aaa +aaa +aaa +aaf +cTC +cTC +cTC +cTC +cTC +aaa +aaa +aaf +aaf +aaa +aaf +aaf +aaa +aaf +aaf +aai aag aaa aaa @@ -130154,9 +130178,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa "} (116,1,1) = {" aaa @@ -130343,39 +130364,42 @@ bVE bVE bVE aaf -aaf +aaa +aaa +aaa +aaa +aaa aaf aaa cTC -cUn -cUC -cUV -cVe -cVo -cVs +cTC +cTy +cTy +cTC +cTC +cTC +cTC +cTC +cTC +cTC +cTC +cTC +cTC +cVt +dfw cVB -cVB -cVo -cVs -cVB -cVB -cVo -cWw -cWE -cWL -cTC -cXf cTC cTC cTC -cTC -cTC -cTC -deP -cTC aaf aaa aaa +aaf +aaa +aaa +aaa +aaf +aaa aag aag aaa @@ -130411,9 +130435,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa "} (117,1,1) = {" aaa @@ -130599,41 +130620,44 @@ cOx bVE aaf aaf -aaa -aaa +aaf +aaf +aaf +aaf +aaf +aaf +aaf +aaf +cTC +cUl +cUz +cUS +cVc +cVo +cVt +cVD +cVN +cVo +cVt +dfs +cVN +cVo +cVs +cVC +cVB +cTC +cXd +cTC +cTC +cTC +cTC +cTC +cTC +cTC +cTC +aaf aaf aaa -cTC -cUm -cUA -cUU -cVd -cVo -cVu -cVE -cVO -cVo -cWe -cWj -cWo -cVo -cVw -cWD -cWK -cWV -cXe -cXw -cTC -cVB -deF -deJ -cTC -deP -cTC -cTC -cTC -cTC -aaa aai aaa aaa @@ -130668,9 +130692,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa "} (118,1,1) = {" aaa @@ -130857,44 +130878,44 @@ bVE aaa aaf aaa -cTO -cTC -cTC -cTC -cTC -cUA -cUU -cVg -cTu -cVw -cVG -cVS -cWb -cVw -cWk -cWp -cWb -cWy -cVH -cWN -cWX -cXh -dex -deC -cVB -cVB -cVB -cTC -deP -cTC -dfz -dfA -cTC +aaa +aaa +aaa +aaa +aaa aaf +aaa +cTC +cUk +cUy +cUR +cVb +cVo +cVs +cVC +cVB +cVo +cVs +cVC +cVB +cVo +cVs +cVB +cVB +cTC +cXb +cXv +cXv +cXv +cXv +cXv +cXv +deO +cTC +aaa +aaa +aaa aag -aaf -aaa -aaa aaa aaa aaa @@ -131114,45 +131135,45 @@ cTu cTy cTy cTy +cTy +cTy +cTy +cTy +aaf +aaf +aaa cTC -cTR -cTU -cTY -cUo -cUD -cUW -cVf -cVp -cVv -cVF -cVR -cVZ -cWf -cVF -cVR -cWu -cWx -cYU -deT -cWW -cXg -cXx -deB -deB -deG +cUn +cUC +cUV +cVe +cVo +cVs cVB +cVB +cVo +cVs +cVB +cVB +cVo +cWw +cWE +cWL cTC -deQ -cTy -deV -deV -cTy -aaa -aaa -aaa -aaa +cXf +cTC +cTC +cTC +cTC +cTC +cTC +deP +cTC +aaf aaa aaa +aag +aag aaa aaa aaa @@ -131370,46 +131391,46 @@ cTt cTw cTz cTA -cTB -cTP -cTT -cTW -cUj -cUp -cUF -cUY -cVi -cVr -cVy -cVI -cVV -cWd -cWd -cYG -cYH -cWd -cWd -cWd -cWP -cWY -cXj -dez -cVB -cVB -cVC -deL +dcN +dcN +dcN +dcQ +cTy +aaa +aaf +aaa +cTC +cUm +cUA +cUU +cVd +cVo +cVu +cVE +cVO +cVo +cWe +cWj +cWo +cVo +cVw +cWD +cWK +cWV +cXe +cXw +cTC +cVB +deF +deJ +cTC +deP +cTC +cTC +cTC cTC -deR -deS -deW -deW -deX -cXl -aaa -aaa -aaa -aaa aaa +aai aaa aaa aaa @@ -131628,45 +131649,45 @@ cTv cTy cTy cTy +cTy +cTy +dcW +cTy +cTO cTC -cTS -cTV -cUi cTC -cUE -cUX -cVh -cVq -cVx +cTC +cTC +cUA +cUU +cVg +cTu +cVw +cVG +cVS +cWb +cVw +cWk +cWp +cWb +cWy cVH -cVU -cWc -cWg -cVH -cWq -cWv -cWg -cYU -deU -cVh -cXi -dey -deD +cWN +cWX +cXh +dex +deC +cVB +cVB cVB -deH -deK cTC -cXs -cTy -deV -deV -cTy -aaa +deP +cTC +dfz +dfA +cTC aaf -aaa -aaa -aaa -aaa +aag aaa aaa aaa @@ -131885,43 +131906,43 @@ bVE aaa aaf aaa -cTQ +aaa +cTy +dcW +cTy cTC -cTX -cTC -cTC -cUG -cUX -cVk -cTu -cVA -cVL -cVX -cWb -cWi -cWn -cVX -cWb -cVx -cVH -cWR -cXa -cXr -deA -deC +cTR +cTU +cTY +cUo +cUD +cUW +cVf +cVp +cVv +cVF +cVR +cVZ +cWf +cVF +cVR +cWu +cWx +cYU +deT +cWW +cXg +cXx +deB +deB +deG cVB -cVB -deN cTC -cXs -cTC -dfz +deQ +cTy deV -cTC -aaa -aag -aaa -aaa +deV +cTy aaa aaa aaa @@ -132143,43 +132164,43 @@ aaa aaf aaa aaa -aaf -crZ +cTy +dcY +cTB +cTP +cTT +cTW +cUj +cUp +cUF +cUY +cVi +cVr +cVy +cVI +cVV +cWd +cWd +cYG +cYH +cWd +cWd +cWd +cWP +cWY +cXj +dez +cVB +cVB +cVC +deL cTC -cUq -cUG -cUX -cVj -cVo -cVz -cVK -cVW -cVo -cWh -cWm -cWt -cVo -cWz -cWG -cWQ -cWZ -cXq -cXw -cTC -deE -deI -deM -cTC -cXs -cTC -cTC -cTC -cTC -aaf -aag -aaa -aaa -aaa +deR +deS +deW +deW +deX +cXl aaa aaa aaa @@ -132399,47 +132420,47 @@ bVE aaf aaf aaf -aaf -aaf -aaf +aaa +cTy +cTy +cTy cTC -cUw -cUP +cTS +cTV +cUi +cTC +cUE cUX -cVm -cVo +cVh +cVq +cVx +cVH +cVU +cWc +cWg +cVH +cWq +cWv +cWg +cYU +deU +cVh +cXi +dey +deD cVB -cVB -cVs -cVo -cVB -cVB -cVs -cVo -cWC -cWJ -cWU -cTC -cXt -cTC -cTC -cTC -cTC -cTC +deH +deK cTC cXs -cTC +cTy +deV +deV +cTy +aaa aaf aaa aaa -aag -aag -aaa -aaa -aaa -aaa -aaa -aaa aaa aaa aaa @@ -132658,43 +132679,43 @@ aaa aaf aaa aaa -aaf +aaa +aaa +cTQ cTC -cUv -cUH -cUZ -cVl -cVo +cTX +cTC +cTC +cUG +cUX +cVk +cTu +cVA +cVL +cVX +cWb +cWi +cWn +cVX +cWb +cVx +cVH +cWR +cXa +cXr +deA +deC cVB -cVC -cVs -cVo cVB -cVC -cVs -cVo -cWB -cWH -cWT +deN cTC cXs -cXs -cXs -cXs -cXs -cXs -cXs -cXs cTC -aaf -aaf -aaa -aai -aaa -aaa -aaa -aaa +dfz +deV +cTC aaa +aag aaa aaa aaa @@ -132915,37 +132936,42 @@ bVE bVE bVE aaa +aaa +aaa +aaa aaf +crZ cTC -cUx -cUQ -cVa -cVn +cUq +cUG +cUX +cVj cVo -cVB -cVM -cVY +cVz +cVK +cVW cVo -cVN -dft -cVY +cWh +cWm +cWt cVo -cVB -cVC -cVs -cTC -cXu -cTC -cTC +cWz +cWG +cWQ +cWZ +cXq +cXw cTC +deE +deI +deM cTC +cXs cTC cTC cTC cTC aaf -aaa -aaa aag aaa aaa @@ -132979,11 +133005,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa "} (127,1,1) = {" aaa @@ -133171,44 +133192,44 @@ ciE cQP cRu bVE +aaa +aaa +aaa +aaf aaf aaf cTC -cTC -cTy -cTy -cTC -cTC -cTC -cTC -cTC -cTC -cTC -cTC -cTC -cTC +cUw +cUP +cUX +cVm +cVo cVB -dfx -cVY +cVB +cVs +cVo +cVB +cVB +cVs +cVo +cWC +cWJ +cWU +cTC +cXt cTC cTC cTC -aaa -aaf -aaf -aaf -aaf +cTC +cTC +cTC +cXs +cTC aaf aaa -aaf -aaf +aaa aag aag -aaf -aaa -aaa -aaa -aaa aaa aaa aaa @@ -133429,36 +133450,41 @@ bZQ cRv bVE aaa -aaf -aaa -aaf -aaa -aaa -aaa -aaf aaa aaa aaa aaa aaf -aaa -aaa cTC +cUv +cUH +cUZ +cVl +cVo +cVB +cVC +cVs +cVo +cVB +cVC +cVs +cVo +cWB +cWH +cWT cTC +cXs +cXs +cXs +cXs +cXs +cXs +cXs +cXs cTC -cTC -cTC -aaa aaf -aaa -aaa -aaa aaf aaa -aaa -aaa -aaa -aaa aai aaa aaa @@ -133493,11 +133519,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa "} (129,1,1) = {" aaa @@ -133688,34 +133709,39 @@ bVE aaa aaf aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf aaa aaa aaf +cTC +cUx +cUQ +cVa +cVn +cVo +cVB +cVM +cVY +cVo +cVN +dft +cVY +cVo +cVB +cVC +cVs +cTC +cXu +cTC +cTC +cTC +cTC +cTC +cTC +cTC +cTC +aaf aaa aaa -aaa -aaa -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aaf -aai aag aaa aaa @@ -133750,11 +133776,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa "} (130,1,1) = {" aaa @@ -133945,20 +133966,30 @@ bVE aaa aaf aaa -aaf -aaa -aaa -aaa -aaf -aaa -aaa -aaf -aaa aaa aaf aaf -aaf -aaf +cTC +cTC +cTy +cTy +cTC +cTC +cTC +cTC +cTC +cTC +cTC +cTC +cTC +cTC +cVB +dfx +cVY +cTC +cTC +cTC +aaa aaf aaf aaf @@ -133966,20 +133997,10 @@ aaf aaf aaa aaf -aaa -aaa -aaa -aaa aaf -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aag +aag +aaf aaa aaa aaa @@ -134202,15 +134223,29 @@ bVE aaa aaf aaa +aaa +aaa aaf +aaa aaf aaa aaa +aaa aaf aaa aaa aaa aaa +aaf +aaa +aaa +cTC +cTC +cTC +cTC +cTC +aaa +aaf aaa aaa aaa @@ -134220,21 +134255,7 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aai aaa aaa aaa @@ -138238,7 +138259,7 @@ avN aXR aZH baX -bcM +apF bee bfH aXR @@ -140571,9 +140592,9 @@ bFT bHN bJw bKQ -bzf +aaQ +atw bOj -atn bRw bTc bUq @@ -140828,9 +140849,9 @@ bEn bHO bJx bKR -bzf +aiT +atw bOk -apk bRx apk aqy @@ -141085,9 +141106,9 @@ bFU bHP bJy bKS -bzf -cXn -apk +bDx +atw +bOl bRy apk bUr @@ -141342,9 +141363,9 @@ bEn bHQ bJz bKT -bzf -bOl -bQa +bDx +atw +cXn bRz bTd apk diff --git a/_maps/map_files/MiniStation/MiniStation.dmm b/_maps/map_files/MiniStation/MiniStation.dmm index 94f22215cc9..22ba4c45af9 100644 --- a/_maps/map_files/MiniStation/MiniStation.dmm +++ b/_maps/map_files/MiniStation/MiniStation.dmm @@ -15166,8 +15166,7 @@ }, /area/tcommsat/computer) "Gu" = ( -/obj/machinery/sleeper{ - icon_state = "sleeper-open"; +/obj/machinery/sleeper/syndie{ dir = 4 }, /turf/open/floor/plasteel/shuttle{ diff --git a/_maps/map_files/TgStation/tgstation.2.1.3.dmm b/_maps/map_files/TgStation/tgstation.2.1.3.dmm index ea06612a0c9..a2831ee955f 100644 --- a/_maps/map_files/TgStation/tgstation.2.1.3.dmm +++ b/_maps/map_files/TgStation/tgstation.2.1.3.dmm @@ -373,11 +373,8 @@ /turf/closed/wall/r_wall, /area/ai_monitored/security/armory) "aba" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, /obj/structure/lattice, +/obj/structure/grille/broken, /turf/open/space, /area/space) "abb" = ( @@ -2055,7 +2052,7 @@ pixel_x = 6; pixel_y = 24 }, -/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/open/floor/plasteel{ icon_state = "redcorner"; dir = 4 @@ -2521,7 +2518,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, /turf/open/floor/plasteel, /area/security/prison) "aeV" = ( @@ -2939,8 +2936,7 @@ /obj/structure/table, /obj/item/device/electropack, /turf/open/floor/plasteel{ - icon_state = "whitehall"; - dir = 2 + icon_state = "red" }, /area/security/prison) "afE" = ( @@ -2957,9 +2953,9 @@ "afF" = ( /obj/structure/table, /obj/item/device/assembly/signaler, +/obj/item/clothing/suit/straight_jacket, /turf/open/floor/plasteel{ - dir = 2; - icon_state = "escape" + icon_state = "red" }, /area/security/prison) "afG" = ( @@ -2975,8 +2971,7 @@ pixel_x = -6 }, /turf/open/floor/plasteel{ - icon_state = "whitehall"; - dir = 2 + icon_state = "red" }, /area/security/prison) "afH" = ( @@ -2988,10 +2983,8 @@ }, /area/security/prison) "afI" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel{ - icon_state = "whitehall"; - dir = 2 + icon_state = "red" }, /area/security/prison) "afJ" = ( @@ -3000,8 +2993,7 @@ pixel_y = -27 }, /turf/open/floor/plasteel{ - icon_state = "whitehall"; - dir = 2 + icon_state = "red" }, /area/security/prison) "afK" = ( @@ -3239,13 +3231,13 @@ }, /area/security/prison) "agl" = ( -/obj/machinery/door/airlock/glass_security{ - name = "Insanity Ward"; - req_access_txt = "2" +/obj/machinery/door/airlock/security{ + name = "Interrogation"; + req_access = null; + req_access_txt = "63" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel{ - icon_state = "white" + icon_state = "dark" }, /area/security/prison) "agm" = ( @@ -3315,16 +3307,13 @@ }, /area/security/warden) "ags" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/obj/structure/chair{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel{ - icon_state = "showroomfloor" + icon_state = "dark" }, -/area/security/warden) +/area/security/prison) "agt" = ( /turf/open/floor/plasteel{ icon_state = "showroomfloor" @@ -3474,46 +3463,14 @@ }, /area/security/main) "agH" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel{ - icon_state = "warnwhite"; - dir = 1 - }, -/area/security/prison) -"agI" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel{ - icon_state = "warnwhite"; - dir = 5 - }, -/area/security/prison) -"agJ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /turf/open/floor/plasteel{ icon_state = "dark" }, -/area/security/brig) -"agK" = ( -/obj/machinery/atmospherics/components/unary/vent_pump{ - dir = 4; - on = 1 - }, -/turf/open/floor/plasteel{ - icon_state = "dark" - }, -/area/security/brig) -"agL" = ( -/obj/structure/table, -/obj/item/weapon/folder/red, -/obj/item/weapon/pen, -/turf/open/floor/plasteel{ - dir = 9; - icon_state = "warnwhite" - }, /area/security/prison) -"agM" = ( +"agI" = ( /obj/machinery/airalarm{ pixel_y = 23 }, @@ -3523,8 +3480,8 @@ /turf/open/floor/plasteel{ icon_state = "dark" }, -/area/security/brig) -"agN" = ( +/area/security/prison) +"agJ" = ( /obj/item/weapon/cigbutt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 @@ -3532,6 +3489,45 @@ /turf/open/floor/plasteel{ icon_state = "dark" }, +/area/security/prison) +"agK" = ( +/turf/open/floor/plasteel{ + icon_state = "dark" + }, +/area/security/prison) +"agL" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 4; + on = 1 + }, +/turf/open/floor/plasteel{ + icon_state = "dark" + }, +/area/security/prison) +"agM" = ( +/obj/structure/table, +/obj/item/clothing/gloves/color/latex, +/obj/item/clothing/mask/surgical, +/obj/item/weapon/reagent_containers/spray/cleaner, +/turf/open/floor/plasteel{ + dir = 9; + icon_state = "whitered" + }, +/area/security/brig) +"agN" = ( +/obj/structure/table, +/obj/item/device/radio/intercom{ + freerange = 0; + frequency = 1459; + name = "Station Intercom (General)"; + pixel_x = 0; + pixel_y = 26 + }, +/obj/item/weapon/storage/firstaid/regular, +/turf/open/floor/plasteel{ + dir = 10; + icon_state = "whitered" + }, /area/security/brig) "agO" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -3766,73 +3762,32 @@ }, /area/security/main) "ahm" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 9 +/obj/structure/window/reinforced{ + dir = 4 }, +/obj/structure/table, +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/weapon/pen, /turf/open/floor/plasteel{ - icon_state = "white" + dir = 5; + icon_state = "whitered" }, -/area/security/prison) +/area/security/brig) "ahn" = ( /turf/closed/wall, /area/maintenance/fsmaint) "aho" = ( -/turf/open/floor/plasteel{ - icon_state = "white" - }, -/area/security/prison) -"ahp" = ( -/obj/machinery/light{ - icon_state = "tube1"; - dir = 8 - }, -/obj/item/device/radio/intercom{ - desc = "Talk through this. It looks like it has been modified to not broadcast."; - dir = 2; - name = "Prison Intercom (General)"; - pixel_x = -25; - pixel_y = -2; - prison_radio = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber{ - dir = 4; - on = 1; - scrub_N2O = 0; - scrub_Toxins = 0 - }, -/turf/open/floor/plasteel{ - icon_state = "white" - }, -/area/security/prison) -"ahq" = ( -/obj/machinery/flasher{ - id = "insaneflash"; - pixel_x = 26 - }, -/obj/machinery/atmospherics/components/unary/vent_pump{ - dir = 1; - external_pressure_bound = 101.325; - on = 1; - pressure_checks = 1 - }, -/turf/open/floor/plasteel{ - icon_state = "white" - }, -/area/security/prison) -"ahr" = ( -/obj/structure/chair{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, /turf/open/floor/plasteel{ icon_state = "dark" }, -/area/security/brig) -"ahs" = ( -/turf/open/floor/plasteel{ - icon_state = "dark" - }, -/area/security/brig) -"aht" = ( +/area/security/prison) +"ahp" = ( /obj/structure/chair{ dir = 8 }, @@ -3840,13 +3795,57 @@ /turf/open/floor/plasteel{ icon_state = "dark" }, -/area/security/brig) -"ahu" = ( +/area/security/prison) +"ahq" = ( /obj/structure/table, /obj/item/device/flashlight/lamp, /turf/open/floor/plasteel{ icon_state = "dark" }, +/area/security/prison) +"ahr" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel{ + icon_state = "white" + }, +/area/security/brig) +"ahs" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/airalarm{ + pixel_y = 28 + }, +/turf/open/floor/plasteel{ + dir = 1; + icon_state = "whitered" + }, +/area/security/brig) +"aht" = ( +/obj/machinery/atmospherics/components/unary/vent_pump{ + dir = 4; + on = 1 + }, +/turf/open/floor/plasteel{ + icon_state = "white" + }, +/area/security/brig) +"ahu" = ( +/obj/structure/table, +/obj/item/weapon/storage/box/bodybags, +/obj/structure/extinguisher_cabinet{ + pixel_x = -27; + pixel_y = 0 + }, +/obj/item/weapon/reagent_containers/syringe, +/obj/item/weapon/reagent_containers/glass/bottle/charcoal, +/obj/item/weapon/reagent_containers/glass/bottle/epinephrine, +/turf/open/floor/plasteel{ + dir = 10; + icon_state = "whitered" + }, /area/security/brig) "ahv" = ( /obj/machinery/power/apc{ @@ -3968,21 +3967,21 @@ /turf/open/floor/plasteel, /area/security/main) "ahD" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" +/obj/machinery/door/window/westleft{ + base_state = "left"; + dir = 4; + icon_state = "left"; + name = "Infirmary"; + req_access_txt = "0" }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/open/floor/plasteel{ - icon_state = "showroomfloor" + dir = 4; + icon_state = "whitered" }, -/area/security/warden) +/area/security/brig) "ahE" = ( /obj/machinery/door/airlock/glass_security{ name = "Brig Control"; @@ -4163,12 +4162,8 @@ /turf/closed/wall, /area/security/main) "ahP" = ( -/obj/machinery/camera{ - c_tag = "Brig Interrogation"; - dir = 8 - }, /turf/open/floor/plasteel{ - icon_state = "dark" + icon_state = "white" }, /area/security/brig) "ahQ" = ( @@ -4227,33 +4222,22 @@ /turf/open/floor/plating, /area/maintenance/fsmaint) "ahU" = ( -/obj/structure/bed, -/obj/item/clothing/suit/straight_jacket, -/obj/machinery/camera{ - c_tag = "Prison Sanitatium"; - dir = 4; - network = list("SS13","Prison"); - pixel_x = 0; +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; pixel_y = 0 }, -/obj/effect/landmark{ - name = "revenantspawn" +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 }, /turf/open/floor/plasteel{ - icon_state = "white" + icon_state = "red"; + dir = 9 }, -/area/security/prison) +/area/security/brig) "ahV" = ( -/obj/structure/bed, -/obj/item/clothing/suit/straight_jacket, -/obj/effect/landmark{ - name = "revenantspawn" - }, -/turf/open/floor/plasteel{ - icon_state = "white" - }, -/area/security/prison) -"ahW" = ( /obj/structure/table, /obj/item/weapon/folder/red, /obj/item/device/taperecorder{ @@ -4262,6 +4246,15 @@ /turf/open/floor/plasteel{ icon_state = "dark" }, +/area/security/prison) +"ahW" = ( +/obj/structure/bodycontainer/morgue, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/open/floor/plasteel{ + icon_state = "dark" + }, /area/security/brig) "ahX" = ( /obj/structure/table, @@ -4346,12 +4339,10 @@ /turf/open/floor/plating, /area/maintenance/fsmaint) "aid" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/light/small, /turf/open/floor/plasteel{ - icon_state = "dark" + dir = 10; + icon_state = "whitered" }, /area/security/brig) "aie" = ( @@ -4387,19 +4378,14 @@ }, /area/security/warden) "aih" = ( -/obj/structure/table, -/obj/item/weapon/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/weapon/book/manual/wiki/security_space_law, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, /turf/open/floor/plasteel{ - icon_state = "showroomfloor" + icon_state = "red"; + dir = 5 }, -/area/security/warden) +/area/security/brig) "aii" = ( /obj/structure/grille, /obj/structure/disposalpipe/segment{ @@ -4441,9 +4427,14 @@ }, /area/security/main) "ail" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/closed/wall, -/area/security/brig) +/obj/machinery/camera{ + c_tag = "Brig Interrogation"; + dir = 8 + }, +/turf/open/floor/plasteel{ + icon_state = "dark" + }, +/area/security/prison) "aim" = ( /obj/machinery/light_switch{ pixel_y = -23 @@ -4454,14 +4445,9 @@ }, /area/security/main) "ain" = ( -/obj/machinery/door/airlock/security{ - name = "Interrogation"; - req_access = null; - req_access_txt = "63" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel{ - icon_state = "dark" + dir = 8; + icon_state = "whitered" }, /area/security/brig) "aio" = ( @@ -4569,24 +4555,18 @@ }, /area/security/main) "aiw" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Security Maintenance"; - req_access_txt = "63" +/obj/machinery/door/window/westleft{ + base_state = "right"; + dir = 4; + icon_state = "right"; + name = "Infirmary"; + req_access_txt = "0" }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_y = 0 +/turf/open/floor/plasteel{ + dir = 4; + icon_state = "whitered" }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/open/floor/plating, -/area/security/main) +/area/security/brig) "aix" = ( /obj/structure/cable{ d1 = 4; @@ -4631,45 +4611,49 @@ /turf/open/floor/plating, /area/maintenance/fsmaint) "aiB" = ( -/obj/structure/table/glass, -/obj/item/weapon/reagent_containers/glass/bottle/morphine, -/turf/open/floor/plasteel{ - icon_state = "white" - }, -/area/security/prison) -"aiC" = ( -/obj/structure/table/glass, -/obj/item/weapon/reagent_containers/syringe, -/turf/open/floor/plasteel{ - icon_state = "white" - }, -/area/security/prison) -"aiD" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel{ - icon_state = "dark" - }, -/area/security/brig) -"aiE" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber{ dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0 }, +/turf/open/floor/plasteel{ + icon_state = "dark" + }, +/area/security/prison) +"aiC" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel{ + icon_state = "dark" + }, +/area/security/prison) +"aiD" = ( +/obj/structure/bodycontainer/morgue, /turf/open/floor/plasteel{ icon_state = "dark" }, /area/security/brig) -"aiF" = ( +"aiE" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, /turf/open/floor/plasteel{ icon_state = "dark" }, +/area/security/prison) +"aiF" = ( +/obj/structure/bed, +/obj/item/weapon/bedsheet, +/obj/machinery/iv_drip{ + density = 0 + }, +/obj/item/clothing/suit/straight_jacket, +/turf/open/floor/plasteel{ + icon_state = "whitered" + }, /area/security/brig) "aiG" = ( /turf/open/floor/plasteel{ @@ -4780,20 +4764,19 @@ /turf/open/floor/plating, /area/security/warden) "aiO" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security{ - name = "Security Office"; - req_access = null; - req_access_txt = "63" +/obj/structure/window/reinforced{ + dir = 4 }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/obj/structure/table, +/obj/item/weapon/storage/firstaid/regular, +/obj/item/device/healthanalyzer{ + pixel_y = -2 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel, -/area/security/main) +/turf/open/floor/plasteel{ + dir = 6; + icon_state = "whitered" + }, +/area/security/brig) "aiP" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall/r_wall, @@ -4830,10 +4813,16 @@ /turf/closed/wall/r_wall, /area/security/processing) "aiW" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/fulltile, -/turf/open/floor/plating, -/area/security/brig) +/obj/machinery/door/airlock/security{ + name = "Interrogation"; + req_access = null; + req_access_txt = "63" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel{ + icon_state = "dark" + }, +/area/security/prison) "aiX" = ( /turf/closed/wall/r_wall, /area/security/brig) @@ -4854,7 +4843,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel{ icon_state = "redcorner"; dir = 1 @@ -4867,7 +4855,9 @@ icon_state = "4-8"; pixel_y = 0 }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, /turf/open/floor/plasteel, /area/security/brig) "ajb" = ( @@ -5072,6 +5062,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel{ icon_state = "red"; dir = 1 @@ -5110,9 +5101,7 @@ }, /area/security/brig) "ajA" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/open/floor/plasteel{ icon_state = "red"; dir = 1 @@ -5417,9 +5406,7 @@ c_tag = "Brig West"; dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, /turf/open/floor/plasteel{ dir = 2; icon_state = "redcorner" @@ -6381,9 +6368,12 @@ /turf/open/floor/plating, /area/maintenance/fpmaint2) "alX" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/maintenance/fpmaint2) +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister/bz, +/turf/open/floor/plasteel, +/area/atmos) "alY" = ( /obj/machinery/door/airlock/shuttle{ name = "Labor Shuttle Airlock"; @@ -12504,10 +12494,7 @@ name = "\improper Garden" }) "azr" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /turf/open/floor/plating, /area/maintenance/fsmaint2) "azs" = ( @@ -14040,10 +14027,7 @@ /turf/open/floor/plating, /area/maintenance/fsmaint2) "aCA" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/structure/cable{ d1 = 1; d2 = 8; @@ -40715,14 +40699,11 @@ /turf/open/floor/plating, /area/maintenance/asmaint) "bFn" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" }, +/obj/structure/grille/broken, /turf/open/floor/plating, /area/maintenance/asmaint) "bFo" = ( @@ -40926,6 +40907,7 @@ /obj/machinery/light/small{ dir = 8 }, +/obj/machinery/portable_atmospherics/canister/bz, /turf/open/floor/plasteel{ icon_state = "floorgrime" }, @@ -41668,6 +41650,7 @@ dir = 4; network = list("SS13","RD") }, +/obj/machinery/portable_atmospherics/canister/bz, /turf/open/floor/plasteel{ icon_state = "floorgrime" }, @@ -42076,10 +42059,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /turf/open/floor/plating, /area/maintenance/asmaint) "bHV" = ( @@ -45170,6 +45150,7 @@ name = "Station Intercom (General)"; pixel_x = -30 }, +/obj/machinery/portable_atmospherics/canister/bz, /turf/open/floor/plasteel, /area/atmos) "bNQ" = ( @@ -46204,10 +46185,7 @@ /area/maintenance/aft) "bPY" = ( /obj/structure/girder, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /turf/open/floor/plating, /area/maintenance/fsmaint2) "bPZ" = ( @@ -47240,10 +47218,7 @@ /turf/open/floor/wood, /area/maintenance/aft) "bSp" = ( -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /turf/open/floor/plating, /area/maintenance/aft) "bSq" = ( @@ -54016,10 +53991,7 @@ /area/maintenance/asmaint) "cgf" = ( /obj/structure/disposalpipe/segment, -/obj/structure/grille{ - density = 0; - icon_state = "brokengrille" - }, +/obj/structure/grille/broken, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -57194,8 +57166,7 @@ }, /area/engine/engineering) "cmM" = ( -/obj/machinery/sleeper{ - icon_state = "sleeper-open"; +/obj/machinery/sleeper/syndie{ dir = 4 }, /turf/open/floor/plasteel/shuttle{ @@ -89622,12 +89593,12 @@ adF aef aeM afz -acd aai aai aai aai -aiV +aai +aai ajt akc akJ @@ -89881,10 +89852,10 @@ aeO afJ acd agL -ahp -ahU +agK +agK aiB -aiX +aai ajw akf aiX @@ -90134,14 +90105,14 @@ abK acY adG aeh -aeR +aeO afI agl agH -ahm +ags +ags aho -aho -aiW +acd ajv ake agj @@ -90392,13 +90363,13 @@ acd acd aek aeU -afE -adF +afI +acd agI ahq ahV -aiC -agj +aho +acd ajy akh afK @@ -90650,12 +90621,12 @@ adF aej aeQ afD -agj -agj -agj -agj -agj -agj +acd +agJ +ahp +ahp +aiC +adF ajx akg agj @@ -90907,12 +90878,12 @@ adI aem aeO afG -agj +acd agK -ahs -ahs +agK +ail aiE -agj +aiW ajA akj agj @@ -91165,10 +91136,10 @@ ael aeO afF agj -agJ -ahs -ahs -aiD +agj +agj +agj +agj agj ajz aki @@ -91681,11 +91652,11 @@ afH agj agN aht -aht +ain aid -ail +agj aiZ -ajF +akk akN alw amg @@ -91937,10 +91908,10 @@ aeT afH agj ahs -ahs +ahr ahP aiF -ain +agj aja ajG akQ @@ -92193,10 +92164,10 @@ aeq aeV acd agj -agj -agj -agj -agj +ahm +ahD +aiw +aiO agj ajD akm @@ -92451,7 +92422,7 @@ afC agk agF agP -agP +ahU agP agP aiz @@ -92708,7 +92679,7 @@ afB agi agD agO -agO +aih agO agO aiy @@ -95094,7 +95065,7 @@ bJs bKy bLM bLM -bNQ +alX bOV bQk bRt diff --git a/_maps/map_files/generic/z2.dmm b/_maps/map_files/generic/z2.dmm index 83ac1904f6a..a2953331701 100644 --- a/_maps/map_files/generic/z2.dmm +++ b/_maps/map_files/generic/z2.dmm @@ -2954,10 +2954,8 @@ color = "#008000"; icon_state = "small" }, -/obj/structure/grille{ - color = "#008000"; - density = 0; - icon_state = "brokengrille" +/obj/structure/grille/broken{ + color = "#008000" }, /turf/open/floor/plating/airless, /area/wizard_station) @@ -4118,10 +4116,8 @@ /turf/open/floor/plasteel/cult, /area/wizard_station) "mB" = ( -/obj/structure/grille{ - color = "#008000"; - density = 0; - icon_state = "brokengrille" +/obj/structure/grille/broken{ + color = "#008000" }, /turf/open/floor/plating, /area/wizard_station) @@ -4216,10 +4212,8 @@ color = "#008000"; icon_state = "medium" }, -/obj/structure/grille{ - color = "#008000"; - density = 0; - icon_state = "brokengrille" +/obj/structure/grille/broken{ + color = "#008000" }, /turf/open/floor/plating, /area/wizard_station) diff --git a/_maps/map_files/generic/z3.dmm b/_maps/map_files/generic/z3.dmm index 140b55a7d2b..471aeaadf7e 100644 --- a/_maps/map_files/generic/z3.dmm +++ b/_maps/map_files/generic/z3.dmm @@ -1,193 +1,193 @@ "aa" = (/turf/open/space,/area/space) "ab" = (/obj/docking_port/stationary{dheight = 0; dir = 2; dwidth = 11; height = 22; id = "whiteship_away"; name = "Deep Space"; width = 35},/turf/open/space,/area/space) -"aN" = (/obj/structure/lattice,/turf/open/space,/area/space) -"bj" = (/obj/effect/spawner/lootdrop/crate_spawner,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) -"bk" = (/obj/effect/spawner/lootdrop/crate_spawner,/turf/open/floor/plating/airless,/area/AIsattele) -"bB" = (/obj/item/trash/cheesie,/turf/open/space,/area/space) -"bK" = (/turf/open/floor/plating/airless,/area/space) -"bL" = (/obj/structure/lattice,/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/open/space,/area/space) -"bM" = (/obj/structure/lattice,/obj/structure/grille,/turf/open/space,/area/space) -"bN" = (/obj/structure/grille,/turf/open/floor/plating/airless,/area/space) -"bO" = (/turf/closed/wall/r_wall,/area/space) -"bP" = (/obj/structure/girder,/turf/open/floor/plating/airless,/area/space) -"bQ" = (/turf/closed/wall/r_wall,/area/tcommsat/chamber) -"bR" = (/obj/structure/girder,/turf/open/floor/plating/airless,/area/tcommsat/chamber) -"bS" = (/turf/open/floor/plating/airless,/area/tcommsat/chamber) -"bT" = (/obj/structure/window/reinforced{dir = 4},/turf/open/space,/area/space) -"bU" = (/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/tcommsat/chamber) -"bV" = (/obj/machinery/power/apc{cell_type = 2500; dir = 1; name = "Worn-out APC"; pixel_x = 1; pixel_y = 26},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/open/floor/plating/airless,/area/tcommsat/chamber) -"bW" = (/obj/machinery/light/small{dir = 1},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/open/floor/plating/airless,/area/tcommsat/chamber) -"bX" = (/obj/item/weapon/stock_parts/cell,/turf/open/floor/plating/airless,/area/tcommsat/chamber) -"bY" = (/obj/machinery/portable_atmospherics/canister/air,/turf/open/floor/plating/airless,/area/tcommsat/chamber) -"bZ" = (/obj/item/weapon/coin/clown,/turf/open/floor/engine,/area/tcommsat/chamber) -"ca" = (/obj/structure/bed,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) -"cb" = (/obj/machinery/light/small{dir = 1},/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) -"cc" = (/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/tcommsat/chamber) -"cd" = (/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/tcommsat/chamber) -"ce" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 4},/turf/open/space,/area/space) -"cf" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/open/floor/plating/airless,/area/tcommsat/chamber) -"cg" = (/obj/item/weapon/wrench,/turf/open/floor/plating/airless,/area/tcommsat/chamber) -"ch" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/portable_atmospherics/canister/air,/turf/open/floor/plating/airless,/area/tcommsat/chamber) -"ci" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 8},/turf/open/space,/area/space) -"cj" = (/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) -"ck" = (/obj/structure/table,/obj/item/weapon/paper,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) -"cl" = (/obj/structure/table,/obj/item/weapon/paper_bin,/obj/item/weapon/pen/blue,/obj/machinery/light/small{dir = 1},/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) -"cm" = (/obj/structure/frame/computer,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) -"cn" = (/obj/structure/table,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) -"co" = (/obj/item/weapon/reagent_containers/food/snacks/meat/slab/synthmeat{name = "Cuban Pete-Meat"},/turf/open/floor/engine,/area/tcommsat/chamber) -"cp" = (/obj/structure/grille,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) -"cq" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) -"cr" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/tcommsat/chamber) -"cs" = (/obj/structure/window/reinforced,/turf/open/floor/plating/airless,/area/tcommsat/chamber) -"ct" = (/obj/item/stack/cable_coil/cut{amount = 1},/turf/open/floor/plating/airless,/area/tcommsat/chamber) -"cu" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/closet,/turf/open/floor/plating/airless,/area/tcommsat/chamber) -"cv" = (/obj/structure/window/reinforced{dir = 8},/turf/open/space,/area/space) -"cw" = (/obj/item/weapon/folder/yellow,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) -"cx" = (/obj/structure/bed,/obj/effect/decal/remains/human,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) -"cy" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/turf/open/space,/area/space) -"cz" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/turf/open/space,/area/space) -"cA" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plating/airless,/area/tcommsat/chamber) -"cB" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/open/space,/area/space) -"cC" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/open/space,/area/space) -"cD" = (/obj/structure/window/reinforced,/turf/open/space,/area/space) -"cE" = (/obj/structure/sign/securearea,/turf/closed/wall/r_wall,/area/tcommsat/chamber) -"cF" = (/obj/machinery/light/small{dir = 8},/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) -"cG" = (/obj/item/weapon/paper/crumpled,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) -"cH" = (/obj/item/weapon/reagent_containers/food/snacks/meat/slab/synthmeat{name = "Cuban Pete-Meat"},/obj/item/stack/spacecash,/turf/open/floor/engine,/area/tcommsat/chamber) -"cI" = (/obj/structure/chair{dir = 4},/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) -"cJ" = (/obj/structure/table,/obj/item/weapon/storage/fancy/cigarettes,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) -"cK" = (/obj/structure/chair{dir = 8},/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) -"cL" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) -"cM" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) -"cN" = (/obj/structure/window/reinforced,/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) -"cO" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/item/weapon/electronics/airlock,/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) -"cP" = (/obj/structure/door_assembly/door_assembly_hatch,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) -"cQ" = (/obj/item/weapon/cigbutt,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) -"cR" = (/obj/machinery/vending/snack,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) -"cS" = (/obj/machinery/vending/cola,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) -"cT" = (/obj/structure/chair{dir = 1},/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) -"cU" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 4},/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) -"cV" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/closed/wall/r_wall,/area/tcommsat/chamber) -"cW" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/closed/wall/r_wall,/area/space) -"cX" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/open/floor/plating/airless,/area/space) -"cY" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/open/floor/plating/airless,/area/space) -"cZ" = (/obj/structure/disposaloutlet{dir = 4},/obj/structure/disposalpipe/trunk{dir = 8},/turf/open/floor/plating/airless,/area/space) -"da" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) -"db" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/open/space,/area/space) -"dc" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/turf/open/space,/area/space) -"dd" = (/obj/structure/window/reinforced{dir = 1},/turf/open/space,/area/space) -"de" = (/obj/structure/table,/obj/item/device/radio/off,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) -"df" = (/obj/structure/chair,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) -"dg" = (/obj/machinery/door/airlock/maintenance_hatch,/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) -"dh" = (/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) -"di" = (/obj/machinery/door/airlock/hatch,/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) -"dk" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/lattice,/turf/open/space,/area/space) -"dl" = (/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) -"dm" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/tcommsat/chamber) -"dn" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/tcommsat/chamber) -"do" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/tcommsat/chamber) -"dp" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plating/airless,/area/tcommsat/chamber) -"dq" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) -"dr" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/turf/open/space,/area/space) -"ds" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/item/stack/rods,/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) -"dt" = (/obj/item/stack/rods,/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/plating/airless,/area/tcommsat/chamber) -"du" = (/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) -"dv" = (/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) -"dw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating,/area/tcommsat/chamber) -"dx" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/open/floor/plating,/area/tcommsat/chamber) -"dy" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/open/floor/plating,/area/tcommsat/chamber) -"dz" = (/obj/effect/decal/cleanable/blood,/obj/item/weapon/scalpel{pixel_y = 12},/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) -"dA" = (/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) -"dB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating,/area/tcommsat/chamber) -"dC" = (/obj/structure/rack,/obj/item/weapon/circuitboard/computer/teleporter,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) -"dD" = (/obj/item/device/radio/off,/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) -"dE" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/open/floor/plating,/area/tcommsat/chamber) -"dF" = (/obj/effect/decal/cleanable/oil,/turf/open/floor/plating/airless,/area/tcommsat/chamber) -"dG" = (/obj/effect/decal/cleanable/blood,/obj/structure/chair,/obj/item/clothing/under/rank/centcom_officer,/obj/item/weapon/restraints/handcuffs,/obj/effect/decal/remains/human,/turf/open/floor/plating/airless,/area/tcommsat/chamber) -"dH" = (/obj/structure/table,/obj/item/device/flashlight/lamp,/turf/open/floor/plating/airless,/area/tcommsat/chamber) -"dI" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) -"dJ" = (/obj/structure/door_assembly/door_assembly_mhatch,/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) -"dK" = (/obj/machinery/light/small{dir = 4},/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) -"dL" = (/obj/item/weapon/cigbutt,/turf/open/floor/plating/airless,/area/tcommsat/chamber) -"dM" = (/obj/effect/decal/cleanable/blood,/obj/item/device/assembly/signaler,/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) -"dN" = (/obj/structure/table,/obj/item/weapon/reagent_containers/syringe/lethal/choral,/obj/item/weapon/reagent_containers/syringe/lethal{pixel_y = 4},/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) -"dO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating,/area/tcommsat/chamber) -"dP" = (/obj/item/weapon/storage/toolbox/syndicate,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) -"dQ" = (/obj/structure/table,/obj/item/device/electropack,/turf/open/floor/plating/airless,/area/tcommsat/chamber) -"dR" = (/obj/structure/table,/obj/item/weapon/hemostat,/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) -"dS" = (/obj/structure/table,/obj/item/weapon/circular_saw,/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) -"dT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/open/floor/plating,/area/tcommsat/chamber) -"dU" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/item/stack/rods,/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) -"dV" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/open/space,/area/space) -"dW" = (/obj/structure/window/reinforced,/obj/structure/lattice,/turf/open/space,/area/space) -"dX" = (/turf/open/floor/plasteel/airless{dir = 9; icon_state = "warning"},/area/tcommsat/chamber) -"dY" = (/turf/open/floor/plasteel/airless{icon_state = "warningcorner"; dir = 4},/area/tcommsat/chamber) -"dZ" = (/turf/open/floor/plasteel/airless{icon_state = "warning"; dir = 1},/area/tcommsat/chamber) -"ea" = (/turf/open/floor/plasteel/airless{dir = 5; icon_state = "warning"},/area/tcommsat/chamber) -"eb" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/open/space,/area/space) -"ec" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) -"ed" = (/obj/item/weapon/paper/crumpled,/turf/open/floor/plasteel/airless{dir = 8; icon_state = "warning"},/area/tcommsat/chamber) -"ee" = (/obj/item/stack/rods,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) -"ef" = (/turf/open/floor/plasteel/airless{dir = 4; icon_state = "warning"},/area/tcommsat/chamber) -"eg" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) -"eh" = (/turf/open/floor/plasteel/airless{dir = 10; icon_state = "warning"},/area/tcommsat/chamber) -"ei" = (/obj/machinery/light/small,/obj/item/weapon/paper,/turf/open/floor/plasteel/airless{icon_state = "warningcorner"; dir = 1},/area/tcommsat/chamber) -"ej" = (/turf/open/floor/plasteel/airless{dir = 6; icon_state = "warning"},/area/tcommsat/chamber) -"ek" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/open/space,/area/space) -"el" = (/obj/structure/lattice,/obj/item/stack/rods,/obj/item/weapon/shard{icon_state = "medium"},/turf/open/space,/area/space) -"em" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/open/floor/plating/airless,/area/tcommsat/chamber) -"en" = (/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/open/floor/plating,/area/tcommsat/chamber) -"eo" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/open/space,/area/space) -"ep" = (/obj/machinery/door/airlock/hatch,/turf/open/floor/plasteel,/area/tcommsat/chamber) -"eq" = (/turf/open/floor/plasteel{dir = 9; icon_state = "warning"},/area/tcommsat/chamber) -"er" = (/turf/open/floor/plasteel{dir = 1; icon_state = "warning"},/area/tcommsat/chamber) -"es" = (/turf/open/floor/plasteel{dir = 5; icon_state = "warning"},/area/tcommsat/chamber) -"et" = (/turf/open/floor/plasteel{icon_state = "warningcorner"; dir = 4},/area/tcommsat/chamber) -"eu" = (/turf/open/floor/plasteel,/area/tcommsat/chamber) -"ev" = (/turf/open/floor/plasteel{icon_state = "warningcorner"; dir = 8},/area/tcommsat/chamber) -"ew" = (/obj/machinery/light/small{dir = 8},/turf/open/floor/plasteel,/area/tcommsat/chamber) -"ex" = (/obj/structure/sign/vacuum,/turf/closed/wall/r_wall,/area/tcommsat/chamber) -"ey" = (/obj/structure/closet/emcloset,/turf/open/floor/plasteel{dir = 9; icon_state = "warning"},/area/tcommsat/chamber) -"ez" = (/obj/item/weapon/paper/crumpled,/turf/open/floor/plasteel,/area/tcommsat/chamber) -"eA" = (/obj/structure/closet/malf/suits,/turf/open/floor/plasteel,/area/tcommsat/chamber) -"eB" = (/obj/structure/door_assembly/door_assembly_ext,/turf/open/floor/plating/airless,/area/tcommsat/chamber) -"eC" = (/obj/machinery/door/airlock/external,/turf/open/floor/plating,/area/tcommsat/chamber) -"eD" = (/turf/open/floor/plasteel{dir = 8; icon_state = "warning"},/area/tcommsat/chamber) -"eE" = (/obj/item/weapon/crowbar,/turf/open/floor/plating/airless,/area/space) -"eF" = (/obj/structure/closet/crate,/obj/item/clothing/glasses/night,/turf/open/floor/plasteel{dir = 10; icon_state = "warning"},/area/tcommsat/chamber) -"eG" = (/turf/open/floor/plasteel{icon_state = "warningcorner"; dir = 1},/area/tcommsat/chamber) -"eH" = (/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = -1},/turf/open/floor/plasteel{dir = 10; icon_state = "warning"},/area/tcommsat/chamber) -"eI" = (/turf/open/floor/plasteel{dir = 2; icon_state = "warning"},/area/tcommsat/chamber) -"eJ" = (/obj/machinery/light/small{dir = 4},/turf/open/floor/plasteel{dir = 6; icon_state = "warning"},/area/tcommsat/chamber) -"eL" = (/obj/structure/frame/computer,/turf/open/floor/plating,/area/tcommsat/chamber) -"eM" = (/obj/machinery/teleport/station,/turf/open/floor/plating,/area/tcommsat/chamber) -"eN" = (/obj/machinery/teleport/hub,/turf/open/floor/plating,/area/tcommsat/chamber) -"eO" = (/turf/closed/wall/r_wall,/area/AIsattele) -"eP" = (/obj/structure/frame/computer,/turf/open/floor/plating/airless,/area/AIsattele) -"eQ" = (/obj/machinery/teleport/station,/turf/open/floor/plating/airless,/area/AIsattele) -"eR" = (/obj/machinery/teleport/hub,/turf/open/floor/plating/airless,/area/AIsattele) -"eS" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/plating/airless,/area/AIsattele) -"eT" = (/turf/open/floor/plating/airless,/area/AIsattele) -"eU" = (/obj/structure/rack,/obj/item/clothing/gloves/color/yellow,/turf/open/floor/plating/airless,/area/AIsattele) -"eV" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/AIsattele) -"eW" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/turf/open/floor/plating/airless,/area/AIsattele) -"eX" = (/obj/item/weapon/stock_parts/cell,/turf/open/floor/plating/airless,/area/AIsattele) -"eY" = (/obj/effect/decal/cleanable/dirt,/turf/open/floor/plating/airless,/area/AIsattele) -"eZ" = (/obj/effect/decal/cleanable/robot_debris/old,/turf/open/floor/plating/airless,/area/AIsattele) -"fa" = (/obj/machinery/door/airlock/external,/turf/open/floor/plating/airless,/area/AIsattele) -"fb" = (/obj/effect/decal/cleanable/dirt,/obj/item/device/flashlight,/turf/open/floor/plating/airless,/area/AIsattele) -"fc" = (/obj/effect/decal/cleanable/dirt,/obj/item/device/radio/beacon,/turf/open/floor/plating/airless,/area/AIsattele) -"fd" = (/obj/machinery/portable_atmospherics/canister/air,/turf/open/floor/plating/airless,/area/AIsattele) -"fe" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/AIsattele) -"ff" = (/obj/effect/decal/cleanable/blood/old,/turf/open/floor/plating/airless,/area/AIsattele) -"fg" = (/obj/effect/decal/cleanable/oil,/turf/open/floor/plating/airless,/area/AIsattele) -"fh" = (/obj/item/weapon/shard,/obj/item/weapon/electronics/apc,/turf/open/floor/plating/airless,/area/AIsattele) -"fi" = (/obj/structure/closet,/turf/open/floor/plating/airless,/area/AIsattele) -"fj" = (/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = -1},/turf/open/floor/plating/airless,/area/AIsattele) -"fk" = (/obj/structure/closet/crate,/obj/item/device/aicard,/obj/item/device/multitool,/obj/item/weapon/weldingtool,/obj/item/weapon/wrench,/obj/item/weapon/circuitboard/computer/teleporter,/turf/open/floor/plating/airless,/area/AIsattele) -"fl" = (/obj/structure/reagent_dispensers/fueltank,/turf/open/floor/plating/airless,/area/AIsattele) -"fm" = (/obj/structure/lattice,/turf/open/space,/area/AIsattele) -"fn" = (/obj/structure/girder,/turf/open/floor/plating/airless,/area/AIsattele) +"ac" = (/obj/item/trash/cheesie,/turf/open/space,/area/space) +"ad" = (/obj/structure/lattice,/turf/open/space,/area/space) +"ae" = (/turf/open/floor/plating/airless,/area/space) +"af" = (/obj/structure/lattice,/obj/structure/grille/broken,/turf/open/space,/area/space) +"ag" = (/obj/structure/lattice,/obj/structure/grille,/turf/open/space,/area/space) +"ah" = (/obj/structure/grille,/turf/open/floor/plating/airless,/area/space) +"ai" = (/turf/closed/wall/r_wall,/area/space) +"aj" = (/obj/structure/girder,/turf/open/floor/plating/airless,/area/space) +"ak" = (/turf/closed/wall/r_wall,/area/tcommsat/chamber) +"al" = (/obj/structure/girder,/turf/open/floor/plating/airless,/area/tcommsat/chamber) +"am" = (/turf/open/floor/plating/airless,/area/tcommsat/chamber) +"an" = (/obj/structure/window/reinforced{dir = 4},/turf/open/space,/area/space) +"ao" = (/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/tcommsat/chamber) +"ap" = (/obj/machinery/power/apc{cell_type = 2500; dir = 1; name = "Worn-out APC"; pixel_x = 1; pixel_y = 26},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/open/floor/plating/airless,/area/tcommsat/chamber) +"aq" = (/obj/machinery/light/small{dir = 1},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/open/floor/plating/airless,/area/tcommsat/chamber) +"ar" = (/obj/item/weapon/stock_parts/cell,/turf/open/floor/plating/airless,/area/tcommsat/chamber) +"as" = (/obj/machinery/portable_atmospherics/canister/air,/turf/open/floor/plating/airless,/area/tcommsat/chamber) +"at" = (/obj/item/weapon/coin/clown,/turf/open/floor/engine,/area/tcommsat/chamber) +"au" = (/obj/structure/bed,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) +"av" = (/obj/machinery/light/small{dir = 1},/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) +"aw" = (/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/tcommsat/chamber) +"ax" = (/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/tcommsat/chamber) +"ay" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 4},/turf/open/space,/area/space) +"az" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/open/floor/plating/airless,/area/tcommsat/chamber) +"aA" = (/obj/item/weapon/wrench,/turf/open/floor/plating/airless,/area/tcommsat/chamber) +"aB" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/portable_atmospherics/canister/air,/turf/open/floor/plating/airless,/area/tcommsat/chamber) +"aC" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 8},/turf/open/space,/area/space) +"aD" = (/obj/effect/spawner/lootdrop/crate_spawner,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) +"aE" = (/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) +"aF" = (/obj/structure/table,/obj/item/weapon/paper,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) +"aG" = (/obj/structure/table,/obj/item/weapon/paper_bin,/obj/item/weapon/pen/blue,/obj/machinery/light/small{dir = 1},/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) +"aH" = (/obj/structure/frame/computer,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) +"aI" = (/obj/structure/table,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) +"aJ" = (/obj/item/weapon/reagent_containers/food/snacks/meat/slab/synthmeat{name = "Cuban Pete-Meat"},/turf/open/floor/engine,/area/tcommsat/chamber) +"aK" = (/obj/structure/grille,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) +"aL" = (/obj/structure/grille/broken,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) +"aM" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/tcommsat/chamber) +"aN" = (/obj/structure/window/reinforced,/turf/open/floor/plating/airless,/area/tcommsat/chamber) +"aO" = (/obj/item/stack/cable_coil/cut{amount = 1},/turf/open/floor/plating/airless,/area/tcommsat/chamber) +"aP" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/closet,/turf/open/floor/plating/airless,/area/tcommsat/chamber) +"aQ" = (/obj/structure/window/reinforced{dir = 8},/turf/open/space,/area/space) +"aR" = (/obj/item/weapon/folder/yellow,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) +"aS" = (/obj/structure/bed,/obj/effect/decal/remains/human,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) +"aT" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/turf/open/space,/area/space) +"aU" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/turf/open/space,/area/space) +"aV" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plating/airless,/area/tcommsat/chamber) +"aW" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/open/space,/area/space) +"aX" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/open/space,/area/space) +"aY" = (/obj/structure/window/reinforced,/turf/open/space,/area/space) +"aZ" = (/obj/structure/sign/securearea,/turf/closed/wall/r_wall,/area/tcommsat/chamber) +"ba" = (/obj/machinery/light/small{dir = 8},/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) +"bb" = (/obj/item/weapon/paper/crumpled,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) +"bc" = (/obj/item/weapon/reagent_containers/food/snacks/meat/slab/synthmeat{name = "Cuban Pete-Meat"},/obj/item/stack/spacecash,/turf/open/floor/engine,/area/tcommsat/chamber) +"bd" = (/obj/structure/chair{dir = 4},/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) +"be" = (/obj/structure/table,/obj/item/weapon/storage/fancy/cigarettes,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) +"bf" = (/obj/structure/chair{dir = 8},/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) +"bg" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) +"bh" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) +"bi" = (/obj/structure/window/reinforced,/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) +"bj" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/item/weapon/electronics/airlock,/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) +"bk" = (/obj/structure/door_assembly/door_assembly_hatch,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) +"bl" = (/obj/item/weapon/cigbutt,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) +"bm" = (/obj/machinery/vending/snack,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) +"bn" = (/obj/machinery/vending/cola,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) +"bo" = (/obj/structure/chair{dir = 1},/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) +"bp" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 4},/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) +"bq" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/closed/wall/r_wall,/area/tcommsat/chamber) +"br" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/closed/wall/r_wall,/area/space) +"bs" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/grille/broken,/turf/open/floor/plating/airless,/area/space) +"bt" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/open/floor/plating/airless,/area/space) +"bu" = (/obj/structure/disposaloutlet{dir = 4},/obj/structure/disposalpipe/trunk{dir = 8},/turf/open/floor/plating/airless,/area/space) +"bv" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) +"bw" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/open/space,/area/space) +"bx" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/turf/open/space,/area/space) +"by" = (/obj/structure/window/reinforced{dir = 1},/turf/open/space,/area/space) +"bz" = (/obj/structure/table,/obj/item/device/radio/off,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) +"bA" = (/obj/structure/chair,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) +"bB" = (/obj/machinery/door/airlock/maintenance_hatch,/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) +"bC" = (/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) +"bD" = (/obj/machinery/door/airlock/hatch,/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) +"bE" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/lattice,/turf/open/space,/area/space) +"bF" = (/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) +"bG" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/tcommsat/chamber) +"bH" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/tcommsat/chamber) +"bI" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/tcommsat/chamber) +"bJ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plating/airless,/area/tcommsat/chamber) +"bK" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) +"bL" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/turf/open/space,/area/space) +"bM" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/item/stack/rods,/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) +"bN" = (/obj/item/stack/rods,/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/plating/airless,/area/tcommsat/chamber) +"bO" = (/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) +"bP" = (/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) +"bQ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating,/area/tcommsat/chamber) +"bR" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/open/floor/plating,/area/tcommsat/chamber) +"bS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/open/floor/plating,/area/tcommsat/chamber) +"bT" = (/obj/effect/decal/cleanable/blood,/obj/item/weapon/scalpel{pixel_y = 12},/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) +"bU" = (/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) +"bV" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating,/area/tcommsat/chamber) +"bW" = (/obj/structure/rack,/obj/item/weapon/circuitboard/computer/teleporter,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) +"bX" = (/obj/item/device/radio/off,/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) +"bY" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/open/floor/plating,/area/tcommsat/chamber) +"bZ" = (/obj/effect/decal/cleanable/oil,/turf/open/floor/plating/airless,/area/tcommsat/chamber) +"ca" = (/obj/effect/decal/cleanable/blood,/obj/structure/chair,/obj/item/clothing/under/rank/centcom_officer,/obj/item/weapon/restraints/handcuffs,/obj/effect/decal/remains/human,/turf/open/floor/plating/airless,/area/tcommsat/chamber) +"cb" = (/obj/structure/table,/obj/item/device/flashlight/lamp,/turf/open/floor/plating/airless,/area/tcommsat/chamber) +"cc" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) +"cd" = (/obj/structure/door_assembly/door_assembly_mhatch,/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) +"ce" = (/obj/machinery/light/small{dir = 4},/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) +"cf" = (/obj/item/weapon/cigbutt,/turf/open/floor/plating/airless,/area/tcommsat/chamber) +"cg" = (/obj/effect/decal/cleanable/blood,/obj/item/device/assembly/signaler,/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) +"ch" = (/obj/structure/table,/obj/item/weapon/reagent_containers/syringe/lethal/choral,/obj/item/weapon/reagent_containers/syringe/lethal{pixel_y = 4},/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) +"ci" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating,/area/tcommsat/chamber) +"cj" = (/obj/item/weapon/storage/toolbox/syndicate,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) +"ck" = (/obj/structure/table,/obj/item/device/electropack,/turf/open/floor/plating/airless,/area/tcommsat/chamber) +"cl" = (/obj/structure/table,/obj/item/weapon/hemostat,/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) +"cm" = (/obj/structure/table,/obj/item/weapon/circular_saw,/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) +"cn" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/open/floor/plating,/area/tcommsat/chamber) +"co" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/item/stack/rods,/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) +"cp" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/open/space,/area/space) +"cq" = (/obj/structure/window/reinforced,/obj/structure/lattice,/turf/open/space,/area/space) +"cr" = (/turf/open/floor/plasteel/airless{dir = 9; icon_state = "warning"},/area/tcommsat/chamber) +"cs" = (/turf/open/floor/plasteel/airless{icon_state = "warningcorner"; dir = 4},/area/tcommsat/chamber) +"ct" = (/turf/open/floor/plasteel/airless{icon_state = "warning"; dir = 1},/area/tcommsat/chamber) +"cu" = (/turf/open/floor/plasteel/airless{dir = 5; icon_state = "warning"},/area/tcommsat/chamber) +"cv" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/open/space,/area/space) +"cw" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) +"cx" = (/obj/item/weapon/paper/crumpled,/turf/open/floor/plasteel/airless{dir = 8; icon_state = "warning"},/area/tcommsat/chamber) +"cy" = (/obj/item/stack/rods,/turf/open/floor/plasteel/airless,/area/tcommsat/chamber) +"cz" = (/turf/open/floor/plasteel/airless{dir = 4; icon_state = "warning"},/area/tcommsat/chamber) +"cA" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel/airless{icon_state = "dark"},/area/tcommsat/chamber) +"cB" = (/turf/open/floor/plasteel/airless{dir = 10; icon_state = "warning"},/area/tcommsat/chamber) +"cC" = (/obj/machinery/light/small,/obj/item/weapon/paper,/turf/open/floor/plasteel/airless{icon_state = "warningcorner"; dir = 1},/area/tcommsat/chamber) +"cD" = (/turf/open/floor/plasteel/airless{dir = 6; icon_state = "warning"},/area/tcommsat/chamber) +"cE" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/open/space,/area/space) +"cF" = (/obj/structure/lattice,/obj/item/stack/rods,/obj/item/weapon/shard{icon_state = "medium"},/turf/open/space,/area/space) +"cG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/open/floor/plating/airless,/area/tcommsat/chamber) +"cH" = (/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/open/floor/plating,/area/tcommsat/chamber) +"cI" = (/obj/structure/grille/broken,/turf/open/space,/area/space) +"cJ" = (/obj/machinery/door/airlock/hatch,/turf/open/floor/plasteel,/area/tcommsat/chamber) +"cK" = (/turf/open/floor/plasteel{dir = 9; icon_state = "warning"},/area/tcommsat/chamber) +"cL" = (/turf/open/floor/plasteel{dir = 1; icon_state = "warning"},/area/tcommsat/chamber) +"cM" = (/turf/open/floor/plasteel{dir = 5; icon_state = "warning"},/area/tcommsat/chamber) +"cN" = (/turf/open/floor/plasteel{icon_state = "warningcorner"; dir = 4},/area/tcommsat/chamber) +"cO" = (/turf/open/floor/plasteel,/area/tcommsat/chamber) +"cP" = (/turf/open/floor/plasteel{icon_state = "warningcorner"; dir = 8},/area/tcommsat/chamber) +"cQ" = (/obj/machinery/light/small{dir = 8},/turf/open/floor/plasteel,/area/tcommsat/chamber) +"cR" = (/obj/structure/sign/vacuum,/turf/closed/wall/r_wall,/area/tcommsat/chamber) +"cS" = (/obj/structure/closet/emcloset,/turf/open/floor/plasteel{dir = 9; icon_state = "warning"},/area/tcommsat/chamber) +"cT" = (/obj/item/weapon/paper/crumpled,/turf/open/floor/plasteel,/area/tcommsat/chamber) +"cU" = (/obj/structure/closet/malf/suits,/turf/open/floor/plasteel,/area/tcommsat/chamber) +"cV" = (/obj/structure/door_assembly/door_assembly_ext,/turf/open/floor/plating/airless,/area/tcommsat/chamber) +"cW" = (/obj/machinery/door/airlock/external,/turf/open/floor/plating,/area/tcommsat/chamber) +"cX" = (/turf/open/floor/plasteel{dir = 8; icon_state = "warning"},/area/tcommsat/chamber) +"cY" = (/obj/item/weapon/crowbar,/turf/open/floor/plating/airless,/area/space) +"cZ" = (/obj/structure/closet/crate,/obj/item/clothing/glasses/night,/turf/open/floor/plasteel{dir = 10; icon_state = "warning"},/area/tcommsat/chamber) +"da" = (/turf/open/floor/plasteel{icon_state = "warningcorner"; dir = 1},/area/tcommsat/chamber) +"db" = (/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = -1},/turf/open/floor/plasteel{dir = 10; icon_state = "warning"},/area/tcommsat/chamber) +"dc" = (/turf/open/floor/plasteel{dir = 2; icon_state = "warning"},/area/tcommsat/chamber) +"dd" = (/obj/machinery/light/small{dir = 4},/turf/open/floor/plasteel{dir = 6; icon_state = "warning"},/area/tcommsat/chamber) +"de" = (/obj/structure/frame/computer,/turf/open/floor/plating,/area/tcommsat/chamber) +"df" = (/obj/machinery/teleport/station,/turf/open/floor/plating,/area/tcommsat/chamber) +"dg" = (/obj/machinery/teleport/hub,/turf/open/floor/plating,/area/tcommsat/chamber) +"dh" = (/turf/closed/wall/r_wall,/area/AIsattele) +"di" = (/obj/structure/frame/computer,/turf/open/floor/plating/airless,/area/AIsattele) +"dj" = (/obj/machinery/teleport/station,/turf/open/floor/plating/airless,/area/AIsattele) +"dk" = (/obj/machinery/teleport/hub,/turf/open/floor/plating/airless,/area/AIsattele) +"dl" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/plating/airless,/area/AIsattele) +"dm" = (/turf/open/floor/plating/airless,/area/AIsattele) +"dn" = (/obj/structure/rack,/obj/item/clothing/gloves/color/yellow,/turf/open/floor/plating/airless,/area/AIsattele) +"do" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/AIsattele) +"dp" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/turf/open/floor/plating/airless,/area/AIsattele) +"dq" = (/obj/item/weapon/stock_parts/cell,/turf/open/floor/plating/airless,/area/AIsattele) +"dr" = (/obj/effect/decal/cleanable/dirt,/turf/open/floor/plating/airless,/area/AIsattele) +"ds" = (/obj/effect/decal/cleanable/robot_debris/old,/turf/open/floor/plating/airless,/area/AIsattele) +"dt" = (/obj/effect/spawner/lootdrop/crate_spawner,/turf/open/floor/plating/airless,/area/AIsattele) +"du" = (/obj/machinery/door/airlock/external,/turf/open/floor/plating/airless,/area/AIsattele) +"dv" = (/obj/effect/decal/cleanable/dirt,/obj/item/device/flashlight,/turf/open/floor/plating/airless,/area/AIsattele) +"dw" = (/obj/effect/decal/cleanable/dirt,/obj/item/device/radio/beacon,/turf/open/floor/plating/airless,/area/AIsattele) +"dx" = (/obj/machinery/portable_atmospherics/canister/air,/turf/open/floor/plating/airless,/area/AIsattele) +"dy" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/AIsattele) +"dz" = (/obj/effect/decal/cleanable/blood/old,/turf/open/floor/plating/airless,/area/AIsattele) +"dA" = (/obj/effect/decal/cleanable/oil,/turf/open/floor/plating/airless,/area/AIsattele) +"dB" = (/obj/item/weapon/shard,/obj/item/weapon/electronics/apc,/turf/open/floor/plating/airless,/area/AIsattele) +"dC" = (/obj/structure/closet,/turf/open/floor/plating/airless,/area/AIsattele) +"dD" = (/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = -1},/turf/open/floor/plating/airless,/area/AIsattele) +"dE" = (/obj/structure/closet/crate,/obj/item/device/aicard,/obj/item/device/multitool,/obj/item/weapon/weldingtool,/obj/item/weapon/wrench,/obj/item/weapon/circuitboard/computer/teleporter,/turf/open/floor/plating/airless,/area/AIsattele) +"dF" = (/obj/structure/reagent_dispensers/fueltank,/turf/open/floor/plating/airless,/area/AIsattele) +"dG" = (/obj/structure/lattice,/turf/open/space,/area/AIsattele) +"dH" = (/obj/structure/girder,/turf/open/floor/plating/airless,/area/AIsattele) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -231,7 +231,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -289,63 +289,63 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaaaaaaaaaNaNaaaaaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaNaaaaaaaNaNaaaaaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNbKaNaaaaaabKaNaaaaaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaaaNbKaaaaaaaabKbKaNaaaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaaaNbKaaaaaaaaaNbKaNaaaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLaaaaaNaaaaaaaaaNaNaNaabLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabMaNaNbKbKbKbKbKbKbKaNaNbMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaaaabMaaaaaNaaaabKaaaaaNaaaabMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabMbLbLaaaaaNbLbMbMbMbMbMbMbMbNbMbLbMbMbMbMbMbMbLaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabMbMbObPbPbKbPbObObObObObObObObObObObObObObObObObObPbKaNaNaaaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLbMbObObObObObQbQbQbQbQbObObObObObObObObObQbQbQbQbRbSaNaNaNaNaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabMbObObOaNaabTbUbVbWbXbYbQbQbQbQbQbQbQbQbQbZbQcacbcccdbSbSaNbKbPbLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabMbObOaNaNaNcebUbScfcgchcibQbjcjckclcmcnbQcobQcpcqcjcccdcdbSbPbObMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabMbObOaaaNaabTcrcsctcscucvbQcjcwcjcjcjcmbQcobQcxcpcjcjccccbQbObObMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLbObOaaaNaaaacyczcAcBcCcDcEcFcjcGcjcjcmbQcHbQcpcpcjcIcJcKbQbObObMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabMbObOaaaNaabTcLcMcNcMcNcOcPcjcjcQcjcjbQbQbQbQcRcScjcQcTcUcVcWcWcXcYcZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaNbLbMbMbMbObOaaaNaabTdadbdcddddddbQcjdedfcjcjdgdhbQbQbQbQdibQbQbQbQbObObMbMbLaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNbMbObOaNaNaNdkdlcibQbQbQbQbQdmdndododpbQdgbQbQbQdkdqdraNaNaNbObObMbMbMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaNbKbKbKbKbKaNaNaabMbObOaaaNaabTdsdrbQbSbSbSbSbSdtbSbSbSbSdhdhbSbQdkdqaaaaaNaabObObMbMaaaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaNaNaNaNaNaNaNbKbKbKbKaabMbObOaaaNaabTdudrbQbSbSdhdhbSdhdhdhdhdhdhbSbSbQdkdvcvdwdxdybQbObObMaNbKaNaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaNaNaNbKbKbKaabMbObOaaaNaaaadadrbQbSdhdhdhdhdhbSdhdzdhdhdhbSbQdkdAcvdBcjcjdCbQbObMaaaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabKaabMbObOaaaNaabTdqcvbQbSdhdhdhdhdhbSdhdDdhdhdhbSbQdkdqcDdEcjcjcnbQbObMaaaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabKbKbNbObOaNaNaNdkdacibQbSdhdhdhbSdFdGbSdHdhdhdhbSbQdkdudIdJcjcjdKbQbObNbKaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabKaabMbObOaaaNaabTdacvbQbSdhdhbSdhdhdLdMdNdhdhdhbSbQbTdqdddOcjdPcjbQbObMaaaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaNaNbKbKbKaabMbObOaaaNaaaadqaabQbSdhdhdhdhdhdQdRdSdhdhbSbSbQaadqcvdBcjcjcnbQbObMaabKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaNaNbKbKbKbKaabMbObOaaaNaabTdacvbQbSdhbSdhdhdhdhdhdhdhdhdhbSbQbTdqcvdTdxdybQbObObMaNbKaNaNaNaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaNaNaNaNaNaNaNaNaabMbObOaaaNaaaadUcvbQbSbSbSbSbSbSbSbSbSbSbSbSbSbQbTdvcvaaaNaabObObMbMaaaNaNaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabMbMbObOaNaNaNdkdAcibQbQbQbQbQbQbQbQbQbQbQbQbQbQbQdkdqciaNaNaNbObPbMbMbMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaNaNaNaNbLbMbMbPbOaaaaaabTdqdVdWcDaabQdXdYccdZdYcdeabQcDcDcDebdqcvaaaNaabPaNbMbMbMbLaNaNaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLbKbPaaaaaabTeccNcMcMcMdiedcjcjcjcjeeefdicMcNcMcMegcvaaaNaabKaNbLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNbKaNaaaaaaaadddddcddddbQeheicccccjccejbQddddddekddaaaaaNaaaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaNaaaaaaaaaaaaaNaabQbQbQbQbQcdbRbQbQbQbQaaaaaaaaaaaaaNaaaaaaaaaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaaaaaaaaaNaNaNaNelemcccjbQcjcccjbQcjcmenaNaNaNaNaaaaaaaaaaaaaaaNeoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabObQcjcjcjcjcjcjcbcjcjbQbOaaaaaaaaaaaaaaaaaaaNbKbMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNbKbPbObObObObObQbQbQbQbQepbQbQbQbQbQbObObPbKaNaNaaaaaaaabKbPbMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNbKbPbObObObObObObObObObQeqeresbQbObObObKaNaNaNaaaaaaaNaNaNbPbObLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLbMbLbMbMbMbMbMbMbMbQbQeteuevbQbQbMbMbMbLaaaaaaaaaaaaaNbObObObMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLbKbKbMbMbQbQeweueueueubQbQbMbMaaaaaaaaaNbKbKbPbObObMbMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabKbKbKbQbQexeyeueueueuezeAbQbMbLaaaaaaaaaaaNaNbKbObMbMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabKbKbKeBbSeCeDeueueueueueubQbMbMaaaaaaaaaaaNbLbMbMbMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeEbKbKbQbQexeFeGeueueueueAbQbMbMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNbKbKbMbMbQbQeHeIeIeIeJbQbQbMbMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNbLbLbMbMbMbQbQeLeMeNbQbQbMbMbMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLbMbMbMbQbQbQbQbQbMbMbMbLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabMbMaabMbMbMbNbMbMbMaabMbMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabMaaaaaNaaaabKaaaaaNaaaaaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabMaaaNbKaNbKbKbKaNaNaNaabMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaaaaaNaaaaaaaaaNaNaNaaaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaaaaaNaaaaaaaaaNaNaaaaaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaaaabKaaaaaaaaaaaNaaaaaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabKaaaaaaaaaaaNaaaaaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaaaaaaaaaaaaaaaaaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaadadaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadaaaaaaadadaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaeadaaaaaaaeadaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaadaeaaaaaaaaaeaeadaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaadaeaaaaaaaaadaeadaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaadaaaaaaaaadadadaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagadadaeaeaeaeaeaeaeadadagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaagaaaaadaaaaaeaaaaadaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagafafaaaaadafagagagagagagagahagafagagagagagagafadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagaiajajaeajaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiajaeadadaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafagaiaiaiaiaiakakakakakaiaiaiaiaiaiaiaiaiakakakakalamadadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaiaiaiadaaanaoapaqarasakakakakakakakakakatakauavawaxamamadaeajafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaiaiadadadayaoamazaAaBaCakaDaEaFaGaHaIakaJakaKaLaEawaxaxamajaiagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaiaiaaadaaanaMaNaOaNaPaQakaEaRaEaEaEaHakaJakaSaKaEaEawawakaiaiagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaiaiaaadaaaaaTaUaVaWaXaYaZbaaEbbaEaEaHakbcakaKaKaEbdbebfakaiaiagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaiaiaaadaaanbgbhbibhbibjbkaEaEblaEaEakakakakbmbnaEblbobpbqbrbrbsbtbuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadafagagagaiaiaaadaaanbvbwbxbybybyakaEbzbAaEaEbBbCakakakakbDakakakakaiaiagagafadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadagaiaiadadadbEbFaCakakakakakbGbHbIbIbJakbBakakakbEbKbLadadadaiaiagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadaeaeaeaeaeadadaaagaiaiaaadaaanbMbLakamamamamambNamamamambCbCamakbEbKaaaaadaaaiaiagagaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadaeaeaeaeaaagaiaiaaadaaanbObLakamambCbCambCbCbCbCbCbCamamakbEbPaQbQbRbSakaiaiagadaeadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadaeaeaeaaagaiaiaaadaaaabvbLakambCbCbCbCbCambCbTbCbCbCamakbEbUaQbVaEaEbWakaiagaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaagaiaiaaadaaanbKaQakambCbCbCbCbCambCbXbCbCbCamakbEbKaYbYaEaEaIakaiagaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeahaiaiadadadbEbvaCakambCbCbCambZcaamcbbCbCbCamakbEbOcccdaEaEceakaiahaeadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaagaiaiaaadaaanbvaQakambCbCambCbCcfcgchbCbCbCamakanbKbyciaEcjaEakaiagaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadaeaeaeaaagaiaiaaadaaaabKaaakambCbCbCbCbCckclcmbCbCamamakaabKaQbVaEaEaIakaiagaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadaeaeaeaeaaagaiaiaaadaaanbvaQakambCambCbCbCbCbCbCbCbCbCamakanbKaQcnbRbSakaiaiagadaeadadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadadadadadaaagaiaiaaadaaaacoaQakamamamamamamamamamamamamamakanbPaQaaadaaaiaiagagaaadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagaiaiadadadbEbUaCakakakakakakakakakakakakakakakbEbKaCadadadaiajagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadadadafagagajaiaaaaaaanbKcpcqaYaaakcrcsawctcsaxcuakaYaYaYcvbKaQaaadaaajadagagagafadadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaeajaaaaaaancwbibhbhbhbDcxaEaEaEaEcyczbDbhbibhbhcAaQaaadaaaeadafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaeadaaaaaaaabybybxbybyakcBcCawawaEawcDakbybybycEbyaaaaadaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadaaaaaaaaaaaaadaaakakakakakaxalakakakakaaaaaaaaaaaaadaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaadadadadcFcGawaEakaEawaEakaEaHcHadadadadaaaaaaaaaaaaaaadcIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiakaEaEaEaEaEaEavaEaEakaiaaaaaaaaaaaaaaaaaaadaeagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaeajaiaiaiaiaiakakakakakcJakakakakakaiaiajaeadadaaaaaaaaaeajagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaeajaiaiaiaiaiaiaiaiaiakcKcLcMakaiaiaiaeadadadaaaaaaadadadajaiafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafagafagagagagagagagakakcNcOcPakakagagagafaaaaaaaaaaaaadaiaiaiagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaeaeagagakakcQcOcOcOcOakakagagaaaaaaaaadaeaeajaiaiagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeakakcRcScOcOcOcOcTcUakagafaaaaaaaaaaadadaeaiagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaecVamcWcXcOcOcOcOcOcOakagagaaaaaaaaaaadafagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacYaeaeakakcRcZdacOcOcOcOcUakagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaeaeagagakakdbdcdcdcddakakagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadafafagagagakakdedfdgakakagagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafagagagakakakakakagagagafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagagaaagagagahagagagaaagagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaadaaaaaeaaaaadaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaadaeadaeaeaeadadadaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaadaaaaaaaaadadadaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaadaaaaaaaaadadaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaeaaaaaaaaaaadaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaadaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -374,18 +374,18 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeOeOeOeOeOaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaNeOeOePeQeReOeOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaNaNeOeOeSeTeTeTeUeOeOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeVeWeOeTeXeYeTeZeYbkeOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaNfaeTfaeTfbeZfceTeTfdeOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeVfeeOfdffeTfgeTfhfieOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaNaNeOeOeTeTeYeTfjeOeOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaNeOeOfkeTfleOeOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeOeOfmeTfnaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaNaNaaaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhdhdhdhdhadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaddhdhdidjdkdhdhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadaddhdhdldmdmdmdndhdhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadodpdhdmdqdrdmdsdrdtdhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaddudmdudmdvdsdwdmdmdxdhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadodydhdxdzdmdAdmdBdCdhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadaddhdhdmdmdrdmdDdhdhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaddhdhdEdmdFdhdhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhdhdGdmdHadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadadaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -446,4 +446,3 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} - diff --git a/_maps/map_files/generic/z4.dmm b/_maps/map_files/generic/z4.dmm index 9ebfeee4a01..fda0d05245b 100644 --- a/_maps/map_files/generic/z4.dmm +++ b/_maps/map_files/generic/z4.dmm @@ -25,7 +25,7 @@ "ay" = (/obj/machinery/newscaster{pixel_y = 32},/turf/open/floor/plasteel{icon_state = "cafeteria"},/area/djstation) "az" = (/obj/structure/table,/obj/machinery/cell_charger,/turf/open/floor/plasteel{icon_state = "bar"},/area/djstation) "aA" = (/turf/open/floor/plasteel{icon_state = "bar"},/area/djstation) -"aB" = (/turf/open/floor/plasteel{icon_state = "grimy"},/area/djstation) +"aB" = (/obj/effect/spawner/lootdrop/crate_spawner,/turf/open/floor/plasteel{icon_state = "grimy"},/area/djstation) "aC" = (/obj/machinery/light_switch{pixel_y = 28},/turf/open/floor/plasteel{icon_state = "grimy"},/area/djstation) "aD" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/turf/open/floor/plasteel{icon_state = "grimy"},/area/djstation) "aE" = (/obj/structure/table,/obj/item/device/flashlight/lamp,/turf/open/floor/plasteel{icon_state = "grimy"},/area/djstation) @@ -34,814 +34,813 @@ "aH" = (/obj/structure/table,/obj/item/device/radio/intercom{broadcasting = 0; dir = 8; freerange = 1; listening = 1; name = "Pirate Radio Listening Channel"; pixel_x = 0},/turf/open/floor/plasteel{icon_state = "cafeteria"},/area/djstation) "aI" = (/obj/structure/chair/office/light,/turf/open/floor/plasteel{icon_state = "cafeteria"},/area/djstation) "aJ" = (/obj/machinery/door/airlock/glass{name = "Rest Room"},/turf/open/floor/plasteel{icon_state = "cafeteria"},/area/djstation) -"aK" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 8},/turf/open/floor/plasteel{icon_state = "grimy"},/area/djstation) -"aL" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk,/turf/open/floor/plasteel{icon_state = "bar"},/area/djstation) -"aM" = (/obj/machinery/light/small,/turf/open/floor/plasteel{icon_state = "bar"},/area/djstation) -"aN" = (/obj/structure/chair{dir = 1},/turf/open/floor/plasteel{icon_state = "bar"},/area/djstation) -"aO" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel{icon_state = "cafeteria"},/area/djstation) -"aP" = (/obj/structure/table,/obj/item/device/radio/intercom{broadcasting = 1; dir = 8; freerange = 1; listening = 0; name = "Pirate Radio Broadcast Channel"; pixel_x = 0},/turf/open/floor/plasteel{icon_state = "cafeteria"},/area/djstation) -"aQ" = (/obj/structure/table,/obj/item/weapon/paper/djstation,/turf/open/floor/plasteel{icon_state = "cafeteria"},/area/djstation) -"aR" = (/obj/structure/frame/computer{anchored = 1},/turf/open/floor/plasteel{icon_state = "grimy"},/area/djstation) -"aS" = (/obj/structure/chair{dir = 8},/turf/open/floor/plasteel{icon_state = "grimy"},/area/djstation) -"aT" = (/obj/machinery/light/small,/turf/open/floor/plasteel{icon_state = "grimy"},/area/djstation) -"aU" = (/obj/structure/closet,/turf/open/floor/plasteel{icon_state = "grimy"},/area/djstation) -"aV" = (/obj/structure/disposalpipe/segment,/turf/closed/wall,/area/djstation) -"aW" = (/obj/machinery/door/airlock/hatch{name = "Washroom"},/turf/open/floor/plasteel{icon_state = "freezerfloor"},/area/djstation) -"aX" = (/obj/machinery/light{dir = 4},/turf/open/floor/plasteel{icon_state = "cafeteria"},/area/djstation) -"aY" = (/obj/structure/disposalpipe/segment,/turf/open/floor/plating/airless,/area/space) -"aZ" = (/turf/open/floor/plasteel{icon_state = "freezerfloor"},/area/djstation) -"ba" = (/obj/structure/chair{dir = 4},/turf/open/floor/plasteel{icon_state = "cafeteria"},/area/djstation) -"bb" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/space_heater,/turf/open/floor/plasteel{icon_state = "cafeteria"},/area/djstation) -"bc" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/rack{dir = 4},/obj/item/clothing/under/soviet,/obj/item/clothing/head/ushanka,/turf/open/floor/plasteel{icon_state = "cafeteria"},/area/djstation) -"bd" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/machinery/light/small,/turf/open/floor/plasteel{icon_state = "freezerfloor"},/area/djstation) -"be" = (/obj/structure/toilet{pixel_y = 8},/turf/open/floor/plasteel{icon_state = "freezerfloor"},/area/djstation) -"bf" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/turf/open/floor/plasteel{icon_state = "cafeteria"},/area/djstation) -"bg" = (/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/open/floor/plasteel{icon_state = "cafeteria"},/area/djstation) -"bh" = (/obj/machinery/door/airlock/external{name = "Ruskie DJ Station"; req_access = null; req_access_txt = "0"},/turf/open/floor/plating,/area/djstation) -"bi" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/structure/disposaloutlet,/turf/open/floor/plating/airless,/area/space) -"bj" = (/turf/open/floor/plating/airless,/area/space) -"bk" = (/turf/open/floor/plasteel/airless,/area/space) -"bl" = (/turf/closed/wall/r_wall,/area/space) -"bm" = (/obj/structure/girder/reinforced,/turf/open/floor/plating/airless,/area/space) -"bn" = (/turf/closed/wall/r_wall,/area/derelict/solar_control) -"bo" = (/obj/machinery/power/tracker,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/open/floor/plasteel/airless,/area/solar/derelict_starboard) -"bp" = (/turf/closed/wall,/area/derelict/solar_control) -"bq" = (/turf/open/floor/plasteel,/area/derelict/solar_control) -"br" = (/obj/structure/lattice/catwalk,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/space,/area/solar/derelict_starboard) -"bs" = (/turf/open/floor/plating/airless,/turf/open/floor/plating/airless{icon_state = "platingdmg2"},/area/solar/derelict_starboard) -"bt" = (/obj/machinery/power/solar{id = "derelictsolar"; name = "Derelict Solar Array"},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/open/floor/plasteel/airless,/area/solar/derelict_starboard) -"bu" = (/obj/machinery/door/airlock/external{name = "Air Bridge Access"},/turf/open/floor/plating,/area/derelict/solar_control) -"bv" = (/obj/machinery/door/airlock/external{name = "External Engineering"},/turf/open/floor/plating,/area/derelict/solar_control) -"bw" = (/turf/closed/wall,/area/space) -"bx" = (/obj/machinery/light/small{dir = 4},/turf/open/floor/plasteel,/area/derelict/solar_control) -"by" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/open/floor/plasteel/airless{icon_state = "damaged5"},/area/solar/derelict_starboard) -"bz" = (/obj/structure/lattice/catwalk,/turf/open/space,/area/solar/derelict_starboard) -"bA" = (/obj/structure/lattice/catwalk,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/open/space,/area/solar/derelict_starboard) -"bB" = (/obj/structure/lattice/catwalk,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/open/space,/area/solar/derelict_starboard) -"bC" = (/obj/machinery/power/smes,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/open/floor/plasteel,/area/derelict/solar_control) -"bD" = (/obj/structure/lattice/catwalk,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/space,/area/solar/derelict_starboard) -"bE" = (/obj/structure/lattice/catwalk,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/open/space,/area/solar/derelict_starboard) -"bF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating,/area/derelict/solar_control) -"bG" = (/obj/structure/lattice/catwalk,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/open/space,/area/solar/derelict_starboard) -"bH" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel,/area/derelict/solar_control) -"bI" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/open/floor/plasteel,/area/derelict/solar_control) -"bJ" = (/obj/structure/lattice/catwalk,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/open/space,/area/solar/derelict_starboard) -"bK" = (/obj/machinery/power/solar{id = "derelictsolar"; name = "Derelict Solar Array"},/obj/structure/cable,/turf/open/floor/plasteel/airless,/area/solar/derelict_starboard) -"bL" = (/obj/structure/lattice/catwalk,/obj/structure/cable,/turf/open/space,/area/solar/derelict_starboard) -"bM" = (/obj/structure/lattice/catwalk,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/open/space,/area/solar/derelict_starboard) -"bN" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating,/area/derelict/solar_control) -"bO" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel,/area/derelict/solar_control) -"bP" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/open/floor/plasteel,/area/derelict/solar_control) -"bQ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plating,/area/derelict/solar_control) -"bR" = (/obj/machinery/door/airlock/external{name = "External Engineering"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/open/floor/plating,/area/derelict/solar_control) -"bS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/open/floor/plating,/area/derelict/solar_control) -"bT" = (/obj/structure/window/reinforced,/turf/open/floor/plasteel,/area/derelict/solar_control) -"bU" = (/turf/open/floor/plating,/area/space) -"bV" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/open/floor/plasteel,/area/derelict/solar_control) -"bW" = (/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plasteel,/area/derelict/solar_control) -"bX" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/open/floor/plasteel,/area/derelict/solar_control) -"bY" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/solar_control{id = "derelictsolar"; name = "Primary Solar Control"; track = 0},/obj/structure/cable,/turf/open/floor/plasteel,/area/derelict/solar_control) -"bZ" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel,/area/derelict/solar_control) -"ca" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/open/floor/plasteel,/area/derelict/solar_control) -"cb" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/light/small{dir = 4},/turf/open/floor/plasteel,/area/derelict/solar_control) -"cc" = (/obj/machinery/light/small{dir = 8},/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) -"cd" = (/turf/closed/wall/r_wall,/area/derelict/gravity_generator) -"ce" = (/turf/closed/wall,/area/derelict/bridge/access) -"cf" = (/obj/machinery/door/airlock/external{name = "Air Bridge Access"},/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) -"cg" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/open/floor/plasteel,/area/derelict/solar_control) -"ch" = (/turf/open/floor/plasteel,/area/derelict/bridge/access) -"ci" = (/obj/structure/rack,/obj/item/weapon/melee/classic_baton,/turf/open/floor/plasteel,/area/derelict/bridge/access) -"cj" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel,/area/derelict/solar_control) -"ck" = (/obj/structure/rack,/obj/item/clothing/head/helmet/swat,/turf/open/floor/plasteel,/area/derelict/bridge/access) -"cl" = (/obj/item/weapon/stock_parts/matter_bin,/turf/open/floor/plasteel{icon_state = "damaged4"},/area/derelict/solar_control) -"cm" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel,/area/derelict/bridge/access) -"cn" = (/obj/machinery/door/window,/turf/open/floor/plasteel,/area/derelict/solar_control) -"co" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel,/area/derelict/bridge/access) -"cp" = (/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) -"cq" = (/obj/machinery/power/apc{dir = 8; environ = 0; equipment = 0; lighting = 0; locked = 0; name = "Starboard Solar APC"; pixel_x = -24; pixel_y = 0},/obj/structure/cable,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/open/floor/plasteel,/area/derelict/solar_control) -"cr" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/solar{id = "derelictsolar"; name = "Derelict Solar Array"},/turf/open/floor/plating/airless{icon_state = "platingdmg3"},/area/solar/derelict_aft) -"cs" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/open/floor/plating,/area/derelict/solar_control) -"ct" = (/obj/structure/cable,/obj/machinery/power/apc{dir = 0; name = "Worn-out APC"; pixel_y = -24},/turf/open/floor/plasteel,/area/derelict/bridge/access) -"cu" = (/turf/open/floor/plating,/area/derelict/bridge/access) -"cv" = (/obj/item/weapon/ore/iron,/obj/item/weapon/ore/iron,/obj/item/weapon/ore/iron,/turf/open/space,/area/space) -"cw" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating,/area/derelict/bridge/access) +"aK" = (/turf/open/floor/plasteel{icon_state = "grimy"},/area/djstation) +"aL" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 8},/turf/open/floor/plasteel{icon_state = "grimy"},/area/djstation) +"aM" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk,/turf/open/floor/plasteel{icon_state = "bar"},/area/djstation) +"aN" = (/obj/machinery/light/small,/turf/open/floor/plasteel{icon_state = "bar"},/area/djstation) +"aO" = (/obj/structure/chair{dir = 1},/turf/open/floor/plasteel{icon_state = "bar"},/area/djstation) +"aP" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel{icon_state = "cafeteria"},/area/djstation) +"aQ" = (/obj/structure/table,/obj/item/device/radio/intercom{broadcasting = 1; dir = 8; freerange = 1; listening = 0; name = "Pirate Radio Broadcast Channel"; pixel_x = 0},/turf/open/floor/plasteel{icon_state = "cafeteria"},/area/djstation) +"aR" = (/obj/structure/table,/obj/item/weapon/paper/djstation,/turf/open/floor/plasteel{icon_state = "cafeteria"},/area/djstation) +"aS" = (/obj/structure/frame/computer{anchored = 1},/turf/open/floor/plasteel{icon_state = "grimy"},/area/djstation) +"aT" = (/obj/structure/chair{dir = 8},/turf/open/floor/plasteel{icon_state = "grimy"},/area/djstation) +"aU" = (/obj/machinery/light/small,/turf/open/floor/plasteel{icon_state = "grimy"},/area/djstation) +"aV" = (/obj/structure/closet,/turf/open/floor/plasteel{icon_state = "grimy"},/area/djstation) +"aW" = (/obj/structure/disposalpipe/segment,/turf/closed/wall,/area/djstation) +"aX" = (/obj/machinery/door/airlock/hatch{name = "Washroom"},/turf/open/floor/plasteel{icon_state = "freezerfloor"},/area/djstation) +"aY" = (/obj/machinery/light{dir = 4},/turf/open/floor/plasteel{icon_state = "cafeteria"},/area/djstation) +"aZ" = (/obj/structure/disposalpipe/segment,/turf/open/floor/plating/airless,/area/space) +"ba" = (/turf/open/floor/plasteel{icon_state = "freezerfloor"},/area/djstation) +"bb" = (/obj/structure/chair{dir = 4},/turf/open/floor/plasteel{icon_state = "cafeteria"},/area/djstation) +"bc" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/space_heater,/turf/open/floor/plasteel{icon_state = "cafeteria"},/area/djstation) +"bd" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/rack{dir = 4},/obj/item/clothing/under/soviet,/obj/item/clothing/head/ushanka,/turf/open/floor/plasteel{icon_state = "cafeteria"},/area/djstation) +"be" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/machinery/light/small,/turf/open/floor/plasteel{icon_state = "freezerfloor"},/area/djstation) +"bf" = (/obj/structure/toilet{pixel_y = 8},/turf/open/floor/plasteel{icon_state = "freezerfloor"},/area/djstation) +"bg" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/turf/open/floor/plasteel{icon_state = "cafeteria"},/area/djstation) +"bh" = (/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/open/floor/plasteel{icon_state = "cafeteria"},/area/djstation) +"bi" = (/obj/machinery/power/tracker,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/open/floor/plasteel/airless,/area/solar/derelict_starboard) +"bj" = (/obj/machinery/door/airlock/external{name = "Ruskie DJ Station"; req_access = null; req_access_txt = "0"},/turf/open/floor/plating,/area/djstation) +"bk" = (/obj/structure/lattice/catwalk,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/space,/area/solar/derelict_starboard) +"bl" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/structure/disposaloutlet,/turf/open/floor/plating/airless,/area/space) +"bm" = (/turf/open/floor/plating/airless,/turf/open/floor/plating/airless{icon_state = "platingdmg2"},/area/solar/derelict_starboard) +"bn" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/open/floor/plasteel/airless{icon_state = "damaged5"},/area/solar/derelict_starboard) +"bo" = (/obj/machinery/power/solar{id = "derelictsolar"; name = "Derelict Solar Array"},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/open/floor/plasteel/airless,/area/solar/derelict_starboard) +"bp" = (/obj/structure/lattice/catwalk,/turf/open/space,/area/solar/derelict_starboard) +"bq" = (/obj/structure/lattice/catwalk,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/open/space,/area/solar/derelict_starboard) +"br" = (/obj/structure/lattice/catwalk,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/space,/area/solar/derelict_starboard) +"bs" = (/obj/structure/lattice/catwalk,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/open/space,/area/solar/derelict_starboard) +"bt" = (/obj/structure/lattice/catwalk,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/open/space,/area/solar/derelict_starboard) +"bu" = (/obj/structure/lattice/catwalk,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/open/space,/area/solar/derelict_starboard) +"bv" = (/obj/structure/lattice/catwalk,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/open/space,/area/solar/derelict_starboard) +"bw" = (/obj/machinery/power/solar{id = "derelictsolar"; name = "Derelict Solar Array"},/obj/structure/cable,/turf/open/floor/plasteel/airless,/area/solar/derelict_starboard) +"bx" = (/obj/structure/lattice/catwalk,/obj/structure/cable,/turf/open/space,/area/solar/derelict_starboard) +"by" = (/obj/structure/lattice/catwalk,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/open/space,/area/solar/derelict_starboard) +"bz" = (/turf/closed/wall,/area/derelict/solar_control) +"bA" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating,/area/derelict/solar_control) +"bB" = (/obj/machinery/door/airlock/external{name = "External Engineering"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/open/floor/plating,/area/derelict/solar_control) +"bC" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plating,/area/derelict/solar_control) +"bD" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/open/floor/plating,/area/derelict/solar_control) +"bE" = (/turf/closed/wall/r_wall,/area/derelict/bridge/ai_upload) +"bF" = (/turf/open/floor/plating/airless,/area/space) +"bG" = (/turf/open/floor/plasteel,/area/derelict/solar_control) +"bH" = (/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plasteel,/area/derelict/solar_control) +"bI" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/open/floor/plasteel,/area/derelict/solar_control) +"bJ" = (/obj/machinery/power/smes,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/open/floor/plasteel,/area/derelict/solar_control) +"bK" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/solar_control{id = "derelictsolar"; name = "Primary Solar Control"; track = 0},/obj/structure/cable,/turf/open/floor/plasteel,/area/derelict/solar_control) +"bL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/open/floor/plating,/area/derelict/solar_control) +"bM" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel,/area/derelict/solar_control) +"bN" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/open/floor/plasteel,/area/derelict/solar_control) +"bO" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/open/floor/plasteel,/area/derelict/solar_control) +"bP" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/light/small{dir = 4},/turf/open/floor/plasteel,/area/derelict/solar_control) +"bQ" = (/obj/machinery/light/small{dir = 8},/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) +"bR" = (/obj/machinery/door/airlock/external{name = "Air Bridge Access"},/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) +"bS" = (/obj/machinery/door/airlock/external{name = "Air Bridge Access"},/turf/open/floor/plating,/area/derelict/solar_control) +"bT" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel,/area/derelict/solar_control) +"bU" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/open/floor/plasteel,/area/derelict/solar_control) +"bV" = (/obj/structure/window/reinforced,/turf/open/floor/plasteel,/area/derelict/solar_control) +"bW" = (/obj/machinery/door/window,/turf/open/floor/plasteel,/area/derelict/solar_control) +"bX" = (/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) +"bY" = (/turf/closed/wall/r_wall,/area/derelict/solar_control) +"bZ" = (/obj/machinery/power/apc{dir = 8; environ = 0; equipment = 0; lighting = 0; locked = 0; name = "Starboard Solar APC"; pixel_x = -24; pixel_y = 0},/obj/structure/cable,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/open/floor/plasteel,/area/derelict/solar_control) +"ca" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/open/floor/plasteel,/area/derelict/solar_control) +"cb" = (/obj/machinery/door/airlock/external{name = "External Engineering"},/turf/open/floor/plating,/area/derelict/solar_control) +"cc" = (/obj/machinery/door/airlock/highsecurity,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) +"cd" = (/obj/structure/frame/computer,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) +"ce" = (/turf/closed/wall/r_wall,/area/space) +"cf" = (/obj/machinery/computer/monitor,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/open/floor/plasteel,/area/derelict/solar_control) +"cg" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light/small,/turf/open/floor/plasteel,/area/derelict/solar_control) +"ch" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel,/area/derelict/solar_control) +"ci" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating,/area/derelict/solar_control) +"cj" = (/obj/structure/grille/broken,/turf/open/floor/plating/airless,/area/space) +"ck" = (/obj/machinery/light/small,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) +"cl" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/porta_turret_cover,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) +"cm" = (/obj/machinery/porta_turret_cover,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) +"cn" = (/obj/machinery/door/airlock/engineering{name = "Starboard Solar Access"; req_access_txt = "10"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel,/area/derelict/solar_control) +"co" = (/obj/structure/grille,/turf/open/space,/area/space) +"cp" = (/obj/structure/grille,/turf/open/floor/plating/airless,/area/derelict/bridge/ai_upload) +"cq" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel,/area/derelict/solar_control) +"cr" = (/turf/closed/wall,/area/derelict/bridge/ai_upload) +"cs" = (/obj/machinery/door/window,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel,/area/derelict/solar_control) +"ct" = (/obj/machinery/computer/atmos_alert,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) +"cu" = (/obj/machinery/light/small{dir = 1},/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) +"cv" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"},/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) +"cw" = (/obj/machinery/light/small{dir = 8},/turf/open/floor/plasteel,/area/derelict/solar_control) "cx" = (/obj/item/stack/cable_coil/cut{amount = 2; dir = 2; icon_state = "coil_red2"},/turf/open/floor/plasteel,/area/derelict/solar_control) -"cy" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating,/area/derelict/bridge/access) -"cz" = (/turf/open/floor/plasteel{icon_state = "damaged5"},/area/derelict/solar_control) -"cA" = (/turf/open/floor/plating/airless,/turf/open/floor/plating/airless{icon_state = "platingdmg2"},/area/solar/derelict_aft) -"cB" = (/obj/item/stack/cable_coil/cut,/turf/open/floor/plating/airless,/area/space) -"cC" = (/turf/open/floor/plasteel/airless{icon_state = "solarpanel"},/area/space) -"cD" = (/obj/item/stack/cable_coil/cut,/turf/open/space,/area/space) -"cE" = (/obj/machinery/light/small{dir = 8},/turf/open/floor/plasteel,/area/derelict/bridge/access) -"cF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plating,/area/derelict/bridge/access) -"cG" = (/turf/open/floor/plating/airless{icon_state = "platingdmg1"},/area/solar/derelict_aft) -"cH" = (/obj/item/stack/cable_coil/cut{amount = 2; dir = 2; icon_state = "coil_red2"},/turf/open/floor/plasteel{icon_state = "damaged3"},/area/derelict/solar_control) -"cI" = (/turf/closed/wall/r_wall,/area/derelict/singularity_engine) -"cJ" = (/obj/structure/window/reinforced,/turf/open/floor/plasteel,/area/derelict/bridge/access) -"cK" = (/obj/machinery/door/window,/turf/open/floor/plasteel,/area/derelict/bridge/access) -"cL" = (/turf/open/floor/plasteel{icon_state = "damaged2"},/area/derelict/solar_control) -"cM" = (/turf/closed/wall,/area/derelict/bridge) -"cN" = (/obj/structure/sign/electricshock,/turf/closed/wall/r_wall,/area/derelict/singularity_engine) -"cO" = (/obj/structure/sign/securearea,/turf/closed/wall/r_wall,/area/derelict/singularity_engine) -"cP" = (/obj/machinery/light/small{dir = 1},/turf/open/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/gravity_generator) -"cQ" = (/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/gravity_generator) -"cR" = (/obj/structure/window/fulltile,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"cS" = (/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel,/area/derelict/bridge/access) -"cT" = (/obj/structure/frame/computer,/turf/open/floor/plasteel,/area/derelict/bridge) -"cU" = (/obj/structure/frame/computer,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/open/floor/plasteel,/area/derelict/bridge) -"cV" = (/obj/structure/table,/turf/open/floor/plasteel,/area/derelict/bridge) -"cW" = (/obj/machinery/computer/security,/turf/open/floor/plasteel,/area/derelict/bridge) -"cX" = (/obj/structure/table,/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = -7},/turf/open/floor/plasteel,/area/derelict/bridge) -"cY" = (/obj/structure/table,/obj/machinery/light/small{dir = 1},/turf/open/floor/plasteel,/area/derelict/bridge) -"cZ" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/turf/open/floor/plasteel,/area/derelict/bridge) -"da" = (/obj/item/weapon/grenade/empgrenade,/obj/structure/table,/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel,/area/derelict/bridge) -"db" = (/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/singularity_engine) -"dc" = (/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/singularity_engine) -"dd" = (/turf/open/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/singularity_engine) -"de" = (/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/gravity_generator) -"df" = (/turf/open/floor/plating/airless,/area/derelict/singularity_engine) -"dg" = (/turf/closed/wall,/area/derelict/singularity_engine) -"dh" = (/obj/item/weapon/reagent_containers/food/drinks/beer,/turf/open/floor/plasteel,/area/derelict/bridge) -"di" = (/turf/open/floor/plasteel,/area/derelict/bridge) -"dj" = (/turf/open/floor/plating,/area/derelict/bridge) -"dk" = (/obj/structure/table,/obj/item/weapon/paper/crumpled,/turf/open/floor/plasteel,/area/derelict/bridge) -"dl" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel,/area/derelict/bridge) -"dm" = (/obj/structure/window/reinforced,/obj/machinery/portable_atmospherics/canister/toxins,/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/singularity_engine) -"dn" = (/obj/structure/window/reinforced,/turf/open/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/singularity_engine) -"do" = (/obj/structure/window/reinforced,/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/singularity_engine) -"dp" = (/obj/structure/window/reinforced,/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/singularity_engine) -"dq" = (/obj/machinery/light/small{dir = 8},/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) -"dr" = (/obj/machinery/power/emitter{dir = 1; icon_state = "emitter"},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) -"ds" = (/obj/machinery/field/generator,/turf/open/floor/plating/airless,/area/derelict/singularity_engine) -"dt" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/window/reinforced,/turf/open/floor/plasteel,/area/derelict/bridge/access) -"du" = (/obj/structure/window/reinforced/fulltile,/turf/open/floor/plasteel,/area/derelict/bridge/access) -"dv" = (/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel,/area/derelict/bridge) -"dw" = (/obj/item/stack/rods,/turf/open/floor/plating/airless,/area/space) -"dx" = (/obj/structure/grille,/obj/structure/window/reinforced,/turf/open/floor/plating/airless,/area/derelict/singularity_engine) -"dy" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) -"dz" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) -"dA" = (/turf/open/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/gravity_generator) -"dB" = (/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) -"dC" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/open/floor/plasteel,/area/derelict/bridge/access) -"dD" = (/obj/machinery/door/window/eastleft{name = "Heads of Staff"; req_access_txt = "19"},/turf/open/floor/plasteel,/area/derelict/bridge/access) -"dE" = (/obj/structure/table,/obj/item/device/paicard,/turf/open/floor/plasteel,/area/derelict/bridge) -"dF" = (/obj/structure/chair/stool,/turf/open/floor/plasteel,/area/derelict/bridge) -"dG" = (/obj/structure/table,/obj/item/weapon/stock_parts/cell,/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel,/area/derelict/bridge) -"dH" = (/obj/item/weapon/storage/toolbox/syndicate,/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) -"dI" = (/obj/item/stack/cable_coil/cut,/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/singularity_engine) -"dJ" = (/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"},/turf/open/floor/plasteel,/area/derelict/bridge/access) -"dK" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/open/floor/plasteel,/area/derelict/bridge/access) -"dL" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/open/floor/plating,/area/derelict/bridge/access) -"dM" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/open/floor/plasteel,/area/derelict/bridge/access) -"dN" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/open/floor/plasteel,/area/derelict/bridge) -"dO" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel,/area/derelict/bridge) -"dP" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/open/floor/plasteel,/area/derelict/bridge) -"dQ" = (/obj/item/weapon/paper{info = "Objective #1: Destroy the station with a nuclear device."; name = "Objectives of a Nuclear Operative"},/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) -"dR" = (/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plating,/area/derelict/bridge/access) -"dS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/open/floor/plasteel,/area/derelict/bridge) -"dT" = (/obj/structure/chair,/turf/open/floor/plasteel,/area/derelict/bridge) -"dU" = (/obj/structure/table,/obj/item/weapon/screwdriver,/turf/open/floor/plasteel,/area/derelict/bridge) -"dV" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/beer,/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel,/area/derelict/bridge) -"dW" = (/obj/item/stack/rods,/turf/open/space,/area/space) -"dX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) -"dY" = (/obj/item/weapon/shard,/obj/structure/grille{density = 0; icon_state = "brokengrille"},/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) -"dZ" = (/obj/item/clothing/suit/space/syndicate/black/engie,/turf/open/floor/plating/airless,/area/derelict/singularity_engine) -"ea" = (/obj/item/stack/rods,/turf/open/floor/plating/airless,/area/derelict/singularity_engine) -"eb" = (/obj/item/weapon/shard,/turf/open/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/singularity_engine) -"ec" = (/obj/structure/grille,/turf/open/floor/plating/airless,/area/derelict/singularity_engine) -"ed" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) -"ee" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) -"ef" = (/obj/structure/table,/obj/item/weapon/rack_parts,/turf/open/floor/plasteel,/area/derelict/bridge) -"eg" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/open/floor/plasteel,/area/derelict/bridge/access) -"eh" = (/obj/structure/window/fulltile,/turf/open/floor/plasteel,/area/derelict/bridge) -"ei" = (/obj/structure/table,/obj/machinery/power/apc{dir = 0; name = "Worn-out APC"; pixel_y = -24},/obj/structure/cable,/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel,/area/derelict/bridge) -"ej" = (/obj/structure/table,/obj/machinery/light/small,/turf/open/floor/plasteel,/area/derelict/bridge) -"ek" = (/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) -"el" = (/obj/item/clothing/head/helmet/space/syndicate/black/engie,/turf/open/floor/plating/airless,/area/derelict/singularity_engine) -"em" = (/obj/item/weapon/shard{icon_state = "small"},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) -"en" = (/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) -"eo" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) -"ep" = (/obj/machinery/door/window,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel,/area/derelict/bridge/access) -"eq" = (/turf/closed/wall/r_wall,/area/derelict/bridge) -"er" = (/obj/machinery/door/window{dir = 2; name = "Captain's Quarters"; req_access_txt = "20"},/obj/structure/grille,/turf/open/floor/plating/airless,/area/derelict/bridge) -"es" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) -"et" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/light/small{dir = 8},/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) -"eu" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/light/small{dir = 4},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) -"ev" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) -"ew" = (/obj/item/stack/cable_coil/cut,/turf/open/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/singularity_engine) -"ex" = (/turf/open/floor/plasteel/airless,/area/derelict/bridge/access) -"ey" = (/obj/machinery/porta_turret_cover,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) -"ez" = (/obj/machinery/door/airlock/command{name = "E.V.A."; req_access = null; req_access_txt = "18"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel,/area/derelict/bridge/access) -"eA" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance{lootcount = 3; name = "3maintenance loot spawner"},/turf/open/floor/plasteel,/area/derelict/solar_control) -"eB" = (/obj/structure/table,/obj/item/weapon/stock_parts/cell{charge = 100; maxcharge = 15000},/turf/open/floor/plasteel/airless,/area/derelict/bridge/access) -"eC" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel/airless,/area/derelict/bridge/access) -"eD" = (/obj/structure/girder,/turf/open/floor/plating/airless,/area/space) -"eE" = (/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) -"eF" = (/obj/machinery/door/airlock/highsecurity,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) -"eG" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/open/floor/plasteel/airless,/area/derelict/bridge/access) -"eH" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/open/floor/plating/airless,/area/derelict/bridge/access) -"eI" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/open/floor/plasteel/airless,/area/derelict/bridge/access) -"eJ" = (/obj/machinery/light/small{dir = 4},/turf/open/floor/plasteel/airless,/area/derelict/bridge/access) -"eK" = (/obj/item/stack/cable_coil/cut,/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/singularity_engine) -"eL" = (/obj/item/stack/cable_coil/cut,/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) -"eM" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) -"eN" = (/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/singularity_engine) -"eO" = (/obj/structure/frame/computer,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) -"eP" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light/small,/turf/open/floor/plasteel,/area/derelict/solar_control) -"eQ" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/open/floor/plasteel,/area/derelict/solar_control) -"eR" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) -"eS" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/singularity_engine) -"eT" = (/obj/structure/grille,/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/singularity_engine) -"eU" = (/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/singularity_engine) -"eV" = (/obj/machinery/door/airlock/maintenance{name = "Tech Storage"; req_access_txt = "23"},/turf/open/floor/plasteel/airless,/area/derelict/bridge/access) -"eW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/open/floor/plating/airless,/area/derelict/bridge/access) -"eX" = (/obj/structure/cable,/obj/machinery/power/apc{dir = 0; name = "Worn-out APC"; pixel_y = -24},/turf/open/floor/plasteel/airless,/area/derelict/bridge/access) -"eY" = (/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/singularity_engine) -"eZ" = (/obj/item/weapon/screwdriver,/turf/open/floor/plating/airless,/area/derelict/singularity_engine) -"fa" = (/obj/item/stack/rods,/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) -"fb" = (/obj/item/weapon/shard{icon_state = "medium"},/obj/item/stack/cable_coil/cut,/turf/open/floor/plating/airless,/area/derelict/singularity_engine) -"fc" = (/obj/item/weapon/stock_parts/console_screen,/turf/open/space,/area/derelict/bridge/ai_upload) -"fd" = (/turf/closed/wall,/area/derelict/hallway/primary) -"fe" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/open/floor/plating,/area/derelict/bridge/access) -"ff" = (/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/hallway/primary) -"fg" = (/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"fh" = (/obj/item/weapon/ore/slag,/turf/open/floor/plating/airless,/area/derelict/singularity_engine) -"fi" = (/obj/item/weapon/shard,/turf/open/floor/plating/airless,/area/derelict/singularity_engine) -"fj" = (/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) -"fk" = (/turf/closed/wall/r_wall,/area/derelict/hallway/primary) -"fl" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plating/airless,/area/derelict/hallway/primary) -"fm" = (/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/hallway/primary) -"fn" = (/obj/structure/window/fulltile,/turf/open/floor/plating/airless,/area/space) -"fo" = (/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) -"fp" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) -"fq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) -"fr" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/open/floor/plating/airless,/area/derelict/hallway/primary) -"fs" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plating/airless,/area/derelict/hallway/primary) -"ft" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/open/floor/plasteel,/area/derelict/bridge/access) -"fu" = (/turf/open/floor/plasteel/airless{icon_state = "floorscorched2"},/area/derelict/hallway/primary) -"fv" = (/obj/machinery/light/small,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"fw" = (/obj/machinery/computer/monitor,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/open/floor/plasteel,/area/derelict/solar_control) -"fx" = (/turf/open/floor/plasteel/airless{icon_state = "floorscorched2"},/area/space) -"fy" = (/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/space) -"fz" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) -"fA" = (/obj/machinery/door/window,/turf/open/floor/plating/airless,/area/derelict/hallway/primary) -"fB" = (/turf/open/floor/plasteel/airless{icon_state = "floorscorched1"},/area/space) -"fC" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) -"fD" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) -"fE" = (/obj/machinery/light/small{dir = 4},/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/singularity_engine) -"fF" = (/turf/open/floor/plating/airless,/area/derelict/hallway/primary) -"fG" = (/obj/item/weapon/crowbar,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"fH" = (/obj/structure/grille,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"fI" = (/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/space) -"fJ" = (/obj/item/weapon/shard{icon_state = "small"},/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) -"fK" = (/obj/structure/window/reinforced,/turf/open/floor/plating/airless,/area/derelict/singularity_engine) -"fL" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) -"fM" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/open/floor/plating/airless,/area/derelict/hallway/primary) -"fN" = (/turf/closed/wall/r_wall,/area/derelict/arrival) -"fO" = (/turf/closed/wall,/area/derelict/arrival) -"fP" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) -"fQ" = (/obj/machinery/light/small,/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/hallway/primary) -"fR" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/window/fulltile,/turf/open/floor/plating/airless,/area/space) -"fS" = (/obj/structure/table,/turf/open/floor/plasteel,/area/derelict/arrival) -"fT" = (/obj/structure/chair,/turf/open/floor/plasteel,/area/derelict/arrival) -"fU" = (/turf/open/floor/plasteel,/area/derelict/arrival) -"fV" = (/obj/machinery/light/small{dir = 1},/turf/open/floor/plasteel,/area/derelict/arrival) -"fW" = (/obj/structure/chair{dir = 8},/obj/item/weapon/pen,/turf/open/floor/plasteel,/area/derelict/arrival) -"fX" = (/obj/structure/chair{dir = 8},/turf/open/floor/plasteel,/area/derelict/arrival) -"fY" = (/turf/closed/wall,/area/derelict/medical/chapel) -"fZ" = (/obj/item/weapon/shard,/turf/open/space,/area/space) -"ga" = (/obj/structure/grille,/turf/open/space,/area/derelict/singularity_engine) -"gb" = (/obj/item/weapon/shard,/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) -"gc" = (/obj/structure/lattice,/obj/structure/window/fulltile,/turf/open/space,/area/space) -"gd" = (/turf/open/floor/plasteel/airless{icon_state = "floorscorched2"},/area/derelict/arrival) -"ge" = (/turf/open/floor/plating/airless,/area/derelict/arrival) -"gf" = (/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/arrival) -"gg" = (/turf/open/floor/plasteel{icon_state = "dark"},/area/derelict/medical/chapel) -"gh" = (/obj/machinery/light/small{dir = 1},/turf/open/floor/plasteel{icon_state = "dark"},/area/derelict/medical/chapel) -"gi" = (/obj/structure/closet/coffin,/turf/open/floor/plasteel{icon_state = "dark"},/area/derelict/medical/chapel) -"gj" = (/turf/closed/wall,/area/derelict/medical) -"gk" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/derelict/medical) -"gl" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/derelict/medical) -"gm" = (/obj/item/weapon/shard,/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/open/floor/plating/airless,/area/derelict/medical) -"gn" = (/turf/open/floor/plating/airless,/area/derelict/medical) -"go" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/plating/airless,/area/derelict/medical) -"gp" = (/obj/machinery/door/airlock/external{name = "External Engineering"},/turf/open/floor/plating/airless,/area/space) -"gq" = (/obj/structure/grille,/turf/open/space,/area/space) -"gr" = (/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/hallway/primary) -"gs" = (/obj/machinery/door/window{dir = 8},/turf/open/floor/plasteel,/area/derelict/arrival) -"gt" = (/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) -"gu" = (/obj/item/weapon/firstaid_arm_assembly,/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) -"gv" = (/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/medical) -"gw" = (/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/medical) -"gx" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/open/floor/plating/airless,/area/space) -"gy" = (/obj/machinery/light/small,/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/singularity_engine) -"gz" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/open/floor/plating/airless,/area/derelict/hallway/primary) -"gA" = (/obj/structure/window/fulltile,/turf/open/floor/plating/airless,/area/derelict/arrival) -"gB" = (/obj/structure/girder,/turf/open/floor/plating/airless,/area/derelict/arrival) -"gC" = (/obj/structure/window/fulltile,/turf/open/floor/plating/airless,/area/derelict/hallway/secondary) -"gD" = (/turf/open/floor/plating,/area/derelict/arrival) -"gE" = (/obj/machinery/door/airlock/medical{name = "Morgue"; req_access_txt = "6"},/turf/open/floor/plasteel{icon_state = "dark"},/area/derelict/medical/chapel) -"gF" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) -"gG" = (/obj/item/stack/medical/bruise_pack,/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) -"gH" = (/turf/open/floor/plasteel/airless{icon_state = "damaged5"},/area/space) -"gI" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel,/area/derelict/arrival) -"gJ" = (/obj/machinery/light/small{dir = 4},/turf/open/floor/plasteel,/area/derelict/arrival) -"gK" = (/obj/machinery/light/small,/turf/open/floor/plasteel{icon_state = "dark"},/area/derelict/medical/chapel) -"gL" = (/obj/item/weapon/storage/box/lights/mixed,/turf/open/floor/plating/airless,/area/derelict/singularity_engine) -"gM" = (/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/space) -"gN" = (/obj/structure/chair{dir = 1},/turf/open/floor/plasteel,/area/derelict/arrival) -"gO" = (/obj/structure/chair{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel,/area/derelict/arrival) -"gP" = (/obj/machinery/door/morgue{name = "coffin storage"; req_access_txt = "22"},/turf/open/floor/plasteel{icon_state = "dark"},/area/derelict/medical/chapel) -"gQ" = (/obj/structure/bodycontainer/morgue,/turf/open/floor/plasteel{icon_state = "dark"},/area/derelict/medical/chapel) -"gR" = (/obj/item/drone_shell,/turf/open/floor/plasteel/airless,/area/derelict/bridge/access) -"gS" = (/obj/structure/window/reinforced,/turf/open/floor/plating/airless,/area/space) -"gT" = (/obj/structure/window/reinforced,/turf/open/floor/plasteel/airless{icon_state = "white"},/area/space) -"gU" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/hallway/primary) -"gV" = (/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel,/area/derelict/arrival) -"gW" = (/obj/structure/table,/obj/machinery/light/small{dir = 1},/obj/item/weapon/electronics/airlock,/turf/open/floor/plasteel/airless,/area/derelict/bridge/access) -"gX" = (/obj/structure/rack,/obj/item/weapon/circuitboard/machine/autolathe,/obj/item/weapon/circuitboard/machine/protolathe{pixel_x = -5; pixel_y = -3},/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) -"gY" = (/turf/open/floor/plasteel{dir = 4; icon_state = "chapel"},/area/derelict/medical/chapel) -"gZ" = (/turf/open/floor/plasteel{dir = 1; icon_state = "chapel"},/area/derelict/medical/chapel) -"ha" = (/obj/item/weapon/shard{icon_state = "small"},/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) -"hb" = (/obj/item/stack/medical/bruise_pack,/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/medical) -"hc" = (/obj/item/stack/medical/ointment,/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/medical) -"hd" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/open/floor/plating/airless,/area/derelict/medical) -"he" = (/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/space) -"hf" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/open/space,/area/space) -"hg" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 8},/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel{dir = 8; icon_state = "chapel"},/area/derelict/medical/chapel) -"hh" = (/turf/open/floor/plasteel{icon_state = "chapel"},/area/derelict/medical/chapel) -"hi" = (/turf/open/floor/plasteel{dir = 8; icon_state = "chapel"},/area/derelict/medical/chapel) -"hj" = (/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) -"hk" = (/obj/item/weapon/cigbutt,/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) -"hl" = (/obj/machinery/door/airlock/glass{name = "Med-Sci"; req_access_txt = "9"},/turf/open/floor/plating/airless,/area/derelict/medical) -"hm" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"hn" = (/obj/structure/closet/emcloset,/turf/open/floor/plasteel,/area/derelict/arrival) -"ho" = (/obj/structure/window/reinforced,/turf/open/space,/area/space) -"hp" = (/obj/item/stack/cable_coil/cut{amount = 2; dir = 2; icon_state = "coil_red2"},/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/hallway/primary) -"hq" = (/obj/structure/rack,/obj/item/weapon/circuitboard/machine/circuit_imprinter,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) -"hr" = (/obj/structure/window/reinforced,/turf/open/floor/plasteel{dir = 4; icon_state = "chapel"},/area/derelict/medical/chapel) -"hs" = (/obj/structure/window/reinforced,/turf/open/floor/plasteel{dir = 1; icon_state = "chapel"},/area/derelict/medical/chapel) -"ht" = (/obj/item/stack/cable_coil/cut{amount = 2; dir = 2; icon_state = "coil_red2"},/turf/open/floor/plating/airless,/area/derelict/hallway/primary) -"hu" = (/obj/item/drone_shell,/turf/open/floor/plating/airless,/area/derelict/singularity_engine) -"hv" = (/obj/item/stack/cable_coil/cut{amount = 2; dir = 2; icon_state = "coil_red2"},/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/hallway/primary) -"hw" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) -"hx" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) -"hy" = (/obj/item/stack/cable_coil/cut{amount = 2; dir = 2; icon_state = "coil_red2"},/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) -"hz" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) -"hA" = (/obj/item/stack/cable_coil/cut{amount = 2; dir = 2; icon_state = "coil_red2"},/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/medical) -"hB" = (/obj/structure/frame/computer,/obj/item/weapon/circuitboard/computer/rdconsole,/turf/open/floor/plasteel/airless,/area/derelict/bridge/ai_upload) -"hC" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/space) -"hD" = (/obj/item/weapon/shard,/turf/open/floor/plating/airless,/area/space) -"hE" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/plating/airless,/area/space) -"hF" = (/turf/open/floor/plasteel/airless{icon_state = "white"},/area/space) -"hG" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"hH" = (/obj/machinery/light/small{dir = 4},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"hI" = (/obj/item/weapon/pen,/turf/open/floor/plasteel,/area/derelict/arrival) -"hJ" = (/obj/machinery/power/apc{dir = 4; name = "Worn-out APC"; pixel_x = 24; pixel_y = 0},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/open/floor/plasteel/airless,/area/derelict/medical/chapel) -"hK" = (/turf/open/floor/plating,/area/derelict/medical/chapel) -"hL" = (/obj/machinery/mass_driver{dir = 8; icon_state = "mass_driver"; id = "derelict_gun"},/obj/machinery/door/window{dir = 4; req_access_txt = "25"},/obj/structure/closet/coffin,/turf/open/floor/plating,/area/derelict/medical/chapel) -"hM" = (/obj/machinery/door/window{dir = 8},/turf/open/floor/plasteel/airless,/area/derelict/medical/chapel) -"hN" = (/turf/open/floor/plasteel/airless,/area/derelict/medical/chapel) -"hO" = (/obj/machinery/light/small{dir = 1},/turf/open/floor/plasteel/airless,/area/derelict/medical/chapel) -"hP" = (/obj/item/stack/cable_coil/cut{amount = 2; dir = 2; icon_state = "coil_red2"},/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/medical) -"hQ" = (/obj/machinery/door/window,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel/airless,/area/derelict/medical/chapel) -"hR" = (/obj/machinery/power/apc{dir = 0; name = "Worn-out APC"; pixel_y = -24},/obj/structure/cable,/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) -"hS" = (/obj/item/stack/medical/ointment,/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) -"hT" = (/obj/machinery/light/small,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) -"hU" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/porta_turret_cover,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) -"hV" = (/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/space) -"hW" = (/obj/structure/window/fulltile,/turf/open/space,/area/space) -"hY" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/open/floor/plasteel,/area/derelict/arrival) -"hZ" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/open/floor/plasteel,/area/derelict/arrival) -"ia" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating,/area/derelict/arrival) -"ib" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plating,/area/derelict/arrival) -"ic" = (/obj/structure/window/reinforced{dir = 1},/turf/open/space,/area/space) -"id" = (/obj/structure/rack,/obj/item/weapon/circuitboard/machine/smes,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) -"ie" = (/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/space) -"if" = (/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plasteel{dir = 4; icon_state = "chapel"},/area/derelict/medical/chapel) -"ig" = (/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plasteel{dir = 1; icon_state = "chapel"},/area/derelict/medical/chapel) -"ih" = (/obj/item/stack/cable_coil/cut{amount = 2; dir = 2; icon_state = "coil_red2"},/turf/open/floor/plating/airless,/area/space) -"ii" = (/obj/machinery/door/window/southleft,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) -"ij" = (/obj/machinery/door/window/southright,/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) -"ik" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"il" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"im" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/hallway/primary) -"in" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/research{name = "Toxins Research"; req_access_txt = "7"},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"io" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plating/airless,/area/space) -"ip" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel/airless{icon_state = "floorscorched1"},/area/derelict/hallway/primary) -"ir" = (/obj/structure/lattice,/obj/structure/grille,/turf/open/space,/area/space) -"is" = (/obj/machinery/door/airlock/external{name = "Arrivals Docking Bay 1"},/turf/open/floor/plating,/area/derelict/arrival) -"it" = (/obj/machinery/light/small{dir = 1},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"iu" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/open/floor/plasteel/airless,/area/space) -"iv" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel/airless,/area/space) -"ix" = (/obj/item/weapon/stock_parts/manipulator,/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/gravity_generator) -"iy" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel/airless,/area/space) -"iA" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/research{name = "Toxins Research"; req_access_txt = "7"},/turf/open/floor/plasteel/airless,/area/derelict/arrival) -"iB" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel,/area/derelict/arrival) -"iC" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plating,/area/derelict/arrival) -"iD" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/open/floor/plasteel,/area/derelict/arrival) -"iE" = (/obj/machinery/light/small,/turf/open/floor/plasteel{dir = 4; icon_state = "chapel"},/area/derelict/medical/chapel) -"iF" = (/obj/machinery/light/small{dir = 8},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"iG" = (/obj/item/stack/cable_coil/cut{amount = 2; dir = 2; icon_state = "coil_red2"},/turf/open/floor/plasteel/airless{icon_state = "floorscorched1"},/area/derelict/hallway/primary) -"iH" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/open/floor/plasteel/airless{icon_state = "floorscorched1"},/area/derelict/hallway/primary) -"iI" = (/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"iN" = (/obj/structure/cable,/obj/machinery/power/apc{dir = 0; name = "Worn-out APC"; pixel_y = -24},/turf/open/floor/plasteel,/area/derelict/arrival) -"iO" = (/obj/machinery/portable_atmospherics/scrubber,/turf/open/floor/plasteel,/area/derelict/arrival) -"iP" = (/obj/structure/table,/obj/machinery/computer/pod/old{name = "ProComp IIe"; pixel_y = 7; id = "derelict_gun"},/turf/open/floor/plasteel{icon_state = "chapel"},/area/derelict/medical/chapel) -"iQ" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"iR" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"iS" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"iT" = (/obj/structure/girder,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"iU" = (/obj/machinery/portable_atmospherics/pump,/turf/open/floor/plasteel,/area/derelict/arrival) -"iV" = (/obj/machinery/door/window,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"iW" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"iX" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"iY" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"iZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/open/floor/plating/airless,/area/derelict/hallway/primary) -"ja" = (/obj/machinery/door/airlock/engineering{name = "Starboard Solar Access"; req_access_txt = "10"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel,/area/derelict/solar_control) -"jd" = (/obj/structure/bed,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"je" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/derelict/hallway/primary) -"jf" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plating/airless,/area/derelict/hallway/primary) -"jg" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/derelict/hallway/primary) -"jh" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"ji" = (/obj/item/weapon/cigbutt,/turf/open/space,/area/space) -"jk" = (/obj/machinery/light{dir = 1},/turf/open/floor/plasteel,/area/derelict/arrival) -"jl" = (/obj/structure/table,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"jm" = (/obj/structure/table,/obj/item/weapon/stock_parts/cell,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"jn" = (/obj/machinery/vending/sovietsoda,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"jo" = (/obj/structure/cable,/obj/machinery/power/apc{dir = 0; name = "Worn-out APC"; pixel_y = -24},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"jp" = (/obj/structure/rack,/obj/machinery/light/small{dir = 1},/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel,/area/derelict/bridge/access) -"jq" = (/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plasteel/airless,/area/space) -"jr" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel/airless,/area/space) -"js" = (/obj/structure/lattice,/obj/item/stack/cable_coil/cut,/turf/open/space,/area/space) -"jt" = (/obj/structure/girder,/turf/open/floor/plating,/area/derelict/arrival) -"ju" = (/obj/structure/chair/stool,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"jv" = (/obj/machinery/door/airlock/maintenance{name = "Atmospherics Access"; req_access_txt = "24"},/turf/open/floor/plating/airless,/area/derelict/hallway/primary) -"jw" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel,/area/derelict/bridge/access) -"jy" = (/obj/structure/grille,/turf/open/floor/plating,/area/derelict/arrival) -"jz" = (/obj/structure/rack,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/manipulator,/turf/open/floor/plasteel,/area/derelict/bridge/access) -"jA" = (/turf/open/floor/plasteel/airless{icon_state = "floorscorched1"},/area/derelict/hallway/primary) -"jB" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/window/reinforced,/turf/open/floor/plasteel/airless,/area/space) -"jC" = (/obj/structure/window/reinforced,/turf/open/floor/plasteel/airless,/area/space) -"jD" = (/obj/structure/grille,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/space) -"jE" = (/obj/structure/bed,/turf/open/floor/plasteel/airless,/area/space) -"jF" = (/obj/docking_port/stationary{dheight = 0; dir = 2; dwidth = 11; height = 22; id = "whiteship_z4"; name = "KSS13: Derelict"; width = 35},/turf/open/space,/area/space) -"jG" = (/turf/open/floor/plasteel/airless{icon_state = "floorgrime"},/area/derelict/hallway/primary) -"jH" = (/turf/open/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/hallway/primary) -"jI" = (/obj/structure/table,/obj/item/device/healthanalyzer,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"jJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/space) -"jK" = (/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel/airless{icon_state = "solarpanel"},/area/space) -"jL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/space) -"jM" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/derelict/arrival) -"jN" = (/obj/machinery/door/airlock/external{name = "Escape Airlock"},/turf/open/floor/plating,/area/derelict/arrival) -"jO" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"jP" = (/turf/closed/wall,/area/derelict/hallway/secondary) -"jQ" = (/obj/structure/girder,/turf/open/floor/plating/airless,/area/derelict/hallway/secondary) -"jR" = (/turf/closed/wall/r_wall,/area/derelict/hallway/secondary) -"jS" = (/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plating/airless,/area/space) -"jT" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"jU" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"jV" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"jW" = (/obj/machinery/door/airlock/security{name = "Security"; req_access = null; req_access_txt = "1"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"jX" = (/obj/structure/grille,/obj/item/weapon/shard,/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/plating/airless,/area/space) -"jY" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating/airless,/area/space) -"jZ" = (/obj/structure/girder,/turf/open/floor/plating/airless,/area/derelict/hallway/primary) -"ka" = (/obj/structure/window/reinforced{dir = 8},/obj/item/stack/cable_coil/cut{amount = 2; dir = 2; icon_state = "coil_red2"},/turf/open/floor/plasteel/airless,/area/space) -"kb" = (/obj/item/weapon/shard{icon_state = "small"},/turf/open/space,/area/space) -"kd" = (/obj/item/stack/cable_coil/cut{amount = 2; dir = 2; icon_state = "coil_red2"},/turf/open/floor/plasteel/airless,/area/space) -"ke" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/derelict/hallway/secondary) -"kf" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel/airless,/area/derelict/hallway/secondary) -"kg" = (/obj/item/stack/cable_coil/cut,/turf/open/floor/plating/airless,/area/derelict/hallway/primary) -"kh" = (/turf/open/floor/plasteel/airless,/area/derelict/hallway/secondary) -"ki" = (/obj/machinery/light/small{dir = 4},/turf/open/floor/plasteel/airless,/area/derelict/hallway/secondary) -"kj" = (/obj/machinery/door/airlock/maintenance{name = "Aux Storage"; req_access_txt = "23"},/turf/open/floor/plating/airless,/area/derelict/hallway/secondary) -"kk" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable,/obj/machinery/power/apc{dir = 8; name = "Worn-out APC"; pixel_x = -24; pixel_y = 0},/turf/open/floor/plasteel/airless,/area/derelict/hallway/secondary) -"kl" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/derelict/hallway/secondary) -"km" = (/turf/open/floor/plating/airless,/area/derelict/hallway/secondary) -"kn" = (/obj/machinery/light/small{dir = 1},/turf/open/floor/plasteel/airless,/area/derelict/hallway/secondary) -"kp" = (/obj/item/stack/rods,/turf/open/floor/plasteel/airless,/area/derelict/hallway/secondary) -"kq" = (/obj/structure/door_assembly/door_assembly_mai{name = "airlock assembly"},/turf/open/floor/plasteel/airless,/area/derelict/hallway/secondary) -"kr" = (/obj/structure/grille,/turf/open/floor/plating/airless,/area/derelict/bridge/ai_upload) -"ks" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/frame/machine,/obj/item/weapon/stock_parts/console_screen,/turf/open/floor/plating/airless,/area/derelict/gravity_generator) -"kt" = (/obj/item/weapon/wirecutters,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/open/floor/plasteel/airless,/area/derelict/hallway/secondary) -"ku" = (/obj/structure/reagent_dispensers/fueltank,/turf/open/floor/plasteel/airless,/area/derelict/se_solar) -"kv" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/item/drone_shell,/turf/open/floor/plasteel/airless,/area/derelict/se_solar) -"kw" = (/obj/effect/spawner/lootdrop/crate_spawner,/turf/open/floor/plasteel{icon_state = "grimy"},/area/djstation) -"kx" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel/airless,/area/derelict/hallway/secondary) -"ky" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/open/floor/plasteel/airless,/area/derelict/hallway/secondary) -"kz" = (/turf/open/floor/plasteel/airless{icon_state = "derelict1"},/area/derelict/hallway/secondary) -"kA" = (/turf/open/floor/plasteel/airless{icon_state = "derelict2"},/area/derelict/hallway/secondary) -"kB" = (/turf/open/floor/plasteel/airless{icon_state = "derelict3"},/area/derelict/hallway/secondary) -"kC" = (/turf/open/floor/plasteel/airless{icon_state = "derelict4"},/area/derelict/hallway/secondary) -"kD" = (/turf/open/floor/plasteel/airless{icon_state = "derelict5"},/area/derelict/hallway/secondary) -"kE" = (/turf/open/floor/plasteel/airless{icon_state = "derelict6"},/area/derelict/hallway/secondary) -"kF" = (/turf/open/floor/plasteel/airless{icon_state = "derelict7"},/area/derelict/hallway/secondary) -"kG" = (/turf/open/floor/plasteel/airless{icon_state = "derelict8"},/area/derelict/hallway/secondary) -"kH" = (/obj/structure/lattice,/turf/open/space,/area/derelict/hallway/secondary) -"kI" = (/obj/structure/grille,/obj/structure/window/reinforced,/turf/open/floor/plating/airless,/area/derelict/hallway/secondary) -"kJ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/derelict/hallway/secondary) -"kK" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/derelict/hallway/secondary) -"kL" = (/turf/closed/wall/r_wall,/area/derelict/bridge/ai_upload) -"kM" = (/obj/effect/spawner/lootdrop/crate_spawner,/turf/open/floor/plasteel/airless,/area/derelict/bridge/access) -"kN" = (/obj/machinery/door/airlock/external{name = "Escape Airlock"},/turf/open/floor/plating/airless,/area/derelict/hallway/secondary) -"kO" = (/obj/machinery/light/small{dir = 4},/obj/item/weapon/stock_parts/matter_bin{pixel_x = -10; pixel_y = 5},/obj/item/weapon/stock_parts/matter_bin{pixel_x = 5; pixel_y = 5},/obj/item/weapon/stock_parts/matter_bin,/turf/open/floor/plating/airless,/area/derelict/gravity_generator) -"kR" = (/turf/closed/wall,/area/derelict/bridge/ai_upload) -"kS" = (/obj/structure/closet/emcloset,/turf/open/floor/plasteel/airless,/area/derelict/hallway/secondary) -"kT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/derelict/hallway/secondary) -"kU" = (/obj/machinery/door/window,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel,/area/derelict/solar_control) -"kV" = (/turf/open/floor/plating/airless,/area/derelict/bridge/access) -"kW" = (/obj/machinery/light/small{dir = 4},/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/space) -"kX" = (/obj/machinery/light/small{dir = 8},/turf/open/floor/plasteel/airless,/area/derelict/bridge/ai_upload) -"kY" = (/obj/structure/grille,/turf/open/floor/plating/airless,/area/derelict/hallway/secondary) -"kZ" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"},/turf/open/floor/plasteel/airless,/area/derelict/bridge/ai_upload) -"la" = (/obj/machinery/computer/atmos_alert,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) -"lb" = (/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/bridge/ai_upload) -"lc" = (/turf/open/floor/plasteel/airless,/area/derelict/bridge/ai_upload) -"ld" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"},/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) -"le" = (/turf/open/floor/plating/airless,/area/derelict/bridge/ai_upload) -"lf" = (/obj/machinery/light/small{dir = 1},/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) -"lg" = (/obj/machinery/light/small{dir = 8},/turf/open/floor/plasteel,/area/derelict/solar_control) -"lh" = (/turf/open/floor/plasteel{icon_state = "damaged1"},/area/derelict/solar_control) -"li" = (/turf/open/floor/plasteel/airless{icon_state = "bcircuit"},/area/derelict/bridge/ai_upload) -"lj" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/open/floor/plasteel/airless{icon_state = "bcircuit"},/area/derelict/bridge/ai_upload) -"lk" = (/obj/item/stack/rods,/turf/open/floor/plating/airless,/area/derelict/hallway/secondary) -"ll" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"},/turf/open/floor/plasteel/airless,/area/space) -"lm" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/open/floor/plasteel/airless{icon_state = "bcircuit"},/area/derelict/bridge/ai_upload) -"ln" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/derelict/gravity_generator) -"lo" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/item/wallframe/apc,/turf/open/floor/plating/airless,/area/derelict/gravity_generator) -"lp" = (/obj/machinery/door/window,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) -"lq" = (/obj/item/weapon/ore/slag,/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/gravity_generator) -"lr" = (/obj/structure/rack,/obj/item/weapon/circuitboard/machine/smes,/turf/open/floor/plasteel,/area/derelict/bridge/access) -"ls" = (/obj/item/weapon/stock_parts/matter_bin,/turf/open/space,/area/space) -"lt" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/solar{id = "derelictsolar"; name = "Derelict Solar Array"},/turf/open/floor/plasteel/airless,/area/solar/derelict_aft) -"lu" = (/obj/effect/spawner/lootdrop/maintenance,/turf/open/space,/area/space) -"lv" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/open/floor/plating/airless,/area/derelict/gravity_generator) -"lw" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plating/airless,/area/derelict/gravity_generator) -"lx" = (/obj/machinery/gravity_generator/main/station{on = 0},/turf/open/floor/plasteel/airless,/area/derelict/gravity_generator) -"ly" = (/obj/item/weapon/screwdriver,/turf/open/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/gravity_generator) -"lz" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/open/floor/plasteel,/area/derelict/bridge) -"lA" = (/obj/item/weapon/ore/slag,/turf/open/space,/area/space) -"lB" = (/obj/structure/cable,/obj/machinery/power/solar{id = "derelictsolar"; name = "Derelict Solar Array"},/turf/open/floor/plasteel/airless,/area/solar/derelict_aft) -"lC" = (/turf/open/floor/plasteel/airless,/area/derelict/gravity_generator) -"lD" = (/obj/item/stack/cable_coil/cut,/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/gravity_generator) -"lE" = (/turf/closed/wall/r_wall,/area/derelict/teleporter) -"lF" = (/turf/open/floor/plating/airless,/area/derelict/teleporter) -"lG" = (/turf/open/floor/plasteel/airless,/area/derelict/teleporter) -"lH" = (/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/teleporter) -"lI" = (/obj/machinery/light_construct/small{dir = 1},/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/teleporter) -"lJ" = (/obj/machinery/computer/teleporter,/turf/open/floor/plasteel/airless,/area/derelict/teleporter) -"lK" = (/obj/machinery/teleport/station,/turf/open/floor/plasteel/airless,/area/derelict/teleporter) -"lL" = (/obj/machinery/teleport/hub,/turf/open/floor/plasteel/airless,/area/derelict/teleporter) -"lM" = (/obj/machinery/light_construct/small{dir = 4},/turf/open/floor/plating/airless,/area/derelict/teleporter) -"lN" = (/obj/structure/table,/obj/item/weapon/stock_parts/cell{charge = 100; maxcharge = 15000},/turf/open/floor/plasteel/airless,/area/derelict/teleporter) -"lO" = (/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/teleporter) -"lP" = (/obj/machinery/power/apc{dir = 0; name = "Worn-out APC"; pixel_y = -24},/turf/open/floor/plasteel/airless,/area/derelict/teleporter) -"lQ" = (/turf/closed/mineral/random,/area/space) -"lR" = (/turf/open/floor/plating/asteroid/airless,/area/space) -"lS" = (/turf/closed/wall/mineral/clown,/area/space) -"lT" = (/obj/machinery/door/airlock/clown,/turf/open/floor/mineral/bananium/airless,/area/space) -"lU" = (/obj/effect/mob_spawn/human/clown,/turf/open/floor/mineral/bananium/airless,/area/space) -"lV" = (/turf/open/floor/mineral/bananium/airless,/area/space) -"lW" = (/obj/structure/closet/crate,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/turf/open/floor/mineral/bananium/airless,/area/space) -"lX" = (/obj/structure/closet/crate{icon_state = "crateopen"; opened = 1},/obj/item/weapon/ore/bananium,/turf/open/floor/mineral/bananium/airless,/area/space) -"lY" = (/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/singularity_engine) -"lZ" = (/obj/structure/shuttle/engine/heater{color = "#FFFF00"; dir = 4; icon_state = "heater"},/obj/structure/window/reinforced{color = "#FFFF00"; dir = 8},/turf/open/floor/plating/airless{color = "#FFFF00"},/area/space) -"ma" = (/obj/structure/shuttle/engine/propulsion{color = "#FFFF00"; dir = 8; icon_state = "propulsion_l"},/turf/open/space,/area/space) -"mb" = (/obj/item/weapon/shard{icon_state = "small"},/turf/open/floor/plating/asteroid/airless,/area/space) -"mc" = (/obj/item/weapon/ore/bananium,/turf/open/floor/mineral/bananium/airless,/area/space) -"md" = (/obj/item/weapon/shard{icon_state = "medium"},/obj/structure/chair{dir = 8},/turf/open/floor/plating/asteroid/airless,/area/space) -"me" = (/obj/effect/mob_spawn/human/clown{name = "Clown Pilot"},/turf/open/floor/mineral/bananium/airless,/area/space) -"mf" = (/obj/item/weapon/paper{info = "The call has gone out! Our ancestral home has been rediscovered! Not a small patch of land, but a true clown nation, a true Clown Planet! We're on our way home at last!"},/turf/open/floor/mineral/bananium/airless,/area/space) -"mg" = (/obj/structure/grille{color = "#FFFF00"},/obj/structure/window/reinforced{color = "#FFFF00"},/obj/structure/window/reinforced{color = "#FFFF00"; dir = 4},/obj/structure/window/reinforced{color = "#FFFF00"; dir = 8},/turf/open/floor/plating/airless{color = "#FFFF00"},/area/space) -"mh" = (/obj/item/weapon/shard,/obj/structure/chair{dir = 8},/turf/open/floor/mineral/bananium/airless,/area/space) -"mi" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/mineral/bananium/airless,/area/space) -"mj" = (/obj/item/weapon/pickaxe,/turf/open/floor/mineral/bananium/airless,/area/space) -"mk" = (/obj/structure/closet/crate,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/turf/open/floor/mineral/bananium/airless,/area/space) -"ml" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/derelict/gravity_generator) -"mm" = (/obj/machinery/door/airlock/engineering{name = "Engineering Access"; req_access_txt = "10"},/turf/open/floor/plasteel,/area/derelict/gravity_generator) -"mn" = (/obj/machinery/light/small{dir = 8},/obj/structure/table,/obj/item/weapon/paper{info = "If the equipment breaks there should be enough spare parts in our engineering storage near the north east solar array."; name = "Equipment Inventory"},/turf/open/floor/plasteel/airless,/area/derelict/gravity_generator) -"mo" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plating/airless,/area/derelict/gravity_generator) -"mp" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/derelict/gravity_generator) -"mq" = (/obj/structure/rack,/obj/item/weapon/stock_parts/cell/high,/obj/item/weapon/stock_parts/cell/high,/obj/item/weapon/stock_parts/cell/high,/obj/item/weapon/stock_parts/cell/high,/obj/item/weapon/stock_parts/cell/high,/obj/item/weapon/stock_parts/cell/high,/turf/open/floor/plating,/area/derelict/bridge/access) -"mr" = (/obj/machinery/light/small{dir = 4},/obj/structure/rack,/obj/item/stack/cable_coil/cut,/obj/item/stack/cable_coil/cut,/turf/open/floor/plasteel,/area/derelict/bridge/access) -"ms" = (/obj/machinery/door/airlock/engineering{name = "Engineering Secure Storage"; req_access_txt = "10"},/turf/open/floor/plasteel,/area/derelict/bridge/access) -"mt" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plating/airless,/area/derelict/gravity_generator) -"mu" = (/obj/structure/window/reinforced,/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/singularity_engine) -"mv" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/open/floor/plating/airless,/area/derelict/atmospherics) -"mw" = (/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/derelict/atmospherics) -"mx" = (/turf/open/floor/plasteel,/area/derelict/gravity_generator) -"my" = (/obj/machinery/light/small{dir = 4},/turf/open/floor/plasteel,/area/derelict/gravity_generator) -"mz" = (/obj/machinery/door/airlock/engineering{name = "Engineering Access"; req_access_txt = "10"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plating/airless,/area/derelict/gravity_generator) -"mA" = (/obj/structure/sign/securearea{name = "ENGINEERING ACCESS"},/turf/closed/wall/r_wall,/area/derelict/gravity_generator) -"mB" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) -"mC" = (/obj/item/stack/cable_coil/cut,/obj/machinery/light/small{dir = 1},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) -"mD" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/open/floor/plasteel,/area/derelict/gravity_generator) -"mE" = (/obj/machinery/door/airlock/engineering{name = "Engineering Access"; req_access_txt = "10"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel,/area/derelict/gravity_generator) -"mF" = (/turf/closed/wall,/area/derelict/gravity_generator) -"mG" = (/obj/structure/closet/radiation,/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = 32; pixel_y = 0},/turf/open/floor/plasteel,/area/derelict/gravity_generator) -"mH" = (/obj/structure/noticeboard,/turf/closed/wall/r_wall,/area/derelict/singularity_engine) -"mI" = (/obj/structure/rack,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) -"mJ" = (/obj/structure/cable,/obj/structure/lattice/catwalk,/turf/open/space,/area/solar/derelict_aft) -"mK" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/lattice/catwalk,/turf/open/space,/area/solar/derelict_aft) -"mL" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/lattice/catwalk,/turf/open/space,/area/solar/derelict_aft) -"mM" = (/obj/structure/lattice/catwalk,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/open/space,/area/solar/derelict_aft) -"mN" = (/obj/structure/lattice/catwalk,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/open/space,/area/solar/derelict_aft) -"mO" = (/obj/structure/lattice/catwalk,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/space,/area/solar/derelict_aft) -"mP" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/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/structure/lattice/catwalk,/turf/open/space,/area/solar/derelict_aft) -"mQ" = (/obj/structure/lattice/catwalk,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/open/space,/area/solar/derelict_aft) -"mR" = (/obj/structure/lattice/catwalk,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/open/space,/area/solar/derelict_aft) -"mS" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/turf/open/floor/plating/airless,/area/derelict/atmospherics) -"mT" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/lattice/catwalk,/turf/open/space,/area/solar/derelict_aft) -"mU" = (/obj/structure/lattice/catwalk,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/open/space,/area/solar/derelict_aft) -"mV" = (/obj/machinery/power/tracker,/obj/structure/cable,/turf/open/floor/plasteel/airless,/area/solar/derelict_aft) -"mW" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{icon_state = "connector_map"; dir = 8},/turf/open/floor/plating/airless,/area/derelict/atmospherics) -"mX" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/turf/open/floor/plating/airless,/area/derelict/atmospherics) -"mY" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4},/turf/open/floor/plasteel/airless,/area/derelict/atmospherics) -"mZ" = (/obj/machinery/light{dir = 1},/turf/open/floor/plasteel/airless,/area/derelict/bridge/ai_upload) -"na" = (/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/bridge/ai_upload) -"nb" = (/obj/structure/rack,/obj/item/weapon/circuitboard/machine/microwave,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) -"nc" = (/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/bridge/ai_upload) -"nd" = (/turf/open/space,/area/derelict/bridge/ai_upload) -"ne" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{icon_state = "intact"; dir = 5},/turf/open/floor/plating/airless,/area/derelict/atmospherics) -"nf" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/plating/airless,/area/derelict/atmospherics) -"ng" = (/obj/machinery/light/small{dir = 8},/turf/open/floor/plating/airless,/area/derelict/atmospherics) -"nh" = (/obj/structure/lattice,/turf/open/space,/area/derelict/bridge/ai_upload) -"ni" = (/obj/structure/window/reinforced,/turf/open/floor/plasteel/airless,/area/derelict/atmospherics) -"nj" = (/turf/open/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/atmospherics) -"nk" = (/obj/machinery/power/apc{dir = 8; name = "Worn-out APC"; pixel_x = -24; pixel_y = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/open/floor/plasteel/airless,/area/derelict/bridge/ai_upload) -"nl" = (/obj/structure/frame/computer,/turf/open/floor/plasteel/airless,/area/derelict/bridge/ai_upload) -"nm" = (/obj/machinery/door/airlock/external,/turf/open/floor/plasteel,/area/derelict/solar_control) -"nn" = (/turf/open/floor/plasteel{icon_state = "damaged2"; initial_gas_mix = "TEMP=2.7"},/area/derelict/atmospherics) -"no" = (/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/atmospherics) -"np" = (/obj/structure/rack,/obj/item/weapon/circuitboard/machine/cryo_tube,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) -"nq" = (/obj/machinery/light,/turf/open/floor/plasteel/airless,/area/derelict/bridge/ai_upload) -"nr" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/closed/wall/r_wall,/area/derelict/bridge/ai_upload) -"ns" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/closed/wall/r_wall,/area/derelict/bridge/ai_upload) -"nt" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/closed/wall/r_wall,/area/derelict/bridge/ai_upload) -"nu" = (/obj/machinery/portable_atmospherics/canister,/turf/open/floor/plasteel/airless,/area/derelict/atmospherics) -"nv" = (/obj/structure/chair{dir = 1},/turf/open/floor/plating/airless,/area/derelict/atmospherics) -"nw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/closed/wall/r_wall,/area/derelict/bridge/ai_upload) -"nx" = (/obj/machinery/light/small,/turf/open/floor/plasteel,/area/derelict/solar_control) -"ny" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/closed/wall,/area/derelict/bridge/access) -"nz" = (/obj/machinery/door/airlock/maintenance,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel,/area/derelict/bridge/access) -"nA" = (/obj/structure/rack,/obj/item/weapon/electronics/apc,/turf/open/floor/plasteel,/area/derelict/bridge/access) -"nB" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/closed/wall,/area/derelict/bridge/access) -"nC" = (/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/atmospherics) -"nD" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/open/floor/plasteel,/area/derelict/bridge/access) -"nE" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel,/area/derelict/bridge/access) -"nF" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/plasteel/airless,/area/derelict/atmospherics) -"nG" = (/obj/structure/window/reinforced,/turf/open/floor/plating/airless,/area/derelict/atmospherics) -"nH" = (/turf/open/floor/plasteel/airless{icon_state = "damaged1"},/area/derelict/atmospherics) -"nI" = (/obj/machinery/portable_atmospherics/pump,/turf/open/floor/plating/airless,/area/derelict/atmospherics) -"nJ" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel,/area/derelict/bridge) -"nK" = (/obj/machinery/light/small,/turf/open/floor/plasteel/airless,/area/derelict/atmospherics) -"nL" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 4},/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel,/area/derelict/bridge) -"nM" = (/obj/machinery/door/airlock/glass,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel,/area/derelict/bridge/access) -"nN" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel,/area/derelict/bridge/access) -"nO" = (/obj/item/weapon/reagent_containers/food/drinks/beer,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/open/floor/plasteel,/area/derelict/bridge/access) -"nP" = (/obj/structure/table,/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = -7},/obj/item/weapon/stock_parts/matter_bin,/turf/open/floor/plasteel/airless,/area/derelict/bridge/access) -"nQ" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) -"nR" = (/obj/structure/table,/obj/machinery/light/small{dir = 4},/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) -"nS" = (/obj/structure/window/reinforced,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel,/area/derelict/bridge/access) -"nT" = (/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plating/airless,/area/space) -"nU" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/open/floor/plating,/area/derelict/bridge) -"nV" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/open/floor/plasteel,/area/derelict/bridge) -"nW" = (/turf/open/space,/area/derelict/bridge/access) -"nX" = (/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = -1},/turf/open/floor/plasteel/airless,/area/derelict/bridge/access) -"nY" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) -"nZ" = (/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel/airless,/area/space) -"oa" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) -"ob" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) -"oc" = (/obj/structure/frame/computer,/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/medical) -"od" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel,/area/derelict/arrival) -"oe" = (/obj/machinery/light{dir = 1},/obj/item/weapon/shard{icon_state = "small"},/turf/open/floor/plating/airless,/area/derelict/medical) -"of" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/turf/open/space,/area/space) -"og" = (/obj/structure/chair{dir = 8},/turf/open/floor/plasteel{dir = 1; icon_state = "chapel"},/area/derelict/medical/chapel) -"oh" = (/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/derelict/medical) -"oi" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel{dir = 8; icon_state = "chapel"},/area/derelict/medical/chapel) -"oj" = (/obj/structure/chair{dir = 4},/turf/open/floor/plasteel{icon_state = "chapel"},/area/derelict/medical/chapel) -"ok" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/open/floor/plasteel{icon_state = "chapel"},/area/derelict/medical/chapel) -"ol" = (/obj/structure/closet,/obj/structure/window/reinforced{dir = 8},/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/medical) -"om" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 8},/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel{dir = 1; icon_state = "chapel"},/area/derelict/medical/chapel) -"on" = (/obj/structure/chair,/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/medical) -"oo" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/grille,/turf/open/space,/area/space) -"op" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/open/floor/plasteel{icon_state = "dark"},/area/derelict/medical/chapel) -"oq" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/open/floor/plasteel{icon_state = "dark"},/area/derelict/medical/chapel) -"or" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 4},/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) -"os" = (/obj/structure/window/reinforced,/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) -"ot" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plating/airless,/area/derelict/medical) -"ou" = (/obj/machinery/door/poddoor{id = "derelict_gun"; name = "Derelict Mass Driver"},/turf/open/floor/plating,/area/space) -"ov" = (/obj/structure/closet/l3closet,/turf/open/floor/plating/airless,/area/space) -"ow" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/turf/open/space,/area/space) -"ox" = (/obj/structure/chair{dir = 8},/turf/open/floor/plasteel{dir = 4; icon_state = "chapel"},/area/derelict/medical/chapel) -"oy" = (/obj/structure/table,/turf/open/floor/plating/airless,/area/space) -"oz" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/open/floor/plasteel{icon_state = "chapel"},/area/derelict/medical/chapel) -"oA" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/hallway/primary) -"oB" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/bed,/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) -"oC" = (/obj/structure/bed,/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) -"oD" = (/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plating/airless,/area/derelict/singularity_engine) -"oE" = (/obj/machinery/door/airlock/medical{name = "Medical"},/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) -"oF" = (/turf/closed/wall/r_wall,/area/derelict/medical/chapel) -"oG" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel{dir = 1; icon_state = "chapel"},/area/derelict/medical/chapel) -"oH" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/item/weapon/reagent_containers/glass/beaker,/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) -"oI" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel{dir = 1; icon_state = "chapel"},/area/derelict/medical/chapel) -"oJ" = (/obj/structure/frame/computer,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"oK" = (/obj/item/weapon/reagent_containers/glass/beaker,/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/medical) -"oL" = (/obj/structure/closet/wardrobe/genetics_white,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) -"oM" = (/obj/machinery/door/airlock/command{name = "Teleporter Room"},/turf/open/floor/plasteel/airless,/area/derelict/medical/chapel) -"oN" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"oO" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"oP" = (/obj/structure/girder,/turf/open/floor/plasteel/airless,/area/space) -"oQ" = (/obj/machinery/vending/hydronutrients,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"oR" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"oS" = (/obj/effect/decal/cleanable/dirt,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/open/floor/plating/airless,/area/space) -"oT" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"oU" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel/airless,/area/space) -"oV" = (/obj/machinery/vending/hydroseeds,/turf/open/floor/plasteel/airless,/area/hallway/primary/port) -"oW" = (/turf/closed/wall,/area/derelict/atmospherics) -"oX" = (/turf/open/floor/plating/airless,/area/derelict/atmospherics) -"oY" = (/turf/closed/wall/r_wall,/area/derelict/atmospherics) -"oZ" = (/obj/structure/closet/wardrobe,/obj/effect/spawner/lootdrop/maintenance{lootcount = 3; name = "3maintenance loot spawner"},/turf/open/floor/plasteel,/area/derelict/arrival) -"pa" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4},/turf/open/floor/plating/airless,/area/derelict/atmospherics) -"pb" = (/obj/item/weapon/stock_parts/manipulator{pixel_x = -15; pixel_y = 10},/obj/item/weapon/stock_parts/manipulator,/turf/open/floor/plating/airless,/area/derelict/hallway/primary) -"pc" = (/obj/machinery/door/airlock/maintenance{name = "Atmospherics Access"; req_access_txt = "24"},/turf/open/floor/plating/airless,/area/derelict/atmospherics) -"pd" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance{lootcount = 3; name = "3maintenance loot spawner"},/turf/open/floor/plating/airless,/area/derelict/hallway/primary) -"pe" = (/obj/structure/closet/wardrobe/mixed,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/open/floor/plasteel,/area/derelict/arrival) -"pf" = (/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/space) -"pg" = (/turf/open/floor/plasteel/airless,/area/derelict/atmospherics) -"ph" = (/obj/machinery/door/window,/turf/open/floor/plasteel/airless,/area/hallway/primary/port) -"pi" = (/obj/machinery/door/window{dir = 8},/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/plasteel/airless,/area/space) -"pj" = (/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plating/airless,/area/derelict/hallway/primary) -"pk" = (/turf/open/floor/plasteel/airless{icon_state = "floorscorched1"},/area/derelict/atmospherics) -"pl" = (/obj/machinery/door/firedoor,/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plating/airless,/area/derelict/hallway/secondary) -"pm" = (/obj/structure/closet/secure_closet{name = "clown locker"; req_access_txt = "46"},/obj/item/clothing/shoes/clown_shoes/banana_shoes,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/open/floor/mineral/bananium/airless,/area/space) -"pn" = (/obj/effect/decal/cleanable/blood/gibs/old,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"po" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/obj/effect/decal/cleanable/blood/splatter,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"pp" = (/obj/effect/decal/cleanable/blood/splatter,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"pq" = (/obj/structure/window/fulltile,/turf/open/space,/area/derelict/atmospherics) -"pr" = (/obj/structure/closet/wardrobe/orange,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/obj/item/weapon/shovel/spade,/obj/item/weapon/cultivator,/turf/open/floor/plasteel/airless,/area/space) -"ps" = (/obj/structure/frame/computer,/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel/airless,/area/derelict/atmospherics) -"pt" = (/obj/machinery/light/small,/turf/open/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/atmospherics) -"pu" = (/obj/structure/lattice,/turf/open/space,/area/derelict/atmospherics) -"pv" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/open/floor/plating/airless,/area/derelict/hallway/primary) -"pw" = (/obj/structure/table,/obj/item/weapon/reagent_containers/glass/beaker{list_reagents = list("sacid" = 50)},/obj/item/weapon/paper/crumpled/bloody{desc = "Looks like someone started shakily writing a will in space common, but were interrupted by something bloody..."; info = "I, Victor Belyakov, do hereby leave my _- "; name = "unifinished paper scrap"},/obj/item/weapon/pen,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"px" = (/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/atmospherics) -"py" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/open/floor/plating/airless,/area/derelict/hallway/primary) -"pz" = (/obj/structure/chair/stool,/obj/effect/decal/remains/human,/obj/effect/decal/cleanable/blood/old,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"pA" = (/obj/machinery/atmospherics/components/unary/tank/air,/turf/open/floor/plating/airless,/area/derelict/atmospherics) -"pB" = (/obj/item/ammo_casing/a357,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"pD" = (/obj/machinery/atmospherics/pipe/manifold/cyan/hidden,/obj/machinery/meter,/turf/open/floor/plating/airless,/area/derelict/atmospherics) -"pE" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 6},/turf/open/floor/plating/airless,/area/derelict/atmospherics) -"pG" = (/turf/open/space,/area/derelict/atmospherics) -"pH" = (/obj/machinery/atmospherics/pipe/simple/cyan/hidden{icon_state = "intact"; dir = 9},/turf/open/floor/plating/airless,/area/derelict/atmospherics) -"pI" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/open/floor/plasteel/airless,/area/derelict/hallway/secondary) -"pJ" = (/obj/machinery/power/apc{dir = 1; name = "Worn-out APC"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/open/floor/plasteel/airless,/area/derelict/atmospherics) -"pK" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel/airless{icon_state = "derelict9"},/area/derelict/hallway/secondary) -"pL" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel/airless{icon_state = "derelict11"},/area/derelict/hallway/secondary) -"pM" = (/obj/machinery/light/small{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel/airless{icon_state = "derelict10"},/area/derelict/hallway/secondary) -"pN" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel/airless{icon_state = "derelict13"},/area/derelict/hallway/secondary) -"pO" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel/airless{icon_state = "derelict12"},/area/derelict/hallway/secondary) -"pP" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel/airless{icon_state = "derelict15"},/area/derelict/hallway/secondary) -"pQ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel/airless{icon_state = "derelict14"},/area/derelict/hallway/secondary) -"pR" = (/obj/machinery/light/small{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel/airless{icon_state = "derelict16"},/area/derelict/hallway/secondary) -"pS" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel/airless,/area/derelict/hallway/secondary) -"pT" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/open/floor/plasteel/airless,/area/derelict/hallway/secondary) -"pU" = (/turf/closed/wall/r_wall,/area/derelict/se_solar) -"pV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/engineering{name = "Aft Solar Access"; req_access_txt = "10"},/turf/open/floor/plasteel/airless,/area/derelict/se_solar) -"pW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/turf/open/floor/plasteel/airless,/area/derelict/se_solar) -"pX" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/closed/wall/r_wall,/area/derelict/se_solar) -"pY" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/closed/wall/r_wall,/area/derelict/se_solar) -"pZ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/door/airlock/engineering{name = "Aft Solar Access"; req_access_txt = "10"},/turf/open/floor/plasteel/airless,/area/derelict/se_solar) -"qa" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/derelict/se_solar) -"qb" = (/obj/machinery/power/smes,/obj/structure/cable,/turf/open/floor/plasteel/airless,/area/derelict/se_solar) -"qc" = (/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/se_solar) -"qd" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel/airless,/area/derelict/se_solar) -"qe" = (/turf/open/floor/plasteel/airless,/area/derelict/se_solar) -"qf" = (/turf/open/floor/plating/airless,/area/derelict/se_solar) -"qg" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/components/binary/valve,/turf/open/floor/plating/airless,/area/derelict/atmospherics) -"qh" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/open/floor/plasteel/airless,/area/derelict/se_solar) -"qi" = (/obj/item/weapon/storage/toolbox/syndicate,/turf/open/floor/plasteel/airless,/area/derelict/se_solar) -"qj" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable,/obj/machinery/power/solar_control{id = "derelictsolar"; name = "Primary Solar Control"; track = 0},/turf/open/floor/plasteel/airless,/area/derelict/se_solar) -"qk" = (/obj/structure/cable,/obj/machinery/power/apc{dir = 8; environ = 0; equipment = 0; lighting = 0; locked = 0; name = "Worn-out APC"; pixel_x = -24; pixel_y = 0},/turf/open/floor/plating/airless,/area/derelict/se_solar) -"ql" = (/obj/machinery/light/small{dir = 4},/obj/item/clothing/head/helmet/space/syndicate/black/red,/turf/open/floor/plasteel/airless,/area/derelict/se_solar) -"qm" = (/obj/item/weapon/paper{desc = ""; info = "The Syndicate have cunningly disguised a Syndicate Uplink as your PDA. Simply enter the code \"678 Bravo\" into the ringtone select to unlock its hidden features.

Objective #1. Kill the God damn AI in a fire blast that it rocks the station. Success!
Objective #2. Escape alive. Failed."; name = "Mission Objectives"},/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/se_solar) -"qn" = (/obj/machinery/light/small,/turf/open/floor/plasteel/airless,/area/derelict/se_solar) -"qo" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"},/turf/open/floor/plasteel/airless,/area/derelict/se_solar) -"qp" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel/airless,/area/derelict/se_solar) -"qq" = (/obj/item/clothing/suit/space/syndicate/black/red,/turf/open/floor/plasteel/airless,/area/derelict/se_solar) -"qr" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/turf/open/floor/plasteel/airless,/area/derelict/se_solar) -"qs" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/open/floor/plasteel/airless,/area/derelict/se_solar) -"qt" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/external,/turf/open/floor/plasteel/airless,/area/derelict/se_solar) -"qu" = (/obj/structure/lattice/catwalk,/turf/open/space,/area/solar/derelict_aft) -"qv" = (/obj/structure/lattice/catwalk,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/open/space,/area/solar/derelict_aft) -"qw" = (/obj/item/device/aicard,/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/bridge/ai_upload) -"qx" = (/obj/structure/rack,/obj/item/weapon/circuitboard/computer/solar_control,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) -"qy" = (/obj/item/ammo_casing/a357{pixel_x = -5},/obj/item/ammo_casing/a357{pixel_x = 5; pixel_y = 6},/obj/item/ammo_casing/a357,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) -"qz" = (/obj/machinery/porta_turret_cover,/turf/open/floor/plasteel/airless,/area/derelict/bridge/ai_upload) -"qA" = (/obj/structure/table,/obj/item/device/assembly/flash/handheld,/turf/open/floor/plasteel/airless,/area/derelict/bridge/access) -"qB" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance{lootcount = 8; name = "8maintenance loot spawner"},/turf/open/floor/plating/airless,/area/derelict/atmospherics) -"qC" = (/obj/item/weapon/storage/bag/ore,/turf/open/floor/mineral/bananium/airless,/area/space) -"qD" = (/obj/item/weapon/shovel,/turf/open/floor/mineral/bananium/airless,/area/space) +"cy" = (/turf/open/floor/plasteel{icon_state = "damaged1"},/area/derelict/solar_control) +"cz" = (/obj/machinery/door/window,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) +"cA" = (/turf/open/floor/plasteel{icon_state = "damaged5"},/area/derelict/solar_control) +"cB" = (/obj/item/weapon/stock_parts/matter_bin,/turf/open/floor/plasteel{icon_state = "damaged4"},/area/derelict/solar_control) +"cC" = (/obj/structure/rack,/obj/item/weapon/circuitboard/machine/smes,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) +"cD" = (/obj/structure/rack,/obj/item/weapon/circuitboard/machine/microwave,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) +"cE" = (/obj/structure/rack,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) +"cF" = (/turf/open/floor/plasteel/airless,/area/derelict/bridge/ai_upload) +"cG" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance{lootcount = 3; name = "3maintenance loot spawner"},/turf/open/floor/plasteel,/area/derelict/solar_control) +"cH" = (/turf/open/floor/plasteel{icon_state = "damaged2"},/area/derelict/solar_control) +"cI" = (/obj/item/stack/cable_coil/cut{amount = 2; dir = 2; icon_state = "coil_red2"},/turf/open/floor/plasteel{icon_state = "damaged3"},/area/derelict/solar_control) +"cJ" = (/obj/structure/rack,/obj/item/weapon/circuitboard/machine/cryo_tube,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) +"cK" = (/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/bridge/ai_upload) +"cL" = (/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/bridge/ai_upload) +"cM" = (/obj/machinery/light{dir = 1},/turf/open/floor/plasteel/airless,/area/derelict/bridge/ai_upload) +"cN" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/open/floor/plasteel,/area/derelict/solar_control) +"cO" = (/obj/machinery/light/small{dir = 8},/turf/open/floor/plasteel/airless,/area/derelict/bridge/ai_upload) +"cP" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"},/turf/open/floor/plasteel/airless,/area/derelict/bridge/ai_upload) +"cQ" = (/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/bridge/ai_upload) +"cR" = (/turf/open/space,/area/derelict/bridge/ai_upload) +"cS" = (/obj/item/weapon/stock_parts/console_screen,/turf/open/space,/area/derelict/bridge/ai_upload) +"cT" = (/turf/open/floor/plasteel/airless{icon_state = "bcircuit"},/area/derelict/bridge/ai_upload) +"cU" = (/turf/open/floor/plating/airless,/area/derelict/bridge/ai_upload) +"cV" = (/obj/machinery/porta_turret_cover,/turf/open/floor/plasteel/airless,/area/derelict/bridge/ai_upload) +"cW" = (/obj/item/device/aicard,/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/bridge/ai_upload) +"cX" = (/obj/structure/lattice,/turf/open/space,/area/derelict/bridge/ai_upload) +"cY" = (/obj/machinery/light/small{dir = 4},/turf/open/floor/plasteel,/area/derelict/solar_control) +"cZ" = (/obj/structure/rack,/obj/item/weapon/circuitboard/computer/solar_control,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) +"da" = (/obj/structure/rack,/obj/item/weapon/circuitboard/machine/autolathe,/obj/item/weapon/circuitboard/machine/protolathe{pixel_x = -5; pixel_y = -3},/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) +"db" = (/obj/structure/rack,/obj/item/weapon/circuitboard/machine/circuit_imprinter,/turf/open/floor/plasteel,/area/derelict/bridge/ai_upload) +"dc" = (/obj/machinery/power/apc{dir = 8; name = "Worn-out APC"; pixel_x = -24; pixel_y = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/open/floor/plasteel/airless,/area/derelict/bridge/ai_upload) +"dd" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/open/floor/plasteel/airless{icon_state = "bcircuit"},/area/derelict/bridge/ai_upload) +"de" = (/obj/structure/frame/computer,/obj/item/weapon/circuitboard/computer/rdconsole,/turf/open/floor/plasteel/airless,/area/derelict/bridge/ai_upload) +"df" = (/obj/structure/frame/computer,/turf/open/floor/plasteel/airless,/area/derelict/bridge/ai_upload) +"dg" = (/obj/machinery/door/airlock/external,/turf/open/floor/plasteel,/area/derelict/solar_control) +"dh" = (/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/space) +"di" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/open/floor/plasteel/airless{icon_state = "bcircuit"},/area/derelict/bridge/ai_upload) +"dj" = (/obj/machinery/light,/turf/open/floor/plasteel/airless,/area/derelict/bridge/ai_upload) +"dk" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/closed/wall/r_wall,/area/derelict/bridge/ai_upload) +"dl" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/closed/wall/r_wall,/area/derelict/bridge/ai_upload) +"dm" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/closed/wall/r_wall,/area/derelict/bridge/ai_upload) +"dn" = (/turf/closed/wall,/area/space) +"do" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/closed/wall/r_wall,/area/derelict/bridge/ai_upload) +"dp" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/open/floor/plasteel,/area/derelict/solar_control) +"dq" = (/turf/closed/wall/r_wall,/area/derelict/gravity_generator) +"dr" = (/obj/machinery/light/small,/turf/open/floor/plasteel,/area/derelict/solar_control) +"ds" = (/obj/item/weapon/ore/iron,/obj/item/weapon/ore/iron,/obj/item/weapon/ore/iron,/turf/open/space,/area/space) +"dt" = (/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/gravity_generator) +"du" = (/obj/machinery/light/small{dir = 1},/turf/open/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/gravity_generator) +"dv" = (/obj/item/weapon/stock_parts/manipulator,/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/gravity_generator) +"dw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/closed/wall,/area/derelict/bridge/access) +"dx" = (/turf/closed/wall,/area/derelict/bridge/access) +"dy" = (/obj/machinery/door/airlock/maintenance,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel,/area/derelict/bridge/access) +"dz" = (/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/gravity_generator) +"dA" = (/obj/item/weapon/ore/slag,/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/gravity_generator) +"dB" = (/turf/open/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/gravity_generator) +"dC" = (/turf/open/floor/plasteel,/area/derelict/bridge/access) +"dD" = (/obj/structure/rack,/obj/item/weapon/melee/classic_baton,/turf/open/floor/plasteel,/area/derelict/bridge/access) +"dE" = (/obj/structure/rack,/obj/machinery/light/small{dir = 1},/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel,/area/derelict/bridge/access) +"dF" = (/obj/structure/rack,/obj/item/clothing/head/helmet/swat,/turf/open/floor/plasteel,/area/derelict/bridge/access) +"dG" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel,/area/derelict/bridge/access) +"dH" = (/obj/structure/rack,/obj/item/weapon/electronics/apc,/turf/open/floor/plasteel,/area/derelict/bridge/access) +"dI" = (/obj/structure/rack,/obj/item/weapon/circuitboard/machine/smes,/turf/open/floor/plasteel,/area/derelict/bridge/access) +"dJ" = (/obj/structure/rack,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/manipulator,/turf/open/floor/plasteel,/area/derelict/bridge/access) +"dK" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel,/area/derelict/bridge/access) +"dL" = (/obj/item/weapon/screwdriver,/turf/open/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/gravity_generator) +"dM" = (/obj/machinery/gravity_generator/main/station{on = 0},/turf/open/floor/plasteel/airless,/area/derelict/gravity_generator) +"dN" = (/obj/item/weapon/ore/slag,/turf/open/space,/area/space) +"dO" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/closed/wall,/area/derelict/bridge/access) +"dP" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel,/area/derelict/bridge/access) +"dQ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/open/floor/plasteel,/area/derelict/bridge/access) +"dR" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/open/floor/plasteel,/area/derelict/bridge/access) +"dS" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/open/floor/plasteel,/area/derelict/bridge/access) +"dT" = (/turf/open/floor/plasteel/airless,/area/derelict/gravity_generator) +"dU" = (/obj/item/stack/cable_coil/cut,/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/gravity_generator) +"dV" = (/obj/structure/cable,/obj/machinery/power/apc{dir = 0; name = "Worn-out APC"; pixel_y = -24},/turf/open/floor/plasteel,/area/derelict/bridge/access) +"dW" = (/obj/structure/rack,/obj/item/weapon/stock_parts/cell/high,/obj/item/weapon/stock_parts/cell/high,/obj/item/weapon/stock_parts/cell/high,/obj/item/weapon/stock_parts/cell/high,/obj/item/weapon/stock_parts/cell/high,/obj/item/weapon/stock_parts/cell/high,/turf/open/floor/plating,/area/derelict/bridge/access) +"dX" = (/obj/machinery/light/small{dir = 4},/obj/structure/rack,/obj/item/stack/cable_coil/cut,/obj/item/stack/cable_coil/cut,/turf/open/floor/plasteel,/area/derelict/bridge/access) +"dY" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating,/area/derelict/bridge/access) +"dZ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating,/area/derelict/bridge/access) +"ea" = (/obj/machinery/door/airlock/command{name = "E.V.A."; req_access = null; req_access_txt = "18"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel,/area/derelict/bridge/access) +"eb" = (/obj/machinery/door/airlock/engineering{name = "Engineering Secure Storage"; req_access_txt = "10"},/turf/open/floor/plasteel,/area/derelict/bridge/access) +"ec" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel,/area/derelict/bridge/access) +"ed" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/derelict/gravity_generator) +"ee" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/derelict/gravity_generator) +"ef" = (/obj/machinery/door/airlock/engineering{name = "Engineering Access"; req_access_txt = "10"},/turf/open/floor/plasteel,/area/derelict/gravity_generator) +"eg" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/derelict/gravity_generator) +"eh" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plating/airless,/area/derelict/gravity_generator) +"ei" = (/turf/open/floor/plating,/area/derelict/bridge/access) +"ej" = (/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel/airless{icon_state = "solarpanel"},/area/space) +"ek" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/item/wallframe/apc,/turf/open/floor/plating/airless,/area/derelict/gravity_generator) +"el" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plating/airless,/area/derelict/gravity_generator) +"em" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/open/floor/plating/airless,/area/derelict/gravity_generator) +"en" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/frame/machine,/obj/item/weapon/stock_parts/console_screen,/turf/open/floor/plating/airless,/area/derelict/gravity_generator) +"eo" = (/turf/open/floor/plasteel/airless{icon_state = "solarpanel"},/area/space) +"ep" = (/obj/item/stack/cable_coil/cut,/turf/open/space,/area/space) +"eq" = (/obj/machinery/light/small{dir = 8},/turf/open/floor/plasteel,/area/derelict/bridge/access) +"er" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/open/floor/plating,/area/derelict/bridge/access) +"es" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/open/floor/plasteel,/area/derelict/bridge/access) +"et" = (/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel,/area/derelict/bridge/access) +"eu" = (/obj/machinery/door/airlock/glass,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel,/area/derelict/bridge/access) +"ev" = (/obj/item/weapon/reagent_containers/food/drinks/beer,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/open/floor/plasteel,/area/derelict/bridge/access) +"ew" = (/turf/closed/wall/r_wall,/area/derelict/singularity_engine) +"ex" = (/obj/machinery/light/small{dir = 8},/obj/structure/table,/obj/item/weapon/paper{info = "If the equipment breaks there should be enough spare parts in our engineering storage near the north east solar array."; name = "Equipment Inventory"},/turf/open/floor/plasteel/airless,/area/derelict/gravity_generator) +"ey" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plating/airless,/area/derelict/gravity_generator) +"ez" = (/obj/machinery/light/small{dir = 4},/obj/item/weapon/stock_parts/matter_bin{pixel_x = -10; pixel_y = 5},/obj/item/weapon/stock_parts/matter_bin{pixel_x = 5; pixel_y = 5},/obj/item/weapon/stock_parts/matter_bin,/turf/open/floor/plating/airless,/area/derelict/gravity_generator) +"eA" = (/obj/item/weapon/stock_parts/matter_bin,/turf/open/space,/area/space) +"eB" = (/obj/structure/window/reinforced,/turf/open/floor/plasteel,/area/derelict/bridge/access) +"eC" = (/obj/machinery/door/window,/turf/open/floor/plasteel,/area/derelict/bridge/access) +"eD" = (/obj/structure/window/reinforced,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel,/area/derelict/bridge/access) +"eE" = (/turf/closed/wall,/area/derelict/bridge) +"eF" = (/obj/structure/sign/electricshock,/turf/closed/wall/r_wall,/area/derelict/singularity_engine) +"eG" = (/obj/structure/sign/securearea,/turf/closed/wall/r_wall,/area/derelict/singularity_engine) +"eH" = (/obj/machinery/door/airlock/engineering{name = "Engineering Access"; req_access_txt = "10"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plating/airless,/area/derelict/gravity_generator) +"eI" = (/obj/structure/sign/securearea{name = "ENGINEERING ACCESS"},/turf/closed/wall/r_wall,/area/derelict/gravity_generator) +"eJ" = (/obj/effect/spawner/lootdrop/maintenance,/turf/open/space,/area/space) +"eK" = (/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel,/area/derelict/bridge/access) +"eL" = (/obj/structure/frame/computer,/turf/open/floor/plasteel,/area/derelict/bridge) +"eM" = (/obj/structure/frame/computer,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/open/floor/plasteel,/area/derelict/bridge) +"eN" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/open/floor/plasteel,/area/derelict/bridge) +"eO" = (/obj/machinery/computer/security,/turf/open/floor/plasteel,/area/derelict/bridge) +"eP" = (/obj/structure/table,/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = -7},/turf/open/floor/plasteel,/area/derelict/bridge) +"eQ" = (/obj/structure/table,/obj/machinery/light/small{dir = 1},/turf/open/floor/plasteel,/area/derelict/bridge) +"eR" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/turf/open/floor/plasteel,/area/derelict/bridge) +"eS" = (/obj/item/weapon/grenade/empgrenade,/obj/structure/table,/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel,/area/derelict/bridge) +"eT" = (/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/singularity_engine) +"eU" = (/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/singularity_engine) +"eV" = (/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/singularity_engine) +"eW" = (/obj/item/stack/cable_coil/cut,/obj/machinery/light/small{dir = 1},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) +"eX" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) +"eY" = (/obj/machinery/door/airlock/engineering{name = "Engineering Access"; req_access_txt = "10"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel,/area/derelict/gravity_generator) +"eZ" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/open/floor/plasteel,/area/derelict/gravity_generator) +"fa" = (/obj/machinery/light/small{dir = 4},/turf/open/floor/plasteel,/area/derelict/gravity_generator) +"fb" = (/turf/open/floor/plating/airless,/area/derelict/singularity_engine) +"fc" = (/turf/open/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/singularity_engine) +"fd" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plating,/area/derelict/bridge/access) +"fe" = (/obj/item/weapon/reagent_containers/food/drinks/beer,/turf/open/floor/plasteel,/area/derelict/bridge) +"ff" = (/turf/open/floor/plasteel,/area/derelict/bridge) +"fg" = (/turf/open/floor/plating,/area/derelict/bridge) +"fh" = (/obj/structure/table,/obj/item/weapon/paper/crumpled,/turf/open/floor/plasteel,/area/derelict/bridge) +"fi" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel,/area/derelict/bridge) +"fj" = (/obj/structure/window/reinforced,/obj/machinery/portable_atmospherics/canister/toxins,/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/singularity_engine) +"fk" = (/obj/structure/window/reinforced,/turf/open/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/singularity_engine) +"fl" = (/obj/structure/window/reinforced,/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/singularity_engine) +"fm" = (/obj/structure/window/reinforced,/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/singularity_engine) +"fn" = (/obj/structure/window/reinforced,/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/singularity_engine) +"fo" = (/turf/open/floor/plasteel,/area/derelict/gravity_generator) +"fp" = (/obj/structure/closet/radiation,/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = 32; pixel_y = 0},/turf/open/floor/plasteel,/area/derelict/gravity_generator) +"fq" = (/turf/closed/wall,/area/derelict/gravity_generator) +"fr" = (/obj/machinery/light/small{dir = 8},/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) +"fs" = (/obj/machinery/power/emitter{dir = 1; icon_state = "emitter"},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) +"ft" = (/obj/machinery/field/generator,/turf/open/floor/plating/airless,/area/derelict/singularity_engine) +"fu" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/window/reinforced,/turf/open/floor/plasteel,/area/derelict/bridge/access) +"fv" = (/obj/structure/window/reinforced/fulltile,/turf/open/floor/plasteel,/area/derelict/bridge/access) +"fw" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/open/floor/plating,/area/derelict/bridge) +"fx" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/open/floor/plasteel,/area/derelict/bridge) +"fy" = (/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel,/area/derelict/bridge) +"fz" = (/obj/item/stack/rods,/turf/open/floor/plating/airless,/area/space) +"fA" = (/obj/structure/grille,/obj/structure/window/reinforced,/turf/open/floor/plating/airless,/area/derelict/singularity_engine) +"fB" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) +"fC" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) +"fD" = (/obj/structure/noticeboard,/turf/closed/wall/r_wall,/area/derelict/singularity_engine) +"fE" = (/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) +"fF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/open/floor/plasteel,/area/derelict/bridge/access) +"fG" = (/obj/machinery/door/window/eastleft{name = "Heads of Staff"; req_access_txt = "19"},/turf/open/floor/plasteel,/area/derelict/bridge/access) +"fH" = (/obj/structure/table,/obj/item/device/paicard,/turf/open/floor/plasteel,/area/derelict/bridge) +"fI" = (/obj/structure/chair/stool,/turf/open/floor/plasteel,/area/derelict/bridge) +"fJ" = (/obj/structure/table,/obj/item/weapon/stock_parts/cell,/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel,/area/derelict/bridge) +"fK" = (/obj/item/weapon/storage/toolbox/syndicate,/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) +"fL" = (/obj/item/stack/cable_coil/cut,/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/singularity_engine) +"fM" = (/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"},/turf/open/floor/plasteel,/area/derelict/bridge/access) +"fN" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/open/floor/plating,/area/derelict/bridge/access) +"fO" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/open/floor/plasteel,/area/derelict/bridge/access) +"fP" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/open/floor/plasteel,/area/derelict/bridge) +"fQ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel,/area/derelict/bridge) +"fR" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/open/floor/plasteel,/area/derelict/bridge) +"fS" = (/obj/item/weapon/paper{info = "Objective #1: Destroy the station with a nuclear device."; name = "Objectives of a Nuclear Operative"},/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) +"fT" = (/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plating,/area/derelict/bridge/access) +"fU" = (/obj/structure/table,/turf/open/floor/plasteel,/area/derelict/bridge) +"fV" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel,/area/derelict/bridge) +"fW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/open/floor/plasteel,/area/derelict/bridge) +"fX" = (/obj/structure/chair,/turf/open/floor/plasteel,/area/derelict/bridge) +"fY" = (/obj/structure/table,/obj/item/weapon/screwdriver,/turf/open/floor/plasteel,/area/derelict/bridge) +"fZ" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/beer,/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel,/area/derelict/bridge) +"ga" = (/obj/item/stack/rods,/turf/open/space,/area/space) +"gb" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) +"gc" = (/obj/item/weapon/shard,/obj/structure/grille/broken,/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) +"gd" = (/obj/item/clothing/suit/space/syndicate/black/engie,/turf/open/floor/plating/airless,/area/derelict/singularity_engine) +"ge" = (/obj/item/stack/rods,/turf/open/floor/plating/airless,/area/derelict/singularity_engine) +"gf" = (/obj/item/weapon/shard,/turf/open/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/singularity_engine) +"gg" = (/obj/structure/grille,/turf/open/floor/plating/airless,/area/derelict/singularity_engine) +"gh" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) +"gi" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) +"gj" = (/obj/structure/table,/obj/item/weapon/rack_parts,/turf/open/floor/plasteel,/area/derelict/bridge) +"gk" = (/obj/structure/window/fulltile,/turf/open/floor/plasteel,/area/derelict/bridge) +"gl" = (/obj/structure/table,/obj/machinery/power/apc{dir = 0; name = "Worn-out APC"; pixel_y = -24},/obj/structure/cable,/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel,/area/derelict/bridge) +"gm" = (/obj/structure/table,/obj/machinery/light/small,/turf/open/floor/plasteel,/area/derelict/bridge) +"gn" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 4},/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel,/area/derelict/bridge) +"go" = (/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) +"gp" = (/obj/item/clothing/head/helmet/space/syndicate/black/engie,/turf/open/floor/plating/airless,/area/derelict/singularity_engine) +"gq" = (/obj/item/weapon/shard{icon_state = "small"},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) +"gr" = (/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) +"gs" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) +"gt" = (/turf/closed/wall/r_wall,/area/derelict/bridge) +"gu" = (/obj/machinery/door/window{dir = 2; name = "Captain's Quarters"; req_access_txt = "20"},/obj/structure/grille,/turf/open/floor/plating/airless,/area/derelict/bridge) +"gv" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) +"gw" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/light/small{dir = 8},/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) +"gx" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/light/small{dir = 4},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) +"gy" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) +"gz" = (/obj/item/stack/cable_coil/cut,/turf/open/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/singularity_engine) +"gA" = (/obj/effect/spawner/lootdrop/crate_spawner,/turf/open/floor/plasteel/airless,/area/derelict/bridge/access) +"gB" = (/obj/item/drone_shell,/turf/open/floor/plasteel/airless,/area/derelict/bridge/access) +"gC" = (/turf/open/floor/plasteel/airless,/area/derelict/bridge/access) +"gD" = (/obj/structure/table,/obj/item/device/assembly/flash/handheld,/turf/open/floor/plasteel/airless,/area/derelict/bridge/access) +"gE" = (/obj/structure/table,/obj/machinery/light/small{dir = 1},/obj/item/weapon/electronics/airlock,/turf/open/floor/plasteel/airless,/area/derelict/bridge/access) +"gF" = (/obj/structure/table,/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = -7},/obj/item/weapon/stock_parts/matter_bin,/turf/open/floor/plasteel/airless,/area/derelict/bridge/access) +"gG" = (/obj/structure/table,/obj/item/weapon/stock_parts/cell{charge = 100; maxcharge = 15000},/turf/open/floor/plasteel/airless,/area/derelict/bridge/access) +"gH" = (/turf/open/space,/area/derelict/bridge/access) +"gI" = (/obj/structure/girder,/turf/open/floor/plating/airless,/area/space) +"gJ" = (/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) +"gK" = (/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = -1},/turf/open/floor/plasteel/airless,/area/derelict/bridge/access) +"gL" = (/obj/item/stack/cable_coil/cut,/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/singularity_engine) +"gM" = (/obj/item/stack/cable_coil/cut,/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) +"gN" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) +"gO" = (/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/singularity_engine) +"gP" = (/obj/machinery/door/window,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel,/area/derelict/bridge/access) +"gQ" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) +"gR" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) +"gS" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) +"gT" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/singularity_engine) +"gU" = (/obj/structure/grille,/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/singularity_engine) +"gV" = (/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/singularity_engine) +"gW" = (/obj/machinery/door/airlock/maintenance{name = "Tech Storage"; req_access_txt = "23"},/turf/open/floor/plasteel/airless,/area/derelict/bridge/access) +"gX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/open/floor/plating/airless,/area/derelict/bridge/access) +"gY" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel/airless,/area/derelict/bridge/access) +"gZ" = (/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/singularity_engine) +"ha" = (/obj/item/weapon/screwdriver,/turf/open/floor/plating/airless,/area/derelict/singularity_engine) +"hb" = (/obj/item/stack/rods,/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) +"hc" = (/obj/item/weapon/shard{icon_state = "medium"},/obj/item/stack/cable_coil/cut,/turf/open/floor/plating/airless,/area/derelict/singularity_engine) +"hd" = (/obj/structure/table,/obj/machinery/light/small{dir = 4},/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) +"he" = (/turf/closed/wall,/area/derelict/hallway/primary) +"hf" = (/obj/item/stack/cable_coil/cut{amount = 2; dir = 2; icon_state = "coil_red2"},/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/hallway/primary) +"hg" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/hallway/primary) +"hh" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"hi" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/open/floor/plating/airless,/area/derelict/bridge/access) +"hj" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/open/floor/plasteel/airless,/area/derelict/bridge/access) +"hk" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/open/floor/plasteel/airless,/area/derelict/bridge/access) +"hl" = (/obj/machinery/light/small{dir = 4},/turf/open/floor/plasteel/airless,/area/derelict/bridge/access) +"hm" = (/obj/item/weapon/ore/slag,/turf/open/floor/plating/airless,/area/derelict/singularity_engine) +"hn" = (/obj/item/weapon/shard,/turf/open/floor/plating/airless,/area/derelict/singularity_engine) +"ho" = (/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) +"hp" = (/turf/closed/wall/r_wall,/area/derelict/hallway/primary) +"hq" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plating/airless,/area/derelict/hallway/primary) +"hr" = (/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/hallway/primary) +"hs" = (/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/hallway/primary) +"ht" = (/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"hu" = (/obj/structure/window/fulltile,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"hv" = (/turf/open/floor/plating/airless,/area/derelict/bridge/access) +"hw" = (/turf/open/floor/plasteel/airless,/area/space) +"hx" = (/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) +"hy" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) +"hz" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) +"hA" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) +"hB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) +"hC" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/open/floor/plating/airless,/area/derelict/hallway/primary) +"hD" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plating/airless,/area/derelict/hallway/primary) +"hE" = (/turf/open/floor/plasteel/airless{icon_state = "floorscorched2"},/area/derelict/hallway/primary) +"hF" = (/obj/machinery/light/small,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"hG" = (/obj/structure/cable,/obj/machinery/power/apc{dir = 0; name = "Worn-out APC"; pixel_y = -24},/turf/open/floor/plasteel/airless,/area/derelict/bridge/access) +"hH" = (/turf/open/floor/plasteel/airless{icon_state = "floorscorched2"},/area/space) +"hI" = (/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/space) +"hJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) +"hK" = (/obj/machinery/door/window,/turf/open/floor/plating/airless,/area/derelict/hallway/primary) +"hL" = (/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plating/airless,/area/space) +"hM" = (/turf/open/floor/plasteel/airless{icon_state = "floorscorched1"},/area/space) +"hN" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) +"hO" = (/obj/structure/grille/broken,/turf/open/floor/plating/airless,/area/derelict/singularity_engine) +"hP" = (/obj/machinery/light/small{dir = 4},/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/singularity_engine) +"hQ" = (/turf/open/floor/plating/airless,/area/derelict/hallway/primary) +"hR" = (/obj/item/weapon/crowbar,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"hS" = (/obj/structure/grille,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"hT" = (/obj/structure/girder,/turf/open/floor/plating/airless,/area/derelict/hallway/primary) +"hU" = (/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/space) +"hV" = (/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel/airless,/area/space) +"hW" = (/obj/item/weapon/shard{icon_state = "small"},/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) +"hX" = (/obj/structure/window/reinforced,/turf/open/floor/plating/airless,/area/derelict/singularity_engine) +"hY" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) +"hZ" = (/obj/item/stack/cable_coil/cut{amount = 2; dir = 2; icon_state = "coil_red2"},/turf/open/floor/plating/airless,/area/derelict/hallway/primary) +"ia" = (/turf/closed/wall/r_wall,/area/derelict/arrival) +"ib" = (/turf/closed/wall,/area/derelict/arrival) +"ic" = (/turf/closed/wall,/area/derelict/medical/chapel) +"id" = (/turf/closed/wall,/area/derelict/singularity_engine) +"ie" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/derelict/singularity_engine) +"if" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/open/floor/plating/airless,/area/derelict/hallway/primary) +"ig" = (/obj/machinery/light/small,/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/hallway/primary) +"ih" = (/obj/structure/lattice,/obj/structure/window/fulltile,/turf/open/space,/area/space) +"ii" = (/obj/structure/table,/turf/open/floor/plasteel,/area/derelict/arrival) +"ij" = (/obj/structure/chair,/turf/open/floor/plasteel,/area/derelict/arrival) +"ik" = (/turf/open/floor/plasteel,/area/derelict/arrival) +"il" = (/obj/machinery/light/small{dir = 1},/turf/open/floor/plasteel,/area/derelict/arrival) +"im" = (/obj/structure/chair{dir = 8},/obj/item/weapon/pen,/turf/open/floor/plasteel,/area/derelict/arrival) +"in" = (/obj/structure/chair{dir = 8},/turf/open/floor/plasteel,/area/derelict/arrival) +"io" = (/obj/structure/closet/coffin,/turf/open/floor/plasteel{icon_state = "dark"},/area/derelict/medical/chapel) +"ip" = (/turf/open/floor/plasteel{icon_state = "dark"},/area/derelict/medical/chapel) +"iq" = (/obj/machinery/light/small{dir = 1},/turf/open/floor/plasteel{icon_state = "dark"},/area/derelict/medical/chapel) +"ir" = (/obj/item/weapon/shard,/turf/open/space,/area/space) +"is" = (/obj/structure/grille,/turf/open/space,/area/derelict/singularity_engine) +"it" = (/obj/item/weapon/shard,/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) +"iu" = (/turf/open/floor/plasteel/airless{icon_state = "floorscorched2"},/area/derelict/arrival) +"iv" = (/turf/open/floor/plating/airless,/area/derelict/arrival) +"iw" = (/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/arrival) +"ix" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel,/area/derelict/arrival) +"iy" = (/obj/machinery/light/small,/turf/open/floor/plasteel{icon_state = "dark"},/area/derelict/medical/chapel) +"iz" = (/obj/machinery/door/airlock/medical{name = "Morgue"; req_access_txt = "6"},/turf/open/floor/plasteel{icon_state = "dark"},/area/derelict/medical/chapel) +"iA" = (/turf/closed/wall,/area/derelict/medical) +"iB" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/derelict/medical) +"iC" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/derelict/medical) +"iD" = (/obj/item/weapon/shard,/obj/structure/grille/broken,/turf/open/floor/plating/airless,/area/derelict/medical) +"iE" = (/turf/open/floor/plating/airless,/area/derelict/medical) +"iF" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/plating/airless,/area/derelict/medical) +"iG" = (/obj/machinery/door/airlock/external{name = "External Engineering"},/turf/open/floor/plating/airless,/area/space) +"iH" = (/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/hallway/primary) +"iI" = (/obj/machinery/door/window{dir = 8},/turf/open/floor/plasteel,/area/derelict/arrival) +"iJ" = (/obj/structure/table,/obj/machinery/computer/pod/old{name = "ProComp IIe"; pixel_y = 7; id = "derelict_gun"},/turf/open/floor/plasteel{icon_state = "chapel"},/area/derelict/medical/chapel) +"iK" = (/obj/machinery/door/morgue{name = "coffin storage"; req_access_txt = "22"},/turf/open/floor/plasteel{icon_state = "dark"},/area/derelict/medical/chapel) +"iL" = (/obj/structure/bodycontainer/morgue,/turf/open/floor/plasteel{icon_state = "dark"},/area/derelict/medical/chapel) +"iM" = (/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) +"iN" = (/obj/item/weapon/firstaid_arm_assembly,/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) +"iO" = (/obj/structure/closet,/obj/structure/window/reinforced{dir = 8},/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/medical) +"iP" = (/obj/structure/frame/computer,/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/medical) +"iQ" = (/obj/machinery/light{dir = 1},/obj/item/weapon/shard{icon_state = "small"},/turf/open/floor/plating/airless,/area/derelict/medical) +"iR" = (/obj/machinery/light/small,/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/singularity_engine) +"iS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/open/floor/plating/airless,/area/derelict/hallway/primary) +"iT" = (/turf/open/floor/plating,/area/derelict/arrival) +"iU" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/turf/open/space,/area/space) +"iV" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 8},/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel{dir = 1; icon_state = "chapel"},/area/derelict/medical/chapel) +"iW" = (/turf/open/floor/plasteel{dir = 4; icon_state = "chapel"},/area/derelict/medical/chapel) +"iX" = (/turf/open/floor/plasteel{dir = 1; icon_state = "chapel"},/area/derelict/medical/chapel) +"iY" = (/obj/structure/chair{dir = 8},/turf/open/floor/plasteel{dir = 1; icon_state = "chapel"},/area/derelict/medical/chapel) +"iZ" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) +"ja" = (/obj/item/stack/medical/bruise_pack,/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) +"jb" = (/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/medical) +"jc" = (/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/medical) +"jd" = (/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/derelict/medical) +"je" = (/turf/open/floor/plasteel/airless{icon_state = "damaged5"},/area/space) +"jf" = (/obj/item/stack/cable_coil/cut,/turf/open/floor/plating/airless,/area/space) +"jg" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel,/area/derelict/arrival) +"jh" = (/obj/machinery/light/small{dir = 4},/turf/open/floor/plasteel,/area/derelict/arrival) +"ji" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 8},/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel{dir = 8; icon_state = "chapel"},/area/derelict/medical/chapel) +"jj" = (/obj/structure/chair{dir = 4},/turf/open/floor/plasteel{icon_state = "chapel"},/area/derelict/medical/chapel) +"jk" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel{dir = 8; icon_state = "chapel"},/area/derelict/medical/chapel) +"jl" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/open/floor/plasteel{icon_state = "chapel"},/area/derelict/medical/chapel) +"jm" = (/turf/open/floor/plasteel{dir = 8; icon_state = "chapel"},/area/derelict/medical/chapel) +"jn" = (/turf/open/floor/plasteel{icon_state = "chapel"},/area/derelict/medical/chapel) +"jo" = (/obj/structure/chair,/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/medical) +"jp" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plating/airless,/area/derelict/medical) +"jq" = (/obj/item/weapon/storage/box/lights/mixed,/turf/open/floor/plating/airless,/area/derelict/singularity_engine) +"jr" = (/obj/item/drone_shell,/turf/open/floor/plating/airless,/area/derelict/singularity_engine) +"js" = (/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plating/airless,/area/derelict/singularity_engine) +"jt" = (/obj/item/stack/cable_coil/cut{amount = 2; dir = 2; icon_state = "coil_red2"},/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/hallway/primary) +"ju" = (/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/space) +"jv" = (/obj/structure/chair{dir = 1},/turf/open/floor/plasteel,/area/derelict/arrival) +"jw" = (/obj/structure/chair{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel,/area/derelict/arrival) +"jx" = (/obj/structure/window/reinforced,/turf/open/space,/area/space) +"jy" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/grille,/turf/open/space,/area/space) +"jz" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel{dir = 1; icon_state = "chapel"},/area/derelict/medical/chapel) +"jA" = (/obj/structure/window/reinforced,/turf/open/floor/plasteel{dir = 4; icon_state = "chapel"},/area/derelict/medical/chapel) +"jB" = (/obj/structure/window/reinforced,/turf/open/floor/plasteel{dir = 1; icon_state = "chapel"},/area/derelict/medical/chapel) +"jC" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/open/floor/plasteel{icon_state = "dark"},/area/derelict/medical/chapel) +"jD" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/open/floor/plasteel{icon_state = "dark"},/area/derelict/medical/chapel) +"jE" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 4},/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) +"jF" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/item/weapon/reagent_containers/glass/beaker,/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) +"jG" = (/obj/structure/window/reinforced,/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) +"jH" = (/obj/structure/window/reinforced,/turf/open/floor/plating/airless,/area/space) +"jI" = (/obj/structure/window/reinforced,/turf/open/floor/plasteel/airless{icon_state = "white"},/area/space) +"jJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/hallway/primary) +"jK" = (/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel,/area/derelict/arrival) +"jL" = (/obj/machinery/door/poddoor{id = "derelict_gun"; name = "Derelict Mass Driver"},/turf/open/floor/plating,/area/space) +"jM" = (/turf/open/floor/plating,/area/space) +"jN" = (/turf/open/floor/plating,/area/derelict/medical/chapel) +"jO" = (/obj/machinery/mass_driver{dir = 8; icon_state = "mass_driver"; id = "derelict_gun"},/obj/machinery/door/window{dir = 4; req_access_txt = "25"},/obj/structure/closet/coffin,/turf/open/floor/plating,/area/derelict/medical/chapel) +"jP" = (/obj/item/weapon/shard{icon_state = "small"},/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) +"jQ" = (/obj/item/stack/medical/bruise_pack,/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/medical) +"jR" = (/obj/item/stack/medical/ointment,/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/medical) +"jS" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/open/floor/plating/airless,/area/derelict/medical) +"jT" = (/obj/structure/closet/l3closet,/turf/open/floor/plating/airless,/area/space) +"jU" = (/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/space) +"jV" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/open/space,/area/space) +"jW" = (/obj/structure/window/reinforced{dir = 1},/turf/open/space,/area/space) +"jX" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/turf/open/space,/area/space) +"jY" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel{dir = 1; icon_state = "chapel"},/area/derelict/medical/chapel) +"jZ" = (/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plasteel{dir = 4; icon_state = "chapel"},/area/derelict/medical/chapel) +"ka" = (/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plasteel{dir = 1; icon_state = "chapel"},/area/derelict/medical/chapel) +"kb" = (/obj/structure/chair{dir = 8},/turf/open/floor/plasteel{dir = 4; icon_state = "chapel"},/area/derelict/medical/chapel) +"kc" = (/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) +"kd" = (/obj/item/weapon/cigbutt,/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) +"ke" = (/obj/machinery/door/airlock/glass{name = "Med-Sci"; req_access_txt = "9"},/turf/open/floor/plating/airless,/area/derelict/medical) +"kf" = (/obj/structure/table,/turf/open/floor/plating/airless,/area/space) +"kg" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"kh" = (/obj/structure/closet/emcloset,/turf/open/floor/plasteel,/area/derelict/arrival) +"ki" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/open/floor/plasteel{icon_state = "chapel"},/area/derelict/medical/chapel) +"kj" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) +"kk" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) +"kl" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) +"km" = (/obj/item/stack/cable_coil/cut{amount = 2; dir = 2; icon_state = "coil_red2"},/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) +"kn" = (/obj/item/stack/cable_coil/cut{amount = 2; dir = 2; icon_state = "coil_red2"},/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/medical) +"ko" = (/obj/item/weapon/reagent_containers/glass/beaker,/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/medical) +"kp" = (/obj/structure/closet/wardrobe/genetics_white,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) +"kq" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/space) +"kr" = (/obj/item/weapon/shard,/turf/open/floor/plating/airless,/area/space) +"ks" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/plating/airless,/area/space) +"kt" = (/turf/open/floor/plasteel/airless{icon_state = "white"},/area/space) +"ku" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"kv" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/hallway/primary) +"kw" = (/obj/machinery/light/small{dir = 4},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"kx" = (/obj/item/weapon/pen,/turf/open/floor/plasteel,/area/derelict/arrival) +"ky" = (/obj/machinery/light/small,/turf/open/floor/plasteel{dir = 4; icon_state = "chapel"},/area/derelict/medical/chapel) +"kz" = (/obj/machinery/door/window{dir = 8},/turf/open/floor/plasteel/airless,/area/derelict/medical/chapel) +"kA" = (/turf/open/floor/plasteel/airless,/area/derelict/medical/chapel) +"kB" = (/obj/machinery/light/small{dir = 1},/turf/open/floor/plasteel/airless,/area/derelict/medical/chapel) +"kC" = (/obj/machinery/power/apc{dir = 4; name = "Worn-out APC"; pixel_x = 24; pixel_y = 0},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/open/floor/plasteel/airless,/area/derelict/medical/chapel) +"kD" = (/obj/machinery/power/apc{dir = 0; name = "Worn-out APC"; pixel_y = -24},/obj/structure/cable,/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) +"kE" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/bed,/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) +"kF" = (/obj/item/stack/medical/ointment,/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) +"kG" = (/obj/structure/bed,/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) +"kH" = (/obj/item/stack/cable_coil/cut{amount = 2; dir = 2; icon_state = "coil_red2"},/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/medical) +"kI" = (/obj/machinery/door/airlock/medical{name = "Medical"},/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) +"kJ" = (/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/space) +"kK" = (/obj/structure/window/fulltile,/turf/open/space,/area/space) +"kL" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/open/floor/plasteel,/area/derelict/arrival) +"kM" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/open/floor/plasteel,/area/derelict/arrival) +"kN" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating,/area/derelict/arrival) +"kO" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plating,/area/derelict/arrival) +"kP" = (/turf/closed/wall/r_wall,/area/derelict/medical/chapel) +"kQ" = (/obj/machinery/door/window,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel/airless,/area/derelict/medical/chapel) +"kR" = (/obj/machinery/door/window/southleft,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) +"kS" = (/obj/machinery/door/window/southright,/turf/open/floor/plasteel/airless{icon_state = "white"},/area/derelict/medical) +"kT" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"kU" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/research{name = "Toxins Research"; req_access_txt = "7"},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"kV" = (/obj/item/stack/cable_coil/cut{amount = 2; dir = 2; icon_state = "coil_red2"},/turf/open/floor/plating/airless,/area/space) +"kW" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plating/airless,/area/space) +"kX" = (/obj/structure/lattice,/obj/structure/grille,/turf/open/space,/area/space) +"kY" = (/obj/machinery/door/airlock/external{name = "Arrivals Docking Bay 1"},/turf/open/floor/plating,/area/derelict/arrival) +"kZ" = (/obj/machinery/light/small{dir = 4},/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/space) +"la" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"lb" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel/airless{icon_state = "floorscorched1"},/area/derelict/hallway/primary) +"lc" = (/turf/open/floor/plasteel/airless{icon_state = "floorscorched1"},/area/derelict/hallway/primary) +"ld" = (/obj/machinery/light/small{dir = 1},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"le" = (/obj/structure/frame/computer,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"lf" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/open/floor/plasteel/airless,/area/space) +"lg" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel/airless,/area/space) +"lh" = (/obj/structure/window/fulltile,/turf/open/floor/plating/airless,/area/space) +"li" = (/obj/effect/decal/cleanable/dirt,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/open/floor/plating/airless,/area/space) +"lj" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel/airless,/area/space) +"lk" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/window/fulltile,/turf/open/floor/plating/airless,/area/space) +"ll" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/research{name = "Toxins Research"; req_access_txt = "7"},/turf/open/floor/plasteel/airless,/area/derelict/arrival) +"lm" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel,/area/derelict/arrival) +"ln" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plating,/area/derelict/arrival) +"lo" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/open/floor/plasteel,/area/derelict/arrival) +"lp" = (/obj/machinery/door/airlock/command{name = "Teleporter Room"},/turf/open/floor/plasteel/airless,/area/derelict/medical/chapel) +"lq" = (/obj/item/stack/cable_coil/cut{amount = 2; dir = 2; icon_state = "coil_red2"},/turf/open/floor/plasteel/airless{icon_state = "floorscorched1"},/area/derelict/hallway/primary) +"lr" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"ls" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"lt" = (/obj/machinery/light/small{dir = 8},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"lu" = (/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"lv" = (/obj/structure/cable,/obj/machinery/power/apc{dir = 0; name = "Worn-out APC"; pixel_y = -24},/turf/open/floor/plasteel,/area/derelict/arrival) +"lw" = (/obj/machinery/portable_atmospherics/scrubber,/turf/open/floor/plasteel,/area/derelict/arrival) +"lx" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/open/floor/plating/airless,/area/derelict/hallway/primary) +"ly" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/open/floor/plasteel/airless{icon_state = "floorscorched1"},/area/derelict/hallway/primary) +"lz" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"lA" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"lB" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"lC" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"lD" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"lE" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"lF" = (/obj/structure/window/fulltile,/turf/open/floor/plating/airless,/area/derelict/arrival) +"lG" = (/obj/machinery/portable_atmospherics/pump,/turf/open/floor/plasteel,/area/derelict/arrival) +"lH" = (/obj/machinery/door/window,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"lI" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"lJ" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"lK" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"lL" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"lM" = (/obj/machinery/vending/hydronutrients,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"lN" = (/obj/structure/girder,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"lO" = (/obj/structure/girder,/turf/open/floor/plasteel/airless,/area/space) +"lP" = (/obj/structure/girder,/turf/open/floor/plating,/area/derelict/arrival) +"lQ" = (/obj/structure/bed,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"lR" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/derelict/hallway/primary) +"lS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plating/airless,/area/derelict/hallway/primary) +"lT" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/derelict/hallway/primary) +"lU" = (/obj/machinery/door/airlock/security{name = "Security"; req_access = null; req_access_txt = "1"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"lV" = (/obj/machinery/door/window,/turf/open/floor/plasteel/airless,/area/hallway/primary/port) +"lW" = (/obj/machinery/vending/hydroseeds,/turf/open/floor/plasteel/airless,/area/hallway/primary/port) +"lX" = (/obj/item/weapon/cigbutt,/turf/open/space,/area/space) +"lY" = (/obj/machinery/light{dir = 1},/turf/open/floor/plasteel,/area/derelict/arrival) +"lZ" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"ma" = (/obj/structure/table,/obj/item/weapon/stock_parts/cell,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"mb" = (/obj/machinery/vending/sovietsoda,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"mc" = (/obj/effect/decal/cleanable/blood/gibs/old,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"md" = (/obj/structure/cable,/obj/machinery/power/apc{dir = 0; name = "Worn-out APC"; pixel_y = -24},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"me" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel/airless,/area/space) +"mf" = (/obj/structure/window/reinforced{dir = 8},/obj/item/stack/cable_coil/cut{amount = 2; dir = 2; icon_state = "coil_red2"},/turf/open/floor/plasteel/airless,/area/space) +"mg" = (/obj/structure/lattice,/obj/item/stack/cable_coil/cut,/turf/open/space,/area/space) +"mh" = (/obj/effect/decal/cleanable/blood/splatter,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"mi" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/obj/effect/decal/cleanable/blood/splatter,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"mj" = (/obj/structure/chair/stool,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"mk" = (/obj/machinery/door/airlock/maintenance{name = "Atmospherics Access"; req_access_txt = "24"},/turf/open/floor/plating/airless,/area/derelict/hallway/primary) +"ml" = (/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plasteel/airless,/area/space) +"mm" = (/obj/item/stack/cable_coil/cut{amount = 2; dir = 2; icon_state = "coil_red2"},/turf/open/floor/plasteel/airless,/area/space) +"mn" = (/obj/structure/closet/wardrobe/orange,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/obj/item/weapon/shovel/spade,/obj/item/weapon/cultivator,/turf/open/floor/plasteel/airless,/area/space) +"mo" = (/obj/structure/grille,/turf/open/floor/plating,/area/derelict/arrival) +"mp" = (/obj/structure/closet/wardrobe,/obj/effect/spawner/lootdrop/maintenance{lootcount = 3; name = "3maintenance loot spawner"},/turf/open/floor/plasteel,/area/derelict/arrival) +"mq" = (/obj/item/weapon/stock_parts/manipulator{pixel_x = -15; pixel_y = 10},/obj/item/weapon/stock_parts/manipulator,/turf/open/floor/plating/airless,/area/derelict/hallway/primary) +"mr" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance{lootcount = 3; name = "3maintenance loot spawner"},/turf/open/floor/plating/airless,/area/derelict/hallway/primary) +"ms" = (/obj/structure/chair/stool,/obj/effect/decal/remains/human,/obj/effect/decal/cleanable/blood/old,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"mt" = (/obj/structure/table,/obj/item/weapon/reagent_containers/glass/beaker{list_reagents = list("sacid" = 50)},/obj/item/weapon/paper/crumpled/bloody{desc = "Looks like someone started shakily writing a will in space common, but were interrupted by something bloody..."; info = "I, Victor Belyakov, do hereby leave my _- "; name = "unifinished paper scrap"},/obj/item/weapon/pen,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"mu" = (/obj/structure/table,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"mv" = (/turf/open/floor/plasteel/airless,/area/derelict/atmospherics) +"mw" = (/turf/open/floor/plating/airless,/area/derelict/atmospherics) +"mx" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/open/floor/plating/airless,/area/derelict/atmospherics) +"my" = (/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/derelict/atmospherics) +"mz" = (/obj/machinery/atmospherics/components/unary/tank/air,/turf/open/floor/plating/airless,/area/derelict/atmospherics) +"mA" = (/turf/closed/wall,/area/derelict/atmospherics) +"mB" = (/turf/closed/wall/r_wall,/area/derelict/atmospherics) +"mC" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/window/reinforced,/turf/open/floor/plasteel/airless,/area/space) +"mD" = (/obj/structure/window/reinforced,/turf/open/floor/plasteel/airless,/area/space) +"mE" = (/obj/structure/grille,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/space) +"mF" = (/obj/structure/bed,/turf/open/floor/plasteel/airless,/area/space) +"mG" = (/turf/open/floor/plasteel/airless{icon_state = "floorgrime"},/area/derelict/hallway/primary) +"mH" = (/turf/open/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/hallway/primary) +"mI" = (/obj/item/ammo_casing/a357,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"mJ" = (/obj/structure/table,/obj/item/device/healthanalyzer,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"mK" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4},/turf/open/floor/plating/airless,/area/derelict/atmospherics) +"mL" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/turf/open/floor/plating/airless,/area/derelict/atmospherics) +"mM" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{icon_state = "connector_map"; dir = 8},/turf/open/floor/plating/airless,/area/derelict/atmospherics) +"mN" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/cyan/visible{dir = 6},/turf/open/floor/plating/airless,/area/derelict/atmospherics) +"mO" = (/obj/machinery/atmospherics/pipe/manifold/cyan/hidden,/obj/machinery/meter,/turf/open/floor/plating/airless,/area/derelict/atmospherics) +"mP" = (/obj/machinery/atmospherics/pipe/simple/cyan/hidden{icon_state = "intact"; dir = 9},/turf/open/floor/plating/airless,/area/derelict/atmospherics) +"mQ" = (/obj/machinery/door/airlock/maintenance{name = "Atmospherics Access"; req_access_txt = "24"},/turf/open/floor/plating/airless,/area/derelict/atmospherics) +"mR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel/airless,/area/space) +"mS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/space) +"mT" = (/obj/structure/closet/wardrobe/mixed,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/open/floor/plasteel,/area/derelict/arrival) +"mU" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 4},/turf/open/floor/plasteel/airless,/area/derelict/atmospherics) +"mV" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/turf/open/floor/plating/airless,/area/derelict/atmospherics) +"mW" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{icon_state = "intact"; dir = 5},/turf/open/floor/plating/airless,/area/derelict/atmospherics) +"mX" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/components/binary/valve,/turf/open/floor/plating/airless,/area/derelict/atmospherics) +"mY" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/space) +"mZ" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/derelict/arrival) +"na" = (/obj/machinery/door/airlock/external{name = "Escape Airlock"},/turf/open/floor/plating,/area/derelict/arrival) +"nb" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/plating/airless,/area/derelict/atmospherics) +"nc" = (/obj/machinery/door/window{dir = 8},/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/plasteel/airless,/area/space) +"nd" = (/turf/closed/wall,/area/derelict/hallway/secondary) +"ne" = (/obj/structure/girder,/turf/open/floor/plating/airless,/area/derelict/hallway/secondary) +"nf" = (/turf/closed/wall/r_wall,/area/derelict/hallway/secondary) +"ng" = (/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plating/airless,/area/space) +"nh" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"},/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"ni" = (/obj/item/ammo_casing/a357{pixel_x = -5},/obj/item/ammo_casing/a357{pixel_x = 5; pixel_y = 6},/obj/item/ammo_casing/a357,/turf/open/floor/plasteel/airless,/area/derelict/hallway/primary) +"nj" = (/obj/machinery/light/small{dir = 8},/turf/open/floor/plating/airless,/area/derelict/atmospherics) +"nk" = (/turf/open/floor/plasteel/airless{icon_state = "floorscorched1"},/area/derelict/atmospherics) +"nl" = (/obj/structure/window/fulltile,/turf/open/floor/plating/airless,/area/derelict/hallway/secondary) +"nm" = (/obj/structure/grille,/obj/item/weapon/shard,/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/plating/airless,/area/space) +"nn" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating/airless,/area/space) +"no" = (/obj/structure/window/reinforced,/turf/open/floor/plasteel/airless,/area/derelict/atmospherics) +"np" = (/turf/open/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/atmospherics) +"nq" = (/turf/open/floor/plasteel{icon_state = "damaged2"; initial_gas_mix = "TEMP=2.7"},/area/derelict/atmospherics) +"nr" = (/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/atmospherics) +"ns" = (/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/atmospherics) +"nt" = (/obj/structure/window/fulltile,/turf/open/space,/area/derelict/atmospherics) +"nu" = (/obj/item/stack/rods,/turf/open/floor/plasteel/airless,/area/derelict/hallway/secondary) +"nv" = (/obj/item/weapon/shard{icon_state = "small"},/turf/open/space,/area/space) +"nw" = (/obj/structure/frame/computer,/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel/airless,/area/derelict/atmospherics) +"nx" = (/obj/machinery/portable_atmospherics/canister,/turf/open/floor/plasteel/airless,/area/derelict/atmospherics) +"ny" = (/obj/machinery/light/small,/turf/open/floor/plasteel/airless{icon_state = "damaged5"},/area/derelict/atmospherics) +"nz" = (/obj/structure/lattice,/turf/open/space,/area/derelict/atmospherics) +"nA" = (/obj/structure/door_assembly/door_assembly_mai{name = "airlock assembly"},/turf/open/floor/plasteel/airless,/area/derelict/hallway/secondary) +"nB" = (/obj/item/weapon/wirecutters,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/open/floor/plasteel/airless,/area/derelict/hallway/secondary) +"nC" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/derelict/hallway/secondary) +"nD" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/open/floor/plating/airless,/area/derelict/hallway/primary) +"nE" = (/obj/structure/chair{dir = 1},/turf/open/floor/plating/airless,/area/derelict/atmospherics) +"nF" = (/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/atmospherics) +"nG" = (/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/space) +"nH" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel/airless,/area/derelict/hallway/secondary) +"nI" = (/obj/item/stack/cable_coil/cut,/turf/open/floor/plating/airless,/area/derelict/hallway/primary) +"nJ" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/open/floor/plating/airless,/area/derelict/hallway/primary) +"nK" = (/obj/structure/window/reinforced,/turf/open/floor/plating/airless,/area/derelict/atmospherics) +"nL" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/plasteel/airless,/area/derelict/atmospherics) +"nM" = (/turf/open/floor/plasteel/airless{icon_state = "damaged1"},/area/derelict/atmospherics) +"nN" = (/obj/machinery/portable_atmospherics/pump,/turf/open/floor/plating/airless,/area/derelict/atmospherics) +"nO" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance{lootcount = 8; name = "8maintenance loot spawner"},/turf/open/floor/plating/airless,/area/derelict/atmospherics) +"nP" = (/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plating/airless,/area/derelict/hallway/primary) +"nQ" = (/turf/open/space,/area/derelict/atmospherics) +"nR" = (/obj/machinery/light/small,/turf/open/floor/plasteel/airless,/area/derelict/atmospherics) +"nS" = (/turf/open/floor/plasteel/airless,/area/derelict/hallway/secondary) +"nT" = (/obj/machinery/light/small{dir = 4},/turf/open/floor/plasteel/airless,/area/derelict/hallway/secondary) +"nU" = (/obj/machinery/door/airlock/maintenance{name = "Aux Storage"; req_access_txt = "23"},/turf/open/floor/plating/airless,/area/derelict/hallway/secondary) +"nV" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable,/obj/machinery/power/apc{dir = 8; name = "Worn-out APC"; pixel_x = -24; pixel_y = 0},/turf/open/floor/plasteel/airless,/area/derelict/hallway/secondary) +"nW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/derelict/hallway/secondary) +"nX" = (/turf/open/floor/plating/airless,/area/derelict/hallway/secondary) +"nY" = (/obj/machinery/light/small{dir = 1},/turf/open/floor/plasteel/airless,/area/derelict/hallway/secondary) +"nZ" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/open/floor/plasteel/airless,/area/derelict/hallway/secondary) +"oa" = (/obj/machinery/power/apc{dir = 1; name = "Worn-out APC"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/open/floor/plasteel/airless,/area/derelict/atmospherics) +"ob" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel/airless,/area/derelict/hallway/secondary) +"oc" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel/airless{icon_state = "derelict9"},/area/derelict/hallway/secondary) +"od" = (/obj/machinery/light/small{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel/airless{icon_state = "derelict10"},/area/derelict/hallway/secondary) +"oe" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel/airless{icon_state = "derelict11"},/area/derelict/hallway/secondary) +"of" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel/airless{icon_state = "derelict12"},/area/derelict/hallway/secondary) +"og" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel/airless{icon_state = "derelict13"},/area/derelict/hallway/secondary) +"oh" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel/airless{icon_state = "derelict14"},/area/derelict/hallway/secondary) +"oi" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel/airless{icon_state = "derelict15"},/area/derelict/hallway/secondary) +"oj" = (/obj/machinery/light/small{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel/airless{icon_state = "derelict16"},/area/derelict/hallway/secondary) +"ok" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel/airless,/area/derelict/hallway/secondary) +"ol" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/open/floor/plasteel/airless,/area/derelict/hallway/secondary) +"om" = (/turf/open/floor/plasteel/airless{icon_state = "derelict1"},/area/derelict/hallway/secondary) +"on" = (/turf/open/floor/plasteel/airless{icon_state = "derelict2"},/area/derelict/hallway/secondary) +"oo" = (/turf/open/floor/plasteel/airless{icon_state = "derelict3"},/area/derelict/hallway/secondary) +"op" = (/turf/open/floor/plasteel/airless{icon_state = "derelict4"},/area/derelict/hallway/secondary) +"oq" = (/turf/open/floor/plasteel/airless{icon_state = "derelict5"},/area/derelict/hallway/secondary) +"or" = (/turf/open/floor/plasteel/airless{icon_state = "derelict6"},/area/derelict/hallway/secondary) +"os" = (/turf/open/floor/plasteel/airless{icon_state = "derelict7"},/area/derelict/hallway/secondary) +"ot" = (/turf/open/floor/plasteel/airless{icon_state = "derelict8"},/area/derelict/hallway/secondary) +"ou" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/open/floor/plasteel/airless,/area/derelict/hallway/secondary) +"ov" = (/obj/structure/lattice,/turf/open/space,/area/derelict/hallway/secondary) +"ow" = (/obj/structure/grille,/obj/structure/window/reinforced,/turf/open/floor/plating/airless,/area/derelict/hallway/secondary) +"ox" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/derelict/hallway/secondary) +"oy" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/derelict/hallway/secondary) +"oz" = (/turf/closed/wall/r_wall,/area/derelict/se_solar) +"oA" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/engineering{name = "Aft Solar Access"; req_access_txt = "10"},/turf/open/floor/plasteel/airless,/area/derelict/se_solar) +"oB" = (/obj/machinery/door/airlock/external{name = "Escape Airlock"},/turf/open/floor/plating/airless,/area/derelict/hallway/secondary) +"oC" = (/obj/machinery/door/firedoor,/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plating/airless,/area/derelict/hallway/secondary) +"oD" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/turf/open/floor/plasteel/airless,/area/derelict/se_solar) +"oE" = (/obj/structure/closet/emcloset,/turf/open/floor/plasteel/airless,/area/derelict/hallway/secondary) +"oF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/derelict/hallway/secondary) +"oG" = (/obj/structure/girder/reinforced,/turf/open/floor/plating/airless,/area/space) +"oH" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/closed/wall/r_wall,/area/derelict/se_solar) +"oI" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/closed/wall/r_wall,/area/derelict/se_solar) +"oJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/door/airlock/engineering{name = "Aft Solar Access"; req_access_txt = "10"},/turf/open/floor/plasteel/airless,/area/derelict/se_solar) +"oK" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/derelict/se_solar) +"oL" = (/obj/structure/grille,/turf/open/floor/plating/airless,/area/derelict/hallway/secondary) +"oM" = (/obj/machinery/power/smes,/obj/structure/cable,/turf/open/floor/plasteel/airless,/area/derelict/se_solar) +"oN" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel/airless,/area/derelict/se_solar) +"oO" = (/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/se_solar) +"oP" = (/turf/open/floor/plasteel/airless,/area/derelict/se_solar) +"oQ" = (/obj/structure/reagent_dispensers/fueltank,/turf/open/floor/plasteel/airless,/area/derelict/se_solar) +"oR" = (/obj/docking_port/stationary{dheight = 0; dir = 2; dwidth = 11; height = 22; id = "whiteship_z4"; name = "KSS13: Derelict"; width = 35},/turf/open/space,/area/space) +"oS" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/item/drone_shell,/turf/open/floor/plasteel/airless,/area/derelict/se_solar) +"oT" = (/turf/open/floor/plating/airless,/area/derelict/se_solar) +"oU" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/open/floor/plasteel/airless,/area/derelict/se_solar) +"oV" = (/obj/item/weapon/storage/toolbox/syndicate,/turf/open/floor/plasteel/airless,/area/derelict/se_solar) +"oW" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable,/obj/machinery/power/solar_control{id = "derelictsolar"; name = "Primary Solar Control"; track = 0},/turf/open/floor/plasteel/airless,/area/derelict/se_solar) +"oX" = (/obj/structure/cable,/obj/machinery/power/apc{dir = 8; environ = 0; equipment = 0; lighting = 0; locked = 0; name = "Worn-out APC"; pixel_x = -24; pixel_y = 0},/turf/open/floor/plating/airless,/area/derelict/se_solar) +"oY" = (/obj/item/weapon/paper{desc = ""; info = "The Syndicate have cunningly disguised a Syndicate Uplink as your PDA. Simply enter the code \"678 Bravo\" into the ringtone select to unlock its hidden features.

Objective #1. Kill the God damn AI in a fire blast that it rocks the station. Success!
Objective #2. Escape alive. Failed."; name = "Mission Objectives"},/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/se_solar) +"oZ" = (/obj/machinery/light/small{dir = 4},/obj/item/clothing/head/helmet/space/syndicate/black/red,/turf/open/floor/plasteel/airless,/area/derelict/se_solar) +"pa" = (/obj/item/stack/rods,/turf/open/floor/plating/airless,/area/derelict/hallway/secondary) +"pb" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"},/turf/open/floor/plasteel/airless,/area/space) +"pc" = (/obj/machinery/light/small,/turf/open/floor/plasteel/airless,/area/derelict/se_solar) +"pd" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel/airless,/area/derelict/se_solar) +"pe" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"},/turf/open/floor/plasteel/airless,/area/derelict/se_solar) +"pf" = (/obj/item/clothing/suit/space/syndicate/black/red,/turf/open/floor/plasteel/airless,/area/derelict/se_solar) +"pg" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/turf/open/floor/plasteel/airless,/area/derelict/se_solar) +"ph" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/open/floor/plasteel/airless,/area/derelict/se_solar) +"pi" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/external,/turf/open/floor/plasteel/airless,/area/derelict/se_solar) +"pj" = (/obj/structure/cable,/obj/structure/lattice/catwalk,/turf/open/space,/area/solar/derelict_aft) +"pk" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/lattice/catwalk,/turf/open/space,/area/solar/derelict_aft) +"pl" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/solar{id = "derelictsolar"; name = "Derelict Solar Array"},/turf/open/floor/plasteel/airless,/area/solar/derelict_aft) +"pm" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/lattice/catwalk,/turf/open/space,/area/solar/derelict_aft) +"pn" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/solar{id = "derelictsolar"; name = "Derelict Solar Array"},/turf/open/floor/plating/airless{icon_state = "platingdmg3"},/area/solar/derelict_aft) +"po" = (/turf/open/floor/plating/airless,/turf/open/floor/plating/airless{icon_state = "platingdmg2"},/area/solar/derelict_aft) +"pp" = (/obj/structure/lattice/catwalk,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/open/space,/area/solar/derelict_aft) +"pq" = (/obj/structure/lattice/catwalk,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/open/space,/area/solar/derelict_aft) +"pr" = (/obj/structure/lattice/catwalk,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/space,/area/solar/derelict_aft) +"ps" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/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/structure/lattice/catwalk,/turf/open/space,/area/solar/derelict_aft) +"pt" = (/obj/structure/lattice/catwalk,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/open/space,/area/solar/derelict_aft) +"pu" = (/obj/structure/lattice/catwalk,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/open/space,/area/solar/derelict_aft) +"pv" = (/obj/structure/cable,/obj/machinery/power/solar{id = "derelictsolar"; name = "Derelict Solar Array"},/turf/open/floor/plasteel/airless,/area/solar/derelict_aft) +"pw" = (/turf/open/floor/plating/airless{icon_state = "platingdmg1"},/area/solar/derelict_aft) +"px" = (/obj/structure/lattice/catwalk,/turf/open/space,/area/solar/derelict_aft) +"py" = (/obj/structure/lattice/catwalk,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/open/space,/area/solar/derelict_aft) +"pz" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/lattice/catwalk,/turf/open/space,/area/solar/derelict_aft) +"pA" = (/obj/structure/lattice/catwalk,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/open/space,/area/solar/derelict_aft) +"pB" = (/obj/machinery/power/tracker,/obj/structure/cable,/turf/open/floor/plasteel/airless,/area/solar/derelict_aft) +"pC" = (/turf/closed/wall/r_wall,/area/derelict/teleporter) +"pD" = (/turf/open/floor/plating/airless,/area/derelict/teleporter) +"pE" = (/turf/open/floor/plasteel/airless,/area/derelict/teleporter) +"pF" = (/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/derelict/teleporter) +"pG" = (/obj/machinery/light_construct/small{dir = 1},/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/derelict/teleporter) +"pH" = (/obj/machinery/computer/teleporter,/turf/open/floor/plasteel/airless,/area/derelict/teleporter) +"pI" = (/obj/machinery/teleport/station,/turf/open/floor/plasteel/airless,/area/derelict/teleporter) +"pJ" = (/obj/machinery/teleport/hub,/turf/open/floor/plasteel/airless,/area/derelict/teleporter) +"pK" = (/obj/machinery/light_construct/small{dir = 4},/turf/open/floor/plating/airless,/area/derelict/teleporter) +"pL" = (/obj/structure/table,/obj/item/weapon/stock_parts/cell{charge = 100; maxcharge = 15000},/turf/open/floor/plasteel/airless,/area/derelict/teleporter) +"pM" = (/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/derelict/teleporter) +"pN" = (/obj/machinery/power/apc{dir = 0; name = "Worn-out APC"; pixel_y = -24},/turf/open/floor/plasteel/airless,/area/derelict/teleporter) +"pO" = (/turf/closed/mineral/random,/area/space) +"pP" = (/turf/open/floor/plating/asteroid/airless,/area/space) +"pQ" = (/turf/closed/wall/mineral/clown,/area/space) +"pR" = (/obj/machinery/door/airlock/clown,/turf/open/floor/mineral/bananium/airless,/area/space) +"pS" = (/obj/effect/mob_spawn/human/clown,/turf/open/floor/mineral/bananium/airless,/area/space) +"pT" = (/turf/open/floor/mineral/bananium/airless,/area/space) +"pU" = (/obj/structure/closet/crate,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/turf/open/floor/mineral/bananium/airless,/area/space) +"pV" = (/obj/structure/closet/crate{icon_state = "crateopen"; opened = 1},/obj/item/weapon/ore/bananium,/turf/open/floor/mineral/bananium/airless,/area/space) +"pW" = (/obj/structure/closet/secure_closet{name = "clown locker"; req_access_txt = "46"},/obj/item/clothing/shoes/clown_shoes/banana_shoes,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/open/floor/mineral/bananium/airless,/area/space) +"pX" = (/obj/structure/shuttle/engine/heater{color = "#FFFF00"; dir = 4; icon_state = "heater"},/obj/structure/window/reinforced{color = "#FFFF00"; dir = 8},/turf/open/floor/plating/airless{color = "#FFFF00"},/area/space) +"pY" = (/obj/structure/shuttle/engine/propulsion{color = "#FFFF00"; dir = 8; icon_state = "propulsion_l"},/turf/open/space,/area/space) +"pZ" = (/obj/item/weapon/shard{icon_state = "small"},/turf/open/floor/plating/asteroid/airless,/area/space) +"qa" = (/obj/item/weapon/ore/bananium,/turf/open/floor/mineral/bananium/airless,/area/space) +"qb" = (/obj/item/weapon/shard{icon_state = "medium"},/obj/structure/chair{dir = 8},/turf/open/floor/plating/asteroid/airless,/area/space) +"qc" = (/obj/effect/mob_spawn/human/clown{name = "Clown Pilot"},/turf/open/floor/mineral/bananium/airless,/area/space) +"qd" = (/obj/item/weapon/paper{info = "The call has gone out! Our ancestral home has been rediscovered! Not a small patch of land, but a true clown nation, a true Clown Planet! We're on our way home at last!"},/turf/open/floor/mineral/bananium/airless,/area/space) +"qe" = (/obj/structure/grille{color = "#FFFF00"},/obj/structure/window/reinforced{color = "#FFFF00"},/obj/structure/window/reinforced{color = "#FFFF00"; dir = 4},/obj/structure/window/reinforced{color = "#FFFF00"; dir = 8},/turf/open/floor/plating/airless{color = "#FFFF00"},/area/space) +"qf" = (/obj/item/weapon/shard,/obj/structure/chair{dir = 8},/turf/open/floor/mineral/bananium/airless,/area/space) +"qg" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/mineral/bananium/airless,/area/space) +"qh" = (/obj/item/weapon/storage/bag/ore,/turf/open/floor/mineral/bananium/airless,/area/space) +"qi" = (/obj/item/weapon/pickaxe,/turf/open/floor/mineral/bananium/airless,/area/space) +"qj" = (/obj/structure/closet/crate,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/obj/item/weapon/ore/bananium,/turf/open/floor/mineral/bananium/airless,/area/space) +"qk" = (/obj/item/weapon/shovel,/turf/open/floor/mineral/bananium/airless,/area/space) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -878,121 +877,121 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacagahahaoahahagacacacac aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababafapaqarahasafabababababaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafatafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafafauavawaxayafafafafafafaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagazaAaAaAagawawawawawagkwaCaDaEagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaFaAaAaAaGawaHaIaHawaJaBaBaBaKagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaLaMaNaAagawaOaPaQawagaRaSaTaUagaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaVafafaWafawawawawaXafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaYaeafaZafafbaawbbbcafaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaYaeafbdbeafbfawbgawafaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeabababababaaboaaaeaeababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaYaaafafafafafafafbhafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabraaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabiaaaaaaaaaaaaaaafahafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsbybtaabtbtbtbrbtbtbtaabtbtbtaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbhafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaabzbzbAbDbBbBbBbGbEbEbEbDbEbEbJaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaebKbKbKaabKbKbKbLbKbKbKaabKbKbKaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaeaaaaaaaaaaaabMaaaaaaaaaaaaaeaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaeaaaaaaaaaaaabraaaaaaaaaaaaaeaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababbpbNbNbRbQbSbpababababaeabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakLaakLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabjbpbqbWbXbCbYbpabaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakLkLkLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabjcsbXbZcabIcbbpababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakLcccfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabjbubHcgbTbTcnbpbpabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakLcpkLkLkLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabjbncqbPbqbqbqbqbvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakLeFkLeOkLkLkLkLkLkLkLkLkLkLkLkLkLkLkLkLkLbjbjbjbjbjbjblbjbjbjbjbjbjblbjbjbjbjbjbjbnfwePbObObPbqbFgxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakLcpcphTeFcphUeykLkLkLeykLkLkLkLkLkLkLkLkLkLkLkLkLkLkLkLkLkLkLkLkLkLkLkLkLkLkLkLkLbnbpbpbpbpjabpbpgqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakLkLkLkLkLcpkLcpcpcpkLcpcpcpkLkLkLkLkLkLkLkrkrkrkrkrkrkrkrkrkrkrkrkrkrkrkrkrkrkrkrkrkrkrbpcjbHbqbpgqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakRkrkRcpkLcpkLcpkLcpkLcpkLkLkLeykLeykLkLkLkLkLkrkrkrkrkrkrkrkrkrkrkrkrkrkrkrkrkrkrkrbpbpkUbpbpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakRkrkRcpkLcpkLcpkLcpkLcpkLkLcpcplacplfldeFcpkLkrkrkrkrkrkrkrkrkrkrkrkrkrkrkrkrkrkrbpbplgcxlhbpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakRkrkRcpkLcpkLcpkLcpkLcpkLkLcpcpcpcpcpkLkLlpkLkrkrkrkrkrkrkrkrkrkrkrkrkrkrkrkrkrkrbpcjbqczclbpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakRkrkRcpkLcpkLcpkLcpkLcpkLkLidcpnbcpmIkLkLlckrkrkLkLkLkLkLkLkLkLkLkLkLkLkLkrkrkrkrbpeAbqcLcHbpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakRkrkRcpkLcpkLcpkLcpkLcpkLkLmIcpnpcpmIkLkLlckrkrkLkLlclclclblclcnamZlckLkLkrkrkrkrbpeQbqcxlhbpgqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakRkrkRcplfcpkLcplfcpkLcpldldcphTcplpeykLkLkXlclclckZlcnclblbndfcnclclikLkLkrkrkrkrbpbqbqbHbqbpgqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakRlekReykLkLkLeykLkLkLeycpkLcpkLkLeFkLkLkLqzkrkrkLkLlilincqwnhndnclilikLkLkrkrkrkrbpbqbqbHbxbpbpbpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakRlekRkLkLkLkLkLkLkLkLkLkLkLqxkLgXhThqkLkLkrkrkrkLkLnkljhBncnalbnllilckLkLkrkrkrkrbpbqbqbHbqbqbqnmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakRieaeaeaaaaaaaaaaaaaaaakLkLkLkLkLkLkLkLkLkrkrkrkLkLqzlmnqlilblilclilckLkLkrkrkrkrbpeQbqbHbqbpbpbpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakRaaaaaeaeaaaaaaaabjabababaebjaaaaaaaaaakLkLkLkLkLkLkLnrnsnsnsnsntkLkLkLkLkrkrkrkrbpbqbqbHbqbpgqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaeaebwbwbwaeaaaaaaaaaaaaaaaaaaaaaaaaaaaablaaaaaanwkrkrkrkrkrkrkrkrbpbqbqbVbPbpgqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaablaaaaaanwkrkrkrkrkrkrkrkrbpeQbqbqbHbpbwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaecdcdcdcdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaablaaaaaanwkrkrkrkrkrkrkrkrbpbpbqnxbHbpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaacvcQcPcQixcdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaablaaaaaanycecececececececececececenzceaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaedelqdAdedeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanychchcijpckjwcenAlrjzcechcmceaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaedelylxdelAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanBcocodKcoegnDcechchchcecenzceaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacddAlClClDcQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacechchchchcmctcemqchmrcechcmceaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaacdlClClClCdeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacecwcwcwcyezcececwmscwcecenEceaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeblaaaacdmllnmmmpmocdaeaablaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaacechchchchcmcececuchchchchcmceaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaebljKaeaecdlolwlvlwkscdaeaecCblaeaeaeaaaaaaaaaaaaaacDcDblblblcecEchfecoftnNnMcococococonOceabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaecIcIcIcImnlCmtlCkOcIcIcIcIaeaeaeaeaeaaaaaaaaaaaaaalscDblblcecJcKnScJcJcecececececececececMbwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaecIcIcIcIcNcIcOcdmzcdmAcIcIcIcIcIcIaeaeaaaaaaaaaacDaaluaablblblcechchcmchchcScTcUlzcWcXcYlzcZdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacIcIcIdbdclYmCmBmEmDmycddfdbdddbcIcIcIaeaaaaaaaaaaaaaacDaaaaaaaacecEchcFchchcSdhdidjdididididkdlabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacIcIdmdnmudododbdpmmmxmGmFdqdbdbdbdrdscIblaaaaaaaaaaaaaaaaaaaaaaaacecJcKdtcJcJdudidinUnVdididjdidvdwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacIcIdxdxdxdxdydfdzcIcImHcIdfdBdddBdBdfcIblaaaaaaaaaaaaaaaaaaaaaaaacechcudCchchdDdididididEdididFdGabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacIcIdfdBdBdBdHdcdbdIdBdfdBdBdbdcdcdBdBcIblaaaaaaaaaaaaaaaaaaaaaaaecechchdJdKdLdMdNdNdOdPdjdidididvabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaecIcIdBdcdddbdQdbdddbdfdfdBdbdbdbdbdddbcIblaaaaaaaaaaaaaaaaaaaaaeaecechchdCchchdRcVnJdidSdTdidTdUdVbjdWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaecIcIdbdddbdXdYdZeadfebdfdfecedeedBdcddcIblaeaaaaaaaaaacDaaaaaeaeaececececmcechcSefcVeheiejcTcTnJnLdwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaecIcIdBdbdXekelemdfdfdfdfdfeneneoeedbdccIblaeaeaablcecececececececececechcmcececeeqeqereqeqeqcMcMcMabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaecIcIcIdBdBesetdcdfdfdfdfdfdfdfdfeuevdBewcIblblaeaeblcekMgRexqAgWnPeBcecechcmcenWnWblaebjbjaableDbjbwabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacIcIcIcIcIdBdBesekdcdfdfdfdfdfdfdfdfeEevdfdBcIcIcIcIcIaacenXexexexexexexcecechcmcenWnWaeaaaaaaaaaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaecIcIdBeKeLdBdBeMeNdfeaaaaaaaaaaadfdfeEdydfdBdbdBdfcIcIaeceexexexexexexexcececeepcececeaeaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacIcInQdbeEeedBdcdBnYdfdfaaaaaaaaaadfdfeRnYdBeSeTeUdbdBcIcIceceeVceeWeWeWeWceexexeCexexcecDaaaaaaaaaaaaaaaabjbjblbwbjbwbjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacIcIdqddeYevdcdcdcdddfdfaaaaaaaaaadfdfeZdfdBfafbeUdbnRcIcIfdhpimimilililileHeGeGeIexeJceaeaeaaaaaaaaaaaaaabjbjblbwbjeDbjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacIcIdBdBeYevdBddeafhdfdfaaaaaaaaaadfdfdffidfdBdbfjdddBfkfkfdflfmfffgfgfgcRcekVexeCexexceaaaaaaaaaaaaaabjbjbjbkblbwbjbwbjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaecIcIdBfodydbdcfpoadfdfaaaaaaaaaadfdfobfqdBdBeceNdBcIfkfrfshpfufffgfvfgcRceexexeXexexceaaaaaaaaaaaabjbjbjbjfxblbwfybwbjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaecIcIcIcIcIdBdBesdfdfdbdfdfdfdfdfdfdfdffzdcdccIcIcIcIfkflfdfdfdfAfdfdfdfdfdfdfdcecececeaaaabjbjbwbjbjfynTfBbkblbwbkeDbjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaecIcIcIdbfCfDdfdbdddfdfdfdcdbdfdffEfzdddBcIcIcIaeaeflfdfffFfFfdfgfGfHfdjZfFceceaaaeaebjbjfxbwbjblbkfxfyfIblbwnZbwbjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaecIcIdddcfJdfdfdbfKdbdcdddodpdofKfLdcdccIcIaaaafrhtfdfffFfffffgfgfgfdfdaaaeaebjaaaabjbkbkbwbjfNfNfNfNfNfNfOfOfObjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafYfYfYfYfYfYfYfYfYfYfYfYfYaaaaaaaaaaaaaaaaaaaaaaaadgdfdgaeaefDecevdBdBdBfPdxdxdydbdbdBcIcIaafFfMfmfdfgfgfgfffQfgfdfdfdaegcbwbwbwgcfOfOfOfOfOfOfSfTfUfVfUfWfXfOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafYgigigigiggggggggggghgifYaaaaaaaaaaaaaaaaaaaafZaadfdfgaaeaedfgbdBdbdbfadBdBdbdcdddBdBcIcIaafFfFfmfdfdfdfgfdfdfdfdfdfdbwfxbjbjfxfxgdgdgegegffOodfSodfUfUfXfUfOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafYfYfYgigKggggggfYfYgEfYfYfYfYfYgjgkgkgkgjglgmgngogjgpaegqaedBdBdbdcdcdcdbdBdBdbdccIcIcIcIaaflfmfffdfgfufffufdfufugrfubjfxfxfxbjfxgegdgfgfgegsfUfUfUfUfUfUfUfOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagqfYiPfYfYfYfYfYgPfYgQggghggggggfYgtgtgtgugtolocgngnoeaeaeaeaecIcIdBgydddbdBcIcIcIcIcIcIaeaefFgzfmfffgfgfffFfufugrfufFfFbwbwgcgcgcgcfNfNfNfNfNfNfUfUgDfUfUfUfUfOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaofomgYgZgYoggYgZgYfYgQgggQgggQggfYgFgtgtgtgtgGgvgwgnohgngnaeaecIcIcIcIdfcIcIcIcIcIcIaeaabjfdhtfmfffffdfgfffffFfkfkfkfkfkaeaeaeaaaaaagHfygHbjcBfNfSfSfUfSgIfUgJfOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaofhgojoiokhihhhihhfYgQgggQgggQgggEgtgtgtgtgtgtgvonotgngngnaaaeaecIcIgLhuoDcIcIaeaeaeaaaabjfdfmfmhvfffdfdfdfdfufkfIfxfIgMaaaeaaaaaaaaaaaagHaegMfNgNgNfUgNgOfUfUfOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahooooGhrhshrgZgYgZgYfYgQopgQoqgQggfYorgtgtgtgtoHosgvgwgngngnaaaaaeaecIcIcIcIcIaeaeaaaagSgSgTfdffgUfffgfdfgfufffufkfxgMfxfxaaaeaaaacDaaaaaaaagMaefNfUfUfUfUgVfSodfOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoubUhKhKhKhLhihhhihhfYgQgggQgggQgggEgtgtgtgtgthagthbgvhcgwgngnhdgjgjgjgjovheaeaaaeaahfaaaabjfdfdhvfffdfdfFfgfFfufkfxgHaaaaaaaeaaaaaaaaaaaaaaaafIfNfOfUfUfOfOfOfOfOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaicowoIifigifgZoxoggYfYgQgggggggKggfYgtgtgtgtgthjgthkgtgvgvgwgngnhlgnhlgSbjbjbjaaaeaeaeaeaaoyfdfghmfgfgfdfgfgfgfgfkgMfxaaaaaaaeaaaaaaaaaaaaaaaafNfNfNfUfUfOhnhnhnfOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaofhghhhiozhihhhihhfYfYfYfYfYfYfYfYgFgtgtgthxhzhwhyhwhygvgwhAoKgjoLgjfIbjbjbjhChDbjbjbjhEhFfdfghGfgfgfdfgoAfghHfkfkfkbjaeaebjaebjaeaeaebjaeaebjbjfNfUfUfUfUfUhIfOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaofomgYgZiEgZgYgZgYhMhNhNhNhOhNhJfYorgtgtgthRoBhSoCgtgjhPoEgjgjgjgjgjgthFfIfyhVbjfybjbjfIhFfdfghGfghHfdfgfgfgfFfgfgfkfdhWhWbwhWaaaaaaaaaeaaaaaaaefNhYfUfUfUfUhZfOiaibaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagqoFoFoFoFoFoFoFoFoFoFoFoFfYfYhQfYfdfdfdfdfdfdfdfdfdfdiiijfdfdfdfdfdfdfdfdfdfdfyhFhFhFfyoyfdfgikilililililimilililinilihioihhWhWhWbwbwirbwbwbwgcfNfOfUfUfUfUfUisgDisaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaablfIbjaeaaaaaaaeaelukWoFfdoRipjAfgfgitfgoRfgfgfdoJfghGfgfgfgfdfgfgfgfgfgfdfdfdfdfdfdfdfdfdfghGfgfgfdfgfffgfgfFfgfkfdhWbwiubjivfnoSiyfRivihiviviAiBiCiDgDfUfUfOiaibaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaablfBluaaaaaaaaaaaebjfIoMfgfFfFiGoNfgfgfgfgoOfgfdiFfghGfgfghHfdiFoNfgoOfgfdfdfdfdfgfgfgfgfgfghGfgfgfdfgoOfffffgiIfkeDaeaahWhWhWbjeDbwaahWhWhWhWfNfOfUiNfUfUiOfOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaebjaaaaaaaaaaaabjaebjoFfdhtffiZiHjhjhjhjhjhjhjOjhjhjTfgfgfgfdfgfgfgfgfgfgfgitfgiRilililililjUjVfkfkfkfgfgfgfgfgfkeDaeaaaaaaaaaaaaaaaaaaaaaaaagAfOfUfOfUfUiUfOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabloFfdfffFfdfdfdfgfdfdfdiVfdfgfgiWilililiXililiYililililililiSfgfgfgfgfgfghGfkoQfkfkiTfffdoPbwaeaaaaaaaaaaaaaaaaaaaaaaaahWjtfOfUfOfOfOfOfOfNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdfFfmfdjditfgfdjditfgfdjejejejfiVjgfdiFfghGfgfgfgfgfgfgfgfkfkfkfkfkfkjWfkphoVfkfdfdfdaaaaaaaaaaaaaaaajiaaaaaeaaaeaefOgDjkfUfUhIjkfUfNfNabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaefffdoToNjmfdoToNoTfdjnpnpnfgfgfgfdfgfgjofgfgfgfgfgfgfgfkbkbkoUbkbkkabkbkblblbwbwbwfyaaaadWaaaaaaaaaaaaaejsjsaeaefOjtfUfUgDfUfUfUfUfNabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaefdfdfdfdfdfdfdfdfdfgpppojufgfgfdfdfdfdfdfdfdfdfdjvfdfkbjbjbjbjbkjqkdbkbloUbkprbwbjaeaaaeaeaeaaaaaaaeaeaeaaaeaahWjyfUfUfUfUgDfUoZfNabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaefFfFfFpboJjApdjAfdfgpzpwjljufgfdpgoXmvoXmwpApAoWoXoWoYaaaaaedwbjbkjBjCjDbkbkjEbwaebwaeaecDaeaeaeaeaeaaaeaaaaaahWjyjtfUfUfUfUfUfUfNabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaefFfFjAjGfgjHfdiFpBjIjlfghHfdpamSoXmWpEpDpHoWpcoWoYaaaeaeaeaebjjrbkjJbkjEjEbwaeaaaaaaaaaeaeaeaaaeaaaaaeaaaahWjyfUfUfUfUfUfUpefNabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaefFfFfFjAfgfdfgfgjljlfgfgfdmYmXnemWqgoXpgoWpgoWoYaaaeaaaaaabjkdbkjLbkjEjEbwaeaeaaaaaeaeaaaaaaaaaaaaaaaaaaaajMjNjMiaiaiaiaiafNabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafFfFfFfdfgfgjujufgfgfdoXpgoXnfnfpgpgoWpcoWoYaaaeaeaejsbjbjbkpibkbkbkjPjQjRblblaeaaaaaaaaaaaaaaaaaaaaaajSgDhVbjbjbjbjaablabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaefFiQqyfgfgfgfgfgfdngoXoXoXpgoXpkoWpcoWoYblblblblaaaaihblblblblbljRgCjRaabjaaaaaaaaaaaaaaaadWaaaaaajXjNjYbwaaaabwaablabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaefdfdfdfdfdfdiVfdjZnioXoXoXoXnjnnpxpxnopqaaaeaaaeaaaaaaaebjbkbkbkjRkpjRaabwaaaaaaaaaaaaaaaaaaaaaaaakbaaaaaaaaaaabbjblabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaafFfFgrfffgjHfdpsnuoXoXoXpgptoXoXpqpuaeaefIblcDaaaaaebjihbjkdkqktkeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaablabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaaaafFfmpvfgfgfdnvpgoXoXoXpgoXoXpxnCpqaeaeaepfaeaeaeaeaabjbjbkjRkfkeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbjblabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaafFkgfFffpyfgfdnGnFpgoXpgoXoXoXpxnCoWaaaaaeaeaaaaaaaeaaaabjbkjRkfkeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaablabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaeaafFfFfFfgfgfmfdoXpgoXoXnHpgoXoXnCnjoWfIaaaeblblaaaaaeaeaeblbljRkfkeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbjblabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaeaeaefdfFfdfdfdfdpgoXpgoXnCnHoXnonHnjpqfIluaebjbjaaaaaeaaaaaabjjPkfkeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaablabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaafFfFfFfffmfgfdoXnInfoXoXoXqBoXnjpqpuaaaaaebwaaaaaaaeaaaabjbkjPkfkeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabjabbjblabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaaaaaepvfFpjfffdoWoWpgnCoXpgoXoXoWoWpuaeaebwbwaeaeaeaebjbjbkbkjPkfjRjPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaablabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaafFfFfFfmfgfdpGpGoWnKnCnCoXoXoWpGpGaaaaaabwaaaaaabjbkbkbkbkjPkfkhkijPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaebwjPjQjPjPjPjPkjjPjPoWjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPjPkkkhkhkhklaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaekmkhkhkhknpIkhkhkhpJkxpKpMpLpOpNpQpPpRkxkxkxkxkxkxkxkxkxkxkxpSkxkykmkhkhkeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaekmkmkmkhkhkhkhkhkhkhkhkzkAkBkCkDkEkFkGkhkhkhkhkhkhkhkhkhkhkhkfkhpTkhkhkhkeaaaaaaaaaakbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaekHkIkJkJkJjPkJkJkJkJkJjPkJkJkJkJkJjPkJkJkJkJkJjPkJkJkJkJjPkfkmkmkhkhkhkKhohohoaaaaaahfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabjababababababababababbwabababababdwdwdwabababblababababpUpVpUkmkhkhkmkNplgCgCkmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaablaaaaaaaapUpWpUkSkSjRkTjRkTjRicicicaaaaaakbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabmbjbjpUpYpXpZpUqaqajRkYjRkYjRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaebjpUqbpUqdqcqekujRkYjRkYjRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaebjbjpUkvqfqdqhqiqejRkYjRkYjRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaejsbjfIpUqjpUqkqeqmqljRlkjRkYjRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaebjfIllqnqpqoqeqqqrqejRkYjRkYjRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaebjbkbkpUqdpUqeqeqfqsjRkYjRlkjRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaablblblaapUpUqtpUpUpUpUpUjRkYjRlkjRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaemJaeaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaamKaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaltltltaamLaaltcrcAaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaamNmMmMmOmPmOmRmQcDaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaalBlBlBaamLaalBcGaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaquaaaaaacDaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaltltltaamLaaltltltaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaequqvmMmTmPmTmRmRmUaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaalBlBlBaamLaalBlBlBaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaamVaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagazaAaAaAagawawawawawagaBaCaDaEagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaFaAaAaAaGawaHaIaHawaJaKaKaKaLagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaMaNaOaAagawaPaQaRawagaSaTaUaVagaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaWafafaXafawawawawaYafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZaeafbaafafbbawbcbdafaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaZaeafbebfafbgawbhawafaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeabababababaabiaaaeaeababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZaaafafafafafafafbjafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaablaaaaaaaaaaaaaaafahafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabmbnboaabobobobkboboboaaboboboaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbjafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaabpbpbqbrbsbsbsbtbubububrbububvaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaebwbwbwaabwbwbwbxbwbwbwaabwbwbwaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaeaaaaaaaaaaaabyaaaaaaaaaaaaaeaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaeaaaaaaaaaaaabkaaaaaaaaaaaaaeaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababbzbAbAbBbCbDbzababababaeabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabEaabEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFbzbGbHbIbJbKbzabaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabEbEbEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFbLbIbMbNbObPbzababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabEbQbRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFbSbTbUbVbVbWbzbzabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabEbXbEbEbEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFbYbZcabGbGbGbGcbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabEccbEcdbEbEbEbEbEbEbEbEbEbEbEbEbEbEbEbEbEbFbFbFbFbFbFcebFbFbFbFbFbFcebFbFbFbFbFbFbYcfcgchchcabGcicjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabEbXbXckccbXclcmbEbEbEcmbEbEbEbEbEbEbEbEbEbEbEbEbEbEbEbEbEbEbEbEbEbEbEbEbEbEbEbEbEbYbzbzbzbzcnbzbzcoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabEbEbEbEbEbXbEbXbXbXbEbXbXbXbEbEbEbEbEbEbEcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpbzcqbTbGbzcoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrcpcrbXbEbXbEbXbEbXbEbXbEbEbEcmbEcmbEbEbEbEbEcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpbzbzcsbzbzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrcpcrbXbEbXbEbXbEbXbEbXbEbEbXbXctbXcucvccbXbEcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpbzbzcwcxcybzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrcpcrbXbEbXbEbXbEbXbEbXbEbEbXbXbXbXbXbEbEczbEcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpcpbzcqbGcAcBbzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrcpcrbXbEbXbEbXbEbXbEbXbEbEcCbXcDbXcEbEbEcFcpcpbEbEbEbEbEbEbEbEbEbEbEbEbEcpcpcpcpbzcGbGcHcIbzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrcpcrbXbEbXbEbXbEbXbEbXbEbEcEbXcJbXcEbEbEcFcpcpbEbEcFcFcFcKcFcFcLcMcFbEbEcpcpcpcpbzcNbGcxcybzcoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrcpcrbXcubXbEbXcubXbEbXcvcvbXckbXczcmbEbEcOcFcFcFcPcFcQcKcKcRcScQcFcTbEbEcpcpcpcpbzbGbGbTbGbzcoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrcUcrcmbEbEbEcmbEbEbEcmbXbEbXbEbEccbEbEbEcVcpcpbEbEcTcTcQcWcXcRcQcTcTbEbEcpcpcpcpbzbGbGbTcYbzbzbzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrcUcrbEbEbEbEbEbEbEbEbEbEbEcZbEdackdbbEbEcpcpcpbEbEdcdddecQcLcKdfcTcFbEbEcpcpcpcpbzbGbGbTbGbGbGdgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrdhaeaeaaaaaaaaaaaaaaaabEbEbEbEbEbEbEbEbEcpcpcpbEbEcVdidjcTcKcTcFcTcFbEbEcpcpcpcpbzcNbGbTbGbzbzbzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacraaaaaeaeaaaaaaaabFabababaebFaaaaaaaaaabEbEbEbEbEbEbEdkdldldldldmbEbEbEbEcpcpcpcpbzbGbGbTbGbzcoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaeaedndndnaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaceaaaaaadocpcpcpcpcpcpcpcpbzbGbGdpcabzcoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceaaaaaadocpcpcpcpcpcpcpcpbzcNbGbGbTbzdnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaedqdqdqdqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceaaaaaadocpcpcpcpcpcpcpcpbzbzbGdrbTbzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaadsdtdudtdvdqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceaaaaaadwdxdxdxdxdxdxdxdxdxdxdxdxdydxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaedzdAdBdzdzaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadwdCdCdDdEdFdGdxdHdIdJdxdCdKdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaedzdLdMdzdNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadOdPdPdQdPdRdSdxdCdCdCdxdxdydxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqdBdTdTdUdtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdCdCdCdCdKdVdxdWdCdXdxdCdKdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaadqdTdTdTdTdzaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdYdYdYdZeadxdxdYebdYdxdxecdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeceaaaadqedeeefegehdqaeaaceaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaadxdCdCdCdCdKdxdxeidCdCdCdCdKdxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeceejaeaedqekelemelendqaeaeeoceaeaeaeaaaaaaaaaaaaaaepepcececedxeqdCerdPeseteudPdPdPdPdPevdxabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeewewewewexdTeydTezewewewewaeaeaeaeaeaaaaaaaaaaaaaaeAepcecedxeBeCeDeBeBdxdxdxdxdxdxdxdxdxeEdnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeeweweweweFeweGdqeHdqeIewewewewewewaeaeaaaaaaaaaaepaaeJaacececedxdCdCdKdCdCeKeLeMeNeOePeQeNeReSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeweweweTeUeVeWeXeYeZfadqfbeTfceTewewewaeaaaaaaaaaaaaaaepaaaaaaaadxeqdCfddCdCeKfefffgfffffffffhfiabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaewewfjfkflfmfmeTfneffofpfqfreTeTeTfsftewceaaaaaaaaaaaaaaaaaaaaaaaadxeBeCfueBeBfvfffffwfxfffffgfffyfzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaewewfAfAfAfAfBfbfCewewfDewfbfEfcfEfEfbewceaaaaaaaaaaaaaaaaaaaaaaaadxdCeifFdCdCfGfffffffffHfffffIfJabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaewewfbfEfEfEfKeUeTfLfEfbfEfEeTeUeUfEfEewceaaaaaaaaaaaaaaaaaaaaaaaedxdCdCfMdQfNfOfPfPfQfRfgfffffffyabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeewewfEeUfceTfSeTfceTfbfbfEeTeTeTeTfceTewceaaaaaaaaaaaaaaaaaaaaaeaedxdCdCfFdCdCfTfUfVfffWfXfffXfYfZbFgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeeweweTfceTgbgcgdgefbgffbfbggghgifEeUfcewceaeaaaaaaaaaaepaaaaaeaeaedxdxdxdKdxdCeKgjfUgkglgmeLeLfVgnfzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeewewfEeTgbgogpgqfbfbfbfbfbgrgrgsgieTeUewceaeaeaacedxdxdxdxdxdxdxdxdxdxdCdKdxdxdxgtgtgugtgtgteEeEeEabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeewewewfEfEgvgweUfbfbfbfbfbfbfbfbgxgyfEgzewceceaeaecedxgAgBgCgDgEgFgGdxdxdCdKdxgHgHceaebFbFaacegIbFdnabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaewewewewewfEfEgvgoeUfbfbfbfbfbfbfbfbgJgyfbfEewewewewewaadxgKgCgCgCgCgCgCdxdxdCdKdxgHgHaeaaaaaaaaaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeewewfEgLgMfEfEgNgOfbgeaaaaaaaaaafbfbgJfBfbfEeTfEfbewewaedxgCgCgCgCgCgCgCdxdxdxgPdxdxdxaeaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaewewgQeTgJgifEeUfEgRfbfbaaaaaaaaaafbfbgSgRfEgTgUgVeTfEewewdxdxgWdxgXgXgXgXdxgCgCgYgCgCdxepaaaaaaaaaaaaaaaabFbFcednbFdnbFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaewewfrfcgZgyeUeUeUfcfbfbaaaaaaaaaafbfbhafbfEhbhcgVeThdewewhehfhghghhhhhhhhhihjhjhkgChldxaeaeaaaaaaaaaaaaaabFbFcednbFgIbFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaewewfEfEgZgyfEfcgehmfbfbaaaaaaaaaafbfbfbhnfbfEeThofcfEhphphehqhrhshthththudxhvgCgYgCgCdxaaaaaaaaaaaaaabFbFbFhwcednbFdnbFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeewewfEhxfBeTeUhyhzfbfbaaaaaaaaaafbfbhAhBfEfEgggOfEewhphChDhfhEhshthFhthudxgCgChGgCgCdxaaaaaaaaaaaabFbFbFbFhHcednhIdnbFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeewewewewewfEfEgvfbfbeTfbfbfbfbfbfbfbfbhJeUeUewewewewhphqhehehehKhehehehehehehedxdxdxdxaaaabFbFdnbFbFhIhLhMhwcednhwgIbFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeeweweweThNhOfbeTfcfbfbfbeUeTfbfbhPhJfcfEewewewaeaehqhehshQhQhehthRhShehThQdxdxaaaeaebFbFhHdnbFcehwhHhIhUcednhVdnbFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeewewfceUhWfbfbeThXeTeUfcfmfnfmhXhYeUeUewewaaaahChZhehshQhshshthththeheaaaeaebFaaaabFhwhwdnbFiaiaiaiaiaiaibibibbFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaicicicicicicicicicicicicicaaaaaaaaaaaaaaaaaaaaaaaaidfbidaeaehOgggyfEfEfEiefAfAfBeTeTfEewewaahQifhrhehthththsightheheheaeihdndndnihibibibibibibiiijikilikiminibaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaicioioioioipipipipipiqioicaaaaaaaaaaaaaaaaaaaairaafbfbisaeaefbitfEeTeThbfEfEeTeUfcfEfEewewaahQhQhrhehehehthehehehehehednhHbFbFhHhHiuiuiviviwibixiiixikikinikibaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaicicicioiyipipipiciciziciciciciciAiBiBiBiAiCiDiEiFiAiGaecoaefEfEeTeUeUeUeTfEfEeTeUewewewewaahqhrhshehthEhshEhehEhEiHhEbFhHhHhHbFhHiviuiwiwiviIikikikikikikikibaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacoiciJiciciciciciKiciLipiqipipipiciMiMiMiNiMiOiPiEiEiQaeaeaeaeewewfEiRfceTfEewewewewewewaeaehQiShrhshththshQhEhEiHhEhQhQdndnihihihihiaiaiaiaiaiaikikiTikikikikibaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiUiViWiXiWiYiWiXiWiciLipiLipiLipiciZiMiMiMiMjajbjciEjdiEiEaeaeewewewewfbewewewewewewaeaabFhehZhrhshshehthshshQhphphphphpaeaeaeaaaaaajehIjebFjfiaiiiiikiijgikjhibaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiUjijjjkjljmjnjmjniciLipiLipiLipiziMiMiMiMiMiMjbjojpiEiEiEaaaeaeewewjqjrjsewewaeaeaeaaaabFhehrhrjthshehehehehEhphUhHhUjuaaaeaaaaaaaaaaaajeaejuiajvjvikjvjwikikibaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajxjyjzjAjBjAiXiWiXiWiciLjCiLjDiLipicjEiMiMiMiMjFjGjbjciEiEiEaaaaaeaeewewewewewaeaeaaaajHjHjIhehsjJhshthehthEhshEhphHjuhHhHaaaeaaaaepaaaaaaaajuaeiaikikikikjKiiixibaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajLjMjNjNjNjOjmjnjmjniciLipiLipiLipiziMiMiMiMiMjPiMjQjbjRjciEiEjSiAiAiAiAjTjUaeaaaeaajVaaaabFhehejthshehehQhthQhEhphHjeaaaaaaaeaaaaaaaaaaaaaaaahUiaibikikibibibibibaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajWjXjYjZkajZiXkbiYiWiciLipipipiyipiciMiMiMiMiMkciMkdiMjbjbjciEiEkeiEkejHbFbFbFaaaeaeaeaeaakfhehtkghththehththththpjuhHaaaaaaaeaaaaaaaaaaaaaaaaiaiaiaikikibkhkhkhibaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiUjijnjmkijmjnjmjniciciciciciciciciZiMiMiMkjkkklkmklkmjbjcknkoiAkpiAhUbFbFbFkqkrbFbFbFkskthehtkuhththehtkvhtkwhphphpbFaeaebFaebFaeaeaebFaeaebFbFiaikikikikikkxibaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiUiViWiXkyiXiWiXiWkzkAkAkAkBkAkCicjEiMiMiMkDkEkFkGiMiAkHkIiAiAiAiAiAiMkthUhIkJbFhIbFbFhUkthehtkuhtkwhehthththQhththphekKkKdnkKaaaaaaaaaeaaaaaaaeiakLikikikikkMibkNkOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacokPkPkPkPkPkPkPkPkPkPkPkPicickQichehehehehehehehehehekRkShehehehehehehehehehehIktktkthIkfhehtkThhhhhhhhhhhghhhhhhkUhhkVkWkVkKkKkKdndnkXdndndnihiaibikikikikikkYiTkYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacehUbFaeaaaaaaaeaeeJkZkPhelalblchthtldhtlahththelehtkuhthththehthththththehehehehehehehehehtkuhththehthshththQhthphekKdnlfbFlglhliljlklgkVlglglllmlnloiTikikibkNkOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacehMeJaaaaaaaaaaaebFhUlphthQhQlqlrhthththtlshthelthtkuhthtkwheltlrhtlshthehehehehthththththtkuhththehtlshshshtluhpgIaeaakKkKkKbFgIdnaakKkKkKkKiaibiklvikiklwibaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaebFaaaaaaaaaaaabFaebFkPhehZhslxlylzlzlzlzlzlzlAlzlzlBhthththehththththththtldhtlChhhhhhhhhhlDlEhphphphthththththpgIaeaaaaaaaaaaaaaaaaaaaaaaaalFibikibikiklGibaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacekPhehshQhehehehthehehelHhehthtlIhhhhhhlJhhhhlKhhhhhhhhhhhhlLhthththththtkuhplMhphplNhshelOdnaeaaaaaaaaaaaaaaaaaaaaaaaakKlPibikibibibibibiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahehQhrhelQldhthelQldhthelRlRlRlSlHlThelthtkuhthththththththphphphphphplUhplVlWhpheheheaaaaaaaaaaaaaaaalXaaaaaeaaaeaeibiTlYikikkxlYikiaiaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaehshelZlrmahelZlrlZhembmcmchthththehthtmdhthththththththphwhwmehwhwmfhwhwcecedndndnhIaaaagaaaaaaaaaaaaaaemgmgaeaeiblPikikiTikikikikiaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaehehehehehehehehehehtmhmimjhththehehehehehehehehemkhehpbFbFbFbFhwmlmmhwcemehwmndnbFaeaaaeaeaeaaaaaaaeaeaeaaaeaakKmoikikikikiTikmpiaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaehQhQhQmqlelcmrlchehtmsmtmumjhthemvmwmxmwmymzmzmAmwmAmBaaaaaefzbFhwmCmDmEhwhwmFdnaednaeaeepaeaeaeaeaeaaaeaaaaaakKmolPikikikikikikiaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaehQhQlcmGhtmHheltmImJmuhtkwhemKmLmwmMmNmOmPmAmQmAmBaaaeaeaeaebFmRhwmShwmFmFdnaeaaaaaaaaaeaeaeaaaeaaaaaeaaaakKmoikikikikikikmTiaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaehQhQhQlchthehthtmumuhththemUmVmWmMmXmwmvmAmvmAmBaaaeaaaaaabFmmhwmYhwmFmFdnaeaeaaaaaeaeaaaaaaaaaaaaaaaaaaaamZnamZkNkNkNkNkNiaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahQhQhQhehthtmjmjhththemwmvmwnbnbmvmvmAmQmAmBaaaeaeaemgbFbFhwnchwhwhwndnenfceceaeaaaaaaaaaaaaaaaaaaaaaangiTkJbFbFbFbFaaceabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaehQnhnihthththththenjmwmwmwmvmwnkmAmQmAmBcecececeaaaakVcececececenfnlnfaabFaaaaaaaaaaaaaaaagaaaaaaanmnanndnaaaadnaaceabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaehehehehehehelHhehTnomwmwmwmwnpnqnrnrnsntaaaeaaaeaaaaaaaebFhwhwhwnfnunfaadnaaaaaaaaaaaaaaaaaaaaaaaanvaaaaaaaaaaabbFceabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaahQhQiHhshtmHhenwnxmwmwmwmvnymwmwntnzaeaehUceepaaaaaebFkVbFmmnAnBnCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaceabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaaaahQhrnDhththenEmvmwmwmwmvmwmwnrnFntaeaeaenGaeaeaeaeaabFbFhwnfnHnCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbFceabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaahQnIhQhsnJhthenKnLmvmwmvmwmwmwnrnFmAaaaaaeaeaaaaaaaeaaaabFhwnfnHnCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaceabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaeaahQhQhQhththrhemwmvmwmwnMmvmwmwnFnpmAhUaaaececeaaaaaeaeaececenfnHnCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbFceabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaeaeaehehQhehehehemvmwmvmwnFnMmwnsnMnpnthUeJaebFbFaaaaaeaaaaaabFndnHnCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaceabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaahQhQhQhshrhthemwnNnbmwmwmwnOmwnpntnzaaaaaednaaaaaaaeaaaabFhwndnHnCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFabbFceabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaaaaaenDhQnPhshemAmAmvnFmwmvmwmwmAmAnzaeaedndnaeaeaeaebFbFhwhwndnHnfndaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaceabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaahQhQhQhrhthenQnQmAnRnFnFmwmwmAnQnQaaaaaadnaaaaaabFhwhwhwhwndnHnSnTndaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaednndnendndndndnUndndmAndndndndndndndndndndndndndndndndndndndndndndnVnSnSnSnWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaenXnSnSnSnYnZnSnSnSoaobocodoeofogohoiojobobobobobobobobobobobokobolnXnSnSnCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaenXnXnXnSnSnSnSnSnSnSnSomonooopoqorosotnSnSnSnSnSnSnSnSnSnSnSnHnSounSnSnSnCaaaaaaaaaanvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeovowoxoxoxndoxoxoxoxoxndoxoxoxoxoxndoxoxoxoxoxndoxoxoxoxndnHnXnXnSnSnSoyjxjxjxaaaaaajVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFababababababababababdnabababababfzfzfzabababceababababozoAoznXnSnSnXoBoCnlnlnXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceaaaaaaaaozoDozoEoEnfoFnfoFnfjWjWjWaaaaaanvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoGbFbFozoHoIoJozoKoKnfoLnfoLnfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaebFozoMozoNoOoPoQnfoLnfoLnfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaebFbFozoSoToNoUoVoPnfoLnfoLnfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaemgbFhUozoWozoXoPoYoZnfpanfoLnfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaebFhUpbpcpdpeoPpfpgoPnfoLnfoLnfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaebFhwhwozoNozoPoPoTphnfoLnfpanfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacececeaaozozpiozozozozoznfoLnfpanfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaepjaeaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaapkaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaplplplaapmaaplpnpoaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaapppqpqprpsprptpuepaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaapvpvpvaapmaapvpwaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaapxaaaaaaepaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaplplplaapmaaplplplaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaepxpypqpzpspzptptpAaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaapvpvpvaapmaapvpvpvaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaapBaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaeababaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -1003,14 +1002,14 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaaaeaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaebjbjbjbjaeaeaeaeaeaeaaaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaelElElElFlElElEbjbjbjaeaaaaaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalElElFlFlGlHlGlFlFaeaeaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalElIlGlGlGlGlGlGlEaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalElGlGlJlKlLlGlMlEaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalElNlOlFlGlGlGlHlEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalElElGlPlGlGlFlElEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalElElElElElFlFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaeaeaeaebFbFbFbFaeaeaeaeaeaeaaaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeaepCpCpCpDpCpCpCbFbFbFaeaaaaaeaeaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapCpCpDpDpEpFpEpDpDaeaeaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapCpGpEpEpEpEpEpEpCaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapCpEpEpHpIpJpEpKpCaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapCpLpMpDpEpEpEpFpCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapCpCpEpNpEpEpDpCpCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapCpCpCpCpCpDpDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -1052,23 +1051,23 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQlQaaaaaaaalRlRlRlRlRlRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQlQlQlQaaaalQlQlQlQlQlRlRlQlQlQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQlQlQlQlQlQlQlQlQlQlQlRlRlQlQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQlQlQlQlQlQlQlQlQlQlQlQlQlQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQlQlQlQlQlQlQlQlQlQlQlQlRlRaaaalSlSlSlTlTlSlSlSlSlSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQlQlQlQlQlQlQlQlQlQlQlQlRlSlSlSlRlUlVlVlWlWlXpmlZmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQlQlQlQlQlQlQlQlQlQlQlQlQlQlQmblVlVlVlVlVmclVlZmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQlQlQlQlQlQlQlQlQlQlQlQlQlQlQmdmelVmfmclVmclVmclZmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQlQlQlQlQlQlQlQlQlQlQlQlQmglVmhlVmilVlUlVlVlVmclZmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQlQlQlQlQlQlQlQlQlQlQlQlQlSlSlSqCmjlVlVmkmklWqDlZmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQlQlQlQlQlQlQlQlQlQlQlQlQlQlQlSlSlSlTlTlSlSlSlSlSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQlQlQlQlQlQlQlQlQlQlQlQlQlQlQlQlQlQlQlQlQlQlQlQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQlQaalQlQlQlQlQlRlRlQlQlQlQlQlQlQlQlQlQlQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQlQlQlQlRlRlRlQlQlQlQlQlQlQlQlQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQlQaaaaaaaalRlRlQlRlQlQlRlRlRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaaalRlQlQlQlQlQlQlRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQlQlQlQlRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapOpOaaaaaaaapPpPpPpPpPpPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapOpOpOpOaaaapOpOpOpOpOpPpPpOpOpOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapOpOpOpOpOpOpOpOpOpOpOpPpPpOpOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapOpOpOpOpOpOpOpOpOpOpOpOpOpOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapOpOpOpOpOpOpOpOpOpOpOpOpPpPaaaapQpQpQpRpRpQpQpQpQpQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapOpOpOpOpOpOpOpOpOpOpOpOpPpQpQpQpPpSpTpTpUpUpVpWpXpYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapOpOpOpOpOpOpOpOpOpOpOpOpOpOpOpZpTpTpTpTpTqapTpXpYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapOpOpOpOpOpOpOpOpOpOpOpOpOpOpOqbqcpTqdqapTqapTqapXpYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapOpOpOpOpOpOpOpOpOpOpOpOpOqepTqfpTqgpTpSpTpTpTqapXpYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapOpOpOpOpOpOpOpOpOpOpOpOpOpQpQpQqhqipTpTqjqjpUqkpXpYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapOpOpOpOpOpOpOpOpOpOpOpOpOpOpOpQpQpQpRpRpQpQpQpQpQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapOpOpOpOpOpOpOpOpOpOpOpOpOpOpOpOpOpOpOpOpOpOpOpOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapOpOaapOpOpOpOpOpPpPpOpOpOpOpOpOpOpOpOpOpOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapOpOpOpOpPpPpPpOpOpOpOpOpOpOpOpOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapOpOaaaaaaaapPpPpOpPpOpOpPpPpPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapOaaaaaaaaaaaapPpOpOpOpOpOpOpPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapOpOpOpOpPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -1100,4 +1099,3 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} - diff --git a/_maps/map_files/generic/z5.dmm b/_maps/map_files/generic/z5.dmm index 2dd3e6f2370..0d93c26e48e 100644 --- a/_maps/map_files/generic/z5.dmm +++ b/_maps/map_files/generic/z5.dmm @@ -1,631 +1,631 @@ "aa" = (/turf/open/space,/area/space) -"ab" = (/turf/closed/mineral,/area/mine/unexplored) -"ac" = (/turf/closed/mineral/random,/area/mine/unexplored) -"ad" = (/obj/machinery/atmospherics/pipe/simple,/obj/structure/closet/crate/internals,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) -"ae" = (/turf/closed/mineral/random/high_chance,/area/mine/unexplored) -"af" = (/turf/closed/mineral,/area/mine/explored) -"ag" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/mine/abandoned) -"ah" = (/obj/machinery/door/airlock/external,/turf/open/floor/plasteel/airless,/area/mine/abandoned) -"ai" = (/turf/closed/mineral/random/low_chance,/area/mine/explored) -"aj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/mine/abandoned) -"ak" = (/turf/open/floor/plasteel/airless,/area/mine/abandoned) -"al" = (/obj/structure/lattice,/turf/open/space,/area/space) -"am" = (/obj/effect/spawner/lootdrop/crate_spawner,/turf/open/floor/plating/asteroid/airless/cave,/area/mine/unexplored) -"an" = (/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shard{icon_state = "small"},/turf/open/floor/plating/airless,/area/mine/abandoned) -"ao" = (/obj/item/stack/rods,/obj/structure/door_assembly/door_assembly_ext{name = "Broken External Airlock"},/turf/open/floor/plasteel/airless,/area/mine/abandoned) -"ap" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/open/floor/plating/airless,/area/mine/abandoned) -"aq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/mine/abandoned) -"ar" = (/turf/open/floor/plating/airless,/area/mine/abandoned) -"as" = (/obj/item/stack/rods,/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/mine/abandoned) -"at" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/plasteel/airless,/area/mine/abandoned) -"au" = (/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/mine/abandoned) -"av" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/open/floor/plating/airless,/area/mine/abandoned) -"aw" = (/obj/item/weapon/shard,/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/mine/abandoned) -"ax" = (/turf/closed/wall,/area/mine/abandoned) -"ay" = (/obj/item/stack/rods,/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shard,/turf/open/floor/plating/airless,/area/mine/abandoned) +"ab" = (/turf/closed/mineral,/area/mine/explored) +"ac" = (/turf/closed/mineral,/area/mine/unexplored) +"ad" = (/turf/closed/mineral/random,/area/mine/unexplored) +"ae" = (/turf/closed/mineral/random/low_chance,/area/mine/explored) +"af" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/mine/abandoned) +"ag" = (/obj/machinery/door/airlock/external,/turf/open/floor/plasteel/airless,/area/mine/abandoned) +"ah" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/mine/abandoned) +"ai" = (/turf/open/floor/plasteel/airless,/area/mine/abandoned) +"aj" = (/obj/structure/lattice,/turf/open/space,/area/space) +"ak" = (/turf/closed/mineral/random/high_chance,/area/mine/unexplored) +"al" = (/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shard{icon_state = "small"},/turf/open/floor/plating/airless,/area/mine/abandoned) +"am" = (/obj/item/stack/rods,/obj/structure/door_assembly/door_assembly_ext{name = "Broken External Airlock"},/turf/open/floor/plasteel/airless,/area/mine/abandoned) +"an" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/open/floor/plating/airless,/area/mine/abandoned) +"ao" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/mine/abandoned) +"ap" = (/turf/open/floor/plating/airless,/area/mine/abandoned) +"aq" = (/obj/item/stack/rods,/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/mine/abandoned) +"ar" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/plasteel/airless,/area/mine/abandoned) +"as" = (/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/mine/abandoned) +"at" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/open/floor/plating/airless,/area/mine/abandoned) +"au" = (/obj/item/weapon/shard,/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/mine/abandoned) +"av" = (/turf/closed/wall,/area/mine/abandoned) +"aw" = (/obj/item/stack/rods,/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shard,/turf/open/floor/plating/airless,/area/mine/abandoned) +"ax" = (/obj/item/stack/rods,/turf/open/floor/plasteel/airless,/area/mine/abandoned) +"ay" = (/obj/structure/lattice,/obj/item/weapon/shard{icon_state = "medium"},/turf/open/space,/area/space) "az" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/open/floor/plating/airless,/area/mine/abandoned) -"aA" = (/obj/item/stack/rods,/turf/open/floor/plasteel/airless,/area/mine/abandoned) -"aB" = (/obj/structure/lattice,/obj/item/weapon/shard{icon_state = "medium"},/turf/open/space,/area/space) -"aC" = (/obj/structure/alien/weeds,/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/mine/abandoned) +"aA" = (/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/open/floor/plasteel/airless,/area/mine/abandoned) +"aB" = (/obj/structure/alien/weeds,/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/mine/abandoned) +"aC" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/mine/abandoned) "aD" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/open/floor/plating/airless,/area/mine/abandoned) -"aE" = (/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/open/floor/plasteel/airless,/area/mine/abandoned) -"aF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/mine/abandoned) -"aG" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plating/airless,/area/mine/abandoned) -"aH" = (/obj/effect/decal/remains/xeno,/obj/structure/alien/weeds,/turf/open/floor/plasteel/airless{icon_state = "floorscorched1"},/area/mine/abandoned) -"aI" = (/obj/item/stack/rods,/obj/structure/lattice,/turf/open/space,/area/space) -"aJ" = (/obj/structure/alien/weeds,/turf/open/floor/plasteel/airless,/area/mine/abandoned) +"aE" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plating/airless,/area/mine/abandoned) +"aF" = (/obj/structure/alien/weeds,/turf/open/floor/plasteel/airless,/area/mine/abandoned) +"aG" = (/obj/effect/decal/remains/xeno,/obj/structure/alien/weeds,/turf/open/floor/plasteel/airless{icon_state = "floorscorched1"},/area/mine/abandoned) +"aH" = (/obj/item/stack/rods,/obj/structure/lattice,/turf/open/space,/area/space) +"aI" = (/obj/item/weapon/shard,/obj/item/stack/rods,/turf/open/floor/plating/airless,/area/mine/abandoned) +"aJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plating/airless,/area/mine/abandoned) "aK" = (/obj/structure/table,/turf/open/floor/plasteel/airless{icon_state = "floorscorched2"},/area/mine/abandoned) -"aL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plating/airless,/area/mine/abandoned) -"aM" = (/obj/item/weapon/shard,/obj/item/stack/rods,/turf/open/floor/plating/airless,/area/mine/abandoned) -"aN" = (/obj/structure/table,/turf/open/floor/plasteel/airless{icon_state = "floorscorched1"},/area/mine/abandoned) -"aO" = (/obj/structure/alien/weeds,/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/mine/abandoned) -"aP" = (/obj/structure/alien/weeds,/turf/open/floor/plating/airless,/area/mine/abandoned) -"aQ" = (/turf/open/floor/plasteel/airless{icon_state = "floorscorched2"},/area/mine/abandoned) -"aR" = (/turf/open/floor/plasteel/airless{icon_state = "floorscorched1"},/area/mine/abandoned) -"aS" = (/obj/item/stack/rods,/turf/open/floor/plating/airless,/area/mine/abandoned) -"aT" = (/obj/item/weapon/shard{icon_state = "small"},/turf/open/floor/plating/airless,/area/mine/abandoned) -"aU" = (/turf/open/floor/plasteel{icon_plating = "asteroid"; icon_state = "asteroid"; name = "Asteroid"},/area/mine/unexplored) -"aV" = (/obj/item/clothing/under/soviet,/obj/item/clothing/head/ushanka,/turf/open/floor/plasteel{icon_plating = "asteroid"; icon_state = "asteroid"; name = "Asteroid"},/area/mine/unexplored) -"aW" = (/obj/effect/decal/remains/human,/turf/open/floor/plasteel{icon_plating = "asteroid"; icon_state = "asteroid"; name = "Asteroid"},/area/mine/unexplored) -"aX" = (/obj/docking_port/stationary{dheight = 9; dir = 2; dwidth = 5; height = 24; id = "syndicate_z5"; name = "south of asteroid"; turf_type = /turf/open/space; width = 18},/turf/open/space,/area/space) -"aY" = (/obj/structure/barricade/wooden,/turf/open/floor/plasteel{icon_state = "bot"; dir = 1},/area/mine/production) -"aZ" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/mine/laborcamp) -"ba" = (/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/mine/abandoned) -"bb" = (/obj/machinery/light,/turf/open/floor/plating/asteroid/airless,/area/mine/north_outpost) -"bc" = (/obj/structure/lattice,/obj/structure/window/reinforced,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/open/space,/area/mine/north_outpost) -"bd" = (/turf/closed/wall/rust,/area/mine/unexplored) -"be" = (/obj/item/weapon/shard,/turf/open/floor/plating/airless,/area/mine/abandoned) -"bf" = (/obj/structure/lattice,/obj/item/weapon/shard{icon_state = "small"},/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/open/space,/area/mine/abandoned) -"bg" = (/obj/structure/lattice,/turf/open/space,/area/mine/abandoned) -"bh" = (/obj/machinery/door/airlock/hatch,/turf/open/floor/plasteel/airless,/area/mine/abandoned) -"bi" = (/turf/closed/wall,/area/mine/north_outpost) -"bj" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"},/turf/closed/wall,/area/mine/north_outpost) -"bk" = (/turf/closed/wall/rust,/area/mine/explored) -"bl" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/open/floor/plating/asteroid/airless,/area/mine/north_outpost) -"bm" = (/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/mine/abandoned) -"bn" = (/obj/effect/decal/remains/xeno,/turf/open/floor/plasteel/airless{icon_state = "floorscorched2"},/area/mine/abandoned) -"bo" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=2-NMine"; location = "1-Storage"},/mob/living/simple_animal/bot/secbot/beepsky{desc = "Powered by tears and swet of laborer."; name = "Prison Ofitser"},/turf/open/floor/plasteel{icon_state = "asteroidfloor"},/area/mine/laborcamp) -"bp" = (/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless{icon_state = "platingdmg3"},/area/mine/explored) -"bq" = (/obj/structure/table,/turf/open/floor/plasteel/airless,/area/mine/abandoned) -"br" = (/obj/structure/rack,/turf/open/floor/plasteel/airless,/area/mine/abandoned) -"bs" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/port_gen/pacman{anchored = 1},/turf/open/floor/plating,/area/mine/north_outpost) -"bt" = (/obj/machinery/power/terminal{dir = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/light/small{dir = 1},/turf/open/floor/plating,/area/mine/north_outpost) -"bu" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/smes{charge = 5e+006},/turf/open/floor/plating,/area/mine/north_outpost) -"bv" = (/obj/machinery/atmospherics/components/unary/tank/air,/turf/open/floor/plating,/area/mine/north_outpost) -"bw" = (/obj/effect/decal/remains/human,/turf/open/floor/plasteel/airless{icon_state = "damaged5"},/area/mine/abandoned) -"bx" = (/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/mine/explored) -"by" = (/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless{icon_state = "platingdmg1"},/area/mine/explored) -"bz" = (/obj/structure/window/reinforced,/turf/open/floor/plasteel/airless,/area/mine/explored) -"bA" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/open/floor/plating,/area/mine/north_outpost) -"bB" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/open/floor/plating,/area/mine/north_outpost) -"bC" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/item/weapon/storage/box/lights/bulbs,/obj/machinery/atmospherics/pipe/simple{dir = 6},/turf/open/floor/plating,/area/mine/north_outpost) -"bD" = (/obj/machinery/atmospherics/pipe/simple/general/hidden{dir = 9},/obj/machinery/meter,/turf/open/floor/plating,/area/mine/north_outpost) -"bE" = (/obj/structure/window/reinforced,/turf/open/floor/plating/airless,/area/mine/explored) -"bF" = (/obj/structure/lattice,/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/open/space,/area/mine/north_outpost) -"bG" = (/turf/open/floor/plating/asteroid/airless,/area/mine/explored) -"bH" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/door/airlock/maintenance{name = "Mining Station Maintenance"; req_access_txt = "54"},/turf/open/floor/plating,/area/mine/north_outpost) -"bI" = (/obj/machinery/atmospherics/pipe/simple,/turf/closed/wall,/area/mine/north_outpost) -"bJ" = (/turf/open/floor/plasteel{icon_state = "dark"},/area/mine/abandoned) -"bK" = (/obj/structure/sink{pixel_y = 30},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/abandoned) -"bL" = (/obj/structure/table,/obj/item/weapon/reagent_containers/glass/bucket,/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/abandoned) -"bM" = (/obj/structure/table,/obj/item/weapon/paper/crumpled,/obj/item/seeds/cherry,/obj/item/weapon/reagent_containers/glass/bottle/nutrient/ez,/obj/item/weapon/reagent_containers/glass/bottle/nutrient/ez,/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/abandoned) -"bN" = (/obj/machinery/light{dir = 1},/turf/open/floor/plating/asteroid/airless,/area/mine/north_outpost) -"bO" = (/obj/machinery/light/small{dir = 4},/obj/structure/barricade/wooden,/turf/open/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/mine/production) -"bP" = (/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/obj/structure/alien/weeds,/turf/open/floor/plasteel/airless,/area/mine/abandoned) -"bQ" = (/obj/structure/table,/obj/item/weapon/pickaxe,/turf/open/floor/plasteel,/area/mine/north_outpost) -"bR" = (/obj/machinery/newscaster{pixel_y = 32},/turf/open/floor/plasteel,/area/mine/north_outpost) -"bS" = (/obj/structure/table,/obj/machinery/microwave,/turf/open/floor/plasteel,/area/mine/north_outpost) -"bT" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/mine/north_outpost) -"bU" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/open/floor/plasteel,/area/mine/north_outpost) -"bV" = (/obj/machinery/atmospherics/pipe/simple,/obj/machinery/airalarm{pixel_y = 24},/obj/machinery/light{dir = 1},/turf/open/floor/plasteel,/area/mine/north_outpost) -"bW" = (/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/turf/open/floor/plasteel,/area/mine/north_outpost) -"bX" = (/turf/open/floor/plasteel,/area/mine/north_outpost) -"bY" = (/turf/open/floor/plasteel{dir = 4; icon_state = "loadingarea"},/area/mine/north_outpost) -"bZ" = (/obj/machinery/mineral/unloading_machine{dir = 2; output_dir = 4},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/north_outpost) -"ca" = (/obj/machinery/conveyor{dir = 4; id = "mining_north"},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/north_outpost) -"cb" = (/obj/machinery/disposal/deliveryChute{dir = 8},/obj/structure/disposalpipe/trunk,/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/north_outpost) -"cc" = (/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/abandoned) -"cd" = (/turf/open/floor/plasteel{icon_state = "damaged2"},/area/mine/abandoned) -"ce" = (/obj/machinery/door/airlock/hatch,/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/abandoned) -"cf" = (/obj/structure/alien/weeds,/obj/structure/alien/weeds,/turf/open/floor/plasteel/airless,/area/mine/abandoned) -"cg" = (/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 5},/area/mine/west_outpost) -"ch" = (/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 4},/area/mine/west_outpost) -"ci" = (/obj/structure/table,/obj/item/weapon/shovel,/turf/open/floor/plasteel,/area/mine/north_outpost) -"cj" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets,/turf/open/floor/plasteel,/area/mine/north_outpost) -"ck" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/open/floor/plasteel,/area/mine/north_outpost) -"cl" = (/obj/machinery/atmospherics/pipe/simple,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/open/floor/plasteel,/area/mine/north_outpost) -"cm" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "Mining North Outpost APC"; pixel_x = 26; pixel_y = 0},/obj/machinery/conveyor_switch{id = "mining_north"},/obj/machinery/camera{c_tag = "North Outpost"; dir = 8; network = list("MINE")},/turf/open/floor/plasteel{dir = 4; icon_state = "warning"},/area/mine/north_outpost) -"cn" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/closed/wall,/area/mine/north_outpost) -"co" = (/obj/machinery/conveyor{backwards = 2; dir = 2; forwards = 1; id = "mining_north"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/plasticflaps/mining,/turf/open/floor/plasteel,/area/mine/north_outpost) -"cp" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/closed/wall,/area/mine/north_outpost) -"cq" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/closed/wall,/area/mine/north_outpost) -"cr" = (/turf/open/floor/plasteel{icon_state = "damaged3"},/area/mine/abandoned) -"cs" = (/obj/structure/ore_box,/turf/open/floor/plating/asteroid/airless,/area/mine/explored) -"ct" = (/obj/structure/table,/obj/item/weapon/storage/backpack/satchel,/obj/item/clothing/glasses/meson,/obj/machinery/light/small{dir = 8},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/turf/open/floor/plasteel,/area/mine/north_outpost) -"cu" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; layer = 2.4; on = 1},/turf/open/floor/plasteel,/area/mine/north_outpost) -"cv" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/open/floor/plasteel,/area/mine/north_outpost) -"cw" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/machinery/door/airlock/glass_mining{name = "Break Room"; req_access_txt = "54"},/turf/open/floor/plasteel,/area/mine/north_outpost) -"cx" = (/obj/machinery/atmospherics/pipe/manifold{dir = 4},/turf/open/floor/plasteel,/area/mine/north_outpost) -"cy" = (/turf/open/floor/plasteel{dir = 4; icon_state = "warning"},/area/mine/north_outpost) -"cz" = (/obj/machinery/door/window/northleft{dir = 8; name = "Pneumatic Tube Access"},/obj/machinery/disposal/deliveryChute{dir = 8; pixel_x = 8; pixel_y = 0},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/disposalpipe/trunk{dir = 4},/turf/open/floor/plasteel{icon_state = "bot"},/area/mine/north_outpost) -"cA" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/closed/wall,/area/mine/north_outpost) -"cB" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/disposalpipe/segment,/turf/open/floor/plating,/area/mine/explored) -"cC" = (/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 1},/area/mine/north_outpost) -"cD" = (/obj/machinery/conveyor_switch{id = "mining_north"},/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 1},/area/mine/north_outpost) -"cE" = (/obj/machinery/light/small{dir = 1},/turf/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/north_outpost) -"cF" = (/obj/effect/decal/remains/human,/obj/item/clothing/suit/xenos,/obj/item/clothing/head/xenos,/turf/open/floor/plasteel{icon_state = "damaged2"},/area/mine/abandoned) -"cG" = (/obj/structure/table,/obj/item/stack/sheet/mineral/sandstone{amount = 30},/turf/open/floor/plasteel{icon_state = "damaged3"},/area/mine/abandoned) -"cH" = (/obj/structure/disposalpipe/segment,/turf/closed/mineral,/area/mine/explored) -"cI" = (/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 6},/area/mine/west_outpost) -"cJ" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/unexplored) -"cK" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical,/turf/open/floor/plasteel,/area/mine/north_outpost) -"cL" = (/obj/structure/chair{dir = 8},/turf/open/floor/plasteel,/area/mine/north_outpost) -"cM" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/open/floor/plasteel,/area/mine/north_outpost) -"cN" = (/obj/structure/rack,/turf/open/floor/plasteel{icon_state = "bot"},/area/mine/north_outpost) -"cO" = (/obj/structure/disposalpipe/segment,/turf/closed/wall,/area/mine/north_outpost) -"cP" = (/obj/structure/alien/weeds/node,/turf/open/floor/plasteel/airless{icon_state = "floorgrime"},/area/mine/abandoned) -"cQ" = (/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 1},/area/mine/explored) -"cR" = (/obj/machinery/conveyor_switch{id = "mining_west"},/obj/machinery/light/small{dir = 1},/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 1},/area/mine/explored) -"cS" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/open/floor/plating/asteroid/airless,/area/mine/eva) -"cT" = (/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 5},/area/mine/eva) -"cU" = (/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/open/floor/plating/airless,/area/mine/abandoned) -"cV" = (/obj/structure/reagent_dispensers/fueltank,/turf/open/floor/plasteel,/area/mine/north_outpost) -"cW" = (/obj/machinery/recharge_station,/turf/open/floor/plasteel,/area/mine/north_outpost) -"cX" = (/obj/structure/tank_dispenser/oxygen,/turf/open/floor/plasteel,/area/mine/north_outpost) -"cY" = (/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 4},/area/mine/eva) -"cZ" = (/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 6},/area/mine/eva) -"da" = (/turf/open/floor/plasteel/airless{icon_state = "asteroidfloor"},/area/mine/abandoned) -"db" = (/obj/machinery/camera{c_tag = "Production Line External"; dir = 4; network = list("MINE")},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/production) -"dc" = (/turf/open/floor/plating/asteroid/airless,/area/mine/unexplored) -"dd" = (/obj/machinery/door/airlock/external{name = "Mining North Outpost Airlock"; req_access_txt = "54"},/turf/open/floor/plasteel,/area/mine/north_outpost) -"de" = (/turf/closed/mineral/random/labormineral,/area/mine/unexplored) -"df" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/mine/abandoned) -"dg" = (/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/obj/structure/alien/weeds,/turf/open/floor/plating/airless,/area/mine/abandoned) -"dh" = (/obj/structure/alien/weeds/node,/turf/open/floor/plating/airless,/area/mine/abandoned) -"di" = (/obj/item/weapon/shard,/obj/structure/lattice,/turf/open/space,/area/space) -"dj" = (/obj/structure/lattice,/obj/structure/window/reinforced,/turf/open/space,/area/mine/explored) -"dk" = (/obj/structure/lattice,/obj/structure/window/reinforced,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/open/space,/area/mine/north_outpost) -"dl" = (/obj/machinery/mech_bay_recharge_port,/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plasteel/airless{icon_state = "asteroidfloor"},/area/mine/north_outpost) -"dm" = (/turf/open/floor/mech_bay_recharge_floor/airless,/area/mine/north_outpost) -"dn" = (/obj/machinery/computer/mech_bay_power_console,/turf/open/floor/plasteel/airless{icon_state = "asteroidfloor"},/area/mine/north_outpost) -"do" = (/obj/machinery/light/small{dir = 8},/turf/open/floor/plasteel,/area/mine/north_outpost) -"dp" = (/obj/structure/closet/emcloset,/turf/open/floor/plasteel,/area/mine/north_outpost) -"dq" = (/turf/closed/wall/r_wall,/area/mine/laborcamp) -"dr" = (/obj/structure/alien/resin/wall,/turf/open/floor/plasteel/airless{icon_state = "floorgrime"},/area/mine/abandoned) -"ds" = (/turf/open/floor/plasteel/airless{icon_state = "floorgrime"},/area/mine/abandoned) -"dt" = (/obj/structure/alien/weeds,/turf/open/floor/plasteel/airless{icon_state = "floorscorched2"},/area/mine/abandoned) -"du" = (/obj/effect/decal/remains/xeno,/obj/structure/alien/weeds,/turf/open/floor/plating/airless,/area/mine/abandoned) -"dv" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/mine/abandoned) -"dw" = (/turf/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/north_outpost) -"dx" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = -32},/turf/open/floor/plasteel{icon_state = "warning"},/area/mine/north_outpost) -"dy" = (/turf/open/floor/plasteel{icon_state = "warning"},/area/mine/north_outpost) -"dz" = (/obj/structure/ore_box,/turf/open/floor/plasteel{icon_state = "warning"},/area/mine/north_outpost) -"dA" = (/obj/structure/rack{dir = 1},/obj/item/clothing/glasses/meson,/obj/item/device/flashlight,/obj/item/weapon/storage/bag/ore,/obj/machinery/atmospherics/pipe/simple{dir = 9},/obj/item/weapon/shovel{attack_verb = list("ineffectively hit"); desc = "A large tool for digging and moving dirt. Was modified with extra safety, making it ineffective as a weapon."; force = 1; name = "safety shovel"; pixel_x = -5; throwforce = 1},/obj/item/weapon/pickaxe{attack_verb = list("ineffectively hit"); desc = "A pickaxe designed to be only effective at digging rock and ore, very ineffective as a weapon."; force = 1; name = "safety pickaxe"; pixel_x = 5; throwforce = 1},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) -"dB" = (/obj/structure/rack{dir = 1},/obj/item/clothing/glasses/meson,/obj/item/device/flashlight,/obj/item/weapon/storage/bag/ore,/obj/machinery/atmospherics/pipe/simple{dir = 9},/obj/item/weapon/shovel{attack_verb = list("ineffectively hit"); desc = "A large tool for digging and moving dirt. Was modified with extra safety, making it ineffective as a weapon."; force = 1; name = "safety shovel"; pixel_x = -5; throwforce = 1},/obj/item/weapon/pickaxe{attack_verb = list("ineffectively hit"); desc = "A pickaxe designed to be only effective at digging rock and ore, very ineffective as a weapon."; force = 1; name = "safety pickaxe"; pixel_x = 5; throwforce = 1},/obj/machinery/camera{c_tag = "Labor Camp Storage"; dir = 8; network = list("Labor")},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) -"dC" = (/turf/closed/mineral/random/labormineral,/area/mine/explored) -"dD" = (/obj/item/weapon/storage/toolbox/syndicate,/obj/structure/alien/weeds/node,/turf/open/floor/plasteel/airless{icon_state = "floorscorched1"},/area/mine/abandoned) -"dE" = (/obj/effect/decal/remains/xeno,/obj/item/clothing/suit/space/syndicate/black/red,/obj/item/clothing/head/helmet/space/syndicate/black/red,/obj/structure/alien/weeds,/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/mine/abandoned) -"dF" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 1},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/open/space,/area/mine/north_outpost) -"dG" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 1},/turf/open/space,/area/mine/explored) -"dH" = (/obj/machinery/door/airlock/external{name = "Mining North Outpost Airlock"; req_access_txt = "54"},/turf/open/floor/plasteel/airless{icon_state = "asteroidfloor"},/area/mine/north_outpost) -"dI" = (/obj/structure/disposalpipe/segment,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/open/floor/plating,/area/mine/explored) -"dJ" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/o2{pixel_x = 2; pixel_y = 2},/turf/open/floor/plasteel{icon_state = "white"},/area/mine/laborcamp) -"dK" = (/obj/structure/table,/obj/item/device/healthanalyzer,/obj/item/stack/medical/bruise_pack,/turf/open/floor/plasteel{icon_state = "white"},/area/mine/laborcamp) -"dL" = (/obj/structure/sign/bluecross_2{pixel_y = 32},/obj/structure/chair,/turf/open/floor/plasteel{icon_state = "white"},/area/mine/laborcamp) -"dM" = (/obj/machinery/camera{c_tag = "Labor Camp Medical"; dir = 8; network = list("Labor")},/obj/structure/bed,/obj/item/weapon/bedsheet/medical,/turf/open/floor/plasteel{icon_state = "white"},/area/mine/laborcamp) -"dN" = (/turf/closed/wall,/area/mine/laborcamp) -"dO" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) -"dP" = (/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) -"dQ" = (/turf/closed/wall,/area/mine/explored) -"dR" = (/turf/open/floor/plating/asteroid,/area/mine/explored) -"dS" = (/obj/machinery/door/airlock/external{name = "External Airlock"; req_access_txt = "0"},/turf/open/floor/plasteel/airless{icon_state = "asteroidfloor"},/area/mine/abandoned) -"dT" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/grille{density = 0; icon_state = "brokengrille"},/obj/item/weapon/shard{icon_state = "small"},/obj/item/stack/rods,/turf/open/floor/plating/airless,/area/mine/abandoned) -"dU" = (/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 10},/area/mine/explored) -"dV" = (/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/explored) -"dW" = (/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 6},/area/mine/explored) -"dX" = (/obj/machinery/light{dir = 1},/obj/structure/disposalpipe/segment,/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 1},/area/mine/north_outpost) -"dY" = (/obj/structure/disposalpipe/segment,/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 1},/area/mine/explored) -"dZ" = (/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 5},/area/mine/explored) -"ea" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/open/floor/plasteel{dir = 2; icon_state = "whiteblue"},/area/mine/laborcamp) -"eb" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/open/floor/plasteel{dir = 2; icon_state = "whiteblue"},/area/mine/laborcamp) -"ec" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=1-Storage"; location = "Sleeper"},/turf/open/floor/plasteel{dir = 2; icon_state = "whiteblue"},/area/mine/laborcamp) -"ed" = (/obj/machinery/light/small{dir = 4},/obj/structure/bed/roller,/turf/open/floor/plasteel{dir = 2; icon_state = "whiteblue"},/area/mine/laborcamp) -"ee" = (/obj/machinery/airalarm{pixel_y = 28},/obj/structure/closet/crate,/turf/open/floor/plasteel{icon_state = "bot"; dir = 1},/area/mine/production) -"ef" = (/obj/machinery/light/small,/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) -"eg" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/mine/abandoned) -"eh" = (/obj/structure/plasticflaps/mining,/turf/open/floor/plasteel{icon_state = "asteroidfloor"},/area/mine/laborcamp) -"ei" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=3-SMine"; location = "2-NMine"},/turf/open/floor/plasteel{icon_state = "asteroidfloor"},/area/mine/laborcamp) -"ej" = (/turf/open/floor/plating{icon_plating = "asteroidplating"; icon_state = "asteroidplating"},/area/mine/explored) -"ek" = (/obj/effect/decal/remains/human,/turf/open/floor/plating/asteroid,/area/mine/explored) -"el" = (/obj/structure/disposalpipe/segment,/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/explored) -"em" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple,/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/mine/laborcamp) -"en" = (/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Infirmary"; req_access_txt = "0"},/turf/open/floor/plasteel{icon_state = "whitebluefull"},/area/mine/laborcamp) -"eo" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/mine/laborcamp) -"ep" = (/obj/machinery/atmospherics/pipe/simple,/turf/closed/wall,/area/mine/laborcamp) -"eq" = (/obj/machinery/door/airlock{name = "Labor Camp Storage"},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) -"er" = (/obj/structure/plasticflaps/mining,/turf/open/floor/plating{icon_plating = "asteroidplating"; icon_state = "asteroidplating"},/area/mine/explored) -"es" = (/turf/closed/wall/r_wall,/area/mine/explored) -"et" = (/obj/structure/girder/reinforced,/turf/open/floor/plating{icon_plating = "asteroidplating"; icon_state = "asteroidplating"},/area/mine/explored) -"eu" = (/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/abandoned) -"ev" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/abandoned) -"ew" = (/obj/structure/disposalpipe/segment,/turf/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored) -"ex" = (/obj/structure/table,/obj/item/trash/plate,/obj/item/weapon/kitchen/fork,/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) -"ey" = (/obj/effect/decal/cleanable/cobweb2,/obj/structure/chair{dir = 8},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) -"ez" = (/obj/machinery/atmospherics/pipe/simple,/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) -"eA" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) -"eB" = (/obj/machinery/atmospherics/pipe/simple,/obj/item/device/radio/intercom{desc = "Talk through this. It looks like it has been modified to not broadcast."; dir = 2; name = "Prison Intercom (General)"; pixel_x = 0; pixel_y = 24; prison_radio = 1},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) -"eC" = (/obj/machinery/light{dir = 1},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) -"eD" = (/turf/open/floor/plasteel{icon_state = "asteroidfloor"},/area/mine/explored) -"eE" = (/obj/structure/barricade/wooden,/turf/open/floor/plasteel{dir = 4; icon_state = "loadingarea"},/area/space) -"eF" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille{density = 0; icon_state = "brokengrille"},/obj/item/stack/rods,/obj/item/weapon/shard,/turf/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/abandoned) -"eG" = (/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/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/abandoned) -"eH" = (/obj/structure/chair{dir = 1},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) -"eI" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=7-Sleeper"; location = "6-Vending"},/mob/living/simple_animal/mouse,/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) -"eJ" = (/obj/machinery/door/airlock{name = "Vending"},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) -"eK" = (/obj/machinery/atmospherics/pipe/simple/general/hidden{dir = 5},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) -"eL" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) -"eM" = (/obj/machinery/atmospherics/pipe/manifold{dir = 4},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) -"eN" = (/obj/machinery/door/poddoor/preopen{id = "Labor"; name = "labor camp blast door"},/obj/machinery/door/airlock{name = "Labor Camp External Access"},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) -"eO" = (/obj/structure/ore_box,/turf/open/floor/plating/asteroid,/area/mine/explored) -"eP" = (/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 10},/area/mine/unexplored) -"eQ" = (/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/unexplored) -"eR" = (/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 6},/area/mine/unexplored) -"eS" = (/obj/machinery/vending/sustenance,/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) -"eT" = (/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; layer = 2.4; on = 1},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) -"eU" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/closed/wall,/area/mine/laborcamp) -"eV" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/machinery/airalarm{dir = 4; pixel_x = -23; pixel_y = 0},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) -"eW" = (/obj/machinery/flasher{id = "Labor"; pixel_x = 0; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold{dir = 4},/turf/closed/wall,/area/mine/laborcamp) -"eX" = (/obj/machinery/conveyor_switch/oneway{id = "gulag"},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) -"eY" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/open/floor/plasteel{icon_state = "asteroidwarning"},/area/mine/laborcamp) -"eZ" = (/turf/open/floor/plasteel{icon_state = "asteroidwarning"},/area/mine/explored) -"fa" = (/turf/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/unexplored) -"fb" = (/obj/machinery/light_switch{pixel_x = -27; pixel_y = 0},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) -"fc" = (/obj/machinery/camera{c_tag = "Labor Camp Central"; network = list("Labor")},/obj/machinery/atmospherics/pipe/manifold{dir = 8},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) -"fd" = (/obj/machinery/atmospherics/pipe/simple/general/hidden{dir = 9},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) -"fe" = (/obj/machinery/conveyor{dir = 2; id = "gulag"},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) -"ff" = (/obj/machinery/conveyor{dir = 8; id = "gulag"},/obj/structure/plasticflaps/mining,/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) -"fg" = (/obj/machinery/conveyor{dir = 8; id = "gulag"},/turf/open/floor/plasteel{icon_state = "asteroidplating"},/area/mine/laborcamp) -"fh" = (/obj/machinery/mineral/unloading_machine{dir = 1; input_dir = 4; output_dir = 8},/turf/open/floor/plasteel{icon_state = "asteroidplating"},/area/mine/laborcamp) -"fi" = (/obj/structure/ore_box,/turf/open/floor/plasteel{icon_state = "asteroidwarning"; dir = 8},/area/mine/explored) -"fj" = (/obj/structure/closet/crate{icon_state = "crateopen"; opened = 1},/turf/open/floor/plating/asteroid,/area/mine/explored) -"fk" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored) -"fl" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored) -"fm" = (/obj/machinery/door/airlock/glass_security{name = "Labor Camp Shuttle Security Airlock"; req_access_txt = "2"},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) -"fn" = (/obj/machinery/light/small{dir = 1},/obj/machinery/button/door{id = "Labor"; name = "Labor Camp Lockdown"; pixel_x = 0; pixel_y = 28; req_access_txt = "2"},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) -"fo" = (/obj/machinery/door/poddoor/preopen{id = "Labor"; name = "labor camp blast door"},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) -"fp" = (/turf/open/floor/plasteel,/area/mine/laborcamp) -"fq" = (/obj/machinery/mineral/processing_unit_console{machinedir = 6},/turf/closed/wall,/area/mine/laborcamp) -"fr" = (/obj/structure/plasticflaps,/obj/machinery/conveyor{dir = 2; id = "gulag"},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) -"fs" = (/obj/machinery/camera{c_tag = "Labor Camp External"; dir = 4; network = list("Labor")},/turf/open/floor/plasteel{icon_state = "asteroidwarning"; dir = 1},/area/mine/explored) -"ft" = (/turf/open/floor/plasteel{icon_state = "asteroidwarning"; dir = 1},/area/mine/explored) -"fu" = (/obj/machinery/conveyor_switch/oneway{id = "gulag"},/turf/open/floor/plasteel{icon_state = "asteroidwarning"; dir = 1},/area/mine/explored) -"fv" = (/obj/effect/decal/cleanable/blood/old,/turf/open/floor/plating/asteroid,/area/mine/explored) -"fw" = (/obj/machinery/mineral/stacking_unit_console{machinedir = 2},/turf/closed/wall,/area/mine/laborcamp) -"fx" = (/obj/machinery/mineral/processing_unit{dir = 1; output_dir = 2},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) -"fy" = (/obj/machinery/light/small{dir = 4},/turf/open/floor/plating/asteroid,/area/mine/laborcamp) -"fz" = (/obj/machinery/computer/shuttle/labor/one_way,/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) -"fA" = (/obj/machinery/conveyor{dir = 8; id = "gulag"},/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=6-Vending"; location = "5-Central"},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) -"fB" = (/obj/machinery/mineral/stacking_machine{dir = 1; input_dir = 4},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) -"fC" = (/obj/machinery/conveyor{dir = 8; id = "gulag"},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) -"fD" = (/obj/machinery/conveyor{dir = 10; icon_state = "conveyor0"; id = "gulag"},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) -"fE" = (/obj/structure/closet/crate,/turf/open/floor/plasteel{icon_state = "asteroidfloor"},/area/mine/explored) -"fF" = (/obj/item/stack/sheet/metal{amount = 5},/obj/structure/closet/crate,/turf/open/floor/plasteel{icon_state = "asteroidfloor"},/area/mine/explored) -"fG" = (/turf/closed/wall/r_wall,/area/mine/laborcamp/security) -"fH" = (/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp/security) -"fI" = (/obj/machinery/camera{c_tag = "Labor Camp Security Hallway"; dir = 8; network = list("Labor"); pixel_x = 0; pixel_y = 0},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp/security) -"fJ" = (/obj/machinery/atmospherics/pipe/simple,/turf/closed/wall,/area/mine/laborcamp/security) -"fK" = (/obj/structure/plasticflaps/mining,/turf/open/floor/plating,/area/mine/laborcamp/security) -"fL" = (/turf/closed/wall,/area/mine/laborcamp/security) -"fM" = (/obj/structure/girder,/turf/open/floor/plating{icon_plating = "asteroidplating"; icon_state = "asteroidplating"},/area/mine/laborcamp/security) -"fN" = (/obj/docking_port/stationary{dir = 8; dwidth = 2; height = 5; id = "laborcamp_away"; name = "labor camp"; width = 9},/turf/open/space,/area/space) -"fO" = (/obj/machinery/door/airlock/glass_security{name = "Labor Camp Shuttle Prisoner Airlock"; req_access_txt = "0"},/turf/open/floor/plasteel,/area/mine/laborcamp/security) -"fP" = (/obj/machinery/door/airlock/glass_security{name = "Labor Camp Shuttle Prisoner Airlock"; req_access_txt = "0"},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp/security) -"fQ" = (/obj/machinery/atmospherics/pipe/simple{dir = 6},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp/security) -"fR" = (/obj/machinery/atmospherics/pipe/manifold,/obj/machinery/door/airlock/glass_security{name = "Labor Camp Backroom"; req_access_txt = "2"},/turf/open/floor/plating,/area/mine/laborcamp/security) -"fS" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/open/floor/plating{icon_state = "warnplate"; dir = 8},/area/mine/laborcamp/security) -"fT" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/machinery/light/small{dir = 1},/turf/open/floor/plating,/area/mine/laborcamp/security) -"fU" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/open/floor/plating{dir = 2; icon_state = "warnplate"},/area/mine/laborcamp/security) -"fV" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/apc{dir = 1; name = "Labor Camp APC"; pixel_y = 24},/obj/machinery/atmospherics/pipe/simple{dir = 10},/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=5-Central"; location = "4-Maint"},/turf/open/floor/plating,/area/mine/laborcamp) -"fW" = (/turf/open/floor/plating{icon_state = "warnplate"; dir = 4},/area/mine/laborcamp/security) -"fX" = (/obj/machinery/door/airlock/glass_security{name = "Labor Camp External Access"; req_access_txt = "2"},/turf/open/floor/plating,/area/mine/laborcamp/security) -"fY" = (/obj/machinery/door/airlock/glass_security{name = "Labor Camp Monitoring"; req_access_txt = "2"},/turf/open/floor/plasteel,/area/mine/laborcamp/security) -"fZ" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"},/turf/closed/wall,/area/mine/laborcamp/security) -"ga" = (/obj/machinery/door/airlock/maintenance{name = "Labor Camp Maintenance"; req_access_txt = "2"},/turf/open/floor/plating,/area/mine/laborcamp/security) -"gb" = (/obj/structure/plasticflaps/mining,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple,/turf/open/floor/plating,/area/mine/laborcamp/security) -"gc" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/open/floor/plasteel{icon_state = "asteroidfloor"},/area/mine/explored) -"gd" = (/obj/machinery/vending/coffee,/turf/open/floor/plasteel,/area/mine/laborcamp/security) -"ge" = (/turf/open/floor/plasteel,/area/mine/laborcamp/security) -"gf" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/light_switch{pixel_y = 28},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/open/floor/plasteel,/area/mine/laborcamp/security) -"gg" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel,/area/mine/laborcamp/security) -"gh" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 4; name = "Labor Camp Security APC"; pixel_x = 24; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple,/obj/machinery/camera{c_tag = "Labor Camp Monitoring"; network = list("Labor")},/obj/machinery/light_switch{pixel_y = 28},/turf/open/floor/plasteel,/area/mine/laborcamp/security) -"gi" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/closed/wall,/area/mine/laborcamp/security) -"gj" = (/obj/machinery/power/smes{charge = 5e+006},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/open/floor/plating,/area/mine/laborcamp/security) -"gk" = (/obj/machinery/light/small{dir = 1},/obj/item/weapon/storage/box/lights/mixed,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plating,/area/mine/laborcamp/security) -"gl" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plating{icon_state = "warnplate"; dir = 1},/area/mine/laborcamp/security) -"gm" = (/obj/machinery/atmospherics/pipe/manifold{dir = 8},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/open/floor/plating,/area/mine/laborcamp/security) -"gn" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/open/floor/plating,/area/mine/laborcamp/security) -"go" = (/obj/structure/plasticflaps/mining,/turf/closed/wall,/area/mine/laborcamp/security) -"gp" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=4-Maint"; location = "3-SMine"},/turf/open/floor/plasteel{icon_state = "asteroidfloor"},/area/mine/laborcamp) -"gq" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/structure/closet/crate,/turf/open/floor/plasteel{icon_state = "asteroidfloor"},/area/mine/explored) -"gr" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/obj/structure/closet/crate,/turf/open/floor/plating/asteroid,/area/mine/explored) -"gs" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored) -"gt" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"},/turf/closed/wall/r_wall,/area/mine/laborcamp/security) -"gu" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/open/floor/plasteel,/area/mine/laborcamp/security) -"gv" = (/obj/structure/chair/office/dark,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel,/area/mine/laborcamp/security) -"gw" = (/obj/machinery/button/door{id = "Labor"; name = "Labor Camp Lockdown"; pixel_x = 28; pixel_y = 7; req_access_txt = "2"},/obj/machinery/button/flasher{id = "Labor"; pixel_x = 26; pixel_y = -3},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/open/floor/plasteel,/area/mine/laborcamp/security) -"gx" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/open/floor/plating,/area/mine/laborcamp/security) -"gy" = (/turf/open/floor/plating,/area/mine/laborcamp/security) -"gz" = (/obj/machinery/atmospherics/pipe/manifold{dir = 8},/obj/machinery/meter,/turf/open/floor/plating,/area/mine/laborcamp/security) -"gA" = (/obj/machinery/atmospherics/components/unary/tank/air{dir = 8},/turf/open/floor/plating,/area/mine/laborcamp/security) -"gB" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/mine/laborcamp/security) -"gC" = (/obj/structure/table,/obj/machinery/recharger,/turf/open/floor/plasteel,/area/mine/laborcamp/security) -"gD" = (/obj/machinery/computer/secure_data,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/open/floor/plasteel,/area/mine/laborcamp/security) -"gE" = (/obj/machinery/computer/security{name = "Labor Camp Monitoring"; network = list("Labor")},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/open/floor/plasteel,/area/mine/laborcamp/security) -"gF" = (/obj/machinery/computer/prisoner,/obj/machinery/airalarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/open/floor/plasteel,/area/mine/laborcamp/security) -"gG" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/turf/open/floor/plasteel,/area/mine/laborcamp/security) -"gH" = (/obj/machinery/space_heater,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/open/floor/plating,/area/mine/laborcamp/security) -"gI" = (/obj/machinery/power/port_gen/pacman{anchored = 1},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/open/floor/plating,/area/mine/laborcamp/security) -"gJ" = (/obj/machinery/portable_atmospherics/canister/air,/turf/open/floor/plating,/area/mine/laborcamp/security) -"gK" = (/obj/machinery/atmospherics/pipe/simple/general/hidden{dir = 5},/obj/structure/reagent_dispensers/fueltank,/turf/open/floor/plating,/area/mine/laborcamp/security) -"gL" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/mine/laborcamp/security) -"gM" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/mine/laborcamp/security) -"gN" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable,/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/mine/laborcamp/security) -"gO" = (/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 9},/area/mine/explored) -"gP" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored) -"gQ" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored) -"gR" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plating/airless,/area/mine/abandoned) -"gS" = (/obj/structure/alien/weeds,/turf/open/floor/plasteel/airless{icon_state = "floorscorched1"},/area/mine/abandoned) -"gT" = (/obj/effect/decal/remains/xeno,/obj/structure/alien/weeds,/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/mine/abandoned) -"gU" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 8},/area/mine/explored) -"gV" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 4},/area/mine/explored) -"gW" = (/obj/structure/alien/weeds/node,/turf/open/floor/plasteel/airless{icon_state = "floorscorched2"},/area/mine/abandoned) -"gX" = (/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/obj/structure/alien/weeds,/turf/open/floor/plasteel/airless{icon_state = "floorscorched1"},/area/mine/abandoned) -"gY" = (/obj/structure/table,/obj/structure/alien/weeds,/turf/open/floor/plasteel/airless,/area/mine/abandoned) -"gZ" = (/obj/item/weapon/shard,/turf/open/floor/plasteel/airless{icon_state = "floorscorched2"},/area/mine/abandoned) -"ha" = (/obj/item/weapon/shard{icon_state = "small"},/obj/structure/alien/weeds,/turf/open/floor/plasteel/airless,/area/mine/abandoned) -"hb" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/plating/airless,/area/mine/abandoned) -"hc" = (/obj/structure/alien/resin/membrane,/obj/structure/alien/weeds,/turf/open/floor/plating/airless,/area/mine/abandoned) -"hd" = (/turf/closed/wall/r_wall,/area/mine/maintenance) -"he" = (/obj/structure/alien/weeds/node,/turf/open/floor/plasteel/airless,/area/mine/abandoned) -"hf" = (/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plasteel/airless,/area/mine/explored) -"hg" = (/obj/effect/decal/remains/xeno,/obj/structure/alien/weeds,/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/mine/abandoned) -"hh" = (/turf/open/floor/bluegrid,/area/mine/maintenance) -"hi" = (/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/power/apc{dir = 1; name = "Mining Communications APC"; pixel_x = 1; pixel_y = 25},/turf/open/floor/plasteel{icon_state = "dark"},/area/mine/maintenance) -"hj" = (/obj/machinery/telecomms/relay/preset/mining,/obj/machinery/light/small{dir = 1},/turf/open/floor/plasteel{icon_state = "vault"; dir = 1},/area/mine/maintenance) -"hk" = (/obj/machinery/airalarm{pixel_y = 24},/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/open/floor/plasteel{icon_state = "dark"},/area/mine/maintenance) -"hl" = (/obj/structure/alien/resin/wall,/turf/open/floor/plating/airless,/area/mine/abandoned) -"hm" = (/obj/structure/alien/weeds,/turf/open/floor/plasteel/airless{icon_state = "floorgrime"},/area/mine/abandoned) -"hn" = (/obj/effect/decal/remains/xeno,/turf/open/floor/plasteel/airless,/area/mine/abandoned) -"ho" = (/obj/structure/alien/weeds,/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/mine/abandoned) -"hp" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/open/floor/bluegrid,/area/mine/maintenance) -"hq" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple{dir = 6},/turf/open/floor/plasteel{icon_state = "dark"},/area/mine/maintenance) -"hr" = (/obj/machinery/atmospherics/pipe/simple/general/hidden{dir = 9},/obj/machinery/light_switch{pixel_y = -25},/turf/open/floor/bluegrid,/area/mine/maintenance) -"hs" = (/obj/machinery/camera{c_tag = "Communications Relay"; dir = 8; network = list("MINE")},/turf/open/floor/bluegrid,/area/mine/maintenance) -"ht" = (/turf/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored) -"hu" = (/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris,/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris,/turf/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored) -"hv" = (/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/libertycap,/turf/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored) -"hw" = (/turf/closed/wall,/area/mine/living_quarters) -"hx" = (/obj/machinery/door/airlock/maintenance{name = "Mining Station Communications"; req_access_txt = "48"},/obj/machinery/atmospherics/pipe/simple,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel{icon_state = "vault"},/area/mine/maintenance) -"hy" = (/obj/item/clothing/under/rank/miner,/obj/effect/decal/remains/human,/turf/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored) -"hz" = (/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris,/turf/open/floor/plasteel/airless{icon_state = "asteroidfloor"},/area/mine/explored) -"hA" = (/obj/structure/bed,/obj/item/weapon/bedsheet/brown,/turf/open/floor/carpet,/area/mine/living_quarters) -"hB" = (/obj/machinery/light/small{dir = 4},/obj/machinery/button/door{id = "miningdorm1"; name = "Door Bolt Control"; normaldoorcontrol = 1; pixel_x = 25; pixel_y = 0; req_access_txt = "0"; specialfunctions = 4},/turf/open/floor/carpet,/area/mine/living_quarters) -"hC" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple,/turf/open/floor/plasteel,/area/mine/living_quarters) -"hD" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/mine/abandoned) -"hE" = (/obj/structure/table,/turf/open/floor/carpet,/area/mine/living_quarters) -"hF" = (/turf/open/floor/carpet,/area/mine/living_quarters) -"hG" = (/obj/machinery/door/airlock{id_tag = "miningdorm1"; name = "Room 1"},/turf/open/floor/plasteel,/area/mine/living_quarters) -"hH" = (/obj/structure/disposalpipe/trunk,/obj/structure/disposaloutlet{dir = 1},/turf/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored) -"hI" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple,/obj/machinery/light/small{dir = 4},/turf/open/floor/plasteel,/area/mine/living_quarters) -"hJ" = (/obj/machinery/door/airlock/glass,/turf/open/floor/plasteel/airless{icon_state = "asteroidfloor"},/area/mine/abandoned) -"hK" = (/obj/machinery/light/small{dir = 4},/obj/machinery/button/door{id = "miningdorm2"; name = "Door Bolt Control"; normaldoorcontrol = 1; pixel_x = 25; pixel_y = 0; req_access_txt = "0"; specialfunctions = 4},/turf/open/floor/carpet,/area/mine/living_quarters) -"hL" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/mine/living_quarters) -"hM" = (/turf/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/west_outpost) -"hN" = (/obj/machinery/door/airlock{id_tag = "miningdorm2"; name = "Room 2"},/turf/open/floor/plasteel,/area/mine/living_quarters) -"hO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shard,/turf/open/floor/plating/airless,/area/mine/abandoned) -"hP" = (/obj/machinery/mech_bay_recharge_port,/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plasteel/airless{icon_state = "asteroidfloor"},/area/mine/west_outpost) -"hQ" = (/turf/open/floor/mech_bay_recharge_floor/airless,/area/mine/west_outpost) -"hR" = (/obj/machinery/computer/mech_bay_power_console,/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel/airless{icon_state = "asteroidfloor"},/area/mine/west_outpost) -"hS" = (/obj/structure/disposalpipe/segment,/obj/structure/sign/deathsposal,/turf/closed/wall,/area/mine/living_quarters) -"hT" = (/turf/closed/wall,/area/mine/west_outpost) -"hU" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/mine/west_outpost) -"hV" = (/obj/machinery/light/small{dir = 8},/turf/open/floor/plating/asteroid/airless,/area/mine/west_outpost) -"hW" = (/obj/machinery/computer/arcade,/turf/open/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters) -"hX" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 1},/turf/open/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters) -"hY" = (/obj/machinery/vending/cigarette,/obj/machinery/newscaster{pixel_y = 32},/turf/open/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters) -"hZ" = (/obj/machinery/vending/snack,/turf/open/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters) -"ia" = (/obj/machinery/light/small{dir = 4},/obj/machinery/button/door{id = "miningdorm3"; name = "Door Bolt Control"; normaldoorcontrol = 1; pixel_x = 25; pixel_y = 0; req_access_txt = "0"; specialfunctions = 4},/turf/open/floor/carpet,/area/mine/living_quarters) -"ib" = (/obj/structure/table,/obj/item/weapon/pickaxe,/turf/open/floor/plasteel,/area/mine/west_outpost) -"ic" = (/obj/machinery/newscaster{pixel_y = 32},/turf/open/floor/plasteel,/area/mine/west_outpost) -"id" = (/obj/structure/table,/obj/machinery/microwave,/turf/open/floor/plasteel,/area/mine/west_outpost) -"ie" = (/obj/machinery/recharge_station,/turf/open/floor/plasteel{icon_state = "bot"},/area/mine/west_outpost) -"if" = (/obj/structure/tank_dispenser/oxygen,/turf/open/floor/plasteel{icon_state = "bot"},/area/mine/west_outpost) -"ig" = (/obj/structure/rack,/obj/machinery/light{dir = 1},/turf/open/floor/plasteel{icon_state = "bot"},/area/mine/west_outpost) -"ih" = (/obj/structure/rack,/turf/open/floor/plasteel{icon_state = "bot"},/area/mine/west_outpost) -"ii" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/trunk,/obj/machinery/door/window/northleft{dir = 2; name = "Pneumatic Tube Access"},/obj/machinery/disposal/deliveryChute{pixel_y = 5},/turf/open/floor/plasteel{icon_state = "bot"},/area/mine/west_outpost) -"ij" = (/turf/open/floor/plasteel,/area/mine/west_outpost) -"ik" = (/turf/open/floor/plasteel{dir = 4; icon_state = "warning"},/area/mine/west_outpost) -"il" = (/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; pixel_y = 32},/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/mine/west_outpost) -"im" = (/obj/structure/table,/obj/machinery/microwave{pixel_y = 6},/turf/open/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters) -"in" = (/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 0; pixel_y = 32},/turf/open/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters) -"io" = (/turf/open/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters) -"ip" = (/obj/structure/chair,/turf/open/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters) -"iq" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 31},/turf/open/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters) -"ir" = (/obj/machinery/door/airlock{id_tag = "miningdorm3"; name = "Room 3"},/turf/open/floor/plasteel,/area/mine/living_quarters) -"is" = (/obj/structure/ore_box,/turf/open/floor/plasteel,/area/mine/living_quarters) -"it" = (/obj/machinery/recharge_station,/obj/machinery/light/small{dir = 1},/turf/open/floor/plasteel,/area/mine/living_quarters) -"iu" = (/obj/structure/closet/secure_closet/miner,/turf/open/floor/plasteel,/area/mine/living_quarters) -"iv" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/closed/wall,/area/mine/eva) -"iw" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/closed/wall,/area/mine/eva) -"ix" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/mine/eva) -"iy" = (/turf/closed/wall,/area/mine/eva) -"iz" = (/obj/structure/table,/obj/item/weapon/shovel,/turf/open/floor/plasteel,/area/mine/west_outpost) -"iA" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets,/turf/open/floor/plasteel,/area/mine/west_outpost) -"iB" = (/turf/open/floor/plasteel{dir = 1; icon_state = "warning"},/area/mine/west_outpost) -"iC" = (/obj/structure/disposalpipe/segment,/turf/open/floor/plasteel{dir = 1; icon_state = "warning"},/area/mine/west_outpost) -"iD" = (/obj/machinery/door/airlock/external{name = "Mining West Outpost Airlock"; req_access_txt = "54"},/turf/open/floor/plasteel,/area/mine/west_outpost) -"iE" = (/obj/machinery/door/airlock/external{name = "Mining West Outpost Airlock"; req_access_txt = "54"},/turf/open/floor/plasteel/airless{icon_state = "asteroidfloor"},/area/mine/west_outpost) -"iF" = (/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 4},/area/mine/explored) -"iG" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/beer,/obj/item/weapon/reagent_containers/food/drinks/beer,/turf/open/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters) -"iH" = (/obj/structure/chair{dir = 4},/turf/open/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters) -"iI" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/beer,/turf/open/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters) -"iJ" = (/obj/structure/chair{dir = 8},/turf/open/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters) -"iK" = (/obj/machinery/light{dir = 4},/turf/open/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters) -"iL" = (/turf/open/floor/plasteel,/area/mine/living_quarters) -"iM" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/open/floor/plasteel,/area/mine/living_quarters) -"iN" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/table,/obj/item/weapon/pickaxe,/turf/open/floor/plasteel,/area/mine/eva) -"iO" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/suit_storage_unit/mining/eva,/turf/open/floor/plasteel,/area/mine/eva) -"iP" = (/obj/machinery/suit_storage_unit/mining/eva,/turf/open/floor/plasteel,/area/mine/eva) -"iQ" = (/obj/machinery/light,/turf/open/floor/plating/asteroid/airless,/area/mine/explored) -"iR" = (/obj/structure/table,/obj/item/weapon/storage/backpack/satchel,/obj/item/clothing/glasses/meson,/obj/machinery/light/small{dir = 8},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/turf/open/floor/plasteel,/area/mine/west_outpost) -"iS" = (/obj/machinery/door/airlock/glass_mining{name = "Break Room"; req_access_txt = "54"},/turf/open/floor/plasteel,/area/mine/west_outpost) -"iT" = (/obj/structure/disposalpipe/segment,/turf/open/floor/plasteel,/area/mine/west_outpost) -"iU" = (/obj/structure/closet/emcloset,/turf/open/floor/plasteel,/area/mine/west_outpost) -"iV" = (/obj/structure/ore_box,/turf/open/floor/plasteel{dir = 4; icon_state = "warning"},/area/mine/west_outpost) -"iW" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets,/turf/open/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters) -"iX" = (/obj/machinery/camera{c_tag = "Crew Area"; dir = 1; network = list("MINE")},/turf/open/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters) -"iY" = (/obj/item/weapon/cigbutt,/turf/open/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters) -"iZ" = (/obj/machinery/airalarm{pixel_y = 24},/turf/open/floor/plasteel,/area/mine/living_quarters) -"ja" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/open/floor/plasteel,/area/mine/living_quarters) -"jb" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/open/floor/plasteel,/area/mine/living_quarters) -"jc" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple,/turf/open/floor/plasteel,/area/mine/living_quarters) -"jd" = (/obj/machinery/mineral/equipment_vendor,/turf/open/floor/plasteel,/area/mine/living_quarters) -"je" = (/obj/machinery/camera{c_tag = "Storage Room"; dir = 1; network = list("MINE")},/turf/open/floor/plasteel,/area/mine/living_quarters) -"jf" = (/obj/machinery/atmospherics/pipe/simple,/turf/open/floor/plasteel,/area/mine/living_quarters) -"jg" = (/turf/closed/wall,/area/mine/production) -"jh" = (/obj/structure/disposalpipe/segment,/turf/closed/wall,/area/mine/production) -"ji" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/mine/production) -"jj" = (/obj/machinery/atmospherics/pipe/simple{dir = 6},/obj/machinery/camera{c_tag = "EVA"; dir = 4; network = list("MINE")},/obj/machinery/airalarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/table,/obj/item/device/gps/mining,/obj/item/device/gps/mining,/obj/item/device/gps/mining,/obj/item/device/gps/mining,/turf/open/floor/plasteel,/area/mine/eva) -"jk" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/structure/disposalpipe/segment,/turf/open/floor/plasteel,/area/mine/eva) -"jl" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/open/floor/plasteel,/area/mine/eva) -"jm" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/obj/machinery/light_switch{pixel_x = 27},/turf/open/floor/plasteel,/area/mine/eva) -"jn" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical,/turf/open/floor/plasteel,/area/mine/west_outpost) -"jo" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; layer = 2.4; on = 1},/turf/open/floor/plasteel,/area/mine/west_outpost) -"jp" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/mine/west_outpost) -"jq" = (/obj/machinery/atmospherics/pipe/manifold{dir = 1},/turf/open/floor/plasteel,/area/mine/west_outpost) -"jr" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/open/floor/plasteel,/area/mine/west_outpost) -"js" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/open/floor/plasteel,/area/mine/west_outpost) -"jt" = (/obj/machinery/conveyor_switch{id = "mining_west"},/obj/structure/disposalpipe/segment,/turf/open/floor/plasteel,/area/mine/west_outpost) -"ju" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple,/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/mine/living_quarters) -"jv" = (/obj/machinery/door/airlock/glass{name = "Crew Area"; req_access_txt = "48"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel,/area/mine/living_quarters) -"jw" = (/obj/machinery/atmospherics/pipe/simple,/obj/machinery/door/airlock/mining{name = "Mining Station Storage"; req_access_txt = "48"},/turf/open/floor/plasteel,/area/mine/living_quarters) -"jx" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/northleft{dir = 2; name = "Pneumatic Tube Access"},/obj/machinery/disposal/deliveryChute{pixel_y = 5},/obj/structure/disposalpipe/trunk{dir = 1},/turf/open/floor/plasteel{icon_state = "bot"; dir = 1},/area/mine/production) -"jy" = (/obj/structure/closet/crate,/turf/open/floor/plasteel{icon_state = "bot"; dir = 1},/area/mine/production) -"jz" = (/obj/machinery/atmospherics/pipe/simple{dir = 6},/obj/structure/closet/crate,/turf/open/floor/plasteel{icon_state = "bot"; dir = 1},/area/mine/production) -"jA" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/mine/eva) -"jB" = (/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/general/hidden{dir = 9},/turf/open/floor/plasteel,/area/mine/eva) -"jC" = (/obj/structure/disposalpipe/segment,/turf/open/floor/plasteel,/area/mine/eva) -"jD" = (/turf/open/floor/plasteel,/area/mine/eva) -"jE" = (/obj/structure/tank_dispenser/oxygen,/turf/open/floor/plasteel,/area/mine/eva) -"jF" = (/obj/machinery/light/small{dir = 1},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/eva) -"jG" = (/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/open/floor/plasteel{dir = 4; icon_state = "warning"},/area/mine/eva) -"jH" = (/obj/structure/reagent_dispensers/fueltank,/turf/open/floor/plasteel,/area/mine/west_outpost) -"jI" = (/obj/structure/chair{dir = 1},/turf/open/floor/plasteel,/area/mine/west_outpost) -"jJ" = (/obj/machinery/power/apc{dir = 2; name = "Mining West Outpost APC"; pixel_x = 1; pixel_y = -23},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/atmospherics/pipe/simple,/turf/open/floor/plasteel,/area/mine/west_outpost) -"jK" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/camera{c_tag = "West Outpost"; dir = 1; network = list("MINE")},/turf/open/floor/plasteel,/area/mine/west_outpost) -"jL" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/open/floor/plasteel,/area/mine/west_outpost) -"jM" = (/obj/machinery/airalarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/open/floor/plasteel,/area/mine/west_outpost) -"jN" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/open/floor/plasteel{dir = 4; icon_state = "loadingarea"},/area/mine/west_outpost) -"jO" = (/obj/machinery/mineral/unloading_machine{dir = 2; output_dir = 4},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/west_outpost) -"jP" = (/obj/machinery/conveyor{dir = 4; id = "mining_west"},/obj/machinery/light/small{dir = 1},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/west_outpost) -"jQ" = (/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/disposal/deliveryChute{dir = 8},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/west_outpost) -"jR" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/mine/west_outpost) -"jS" = (/obj/structure/toilet{dir = 4},/turf/open/floor/plasteel{icon_state = "showroomfloor"},/area/mine/living_quarters) -"jT" = (/obj/structure/sink{pixel_y = 30},/obj/machinery/light/small,/obj/structure/mirror{pixel_y = -32},/turf/open/floor/plasteel{icon_state = "showroomfloor"},/area/mine/living_quarters) -"jU" = (/obj/machinery/door/airlock{name = "Toilet"},/turf/open/floor/plasteel{icon_state = "showroomfloor"},/area/mine/living_quarters) -"jV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel,/area/mine/living_quarters) -"jW" = (/obj/machinery/power/apc{dir = 1; name = "Mining Station Port Wing APC"; pixel_x = 1; pixel_y = 25},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/open/floor/plasteel,/area/mine/living_quarters) -"jX" = (/obj/machinery/camera{c_tag = "Crew Area Hallway"; network = list("MINE")},/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/turf/open/floor/plasteel,/area/mine/living_quarters) -"jY" = (/turf/open/floor/plasteel{dir = 5; icon_state = "warning"},/area/mine/living_quarters) -"jZ" = (/obj/structure/window/reinforced,/obj/structure/lattice,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/open/space,/area/mine/living_quarters) -"ka" = (/obj/structure/window/reinforced,/obj/structure/lattice,/turf/open/space,/area/mine/living_quarters) -"kb" = (/obj/structure/window/reinforced,/obj/structure/lattice,/turf/open/space,/area/mine/production) -"kc" = (/turf/open/floor/plasteel{dir = 9; icon_state = "warning"},/area/mine/production) -"kd" = (/turf/open/floor/plasteel{dir = 1; icon_state = "warning"},/area/mine/production) -"ke" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/open/floor/plasteel{dir = 1; icon_state = "warning"},/area/mine/production) -"kf" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple,/turf/open/floor/plasteel{dir = 5; icon_state = "warning"},/area/mine/production) -"kg" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/door/airlock/glass_mining{name = "Mining Station EVA"; req_access_txt = "54"},/turf/open/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/mine/eva) -"kh" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/open/floor/plasteel,/area/mine/eva) -"ki" = (/obj/machinery/door/airlock/external{name = "Mining External Airlock"; req_access_txt = "54"},/turf/open/floor/plasteel,/area/mine/eva) -"kj" = (/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/eva) -"kk" = (/turf/open/floor/plasteel{dir = 4; icon_state = "warning"},/area/mine/eva) -"kl" = (/obj/machinery/door/airlock/external{name = "Mining External Airlock"; req_access_txt = "54"},/turf/open/floor/plasteel/airless{icon_state = "asteroidfloor"},/area/mine/eva) -"km" = (/obj/machinery/atmospherics/pipe/simple,/turf/closed/wall,/area/mine/west_outpost) -"kn" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"},/turf/closed/wall,/area/mine/west_outpost) -"ko" = (/obj/machinery/door/airlock/maintenance{name = "Mining Station Maintenance"; req_access_txt = "54"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/open/floor/plating,/area/mine/west_outpost) -"kp" = (/obj/machinery/conveyor{backwards = 2; dir = 2; forwards = 1; id = "mining_west"},/obj/structure/plasticflaps/mining,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/open/floor/plasteel,/area/mine/west_outpost) -"kq" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/closed/wall,/area/mine/west_outpost) -"kr" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/open/floor/plasteel,/area/mine/living_quarters) -"ks" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/open/floor/plasteel,/area/mine/living_quarters) -"kt" = (/obj/machinery/atmospherics/pipe/simple,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/open/floor/plasteel,/area/mine/living_quarters) -"ku" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple,/turf/open/floor/plasteel,/area/mine/living_quarters) -"kv" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/open/floor/plasteel,/area/mine/living_quarters) -"kw" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/open/floor/plasteel,/area/mine/living_quarters) -"kx" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple,/turf/open/floor/plasteel,/area/mine/living_quarters) -"ky" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/open/floor/plasteel{dir = 4; icon_state = "warning"},/area/mine/living_quarters) -"kz" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/door/airlock/glass_mining{name = "Mining Station Bridge"; req_access_txt = "48"},/turf/open/floor/plasteel,/area/mine/living_quarters) -"kA" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/open/floor/plasteel,/area/mine/living_quarters) -"kB" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/open/floor/plasteel,/area/mine/production) -"kC" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/door/airlock/glass_mining{name = "Mining Station Bridge"; req_access_txt = "48"},/turf/open/floor/plasteel,/area/mine/production) -"kD" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/open/floor/plasteel{dir = 8; icon_state = "warning"},/area/mine/production) -"kE" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; layer = 2.4; on = 1},/turf/open/floor/plasteel,/area/mine/production) -"kF" = (/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{dir = 4},/turf/open/floor/plasteel,/area/mine/production) -"kG" = (/obj/machinery/atmospherics/pipe/manifold{dir = 4},/turf/open/floor/plasteel{dir = 4; icon_state = "warning"},/area/mine/production) -"kH" = (/obj/machinery/power/apc{dir = 2; name = "Mining EVA APC"; pixel_x = 1; pixel_y = -23},/obj/structure/cable,/obj/structure/table,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/weapon/hand_labeler,/turf/open/floor/plasteel,/area/mine/eva) -"kI" = (/obj/machinery/mech_bay_recharge_port,/obj/structure/disposalpipe/segment,/turf/open/floor/plating,/area/mine/eva) -"kJ" = (/turf/open/floor/mech_bay_recharge_floor,/area/mine/eva) -"kK" = (/obj/machinery/computer/mech_bay_power_console,/turf/open/floor/plasteel,/area/mine/eva) -"kL" = (/obj/structure/closet/emcloset,/turf/open/floor/plasteel,/area/mine/eva) -"kM" = (/obj/structure/ore_box,/turf/open/floor/plasteel{dir = 4; icon_state = "warning"},/area/mine/eva) -"kN" = (/obj/machinery/atmospherics/pipe/simple,/obj/machinery/meter,/turf/open/floor/plating,/area/mine/west_outpost) -"kO" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/open/floor/plating,/area/mine/west_outpost) -"kP" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/open/floor/plating,/area/mine/west_outpost) -"kQ" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/obj/item/weapon/storage/box/lights/bulbs,/turf/open/floor/plating,/area/mine/west_outpost) -"kR" = (/obj/structure/alien/weeds/node,/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/mine/abandoned) -"kS" = (/obj/effect/decal/remains/human,/obj/structure/alien/weeds,/turf/open/floor/plasteel/airless,/area/mine/abandoned) -"kT" = (/obj/machinery/atmospherics/pipe/manifold{dir = 8},/turf/open/floor/plasteel,/area/mine/living_quarters) -"kU" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/open/floor/plasteel,/area/mine/living_quarters) -"kV" = (/obj/machinery/atmospherics/pipe/manifold,/turf/open/floor/plasteel,/area/mine/living_quarters) -"kW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/open/floor/plasteel,/area/mine/living_quarters) -"kX" = (/obj/machinery/atmospherics/pipe/manifold{dir = 1},/turf/open/floor/plasteel,/area/mine/living_quarters) -"kY" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/machinery/light,/turf/open/floor/plasteel,/area/mine/living_quarters) -"kZ" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/open/floor/plasteel{dir = 6; icon_state = "warning"},/area/mine/living_quarters) -"la" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/mine/living_quarters) -"lb" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/open/space,/area/mine/living_quarters) -"lc" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/open/space,/area/mine/production) -"ld" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/machinery/light{dir = 4},/turf/open/space,/area/mine/production) -"le" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/mine/production) -"lf" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/open/floor/plasteel{dir = 10; icon_state = "warning"},/area/mine/production) -"lg" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/open/floor/plasteel{icon_state = "warningcorner"; dir = 1},/area/mine/production) -"lh" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/open/floor/plasteel,/area/mine/production) -"li" = (/obj/machinery/atmospherics/pipe/manifold{dir = 4},/obj/machinery/airalarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/open/floor/plasteel{dir = 4; icon_state = "warning"},/area/mine/production) -"lj" = (/obj/structure/rack,/turf/open/floor/plasteel/airless{icon_state = "asteroidfloor"},/area/mine/abandoned) -"lk" = (/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/production) -"ll" = (/obj/machinery/conveyor_switch{id = "mining_external"},/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/production) -"lm" = (/turf/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/production) -"ln" = (/obj/machinery/atmospherics/components/unary/tank/air{dir = 1; initialize_directions = 0; level = 1},/turf/open/floor/plating,/area/mine/west_outpost) -"lo" = (/obj/machinery/power/port_gen/pacman{anchored = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/open/floor/plating,/area/mine/west_outpost) -"lp" = (/obj/machinery/power/terminal{dir = 4},/obj/machinery/light/small,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/open/floor/plating,/area/mine/west_outpost) -"lq" = (/obj/structure/cable,/obj/machinery/power/smes{charge = 5e+006},/turf/open/floor/plating,/area/mine/west_outpost) -"lr" = (/obj/machinery/atmospherics/pipe/simple,/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Infirmary"; req_access_txt = "0"},/turf/open/floor/plasteel{icon_state = "whitebluefull"},/area/mine/living_quarters) -"ls" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"},/turf/closed/wall,/area/mine/living_quarters) -"lt" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/door/airlock/maintenance{name = "Mining Station Maintenance"; req_access_txt = "48"},/turf/open/floor/plating,/area/mine/living_quarters) -"lu" = (/obj/machinery/atmospherics/pipe/simple,/turf/closed/wall,/area/mine/living_quarters) -"lv" = (/obj/machinery/door/airlock/external{name = "Mining External Airlock"; req_access_txt = "54"},/turf/open/floor/plasteel,/area/mine/living_quarters) -"lw" = (/turf/open/floor/plasteel{dir = 8; icon_state = "warning"},/area/mine/production) -"lx" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/open/floor/plasteel,/area/mine/production) -"ly" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple,/turf/open/floor/plasteel{dir = 4; icon_state = "warning"},/area/mine/production) -"lz" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/airlock{name = "Closet"; req_access_txt = "0"},/turf/open/floor/plating,/area/mine/production) -"lA" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light/small{dir = 1},/turf/open/floor/plating{icon_state = "warnplate"; dir = 8},/area/mine/production) -"lB" = (/obj/structure/disposalpipe/junction{dir = 8; icon_state = "pipe-j1"},/obj/machinery/space_heater,/turf/open/floor/plating,/area/mine/production) -"lC" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/closed/wall,/area/mine/production) -"lD" = (/obj/machinery/disposal/deliveryChute{dir = 4},/obj/structure/disposalpipe/trunk{dir = 8},/turf/open/floor/plating{icon_state = "warnplate"; dir = 8},/area/mine/production) -"lE" = (/obj/machinery/conveyor{dir = 4; id = "mining_external"},/turf/open/floor/plating,/area/mine/production) -"lF" = (/obj/machinery/conveyor{dir = 4; id = "mining_external"},/turf/open/floor/plating{icon_state = "warnplate"; dir = 4},/area/mine/production) -"lG" = (/obj/machinery/conveyor{dir = 4; id = "mining_external"},/obj/structure/plasticflaps/mining,/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/production) -"lH" = (/obj/machinery/conveyor{dir = 4; id = "mining_external"},/turf/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/production) -"lI" = (/obj/machinery/light/small{dir = 8},/obj/machinery/airalarm{frequency = 1439; pixel_y = 23},/turf/open/floor/plasteel{dir = 1; icon_state = "whiteblue"},/area/mine/living_quarters) -"lJ" = (/turf/open/floor/plasteel{dir = 1; icon_state = "whiteblue"},/area/mine/living_quarters) -"lK" = (/obj/machinery/atmospherics/pipe/simple,/turf/open/floor/plasteel{dir = 1; icon_state = "whiteblue"},/area/mine/living_quarters) -"lL" = (/turf/open/floor/plasteel{dir = 5; icon_state = "whiteblue"},/area/mine/living_quarters) -"lM" = (/obj/machinery/power/smes{charge = 5e+006},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/open/floor/plating,/area/mine/living_quarters) -"lN" = (/obj/effect/spawner/lootdrop/crate_spawner,/turf/open/floor/plasteel/airless{icon_state = "asteroidfloor"},/area/mine/abandoned) -"lO" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/open/floor/plating,/area/mine/living_quarters) -"lP" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/light/small{dir = 1},/obj/structure/closet/crate/secure/loot,/turf/open/floor/plating,/area/mine/living_quarters) -"lQ" = (/turf/open/floor/plating,/area/mine/living_quarters) -"lR" = (/obj/structure/closet/emcloset,/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/living_quarters) -"lS" = (/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/living_quarters) -"lT" = (/obj/machinery/light/small{dir = 4},/turf/open/floor/plasteel,/area/mine/living_quarters) -"lU" = (/obj/structure/sign/xeno_warning_mining,/turf/closed/wall,/area/mine/living_quarters) -"lV" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/turf/open/floor/plasteel{dir = 8; icon_state = "warning"},/area/mine/production) -"lW" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/open/floor/plasteel,/area/mine/production) -"lX" = (/obj/machinery/atmospherics/pipe/simple,/obj/machinery/status_display{layer = 4; pixel_x = 32; pixel_y = 0},/turf/open/floor/plasteel{dir = 4; icon_state = "warning"},/area/mine/production) -"lY" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/production) -"lZ" = (/obj/structure/rack,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/regular{pixel_x = -3; pixel_y = -3},/turf/open/floor/plating,/area/mine/living_quarters) -"ma" = (/obj/machinery/iv_drip,/turf/open/floor/plasteel{icon_state = "white"},/area/mine/living_quarters) -"mb" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/obj/machinery/camera{c_tag = "Sleeper Room"; dir = 1; network = list("MINE")},/turf/open/floor/plasteel{icon_state = "white"},/area/mine/living_quarters) -"mc" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty{pixel_x = -3; pixel_y = -3},/obj/item/weapon/reagent_containers/blood/AMinus,/obj/item/weapon/reagent_containers/blood/BMinus{pixel_x = -4; pixel_y = 4},/obj/item/weapon/reagent_containers/blood/BPlus{pixel_x = 1; pixel_y = 2},/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OPlus{pixel_x = -2; pixel_y = -1},/obj/item/weapon/reagent_containers/blood/random,/obj/item/weapon/reagent_containers/blood/random,/obj/item/weapon/reagent_containers/blood/random,/turf/open/floor/plasteel{icon_state = "white"},/area/mine/living_quarters) -"md" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/open/floor/plating,/area/mine/living_quarters) +"aL" = (/obj/structure/table,/turf/open/floor/plasteel/airless{icon_state = "floorscorched1"},/area/mine/abandoned) +"aM" = (/obj/structure/alien/weeds,/turf/open/floor/plasteel/airless{icon_state = "damaged3"},/area/mine/abandoned) +"aN" = (/obj/structure/alien/weeds,/turf/open/floor/plating/airless,/area/mine/abandoned) +"aO" = (/obj/item/stack/rods,/turf/open/floor/plating/airless,/area/mine/abandoned) +"aP" = (/obj/item/weapon/shard{icon_state = "small"},/turf/open/floor/plating/airless,/area/mine/abandoned) +"aQ" = (/turf/open/floor/plasteel/airless{icon_state = "floorscorched1"},/area/mine/abandoned) +"aR" = (/turf/open/floor/plasteel/airless{icon_state = "floorscorched2"},/area/mine/abandoned) +"aS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/mine/abandoned) +"aT" = (/obj/structure/alien/weeds/node,/turf/open/floor/plating/airless,/area/mine/abandoned) +"aU" = (/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/obj/structure/alien/weeds,/turf/open/floor/plating/airless,/area/mine/abandoned) +"aV" = (/obj/item/weapon/shard,/obj/structure/lattice,/turf/open/space,/area/space) +"aW" = (/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/mine/abandoned) +"aX" = (/obj/structure/alien/weeds,/turf/open/floor/plasteel/airless{icon_state = "floorscorched2"},/area/mine/abandoned) +"aY" = (/obj/effect/decal/remains/xeno,/obj/structure/alien/weeds,/turf/open/floor/plating/airless,/area/mine/abandoned) +"aZ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/mine/abandoned) +"ba" = (/obj/item/weapon/shard,/turf/open/floor/plating/airless,/area/mine/abandoned) +"bb" = (/obj/structure/lattice,/obj/item/weapon/shard{icon_state = "small"},/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/open/space,/area/mine/abandoned) +"bc" = (/obj/structure/lattice,/turf/open/space,/area/mine/abandoned) +"bd" = (/obj/machinery/door/airlock/hatch,/turf/open/floor/plasteel/airless,/area/mine/abandoned) +"be" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/mine/abandoned) +"bf" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plating/airless,/area/mine/abandoned) +"bg" = (/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/mine/abandoned) +"bh" = (/obj/effect/decal/remains/xeno,/turf/open/floor/plasteel/airless{icon_state = "floorscorched2"},/area/mine/abandoned) +"bi" = (/obj/structure/alien/weeds,/turf/open/floor/plasteel/airless{icon_state = "floorscorched1"},/area/mine/abandoned) +"bj" = (/obj/effect/decal/remains/xeno,/obj/structure/alien/weeds,/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/mine/abandoned) +"bk" = (/obj/structure/table,/turf/open/floor/plasteel/airless,/area/mine/abandoned) +"bl" = (/obj/structure/rack,/turf/open/floor/plasteel/airless,/area/mine/abandoned) +"bm" = (/obj/effect/decal/remains/human,/turf/open/floor/plasteel/airless{icon_state = "damaged5"},/area/mine/abandoned) +"bn" = (/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/obj/structure/alien/weeds,/turf/open/floor/plasteel/airless{icon_state = "floorscorched1"},/area/mine/abandoned) +"bo" = (/obj/structure/alien/weeds/node,/turf/open/floor/plasteel/airless{icon_state = "floorscorched2"},/area/mine/abandoned) +"bp" = (/obj/structure/table,/obj/structure/alien/weeds,/turf/open/floor/plasteel/airless,/area/mine/abandoned) +"bq" = (/obj/item/weapon/shard,/turf/open/floor/plasteel/airless{icon_state = "floorscorched2"},/area/mine/abandoned) +"br" = (/obj/item/weapon/shard{icon_state = "small"},/obj/structure/alien/weeds,/turf/open/floor/plasteel/airless,/area/mine/abandoned) +"bs" = (/turf/open/floor/plasteel{icon_state = "dark"},/area/mine/abandoned) +"bt" = (/obj/structure/sink{pixel_y = 30},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/abandoned) +"bu" = (/obj/structure/table,/obj/item/weapon/reagent_containers/glass/bucket,/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/abandoned) +"bv" = (/obj/structure/table,/obj/item/weapon/paper/crumpled,/obj/item/seeds/cherry,/obj/item/weapon/reagent_containers/glass/bottle/nutrient/ez,/obj/item/weapon/reagent_containers/glass/bottle/nutrient/ez,/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/abandoned) +"bw" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/plating/airless,/area/mine/abandoned) +"bx" = (/obj/structure/alien/resin/membrane,/obj/structure/alien/weeds,/turf/open/floor/plating/airless,/area/mine/abandoned) +"by" = (/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/obj/structure/alien/weeds,/turf/open/floor/plasteel/airless,/area/mine/abandoned) +"bz" = (/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/abandoned) +"bA" = (/turf/open/floor/plasteel{icon_state = "damaged2"},/area/mine/abandoned) +"bB" = (/obj/machinery/door/airlock/hatch,/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/abandoned) +"bC" = (/obj/structure/alien/weeds,/obj/structure/alien/weeds,/turf/open/floor/plasteel/airless,/area/mine/abandoned) +"bD" = (/obj/structure/alien/weeds/node,/turf/open/floor/plasteel/airless,/area/mine/abandoned) +"bE" = (/obj/effect/decal/remains/xeno,/obj/structure/alien/weeds,/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/mine/abandoned) +"bF" = (/turf/open/floor/plasteel{icon_state = "damaged3"},/area/mine/abandoned) +"bG" = (/obj/effect/decal/remains/human,/obj/item/clothing/suit/xenos,/obj/item/clothing/head/xenos,/turf/open/floor/plasteel{icon_state = "damaged2"},/area/mine/abandoned) +"bH" = (/obj/structure/table,/obj/item/stack/sheet/mineral/sandstone{amount = 30},/turf/open/floor/plasteel{icon_state = "damaged3"},/area/mine/abandoned) +"bI" = (/obj/structure/alien/weeds,/turf/open/floor/plasteel/airless{icon_state = "floorgrime"},/area/mine/abandoned) +"bJ" = (/obj/structure/alien/resin/wall,/turf/open/floor/plating/airless,/area/mine/abandoned) +"bK" = (/obj/effect/decal/remains/xeno,/turf/open/floor/plasteel/airless,/area/mine/abandoned) +"bL" = (/turf/closed/mineral/random/labormineral,/area/mine/unexplored) +"bM" = (/obj/structure/alien/weeds/node,/turf/open/floor/plasteel/airless{icon_state = "floorgrime"},/area/mine/abandoned) +"bN" = (/obj/structure/alien/weeds,/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/mine/abandoned) +"bO" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plating/airless,/area/mine/abandoned) +"bP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shard,/turf/open/floor/plating/airless,/area/mine/abandoned) +"bQ" = (/obj/machinery/door/airlock/glass,/turf/open/floor/plasteel/airless{icon_state = "asteroidfloor"},/area/mine/abandoned) +"bR" = (/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/open/floor/plating/airless,/area/mine/abandoned) +"bS" = (/turf/open/floor/plating/asteroid/airless,/area/mine/explored) +"bT" = (/obj/effect/decal/remains/human,/obj/structure/alien/weeds,/turf/open/floor/plasteel/airless,/area/mine/abandoned) +"bU" = (/obj/structure/alien/weeds/node,/turf/open/floor/plasteel/airless{icon_state = "damaged2"},/area/mine/abandoned) +"bV" = (/turf/open/floor/plasteel/airless{icon_state = "asteroidfloor"},/area/mine/abandoned) +"bW" = (/obj/structure/rack,/turf/open/floor/plasteel/airless{icon_state = "asteroidfloor"},/area/mine/abandoned) +"bX" = (/turf/open/floor/plasteel{icon_plating = "asteroid"; icon_state = "asteroid"; name = "Asteroid"},/area/mine/unexplored) +"bY" = (/obj/item/weapon/rack_parts,/turf/open/floor/plasteel/airless{icon_state = "asteroidfloor"},/area/mine/abandoned) +"bZ" = (/obj/structure/girder/displaced,/turf/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/abandoned) +"ca" = (/obj/item/clothing/under/soviet,/obj/item/clothing/head/ushanka,/turf/open/floor/plasteel{icon_plating = "asteroid"; icon_state = "asteroid"; name = "Asteroid"},/area/mine/unexplored) +"cb" = (/obj/effect/decal/remains/human,/turf/open/floor/plasteel{icon_plating = "asteroid"; icon_state = "asteroid"; name = "Asteroid"},/area/mine/unexplored) +"cc" = (/obj/structure/alien/resin/wall,/turf/open/floor/plasteel/airless{icon_state = "floorgrime"},/area/mine/abandoned) +"cd" = (/turf/open/floor/plasteel/airless{icon_state = "floorgrime"},/area/mine/abandoned) +"ce" = (/obj/structure/girder,/turf/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/abandoned) +"cf" = (/obj/item/weapon/storage/toolbox/syndicate,/obj/structure/alien/weeds/node,/turf/open/floor/plasteel/airless{icon_state = "floorscorched1"},/area/mine/abandoned) +"cg" = (/obj/effect/decal/remains/xeno,/obj/item/clothing/suit/space/syndicate/black/red,/obj/item/clothing/head/helmet/space/syndicate/black/red,/obj/structure/alien/weeds,/turf/open/floor/plasteel/airless{icon_state = "damaged4"},/area/mine/abandoned) +"ch" = (/obj/machinery/door/airlock/external{name = "External Airlock"; req_access_txt = "0"},/turf/open/floor/plasteel/airless{icon_state = "asteroidfloor"},/area/mine/abandoned) +"ci" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/grille/broken,/obj/item/weapon/shard{icon_state = "small"},/obj/item/stack/rods,/turf/open/floor/plating/airless,/area/mine/abandoned) +"cj" = (/turf/open/floor/plating/asteroid/airless,/area/mine/unexplored) +"ck" = (/obj/effect/spawner/lootdrop/crate_spawner,/turf/open/floor/plasteel/airless{icon_state = "asteroidfloor"},/area/mine/abandoned) +"cl" = (/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/abandoned) +"cm" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/abandoned) +"cn" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille/broken,/obj/item/stack/rods,/obj/item/weapon/shard,/turf/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/abandoned) +"co" = (/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/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/abandoned) +"cp" = (/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 10},/area/mine/unexplored) +"cq" = (/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/unexplored) +"cr" = (/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 6},/area/mine/unexplored) +"cs" = (/turf/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"ct" = (/turf/closed/wall/r_wall,/area/mine/laborcamp) +"cu" = (/obj/effect/spawner/lootdrop/crate_spawner,/turf/open/floor/plating/asteroid/airless/cave,/area/mine/unexplored) +"cv" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/mine/laborcamp) +"cw" = (/obj/structure/rack{dir = 1},/obj/item/clothing/glasses/meson,/obj/item/device/flashlight,/obj/item/weapon/storage/bag/ore,/obj/machinery/atmospherics/pipe/simple{dir = 9},/obj/item/weapon/shovel{attack_verb = list("ineffectively hit"); desc = "A large tool for digging and moving dirt. Was modified with extra safety, making it ineffective as a weapon."; force = 1; name = "safety shovel"; pixel_x = -5; throwforce = 1},/obj/item/weapon/pickaxe{attack_verb = list("ineffectively hit"); desc = "A pickaxe designed to be only effective at digging rock and ore, very ineffective as a weapon."; force = 1; name = "safety pickaxe"; pixel_x = 5; throwforce = 1},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) +"cx" = (/obj/structure/rack{dir = 1},/obj/item/clothing/glasses/meson,/obj/item/device/flashlight,/obj/item/weapon/storage/bag/ore,/obj/machinery/atmospherics/pipe/simple{dir = 9},/obj/item/weapon/shovel{attack_verb = list("ineffectively hit"); desc = "A large tool for digging and moving dirt. Was modified with extra safety, making it ineffective as a weapon."; force = 1; name = "safety shovel"; pixel_x = -5; throwforce = 1},/obj/item/weapon/pickaxe{attack_verb = list("ineffectively hit"); desc = "A pickaxe designed to be only effective at digging rock and ore, very ineffective as a weapon."; force = 1; name = "safety pickaxe"; pixel_x = 5; throwforce = 1},/obj/machinery/camera{c_tag = "Labor Camp Storage"; dir = 8; network = list("Labor")},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) +"cy" = (/turf/closed/mineral/random/labormineral,/area/mine/explored) +"cz" = (/obj/machinery/light,/turf/open/floor/plating/asteroid/airless,/area/mine/north_outpost) +"cA" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/o2{pixel_x = 2; pixel_y = 2},/turf/open/floor/plasteel{icon_state = "white"},/area/mine/laborcamp) +"cB" = (/obj/structure/table,/obj/item/device/healthanalyzer,/obj/item/stack/medical/bruise_pack,/turf/open/floor/plasteel{icon_state = "white"},/area/mine/laborcamp) +"cC" = (/obj/structure/sign/bluecross_2{pixel_y = 32},/obj/structure/chair,/turf/open/floor/plasteel{icon_state = "white"},/area/mine/laborcamp) +"cD" = (/obj/machinery/camera{c_tag = "Labor Camp Medical"; dir = 8; network = list("Labor")},/obj/structure/bed,/obj/item/weapon/bedsheet/medical,/turf/open/floor/plasteel{icon_state = "white"},/area/mine/laborcamp) +"cE" = (/turf/closed/wall,/area/mine/laborcamp) +"cF" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) +"cG" = (/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) +"cH" = (/turf/closed/wall,/area/mine/explored) +"cI" = (/turf/open/floor/plating/asteroid,/area/mine/explored) +"cJ" = (/turf/closed/wall/rust,/area/mine/unexplored) +"cK" = (/obj/structure/lattice,/obj/structure/window/reinforced,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/open/space,/area/mine/north_outpost) +"cL" = (/obj/structure/lattice,/obj/structure/window/reinforced,/turf/open/space,/area/mine/explored) +"cM" = (/obj/structure/lattice,/obj/structure/window/reinforced,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/open/space,/area/mine/north_outpost) +"cN" = (/turf/closed/wall/rust,/area/mine/explored) +"cO" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/open/floor/plating/asteroid/airless,/area/mine/north_outpost) +"cP" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/open/floor/plasteel{dir = 2; icon_state = "whiteblue"},/area/mine/laborcamp) +"cQ" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/open/floor/plasteel{dir = 2; icon_state = "whiteblue"},/area/mine/laborcamp) +"cR" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=1-Storage"; location = "Sleeper"},/turf/open/floor/plasteel{dir = 2; icon_state = "whiteblue"},/area/mine/laborcamp) +"cS" = (/obj/machinery/light/small{dir = 4},/obj/structure/bed/roller,/turf/open/floor/plasteel{dir = 2; icon_state = "whiteblue"},/area/mine/laborcamp) +"cT" = (/obj/machinery/atmospherics/pipe/simple,/obj/structure/closet/crate/internals,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/weapon/tank/internals/emergency_oxygen,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) +"cU" = (/obj/machinery/light/small,/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) +"cV" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=2-NMine"; location = "1-Storage"},/mob/living/simple_animal/bot/secbot/beepsky{desc = "Powered by tears and swet of laborer."; name = "Prison Ofitser"},/turf/open/floor/plasteel{icon_state = "asteroidfloor"},/area/mine/laborcamp) +"cW" = (/obj/structure/plasticflaps/mining,/turf/open/floor/plasteel{icon_state = "asteroidfloor"},/area/mine/laborcamp) +"cX" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=3-SMine"; location = "2-NMine"},/turf/open/floor/plasteel{icon_state = "asteroidfloor"},/area/mine/laborcamp) +"cY" = (/turf/open/floor/plating{icon_plating = "asteroidplating"; icon_state = "asteroidplating"},/area/mine/explored) +"cZ" = (/obj/effect/decal/remains/human,/turf/open/floor/plating/asteroid,/area/mine/explored) +"da" = (/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plasteel/airless,/area/mine/explored) +"db" = (/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless{icon_state = "platingdmg3"},/area/mine/explored) +"dc" = (/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless{icon_state = "platingdmg1"},/area/mine/explored) +"dd" = (/obj/structure/window/reinforced{dir = 1},/turf/open/floor/plating/airless,/area/mine/explored) +"de" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple,/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/mine/laborcamp) +"df" = (/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Infirmary"; req_access_txt = "0"},/turf/open/floor/plasteel{icon_state = "whitebluefull"},/area/mine/laborcamp) +"dg" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/mine/laborcamp) +"dh" = (/obj/machinery/atmospherics/pipe/simple,/turf/closed/wall,/area/mine/laborcamp) +"di" = (/obj/machinery/door/airlock{name = "Labor Camp Storage"},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) +"dj" = (/obj/structure/plasticflaps/mining,/turf/open/floor/plating{icon_plating = "asteroidplating"; icon_state = "asteroidplating"},/area/mine/explored) +"dk" = (/turf/closed/wall/r_wall,/area/mine/explored) +"dl" = (/obj/structure/girder/reinforced,/turf/open/floor/plating{icon_plating = "asteroidplating"; icon_state = "asteroidplating"},/area/mine/explored) +"dm" = (/obj/structure/window/reinforced,/turf/open/floor/plasteel/airless,/area/mine/explored) +"dn" = (/obj/structure/window/reinforced,/turf/open/floor/plating/airless,/area/mine/explored) +"do" = (/obj/structure/table,/obj/item/trash/plate,/obj/item/weapon/kitchen/fork,/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) +"dp" = (/obj/effect/decal/cleanable/cobweb2,/obj/structure/chair{dir = 8},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) +"dq" = (/obj/machinery/atmospherics/pipe/simple,/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) +"dr" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) +"ds" = (/obj/machinery/atmospherics/pipe/simple,/obj/item/device/radio/intercom{desc = "Talk through this. It looks like it has been modified to not broadcast."; dir = 2; name = "Prison Intercom (General)"; pixel_x = 0; pixel_y = 24; prison_radio = 1},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) +"dt" = (/obj/machinery/light{dir = 1},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) +"du" = (/turf/open/floor/plasteel{icon_state = "asteroidfloor"},/area/mine/explored) +"dv" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 1},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/open/space,/area/mine/north_outpost) +"dw" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 1},/turf/open/space,/area/mine/explored) +"dx" = (/obj/structure/lattice,/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/open/space,/area/mine/north_outpost) +"dy" = (/turf/closed/wall,/area/mine/north_outpost) +"dz" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"},/turf/closed/wall,/area/mine/north_outpost) +"dA" = (/obj/structure/chair{dir = 1},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) +"dB" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=7-Sleeper"; location = "6-Vending"},/mob/living/simple_animal/mouse,/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) +"dC" = (/obj/machinery/door/airlock{name = "Vending"},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) +"dD" = (/obj/machinery/atmospherics/pipe/simple/general/hidden{dir = 5},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) +"dE" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) +"dF" = (/obj/machinery/atmospherics/pipe/manifold{dir = 4},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) +"dG" = (/obj/machinery/door/poddoor/preopen{id = "Labor"; name = "labor camp blast door"},/obj/machinery/door/airlock{name = "Labor Camp External Access"},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) +"dH" = (/obj/structure/ore_box,/turf/open/floor/plating/asteroid,/area/mine/explored) +"dI" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/port_gen/pacman{anchored = 1},/turf/open/floor/plating,/area/mine/north_outpost) +"dJ" = (/obj/machinery/power/terminal{dir = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/light/small{dir = 1},/turf/open/floor/plating,/area/mine/north_outpost) +"dK" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/smes{charge = 5e+006},/turf/open/floor/plating,/area/mine/north_outpost) +"dL" = (/obj/machinery/atmospherics/components/unary/tank/air,/turf/open/floor/plating,/area/mine/north_outpost) +"dM" = (/obj/machinery/vending/sustenance,/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) +"dN" = (/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; layer = 2.4; on = 1},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) +"dO" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/closed/wall,/area/mine/laborcamp) +"dP" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/machinery/airalarm{dir = 4; pixel_x = -23; pixel_y = 0},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) +"dQ" = (/obj/machinery/flasher{id = "Labor"; pixel_x = 0; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold{dir = 4},/turf/closed/wall,/area/mine/laborcamp) +"dR" = (/obj/machinery/conveyor_switch/oneway{id = "gulag"},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) +"dS" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/open/floor/plasteel{icon_state = "asteroidwarning"},/area/mine/laborcamp) +"dT" = (/turf/open/floor/plasteel{icon_state = "asteroidwarning"},/area/mine/explored) +"dU" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/open/floor/plating,/area/mine/north_outpost) +"dV" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/open/floor/plating,/area/mine/north_outpost) +"dW" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/item/weapon/storage/box/lights/bulbs,/obj/machinery/atmospherics/pipe/simple{dir = 6},/turf/open/floor/plating,/area/mine/north_outpost) +"dX" = (/obj/machinery/atmospherics/pipe/simple/general/hidden{dir = 9},/obj/machinery/meter,/turf/open/floor/plating,/area/mine/north_outpost) +"dY" = (/obj/machinery/light_switch{pixel_x = -27; pixel_y = 0},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) +"dZ" = (/obj/machinery/camera{c_tag = "Labor Camp Central"; network = list("Labor")},/obj/machinery/atmospherics/pipe/manifold{dir = 8},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) +"ea" = (/obj/machinery/atmospherics/pipe/simple/general/hidden{dir = 9},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) +"eb" = (/obj/machinery/conveyor{dir = 2; id = "gulag"},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) +"ec" = (/obj/machinery/conveyor{dir = 8; id = "gulag"},/obj/structure/plasticflaps/mining,/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) +"ed" = (/obj/machinery/conveyor{dir = 8; id = "gulag"},/turf/open/floor/plasteel{icon_state = "asteroidplating"},/area/mine/laborcamp) +"ee" = (/obj/machinery/mineral/unloading_machine{dir = 1; input_dir = 4; output_dir = 8},/turf/open/floor/plasteel{icon_state = "asteroidplating"},/area/mine/laborcamp) +"ef" = (/obj/structure/ore_box,/turf/open/floor/plasteel{icon_state = "asteroidwarning"; dir = 8},/area/mine/explored) +"eg" = (/obj/structure/closet/crate{icon_state = "crateopen"; opened = 1},/turf/open/floor/plating/asteroid,/area/mine/explored) +"eh" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/door/airlock/maintenance{name = "Mining Station Maintenance"; req_access_txt = "54"},/turf/open/floor/plating,/area/mine/north_outpost) +"ei" = (/obj/machinery/atmospherics/pipe/simple,/turf/closed/wall,/area/mine/north_outpost) +"ej" = (/obj/machinery/door/airlock/glass_security{name = "Labor Camp Shuttle Security Airlock"; req_access_txt = "2"},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) +"ek" = (/obj/machinery/light/small{dir = 1},/obj/machinery/button/door{id = "Labor"; name = "Labor Camp Lockdown"; pixel_x = 0; pixel_y = 28; req_access_txt = "2"},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) +"el" = (/obj/machinery/door/poddoor/preopen{id = "Labor"; name = "labor camp blast door"},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) +"em" = (/turf/open/floor/plasteel,/area/mine/laborcamp) +"en" = (/obj/machinery/mineral/processing_unit_console{machinedir = 6},/turf/closed/wall,/area/mine/laborcamp) +"eo" = (/obj/structure/plasticflaps,/obj/machinery/conveyor{dir = 2; id = "gulag"},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) +"ep" = (/obj/machinery/camera{c_tag = "Labor Camp External"; dir = 4; network = list("Labor")},/turf/open/floor/plasteel{icon_state = "asteroidwarning"; dir = 1},/area/mine/explored) +"eq" = (/turf/open/floor/plasteel{icon_state = "asteroidwarning"; dir = 1},/area/mine/explored) +"er" = (/obj/machinery/conveyor_switch/oneway{id = "gulag"},/turf/open/floor/plasteel{icon_state = "asteroidwarning"; dir = 1},/area/mine/explored) +"es" = (/obj/effect/decal/cleanable/blood/old,/turf/open/floor/plating/asteroid,/area/mine/explored) +"et" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/mine/north_outpost) +"eu" = (/obj/structure/table,/obj/item/weapon/pickaxe,/turf/open/floor/plasteel,/area/mine/north_outpost) +"ev" = (/obj/machinery/newscaster{pixel_y = 32},/turf/open/floor/plasteel,/area/mine/north_outpost) +"ew" = (/obj/structure/table,/obj/machinery/microwave,/turf/open/floor/plasteel,/area/mine/north_outpost) +"ex" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/open/floor/plasteel,/area/mine/north_outpost) +"ey" = (/obj/machinery/atmospherics/pipe/simple,/obj/machinery/airalarm{pixel_y = 24},/obj/machinery/light{dir = 1},/turf/open/floor/plasteel,/area/mine/north_outpost) +"ez" = (/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/turf/open/floor/plasteel,/area/mine/north_outpost) +"eA" = (/turf/open/floor/plasteel,/area/mine/north_outpost) +"eB" = (/turf/open/floor/plasteel{dir = 4; icon_state = "loadingarea"},/area/mine/north_outpost) +"eC" = (/obj/machinery/mineral/unloading_machine{dir = 2; output_dir = 4},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/north_outpost) +"eD" = (/obj/machinery/conveyor{dir = 4; id = "mining_north"},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/north_outpost) +"eE" = (/obj/machinery/disposal/deliveryChute{dir = 8},/obj/structure/disposalpipe/trunk,/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/north_outpost) +"eF" = (/obj/machinery/mineral/stacking_unit_console{machinedir = 2},/turf/closed/wall,/area/mine/laborcamp) +"eG" = (/obj/machinery/mineral/processing_unit{dir = 1; output_dir = 2},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) +"eH" = (/obj/machinery/light/small{dir = 4},/turf/open/floor/plating/asteroid,/area/mine/laborcamp) +"eI" = (/obj/machinery/light{dir = 1},/turf/open/floor/plating/asteroid/airless,/area/mine/north_outpost) +"eJ" = (/obj/structure/table,/obj/item/weapon/shovel,/turf/open/floor/plasteel,/area/mine/north_outpost) +"eK" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets,/turf/open/floor/plasteel,/area/mine/north_outpost) +"eL" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/open/floor/plasteel,/area/mine/north_outpost) +"eM" = (/obj/machinery/atmospherics/pipe/simple,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/open/floor/plasteel,/area/mine/north_outpost) +"eN" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "Mining North Outpost APC"; pixel_x = 26; pixel_y = 0},/obj/machinery/conveyor_switch{id = "mining_north"},/obj/machinery/camera{c_tag = "North Outpost"; dir = 8; network = list("MINE")},/turf/open/floor/plasteel{dir = 4; icon_state = "warning"},/area/mine/north_outpost) +"eO" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/closed/wall,/area/mine/north_outpost) +"eP" = (/obj/machinery/conveyor{backwards = 2; dir = 2; forwards = 1; id = "mining_north"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/plasticflaps/mining,/turf/open/floor/plasteel,/area/mine/north_outpost) +"eQ" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/closed/wall,/area/mine/north_outpost) +"eR" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/closed/wall,/area/mine/north_outpost) +"eS" = (/obj/machinery/computer/shuttle/labor/one_way,/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) +"eT" = (/obj/machinery/conveyor{dir = 8; id = "gulag"},/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=6-Vending"; location = "5-Central"},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) +"eU" = (/obj/machinery/mineral/stacking_machine{dir = 1; input_dir = 4},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) +"eV" = (/obj/machinery/conveyor{dir = 8; id = "gulag"},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) +"eW" = (/obj/machinery/conveyor{dir = 10; icon_state = "conveyor0"; id = "gulag"},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp) +"eX" = (/obj/structure/closet/crate,/turf/open/floor/plasteel{icon_state = "asteroidfloor"},/area/mine/explored) +"eY" = (/obj/item/stack/sheet/metal{amount = 5},/obj/structure/closet/crate,/turf/open/floor/plasteel{icon_state = "asteroidfloor"},/area/mine/explored) +"eZ" = (/obj/structure/table,/obj/item/weapon/storage/backpack/satchel,/obj/item/clothing/glasses/meson,/obj/machinery/light/small{dir = 8},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/turf/open/floor/plasteel,/area/mine/north_outpost) +"fa" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; layer = 2.4; on = 1},/turf/open/floor/plasteel,/area/mine/north_outpost) +"fb" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/open/floor/plasteel,/area/mine/north_outpost) +"fc" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/machinery/door/airlock/glass_mining{name = "Break Room"; req_access_txt = "54"},/turf/open/floor/plasteel,/area/mine/north_outpost) +"fd" = (/obj/machinery/atmospherics/pipe/manifold{dir = 4},/turf/open/floor/plasteel,/area/mine/north_outpost) +"fe" = (/turf/open/floor/plasteel{dir = 4; icon_state = "warning"},/area/mine/north_outpost) +"ff" = (/obj/machinery/door/window/northleft{dir = 8; name = "Pneumatic Tube Access"},/obj/machinery/disposal/deliveryChute{dir = 8; pixel_x = 8; pixel_y = 0},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/disposalpipe/trunk{dir = 4},/turf/open/floor/plasteel{icon_state = "bot"},/area/mine/north_outpost) +"fg" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/closed/wall,/area/mine/north_outpost) +"fh" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/disposalpipe/segment,/turf/open/floor/plating,/area/mine/explored) +"fi" = (/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 1},/area/mine/north_outpost) +"fj" = (/obj/machinery/conveyor_switch{id = "mining_north"},/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 1},/area/mine/north_outpost) +"fk" = (/obj/machinery/light/small{dir = 1},/turf/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/north_outpost) +"fl" = (/turf/closed/wall/r_wall,/area/mine/laborcamp/security) +"fm" = (/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp/security) +"fn" = (/obj/machinery/camera{c_tag = "Labor Camp Security Hallway"; dir = 8; network = list("Labor"); pixel_x = 0; pixel_y = 0},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp/security) +"fo" = (/obj/machinery/atmospherics/pipe/simple,/turf/closed/wall,/area/mine/laborcamp/security) +"fp" = (/obj/structure/plasticflaps/mining,/turf/open/floor/plating,/area/mine/laborcamp/security) +"fq" = (/turf/closed/wall,/area/mine/laborcamp/security) +"fr" = (/obj/structure/girder,/turf/open/floor/plating{icon_plating = "asteroidplating"; icon_state = "asteroidplating"},/area/mine/laborcamp/security) +"fs" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical,/turf/open/floor/plasteel,/area/mine/north_outpost) +"ft" = (/obj/structure/chair{dir = 8},/turf/open/floor/plasteel,/area/mine/north_outpost) +"fu" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/open/floor/plasteel,/area/mine/north_outpost) +"fv" = (/obj/structure/rack,/turf/open/floor/plasteel{icon_state = "bot"},/area/mine/north_outpost) +"fw" = (/obj/structure/disposalpipe/segment,/turf/closed/wall,/area/mine/north_outpost) +"fx" = (/obj/docking_port/stationary{dir = 8; dwidth = 2; height = 5; id = "laborcamp_away"; name = "labor camp"; width = 9},/turf/open/space,/area/space) +"fy" = (/obj/machinery/door/airlock/glass_security{name = "Labor Camp Shuttle Prisoner Airlock"; req_access_txt = "0"},/turf/open/floor/plasteel,/area/mine/laborcamp/security) +"fz" = (/obj/machinery/door/airlock/glass_security{name = "Labor Camp Shuttle Prisoner Airlock"; req_access_txt = "0"},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp/security) +"fA" = (/obj/machinery/atmospherics/pipe/simple{dir = 6},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/laborcamp/security) +"fB" = (/obj/machinery/atmospherics/pipe/manifold,/obj/machinery/door/airlock/glass_security{name = "Labor Camp Backroom"; req_access_txt = "2"},/turf/open/floor/plating,/area/mine/laborcamp/security) +"fC" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/open/floor/plating{icon_state = "warnplate"; dir = 8},/area/mine/laborcamp/security) +"fD" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/machinery/light/small{dir = 1},/turf/open/floor/plating,/area/mine/laborcamp/security) +"fE" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/open/floor/plating{dir = 2; icon_state = "warnplate"},/area/mine/laborcamp/security) +"fF" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/apc{dir = 1; name = "Labor Camp APC"; pixel_y = 24},/obj/machinery/atmospherics/pipe/simple{dir = 10},/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=5-Central"; location = "4-Maint"},/turf/open/floor/plating,/area/mine/laborcamp) +"fG" = (/turf/open/floor/plating{icon_state = "warnplate"; dir = 4},/area/mine/laborcamp/security) +"fH" = (/obj/machinery/door/airlock/glass_security{name = "Labor Camp External Access"; req_access_txt = "2"},/turf/open/floor/plating,/area/mine/laborcamp/security) +"fI" = (/obj/structure/reagent_dispensers/fueltank,/turf/open/floor/plasteel,/area/mine/north_outpost) +"fJ" = (/obj/machinery/recharge_station,/turf/open/floor/plasteel,/area/mine/north_outpost) +"fK" = (/obj/structure/tank_dispenser/oxygen,/turf/open/floor/plasteel,/area/mine/north_outpost) +"fL" = (/obj/machinery/door/airlock/glass_security{name = "Labor Camp Monitoring"; req_access_txt = "2"},/turf/open/floor/plasteel,/area/mine/laborcamp/security) +"fM" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"},/turf/closed/wall,/area/mine/laborcamp/security) +"fN" = (/obj/machinery/door/airlock/maintenance{name = "Labor Camp Maintenance"; req_access_txt = "2"},/turf/open/floor/plating,/area/mine/laborcamp/security) +"fO" = (/obj/structure/plasticflaps/mining,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple,/turf/open/floor/plating,/area/mine/laborcamp/security) +"fP" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/open/floor/plasteel{icon_state = "asteroidfloor"},/area/mine/explored) +"fQ" = (/obj/machinery/door/airlock/external{name = "Mining North Outpost Airlock"; req_access_txt = "54"},/turf/open/floor/plasteel,/area/mine/north_outpost) +"fR" = (/obj/machinery/vending/coffee,/turf/open/floor/plasteel,/area/mine/laborcamp/security) +"fS" = (/turf/open/floor/plasteel,/area/mine/laborcamp/security) +"fT" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/light_switch{pixel_y = 28},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/open/floor/plasteel,/area/mine/laborcamp/security) +"fU" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plasteel,/area/mine/laborcamp/security) +"fV" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 4; name = "Labor Camp Security APC"; pixel_x = 24; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple,/obj/machinery/camera{c_tag = "Labor Camp Monitoring"; network = list("Labor")},/obj/machinery/light_switch{pixel_y = 28},/turf/open/floor/plasteel,/area/mine/laborcamp/security) +"fW" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/closed/wall,/area/mine/laborcamp/security) +"fX" = (/obj/machinery/power/smes{charge = 5e+006},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/open/floor/plating,/area/mine/laborcamp/security) +"fY" = (/obj/machinery/light/small{dir = 1},/obj/item/weapon/storage/box/lights/mixed,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plating,/area/mine/laborcamp/security) +"fZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/open/floor/plating{icon_state = "warnplate"; dir = 1},/area/mine/laborcamp/security) +"ga" = (/obj/machinery/atmospherics/pipe/manifold{dir = 8},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/open/floor/plating,/area/mine/laborcamp/security) +"gb" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/open/floor/plating,/area/mine/laborcamp/security) +"gc" = (/obj/structure/plasticflaps/mining,/turf/closed/wall,/area/mine/laborcamp/security) +"gd" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=4-Maint"; location = "3-SMine"},/turf/open/floor/plasteel{icon_state = "asteroidfloor"},/area/mine/laborcamp) +"ge" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/structure/closet/crate,/turf/open/floor/plasteel{icon_state = "asteroidfloor"},/area/mine/explored) +"gf" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/obj/structure/closet/crate,/turf/open/floor/plating/asteroid,/area/mine/explored) +"gg" = (/obj/machinery/mech_bay_recharge_port,/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plasteel/airless{icon_state = "asteroidfloor"},/area/mine/north_outpost) +"gh" = (/turf/open/floor/mech_bay_recharge_floor/airless,/area/mine/north_outpost) +"gi" = (/obj/machinery/computer/mech_bay_power_console,/turf/open/floor/plasteel/airless{icon_state = "asteroidfloor"},/area/mine/north_outpost) +"gj" = (/obj/machinery/light/small{dir = 8},/turf/open/floor/plasteel,/area/mine/north_outpost) +"gk" = (/obj/structure/closet/emcloset,/turf/open/floor/plasteel,/area/mine/north_outpost) +"gl" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"},/turf/closed/wall/r_wall,/area/mine/laborcamp/security) +"gm" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/open/floor/plasteel,/area/mine/laborcamp/security) +"gn" = (/obj/structure/chair/office/dark,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel,/area/mine/laborcamp/security) +"go" = (/obj/machinery/button/door{id = "Labor"; name = "Labor Camp Lockdown"; pixel_x = 28; pixel_y = 7; req_access_txt = "2"},/obj/machinery/button/flasher{id = "Labor"; pixel_x = 26; pixel_y = -3},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/open/floor/plasteel,/area/mine/laborcamp/security) +"gp" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/open/floor/plating,/area/mine/laborcamp/security) +"gq" = (/turf/open/floor/plating,/area/mine/laborcamp/security) +"gr" = (/obj/machinery/atmospherics/pipe/manifold{dir = 8},/obj/machinery/meter,/turf/open/floor/plating,/area/mine/laborcamp/security) +"gs" = (/obj/machinery/atmospherics/components/unary/tank/air{dir = 8},/turf/open/floor/plating,/area/mine/laborcamp/security) +"gt" = (/turf/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/north_outpost) +"gu" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = -32},/turf/open/floor/plasteel{icon_state = "warning"},/area/mine/north_outpost) +"gv" = (/turf/open/floor/plasteel{icon_state = "warning"},/area/mine/north_outpost) +"gw" = (/obj/structure/ore_box,/turf/open/floor/plasteel{icon_state = "warning"},/area/mine/north_outpost) +"gx" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/mine/laborcamp/security) +"gy" = (/obj/structure/table,/obj/machinery/recharger,/turf/open/floor/plasteel,/area/mine/laborcamp/security) +"gz" = (/obj/machinery/computer/secure_data,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/open/floor/plasteel,/area/mine/laborcamp/security) +"gA" = (/obj/machinery/computer/security{name = "Labor Camp Monitoring"; network = list("Labor")},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/open/floor/plasteel,/area/mine/laborcamp/security) +"gB" = (/obj/machinery/computer/prisoner,/obj/machinery/airalarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/open/floor/plasteel,/area/mine/laborcamp/security) +"gC" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/turf/open/floor/plasteel,/area/mine/laborcamp/security) +"gD" = (/obj/machinery/space_heater,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/open/floor/plating,/area/mine/laborcamp/security) +"gE" = (/obj/machinery/power/port_gen/pacman{anchored = 1},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/open/floor/plating,/area/mine/laborcamp/security) +"gF" = (/obj/machinery/portable_atmospherics/canister/air,/turf/open/floor/plating,/area/mine/laborcamp/security) +"gG" = (/obj/machinery/atmospherics/pipe/simple/general/hidden{dir = 5},/obj/structure/reagent_dispensers/fueltank,/turf/open/floor/plating,/area/mine/laborcamp/security) +"gH" = (/obj/machinery/door/airlock/external{name = "Mining North Outpost Airlock"; req_access_txt = "54"},/turf/open/floor/plasteel/airless{icon_state = "asteroidfloor"},/area/mine/north_outpost) +"gI" = (/obj/structure/disposalpipe/segment,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/open/floor/plating,/area/mine/explored) +"gJ" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/mine/laborcamp/security) +"gK" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/mine/laborcamp/security) +"gL" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable,/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/mine/laborcamp/security) +"gM" = (/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 10},/area/mine/explored) +"gN" = (/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/explored) +"gO" = (/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 6},/area/mine/explored) +"gP" = (/obj/machinery/light{dir = 1},/obj/structure/disposalpipe/segment,/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 1},/area/mine/north_outpost) +"gQ" = (/obj/structure/disposalpipe/segment,/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 1},/area/mine/explored) +"gR" = (/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 5},/area/mine/explored) +"gS" = (/obj/structure/disposalpipe/segment,/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/explored) +"gT" = (/obj/structure/disposalpipe/segment,/turf/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored) +"gU" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored) +"gV" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored) +"gW" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored) +"gX" = (/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 9},/area/mine/explored) +"gY" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored) +"gZ" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored) +"ha" = (/obj/structure/ore_box,/turf/open/floor/plating/asteroid/airless,/area/mine/explored) +"hb" = (/turf/closed/wall/r_wall,/area/mine/maintenance) +"hc" = (/turf/open/floor/bluegrid,/area/mine/maintenance) +"hd" = (/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/power/apc{dir = 1; name = "Mining Communications APC"; pixel_x = 1; pixel_y = 25},/turf/open/floor/plasteel{icon_state = "dark"},/area/mine/maintenance) +"he" = (/obj/machinery/telecomms/relay/preset/mining,/obj/machinery/light/small{dir = 1},/turf/open/floor/plasteel{icon_state = "vault"; dir = 1},/area/mine/maintenance) +"hf" = (/obj/machinery/airalarm{pixel_y = 24},/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/open/floor/plasteel{icon_state = "dark"},/area/mine/maintenance) +"hg" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/open/floor/bluegrid,/area/mine/maintenance) +"hh" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple{dir = 6},/turf/open/floor/plasteel{icon_state = "dark"},/area/mine/maintenance) +"hi" = (/obj/machinery/atmospherics/pipe/simple/general/hidden{dir = 9},/obj/machinery/light_switch{pixel_y = -25},/turf/open/floor/bluegrid,/area/mine/maintenance) +"hj" = (/obj/machinery/camera{c_tag = "Communications Relay"; dir = 8; network = list("MINE")},/turf/open/floor/bluegrid,/area/mine/maintenance) +"hk" = (/turf/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/west_outpost) +"hl" = (/turf/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored) +"hm" = (/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris,/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris,/turf/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored) +"hn" = (/obj/item/weapon/reagent_containers/food/snacks/grown/mushroom/libertycap,/turf/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored) +"ho" = (/turf/closed/wall,/area/mine/living_quarters) +"hp" = (/obj/machinery/door/airlock/maintenance{name = "Mining Station Communications"; req_access_txt = "48"},/obj/machinery/atmospherics/pipe/simple,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel{icon_state = "vault"},/area/mine/maintenance) +"hq" = (/obj/machinery/mech_bay_recharge_port,/obj/structure/window/reinforced{dir = 8},/turf/open/floor/plasteel/airless{icon_state = "asteroidfloor"},/area/mine/west_outpost) +"hr" = (/turf/open/floor/mech_bay_recharge_floor/airless,/area/mine/west_outpost) +"hs" = (/obj/machinery/computer/mech_bay_power_console,/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plasteel/airless{icon_state = "asteroidfloor"},/area/mine/west_outpost) +"ht" = (/obj/item/clothing/under/rank/miner,/obj/effect/decal/remains/human,/turf/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored) +"hu" = (/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosia/vulgaris,/turf/open/floor/plasteel/airless{icon_state = "asteroidfloor"},/area/mine/explored) +"hv" = (/obj/structure/bed,/obj/item/weapon/bedsheet/brown,/turf/open/floor/carpet,/area/mine/living_quarters) +"hw" = (/obj/machinery/light/small{dir = 4},/obj/machinery/button/door{id = "miningdorm1"; name = "Door Bolt Control"; normaldoorcontrol = 1; pixel_x = 25; pixel_y = 0; req_access_txt = "0"; specialfunctions = 4},/turf/open/floor/carpet,/area/mine/living_quarters) +"hx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple,/turf/open/floor/plasteel,/area/mine/living_quarters) +"hy" = (/turf/closed/wall,/area/mine/west_outpost) +"hz" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/mine/west_outpost) +"hA" = (/obj/machinery/light/small{dir = 8},/turf/open/floor/plating/asteroid/airless,/area/mine/west_outpost) +"hB" = (/obj/structure/table,/turf/open/floor/carpet,/area/mine/living_quarters) +"hC" = (/turf/open/floor/carpet,/area/mine/living_quarters) +"hD" = (/obj/machinery/door/airlock{id_tag = "miningdorm1"; name = "Room 1"},/turf/open/floor/plasteel,/area/mine/living_quarters) +"hE" = (/obj/structure/table,/obj/item/weapon/pickaxe,/turf/open/floor/plasteel,/area/mine/west_outpost) +"hF" = (/obj/machinery/newscaster{pixel_y = 32},/turf/open/floor/plasteel,/area/mine/west_outpost) +"hG" = (/obj/structure/table,/obj/machinery/microwave,/turf/open/floor/plasteel,/area/mine/west_outpost) +"hH" = (/obj/machinery/recharge_station,/turf/open/floor/plasteel{icon_state = "bot"},/area/mine/west_outpost) +"hI" = (/obj/structure/tank_dispenser/oxygen,/turf/open/floor/plasteel{icon_state = "bot"},/area/mine/west_outpost) +"hJ" = (/obj/structure/rack,/obj/machinery/light{dir = 1},/turf/open/floor/plasteel{icon_state = "bot"},/area/mine/west_outpost) +"hK" = (/obj/structure/rack,/turf/open/floor/plasteel{icon_state = "bot"},/area/mine/west_outpost) +"hL" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/trunk,/obj/machinery/door/window/northleft{dir = 2; name = "Pneumatic Tube Access"},/obj/machinery/disposal/deliveryChute{pixel_y = 5},/turf/open/floor/plasteel{icon_state = "bot"},/area/mine/west_outpost) +"hM" = (/turf/open/floor/plasteel,/area/mine/west_outpost) +"hN" = (/turf/open/floor/plasteel{dir = 4; icon_state = "warning"},/area/mine/west_outpost) +"hO" = (/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; pixel_y = 32},/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/mine/west_outpost) +"hP" = (/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 5},/area/mine/west_outpost) +"hQ" = (/obj/structure/disposalpipe/trunk,/obj/structure/disposaloutlet{dir = 1},/turf/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored) +"hR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple,/obj/machinery/light/small{dir = 4},/turf/open/floor/plasteel,/area/mine/living_quarters) +"hS" = (/obj/structure/table,/obj/item/weapon/shovel,/turf/open/floor/plasteel,/area/mine/west_outpost) +"hT" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets,/turf/open/floor/plasteel,/area/mine/west_outpost) +"hU" = (/turf/open/floor/plasteel{dir = 1; icon_state = "warning"},/area/mine/west_outpost) +"hV" = (/obj/structure/disposalpipe/segment,/turf/open/floor/plasteel{dir = 1; icon_state = "warning"},/area/mine/west_outpost) +"hW" = (/obj/machinery/door/airlock/external{name = "Mining West Outpost Airlock"; req_access_txt = "54"},/turf/open/floor/plasteel,/area/mine/west_outpost) +"hX" = (/obj/machinery/door/airlock/external{name = "Mining West Outpost Airlock"; req_access_txt = "54"},/turf/open/floor/plasteel/airless{icon_state = "asteroidfloor"},/area/mine/west_outpost) +"hY" = (/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 4},/area/mine/west_outpost) +"hZ" = (/obj/structure/disposalpipe/segment,/turf/closed/mineral,/area/mine/explored) +"ia" = (/obj/machinery/light/small{dir = 4},/obj/machinery/button/door{id = "miningdorm2"; name = "Door Bolt Control"; normaldoorcontrol = 1; pixel_x = 25; pixel_y = 0; req_access_txt = "0"; specialfunctions = 4},/turf/open/floor/carpet,/area/mine/living_quarters) +"ib" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/mine/living_quarters) +"ic" = (/obj/structure/table,/obj/item/weapon/storage/backpack/satchel,/obj/item/clothing/glasses/meson,/obj/machinery/light/small{dir = 8},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/turf/open/floor/plasteel,/area/mine/west_outpost) +"id" = (/obj/machinery/door/airlock/glass_mining{name = "Break Room"; req_access_txt = "54"},/turf/open/floor/plasteel,/area/mine/west_outpost) +"ie" = (/obj/structure/disposalpipe/segment,/turf/open/floor/plasteel,/area/mine/west_outpost) +"if" = (/obj/structure/closet/emcloset,/turf/open/floor/plasteel,/area/mine/west_outpost) +"ig" = (/obj/structure/ore_box,/turf/open/floor/plasteel{dir = 4; icon_state = "warning"},/area/mine/west_outpost) +"ih" = (/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 6},/area/mine/west_outpost) +"ii" = (/obj/machinery/door/airlock{id_tag = "miningdorm2"; name = "Room 2"},/turf/open/floor/plasteel,/area/mine/living_quarters) +"ij" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical,/turf/open/floor/plasteel,/area/mine/west_outpost) +"ik" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; layer = 2.4; on = 1},/turf/open/floor/plasteel,/area/mine/west_outpost) +"il" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/mine/west_outpost) +"im" = (/obj/machinery/atmospherics/pipe/manifold{dir = 1},/turf/open/floor/plasteel,/area/mine/west_outpost) +"in" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/open/floor/plasteel,/area/mine/west_outpost) +"io" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/turf/open/floor/plasteel,/area/mine/west_outpost) +"ip" = (/obj/machinery/conveyor_switch{id = "mining_west"},/obj/structure/disposalpipe/segment,/turf/open/floor/plasteel,/area/mine/west_outpost) +"iq" = (/obj/structure/disposalpipe/segment,/obj/structure/sign/deathsposal,/turf/closed/wall,/area/mine/living_quarters) +"ir" = (/obj/structure/reagent_dispensers/fueltank,/turf/open/floor/plasteel,/area/mine/west_outpost) +"is" = (/obj/structure/chair{dir = 1},/turf/open/floor/plasteel,/area/mine/west_outpost) +"it" = (/obj/machinery/power/apc{dir = 2; name = "Mining West Outpost APC"; pixel_x = 1; pixel_y = -23},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/atmospherics/pipe/simple,/turf/open/floor/plasteel,/area/mine/west_outpost) +"iu" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/camera{c_tag = "West Outpost"; dir = 1; network = list("MINE")},/turf/open/floor/plasteel,/area/mine/west_outpost) +"iv" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/open/floor/plasteel,/area/mine/west_outpost) +"iw" = (/obj/machinery/airalarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/open/floor/plasteel,/area/mine/west_outpost) +"ix" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/open/floor/plasteel{dir = 4; icon_state = "loadingarea"},/area/mine/west_outpost) +"iy" = (/obj/machinery/mineral/unloading_machine{dir = 2; output_dir = 4},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/west_outpost) +"iz" = (/obj/machinery/conveyor{dir = 4; id = "mining_west"},/obj/machinery/light/small{dir = 1},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/west_outpost) +"iA" = (/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/disposal/deliveryChute{dir = 8},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/west_outpost) +"iB" = (/obj/structure/grille,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/mine/west_outpost) +"iC" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 8},/area/mine/explored) +"iD" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 4},/area/mine/explored) +"iE" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/unexplored) +"iF" = (/obj/structure/table,/obj/machinery/microwave{pixel_y = 6},/turf/open/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters) +"iG" = (/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 0; pixel_y = 32},/turf/open/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters) +"iH" = (/obj/machinery/computer/arcade,/turf/open/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters) +"iI" = (/obj/machinery/disposal/bin,/obj/structure/disposalpipe/trunk{dir = 1},/turf/open/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters) +"iJ" = (/obj/machinery/vending/cigarette,/obj/machinery/newscaster{pixel_y = 32},/turf/open/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters) +"iK" = (/obj/machinery/vending/snack,/turf/open/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters) +"iL" = (/obj/machinery/light/small{dir = 4},/obj/machinery/button/door{id = "miningdorm3"; name = "Door Bolt Control"; normaldoorcontrol = 1; pixel_x = 25; pixel_y = 0; req_access_txt = "0"; specialfunctions = 4},/turf/open/floor/carpet,/area/mine/living_quarters) +"iM" = (/obj/machinery/atmospherics/pipe/simple,/turf/closed/wall,/area/mine/west_outpost) +"iN" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"},/turf/closed/wall,/area/mine/west_outpost) +"iO" = (/obj/machinery/door/airlock/maintenance{name = "Mining Station Maintenance"; req_access_txt = "54"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/open/floor/plating,/area/mine/west_outpost) +"iP" = (/obj/machinery/conveyor{backwards = 2; dir = 2; forwards = 1; id = "mining_west"},/obj/structure/plasticflaps/mining,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/open/floor/plasteel,/area/mine/west_outpost) +"iQ" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/closed/wall,/area/mine/west_outpost) +"iR" = (/obj/structure/table,/obj/machinery/reagentgrinder,/turf/open/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters) +"iS" = (/turf/open/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters) +"iT" = (/obj/structure/chair,/turf/open/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters) +"iU" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 31},/turf/open/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters) +"iV" = (/obj/machinery/door/airlock{id_tag = "miningdorm3"; name = "Room 3"},/turf/open/floor/plasteel,/area/mine/living_quarters) +"iW" = (/obj/structure/ore_box,/turf/open/floor/plasteel,/area/mine/living_quarters) +"iX" = (/obj/machinery/recharge_station,/obj/machinery/light/small{dir = 1},/turf/open/floor/plasteel,/area/mine/living_quarters) +"iY" = (/obj/structure/closet/secure_closet/miner,/turf/open/floor/plasteel,/area/mine/living_quarters) +"iZ" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/closed/wall,/area/mine/eva) +"ja" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/closed/wall,/area/mine/eva) +"jb" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/mine/eva) +"jc" = (/turf/closed/wall,/area/mine/eva) +"jd" = (/obj/machinery/atmospherics/pipe/simple,/obj/machinery/meter,/turf/open/floor/plating,/area/mine/west_outpost) +"je" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/open/floor/plating,/area/mine/west_outpost) +"jf" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/open/floor/plating,/area/mine/west_outpost) +"jg" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/obj/item/weapon/storage/box/lights/bulbs,/turf/open/floor/plating,/area/mine/west_outpost) +"jh" = (/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 1},/area/mine/explored) +"ji" = (/obj/machinery/conveyor_switch{id = "mining_west"},/obj/machinery/light/small{dir = 1},/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 1},/area/mine/explored) +"jj" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/beer,/obj/item/weapon/reagent_containers/food/drinks/beer,/turf/open/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters) +"jk" = (/obj/structure/chair{dir = 4},/turf/open/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters) +"jl" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/beer,/turf/open/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters) +"jm" = (/obj/structure/chair{dir = 8},/turf/open/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters) +"jn" = (/obj/machinery/light{dir = 4},/turf/open/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters) +"jo" = (/turf/open/floor/plasteel,/area/mine/living_quarters) +"jp" = (/obj/machinery/atmospherics/components/unary/vent_pump{on = 1},/turf/open/floor/plasteel,/area/mine/living_quarters) +"jq" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/table,/obj/item/weapon/pickaxe,/turf/open/floor/plasteel,/area/mine/eva) +"jr" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/suit_storage_unit/mining/eva,/turf/open/floor/plasteel,/area/mine/eva) +"js" = (/obj/machinery/suit_storage_unit/mining/eva,/turf/open/floor/plasteel,/area/mine/eva) +"jt" = (/obj/machinery/light,/turf/open/floor/plating/asteroid/airless,/area/mine/explored) +"ju" = (/obj/machinery/atmospherics/components/unary/tank/air{dir = 1; initialize_directions = 0; level = 1},/turf/open/floor/plating,/area/mine/west_outpost) +"jv" = (/obj/machinery/power/port_gen/pacman{anchored = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/open/floor/plating,/area/mine/west_outpost) +"jw" = (/obj/machinery/power/terminal{dir = 4},/obj/machinery/light/small,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/open/floor/plating,/area/mine/west_outpost) +"jx" = (/obj/structure/cable,/obj/machinery/power/smes{charge = 5e+006},/turf/open/floor/plating,/area/mine/west_outpost) +"jy" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets,/turf/open/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters) +"jz" = (/obj/machinery/camera{c_tag = "Crew Area"; dir = 1; network = list("MINE")},/turf/open/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters) +"jA" = (/obj/item/weapon/cigbutt,/turf/open/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters) +"jB" = (/obj/machinery/airalarm{pixel_y = 24},/turf/open/floor/plasteel,/area/mine/living_quarters) +"jC" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/open/floor/plasteel,/area/mine/living_quarters) +"jD" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/open/floor/plasteel,/area/mine/living_quarters) +"jE" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple,/turf/open/floor/plasteel,/area/mine/living_quarters) +"jF" = (/obj/machinery/mineral/equipment_vendor,/turf/open/floor/plasteel,/area/mine/living_quarters) +"jG" = (/obj/machinery/camera{c_tag = "Storage Room"; dir = 1; network = list("MINE")},/turf/open/floor/plasteel,/area/mine/living_quarters) +"jH" = (/obj/machinery/atmospherics/pipe/simple,/turf/open/floor/plasteel,/area/mine/living_quarters) +"jI" = (/turf/closed/wall,/area/mine/production) +"jJ" = (/obj/structure/disposalpipe/segment,/turf/closed/wall,/area/mine/production) +"jK" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/mine/production) +"jL" = (/obj/machinery/atmospherics/pipe/simple{dir = 6},/obj/machinery/camera{c_tag = "EVA"; dir = 4; network = list("MINE")},/obj/machinery/airalarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/table,/obj/item/device/gps/mining,/obj/item/device/gps/mining,/obj/item/device/gps/mining,/obj/item/device/gps/mining,/turf/open/floor/plasteel,/area/mine/eva) +"jM" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/structure/disposalpipe/segment,/turf/open/floor/plasteel,/area/mine/eva) +"jN" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/open/floor/plasteel,/area/mine/eva) +"jO" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 8; on = 1},/obj/machinery/light_switch{pixel_x = 27},/turf/open/floor/plasteel,/area/mine/eva) +"jP" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/open/floor/plating/asteroid/airless,/area/mine/eva) +"jQ" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple,/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/mine/living_quarters) +"jR" = (/obj/machinery/door/airlock/glass{name = "Crew Area"; req_access_txt = "48"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel,/area/mine/living_quarters) +"jS" = (/obj/machinery/atmospherics/pipe/simple,/obj/machinery/door/airlock/mining{name = "Mining Station Storage"; req_access_txt = "48"},/turf/open/floor/plasteel,/area/mine/living_quarters) +"jT" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/northleft{dir = 2; name = "Pneumatic Tube Access"},/obj/machinery/disposal/deliveryChute{pixel_y = 5},/obj/structure/disposalpipe/trunk{dir = 1},/turf/open/floor/plasteel{icon_state = "bot"; dir = 1},/area/mine/production) +"jU" = (/obj/structure/closet/crate,/turf/open/floor/plasteel{icon_state = "bot"; dir = 1},/area/mine/production) +"jV" = (/obj/machinery/atmospherics/pipe/simple{dir = 6},/obj/structure/closet/crate,/turf/open/floor/plasteel{icon_state = "bot"; dir = 1},/area/mine/production) +"jW" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/mine/eva) +"jX" = (/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/general/hidden{dir = 9},/turf/open/floor/plasteel,/area/mine/eva) +"jY" = (/obj/structure/disposalpipe/segment,/turf/open/floor/plasteel,/area/mine/eva) +"jZ" = (/turf/open/floor/plasteel,/area/mine/eva) +"ka" = (/obj/structure/tank_dispenser/oxygen,/turf/open/floor/plasteel,/area/mine/eva) +"kb" = (/obj/machinery/light/small{dir = 1},/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/eva) +"kc" = (/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/open/floor/plasteel{dir = 4; icon_state = "warning"},/area/mine/eva) +"kd" = (/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 5},/area/mine/eva) +"ke" = (/obj/structure/toilet{dir = 4},/turf/open/floor/plasteel{icon_state = "showroomfloor"},/area/mine/living_quarters) +"kf" = (/obj/structure/sink{pixel_y = 30},/obj/machinery/light/small,/obj/structure/mirror{pixel_y = -32},/turf/open/floor/plasteel{icon_state = "showroomfloor"},/area/mine/living_quarters) +"kg" = (/obj/machinery/door/airlock{name = "Toilet"},/turf/open/floor/plasteel{icon_state = "showroomfloor"},/area/mine/living_quarters) +"kh" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/open/floor/plasteel,/area/mine/living_quarters) +"ki" = (/obj/machinery/power/apc{dir = 1; name = "Mining Station Port Wing APC"; pixel_x = 1; pixel_y = 25},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/open/floor/plasteel,/area/mine/living_quarters) +"kj" = (/obj/machinery/camera{c_tag = "Crew Area Hallway"; network = list("MINE")},/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/turf/open/floor/plasteel,/area/mine/living_quarters) +"kk" = (/turf/open/floor/plasteel{dir = 5; icon_state = "warning"},/area/mine/living_quarters) +"kl" = (/obj/structure/window/reinforced,/obj/structure/lattice,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/open/space,/area/mine/living_quarters) +"km" = (/obj/structure/window/reinforced,/obj/structure/lattice,/turf/open/space,/area/mine/living_quarters) +"kn" = (/obj/structure/window/reinforced,/obj/structure/lattice,/turf/open/space,/area/mine/production) +"ko" = (/turf/open/floor/plasteel{dir = 9; icon_state = "warning"},/area/mine/production) +"kp" = (/turf/open/floor/plasteel{dir = 1; icon_state = "warning"},/area/mine/production) +"kq" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/open/floor/plasteel{dir = 1; icon_state = "warning"},/area/mine/production) +"kr" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple,/turf/open/floor/plasteel{dir = 5; icon_state = "warning"},/area/mine/production) +"ks" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/door/airlock/glass_mining{name = "Mining Station EVA"; req_access_txt = "54"},/turf/open/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/mine/eva) +"kt" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/open/floor/plasteel,/area/mine/eva) +"ku" = (/obj/machinery/door/airlock/external{name = "Mining External Airlock"; req_access_txt = "54"},/turf/open/floor/plasteel,/area/mine/eva) +"kv" = (/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/eva) +"kw" = (/turf/open/floor/plasteel{dir = 4; icon_state = "warning"},/area/mine/eva) +"kx" = (/obj/machinery/door/airlock/external{name = "Mining External Airlock"; req_access_txt = "54"},/turf/open/floor/plasteel/airless{icon_state = "asteroidfloor"},/area/mine/eva) +"ky" = (/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 4},/area/mine/eva) +"kz" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/open/floor/plasteel,/area/mine/living_quarters) +"kA" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/open/floor/plasteel,/area/mine/living_quarters) +"kB" = (/obj/machinery/atmospherics/pipe/simple,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/open/floor/plasteel,/area/mine/living_quarters) +"kC" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple,/turf/open/floor/plasteel,/area/mine/living_quarters) +"kD" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/open/floor/plasteel,/area/mine/living_quarters) +"kE" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/open/floor/plasteel,/area/mine/living_quarters) +"kF" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple,/turf/open/floor/plasteel,/area/mine/living_quarters) +"kG" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/open/floor/plasteel{dir = 4; icon_state = "warning"},/area/mine/living_quarters) +"kH" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/door/airlock/glass_mining{name = "Mining Station Bridge"; req_access_txt = "48"},/turf/open/floor/plasteel,/area/mine/living_quarters) +"kI" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/open/floor/plasteel,/area/mine/living_quarters) +"kJ" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/open/floor/plasteel,/area/mine/production) +"kK" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/door/airlock/glass_mining{name = "Mining Station Bridge"; req_access_txt = "48"},/turf/open/floor/plasteel,/area/mine/production) +"kL" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/open/floor/plasteel{dir = 8; icon_state = "warning"},/area/mine/production) +"kM" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; layer = 2.4; on = 1},/turf/open/floor/plasteel,/area/mine/production) +"kN" = (/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{dir = 4},/turf/open/floor/plasteel,/area/mine/production) +"kO" = (/obj/machinery/atmospherics/pipe/manifold{dir = 4},/turf/open/floor/plasteel{dir = 4; icon_state = "warning"},/area/mine/production) +"kP" = (/obj/machinery/power/apc{dir = 2; name = "Mining EVA APC"; pixel_x = 1; pixel_y = -23},/obj/structure/cable,/obj/structure/table,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/weapon/hand_labeler,/turf/open/floor/plasteel,/area/mine/eva) +"kQ" = (/obj/machinery/mech_bay_recharge_port,/obj/structure/disposalpipe/segment,/turf/open/floor/plating,/area/mine/eva) +"kR" = (/turf/open/floor/mech_bay_recharge_floor,/area/mine/eva) +"kS" = (/obj/machinery/computer/mech_bay_power_console,/turf/open/floor/plasteel,/area/mine/eva) +"kT" = (/obj/structure/closet/emcloset,/turf/open/floor/plasteel,/area/mine/eva) +"kU" = (/obj/structure/ore_box,/turf/open/floor/plasteel{dir = 4; icon_state = "warning"},/area/mine/eva) +"kV" = (/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 6},/area/mine/eva) +"kW" = (/obj/machinery/atmospherics/pipe/manifold{dir = 8},/turf/open/floor/plasteel,/area/mine/living_quarters) +"kX" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/open/floor/plasteel,/area/mine/living_quarters) +"kY" = (/obj/machinery/atmospherics/pipe/manifold,/turf/open/floor/plasteel,/area/mine/living_quarters) +"kZ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/open/floor/plasteel,/area/mine/living_quarters) +"la" = (/obj/machinery/atmospherics/pipe/manifold{dir = 1},/turf/open/floor/plasteel,/area/mine/living_quarters) +"lb" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/machinery/light,/turf/open/floor/plasteel,/area/mine/living_quarters) +"lc" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/open/floor/plasteel{dir = 6; icon_state = "warning"},/area/mine/living_quarters) +"ld" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/mine/living_quarters) +"le" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/open/space,/area/mine/living_quarters) +"lf" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/open/space,/area/mine/production) +"lg" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/machinery/light{dir = 4},/turf/open/space,/area/mine/production) +"lh" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/mine/production) +"li" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/open/floor/plasteel{dir = 10; icon_state = "warning"},/area/mine/production) +"lj" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/open/floor/plasteel{icon_state = "warningcorner"; dir = 1},/area/mine/production) +"lk" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/open/floor/plasteel,/area/mine/production) +"ll" = (/obj/machinery/atmospherics/pipe/manifold{dir = 4},/obj/machinery/airalarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/open/floor/plasteel{dir = 4; icon_state = "warning"},/area/mine/production) +"lm" = (/obj/machinery/camera{c_tag = "Production Line External"; dir = 4; network = list("MINE")},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/production) +"ln" = (/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/production) +"lo" = (/obj/machinery/conveyor_switch{id = "mining_external"},/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/production) +"lp" = (/turf/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/production) +"lq" = (/obj/machinery/atmospherics/pipe/simple,/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Infirmary"; req_access_txt = "0"},/turf/open/floor/plasteel{icon_state = "whitebluefull"},/area/mine/living_quarters) +"lr" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"},/turf/closed/wall,/area/mine/living_quarters) +"ls" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/door/airlock/maintenance{name = "Mining Station Maintenance"; req_access_txt = "48"},/turf/open/floor/plating,/area/mine/living_quarters) +"lt" = (/obj/machinery/atmospherics/pipe/simple,/turf/closed/wall,/area/mine/living_quarters) +"lu" = (/obj/machinery/door/airlock/external{name = "Mining External Airlock"; req_access_txt = "54"},/turf/open/floor/plasteel,/area/mine/living_quarters) +"lv" = (/turf/open/floor/plasteel{dir = 8; icon_state = "warning"},/area/mine/production) +"lw" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/open/floor/plasteel,/area/mine/production) +"lx" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple,/turf/open/floor/plasteel{dir = 4; icon_state = "warning"},/area/mine/production) +"ly" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/airlock{name = "Closet"; req_access_txt = "0"},/turf/open/floor/plating,/area/mine/production) +"lz" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light/small{dir = 1},/turf/open/floor/plating{icon_state = "warnplate"; dir = 8},/area/mine/production) +"lA" = (/obj/structure/disposalpipe/junction{dir = 8; icon_state = "pipe-j1"},/obj/machinery/space_heater,/turf/open/floor/plating,/area/mine/production) +"lB" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/closed/wall,/area/mine/production) +"lC" = (/obj/machinery/disposal/deliveryChute{dir = 4},/obj/structure/disposalpipe/trunk{dir = 8},/turf/open/floor/plating{icon_state = "warnplate"; dir = 8},/area/mine/production) +"lD" = (/obj/machinery/conveyor{dir = 4; id = "mining_external"},/turf/open/floor/plating,/area/mine/production) +"lE" = (/obj/machinery/conveyor{dir = 4; id = "mining_external"},/turf/open/floor/plating{icon_state = "warnplate"; dir = 4},/area/mine/production) +"lF" = (/obj/machinery/conveyor{dir = 4; id = "mining_external"},/obj/structure/plasticflaps/mining,/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/production) +"lG" = (/obj/machinery/conveyor{dir = 4; id = "mining_external"},/turf/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/production) +"lH" = (/obj/machinery/light/small{dir = 8},/obj/machinery/airalarm{frequency = 1439; pixel_y = 23},/turf/open/floor/plasteel{dir = 1; icon_state = "whiteblue"},/area/mine/living_quarters) +"lI" = (/turf/open/floor/plasteel{dir = 1; icon_state = "whiteblue"},/area/mine/living_quarters) +"lJ" = (/obj/machinery/atmospherics/pipe/simple,/turf/open/floor/plasteel{dir = 1; icon_state = "whiteblue"},/area/mine/living_quarters) +"lK" = (/turf/open/floor/plasteel{dir = 5; icon_state = "whiteblue"},/area/mine/living_quarters) +"lL" = (/obj/machinery/power/smes{charge = 5e+006},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/open/floor/plating,/area/mine/living_quarters) +"lM" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/light/small{dir = 1},/obj/structure/closet/crate/secure/loot,/turf/open/floor/plating,/area/mine/living_quarters) +"lN" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/open/floor/plating,/area/mine/living_quarters) +"lO" = (/obj/machinery/atmospherics/pipe/simple,/obj/item/weapon/storage/box/lights,/turf/open/floor/plating,/area/mine/living_quarters) +"lP" = (/obj/structure/rack,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/regular{pixel_x = -3; pixel_y = -3},/turf/open/floor/plating,/area/mine/living_quarters) +"lQ" = (/obj/structure/closet/emcloset,/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/living_quarters) +"lR" = (/turf/open/floor/plasteel{icon_state = "floorgrime"},/area/mine/living_quarters) +"lS" = (/obj/machinery/light/small{dir = 4},/turf/open/floor/plasteel,/area/mine/living_quarters) +"lT" = (/obj/structure/sign/xeno_warning_mining,/turf/closed/wall,/area/mine/living_quarters) +"lU" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/turf/open/floor/plasteel{dir = 8; icon_state = "warning"},/area/mine/production) +"lV" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/open/floor/plasteel,/area/mine/production) +"lW" = (/obj/machinery/atmospherics/pipe/simple,/obj/machinery/status_display{layer = 4; pixel_x = 32; pixel_y = 0},/turf/open/floor/plasteel{dir = 4; icon_state = "warning"},/area/mine/production) +"lX" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/production) +"lY" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty{pixel_x = -3; pixel_y = -3},/obj/item/weapon/reagent_containers/blood/AMinus,/obj/item/weapon/reagent_containers/blood/BMinus{pixel_x = -4; pixel_y = 4},/obj/item/weapon/reagent_containers/blood/BPlus{pixel_x = 1; pixel_y = 2},/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OPlus{pixel_x = -2; pixel_y = -1},/obj/item/weapon/reagent_containers/blood/random,/obj/item/weapon/reagent_containers/blood/random,/obj/item/weapon/reagent_containers/blood/random,/turf/open/floor/plasteel{icon_state = "white"},/area/mine/living_quarters) +"lZ" = (/obj/machinery/iv_drip,/turf/open/floor/plasteel{icon_state = "white"},/area/mine/living_quarters) +"ma" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/obj/machinery/camera{c_tag = "Sleeper Room"; dir = 1; network = list("MINE")},/turf/open/floor/plasteel{icon_state = "white"},/area/mine/living_quarters) +"mb" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/brute{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/regular,/turf/open/floor/plasteel{dir = 4; icon_state = "whiteblue"},/area/mine/living_quarters) +"mc" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/open/floor/plating,/area/mine/living_quarters) +"md" = (/turf/open/floor/plating,/area/mine/living_quarters) "me" = (/obj/machinery/atmospherics/pipe/manifold{dir = 8},/obj/machinery/meter,/turf/open/floor/plating,/area/mine/living_quarters) "mf" = (/obj/machinery/atmospherics/components/unary/tank/air{dir = 8},/turf/open/floor/plating,/area/mine/living_quarters) "mg" = (/obj/structure/ore_box,/turf/open/floor/plasteel{icon_state = "warning"},/area/mine/living_quarters) @@ -637,9 +637,9 @@ "mm" = (/obj/machinery/mineral/equipment_vendor,/turf/open/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/mine/production) "mn" = (/obj/machinery/mineral/mint{input_dir = 4},/turf/open/floor/plasteel,/area/mine/production) "mo" = (/obj/machinery/light/small{dir = 1},/turf/open/floor/plasteel{dir = 8; icon_state = "loadingarea"},/area/mine/production) -"mp" = (/obj/structure/ore_box,/turf/open/floor/plasteel{dir = 6; icon_state = "warning"},/area/mine/production) +"mp" = (/obj/machinery/airalarm{pixel_y = 28},/obj/structure/closet/crate,/turf/open/floor/plasteel{icon_state = "bot"; dir = 1},/area/mine/production) "mq" = (/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/obj/structure/table,/obj/item/weapon/paper{anchored = 0; info = "A hastily written note has been scribbled here...

Please use the ore redemption machine in the science wing for smelting. PLEASE!

--The Research Staff"; name = "URGENT!"},/turf/open/floor/plasteel{icon_state = "bot"; dir = 1},/area/mine/production) -"mr" = (/obj/structure/ore_box,/turf/open/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/mine/production) +"mr" = (/obj/structure/barricade/wooden,/turf/open/floor/plasteel{icon_state = "bot"; dir = 1},/area/mine/production) "ms" = (/obj/structure/cable,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/power/port_gen/pacman{anchored = 1},/turf/open/floor/plating,/area/mine/living_quarters) "mt" = (/obj/machinery/power/port_gen/pacman{anchored = 1},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/open/floor/plating,/area/mine/living_quarters) "mu" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/open/floor/plating,/area/mine/living_quarters) @@ -648,70 +648,70 @@ "mx" = (/obj/structure/disposalpipe/segment,/turf/open/floor/plasteel,/area/mine/production) "my" = (/turf/open/floor/plasteel{icon_state = "loadingarea"},/area/mine/production) "mz" = (/turf/open/floor/plasteel{dir = 5; icon_state = "warning"},/area/mine/production) -"mA" = (/obj/machinery/conveyor{dir = 8; id = "mining_internal"},/obj/structure/plasticflaps,/obj/structure/barricade/wooden,/turf/open/floor/plating{icon_state = "warnplate"; dir = 1},/area/mine/production) -"mB" = (/obj/machinery/conveyor{dir = 2; id = "mining_internal"},/turf/open/floor/plating{icon_state = "warnplate"; dir = 8},/area/mine/production) +"mA" = (/obj/structure/barricade/wooden,/turf/open/floor/plasteel{dir = 4; icon_state = "loadingarea"},/area/space) +"mB" = (/obj/machinery/light/small{dir = 4},/obj/structure/barricade/wooden,/turf/open/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/mine/production) "mC" = (/turf/open/floor/plasteel/airless{icon_state = "asteroidfloor"},/area/mine/explored) -"mD" = (/obj/machinery/light{dir = 1},/turf/open/floor/plating/asteroid/airless,/area/mine/living_quarters) -"mE" = (/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},/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/mine/production) -"mF" = (/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/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/mine/production) -"mG" = (/obj/item/device/radio/beacon,/turf/open/floor/plasteel{dir = 9; icon_state = "warning"},/area/mine/production) -"mH" = (/turf/open/floor/plasteel{icon_state = "warningcorner"; dir = 4},/area/mine/production) -"mI" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/machinery/computer/shuttle/mining{req_access = "0"},/obj/machinery/light{dir = 4},/obj/machinery/camera{c_tag = "Shuttle Docking Foyer"; dir = 8; network = list("MINE")},/obj/machinery/newscaster{pixel_x = 30; pixel_y = 1},/turf/open/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/mine/production) -"mJ" = (/obj/structure/closet/crate{icon_state = "crateopen"; opened = 1},/turf/open/floor/plasteel{icon_state = "bot"; dir = 1},/area/mine/production) -"mK" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 2; on = 1},/turf/open/floor/plasteel,/area/mine/production) -"mL" = (/obj/machinery/camera{c_tag = "Processing Area Room"; dir = 8; network = list("MINE")},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = 28},/turf/open/floor/plasteel{dir = 4; icon_state = "warning"},/area/mine/production) -"mM" = (/obj/machinery/mineral/unloading_machine{dir = 1; icon_state = "unloader-corner"; input_dir = 1; output_dir = 2},/turf/open/floor/plating{icon_state = "warnplate"; dir = 9},/area/mine/production) -"mN" = (/obj/docking_port/stationary{dir = 8; dwidth = 3; height = 5; id = "mining_away"; name = "asteroid mine"; width = 7},/turf/open/space,/area/space) -"mO" = (/obj/machinery/door/airlock/external{name = "Mining Shuttle Airlock"; req_access_txt = "0"},/turf/open/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/mine/production) -"mP" = (/turf/open/floor/plasteel,/area/mine/production) -"mQ" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/open/floor/plasteel,/area/mine/production) -"mR" = (/obj/machinery/atmospherics/pipe/simple,/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/open/floor/plasteel{icon_state = "warningcorner"; dir = 8},/area/mine/production) -"mS" = (/obj/machinery/atmospherics/pipe/simple,/turf/open/floor/plasteel,/area/mine/production) -"mT" = (/obj/machinery/conveyor_switch/oneway{id = "mining_internal"; name = "mining conveyor"},/turf/open/floor/plasteel{dir = 4; icon_state = "warning"},/area/mine/production) -"mU" = (/obj/effect/decal/remains/human{desc = "Seems to be all that remains of a poor miner that didn't heed the warning signs."},/turf/open/floor/plating/asteroid/airless,/area/mine/explored) -"mV" = (/turf/open/floor/plasteel{dir = 10; icon_state = "warning"},/area/mine/production) -"mW" = (/turf/open/floor/plasteel{icon_state = "warningcorner"; dir = 1},/area/mine/production) -"mX" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/open/floor/plasteel,/area/mine/production) -"mY" = (/obj/machinery/atmospherics/pipe/manifold{dir = 8},/obj/structure/disposalpipe/junction{dir = 4; icon_state = "pipe-j2"},/turf/open/floor/plasteel,/area/mine/production) -"mZ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/open/floor/plasteel{dir = 4; icon_state = "warning"},/area/mine/production) -"na" = (/obj/machinery/door/airlock/glass_mining{name = "Processing Area"; req_access_txt = "48"},/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/open/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/mine/production) -"nb" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/open/floor/plasteel{dir = 9; icon_state = "warning"},/area/mine/production) -"nc" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/open/floor/plasteel{icon_state = "warningcorner"; dir = 4},/area/mine/production) -"nd" = (/obj/machinery/atmospherics/pipe/simple/general/hidden{dir = 9},/turf/open/floor/plasteel,/area/mine/production) -"ne" = (/obj/machinery/light{dir = 4},/turf/open/floor/plasteel{dir = 4; icon_state = "warning"},/area/mine/production) -"nf" = (/obj/machinery/mineral/processing_unit_console,/turf/closed/wall/r_wall,/area/mine/production) -"ng" = (/obj/machinery/mineral/processing_unit{dir = 1; output_dir = 2},/turf/open/floor/plating{icon_state = "warnplate"; dir = 9},/area/mine/production) -"nh" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/open/floor/plasteel,/area/mine/production) -"ni" = (/turf/open/floor/plasteel{dir = 4; icon_state = "warning"},/area/mine/production) -"nj" = (/obj/machinery/door/airlock/glass_mining{name = "Processing Area"; req_access_txt = "48"},/turf/open/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/mine/production) -"nk" = (/obj/structure/disposalpipe/segment,/turf/open/floor/plasteel{dir = 10; icon_state = "warning"},/area/mine/production) -"nl" = (/turf/open/floor/plasteel{dir = 2; icon_state = "warning"},/area/mine/production) -"nm" = (/turf/open/floor/plasteel{dir = 6; icon_state = "warning"},/area/mine/production) -"nn" = (/obj/structure/lattice,/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/open/space,/area/space) -"no" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/open/floor/plasteel{dir = 10; icon_state = "warning"},/area/mine/production) -"np" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/open/floor/plasteel{dir = 2; icon_state = "warning"},/area/mine/production) -"nq" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/window/northleft{name = "Output Access"},/turf/open/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/mine/production) -"nr" = (/obj/machinery/door/window/northleft{base_state = "right"; icon_state = "right"; name = "Output Access"},/turf/open/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/mine/production) -"ns" = (/obj/machinery/mineral/stacking_unit_console,/turf/closed/wall/r_wall,/area/mine/production) -"nt" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/open/floor/plating,/area/mine/explored) -"nu" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/closed/wall/r_wall,/area/mine/explored) -"nv" = (/obj/structure/lattice,/obj/structure/disposalpipe/segment{dir = 4},/turf/open/space,/area/space) -"nw" = (/obj/structure/lattice,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/open/space,/area/space) -"nx" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/trunk,/obj/machinery/door/window/northleft{name = "Pneumatic Tube Access"},/obj/machinery/disposal/deliveryChute{dir = 1; pixel_y = -1},/turf/open/floor/plasteel{icon_state = "bot"; dir = 1},/area/mine/production) -"ny" = (/obj/structure/closet/crate{icon_state = "crateopen"; opened = 1},/obj/machinery/light,/turf/open/floor/plasteel{icon_state = "bot"; dir = 1},/area/mine/production) -"nA" = (/turf/open/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/mine/production) -"nC" = (/obj/machinery/mineral/stacking_machine{dir = 1; input_dir = 4},/turf/open/floor/plating{icon_state = "warnplate"; dir = 9},/area/mine/production) -"nD" = (/obj/machinery/conveyor{dir = 8; id = "mining_internal"},/turf/open/floor/plating{icon_state = "warnplate"; dir = 1},/area/mine/production) -"nE" = (/obj/machinery/conveyor{icon_state = "conveyor0"; dir = 10; id = "mining_internal"},/obj/machinery/light/small{dir = 4},/turf/open/floor/plating{icon_state = "warnplatecorner"; dir = 4},/area/mine/production) -"nF" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/open/floor/plating,/area/mine/explored) -"nG" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/closed/wall,/area/mine/production) -"nH" = (/obj/structure/disposaloutlet{dir = 1; eject_range = 1},/obj/structure/disposalpipe/trunk{dir = 1},/turf/open/floor/plating{icon_state = "warnplate"; dir = 1},/area/mine/production) -"nI" = (/obj/structure/girder/displaced,/turf/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/abandoned) -"nJ" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/brute{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/regular,/turf/open/floor/plasteel{dir = 4; icon_state = "whiteblue"},/area/mine/living_quarters) -"nK" = (/obj/machinery/atmospherics/pipe/simple,/obj/item/weapon/storage/box/lights,/turf/open/floor/plating,/area/mine/living_quarters) -"nL" = (/obj/structure/table,/obj/machinery/reagentgrinder,/turf/open/floor/plasteel{icon_state = "bar"},/area/mine/living_quarters) -"nM" = (/obj/item/weapon/rack_parts,/turf/open/floor/plasteel/airless{icon_state = "asteroidfloor"},/area/mine/abandoned) -"nN" = (/obj/structure/girder,/turf/open/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/abandoned) +"mD" = (/turf/open/floor/plasteel/airless{icon_state = "asteroidwarning"; dir = 4},/area/mine/explored) +"mE" = (/obj/machinery/light{dir = 1},/turf/open/floor/plating/asteroid/airless,/area/mine/living_quarters) +"mF" = (/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},/obj/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/mine/production) +"mG" = (/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/structure/window/reinforced/fulltile,/turf/open/floor/plating,/area/mine/production) +"mH" = (/obj/item/device/radio/beacon,/turf/open/floor/plasteel{dir = 9; icon_state = "warning"},/area/mine/production) +"mI" = (/turf/open/floor/plasteel{icon_state = "warningcorner"; dir = 4},/area/mine/production) +"mJ" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/machinery/computer/shuttle/mining{req_access = "0"},/obj/machinery/light{dir = 4},/obj/machinery/camera{c_tag = "Shuttle Docking Foyer"; dir = 8; network = list("MINE")},/obj/machinery/newscaster{pixel_x = 30; pixel_y = 1},/turf/open/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/mine/production) +"mK" = (/obj/structure/closet/crate{icon_state = "crateopen"; opened = 1},/turf/open/floor/plasteel{icon_state = "bot"; dir = 1},/area/mine/production) +"mL" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 2; on = 1},/turf/open/floor/plasteel,/area/mine/production) +"mM" = (/obj/machinery/camera{c_tag = "Processing Area Room"; dir = 8; network = list("MINE")},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = 28},/turf/open/floor/plasteel{dir = 4; icon_state = "warning"},/area/mine/production) +"mN" = (/obj/machinery/mineral/unloading_machine{dir = 1; icon_state = "unloader-corner"; input_dir = 1; output_dir = 2},/turf/open/floor/plating{icon_state = "warnplate"; dir = 9},/area/mine/production) +"mO" = (/obj/docking_port/stationary{dir = 8; dwidth = 3; height = 5; id = "mining_away"; name = "asteroid mine"; width = 7},/turf/open/space,/area/space) +"mP" = (/obj/machinery/door/airlock/external{name = "Mining Shuttle Airlock"; req_access_txt = "0"},/turf/open/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/mine/production) +"mQ" = (/turf/open/floor/plasteel,/area/mine/production) +"mR" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/open/floor/plasteel,/area/mine/production) +"mS" = (/obj/machinery/atmospherics/pipe/simple,/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/open/floor/plasteel{icon_state = "warningcorner"; dir = 8},/area/mine/production) +"mT" = (/obj/machinery/atmospherics/pipe/simple,/turf/open/floor/plasteel,/area/mine/production) +"mU" = (/obj/machinery/conveyor_switch/oneway{id = "mining_internal"; name = "mining conveyor"},/turf/open/floor/plasteel{dir = 4; icon_state = "warning"},/area/mine/production) +"mV" = (/obj/machinery/conveyor{dir = 2; id = "mining_internal"},/turf/open/floor/plating{icon_state = "warnplate"; dir = 8},/area/mine/production) +"mW" = (/obj/effect/decal/remains/human{desc = "Seems to be all that remains of a poor miner that didn't heed the warning signs."},/turf/open/floor/plating/asteroid/airless,/area/mine/explored) +"mX" = (/turf/open/floor/plasteel{dir = 10; icon_state = "warning"},/area/mine/production) +"mY" = (/turf/open/floor/plasteel{icon_state = "warningcorner"; dir = 1},/area/mine/production) +"mZ" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/open/floor/plasteel,/area/mine/production) +"na" = (/obj/machinery/atmospherics/pipe/manifold{dir = 8},/obj/structure/disposalpipe/junction{dir = 4; icon_state = "pipe-j2"},/turf/open/floor/plasteel,/area/mine/production) +"nb" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/open/floor/plasteel{dir = 4; icon_state = "warning"},/area/mine/production) +"nc" = (/obj/machinery/door/airlock/glass_mining{name = "Processing Area"; req_access_txt = "48"},/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/open/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/mine/production) +"nd" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/open/floor/plasteel{dir = 9; icon_state = "warning"},/area/mine/production) +"ne" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/open/floor/plasteel{icon_state = "warningcorner"; dir = 4},/area/mine/production) +"nf" = (/obj/machinery/atmospherics/pipe/simple/general/hidden{dir = 9},/turf/open/floor/plasteel,/area/mine/production) +"ng" = (/obj/machinery/light{dir = 4},/turf/open/floor/plasteel{dir = 4; icon_state = "warning"},/area/mine/production) +"nh" = (/obj/machinery/mineral/processing_unit_console,/turf/closed/wall/r_wall,/area/mine/production) +"ni" = (/obj/machinery/mineral/processing_unit{dir = 1; output_dir = 2},/turf/open/floor/plating{icon_state = "warnplate"; dir = 9},/area/mine/production) +"nj" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 1; on = 1},/turf/open/floor/plasteel,/area/mine/production) +"nk" = (/turf/open/floor/plasteel{dir = 4; icon_state = "warning"},/area/mine/production) +"nl" = (/obj/machinery/door/airlock/glass_mining{name = "Processing Area"; req_access_txt = "48"},/turf/open/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/mine/production) +"nm" = (/obj/structure/disposalpipe/segment,/turf/open/floor/plasteel{dir = 10; icon_state = "warning"},/area/mine/production) +"nn" = (/turf/open/floor/plasteel{dir = 2; icon_state = "warning"},/area/mine/production) +"no" = (/obj/structure/ore_box,/turf/open/floor/plasteel{dir = 6; icon_state = "warning"},/area/mine/production) +"np" = (/obj/structure/lattice,/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/open/space,/area/space) +"nq" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/open/floor/plasteel{dir = 10; icon_state = "warning"},/area/mine/production) +"nr" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/open/floor/plasteel{dir = 2; icon_state = "warning"},/area/mine/production) +"ns" = (/turf/open/floor/plasteel{dir = 6; icon_state = "warning"},/area/mine/production) +"nt" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/window/northleft{name = "Output Access"},/turf/open/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/mine/production) +"nu" = (/obj/machinery/door/window/northleft{base_state = "right"; icon_state = "right"; name = "Output Access"},/turf/open/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/mine/production) +"nv" = (/obj/machinery/mineral/stacking_unit_console,/turf/closed/wall/r_wall,/area/mine/production) +"nw" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/open/floor/plating,/area/mine/explored) +"nx" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/closed/wall/r_wall,/area/mine/explored) +"ny" = (/obj/structure/lattice,/obj/structure/disposalpipe/segment{dir = 4},/turf/open/space,/area/space) +"nz" = (/obj/structure/lattice,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/open/space,/area/space) +"nA" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/trunk,/obj/machinery/door/window/northleft{name = "Pneumatic Tube Access"},/obj/machinery/disposal/deliveryChute{dir = 1; pixel_y = -1},/turf/open/floor/plasteel{icon_state = "bot"; dir = 1},/area/mine/production) +"nB" = (/obj/structure/closet/crate{icon_state = "crateopen"; opened = 1},/obj/machinery/light,/turf/open/floor/plasteel{icon_state = "bot"; dir = 1},/area/mine/production) +"nC" = (/obj/structure/ore_box,/turf/open/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/mine/production) +"nD" = (/turf/open/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/mine/production) +"nE" = (/obj/machinery/conveyor{dir = 8; id = "mining_internal"},/obj/structure/plasticflaps,/obj/structure/barricade/wooden,/turf/open/floor/plating{icon_state = "warnplate"; dir = 1},/area/mine/production) +"nF" = (/obj/machinery/mineral/stacking_machine{dir = 1; input_dir = 4},/turf/open/floor/plating{icon_state = "warnplate"; dir = 9},/area/mine/production) +"nG" = (/obj/machinery/conveyor{dir = 8; id = "mining_internal"},/turf/open/floor/plating{icon_state = "warnplate"; dir = 1},/area/mine/production) +"nH" = (/obj/machinery/conveyor{icon_state = "conveyor0"; dir = 10; id = "mining_internal"},/obj/machinery/light/small{dir = 4},/turf/open/floor/plating{icon_state = "warnplatecorner"; dir = 4},/area/mine/production) +"nI" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/open/floor/plating,/area/mine/explored) +"nJ" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/closed/wall,/area/mine/production) +"nK" = (/obj/structure/disposaloutlet{dir = 1; eject_range = 1},/obj/structure/disposalpipe/trunk{dir = 1},/turf/open/floor/plating{icon_state = "warnplate"; dir = 1},/area/mine/production) +"nL" = (/obj/docking_port/stationary{dheight = 9; dir = 2; dwidth = 5; height = 24; id = "syndicate_z5"; name = "south of asteroid"; turf_type = /turf/open/space; width = 18},/turf/open/space,/area/space) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -736,215 +736,215 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaabababaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababaaaaaaaaaaababababacacacacacacabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaababababababababababababababababacacacacacacacacababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafaaaaafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababacacacacabababababababababacacacacacacacacacabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababacacacacacacacacacacacacacacacacacacacacacacababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacacacacacacacacacacacacacacacacacacacacacacababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafaiaiaiaiaiafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacacacacacacacacacacacacacacacacacacacacababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafaiaiaiaiaiafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacacacacacacacababababacacacacacacacacacacababababaaaaaaaaaaaaaaaaagahagaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafaiaiaiaiaiafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababacacacacacacababababababacacacacacacacacababababaaaaaaaaaaaaaaaaaaaaajakajalaaaaabababaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafaiaiaiaiaiafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaeaeacacacacacacababababababacacacacacacacacababaaaaaaaaaaaaaaaaaaaaaaaaanaoapaqalaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafaiaiaiafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaeaeacacacacacabababaaaaababacacacacacacacacababaaaaaaaaaaaaaaaaaaaaaaaaarasakajalaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafaaaaaaaaaaaaaaaaafafafaiaiaiafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababaaaaababacacacacacacacabababaaaaaaaaaaaaaaaaaaaaaaaaaratauavalalababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafaaaaaaaaaaaaaaafafafaiaiaiafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababaaaaababacacacacacacacababaaaaaaaaaaaaaaaaaaaaaaaaaaaaawakaxabababababababaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafaaaaafaaaaaaafafafaiaiaiaiafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaabababaaaaaaaaaaaaaaabababacacacacacacacababaaaaaaaaaaaaaaaaaaaaaaalalayaAakaxabababacacababababaaabababababaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafafafaaaaaaafafafaiaiaiaiafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaababaaaaaaaaaaaaaaabababacacacacacacacacabababalalalaaaaaaaaaaaaalalaBazaEaCaxabababacacababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafafafaaaaaaafafaiaiaiaiaiafafaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacacacacacacacababalaaaaaaaaaaaaalalaFaDaGaxaJaHaxaxaxaxacacacacabababababacababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafaiaiaiafafaaaaafafafaiaiaiaiaiafafaaaaaaaaaaaaafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacacacacacacacacacababalaaaaaaaaalaIaMaraLaKaNagaOaCaxaPaPaxacacacacacacacacacacacacacabababababaaaaaaaaaaaaaaaaaaaaaaaaafafaiaiaiafafafafafafafaiaiaiaiaiafafafaaaaaaaaafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacacacacacacacacacababalaaaaaaalaSaTaMauaRaQaQdfaCaJdhdgaPaxacacacacacacacacacacaeacacabababababaaaaaaaaaaaaaaaaaaaaafafafafaiaiaiafafafafafafaiaiaiaiaiaiafafafaaaaaaafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaababacacacacacacacacacacabababalaaaadiaSaTaSararbaaRaRaxaJdtaxaPduaxacacacacacacacacacacacacacabababaaaaaaaaaaaaaaaaaaaaafafafafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafaaafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaababacacacacacacacacacacabababalalaldvbearbfbgarbadtdtbhbaaJaxaxaxaxaxaxacacacacacacacacacacababababaaaaaaaaaaaaaaaaaaaaaaafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababacacacacacacacacacacababalalaleggRbmarbgaraubngSaJaxaQgTaxbqakaRbraxacacacacacacacabababababababaaaaaaaaaaaaaaaaaaaaaaafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaababababababababacababababababacacacacacacacacacacababalalalaxaNbabwarbmaRgXgWgYagaQaRaxbqakakbraxacacacacababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababacacacababacacacacacacacacacacacacacaxaxaxaxaxaxaKaRgZbaaRdthagYgYdfakakaxbqauaJbraxacacabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacacacacacacacacabacacacacacacacacacacacacacaxbJbKbLbMaxeghbgRaxbhaxhchchcaxaRakakakakbPgSaxacacababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacacacacacacacacacacacacacacacacacacacacacacaxbJcccdccceaJcfbPaJhegSaOhgaJgSaObaaxakdtaJaJaxacacababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaeacacacacacacacacacacacacacacacacacacacaxbJcccrcrcedtaJaJaOaCaJaJaJbPaJaJaJaxaJgSheaJaxacacababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababacacacacacacacacacacacacacacacacacacaxbJcFcrcGaxhmhlhchchldthlhchchcaJaJaxhnbPaJdtaxacacababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababdedeabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacacacacacacacacacacacacacacacacaxaxaxaxaxaxcPhlaJaJaJaJbPaJhohchegSaxhDhOhJcUaxacacababaaaaaabGbGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababdededeababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacacacacacacacacacacacacacacacacacacaxhmhlaJdtkSkRaCgSaJhcaJaJaxakdadaljaxacacababaaaabGbGbGbGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababdededeaUdededeabababaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaababacacacacacacacacacacacacacacacacacacacacaxhmhlaJgSaJaJhoaJdthlhmaxaxbqakdanMnIacacababaaaabGababbGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababdededeaVaWdeabababaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaaaabababacacacacacacacacacacacacacacacacacacaxdrhlhlhlhlhlhlhlhlhlhmaxbqakdsakljnNacacababaaaabGababbGbGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababdedededededeabababaaaaaaaaaaabababababababababaaaaaaaaaaaaaaaaabababacacacacacacacacacacacacacacacacacaxdrhmhmhmdDdEhmhmhmdrdraxbqdsdsdsbraxacacababaaaabGabababbGbGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafaaaaaaaaaaafafafafaaaaaaaaaaaaafaaaaaaaaafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababdedededededeababaaaaaaaaaaaaaaaaababdedeabababababaaaaaaaaaaaaaaababababacacacacacacacacacacacacacacacaxaxaxaxaxaxaxaxaxaxaxaxaxaxcUdSdTaxaxacacabababaabGabababbGbGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafaaaaafafafafafaaaaaaaaaaafafafafaaaaafafafafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababdededededeabababababaaaaaaaaaaaaaaababdededededeababbGbGaaaaaaaaaaaaaaabababacacacacacacacacacacacacacacacacacacacacacacacacacdcdcdcaxlNdadsaxdcacacabababaabGababababbGbGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafafafafafafafaaaaaaafafafafafaaaaafafafafaaaaaaaaaaaaafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababdededededeabababababaaaaaaaaaaaaabababdedededededeababbGbGaaaaaaaaaaaaaaababacacacacacacacacacacacacacacacacacacacacacacacacacdcdcdcaxeueveuaxdcacacacababbGbGabababababbGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafaiafafafafafafafafafafafaaaaafafafafaaaaaaaaafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababdedededeababababababaaaaaaaaaaabababdededededededeabababbGbGbGaaaaaaaaaaaaababacacacacacacacacacacacacacacacacacacacacacacacacacdcdcaxeFdSeGaxdcacacacabababbGabababababbGbGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafaiaiaiaiaiaiaiafafafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafafafafafaaaaafafafafafaaaaafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababdedededeababababababababababababababdededededededeabababbGbGbGbGbGaaaaaaaaababacacacacacacacacacacacacacacacacacacacacacacacacacdcdcdcePeQeRdcdcacacacabababbGababababababbGbGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafaiaiaiaiaiafafafafafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafaaaaaaafafafafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababdededededededededededeababababababdedededededededededeababbGbGbGbGaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacdcdcdcdcdcfadcdcacacacacababbGbGabababababbGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafaiaiaiafafafafafaaaaafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafaaaaafafaiafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababdededededededededededeababababdedededededededededededeababbGababbGbGaaaaaaaaababacacacacacacacacacacacacacacacacacacacacacacacdcdcdcdcdcdcdcfadcacacacacabababbGbGababababbGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafafafafafaaaaafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafafaiaiaiaiaiaiafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababdededededededededededededededededededededededededededeababbGabababbGaaaaaaaaaaababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababbGbGababababbGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafafafaaaaaaaaafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafaiaiaiaiaiafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababdedqdqdqdqdqdqdedededededededededededededededededededeababbGbGababbGbGbGaaaaaaababacacacacacamacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababbGbGbGbGbGbGaaaaaaaaaaaaaaaaaaaaaaalalalalalalalalalafafafaaaaaaaaaaafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaababaaaaaaaaaaaaaaaaaaaaaZaZdqdqdqdqdAdAdAdBdqdedededCdCdededededededededededededededeabababbGababababbGaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababbGbGbGbGbGaaaaaaaaaaaaaaaaaaaaalalbGbGbGbGbGbbbGalaaaaaaaaaaaaaaafafafaiaiaiaiaiaiaiaiaiafafafafafafafafafafafafafafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababacababababababaaaaaaaaaaaaaaaaaaaaaZdJdKdLdMdNdOdPdPdPdqdQdQdQdQdRdCdededededededededededededededeabababababababababaaaaaaababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababbGbGbdbcdjdjdjdjdjdjdjdjdjdjdkbkbGafafafafbkblbGbGbGaaaaaaaaaaafafafaiaiaiaiaiaiaiaiaiafafafafafafafafafafafafafafafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababacacacabababababaaaaaaaaaaaaaaaaaaaaaZeaebeceddNaddPefboeheiejejdQdRekdCdedededededededededededededeababacacacacacababaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacaeacacacacacacacacacacacacacacacacababbGbGbGhfhfhfhfbpbybxhfhfhfhfhfbGbGafafafafafafafafbGbGaaaaaaaaafafaiaiaiaiaiaiaiaiafafafbGbGbGbGbGbGbGbGbGbGbGbGbGbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacacacabababaaaaaaaaaaaaaaaaaadqdqdqdNemeneodNepeqdNdNdqdqdqeresetdCdCdededededededededededededededeabacacacacacabababaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababbGbGbGbzbzbzbzbzbEbzbzbzbzbzbzbGbGafafafaiafafafafafbGbGaaaaafafafaiaiaiaiaiaiaiafafafafbGbGbGbGbGbGbGbGbGbGbGbGbGbGafafafafafaiaiaiaiaiaiaiaiaiaiaiaiafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacacacacacabababaaaaaaaaaaaaaaaaaadqexeydNezdPdOeAeBdPeCdNeDeDeDdRejejdCdCdededededededededededededededeabacacacacacacababaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababbGbGbGbkdFdGdGdGdGdGdGdGdGdGdGbFbkbGafafafaiaiaiafafafafbbbGaaaaafafafaiaiaiaiaiaiafafbGbGbGbGbGbibibjbibibibGbGbGbGbGbGafafafafafaiaiaiaiaiaiaiaiaiaiaiafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababacacamacacacacabababalalalalalalalalaldqeHeIeJeKeLeMdPezdPdPeNeDeDejejejejeOdCdededededededededededededededeabacacacacacacababababaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabbGbGbGaaaaaaaaaaaaaaaaaaaaaaaaaaaabGbGafafaiaiaiaiaiafafafbkblbGaaafafafaiaiaiaiaiaiafafbGbGbGbGbGbibsbtbubvbibGbGbGbGbGbGbGbGbGafafaiaiaiaiaiaiaiaiaiaiaiafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacacacacacacababaaaaaaaaaaaaaaaaaaaadqeSeTeUeVeLeWdPezeXdPdNeYeZeZejejdRdRdCdCdedededededededededededededeabacacacacacacacacacabababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababbGbGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGafafafaiaiaiaiaiafafafafbGbGbGafafafaiaiaiaiaiafafbGbGbGbGbGbibAbBbCbDbibGbGbGbGbGbGbGbGbGafafaiaiaiaiaiaiaiaiaiaiaiafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacacacacacacacababaaaaaaaaaaaaaaaaaaaadqdNdNdNfbdPfceLfdeofefffgfgfhfiejdRdRfjdCdedededededededededededededeabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababbGbGaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaafafafaiaiaiaiaiaiafafafafbGbGafafafafafafafafafbGbGbGbibibibibibHbIbibibibibibibibibibGbGafafaiaiaiaiaiaiaiaiaiaiaiafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacacacacacacacacacababaaaaaaaaaaaaaaaaaaaafmfnfmfofpdPezdPdPfqfrdNfsftfuejejdRdRfvdCdededededededededededededeababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababbGbGabababababaaaaaaaaaaaaaaaaaaaaaaaaaaafafaiaiaiaiaiaiaiafafafafbGbGbkafafafafafafbkbGbGbGbTbQbRbSbTbUbVbWbXbXbXbYbZcacbbibGbGafafaiaiaiaiaiaiaiaiaiaiaiafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababacacacacacacacacacacacababaaaaaaaaaaaaaaaaaaaadqdqdqdqdPdPezeofwdNfxdNeDeDeDdRdRdRdRfydNdededededededededededededeabdcacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababbGbGbGabababababababaaaaaaaaaaaaaaaaaaaaaaaaafafaiaiaiaiaiaiaiaiafafafafbGbNbGbGbGbGbGbGbNbGbGbGbTcibXcjbTckclcmbibicncocpcpcqbibGbGafafaiaiaiaiaiaiaiaiaiaiaiaiafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababacacacacacacacacacacacacabababaaaaaaaaaaaaaaaaaaaaaadqfzdPdPezfAfBfCfDdNfEfFdRdRdRdReOdCdCdededededededededededededeabdcacacacacacacacacacacacacacaeacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababbGbGbGababababacabababaaaaaaaaaaaaaaaaaaaaaaaaafafaiaiaiaiaiaiaiaiaiafafafbGbGbGbGbGbGbGbGbGbGbGbGbictcucvcwcvcxcyczcAcBcCcDcEbGbGbGbGafafaiaiaiaiaiaiaiaiaiaiaiaiafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaabababaeaeaeaeacacacacacacacacacacacacacabababaaaaaaaaaaaaaaaaaafGfGfGfHfHfIfJfKfLfLdNfLfLfMdRejdRdReOdCdedededededededededededededeabdcacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababacacacabababaaaaaaaaaaaaaaaaaaaaaaafafaiaiaiaiaiaiaiaiaiaiafafafbGbGbGbGbGbGbGbGbGbGbGbTcKbXcLbTbXcMcycNcOcBbGbGbGbGbGbGbGafafaiaiaiaiaiaiaiaiaiaiaiaiafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababacacacacacacacacacacacacacacababaaaaaaaaaaaaaaaafNfOfHfPfHfHfQfRfSfTfUfVfWfXeDeDdRdRdRdCdCdedededededededededededededeabdcacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaeacacacacabababababacacacacacababababaaaaaaaaaaaaaaaaaaaaafafafaiaiaiaiaiaiaiaiaiafafafbkafafafafafafbkbGbGbGbTcVbXcWbTcXbXcycNcOcBbGbGbGbGbGbGbGafafaiaiaiaiaiaiaiaiafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababacacacacacacacacacacacacababaaaaaaaaaaaaaaaaaafGfLfLfLfYfJfLfLfZgagbfLfLgceDdRdRdCdCdedededededededededededededeababdcacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababaaaaaaaaaaaaaaaaaaaaafafafaiaiaiaiaiaiaiaiaiaiafafafafafafafafafafbGbGbGbibibTbTbibibTddbTcOcBbGbGbGbGbGbGbGafafaiaiaiaiaiaiaiaiafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacacacacacacacacacacabababaaaaaaaaaaaaaaaafGgdgegfggghgigjgkglgmgngogpgqgrdCdCdededededededededededededededeabdcdcacacacacacacacacacacacacacacacacacacacacacacacacacacacaeacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababaaaaaaaaaaaaaaaaaaaaafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafbGbGbGbGbGdldmdnbidobXdpcOcBbGbGbGbGbGbGbGafafaiaiaiaiaiaiaiaiafafaaafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacacacacacacacabababalalalalalalalalgtgugegvgegwfLgxgygygzgAfLdCdCdCdCdedededededededededededededededeabdcacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababaaaaaaaaaaaaaaaaaaafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafbGbGbGbGbGdwdwdwbidxdydzcOcBbGbGbGbGbGbGbGafafaiaiaiaiaiaiaiaiafafaaaaaaafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababacacacacacacacacacacababaaaaaaaaaaaaaaaagBgCgDgEgFgGfLgHgIgJgKgAfLdCdedededededededededededededededededeababdcacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababaaaaaaaaaaaaaaaaaaafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafbGbGbGbGbGbGbibTdHbTcOdIbGbGbGbGbGafafafafaiaiaiaiaiaiaiaiafafafafaaaaafafafaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababacacacacacacaeacacacabababaaaaaaaaaaaaaagLgMgNfGfGfGfLfLfLfLfLfLfLdCdedededededededededededededededededeabdcdcacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaeacacacacacacacacacacacacacabababaaaaaaaaaaaaaaaaafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafbGbGbGbGbGbGbGdUdVdWdXdYdZbGbGbGafafafafaiaiaiaiaiaiaiaiaiafafafaaaaaaaaafafaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacacacacacacacacacacabababaaaaaaaaaaaaaaaaaaaaafdCdCdCdCdCdCdCdCdCdCdedededededededededededededededededeabdcdcacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababaaaaaaaaaaaaaaaaafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafbGbGbGbGbGbGbGbGbGdUeleldWbGbGbGafafaiaiaiaiaiaiaiaiaiaiaiafafafaaaaaaaaaaaaaaaaaaaaaaaaafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacacacacacacacacacabababababaaaaaaaaaaababababdededededededededededededededededededededededededededeabdcacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababaaaaaaaaaaaaaaaaafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafafafbGbGbGewewbGbGbGafafafaiaiaiaiaiaiaiaiaiaiaiafafafaaaaaaaaaaaaaaaaaaaaaaafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacacacacacacacacacacababababababaaaaababababababdededededededededededededededededededededededededededeabdcacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababaaaaaaaaaaaaaaafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafafafafafewfkgsflbGafafaiaiaiaiaiaiaiaiaiaiaiaiafafaaaaaaaaaaaaaaaaaaaaaaaaafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacacacacacacacacacacacacacabababababababababdededededededededededededededededededededededededededededeabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababaaaaaaaaaaaaaaafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafaffkgsflewbGafafaiaiaiaiaiaiaiaiaiaiaiaiafafaaaaaaaaaaaaaaaaaaaaaaafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacacacacacacacacacacacacacacabababababababdededededededededededededededededededededededededededededeababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababaaaaaaaaaaaaafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafbGbGewewbGafafaiaiaiaiaiaiaiaiaiaiaiaiafafaaaaaaaaaaaaaaaaaaaaafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacacacacacacacacacacacacacacacacacacabdededededededededededededededededededededededededededededeabacacacacacacacacacacacacacacacacacacacacacacaeacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababaaaaaaaaaaafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafbGbGewewbGbGafaiaiaiaiaiaiaiaiaiaiaiaiafafaaaaaaaaaaaaaaaaaaaaafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababacacacacacacacacacacacacacacacacacacacabdededededededededededededededededededededededededededededeabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababaaaaaaaaaaafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafbGewewbGbGafafaiaiaiaiaiaiaiaiaiaiaiafafaaaaaaaaaaaaaaaaaaafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababacacacacacacacacacacacacacacacdcabdededededededededededededededededededededededededededededeabacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaeacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababaaaaaaaaaaafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafbGewfkflbGafafaiaiaiaiaiaiaiaiaiaiaiafafaaaaaaaaaaaaaaaaafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacacacacacacacacacacacacacacacdcabdedededededededededededededededededededededededededededeababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababaaaaaaaaaaafafafaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafaiaiaiaiaiaiaiaiaiaiafafbGfkflewbGafafaiaiaiaiaiaiaiaiaiaiaiafafafafaaaaaaaaaaaaafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacacacacacacacacacacacacacacdcabdededededededededededededededededededededededeababababababacacacacacacacacacacacacacacacacaeacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababaaaaaaaaafafafaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafaiaiaiaiaiaiaiaiaiaiafafbGbGewewbGbGafaiaiaiaiaiaiaiaiaiaiaiafafafafafbGaaaaaaafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacababababababacacacacacacacdcababdedededededededededededededededededeabababababdcdcdcdcacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababacacacacacacacacacacacabababaaaaaaaaaaafafafaiaiaiaiaiaiaiaiaiaiafafafafaaafafaiaiaiaiaiaiaiaiaiaiaiafafbGewewbGbGafafaiaiaiaiaiaiaiaiaiaiaiaiafafafbGaaaaaaafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacabababababababababacacacacacacdcdcabdedededededededededededededededeabababdcdcdcdcdcdcdcacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababacacacacacacacacacacacabababaaaaaaaaafafafaiaiaiaiaiaiaiaiaiaiafafafaaaaafafaiaiaiaiaiaiaiaiaiaiaiafafbGewfkflbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiafafbGbGbGafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacababababababaaaaabababababacacacacacdcabdededededededededededededededeababdcdcdcdcacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabbGbGabababababacacacacacacacacacabababaaaaaaaaaaafafafaiaiaiaiaiaiaiaiafafafaaaaafafafaiaiaiaiaiaiaiaiaiaiaiafafbGfkflewbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiafafbGbGafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacababababababaaaaaabGababababacacacacacacababdedededededededededededededeabdcdcacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababbGbGabababababacacacacacacacacacababaaaaaaaaaaafafafafafafaiaiaiaiafafafafaaaaafafafaiaiaiaiaiaiaiaiaiaiaiafafbGbGewewbGbGafaiaiaiaiaiaiaiaiaiaiaiaiaiafafbGbGafafafaiaiafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababaaaaaaaabGbGbGababacacacacacacacabababdededededededededededeababacacacacacacacacacacacacacacacacaeacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababbGbGbGababababacacacacacacacacabababaaaaaaaaaaafafafafafafafafafafafafaaaaaaafafaiaiaiaiaiaiaiaiaiaiaiaiaiafafgOdYdYdZbGafafaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafaiaiaiafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaabaaaaaaaaaabGabbGababacacacacacacacacacabababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababbGbGabababababacacacacacacabababaaaaaaaaaaaaaaaaafafafafafafafafaaaaaaafafafaiaiaiaiaiaiaiaiaiaiaiaiaiafafdUeleldWbGafafaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafaiaiaiafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaabGababababacacacacacacacacacacacdcdcdcdcdcacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababbGaaaaabababababacaeaeacababababaaaaaaaaaaaaaaaaaaaaaaafafafafaaaaaaaaafafafaiaiaiaiaiaiaiaiaiaiaiaiaiafafbGewewbGbGafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababacacacacacacacacacacacacacdcdcacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababaaaaaaaaababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafbGewewbGbGbGbGafaiaiafafafafafaiaiaiaiaiaiaiaiaiaiaiaiaiafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababaaaaaaaaababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafbGewewbGbGbGbGafaiaiafafbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafaiaiaiaiaiaiaiaiaiaiaiaiaiafafbGewewbGbGbGafafafafafbGbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacacacacacacacacacacacacacacacacacacacacacaeacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafaiaiaiaiaiaiaiaiaiaiaiaiafafbGewewbGbGbGafafafafbGbGafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaeacacacacacacacacacacacacacacacacacacacacacacacacacaeacacacacacababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafaiaiaiaiaiaiaiaiaiaiafafbGewewbGbGbGafafafbGbGbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafaiaiaiaiaiaiaiaiafafbGbGewewbGbGbGbGbGbGbGbGafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacacacacacaeacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaeacacacacacacacacacacacacacacacacacababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafaiaiaiaiaiaiaiafafbGbGewewbGbGbGbGbGbGbGbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafaaaaaaaaaaafafafafaiaiaiaiaiaiafafbGbGewewbGbGafafafbGbGbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacamacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafafafafaaaaaaafafafaiaiaiaiaiaiafafbGbGewewbGbGafafafafbGbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafafafafafafafafaaafafaiaiaiaiaiaiafafbGbGewewbGbGafafafafbGbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafaiaiaiaiafafafafafafafafaiaiaiaiaiafafbGbGbGewewbGbGafaiaiafafbGafafaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafaiaiaiaiaiaiaiafafafafafaiaiaiaiaiafafbGbGbGewewbGafafaiaiaiafafafafaiaiaiaiaiaiaiaiaiaiaiaiafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafbGbGgPgQewbGafafaiaiaiafaiafaiaiaiaiaiaiaiaiaiaiaiaiaiafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacamacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaeacabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafbGbGewgPgQbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaeacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababaaaaaaaaaaabababaaaaaaaaaaaaaaafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafbGbGbGewewbGbGafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababaaaaaaaaababababababaaaaaaaaaaafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafbGbGbGewewbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababaaaaaaababababababaaaaaaaaaaafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafbGbGbGewewbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaabababacacacacacacacacacacacaeacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaeacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababaaaaababababababaaaaaaaaaaafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafbGbGgPgQewbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababaaaaabababababababaaaaaaaaaaafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafbGbGewgPgQbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaabababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaeacacacacacacacacacacacacacacacacacacacacacacacacabababaaababaeacabababaaaaaaaaaaafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafbGbGbGewewbGbGafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababacacacababaaaaaaaaaaafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafbGbGbGewewbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaeacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababacacacabababaaaaaaaaaaafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafbGbGbGewewbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababaaaaaaaaaaafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafbGbGbGewewbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaeacacacacacacacacacacacacababaaaaaaaaaaafafafaiaiaiaiaiaiaiaiaiaiaiaiaiafafbGbGbGbGewewbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababaaaaaaaaafafafafaiaiaiaiaiaiaiaiaiaiaiaiafafbGbGbGbGewewbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababaaaaaaaaaaafafafaiaiaiaiaiaiaiaiaiaiaiaiaiafafafbGbGewewbGbGafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacacacacacacacacacacacacacacacacacacaeacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababaaaaaaaaaaaaafafafaiaiaiaiaiaiaiaiaiaiaiaiaiafafbGgOdYdYdZbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacaeacacacacacacacacacacacacacamacacacacacacacacacacacacacacacacacacacacacacacaeacacacacacacacacacacacacacacacaeacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababaaaaaaaaaaaaafafafafaiaiaiaiaiaiaiaiaiaiaiaiafafbGdUeleldWbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacabababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababaaaaaaaaaaaaaaafafafaiaiaiaiaiaiaiaiaiaiaiaiafafbGbGewewbGbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaeacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababaaaaaaaaaaaaaaaaafafafaiaiaiaiaiaiaiaiaiaiaiafafbGbGewewbGbGbGafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacababaaaaaaababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababaaaaaaaaaaaaaaafafafafaiaiaiaiaiaiaiaiaiaiaiafafbGewewbGbGbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaeacacacacacacacacacacacacacacaeacacacacacacacacacacacacacacacacacabababaaaaaaaaaaaaaaaaafafafaiaiaiaiaiaiaiaiaiaiaiafafbGewewbGbGbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababaaaaaaaaaaaaaaaaaaafafafaiaiaiaiaiaiaiaiaiaiafafbGewfkflbGbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababaaaaaaaaaaaaaaaaaaafafafafaiaiaiaiaiaiaiaiaiafafbGfkflewbGbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababaaaaaaaaaaaaaaaaaaaaafafafaiaiaiaiaiaiaiaiaiafafbGbGewewbGbGbGafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaeacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababaaaaaaaaaaaaaaaaaaaaaaafafafaiaiaiaiaiaiaiaiaiafafbGewewbGbGbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababaaaaaaaaaaaaaaaaaaaaaaafafafafaiaiaiaiaiaiaiaiafafbGewewbGbGbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababaaaaaaaaaaaaaaaaaaaaaaaaaaafafafaiaiaiaiaiaiaiaiafafbGewfkflbGbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaeacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafafaiaiaiaiaiaiaiafafbGfkflewbGbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababaaaaaaaaaaaaaaafaaaaaaaaaaaaafafafafaiaiaiaiaiaiafafbGbGewewbGbGbGafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacacacacacacacacacacacaeacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacamacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababaaaaaaaaaaaaaaafafaaaaaaaaaaaaafafafaiaiaiaiaiaiaiafafbGewewbGbGbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababacacacacacacacacacacacacacacacacacacacacacacacacacaeacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababaaaaaaaaaaaaaaafafafaaaaaaaaaaaaafafafaiaiaiaiaiaiafafbGewfkflbGbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaeacacacacacacacacacacacacacacacababaaaaaaaaaaaaaaafafafafafaaaaaaaaafafafafaiaiaiaiaiafafbGfkflewbGbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaababacacacacacacacacacacacacacacacacacacacacacacacacacaeacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaeacacacacacacacacacacacacacacabababaaaaaaaaaaaaaaafafafafafafaaaaaaaaafafafaiaiaiaiaiafafbGbGewewbGbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababaaaaaaaaaaaaafafafaiafafafafaaaaaaaaafafafaiaiaiaiaiafafbGewewbGbGbGafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababaaaaaaaaaaaaaaafafafaiaiafafafafaaaaaaafafafafaiaiaiaiafafbGewewbGbGbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababaaaaaaaaaaaaaaafafaiaiaiaiafafafafafbGbGafafafaiaiaiaiafafbGewfkflbGbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaeacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababaaaaaaaaaaaaaaafafaiaiaiaiaiafafafafafbGbGafafafaiaiaiafafbGfkflewbGbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababaaaaaaaaaaaaaaafafaiaiaiaiaiaiaiafafafafbGafafafafaiaiafafbGbGewewbGbGbGafaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacamacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababaaaaaaaaaaaaaaafafaiaiaiaiaiaiaiaiafafafbGbGafafafaiaiaiafafbGewewbGbGbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaeacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababaaaaaaaaaaaaafafafaiaiaiaiaiaiaiaiaiafafafbGbGafafaiaiaiafafbGewewbGbGbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababaaaaaaaaaaaaafafafaiaiaiaiaiaiaiaiaiaiafafafafafafaiaiaiafafbGewfkflbGbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababacabababaaaaaaaaaaaaafafaiaiaiaiaiaiaiaiaiaiaiaiafafafafafaiaiaiafafbGfkflewbGbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaeacacacacacacacacacacacacacacacacacabababababacababaaaaaaaaaaaaaaafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafbGbGewewbGbGbGafaiaiaiaiaiaiaiaiaiaiaiaiaiafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababacacababaaabababababaaaaaaaaaaaaaaafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafgOdYdYdZbGbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababaaabababababaaaaaaaaaaaaaaafafaiaiaiaiaiaiaiaiaiafafafafafafafafafafafafafafdUeleldWbGbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacaeacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababbGababababababaaabababababaaaaaaaaaaaaaaafafaiaiaiaiaiaiaiaiaiafafafafafafafafafafbGbGbGbGbGewewbGbGbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacacacacacabababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababbGbGbGabababaaaaabababababaaaaaaaaaaaaaaafafaiaiaiaiaiaiaiaiaiafafbGbGbGbGbGbGbGbGbGgPgsgsgsgQewbGbGbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacacacacababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacafafafafafafafafafafabababababababbGbGababaaaaabababababaaaaaaaaaaaaaaafafaiaiaiaiaiaiaiaiaiafafbGgPgsgsgsgsgsgsgsgQgPgsgsgsgQbGbGbGbGafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacacacababababbGbGcscsababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababacacacacacacacacacacacacacacacacacacacacacafhdhdhdhdhdhdhdafafabababacabababbGaaaaaaaaaaabababababaaaaaaaaaaaaaaafafaiaiaiaiaiaiaiaiafafafbGewgPgsgsgsgsgsgsgsgQbGbGbGbGbGbGbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababacacabababbGbGbGbGbGbGbGbGabababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababacacacacacacacacacacacacacacacacacacacacafafhdhhhihjhkhhhdafafabababacacabababaaaaaaaaaaabababababaaaaaaaaaaaaaaafafaiaiaiafafafafafafbGbGbGewewbGbGbGbGbGbGbGbGbGafafafafafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaababbGbGabababababbGbGbGbGbGbGbGbGbGbGbGbGabababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababbGababacacacacacacacacacacacacacacacacafafafafafafhdhhhphqhrhshdafafabababacacababababaaaaaaaaabababababaaaaaaaaaaaaafafafaiaiafafafafafafafbGbGbGewewbGbGbGbGafafafafafafafafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaabbGbGbGbGababbGbGbGbGbGhMhMhMbGbGbGbGbGbGbGababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababbGababacacacacacacacacacacacacacacacacafhthuhvafhwhdhdhdhxhdhdhdafafabababacacacababababaaaaaaababababaaaaaaaaaaaaafafafafafafafbGbGbGbGbGbGbGbGgPgQewbGbGbGafafafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaabGbGbGbGbGbGbGbGbGbGhPhQhRbGbGbGbGbGbGbGababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababbGababacacacacacacacacacacacacacacacacafhyhvhzafhwhAhBhwhChwafafafafabababacacacacabababaaaaaaababababaaaaaaaaaaafafafbGbGbGbGbGbGbGbGbGbGbGbGgPgQgPgQbGbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafaaafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababaaaaaaaaaaaaaaaaaaaabGhThThThThThThUhUhUhUhThThThThVbGababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababbGbGabababacacacacacacacacacacacacacacacafafhtdQafhwhEhFhGhChwbGafafafabababacacacacacabababaaaaababababaaaaaaaaafafafafbGbGbGgPgsgsgsgsgsgsgsgsgQgPgQbGbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafaaaaaaafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababbGaaaaaaaaaaaaaaaabGhUibicidhUieifigihiihUijikilcgbGabababacacacacacacacacacacacacacacacabababababababababababababacacacacacacacacacacacacacacababababbGbGababababacacacacacabababababacacacacafafhHafafhwhwhwhwhIhwbGbGafafafafafacacacacacababababaaaaabababaaaaaaaaaaafafbGbGbGbGewgPgsgsgsgsgsgsgsgsgQbGbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacababbGbGbGbGbGbGaaaaaaaaaabGhUizijiAhUiBiBiBiBiCiDijikiEchbGabababababababababababacacacacacabababababababababababababababababababacacacacacacacacabababababbGbGbGbGababababababacababababababacacacacafafcHafafhwhAhKhwhChLbGbGbGbGbGbGafafacacacacacabababaaaaabababaaaaaaaaaaafafbGbGbGbGewewbGbGbGbGbGbGbGbGbGbGbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafafaiafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacacababbGbGbGbGbGbGbGbGbGaaaabGhTiRijijiSijijijijiThUiUiVhUcIbGbGcsababababababababababacacababababababbGbGbGbGbGbGbGbGbGababababababacacacacacacababababababbGbGbGbGbGbGabababababababababbGababacafafafafafcHafafhwhEhFhNhChLbGbGbGbGbGbGbGafacacacacacacababaaaaababaaaaaaaaaaaaafafbGbGbGbGewewbGbGbGbGbGbGbGbGbGbGbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacacababababababbGbGbGbGbGbGbGhUjnijjojpjqjrjsijjthThThThThTgOdZbGbGdcdcdcdcdcdcdcababababababababbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGababababababababababababbGbGbGbGbGbGbGbGbGbGbGabababababbGbGababacafhwhwhwhwhShwhwhwhwhwhwhChLbGbGbGbGbGbGbGafafafafafabababababaaaaaaaaaaaaaaaaaaafafbGbGbGgOdYdYdZbGbGbGbGbGbGbGbGbGbGafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafafaaaaaaafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacacacacacacacacacababababababbGbGhUjHijjIhUjJjKjLijjMjNjOjPjQjRgUgVgsgsgsgsgscJcJflbGbGbGababababbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGababababababababababbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGabababbGbGabababafhwiminhWhXhYhZhwhAiahwhIhwhwhwhLhLhLhwbGbGbGbGbGababababaaaaaaaaaaaaafafafafafafbGbGbGbGdUeleldWbGbGbGbGbGbGbGbGbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafafafaaaaaaaaafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababacacacacacacacacacacacacababababbGhThThThThTkmknkohThTkpkqkqkqkqgUgVgsgsgsgsgsgsflfkflbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGabababbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGabbGbGabababafhwnLioioipioiqhwhEhFirhChwisitiuiuiuhLbGbGbGbGbGbGababaaaaaaaaaaaaaaaaafafafbGbGbGbGbGbGbGewiviwixixiyiybGbGbGbGbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafaaaaafafaaaaaaaaaaafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacacacacacacacacacacacacacabbGbGbGbGbGhTkNkOkPkQhTcQcRhtbGbGdUdWbGbGbGbGbGbGfkflfkflbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGabbGbGbGbGbGbGbGbGbGbGbGbGbGhwiGioiHiIiJiKhwhwhwhwhChwisiLiLiLiMhLbGbGbGbGbGbGabaaaaaaaaaaaaaaaaaabGbGbGbGbGbGbGbGgPgsgQiyiNiOiPiPiybGiQbGbGbGafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafaaaaaaaaafaaaaaaaaaaaaafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacacacacacacacacacacacabbGbGbGbGbGhTlnlolplqhTbGbGbGbGbGbGbGbGbGbGababdcbGfkflfkflbGbGbGbGgOdZbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGababababbGbGbGbGbGbGbGbGbGbGbGbGafhwiWioiXioiYioiZiMjajbjchwjdiLjeiLjfhLbGbGbGbGbGbGaaaaaaaaaaaaaaaaaaaaalaabGbGbGbGbGjgjhjijiiyjjjkjljmiyiyiyiycSbGbGafafafaiaiaiaiaiaiaiaiaiaiaiaiafafafafafaaaaaaaaaaaaaaaaaaafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacacacacacacacacacacababababbGbGbGhThThThThThTbGbGbGbGbGbGabababababababdcbGfkflfkgsgsgsgsgUgVgsgsflbGababbGbGababbGbGbGbGbGbGbGbGgOdZbGbGbGbGbGbGbGbGbGbGbGbGbGbGababababbGbGbGbGbGbGbGafafafafhwhwhwhwhwhwhwhLjujvhLjuhwhwhwhwhwjwhwhwhLhLbGbGaaaaaaaaaaaaaaaaaaaaaaalaaaaaabGbGjijijxjyjzjAjBjCjDjEixjFjGixcTbGbGbGcsafafaiaiaiaiaiaiaiaiaiaiaiafafafafafafafafaaaaaaaaaaaaafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacacacacacacacacacacacacababbGbGbGbGbGbGbGbGbGbGbGbGbGbGababababababababbGbGbGfkgsgsgsgsgsgUgVgsflewbGababababababbGgPgsgsgsgsgsgsgUgVgsgsgsgsgsgsgsflbGbGbGbGbGbGbGbGababababbGbGbGbGbGafafafafafafafhwjSjTjUiLjfjViMjfiZjWjXiLiMjfiLiLjYhLhLhLjZkakakakakakakakbkbkbkbkbkbkbjijijikckdkekfkgkhjCjDjDkikjkkklcYbGbGbGcsafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacacacacacacacacacacacacacababbGbGbGbGbGbGbGbGbGbGbGbGbGababababababbGbGbGbGbGbGbGbGbGbGbGdUdWbGewewbGabababababbGbGewgPgsgsgsgsgsgUgVgsgsgsgsgsgsflfkflbGgOdZdcdcbGbGbGabbGbGbGbGbGbGbGbGbGbGbGafafafhwhwhwhwkrjfksktkujbkvkwkwkxkxkwkwkykzkykzkAkAkAkAkAkAkAkAkBkBkBkBkBkBkBkCkDkCkDkEkFkGixkHkIkJkKixkLkMixcZbGbGbGbGafafafaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacababababababababababababbGababbGbGbGbGbGbGbGbGbGabababababbGbGbGbGbGbGbGbGbGababababbGbGbGewewbGbGbGgOdZbGbGbGewewbGbGbGbGbGdUdWbGbGbGbGbGbGfkflfkgsgUgVgsgsgsflbGbGbGbGbGbGbGbGbGbGbGbGbGbGafafafafafhwiLkTkUkVkVkUkWkXkYkVkVkUkUkZlalalalblblblblblblblblclclclclclcldlelelelflglhlijgjgjhjgjgjgjgjgjgdblklllklmcsafaiaiaiaiaiaiaiaiaiaiaiafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacababababababababababababbGababbGbGbGbGbGbGbGbGababababbGbGbGbGabababababababababababbGbGbGewfkgsgsgsgUgVgsgsgsgQewbGbGbGbGbGbGbGbGbGbGbGabbGbGfkgsgsgUgVgsgsflfkflbGbGbGbGgOdZbGbGbGbGbGbGbGbGbGafafhwhwhLlrhLhwhwlsltluhwhwhLlvhLhwhLbGbGbGaaaaaaaaalaaaaaaalaaaaaaaaaaalaajijilwlxlylzlAlBlClDlElElFlGlHlHlHlHlmbGafaiaiaiaiaiaiaiaiaiaiafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacacabababbGbGbGababbGbGbGbGbGbGababababababababababababababababababababababababababababbGbGbGbGfkgsgsgsgsgUgVgsgsgsgsgQbGbGbGbGbGbGbGbGbGbGabababbGbGbGbGdUdWbGbGfkflfkgsgsgsgsgUgVgsgsgsgsgsgsgsflbGbGafhwlIlJlKlLhwlMlPlOnKlZhwlRlSlTlUbGbGbGbGbGbGaaaaalaaaaaaalalalalalalalalaljglVlWlXjgjgjgjgjgjgjgjgjglYlmlmlmlmbGafaiaiaiaiaiaiaiaiaiafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacabababbGbGbGababbGbGbGbGbGbGabababacacacacacacacacacababababababababacacacacacacabababababbGbGbGbGbGbGdUdWbGbGbGbGbGbGbGbGbGbGbGabababababababababababababbGbGbGfkgsgsgsgsgsgUgVgsgsgsgsgsgsflewbGbGbGhwmcmambnJhwmdlQlQmemfhwmgmhmihwbGbGbGbGbGbGalalalalalalalaaaaaaaaaaalaaaljgmjmkmlmmjgmnmoeemqaYaYjgbGbGbGbGbGafafaiaiaiaiaiaiaiaiaiafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacabababbGbGbGbGbGbGbGaaaaaaaabGbGabababacacacacacacacacacacacacacacacacacacacacacacabababababbGbGbGbGbGbGbGbGbGbGbGbGbGbGabababbGbGbGababababababababababbGbGbGbGbGbGbGbGbGbGbGdUdWbGbGbGbGbGbGewewbGbGbGlUhwhwhwhwhwmsmtmumvmfhwhLmwhLhwbGbGbGbGbGbGaaaaalaaaaaaalaaaaaaaaaaalaajijilwmxmlmmlemykckdmzeEbOjgafafafafafafaiaiaiaiaiaiaiaiaiaiafafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababacacacacabababbGbGaaaaaaaaaaaaaaaaaaaabGabababacacacacacacacacacacacacacacacacacacacacacacacacacababbGbGbGbGbGbGbGbGbGbGbGbGababababababbGbGbGabababacabababbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGewfkgsflbGbGbGbGbGbGlUhwhwhwhwhwlUmCmCiFmDbGbGbGbGbGaaaaaaalaaaaaaalaaaaaaaaaamEjimFmGmHmxmlmIjgmJlwmKmLjgmMjgaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafaaaaaaafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababacacacacababbGbGaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababbGbGbGababacababbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGfkgsflfkflbGbGbGbGbGbGbGdUdVdVdVdVdVdVdWbGbGbGbGbGbGalalalalalalalalaaaaaaaamNmOlwmOlwmPmQmRmzlejylwmSmTjimBjgaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacacacacacacababbGaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababbGbGbGbGbGbGbGababacabababababababababababababababababababababbGbGbGbGbGfkflfkflmUbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGaaaaaaaaaaaaalaaaaaaaaaajijijimVmWmXmYmZnanbncndnenfngjgaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacacacacacababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababbGbGbGbGabababacababababababababababababababababababababbGbGbGbGbGbGbGfkflfkgsgsgsgsgsgsgsgsgsgsgsgsgsgsgsflbGbGbGbGbGbGaaaaaaaaaaalaaaaaaaaaaalaajijilwmxnhninjnknlnlmpjimBjgaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacacacababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacacacacacacacacacamacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababbGabababacacacacacacacacacacacacacacabababababbGbGbGbGbGbGafbGbGbGfkgsgsgsgsgsgsgsgsgsgsgsgsgsgsgsflewbGgOdZbGbGbGesesalaaaaalaaaaaaaaaaalaannlCnonpnlnmlenqnrnsjijimBjgaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacacacababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababababacacacacacacacacacacacacacacacababbGbGbGbGbGbGbGbGbGafafafbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGbGewfkgsgUgVgsgsgsntnunvnvnvnvnvnvnvnvnvnvnvnwjgnxnyjymJjgmrnAmAnCnDnEjgaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacacacababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababacacacacacacacacacacacacacacacababababababababbGbGbGababafafafbGbGbGbGbGbGbGafafbGbGbGbGbGbGfkgsgsgUgVgsgsgsnFnunvnvnvnvnvnvnvnvnvnvnvnvlCnGjgjijijgnHjgjgjgjgjgjgaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacacababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababbGbGababababafafafafafafafafafafafbGbGbGbGbGbGbGbGdUdWbGbGbGesesalaaaaaaaaaaaaaaaaaaaaalalalalalaljgjgjgaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababbGbGababacacacacacacabababbGbGbGbGbGbGbGbGabababababababababbGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababbGababacacacacacababababbGbGbGbGabbGbGababababababababababbGaaaaaaaaaaaaaaaaaaafafafafafafafafafafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababbGababacacacacababababbGbGbGababababababababacacacacabababaaaaaaaaaaaaaaaaaaafafafafafafafafafafafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafaaaaafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababacacacababababbGbGabababababababababacacacacababababaaaaaaaaaaaaaaaaafafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaabababacacacacacacacacacacacabababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababacacacabababbGbGbGababababacacacacacacacacababababaaaaaaaaaaaaaaaaafafafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacacacacacababababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababbGbGbGabababacacacacacacacacacacabababaaaaaaaaaaaaaaaaaaaaafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacacacacabababababababbGbGbGabababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababbGbGbGabababacacacacacacacacacacababaaaaaaaaaaaaaaaaaaaaaaafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababacacacacacababababababbGbGbGbGbGbGbGbGbGbGabababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababbGbGababacacacacacacacacacacababaaaaaaaaaaaaaaaaaaaaaaafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababacababababbGbGbGaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababbGababacacacacacacacacacacababaaaaaaaaaaaaaaaaaaaaaaafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababacababbGbGbGaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacacacacacacacacacacacacacacacacacacamacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababababacacacacacacacacacacababaaaaaaaaaaaaaaaaaaaaaaafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaababacababbGbGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababacacacacacacacacacacababaaaaaaaaaaaaaaaaaaaaaaafafaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacabababbGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababaaaaaaaaaaaaaaaaaaafafafaiaiaiaiaiaiaiaiaiaiafafafafafafafafaiaiaiaiaiaiafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacabababbGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababaaaaaaaaaaaaaaaaafafafaiaiaiaiaiaiaiafafafafafafafafafafafafaiaiaiafafafafafaaafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacamacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababaaaaaaaaaaaaaaaaaaafafaiaiaiaiaiaiaiafafafafafaaaaaaaaafafafaiaiaiafafafafaaaaafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacacabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababaaaaaaaaaaaaaaaaaaafafaiaiaiaiaiaiaiafafaaaaaaaaaaaaaaaaafafafafafafafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababacababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababaaaaaaaaaaaaaaaaaaafafaiaiaiaiaiaiafafafaaaaaaaaaaaaaaafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababababaaaaaaaaaaaaaaaaaaaaafafafaiaiaiaiafafafafaaaaaaaaaaaaaaaaafaaafafafaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababaaaaaaaaaaaaaaaaaaaaaaaaafafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababaaaaaaaaaaaaaaaaaaaaaaaaafafafafafafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaaaababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababaaaaaaaaaaaaaaaaaaaaaaaaafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababaaaaaaaaaaaaaaaaaaaaaaaaafafafafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababacacacacabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababacabababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababacacacacacacacacacacacacacacacacacacacacacacacacacacacacabababababababaaababababababababaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaaaababacacacacacacacacacacacacacacacacacabababababacabababababababaaaaaaabaaaaaaaaababababaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacacacacacacacacacacacacacacababababababababababababababaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacacacacacacacacacacacacacacacacababaaabababababaaaaaaababaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacacacacacacacacacacacacacababababababaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababacacacacacacacacacacacacacacacababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababacacacacacacacacabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababacacacacacacacabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacacacacababaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababacacacacacacababaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaabababaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaacacacaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacaaaaaaaaaaaaaaacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacaaaaaaaaaaacacacacadadadadadadacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaacacacacacacacacacacacacacacacacadadadadadadadadacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacadadadadacacacacacacacacacadadadadadadadadadacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacadadadadadadadadadadadadadadadadadadadadadadacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadadadadadadadadadadadadadadadadadadadadadadadacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaeaeaeaeaeabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacadadadadadadadadadadadadadadadadadadadadadadacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaeaeaeaeaeabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacadadadadadadadadacacacacadadadadadadadadadadacacacacaaaaaaaaaaaaaaaaafagafaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaeaeaeaeaeabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacadadadadadadacacacacacacadadadadadadadadacacacacaaaaaaaaaaaaaaaaaaaaahaiahajaaaaacacacaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaeaeaeaeaeababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacakakadadadadadadacacacacacacadadadadadadadadacacaaaaaaaaaaaaaaaaaaaaaaaaalamanaoajaaacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaeaeaeababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacakakadadadadadacacacaaaaacacadadadadadadadadacacaaaaaaaaaaaaaaaaaaaaaaaaapaqaiahajaaacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaabababaeaeaeababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacaaaaacacadadadadadadadacacacaaaaaaaaaaaaaaaaaaaaaaaaaparasatajajacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaabababaeaeaeababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacaaaaacacadadadadadadadacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaauaiavacacacacacacacaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaabaaaaaaabababaeaeaeaeababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacaaacacacaaaaaaaaaaaaaaacacacadadadadadadadacacaaaaaaaaaaaaaaaaaaaaaaajajawaxaiavacacacadadacacacacaaacacacacacaaacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaabababaeaeaeaeababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaacacaaaaaaaaaaaaaaacacacadadadadadadadadacacacajajajaaaaaaaaaaaaajajayazaAaBavacacacadadacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaababaeaeaeaeaeababaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadadadadadadadadacacajaaaaaaaaaaaaajajaCaDaEavaFaGavavavavadadadadacacacacacadacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaeaeaeababaaaaabababaeaeaeaeaeababaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacadadadadadadadadadadadacacajaaaaaaaaajaHaIapaJaKaLafaMaBavaNaNavadadadadadadadadadadadadadacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababaeaeaeabababababababaeaeaeaeaeabababaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacadadadadadadadadadadadacacajaaaaaaajaOaPaIasaQaRaRaSaBaFaTaUaNavadadadadadadadadadadakadadacacacacacaaaaaaaaaaaaaaaaaaaaababababaeaeaeababababababaeaeaeaeaeaeabababaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaacacadadadadadadadadadadacacacajaaaaaVaOaPaOapapaWaQaQavaFaXavaNaYavadadadadadadadadadadadadadacacacaaaaaaaaaaaaaaaaaaaaababababababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacaaaaacacadadadadadadadadadadacacacajajajaZbaapbbbcapaWaXaXbdaWaFavavavavavavadadadadadadadadadadacacacacaaaaaaaaaaaaaaaaaaaaaaabababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacadadadadadadadadadadacacajajajbebfbgapbcapasbhbiaFavaRbjavbkaiaQblavadadadadadadadacacacacacacacaaaaaaaaaaaaaaaaaaaaaaabababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaacacacacacacacacadacacacacacacadadadadadadadadadadacacajajajavaLaWbmapbgaQbnbobpafaRaQavbkaiaiblavadadadadacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaabababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacadadadacacadadadadadadadadadadadadadavavavavavavaKaQbqaWaQaXbrbpbpaSaiaiavbkasaFblavadadacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacadadadadadadadadadacadadadadadadadadadadadadadavbsbtbubvavbebwbfavbdavbxbxbxavaQaiaiaiaibybiavadadacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacadadadadadadadadadadadadadadadadadadadadadadadavbsbzbAbzbBaFbCbyaFbDbiaMbEaFbiaMaWavaiaXaFaFavadadacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacakadadadadadadadadadadadadadadadadadadadavbsbzbFbFbBaXaFaFaMaBaFaFaFbyaFaFaFavaFbibDaFavadadacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacadadadadadadadadadadadadadadadadadadavbsbGbFbHavbIbJbxbxbJaXbJbxbxbxaFaFavbKbyaFaXavadadacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacbLbLacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacadadadadadadadadadadadadadadadadadavavavavavavbMbJaFaFaFaFbyaFbNbxbDbiavbObPbQbRavadadacacaaaaaabSbSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacbLbLbLacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadadadadadadadadadadadadadadadadadadadavbIbJaFaXbTbUaBbiaFbxaFaFavaibVbVbWavadadacacaaaabSbSbSbSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacbLbLbLbXbLbLbLacacacaaaaaaaaaaacacacacacaaaaaaaaaaaaaaaaaaacacadadadadadadadadadadadadadadadadadadadadavbIbJaFbiaFaFbNaFaXbJbIavavbkaibVbYbZadadacacaaaabSacacbSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacbLbLbLcacbbLacacacaaaaaaaaaaacacacacacacacaaaaaaaaaaaaaaaaaaacacacadadadadadadadadadadadadadadadadadadavccbJbJbJbJbJbJbJbJbJbIavbkaicdaibWceadadacacaaaabSacacbSbSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacbLbLbLbLbLbLacacacaaaaaaaaaaacacacacacacacacacaaaaaaaaaaaaaaaaacacacadadadadadadadadadadadadadadadadadavccbIbIbIcfcgbIbIbIccccavbkcdcdcdblavadadacacaaaabSacacacbSbSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababaaaaaaaaaaababababaaaaaaaaaaaaabaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacbLbLbLbLbLbLacacaaaaaaaaaaaaaaaaacacbLbLacacacacacaaaaaaaaaaaaaaacacacacadadadadadadadadadadadadadadadavavavavavavavavavavavavavavbRchciavavadadacacacaabSacacacbSbSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababababaaaaabababababaaaaaaaaaaababababaaaaababababaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacbLbLbLbLbLacacacacacaaaaaaaaaaaaaaacacbLbLbLbLbLacacbSbSaaaaaaaaaaaaaaacacacadadadadadadadadadadadadadadadadadadadadadadadadadcjcjcjavckbVcdavcjadadacacacaabSacacacacbSbSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababababababababababababaaaaaaabababababaaaaababababaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacbLbLbLbLbLacacacacacaaaaaaaaaaaaacacacbLbLbLbLbLbLacacbSbSaaaaaaaaaaaaaaacacadadadadadadadadadadadadadadadadadadadadadadadadadcjcjcjavclcmclavcjadadadacacbSbSacacacacacbSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababababababaeabababababababababababaaaaababababaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacbLbLbLbLacacacacacacaaaaaaaaaaacacacbLbLbLbLbLbLbLacacacbSbSbSaaaaaaaaaaaaacacadadadadadadadadadadadadadadadadadadadadadadadadadcjcjavcnchcoavcjadadadacacacbSacacacacacbSbSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaeaeaeaeaeaeaeabababababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababababababababababaaaaabababababaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacbLbLbLbLacacacacacacacacacacacacacacbLbLbLbLbLbLbLacacacbSbSbSbSbSaaaaaaaaacacadadadadadadadadadadadadadadadadadadadadadadadadadcjcjcjcpcqcrcjcjadadadacacacbSacacacacacacbSbSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaeaeaeaeaeabababababababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababaaaaaaababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacbLbLbLbLbLbLbLbLbLbLbLacacacacacacbLbLbLbLbLbLbLbLbLbLacacbSbSbSbSaaaaaaaaaaacadadadadadadadadadadadadadadadadadadadadadadadadadcjcjcjcjcjcscjcjadadadadacacbSbSacacacacacbSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaeaeaeabababababaaaaababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababaaaaababaeababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacbLbLbLbLbLbLbLbLbLbLbLacacacacbLbLbLbLbLbLbLbLbLbLbLbLacacbSacacbSbSaaaaaaaaacacadadadadadadadadadadadadadadadadadadadadadadadcjcjcjcjcjcjcjcscjadadadadacacacbSbSacacacacbSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababaaaaabababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababababababaeaeaeaeaeaeabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLacacbSacacacbSaaaaaaaaaaacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacbSbSacacacacbSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaabababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababababababaeaeaeaeaeabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacbLctctctctctctbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLacacbSbSacacbSbSbSaaaaaaacacadadadadadcuadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacbSbSbSbSbSbSaaaaaaaaaaaaaaaaaaaaaaajajajajajajajajajabababaaaaaaaaaaababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacaaacacaaaaaaaaaaaaaaaaaaaacvcvctctctctcwcwcwcxctbLbLbLcycybLbLbLbLbLbLbLbLbLbLbLbLbLbLbLacacacbSacacacacbSaaaaaaaaacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacbSbSbSbSbSaaaaaaaaaaaaaaaaaaaaajajbSbSbSbSbSczbSajaaaaaaaaaaaaaaabababaeaeaeaeaeaeaeaeaeababababababababababababababababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacadacacacacacacaaaaaaaaaaaaaaaaaaaacvcAcBcCcDcEcFcGcGcGctcHcHcHcHcIcybLbLbLbLbLbLbLbLbLbLbLbLbLbLbLacacacacacacacacacaaaaaaacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacbSbScJcKcLcLcLcLcLcLcLcLcLcLcMcNbSababababcNcObSbSbSaaaaaaaaaaabababaeaeaeaeaeaeaeaeaeabababababababababababababababababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacadadadacacacacacaaaaaaaaaaaaaaaaaaaacvcPcQcRcScEcTcGcUcVcWcXcYcYcHcIcZcybLbLbLbLbLbLbLbLbLbLbLbLbLbLacacadadadadadacacaaaaaaaaacadadadadadadadadadadadadadadadadadadadadadakadadadadadadadadadadadadadadadadacacbSbSbSdadadadadbdcdddadadadadabSbSababababababababbSbSaaaaaaaaababaeaeaeaeaeaeaeaeabababbSbSbSbSbSbSbSbSbSbSbSbSbSbSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadadadadacacacaaaaaaaaaaaaaaaaaactctctcEdedfdgcEdhdicEcEctctctdjdkdlcycybLbLbLbLbLbLbLbLbLbLbLbLbLbLbLacadadadadadacacacaaaaaaacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacbSbSbSdmdmdmdmdmdndmdmdmdmdmdmbSbSabababaeabababababbSbSaaaaabababaeaeaeaeaeaeaeababababbSbSbSbSbSbSbSbSbSbSbSbSbSbSabababababaeaeaeaeaeaeaeaeaeaeaeaeababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacadadadadadadadacacacaaaaaaaaaaaaaaaaaactdodpcEdqcGcFdrdscGdtcEdududucIcYcYcycybLbLbLbLbLbLbLbLbLbLbLbLbLbLbLacadadadadadadacacaaaaaaacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacbSbSbScNdvdwdwdwdwdwdwdwdwdwdwdxcNbSabababaeaeaeababababczbSaaaaabababaeaeaeaeaeaeababbSbSbSbSbSdydydzdydydybSbSbSbSbSbSabababababaeaeaeaeaeaeaeaeaeaeaeababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacadadcuadadadadacacacajajajajajajajajajctdAdBdCdDdEdFcGdqcGcGdGduducYcYcYcYdHcybLbLbLbLbLbLbLbLbLbLbLbLbLbLbLacadadadadadadacacacacaaacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacbSbSbSaaaaaaaaaaaaaaaaaaaaaaaaaaaabSbSababaeaeaeaeaeabababcNcObSaaabababaeaeaeaeaeaeababbSbSbSbSbSdydIdJdKdLdybSbSbSbSbSbSbSbSbSababaeaeaeaeaeaeaeaeaeaeaeababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacadadadadadadadacacaaaaaaaaaaaaaaaaaaaactdMdNdOdPdEdQcGdqdRcGcEdSdTdTcYcYcIcIcycybLbLbLbLbLbLbLbLbLbLbLbLbLbLacadadadadadadadadadacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacbSbSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabSabababaeaeaeaeaeababababbSbSbSabababaeaeaeaeaeababbSbSbSbSbSdydUdVdWdXdybSbSbSbSbSbSbSbSbSababaeaeaeaeaeaeaeaeaeaeaeababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacadadadadadadadadadacacaaaaaaaaaaaaaaaaaaaactcEcEcEdYcGdZdEeadgebecededeeefcYcIcIegcybLbLbLbLbLbLbLbLbLbLbLbLbLbLacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacbSbSaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaaabababaeaeaeaeaeaeababababbSbSabababababababababbSbSbSdydydydydyeheidydydydydydydydydybSbSababaeaeaeaeaeaeaeaeaeaeaeabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacadadadadadadadadadadacacaaaaaaaaaaaaaaaaaaaaejekejelemcGdqcGcGeneocEepeqercYcYcIcIescybLbLbLbLbLbLbLbLbLbLbLbLbLacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacbSbSacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaababaeaeaeaeaeaeaeababababbSbScNababababababcNbSbSbSeteuevewetexeyezeAeAeAeBeCeDeEdybSbSababaeaeaeaeaeaeaeaeaeaeaeabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacadadadadadadadadadadadacacaaaaaaaaaaaaaaaaaaaactctctctcGcGdqdgeFcEeGcEdududucIcIcIcIeHcEbLbLbLbLbLbLbLbLbLbLbLbLbLaccjadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacbSbSbSacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaababaeaeaeaeaeaeaeaeababababbSeIbSbSbSbSbSbSeIbSbSbSeteJeAeKeteLeMeNdydyeOePeQeQeRdybSbSababaeaeaeaeaeaeaeaeaeaeaeaeababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacadadadadadadadadadadadadacacacaaaaaaaaaaaaaaaaaaaaaacteScGcGdqeTeUeVeWcEeXeYcIcIcIcIdHcycybLbLbLbLbLbLbLbLbLbLbLbLbLaccjadadadadadadadadadadadadadakadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacbSbSbSacacacacadacacacaaaaaaaaaaaaaaaaaaaaaaaaababaeaeaeaeaeaeaeaeaeabababbSbSbSbSbSbSbSbSbSbSbSbSdyeZfafbfcfbfdfefffgfhfifjfkbSbSbSbSababaeaeaeaeaeaeaeaeaeaeaeaeabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaacacacakakakakadadadadadadadadadadadadadacacacaaaaaaaaaaaaaaaaaaflflflfmfmfnfofpfqfqcEfqfqfrcIcYcIcIdHcybLbLbLbLbLbLbLbLbLbLbLbLbLbLaccjadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacacacacacadadadacacacaaaaaaaaaaaaaaaaaaaaaaababaeaeaeaeaeaeaeaeaeaeabababbSbSbSbSbSbSbSbSbSbSbSetfseAfteteAfufefvfwfhbSbSbSbSbSbSbSababaeaeaeaeaeaeaeaeaeaeaeaeabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacadadadadadadadadadadadadadadacacaaaaaaaaaaaaaaaafxfyfmfzfmfmfAfBfCfDfEfFfGfHduducIcIcIcycybLbLbLbLbLbLbLbLbLbLbLbLbLbLaccjadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadakadadadadacacacacacadadadadadacacacacaaaaaaaaaaaaaaaaaaaaabababaeaeaeaeaeaeaeaeaeabababcNababababababcNbSbSbSetfIeAfJetfKeAfefvfwfhbSbSbSbSbSbSbSababaeaeaeaeaeaeaeaeabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacadadadadadadadadadadadadacacaaaaaaaaaaaaaaaaaaflfqfqfqfLfofqfqfMfNfOfqfqfPducIcIcycybLbLbLbLbLbLbLbLbLbLbLbLbLbLacaccjadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacaaaaaaaaaaaaaaaaaaaaabababaeaeaeaeaeaeaeaeaeaeababababababababababbSbSbSdydyetetdydyetfQetfwfhbSbSbSbSbSbSbSababaeaeaeaeaeaeaeaeababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacadadadadadadadadadadadacacacaaaaaaaaaaaaaaaaflfRfSfTfUfVfWfXfYfZgagbgcgdgegfcycybLbLbLbLbLbLbLbLbLbLbLbLbLbLbLaccjcjadadadadadadadadadadadadadadadadadadadadadadadadadadadakadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacaaaaaaaaaaaaaaaaaaaaababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababbSbSbSbSbSggghgidygjeAgkfwfhbSbSbSbSbSbSbSababaeaeaeaeaeaeaeaeababaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacadadadadadadadadadacacacajajajajajajajajglgmfSgnfSgofqgpgqgqgrgsfqcycycycybLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLaccjadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacaaaaaaaaaaaaaaaaaaababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababbSbSbSbSbSgtgtgtdygugvgwfwfhbSbSbSbSbSbSbSababaeaeaeaeaeaeaeaeababaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacadadadadadadadadadadacacaaaaaaaaaaaaaaaagxgygzgAgBgCfqgDgEgFgGgsfqcybLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLacaccjadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacaaaaaaaaaaaaaaaaaaababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababababbSbSbSbSbSbSdyetgHetfwgIbSbSbSbSbSababababaeaeaeaeaeaeaeaeababababaaaaabababaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacadadadadadadakadadadacacacaaaaaaaaaaaaaagJgKgLflflflfqfqfqfqfqfqfqcybLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLaccjcjadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadakadadadadadadadadadadadadadacacacaaaaaaaaaaaaaaaaabababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabbSbSbSbSbSbSbSgMgNgOgPgQgRbSbSbSababababaeaeaeaeaeaeaeaeaeabababaaaaaaaaababaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacadadadadadadadadadadadacacacaaaaaaaaaaaaaaaaaaaaabcycycycycycycycycycybLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLaccjcjadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacaaaaaaaaaaaaaaaaabababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabbSbSbSbSbSbSbSbSbSgMgSgSgObSbSbSababaeaeaeaeaeaeaeaeaeaeaeabababaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadadadadadadadadadadacacacacacaaaaaaaaaaacacacacbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLaccjadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacaaaaaaaaaaaaaaaaababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababababababababbSbSbSgTgTbSbSbSabababaeaeaeaeaeaeaeaeaeaeaeabababaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacadadadadadadadadadadadadacacacacacacaaaaacacacacacacbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLaccjadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacaaaaaaaaaaaaaaababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababababababababababgTgUgVgWbSababaeaeaeaeaeaeaeaeaeaeaeaeababaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacadadadadadadadadadadadadadadadacacacacacacacacacbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacaaaaaaaaaaaaaaababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababababgUgVgWgTbSababaeaeaeaeaeaeaeaeaeaeaeaeababaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacadadadadadadadadadadadadadadadadacacacacacacacbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacaaaaaaaaaaaaababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababbSbSgTgTbSababaeaeaeaeaeaeaeaeaeaeaeaeababaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadadadadadadadadadadadadadadadadadadadacbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLacadadadadadadadadadadadadadadadadadadadadadadakadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacaaaaaaaaaaabababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababbSbSgTgTbSbSabaeaeaeaeaeaeaeaeaeaeaeaeababaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacadadadadadadadadadadadadadadadadadadadacbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacaaaaaaaaaaabababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababbSgTgTbSbSababaeaeaeaeaeaeaeaeaeaeaeababaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacadadadadadadadadadadadadadadadcjacbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadakadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacaaaaaaaaaaababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababbSgTgUgWbSababaeaeaeaeaeaeaeaeaeaeaeababaaaaaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacadadadadadadadadadadadadadadadadcjacbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacaaaaaaaaaaabababaeaeaeaeaeaeaeaeaeaeaeaeaeabababababaeaeaeaeaeaeaeaeaeaeababbSgUgWgTbSababaeaeaeaeaeaeaeaeaeaeaeababababaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadadadadadadadadadadadadadadadcjacbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLacacacacacacadadadadadadadadadadadadadadadadakadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacaaaaaaaaabababaeaeaeaeaeaeaeaeaeaeaeaeababababababaeaeaeaeaeaeaeaeaeaeababbSbSgTgTbSbSabaeaeaeaeaeaeaeaeaeaeaeabababababbSaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadadacacacacacacadadadadadadadcjacacbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLacacacacaccjcjcjcjadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacacadadadadadadadadadadadacacacaaaaaaaaaaabababaeaeaeaeaeaeaeaeaeaeababababaaababaeaeaeaeaeaeaeaeaeaeaeababbSgTgTbSbSababaeaeaeaeaeaeaeaeaeaeaeaeabababbSaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadacacacacacacacacacadadadadadadcjcjacbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLacacaccjcjcjcjcjcjcjadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacacacadadadadadadadadadadadacacacaaaaaaaaabababaeaeaeaeaeaeaeaeaeaeabababaaaaababaeaeaeaeaeaeaeaeaeaeaeababbSgTgUgWbSababaeaeaeaeaeaeaeaeaeaeaeaeaeababbSbSbSababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacadadacacacacacacaaaaacacacacacadadadadadcjacbLbLbLbLbLbLbLbLbLbLbLbLbLbLbLacaccjcjcjcjadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacbSbSacacacacacadadadadadadadadadacacacaaaaaaaaaaabababaeaeaeaeaeaeaeaeabababaaaaabababaeaeaeaeaeaeaeaeaeaeaeababbSgUgWgTbSababaeaeaeaeaeaeaeaeaeaeaeaeaeababbSbSabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadacacacacacacaaaaaabSacacacacadadadadadadacacbLbLbLbLbLbLbLbLbLbLbLbLbLbLaccjcjadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacbSbSacacacacacadadadadadadadadadacacaaaaaaaaaaababababababaeaeaeaeababababaaaaabababaeaeaeaeaeaeaeaeaeaeaeababbSbSgTgTbSbSabaeaeaeaeaeaeaeaeaeaeaeaeaeababbSbSabababaeaeababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacaaaaaaaabSbSbSacacadadadadadadadacacacbLbLbLbLbLbLbLbLbLbLbLacacadadadadadadadadadadadadadadadadakadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacbSbSbSacacacacadadadadadadadadacacacaaaaaaaaaaababababababababababababaaaaaaababaeaeaeaeaeaeaeaeaeaeaeaeaeababgXgQgQgRbSababaeaeaeaeaeaeaeaeaeaeaeaeababababababaeaeaeababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacaaaaacaaaaaaaaaabSacbSacacadadadadadadadadadacacacacacacacacacacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacbSbSacacacacacadadadadadadacacacaaaaaaaaaaaaaaaaababababababababaaaaaaabababaeaeaeaeaeaeaeaeaeaeaeaeaeababgMgSgSgObSababaeaeaeaeaeaeaeaeaeaeaeaeababababababaeaeaeababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaabSacacacacadadadadadadadadadadadcjcjcjcjcjadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacbSaaaaacacacacacadakakadacacacacaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaabababaeaeaeaeaeaeaeaeaeaeaeaeaeababbSgTgTbSbSabababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacadadadadadadadadadadadadadcjcjadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacaaaaaaaaacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaeaeaeaeaeaeaeaeaeaeaeaeaeaeababbSgTgTbSbSbSbSabaeaeabababababaeaeaeaeaeaeaeaeaeaeaeaeaeababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacaaaaaaaaacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaeaeaeaeaeaeaeaeaeaeaeaeaeaeababbSgTgTbSbSbSbSabaeaeababbSababaeaeaeaeaeaeaeaeaeaeaeaeaeabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacaaaaaaaaaaacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaeaeaeaeaeaeaeaeaeaeaeaeaeababbSgTgTbSbSbSabababababbSbSababaeaeaeaeaeaeaeaeaeaeaeaeaeabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadadadadadadadadadadadadadadadadadadadadadadakadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaeaeaeaeaeaeaeaeaeaeaeaeababbSgTgTbSbSbSababababbSbSabababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadakadadadadadadadadadadadadadadadadadadadadadadadadadakadadadadadacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaeaeaeaeaeaeaeaeaeaeababbSgTgTbSbSbSabababbSbSbSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaeaeaeaeaeaeaeaeababbSbSgTgTbSbSbSbSbSbSbSbSabababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadadadadadadakadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadakadadadadadadadadadadadadadadadadadacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaeaeaeaeaeaeaeababbSbSgTgTbSbSbSbSbSbSbSbSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaababababaeaeaeaeaeaeababbSbSgTgTbSbSabababbSbSbSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadcuadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababaaaaaaabababaeaeaeaeaeaeababbSbSgTgTbSbSababababbSbSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababaaababaeaeaeaeaeaeababbSbSgTgTbSbSababababbSbSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaeaeaeaeababababababababaeaeaeaeaeababbSbSbSgTgTbSbSabaeaeababbSababaeaeaeaeaeaeaeaeaeaeaeaeababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaeaeaeaeaeaeaeabababababaeaeaeaeaeababbSbSbSgTgTbSababaeaeaeababababaeaeaeaeaeaeaeaeaeaeaeaeababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababbSbSgYgZgTbSababaeaeaeabaeabaeaeaeaeaeaeaeaeaeaeaeaeaeababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadcuadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadakadacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababbSbSgTgYgZbSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadakadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacaaaaaaaaaaacacacaaaaaaaaaaaaaaabababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababbSbSbSgTgTbSbSabaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacaaaaaaaaacacacacacacaaaaaaaaaaababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababbSbSbSgTgTbSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacaaaaaaacacacacacacaaaaaaaaaaabababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababbSbSbSgTgTbSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaacacacadadadadadadadadadadadakadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadakadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacaaaaacacacacacacaaaaaaaaaaabababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababbSbSgYgZgTbSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacaaaaacacacacacacacaaaaaaaaaaababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababbSbSgTgYgZbSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaacacacacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadakadadadadadadadadadadadadadadadadadadadadadadadadacacacaaacacakadacacacaaaaaaaaaaabababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababbSbSbSgTgTbSbSabaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacacacadadadacacaaaaaaaaaaabababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababbSbSbSgTgTbSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadakadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacacadadadacacacaaaaaaaaaaababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababbSbSbSgTgTbSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacaaaaaaaaaaababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababbSbSbSgTgTbSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadakadadadadadadadadadadadadacacaaaaaaaaaaabababaeaeaeaeaeaeaeaeaeaeaeaeaeababbSbSbSbSgTgTbSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacaaaaaaaaababababaeaeaeaeaeaeaeaeaeaeaeaeababbSbSbSbSgTgTbSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacaaaaaaaaaaabababaeaeaeaeaeaeaeaeaeaeaeaeaeabababbSbSgTgTbSbSabaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadadadadadadadadadadadadadadadadadadadakadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacaaaaaaaaaaaaabababaeaeaeaeaeaeaeaeaeaeaeaeaeababbSgXgQgQgRbSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacadakadadadadadadadadadadadadadcuadadadadadadadadadadadadadadadadadadadadadadadakadadadadadadadadadadadadadadadakadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacaaaaaaaaaaaaababababaeaeaeaeaeaeaeaeaeaeaeaeababbSgMgSgSgObSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacadadadadacacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacaaaaaaaaaaaaaaabababaeaeaeaeaeaeaeaeaeaeaeaeababbSbSgTgTbSbSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacadadadacacacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadakadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacaaaaaaaaaaaaaaaaabababaeaeaeaeaeaeaeaeaeaeaeababbSbSgTgTbSbSbSabaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacadadacacaaaaaaacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacaaaaaaaaaaaaaaababababaeaeaeaeaeaeaeaeaeaeaeababbSgTgTbSbSbSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacaaaaaaaaacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadakadadadadadadadadadadadadadadakadadadadadadadadadadadadadadadadadacacacaaaaaaaaaaaaaaaaabababaeaeaeaeaeaeaeaeaeaeaeababbSgTgTbSbSbSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaaaaaaaaaaaaaaaaacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacaaaaaaaaaaaaaaaaaaabababaeaeaeaeaeaeaeaeaeaeababbSgTgUgWbSbSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacaaaaaaaaaaaaaaaaaaababababaeaeaeaeaeaeaeaeaeababbSgUgWgTbSbSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacaaaaaaaaaaaaaaaaaaaaabababaeaeaeaeaeaeaeaeaeababbSbSgTgTbSbSbSabaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadakadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacaaaaaaaaaaaaaaaaaaaaaaabababaeaeaeaeaeaeaeaeaeababbSgTgTbSbSbSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacaaaaaaaaaaaaaaaaaaaaaaababababaeaeaeaeaeaeaeaeababbSgTgTbSbSbSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacaaaaaaaaaaaaaaaaaaaaaaaaaaabababaeaeaeaeaeaeaeaeababbSgTgUgWbSbSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadakadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaeaeaeaeaeaeaeababbSgUgWgTbSbSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacaaaaaaaaaaaaaaabaaaaaaaaaaaaababababaeaeaeaeaeaeababbSbSgTgTbSbSbSabaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacadadadadadadadadadadadadakadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadcuadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacaaaaaaaaaaaaaaababaaaaaaaaaaaaabababaeaeaeaeaeaeaeababbSgTgTbSbSbSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacadadadadadadadadadadadadadadadadadadadadadadadadadakadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacaaaaaaaaaaaaaaabababaaaaaaaaaaaaabababaeaeaeaeaeaeababbSgTgUgWbSbSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadakadadadadadadadadadadadadadadadacacaaaaaaaaaaaaaaabababababaaaaaaaaababababaeaeaeaeaeababbSgUgWgTbSbSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaacacadadadadadadadadadadadadadadadadadadadadadadadadadakadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadakadadadadadadadadadadadadadadacacacaaaaaaaaaaaaaaababababababaaaaaaaaabababaeaeaeaeaeababbSbSgTgTbSbSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacaaaaaaaaaaaaabababaeababababaaaaaaaaabababaeaeaeaeaeababbSgTgTbSbSbSabaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacaaaaaaaaaaaaaaabababaeaeababababaaaaaaababababaeaeaeaeababbSgTgTbSbSbSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacaaaaaaaaaaaaaaababaeaeaeaeabababababbSbSabababaeaeaeaeababbSgTgUgWbSbSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadakadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacaaaaaaaaaaaaaaababaeaeaeaeaeabababababbSbSabababaeaeaeababbSgUgWgTbSbSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacaaaaaaaaaaaaaaababaeaeaeaeaeaeaeababababbSababababaeaeababbSbSgTgTbSbSbSabaeaeaeaeaeaeaeaeaeaeaeaeaeaeababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadcuadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacaaaaaaaaaaaaaaababaeaeaeaeaeaeaeaeabababbSbSabababaeaeaeababbSgTgTbSbSbSababaeaeaeaeaeaeaeaeaeaeaeaeaeababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadakadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacaaaaaaaaaaaaabababaeaeaeaeaeaeaeaeaeabababbSbSababaeaeaeababbSgTgTbSbSbSababaeaeaeaeaeaeaeaeaeaeaeaeaeababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacaaaaaaaaaaaaabababaeaeaeaeaeaeaeaeaeaeababababababaeaeaeababbSgTgUgWbSbSababaeaeaeaeaeaeaeaeaeaeaeaeaeababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacacadacacacaaaaaaaaaaaaababaeaeaeaeaeaeaeaeaeaeaeaeabababababaeaeaeababbSgUgWgTbSbSababaeaeaeaeaeaeaeaeaeaeaeaeaeabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadakadadadadadadadadadadadadadadadadadacacacacacadacacaaaaaaaaaaaaaaababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababbSbSgTgTbSbSbSabaeaeaeaeaeaeaeaeaeaeaeaeaeabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacacadadacacaaacacacacacaaaaaaaaaaaaaaababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababababgXgQgQgRbSbSababaeaeaeaeaeaeaeaeaeaeaeaeaeabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacacacacacacaaacacacacacaaaaaaaaaaaaaaababaeaeaeaeaeaeaeaeaeababababababababababababababgMgSgSgObSbSababaeaeaeaeaeaeaeaeaeaeaeaeaeababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadakadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacbSacacacacacacaaacacacacacaaaaaaaaaaaaaaababaeaeaeaeaeaeaeaeaeababababababababababbSbSbSbSbSgTgTbSbSbSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacadadadadadadadacacacacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacbSbSbSacacacaaaaacacacacacaaaaaaaaaaaaaaababaeaeaeaeaeaeaeaeaeababbSbSbSbSbSbSbSbSbSgYgVgVgVgZgTbSbSbSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacadadadadadadacacacacacacacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadababababababababababacacacacacacacbSbSacacaaaaacacacacacaaaaaaaaaaaaaaababaeaeaeaeaeaeaeaeaeababbSgYgVgVgVgVgVgVgVgZgYgVgVgVgZbSbSbSbSabaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacadadadadacacacacbSbShahaacacacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacacadadadadadadadadadadadadadadadadadadadadadabhbhbhbhbhbhbhbababacacacadacacacbSaaaaaaaaaaacacacacacaaaaaaaaaaaaaaababaeaeaeaeaeaeaeaeabababbSgTgYgVgVgVgVgVgVgVgZbSbSbSbSbSbSbSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacadadacacacbSbSbSbSbSbSbSbSacacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacacadadadadadadadadadadadadadadadadadadadadababhbhchdhehfhchbababacacacadadacacacaaaaaaaaaaacacacacacaaaaaaaaaaaaaaababaeaeaeababababababbSbSbSgTgTbSbSbSbSbSbSbSbSbSabababababababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaacacbSbSacacacacacbSbSbSbSbSbSbSbSbSbSbSbSacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacbSacacadadadadadadadadadadadadadadadadababababababhbhchghhhihjhbababacacacadadacacacacaaaaaaaaacacacacacaaaaaaaaaaaaabababaeaeabababababababbSbSbSgTgTbSbSbSbSababababababababababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaaaaaacbSbSbSbSacacbSbSbSbSbShkhkhkbSbSbSbSbSbSbSacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacbSacacadadadadadadadadadadadadadadadadabhlhmhnabhohbhbhbhphbhbhbababacacacadadadacacacacaaaaaaacacacacaaaaaaaaaaaaabababababababbSbSbSbSbSbSbSbSgYgZgTbSbSbSabababababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaabSbSbSbSbSbSbSbSbSbShqhrhsbSbSbSbSbSbSbSacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacbSacacadadadadadadadadadadadadadadadadabhthnhuabhohvhwhohxhoababababacacacadadadadacacacaaaaaaacacacacaaaaaaaaaaabababbSbSbSbSbSbSbSbSbSbSbSbSgYgZgYgZbSbSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacaaaaaaaaaaaaaaaaaaaabShyhyhyhyhyhyhzhzhzhzhyhyhyhyhAbSacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacbSbSacacacadadadadadadadadadadadadadadadababhlcHabhohBhChDhxhobSabababacacacadadadadadacacacaaaaacacacacaaaaaaaaababababbSbSbSgYgVgVgVgVgVgVgVgVgZgYgZbSbSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacbSaaaaaaaaaaaaaaaabShzhEhFhGhzhHhIhJhKhLhzhMhNhOhPbSacacacadadadadadadadadadadadadadadadacacacacacacacacacacacacacadadadadadadadadadadadadadadacacacacbSbSacacacacadadadadadacacacacacadadadadababhQababhohohohohRhobSbSabababababadadadadadacacacacaaaaacacacaaaaaaaaaaababbSbSbSbSgTgYgVgVgVgVgVgVgVgVgZbSbSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacadadacacbSbSbSbSbSbSaaaaaaaaaabShzhShMhThzhUhUhUhUhVhWhMhNhXhYbSacacacacacacacacacacacadadadadadacacacacacacacacacacacacacacacacacacacadadadadadadadadacacacacacbSbSbSbSacacacacacacadacacacacacacadadadadababhZababhohviahohxibbSbSbSbSbSbSababadadadadadacacacaaaaacacacaaaaaaaaaaababbSbSbSbSgTgTbSbSbSbSbSbSbSbSbSbSbSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababababababaeababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacadadadadacacbSbSbSbSbSbSbSbSbSaaaabShyichMhMidhMhMhMhMiehzifighzihbSbShaacacacacacacacacacacadadacacacacacacbSbSbSbSbSbSbSbSbSacacacacacacadadadadadadacacacacacacbSbSbSbSbSbSacacacacacacacacacbSacacadabababababhZababhohBhCiihxibbSbSbSbSbSbSbSabadadadadadadacacaaaaacacaaaaaaaaaaaaababbSbSbSbSgTgTbSbSbSbSbSbSbSbSbSbSbSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadadadacacacacacacbSbSbSbSbSbSbShzijhMikiliminiohMiphyhyhyhyhygXgRbSbScjcjcjcjcjcjcjacacacacacacacacbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSacacacacacacacacacacacacbSbSbSbSbSbSbSbSbSbSbSacacacacacbSbSacacadabhohohohoiqhohohohohohohxibbSbSbSbSbSbSbSabababababacacacacacaaaaaaaaaaaaaaaaaaababbSbSbSgXgQgQgRbSbSbSbSbSbSbSbSbSbSabaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababababababaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacadadadadadadadadadadacacacacacacbSbShzirhMishzitiuivhMiwixiyiziAiBiCiDgVgVgVgVgViEiEgWbSbSbSacacacacbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSacacacacacacacacacacbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSacacacbSbSacacacabhoiFiGiHiIiJiKhohviLhohRhohohoibibibhobSbSbSbSbSacacacacaaaaaaaaaaaaababababababbSbSbSbSgMgSgSgObSbSbSbSbSbSbSbSbSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeababababababababaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacadadadadadadadadadadadadacacacacbShyhyhyhyhyiMiNiOhyhyiPiQiQiQiQiCiDgVgVgVgVgVgVgWgUgWbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSacacacbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSacbSbSacacacabhoiRiSiSiTiSiUhohBhCiVhxhoiWiXiYiYiYibbSbSbSbSbSbSacacaaaaaaaaaaaaaaaaabababbSbSbSbSbSbSbSgTiZjajbjbjcjcbSbSbSbSbSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababaaaaababaaaaaaaaaaababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacadadadadadadadadadadadadadadacbSbSbSbSbShyjdjejfjghyjhjihlbSbSgMgObSbSbSbSbSbSgUgWgUgWbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSacbSbSbSbSbSbSbSbSbSbSbSbSbShojjiSjkjljmjnhohohohohxhoiWjojojojpibbSbSbSbSbSbSacaaaaaaaaaaaaaaaaaabSbSbSbSbSbSbSbSgYgVgZjcjqjrjsjsjcbSjtbSbSbSababaeaeaeaeaeaeaeaeaeaeaeaeaeaeababaaaaaaaaabaaaaaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadadadadadadadadadadadadacbSbSbSbSbShyjujvjwjxhybSbSbSbSbSbSbSbSbSbSacaccjbSgUgWgUgWbSbSbSbSgXgRbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSacacacacbSbSbSbSbSbSbSbSbSbSbSbSabhojyiSjziSjAiSjBjpjCjDjEhojFjojGjojHibbSbSbSbSbSbSaaaaaaaaaaaaaaaaaaaaajaabSbSbSbSbSjIjJjKjKjcjLjMjNjOjcjcjcjcjPbSbSabababaeaeaeaeaeaeaeaeaeaeaeaeabababababaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacadadadadadadadadadadadacacacacbSbSbShyhyhyhyhyhybSbSbSbSbSbSacacacacacacaccjbSgUgWgUgVgVgVgViCiDgVgVgWbSacacbSbSacacbSbSbSbSbSbSbSbSgXgRbSbSbSbSbSbSbSbSbSbSbSbSbSbSacacacacbSbSbSbSbSbSbSababababhohohohohohohoibjQjRibjQhohohohohojShohoibibbSbSaaaaaaaaaaaaaaaaaaaaaaajaaaaaabSbSjKjKjTjUjVjWjXjYjZkajbkbkcjbkdbSbSbShaababaeaeaeaeaeaeaeaeaeaeaeababababababababaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacadadadadadadadadadadadadadacacbSbSbSbSbSbSbSbSbSbSbSbSbSbSacacacacacacacacbSbSbSgUgVgVgVgVgViCiDgVgWgTbSacacacacacacbSgYgVgVgVgVgVgViCiDgVgVgVgVgVgVgVgWbSbSbSbSbSbSbSbSacacacacbSbSbSbSbSabababababababhokekfkgjojHkhjpjHjBkikjjojpjHjojokkibibibklkmkmkmkmkmkmkmknknknknknknknjKjKjKkokpkqkrksktjYjZjZkukvkwkxkybSbSbShaababaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababababaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacadadadadadadadadadadadadadadacacbSbSbSbSbSbSbSbSbSbSbSbSbSacacacacacacbSbSbSbSbSbSbSbSbSbSbSgMgObSgTgTbSacacacacacbSbSgTgYgVgVgVgVgViCiDgVgVgVgVgVgVgWgUgWbSgXgRcjcjbSbSbSacbSbSbSbSbSbSbSbSbSbSbSabababhohohohokzjHkAkBkCjDkDkEkEkFkFkEkEkGkHkGkHkIkIkIkIkIkIkIkIkJkJkJkJkJkJkJkKkLkKkLkMkNkOjbkPkQkRkSjbkTkUjbkVbSbSbSbSabababaeaeaeaeaeaeaeaeaeaeaeaeaeabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadadacacacacacacacacacacacacbSacacbSbSbSbSbSbSbSbSbSacacacacacbSbSbSbSbSbSbSbSbSacacacacbSbSbSgTgTbSbSbSgXgRbSbSbSgTgTbSbSbSbSbSgMgObSbSbSbSbSbSgUgWgUgViCiDgVgVgVgWbSbSbSbSbSbSbSbSbSbSbSbSbSbSabababababhojokWkXkYkYkXkZlalbkYkYkXkXlcldldldlelelelelelelelelflflflflflflglhlhlhliljlklljIjIjJjIjIjIjIjIjIlmlnlolnlphaabaeaeaeaeaeaeaeaeaeaeaeababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadadacacacacacacacacacacacacbSacacbSbSbSbSbSbSbSbSacacacacbSbSbSbSacacacacacacacacacacacbSbSbSgTgUgVgVgViCiDgVgVgVgZgTbSbSbSbSbSbSbSbSbSbSbSacbSbSgUgVgViCiDgVgVgWgUgWbSbSbSbSgXgRbSbSbSbSbSbSbSbSbSababhohoiblqibhoholrlslthohoibluibhoibbSbSbSaaaaaaaaajaaaaaaajaaaaaaaaaaajaajKjKlvlwlxlylzlAlBlClDlDlElFlGlGlGlGlpbSabaeaeaeaeaeaeaeaeaeaeabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacadadadadacacacbSbSbSacacbSbSbSbSbSbSacacacacacacacacacacacacacacacacacacacacacacacacacacacacbSbSbSbSgUgVgVgVgViCiDgVgVgVgVgZbSbSbSbSbSbSbSbSbSbSacacacbSbSbSbSgMgObSbSgUgWgUgVgVgVgViCiDgVgVgVgVgVgVgVgWbSbSabholHlIlJlKholLlMlNlOlPholQlRlSlTbSbSbSbSbSbSaaaaajaaaaaaajajajajajajajajajjIlUlVlWjIjIjIjIjIjIjIjIjIlXlplplplpbSabaeaeaeaeaeaeaeaeaeababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadadacacacbSbSbSacacbSbSbSbSbSbSacacacadadadadadadadadadacacacacacacacacadadadadadadacacacacacbSbSbSbSbSbSgMgObSbSbSbSbSbSbSbSbSbSbSacacacacacacacacacacacacacbSbSbSgUgVgVgVgVgViCiDgVgVgVgVgVgVgWgTbSbSbSholYlZmambhomcmdmdmemfhomgmhmihobSbSbSbSbSbSajajajajajajajaaaaaaaaaaajaaajjImjmkmlmmjImnmompmqmrmrjIbSbSbSbSbSababaeaeaeaeaeaeaeaeaeabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadacacacbSbSbSbSbSbSbSaaaaaaaabSbSacacacadadadadadadadadadadadadadadadadadadadadadadacacacacacbSbSbSbSbSbSbSbSbSbSbSbSbSbSacacacbSbSbSacacacacacacacacacacbSbSbSbSbSbSbSbSbSbSbSgMgObSbSbSbSbSbSgTgTbSbSbSlThohohohohomsmtmumvmfhoibmwibhobSbSbSbSbSbSaaaaajaaaaaaajaaaaaaaaaaajaajKjKlvmxmlmmlhmykokpmzmAmBjIababababababaeaeaeaeaeaeaeaeaeaeababaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacadadadadacacacbSbSaaaaaaaaaaaaaaaaaaaabSacacacadadadadadadadadadadadadadadadadadadadadadadadadadacacbSbSbSbSbSbSbSbSbSbSbSbSacacacacacacbSbSbSacacacadacacacbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSgTgUgVgWbSbSbSbSbSbSlThohohohoholTmCmCmDmEbSbSbSbSbSaaaaaaajaaaaaaajaaaaaaaaaamFjKmGmHmImxmlmJjImKlvmLmMjImNjIaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacadadadadacacbSbSaaaaaaaaaaaaaaaaaaaaaaaaaaacacadadadadadadadadadadadadadadadadadadadadadadadadadacacacacacacacacacacacacacacacacacacacacacbSbSbSacacadacacbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSgUgVgWgUgWbSbSbSbSbSbSbSgMgNgNgNgNgNgNgObSbSbSbSbSbSajajajajajajajajaaaaaaaamOmPlvmPlvmQmRmSmzlhjUlvmTmUjKmVjIaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacadadadadadadadacacbSaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacadadadadadadadadadadadadadadadadadadadadadadadadadacacacacacacacacacacacacacacacacacbSbSbSbSbSbSbSacacadacacacacacacacacacacacacacacacacacacacacacbSbSbSbSbSgUgWgUgWmWbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSaaaaaaaaaaaaajaaaaaaaaaajKjKjKmXmYmZnanbncndnenfngnhnijIaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadadadadadadacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacbSbSbSbSacacacadacacacacacacacacacacacacacacacacacacacacbSbSbSbSbSbSbSgUgWgUgVgVgVgVgVgVgVgVgVgVgVgVgVgVgVgWbSbSbSbSbSbSaaaaaaaaaaajaaaaaaaaaaajaajKjKlvmxnjnknlnmnnnnnojKmVjIaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadadadadacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacadadadadadadadadadadadcuadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacacacacbSacacacadadadadadadadadadadadadadadacacacacacbSbSbSbSbSbSabbSbSbSgUgVgVgVgVgVgVgVgVgVgVgVgVgVgVgVgWgTbSgXgRbSbSbSdkdkajaaaaajaaaaaaaaaaajaanplBnqnrnnnslhntnunvjKjKmVjIaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadadadadacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacacacacacadadadadadadadadadadadadadadadacacbSbSbSbSbSbSbSbSbSabababbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSbSgTgUgViCiDgVgVgVnwnxnynynynynynynynynynynynzjInAnBjUmKjInCnDnEnFnGnHjIaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadadadadacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacacadadadadadadadadadadadadadadadacacacacacacacacbSbSbSacacabababbSbSbSbSbSbSbSababbSbSbSbSbSbSgUgVgViCiDgVgVgVnInxnynynynynynynynynynynynylBnJjIjKjKjInKjIjIjIjIjIjIaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacadadadacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacacacacacacbSbSacacacacabababababababababababbSbSbSbSbSbSbSbSgMgObSbSbSdkdkajaaaaaaaaaaaaaaaaaaaaajajajajajajjIjIjIaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacbSbSacacadadadadadadacacacbSbSbSbSbSbSbSbSacacacacacacacacacbSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacbSacacadadadadadacacacacbSbSbSbSacbSbSacacacacacacacacacacbSaaaaaaaaaaaaaaaaaaababababababababababababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaaaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacbSacacadadadadacacacacbSbSbSacacacacacacacacadadadadacacacaaaaaaaaaaaaaaaaaaabababababababababababababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababababababaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacacadadadacacacacbSbSacacacacacacacacacadadadadacacacacaaaaaaaaaaaaaaaaababababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaaaacacacadadadadadadadadadadadacacacacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacacadadadacacacbSbSbSacacacacadadadadadadadadacacacacaaaaaaaaaaaaaaaaababababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadadadadadadacacacacacacacacacacacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacbSbSbSacacacadadadadadadadadadadacacacaaaaaaaaaaaaaaaaaaaaababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadadadadadacacacacacacacbSbSbSacacacacacacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacbSbSbSacacacadadadadadadadadadadacacaaaaaaaaaaaaaaaaaaaaaaababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacadadadadadacacacacacacbSbSbSbSbSbSbSbSbSbSacacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacbSbSacacadadadadadadadadadadacacaaaaaaaaaaaaaaaaaaaaaaababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacadacacacacbSbSbSaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacacbSacacadadadadadadadadadadacacaaaaaaaaaaaaaaaaaaaaaaababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacadacacbSbSbSaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadadadadadadadadadadadadadadadadadadadcuadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacacacadadadadadadadadadadacacaaaaaaaaaaaaaaaaaaaaaaababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaacacadacacbSbSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacacadadadadadadadadadadacacaaaaaaaaaaaaaaaaaaaaaaababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacadacacacbSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacaaaaaaaaaaaaaaaaaaabababaeaeaeaeaeaeaeaeaeaeababababababababaeaeaeaeaeaeabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacadacacacbSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacacaaaaaaaaaaaaaaaaabababaeaeaeaeaeaeaeababababababababababababaeaeaeabababababaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacadadacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadcuadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacaaaaaaaaaaaaaaaaaaababaeaeaeaeaeaeaeabababababaaaaaaaaabababaeaeaeababababaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacadadacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacaaaaaaaaaaaaaaaaaaababaeaeaeaeaeaeaeababaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacadacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacacaaaaaaaaaaaaaaaaaaababaeaeaeaeaeaeabababaaaaaaaaaaaaaaabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacaaaaaaaaaaaaaaaaaaaaabababaeaeaeaeababababaaaaaaaaaaaaaaaaabaaabababaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacaaaaaaaaaaaaaaaaaaaaaaaaababababababababababaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacaaaaaaaaaaaaaaaaaaaaaaaaabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacaaaaaaaaacacacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaaaacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacacadadadadacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacadacacacacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacadadadadadadadadadadadadadadadadadadadadadadadadadadadadacacacacacacacaaacacacacacacacacaaacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacaaaaaaacacadadadadadadadadadadadadadadadadadacacacacacadacacacacacacacaaaaaaacaaaaaaaaacacacacaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadadadadadadadadadadadadadadadacacacacacacacacacacacacacacaaaaaaaaaaaaaaacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacadadadadadadadadadadadadadadadadadacacaaacacacacacaaaaaaacacaaaaaaaaaaaaaaaaacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacadadadadadadadadadadadadadadacacacacacacaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacadadadadadadadadadadadadadadadacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacadadadadadadadadacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacadadadadadadadacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadadadadadacacaaacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacadadadadadadacacaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacaaaaacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacaaaaaaaaacacacaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -970,4 +970,3 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} - diff --git a/_maps/shuttles/emergency_goon.dmm b/_maps/shuttles/emergency_goon.dmm new file mode 100644 index 00000000000..3d8ebf08142 --- /dev/null +++ b/_maps/shuttles/emergency_goon.dmm @@ -0,0 +1,56 @@ +"a" = (/turf/open/space,/area/space) +"b" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion"; dir = 4},/turf/open/floor/plating,/area/shuttle/escape) +"c" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 8},/turf/open/floor/plating,/area/shuttle/escape) +"d" = (/turf/closed/wall/shuttle{tag = "icon-swall0"; icon_state = "swall0"},/area/shuttle/escape) +"e" = (/turf/closed/wall/shuttle{tag = "icon-wall_space (NORTH)"; icon_state = "wall_space"; dir = 1},/area/shuttle/escape) +"f" = (/turf/closed/wall/shuttle{tag = "icon-swall2"; icon_state = "swall2"},/area/shuttle/escape) +"g" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Airlock"},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) +"h" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Airlock"},/obj/docking_port/mobile/emergency{dheight = 0; dir = 2; dwidth = 9; name = "NES Port"; width = 19},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) +"i" = (/turf/closed/wall/shuttle{tag = "icon-wall_space (WEST)"; icon_state = "wall_space"; dir = 8},/area/shuttle/escape) +"j" = (/turf/closed/wall/shuttle{tag = "icon-swall4"; icon_state = "swall4"},/area/shuttle/escape) +"k" = (/turf/closed/wall/shuttle{tag = "icon-swall12"; icon_state = "swall12"},/area/shuttle/escape) +"l" = (/obj/machinery/vending/wallmed,/turf/closed/wall/shuttle{tag = "icon-swall8"; icon_state = "swall8"},/area/shuttle/escape) +"m" = (/obj/structure/window/shuttle,/obj/structure/grille,/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) +"n" = (/turf/closed/wall/shuttle{tag = "icon-swall1"; icon_state = "swall1"},/area/shuttle/escape) +"o" = (/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) +"p" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 8},/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/turf/open/floor/plating,/area/shuttle/escape) +"q" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 4},/turf/open/floor/plasteel/shuttle/white,/area/shuttle/escape) +"r" = (/turf/open/floor/plasteel/shuttle/white,/area/shuttle/escape) +"s" = (/obj/structure/chair{dir = 4},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) +"t" = (/turf/closed/wall/shuttle{tag = "icon-wall_floor"; icon_state = "wall_floor"},/area/shuttle/escape) +"u" = (/turf/open/space,/area/shuttle/escape) +"v" = (/obj/structure/table,/obj/effect/spawner/lootdrop/maintenance,/turf/open/floor/plasteel/shuttle/white,/area/shuttle/escape) +"w" = (/obj/machinery/door/airlock/glass{name = "Emergency Shuttle Infirmary"},/turf/open/floor/plasteel/shuttle/white,/area/shuttle/escape) +"x" = (/obj/structure/window/shuttle,/obj/structure/grille,/turf/open/floor/plasteel/shuttle/yellow,/area/shuttle/escape) +"y" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/toolbox/emergency,/turf/open/floor/plasteel/shuttle/yellow,/area/shuttle/escape) +"z" = (/obj/structure/table/reinforced,/obj/item/device/radio,/obj/structure/window/reinforced{dir = 1; layer = 2.9},/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/turf/open/floor/plasteel/shuttle/yellow,/area/shuttle/escape) +"A" = (/obj/structure/chair/comfy/brown{dir = 4},/turf/open/floor/plasteel/shuttle/yellow,/area/shuttle/escape) +"B" = (/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/window/reinforced{dir = 1},/obj/structure/table/reinforced,/turf/open/floor/plasteel/shuttle/yellow,/area/shuttle/escape) +"C" = (/turf/closed/wall/shuttle{tag = "icon-swall8"; icon_state = "swall8"},/area/shuttle/escape) +"D" = (/turf/closed/wall/shuttle{tag = "icon-swall3"; icon_state = "swall3"},/area/shuttle/escape) +"E" = (/obj/machinery/door/airlock/glass{name = "Emergency Shuttle Cockpit"; req_access_txt = "19"},/turf/open/floor/plasteel/shuttle/yellow,/area/shuttle/escape) +"F" = (/turf/open/floor/plasteel/shuttle/yellow,/area/shuttle/escape) +"G" = (/obj/machinery/computer/emergency_shuttle,/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/turf/open/floor/plasteel/shuttle/yellow,/area/shuttle/escape) +"H" = (/obj/structure/chair{dir = 4},/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape) +"I" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/obj/structure/window/reinforced,/turf/open/floor/plasteel/shuttle/yellow,/area/shuttle/escape) +"J" = (/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape) +"K" = (/obj/machinery/door/airlock/glass{name = "Emergency Shuttle Brig"; req_access_txt = "2"},/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape) +"L" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/firstaid/regular,/turf/open/floor/plasteel/shuttle/yellow,/area/shuttle/escape) +"M" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/firstaid/regular,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4; pixel_x = 0},/turf/open/floor/plasteel/shuttle/yellow,/area/shuttle/escape) +"N" = (/turf/closed/wall/shuttle{tag = "icon-wall_space (EAST)"; icon_state = "wall_space"; dir = 4},/area/shuttle/escape) +"O" = (/turf/closed/wall/shuttle{tag = "icon-wall_floor (WEST)"; icon_state = "wall_floor"; dir = 8},/area/shuttle/escape) +"P" = (/turf/closed/wall/shuttle{tag = "icon-wall_space"; icon_state = "wall_space"},/area/shuttle/escape) + +(1,1,1) = {" +abcdeaafghfaaaaaaaa +ijklfdmnoonmmdeaaaa +bpqrnsssoossstddeua +bpvrwooooossssxyzxe +bpqrfssdooosssdAABx +jkkCDssmooooooEFAGx +bpHHnssdooosssdAAIx +bpHJKooooossssxLMxN +bpHHfsssoosssOddNua +PjkCndmfoofmmdNaaaa +abcdNaanggnaaaaaaaa +"} diff --git a/_maps/shuttles/emergency_imfedupwiththisworld.dmm b/_maps/shuttles/emergency_imfedupwiththisworld.dmm new file mode 100644 index 00000000000..4ecb0e8fd64 --- /dev/null +++ b/_maps/shuttles/emergency_imfedupwiththisworld.dmm @@ -0,0 +1,42 @@ +"a" = (/turf/closed/wall/mineral/wood,/area/shuttle/escape) +"b" = (/obj/machinery/light_switch,/turf/closed/wall/mineral/wood,/area/shuttle/escape) +"c" = (/obj/machinery/door/unpowered/shuttle,/obj/docking_port/mobile/emergency{dheight = 0; dir = 4; dwidth = 1; height = 10; name = "Oh Hi Mark"; width = 12},/turf/open/floor/wood,/area/shuttle/escape) +"d" = (/turf/open/floor/wood,/area/shuttle/escape) +"e" = (/obj/machinery/light{dir = 1},/turf/open/floor/carpet,/area/shuttle/escape) +"f" = (/obj/structure/chair/comfy/teal,/turf/open/floor/carpet,/area/shuttle/escape) +"g" = (/obj/structure/table/wood,/obj/item/device/flashlight/lamp,/turf/open/floor/carpet,/area/shuttle/escape) +"h" = (/turf/open/floor/carpet,/area/shuttle/escape) +"i" = (/obj/structure/table/reinforced,/obj/item/weapon/kitchen/knife,/turf/open/floor/carpet,/area/shuttle/escape) +"j" = (/turf/open/floor/plasteel/bar,/area/shuttle/escape) +"k" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/vending/boozeomat,/turf/open/floor/plasteel/bar,/area/shuttle/escape) +"l" = (/obj/machinery/computer/security/wooden_tv,/turf/open/floor/carpet,/area/shuttle/escape) +"m" = (/obj/structure/table/glass,/turf/open/floor/carpet,/area/shuttle/escape) +"n" = (/obj/structure/chair/comfy/teal{tag = "icon-comfychair (WEST)"; icon_state = "comfychair"; dir = 8},/turf/open/floor/carpet,/area/shuttle/escape) +"o" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/food/snacks/store/cake/birthday,/turf/open/floor/carpet,/area/shuttle/escape) +"p" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/food/drinks/shaker,/turf/open/floor/plasteel/bar,/area/shuttle/escape) +"q" = (/obj/structure/table/reinforced,/turf/open/floor/carpet,/area/shuttle/escape) +"r" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass,/turf/open/floor/plasteel/bar,/area/shuttle/escape) +"s" = (/obj/machinery/door/window{dir = 8},/turf/open/floor/plasteel/bar,/area/shuttle/escape) +"t" = (/obj/structure/table/reinforced,/turf/open/floor/plasteel/bar,/area/shuttle/escape) +"u" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/open/floor/wood,/area/shuttle/escape) +"v" = (/obj/structure/chair/office/dark,/turf/open/floor/wood,/area/shuttle/escape) +"w" = (/obj/effect/decal/cleanable/blood,/obj/effect/decal/cleanable/blood/drip,/obj/effect/decal/cleanable/blood/gibs,/obj/effect/mob_spawn/human/corpse,/obj/item/weapon/gun/projectile/automatic/pistol/m1911,/obj/machinery/light/small{dir = 8},/obj/item/weapon/reagent_containers/food/snacks/cakeslice/birthday,/turf/open/floor/carpet,/area/shuttle/escape) +"x" = (/obj/structure/bed,/obj/item/weapon/bedsheet/red,/obj/item/weapon/paper{info = "i love daniel
daniel is my best friend

you are tearing me apart elise"},/turf/open/floor/carpet,/area/shuttle/escape) +"y" = (/obj/structure/flora/kirbyplants,/turf/open/floor/wood,/area/shuttle/escape) +"z" = (/obj/structure/table/wood,/obj/item/weapon/papercutter,/turf/open/floor/wood,/area/shuttle/escape) +"A" = (/obj/structure/table/wood,/obj/machinery/computer/libraryconsole/bookmanagement,/turf/open/floor/wood,/area/shuttle/escape) +"B" = (/obj/machinery/light,/obj/structure/table/wood,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/open/floor/wood,/area/shuttle/escape) +"C" = (/obj/structure/mineral_door/wood,/turf/open/floor/wood,/area/shuttle/escape) +"D" = (/obj/machinery/computer/emergency_shuttle,/turf/open/floor/carpet,/area/shuttle/escape) + +(1,1,1) = {" +abaaaaaaaa +cdefghijka +adlmnhojpa +adhmnhqjra +adhhhhsjta +auddddaaaa +addvddawxa +ayzABdChDa +aaaaaaaaaa +"} diff --git a/_maps/shuttles/emergency_meta.dmm b/_maps/shuttles/emergency_meta.dmm index 507090a6124..e972853c165 100644 --- a/_maps/shuttles/emergency_meta.dmm +++ b/_maps/shuttles/emergency_meta.dmm @@ -1,132 +1,116 @@ -"aa" = (/turf/open/space,/turf/closed/wall/shuttle{icon_state = "swall_f6"; dir = 2},/area/shuttle/escape) -"ab" = (/turf/closed/wall/shuttle{icon_state = "swall12"; dir = 2},/area/shuttle/escape) +"aa" = (/turf/open/space,/area/space) +"ab" = (/turf/closed/wall/shuttle{icon_state = "swall_s6"; dir = 2},/area/shuttle/escape) "ac" = (/obj/structure/grille,/obj/structure/window/shuttle,/turf/open/floor/plating,/area/shuttle/escape) -"ad" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Airlock"},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) -"ae" = (/turf/closed/wall/shuttle{icon_state = "swall14"; dir = 2},/area/shuttle/escape) -"af" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Cargo Bay Airlock"},/turf/open/floor/plating{dir = 1; icon_state = "delivery"},/area/shuttle/escape) -"ag" = (/turf/open/space,/turf/closed/wall/shuttle{icon_state = "swall_f10"; dir = 2},/area/shuttle/escape) -"ah" = (/turf/closed/wall/shuttle{icon_state = "swall3"; dir = 2},/area/shuttle/escape) -"ai" = (/obj/item/clothing/suit/hazardvest{desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; name = "emergency lifejacket"},/obj/item/clothing/suit/hazardvest{desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; name = "emergency lifejacket"},/obj/item/clothing/suit/hazardvest{desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; name = "emergency lifejacket"},/obj/item/clothing/suit/hazardvest{desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; name = "emergency lifejacket"},/obj/item/clothing/suit/hazardvest{desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; name = "emergency lifejacket"},/obj/item/weapon/tank/internals/emergency_oxygen/double{pixel_x = 3},/obj/item/weapon/tank/internals/emergency_oxygen/double{pixel_x = 3},/obj/item/weapon/tank/internals/emergency_oxygen/double{pixel_x = 3},/obj/item/weapon/tank/internals/emergency_oxygen/double{pixel_x = 3},/obj/item/weapon/tank/internals/emergency_oxygen/double{pixel_x = 3},/obj/item/clothing/mask/breath{pixel_x = -3; pixel_y = -3},/obj/item/clothing/mask/breath{pixel_x = -3; pixel_y = -3},/obj/item/clothing/mask/breath{pixel_x = -3; pixel_y = -3},/obj/item/clothing/mask/breath{pixel_x = -3; pixel_y = -3},/obj/item/clothing/mask/breath{pixel_x = -3; pixel_y = -3},/obj/item/clothing/head/hardhat/orange{name = "protective hat"; pixel_y = 9},/obj/item/clothing/head/hardhat/orange{name = "protective hat"; pixel_y = 9},/obj/item/clothing/head/hardhat/orange{name = "protective hat"; pixel_y = 9},/obj/item/clothing/head/hardhat/orange{name = "protective hat"; pixel_y = 9},/obj/item/clothing/head/hardhat/orange{name = "protective hat"; pixel_y = 9},/obj/structure/closet/crate{name = "lifejackets"},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) -"aj" = (/obj/structure/tank_dispenser/oxygen{layer = 2.7; pixel_x = -1; pixel_y = 2},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) -"ak" = (/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) -"al" = (/obj/machinery/status_display{pixel_y = 32},/obj/machinery/hologram/holopad,/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) -"am" = (/obj/structure/table,/obj/item/stack/medical/gauze,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/ointment,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) -"an" = (/obj/structure/sign/nosmoking_2,/turf/closed/wall/shuttle{icon_state = "swall3"; dir = 2},/area/shuttle/escape) -"ao" = (/obj/machinery/recharge_station,/turf/open/floor/plating{icon_state = "bot"},/area/shuttle/escape) -"ap" = (/turf/open/floor/plating{dir = 1; icon_state = "delivery"},/area/shuttle/escape) -"aq" = (/obj/structure/table,/obj/item/weapon/clipboard,/obj/item/weapon/folder/yellow,/obj/item/weapon/pen,/obj/item/hand_labeler_refill,/turf/open/floor/plating{icon_state = "bot"},/area/shuttle/escape) -"ar" = (/turf/open/floor/plating{icon_state = "floorgrime"},/area/shuttle/escape) -"as" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 31},/obj/machinery/portable_atmospherics/canister/oxygen,/turf/open/floor/plating{icon_state = "bot"},/area/shuttle/escape) -"at" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Airlock"; req_access_txt = "2"},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) -"au" = (/obj/item/weapon/cigbutt,/turf/open/floor/plating{icon_state = "floorgrime"},/area/shuttle/escape) -"av" = (/obj/structure/closet/crate/medical{name = "medical crate"},/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/o2{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/toxin{pixel_x = -4; pixel_y = 3},/obj/item/device/healthanalyzer{pixel_x = 3; pixel_y = 3},/obj/item/weapon/lazarus_injector,/mob/living/simple_animal/bot/medbot{name = "\improper emergency medibot"; pixel_x = -3; pixel_y = 2},/turf/open/floor/plating{icon_state = "bot"},/area/shuttle/escape) -"aw" = (/obj/structure/chair{dir = 4},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) -"ax" = (/obj/structure/chair{dir = 8},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) -"ay" = (/obj/structure/reagent_dispensers/fueltank,/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/turf/open/floor/plating{icon_state = "bot"},/area/shuttle/escape) -"az" = (/obj/structure/closet/crate{name = "emergency supplies crate"},/obj/item/weapon/storage/toolbox/emergency,/obj/item/weapon/storage/toolbox/emergency,/obj/item/device/flashlight/flare{pixel_x = 3; pixel_y = 3},/obj/item/device/flashlight/flare{pixel_x = -6; pixel_y = -2},/obj/item/weapon/crowbar,/obj/item/weapon/wrench,/obj/item/device/radio,/turf/open/floor/plating{icon_state = "bot"},/area/shuttle/escape) -"aA" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Cargo Bay Airlock"},/obj/docking_port/mobile/emergency{dheight = 0; dir = 4; dwidth = 5; height = 14; width = 25},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) -"aB" = (/obj/machinery/vending/wallmed{name = "Emergency NanoMed"; pixel_x = 0; pixel_y = 0; req_access_txt = "0"; use_power = 0},/turf/closed/wall/shuttle{icon_state = "swall3"; dir = 2},/area/shuttle/escape) -"aC" = (/obj/structure/reagent_dispensers/watertank,/turf/open/floor/plating{icon_state = "bot"},/area/shuttle/escape) -"aD" = (/obj/machinery/space_heater,/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/turf/open/floor/plating{icon_state = "bot"},/area/shuttle/escape) -"aE" = (/obj/structure/chair{dir = 4},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = -31},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) -"aF" = (/obj/structure/rack,/obj/item/weapon/crowbar,/obj/item/weapon/wrench,/obj/item/weapon/weldingtool,/obj/item/weapon/wirecutters,/obj/item/stack/cable_coil,/turf/open/floor/plating{dir = 1; icon_state = "warning"},/area/shuttle/escape) -"aG" = (/obj/structure/rack,/obj/item/weapon/storage/toolbox/electrical{pixel_x = -3; pixel_y = 1},/obj/item/weapon/storage/toolbox/mechanical{pixel_x = 0; pixel_y = -1},/obj/item/weapon/storage/toolbox/emergency{pixel_x = 3; pixel_y = -5},/turf/open/floor/plating{dir = 1; icon_state = "warning"},/area/shuttle/escape) -"aH" = (/turf/open/floor/plating{dir = 1; icon_state = "warning"},/area/shuttle/escape) -"aI" = (/obj/structure/rack{dir = 1},/obj/item/weapon/tank/internals/oxygen/red,/obj/item/clothing/suit/fire/firefighter,/obj/item/clothing/mask/gas,/obj/item/clothing/head/hardhat/red,/turf/open/floor/plating{dir = 1; icon_state = "warning"},/area/shuttle/escape) -"aJ" = (/obj/structure/extinguisher_cabinet,/turf/closed/wall/shuttle{icon_state = "swall3"; dir = 2},/area/shuttle/escape) -"aK" = (/obj/structure/chair{dir = 8},/obj/structure/sign/bluecross_2{pixel_x = 32},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) -"aL" = (/turf/closed/wall/shuttle{icon_state = "swall7"; dir = 2},/area/shuttle/escape) -"aM" = (/turf/closed/wall/shuttle{icon_state = "swall8"; dir = 2},/area/shuttle/escape) -"aN" = (/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Escape Shuttle Infirmary"; req_access_txt = "0"},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) -"aO" = (/obj/structure/sign/bluecross_2,/turf/closed/wall/shuttle{icon_state = "swall4"; dir = 2},/area/shuttle/escape) -"aP" = (/turf/closed/wall/shuttle{icon_state = "swall11"; dir = 2},/area/shuttle/escape) -"aQ" = (/obj/machinery/sleeper{dir = 2},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) -"aR" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/o2{pixel_x = 3; pixel_y = 3},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) -"aS" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) -"aT" = (/obj/machinery/shower{dir = 4; icon_state = "shower"; name = "emergency shower"},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) -"aU" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) -"aV" = (/obj/structure/table,/obj/item/weapon/defibrillator/loaded,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) -"aW" = (/obj/structure/table,/obj/item/weapon/reagent_containers/glass/bottle/epinephrine{pixel_x = 6; pixel_y = 0},/obj/item/weapon/reagent_containers/glass/bottle/charcoal{pixel_x = -3},/obj/item/weapon/reagent_containers/glass/bottle/epinephrine{pixel_x = -3; pixel_y = 8},/obj/item/weapon/reagent_containers/glass/bottle/charcoal{pixel_x = 6; pixel_y = 8},/obj/item/weapon/reagent_containers/syringe/epinephrine{pixel_x = 3; pixel_y = -2},/obj/item/weapon/reagent_containers/syringe/epinephrine{pixel_x = 4; pixel_y = 1},/obj/item/weapon/reagent_containers/syringe/epinephrine{pixel_x = -2; pixel_y = 5},/obj/item/weapon/reagent_containers/syringe/epinephrine{pixel_x = 2; pixel_y = 8},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) -"aX" = (/obj/structure/table/optable,/obj/item/weapon/surgical_drapes,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) -"aY" = (/obj/structure/table,/obj/item/weapon/scalpel{pixel_y = 12},/obj/item/weapon/circular_saw,/obj/item/weapon/retractor{pixel_x = 4},/obj/item/weapon/hemostat{pixel_x = -4},/obj/item/clothing/gloves/color/latex,/obj/item/clothing/mask/surgical,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -27},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) -"aZ" = (/obj/structure/chair{dir = 8},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 31},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) -"ba" = (/obj/machinery/status_display,/turf/closed/wall/shuttle{icon_state = "swall12"; dir = 2},/area/shuttle/escape) -"bb" = (/obj/structure/chair{dir = 4},/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape) -"bc" = (/obj/structure/chair,/obj/structure/reagent_dispensers/peppertank{pixel_x = 0; pixel_y = 29},/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape) -"bd" = (/obj/structure/chair,/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape) -"be" = (/obj/structure/table,/obj/item/weapon/storage/box/handcuffs{pixel_x = 2; pixel_y = 2},/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape) -"bf" = (/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape) -"bg" = (/obj/structure/table,/obj/machinery/recharger{active_power_usage = 0; idle_power_usage = 0; use_power = 0},/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape) -"bh" = (/obj/machinery/door/airlock/glass_security{name = "Brig"; req_access_txt = "2"},/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape) -"bi" = (/obj/structure/table,/obj/item/weapon/restraints/handcuffs{pixel_y = 3},/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape) -"bj" = (/obj/structure/closet/emcloset,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) -"bk" = (/obj/machinery/flasher{id = "emshuttlebridgeflash"; pixel_y = -24},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) -"bl" = (/obj/structure/chair{dir = 1},/obj/machinery/button/flasher{id = "emshuttleflash"; name = "brig flasher button"; pixel_y = -23; req_access_txt = "0"; req_one_access_txt = "1;63;19"},/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape) -"bm" = (/obj/structure/chair{dir = 1},/obj/machinery/flasher{id = "emshuttleflash"; pixel_y = -24},/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape) -"bn" = (/obj/structure/chair{dir = 1},/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape) -"bo" = (/obj/structure/table,/obj/item/weapon/folder/red{pixel_x = 3},/obj/item/weapon/folder/white{pixel_x = -4; pixel_y = 2},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 31},/obj/item/weapon/book/manual/wiki/security_space_law{pixel_x = -4; pixel_y = 4},/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape) -"bp" = (/obj/machinery/door/airlock/glass_command{name = "Cockpit"; req_access_txt = "19"},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) -"bq" = (/turf/closed/wall/shuttle{icon_state = "swall15"; dir = 2},/area/shuttle/escape) -"br" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular,/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) -"bs" = (/obj/structure/table,/obj/item/weapon/restraints/handcuffs{pixel_y = 3},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) -"bt" = (/obj/machinery/button/flasher{id = "emshuttlebridgeflash"; name = "cockpit flasher button"; pixel_y = 24; req_access_txt = "0"; req_one_access_txt = "1;63;19"},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) -"bu" = (/obj/machinery/door/airlock/command{name = "Emergency Recovery Airlock"; req_access = null; req_access_txt = "19"},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) -"bv" = (/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor4"},/area/shuttle/escape) -"bw" = (/obj/machinery/suit_storage_unit/standard_unit,/obj/machinery/status_display{pixel_y = 31},/turf/open/floor/plating{icon_state = "floorgrime"},/area/shuttle/escape) -"bx" = (/obj/machinery/suit_storage_unit/standard_unit,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 27},/turf/open/floor/plating{icon_state = "floorgrime"},/area/shuttle/escape) -"by" = (/obj/machinery/computer/security,/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) -"bz" = (/obj/structure/chair/office/dark{dir = 8},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) -"bA" = (/obj/structure/chair/office/dark{dir = 4},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) -"bB" = (/obj/structure/table,/obj/item/weapon/folder/blue,/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) -"bC" = (/obj/machinery/door/airlock/external{name = "Emergency Recovery Airlock"},/turf/open/floor/plating{icon_state = "floorgrime"},/area/shuttle/escape) -"bD" = (/turf/closed/wall/shuttle{icon_state = "swallc4"; dir = 2},/area/shuttle/escape) -"bE" = (/obj/machinery/computer/crew,/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) -"bF" = (/obj/structure/chair/office/dark,/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) -"bG" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -2; pixel_y = 8},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 31},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) -"bH" = (/obj/structure/table,/obj/item/weapon/phone{pixel_x = -3; pixel_y = 3},/obj/item/weapon/cigbutt/cigarbutt{pixel_x = 5; pixel_y = -1},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) -"bI" = (/obj/structure/table,/obj/item/weapon/storage/fancy/donut_box,/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) -"bJ" = (/obj/machinery/computer/emergency_shuttle,/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) -"bK" = (/obj/machinery/computer/communications,/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) -"bL" = (/obj/machinery/computer/station_alert,/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) -"bM" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/emergency{pixel_y = 3},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) -"bN" = (/obj/structure/table,/obj/machinery/recharger{active_power_usage = 0; idle_power_usage = 0; pixel_y = 4; use_power = 0},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) -"bO" = (/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/obj/structure/chair{dir = 1},/turf/open/floor/plating{icon_state = "floorgrime"},/area/shuttle/escape) -"bP" = (/obj/structure/chair{dir = 1},/turf/open/floor/plating{icon_state = "floorgrime"},/area/shuttle/escape) -"bQ" = (/obj/structure/reagent_dispensers/watertank,/turf/open/floor/plating{icon_state = "floorgrime"},/area/shuttle/escape) -"bR" = (/turf/open/space,/turf/closed/wall/shuttle{icon_state = "diagonalWall3"},/turf/closed/wall/shuttle{icon_state = "swall_f5"; dir = 2},/area/shuttle/escape) -"bS" = (/turf/closed/wall/shuttle{icon_state = "swall13"; dir = 2},/area/shuttle/escape) -"bT" = (/turf/open/space,/turf/closed/wall/shuttle{icon_state = "swall_f9"; dir = 2},/area/shuttle/escape) -"bU" = (/turf/open/space,/area/space) -"bV" = (/turf/open/space,/turf/closed/wall/shuttle{icon_state = "diagonalWall3"},/area/shuttle/escape) -"bW" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/shuttle/engine/heater,/turf/open/floor/plating/airless,/area/shuttle/escape) -"bX" = (/turf/closed/wall/shuttle{icon_state = "wall3"},/area/shuttle/escape) -"bY" = (/turf/open/space,/turf/closed/wall/shuttle{dir = 4; icon_state = "diagonalWall3"},/area/shuttle/escape) -"bZ" = (/obj/structure/shuttle/engine/propulsion,/turf/open/floor/plating/airless,/area/shuttle/escape) +"ad" = (/turf/closed/wall/shuttle{icon_state = "swall14"; dir = 2},/area/shuttle/escape) +"ae" = (/turf/closed/wall/shuttle{icon_state = "swall12"; dir = 2},/area/shuttle/escape) +"af" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Airlock"},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) +"ag" = (/obj/structure/sign/nosmoking_2,/turf/closed/wall/shuttle{icon_state = "swall12"; dir = 2},/area/shuttle/escape) +"ah" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Airlock"},/obj/docking_port/mobile/emergency{dir = 2; dwidth = 5; height = 14; name = "MetaStation emergency shuttle"; width = 25},/obj/docking_port/stationary{dheight = 0; dir = 2; dwidth = 5; height = 14; id = "emergency_home"; name = "emergency evac bay"; width = 25},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) +"ai" = (/turf/closed/wall/shuttle{icon_state = "swall_s10"; dir = 2},/area/shuttle/escape) +"aj" = (/turf/closed/wall/shuttle{tag = "icon-wall3 (NORTHWEST)"; icon_state = "wall3"; dir = 9},/area/shuttle/escape) +"ak" = (/turf/closed/wall/shuttle{icon_state = "swall3"; dir = 2},/area/shuttle/escape) +"al" = (/obj/structure/table,/obj/item/weapon/phone{pixel_x = -3; pixel_y = 3},/obj/item/weapon/cigbutt/cigarbutt{pixel_x = 5; pixel_y = -1},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) +"am" = (/obj/machinery/computer/crew,/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) +"an" = (/obj/machinery/computer/security,/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) +"ao" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular,/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) +"ap" = (/obj/structure/closet/emcloset,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) +"aq" = (/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) +"ar" = (/obj/structure/chair,/turf/open/floor/plasteel/shuttle/white,/area/shuttle/escape) +"as" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = 27},/obj/structure/chair,/turf/open/floor/plasteel/shuttle/white,/area/shuttle/escape) +"at" = (/obj/item/clothing/suit/hazardvest{desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; name = "emergency lifejacket"},/obj/item/clothing/suit/hazardvest{desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; name = "emergency lifejacket"},/obj/item/clothing/suit/hazardvest{desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; name = "emergency lifejacket"},/obj/item/clothing/suit/hazardvest{desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; name = "emergency lifejacket"},/obj/item/clothing/suit/hazardvest{desc = "A high-visibility lifejacket complete with whistle and slot for oxygen tanks."; name = "emergency lifejacket"},/obj/item/weapon/tank/internals/emergency_oxygen/double{pixel_x = 3},/obj/item/weapon/tank/internals/emergency_oxygen/double{pixel_x = 3},/obj/item/weapon/tank/internals/emergency_oxygen/double{pixel_x = 3},/obj/item/weapon/tank/internals/emergency_oxygen/double{pixel_x = 3},/obj/item/weapon/tank/internals/emergency_oxygen/double{pixel_x = 3},/obj/item/clothing/mask/breath{pixel_x = -3; pixel_y = -3},/obj/item/clothing/mask/breath{pixel_x = -3; pixel_y = -3},/obj/item/clothing/mask/breath{pixel_x = -3; pixel_y = -3},/obj/item/clothing/mask/breath{pixel_x = -3; pixel_y = -3},/obj/item/clothing/mask/breath{pixel_x = -3; pixel_y = -3},/obj/item/clothing/head/hardhat/orange{name = "protective hat"; pixel_y = 9},/obj/item/clothing/head/hardhat/orange{name = "protective hat"; pixel_y = 9},/obj/item/clothing/head/hardhat/orange{name = "protective hat"; pixel_y = 9},/obj/item/clothing/head/hardhat/orange{name = "protective hat"; pixel_y = 9},/obj/item/clothing/head/hardhat/orange{name = "protective hat"; pixel_y = 9},/obj/structure/closet/crate{name = "lifejackets"},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) +"au" = (/obj/structure/shuttle/engine/propulsion{dir = 4},/turf/open/floor/plating/airless,/area/shuttle/escape) +"av" = (/obj/structure/shuttle/engine/heater{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/open/floor/plating/airless,/area/shuttle/escape) +"aw" = (/obj/structure/table,/obj/item/weapon/storage/fancy/donut_box,/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) +"ax" = (/obj/structure/chair/office/dark{dir = 1},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) +"ay" = (/obj/structure/table,/obj/item/weapon/restraints/handcuffs{pixel_y = 3},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) +"az" = (/obj/machinery/status_display,/turf/closed/wall/shuttle{icon_state = "swall3"; dir = 2},/area/shuttle/escape) +"aA" = (/obj/structure/tank_dispenser/oxygen{layer = 2.7; pixel_x = -1; pixel_y = 2},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) +"aB" = (/obj/machinery/computer/communications,/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) +"aC" = (/obj/structure/chair/office/dark,/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) +"aD" = (/turf/closed/wall/shuttle{icon_state = "swall1"},/area/shuttle/escape) +"aE" = (/obj/structure/chair{dir = 1},/turf/open/floor/plasteel/shuttle/white,/area/shuttle/escape) +"aF" = (/obj/machinery/computer/emergency_shuttle,/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) +"aG" = (/obj/structure/chair/office/dark{dir = 8},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) +"aH" = (/obj/machinery/door/airlock/glass_command{name = "Cockpit"; req_access_txt = "19"},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) +"aI" = (/obj/machinery/vending/wallmed{name = "Emergency NanoMed"; pixel_x = 0; pixel_y = 0; req_access_txt = "0"; use_power = 0},/turf/closed/wall/shuttle{icon_state = "swall12"; dir = 2},/area/shuttle/escape) +"aJ" = (/obj/structure/extinguisher_cabinet,/turf/closed/wall/shuttle{icon_state = "swall12"; dir = 2},/area/shuttle/escape) +"aK" = (/turf/closed/wall/shuttle{icon_state = "wall3"},/area/shuttle/escape) +"aL" = (/obj/machinery/computer/station_alert,/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) +"aM" = (/turf/closed/wall/shuttle{icon_state = "swall2"},/area/shuttle/escape) +"aN" = (/obj/machinery/status_display{dir = 8; pixel_x = 32; pixel_y = 0},/obj/machinery/hologram/holopad,/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) +"aO" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/emergency{pixel_y = 3},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) +"aP" = (/obj/structure/table,/obj/machinery/recharger{active_power_usage = 0; idle_power_usage = 0; pixel_y = 4; use_power = 0},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) +"aQ" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -2; pixel_y = 8},/obj/item/device/radio/intercom{dir = 2; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -31},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) +"aR" = (/obj/structure/table,/obj/item/weapon/folder/blue,/obj/structure/extinguisher_cabinet{dir = 4; pixel_x = 0; pixel_y = -27},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) +"aS" = (/obj/item/device/radio/intercom{dir = 2; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -31},/obj/structure/chair{dir = 1},/turf/open/floor/plasteel/shuttle/white,/area/shuttle/escape) +"aT" = (/obj/structure/table,/obj/item/stack/medical/gauze,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/ointment,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) +"aU" = (/turf/closed/wall/shuttle{icon_state = "swall7"; dir = 2},/area/shuttle/escape) +"aV" = (/turf/closed/wall/shuttle{icon_state = "swall8"; dir = 2},/area/shuttle/escape) +"aW" = (/obj/machinery/door/airlock/command{name = "Emergency Recovery Airlock"; req_access = null; req_access_txt = "19"},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) +"aX" = (/turf/closed/wall/shuttle{icon_state = "swall15"; dir = 2},/area/shuttle/escape) +"aY" = (/obj/machinery/door/airlock/glass_security{name = "Brig"; req_access_txt = "2"},/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape) +"aZ" = (/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Escape Shuttle Infirmary"; req_access_txt = "0"},/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) +"ba" = (/obj/structure/sign/bluecross_2,/turf/closed/wall/shuttle{icon_state = "swall14"; dir = 2},/area/shuttle/escape) +"bb" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Cargo Bay Airlock"},/turf/open/floor/plasteel/delivery,/area/shuttle/escape) +"bc" = (/turf/closed/wall/shuttle{icon_state = "swall11"; dir = 2},/area/shuttle/escape) +"bd" = (/obj/structure/chair{dir = 4},/turf/open/floor/plating{icon_state = "floorgrime"},/area/shuttle/escape) +"be" = (/turf/open/floor/plating{icon_state = "floorgrime"},/area/shuttle/escape) +"bf" = (/obj/machinery/door/airlock/external{name = "Emergency Recovery Airlock"},/turf/open/floor/plating{icon_state = "floorgrime"},/area/shuttle/escape) +"bg" = (/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape) +"bh" = (/obj/structure/chair{dir = 4},/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape) +"bi" = (/obj/structure/chair,/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape) +"bj" = (/obj/structure/table,/obj/item/weapon/defibrillator/loaded,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) +"bk" = (/obj/machinery/shower,/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) +"bl" = (/obj/machinery/sleeper{dir = 8},/turf/open/floor/plasteel/shuttle/white,/area/shuttle/escape) +"bm" = (/obj/structure/rack,/obj/item/weapon/crowbar,/obj/item/weapon/wrench,/obj/item/weapon/weldingtool,/obj/item/weapon/wirecutters,/obj/item/stack/cable_coil,/turf/open/floor/plasteel/warning{dir = 4},/area/shuttle/escape) +"bn" = (/obj/structure/reagent_dispensers/watertank,/turf/open/floor/plasteel/delivery,/area/shuttle/escape) +"bo" = (/obj/structure/reagent_dispensers/fueltank,/turf/open/floor/plasteel/delivery,/area/shuttle/escape) +"bp" = (/turf/open/floor/plasteel/delivery,/area/shuttle/escape) +"bq" = (/obj/machinery/recharge_station,/turf/open/floor/plasteel/delivery,/area/shuttle/escape) +"br" = (/turf/closed/wall/shuttle{icon_state = "swall4"; dir = 2},/area/shuttle/escape) +"bs" = (/obj/structure/chair{dir = 8},/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape) +"bt" = (/obj/structure/reagent_dispensers/peppertank,/turf/closed/wall/shuttle{icon_state = "swall3"; dir = 2},/area/shuttle/escape) +"bu" = (/obj/structure/table,/obj/item/weapon/reagent_containers/glass/bottle/epinephrine{pixel_x = 6; pixel_y = 0},/obj/item/weapon/reagent_containers/glass/bottle/charcoal{pixel_x = -3},/obj/item/weapon/reagent_containers/glass/bottle/epinephrine{pixel_x = -3; pixel_y = 8},/obj/item/weapon/reagent_containers/glass/bottle/charcoal{pixel_x = 6; pixel_y = 8},/obj/item/weapon/reagent_containers/syringe/epinephrine{pixel_x = 3; pixel_y = -2},/obj/item/weapon/reagent_containers/syringe/epinephrine{pixel_x = 4; pixel_y = 1},/obj/item/weapon/reagent_containers/syringe/epinephrine{pixel_x = -2; pixel_y = 5},/obj/item/weapon/reagent_containers/syringe/epinephrine{pixel_x = 2; pixel_y = 8},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) +"bv" = (/obj/structure/rack,/obj/item/weapon/storage/toolbox/electrical{pixel_x = -3; pixel_y = 1},/obj/item/weapon/storage/toolbox/mechanical{pixel_x = 0; pixel_y = -1},/obj/item/weapon/storage/toolbox/emergency{pixel_x = 3; pixel_y = -5},/turf/open/floor/plasteel/warning{dir = 4},/area/shuttle/escape) +"bw" = (/obj/item/weapon/cigbutt,/turf/open/floor/plating{icon_state = "floorgrime"},/area/shuttle/escape) +"bx" = (/turf/open/floor/plasteel/floorgrime,/area/shuttle/escape) +"by" = (/obj/machinery/suit_storage_unit/standard_unit,/turf/open/floor/plating{icon_state = "floorgrime"},/area/shuttle/escape) +"bz" = (/obj/structure/table/optable,/obj/item/weapon/surgical_drapes,/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) +"bA" = (/turf/open/floor/plasteel/warning{dir = 4},/area/shuttle/escape) +"bB" = (/turf/closed/wall/shuttle{icon_state = "diagonalWall3"},/area/shuttle/escape) +"bC" = (/obj/structure/reagent_dispensers/watertank,/turf/open/floor/plating{icon_state = "floorgrime"},/area/shuttle/escape) +"bD" = (/obj/structure/table,/obj/item/weapon/folder/red{pixel_x = 3},/obj/item/weapon/folder/white{pixel_x = -4; pixel_y = 2},/obj/item/device/radio/intercom{dir = 2; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -31},/obj/item/weapon/book/manual/wiki/security_space_law{pixel_x = -4; pixel_y = 4},/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape) +"bE" = (/obj/structure/table,/obj/item/weapon/restraints/handcuffs{pixel_y = 3},/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape) +"bF" = (/obj/structure/table,/obj/machinery/recharger{active_power_usage = 0; idle_power_usage = 0; use_power = 0},/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape) +"bG" = (/obj/structure/table,/obj/item/weapon/storage/box/handcuffs{pixel_x = 2; pixel_y = 2},/turf/open/floor/plasteel/shuttle/red,/area/shuttle/escape) +"bH" = (/obj/structure/table,/obj/item/weapon/scalpel{pixel_y = 12},/obj/item/weapon/circular_saw,/obj/item/weapon/retractor{pixel_x = 4},/obj/item/weapon/hemostat{pixel_x = -4},/obj/item/clothing/gloves/color/latex,/obj/item/clothing/mask/surgical,/obj/item/device/radio/intercom{dir = 2; name = "Station Intercom (General)"; pixel_x = -27; pixel_y = 0},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) +"bI" = (/obj/structure/sink,/turf/open/floor/plasteel/shuttle,/area/shuttle/escape) +"bJ" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) +"bK" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/o2{pixel_x = 3; pixel_y = 3},/turf/open/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) +"bL" = (/obj/structure/sign/bluecross_2,/turf/closed/wall/shuttle{icon_state = "swall2"},/area/shuttle/escape) +"bM" = (/obj/structure/rack{dir = 1},/obj/item/weapon/tank/internals/oxygen/red,/obj/item/clothing/suit/fire/firefighter,/obj/item/clothing/mask/gas,/obj/item/clothing/head/hardhat/red,/turf/open/floor/plasteel/warning{dir = 4},/area/shuttle/escape) +"bN" = (/obj/machinery/space_heater,/obj/structure/extinguisher_cabinet{dir = 4; pixel_x = 0; pixel_y = -27},/turf/open/floor/plating{icon_state = "bot"},/area/shuttle/escape) +"bO" = (/obj/structure/closet/crate{name = "emergency supplies crate"},/obj/item/weapon/storage/toolbox/emergency,/obj/item/weapon/storage/toolbox/emergency,/obj/item/device/flashlight/flare{pixel_x = 3; pixel_y = 3},/obj/item/device/flashlight/flare{pixel_x = -6; pixel_y = -2},/obj/item/weapon/crowbar,/obj/item/weapon/wrench,/obj/item/device/radio,/turf/open/floor/plating{icon_state = "bot"},/area/shuttle/escape) +"bP" = (/obj/structure/closet/crate/medical{name = "medical crate"},/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/o2{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/toxin{pixel_x = -4; pixel_y = 3},/obj/item/device/healthanalyzer{pixel_x = 3; pixel_y = 3},/obj/item/weapon/lazarus_injector,/mob/living/simple_animal/bot/medbot{name = "\improper emergency medibot"; pixel_x = -3; pixel_y = 2},/turf/open/floor/plating{icon_state = "bot"},/area/shuttle/escape) +"bQ" = (/obj/item/device/radio/intercom{dir = 2; name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -31},/obj/machinery/portable_atmospherics/canister/oxygen,/turf/open/floor/plating{icon_state = "bot"},/area/shuttle/escape) +"bR" = (/obj/structure/table,/obj/item/weapon/clipboard,/obj/item/weapon/folder/yellow,/obj/item/weapon/pen,/obj/item/hand_labeler_refill,/turf/open/floor/plating{icon_state = "bot"},/area/shuttle/escape) +"bS" = (/turf/closed/wall/shuttle{icon_state = "swall_s5"; dir = 2},/area/shuttle/escape) +"bT" = (/turf/closed/wall/shuttle{icon_state = "swall13"; dir = 2},/area/shuttle/escape) +"bU" = (/turf/closed/wall/shuttle{icon_state = "swall_s9"; dir = 2},/area/shuttle/escape) (1,1,1) = {" -aaabacabadabadabaeabafafabag -ahaiajaiakalakamanaoapapaqah -ahakakakakakakakafapararasah -atakakakakakakakafaparauavac -acawakaxacawakaxahayararazac -aAakakaxaBawakaxacaCauaraDah -ahaEakaxacawakaxahaFaGaHaIah -acawakaxaJawakaKaLaMacaNaOaP -acawakaxacawakaxacaQaQakaRah -acawakakakakakakaNakakakaSac -anawakaxacawakaxacaTakakaUac -adakakaxaJawakaxahaVaWaXaYah -acawakaxacawakaZaLababbaabaP -atakakaxaBawakaxahbbbcbdbeah -ahawakaxacawakaxacbbbfbfbgac -acakakakakakakakbhbfbfbfbiac -ahbjakakakbkakbjahblbmbnboah -aLabbaabbpabbaabbqabaeababaP -acbrbsakakbtakakbubvahbwbxac -acbybzakakakbAbBaLbCbDararbC -acbEakbAbFbzakbGahararararbC -acbHbIbJbKbLbMbNahbObPbPbQac -bRabababababababbSababababbT -bUbVbWbWbWbXbWbWbXbWbWbWbYbU -bUbUbZbZbZbXbZbZbXbZbZbZbUbU +aaaaabacacacacadaeacaeafacafagacacacaeahacafaeaeai +aaajakalamanaoakapaqaraqaraqararararasaqaraqaqatak +auavakawaqaxayazaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaAac +auavakaBaCaqaqaDaqaqaEaEaEaEaEaqaEaEaEaEaEaqaqatak +auavakaFaGaqaqaHaqaqacaIacaJacaqacaJacaIacaqaqaqac +aKaKakaLaxaqaqaMaqaqarararararaqarararararaqaqaNak +auavakaOaqaCaqazaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqac +auavakaPaQaRaqakapaqaEaEaSaEaEaqaEaEaEaEaEaqaqaTak +aKaKaUaJaeaVaWaXaVaYacaeadaeacaZacbaaeacaJbbbbagbc +auavakbdbebfbgakbhbgbibiakbjbkaqblakbmbnbobpbpbqak +auavakbdbebraebcbhbgbgbsbtbuaqaqblacbvbwbxbxbxbpac +auavakbdbebebyazbhbgbgbsazbzaqaqaqaZbAbxbxbwbxbpac +aabBakbCbebebyakbDbEbFbGakbHbIbJbKbLbMbNbObPbQbRak +aaaabSacbfbfacbTaeacacaebTaeacacaebTaeaeacacaeaebU "} diff --git a/_maps/shuttles/emergency_narnar.dmm b/_maps/shuttles/emergency_narnar.dmm index d4cf6ff501d..17b1b2dc1cd 100644 --- a/_maps/shuttles/emergency_narnar.dmm +++ b/_maps/shuttles/emergency_narnar.dmm @@ -1,5 +1,5 @@ "a" = (/turf/open/space,/area/space) -"b" = (/turf/closed/wall/cult,/area/shuttle/escape) +"b" = (/turf/closed/wall/mineral/cult,/area/shuttle/escape) "c" = (/obj/effect/forcefield/cult,/turf/open/floor/plating,/area/shuttle/escape) "d" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/fire,/turf/open/floor/plasteel/cult,/area/shuttle/escape) "e" = (/obj/structure/chair{dir = 1},/turf/open/floor/plasteel/cult,/area/shuttle/escape) @@ -16,7 +16,7 @@ "p" = (/obj/machinery/computer/communications,/turf/open/floor/plasteel/cult,/area/shuttle/escape) "q" = (/obj/item/stack/sheet/metal,/obj/effect/decal/remains/human,/turf/open/floor/plasteel/cult,/area/shuttle/escape) "r" = (/obj/machinery/door/airlock/cult/unruned/glass/friendly,/turf/open/floor/plasteel/cult,/area/shuttle/escape) -"s" = (/obj/machinery/status_display,/turf/closed/wall/cult,/area/shuttle/escape) +"s" = (/obj/machinery/status_display,/turf/closed/wall/mineral/cult,/area/shuttle/escape) "t" = (/obj/structure/closet/emcloset,/turf/open/floor/plasteel/cult,/area/shuttle/escape) "u" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/obj/item/weapon/crowbar,/turf/open/floor/plasteel/cult,/area/shuttle/escape) "v" = (/obj/effect/decal/cleanable/blood,/turf/open/floor/plasteel/cult,/area/shuttle/escape) diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm index d5c37b89886..d6ab9543d76 100644 --- a/code/__DEFINES/flags.dm +++ b/code/__DEFINES/flags.dm @@ -18,6 +18,7 @@ #define NODECONSTRUCT 128 // For machines and structures that should not break into parts, eg, holodeck stuff #define FPRINT 256 // takes a fingerprint #define ON_BORDER 512 // item has priority to check when entering or leaving +#define HOLOGRAM 32768 // HOlodeck shit should not be used in any fucking things #define HEADBANGPROTECT 4096 @@ -52,21 +53,22 @@ #define MUTCOLORS 1 #define HAIR 2 -#define FACEHAIR 4 -#define EYECOLOR 8 -#define LIPS 16 -#define RESISTCOLD 32 -#define RESISTHEAT 64 -#define RADIMMUNE 128 -#define NOBREATH 256 -#define NOGUNS 512 -#define NOBLOOD 1024 -#define NOFIRE 2048 -#define VIRUSIMMUNE 4096 -#define PIERCEIMMUNE 8192 -#define NOTRANSSTING 16384 - -#define MUTCOLORS_PARTSONLY 32768 //Used if we want the mutant colour to be only used by mutant bodyparts. Don't combine this with MUTCOLORS, or it will be useless. +#define FACEHAIR 3 +#define EYECOLOR 4 +#define LIPS 5 +#define RESISTTEMP 6 +#define RADIMMUNE 7 +#define NOBREATH 8 +#define NOGUNS 9 +#define NOBLOOD 10 +#define NOFIRE 11 +#define VIRUSIMMUNE 12 +#define PIERCEIMMUNE 13 +#define NOTRANSSTING 14 +#define MUTCOLORS_PARTSONLY 15 //Used if we want the mutant colour to be only used by mutant bodyparts. Don't combine this with MUTCOLORS, or it will be useless. +#define NODISMEMBER 16 +#define NOHUNGER 17 +#define NOCRITDAMAGE 18 /* These defines are used specifically with the atom/movable/languages bitmask. diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm index 27252048b47..c3b815bd923 100644 --- a/code/__DEFINES/hud.dm +++ b/code/__DEFINES/hud.dm @@ -15,7 +15,7 @@ #define DIAG_MECH_HUD "11"// Mech health bar #define DIAG_BOT_HUD "12"// Bot HUDs //for antag huds. these are used at the /mob level -#define ANTAG_HUD "12" +#define ANTAG_HUD "13" //data HUD (medhud, sechud) defines //Don't forget to update human/New() if you change these! @@ -39,3 +39,4 @@ #define ANTAG_HUD_DEVIL 17 #define ANTAG_HUD_SINTOUCHED 18 #define ANTAG_HUD_SOULLESS 19 +#define ANTAG_HUD_CLOCKWORK 20 diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 0f46088543b..e5c2a9cdca3 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -227,7 +227,7 @@ #define MIN_RANGE_FIND 16 #define FUZZY_CHANCE_HIGH 85 #define FUZZY_CHANCE_LOW 50 -#define CHANCE_TALK 15 +#define CHANCE_TALK 1 #define SNPC_BRUTE 1 #define SNPC_STEALTH 2 @@ -286,6 +286,9 @@ var/list/bloody_footprints_cache = list() #define TURF_WET_ICE 3 #define TURF_WET_PERMAFROST 4 +//Maximum amount of time, (in approx. seconds.) a tile can be wet for. +#define MAXIMUM_WET_TIME 300 + //Object/Item sharpness #define IS_BLUNT 0 #define IS_SHARP 1 @@ -425,6 +428,16 @@ var/global/list/ghost_others_options = list(GHOST_OTHERS_SIMPLE, GHOST_OTHERS_DE // Shuttle return values #define SHUTTLE_ALREADY_DOCKED 7 + +#define CHECK_DNA_AND_SPECIES(C) if((!(C.dna)) || (!(C.dna.species))) return + +// Evil narsie colour +#define NARSIE_WINDOW_COLOUR "#7D1919" + +// Defib stats +#define DEFIB_TIME_LIMIT 120 +#define DEFIB_TIME_LOSS 60 + // Diagonal movement #define FIRST_DIAG_STEP 1 -#define SECOND_DIAG_STEP 2 \ No newline at end of file +#define SECOND_DIAG_STEP 2 diff --git a/code/__DEFINES/role_preferences.dm b/code/__DEFINES/role_preferences.dm index 980436018c6..638e259a3c5 100644 --- a/code/__DEFINES/role_preferences.dm +++ b/code/__DEFINES/role_preferences.dm @@ -25,7 +25,7 @@ #define ROLE_HOG_GOD "hand of god: god" #define ROLE_HOG_CULTIST "hand of god: cultist" #define ROLE_DEVIL "devil" - +#define ROLE_SERVANT_OF_RATVAR "servant of Ratvar" //Missing assignment means it's not a gamemode specific role, IT'S NOT A BUG OR ERROR. //The gamemode specific ones are just so the gamemodes can query whether a player is old enough @@ -49,5 +49,6 @@ var/global/list/special_roles = list( ROLE_ABDUCTOR = /datum/game_mode/abduction, ROLE_HOG_GOD = /datum/game_mode/hand_of_god, ROLE_HOG_CULTIST = /datum/game_mode/hand_of_god, - ROLE_DEVIL = /datum/game_mode/devil + ROLE_DEVIL = /datum/game_mode/devil, + ROLE_SERVANT_OF_RATVAR = /datum/game_mode/clockwork_cult, ) diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index 371ba01bb99..43c16602cfc 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -401,7 +401,7 @@ if(!G.key || !G.client) continue if(be_special_flag) - if(!(G.client.prefs.be_special & be_special_flag)) + if(!(G.client.prefs) || !(be_special_flag in G.client.prefs.be_special)) continue if (gametypeCheck) if(!gametypeCheck.age_check(G.client)) diff --git a/code/__HELPERS/lists.dm b/code/__HELPERS/lists.dm index 172418498c3..452d2027b5e 100644 --- a/code/__HELPERS/lists.dm +++ b/code/__HELPERS/lists.dm @@ -53,10 +53,16 @@ //Checks for specific types in a list /proc/is_type_in_list(atom/A, list/L) + if (!L.len) + return 0 + if (!L[L[1]]) + generate_type_list_cache(L) + return L[A.type] + +/proc/generate_type_list_cache(L) for(var/type in L) - if(istype(A, type)) - return 1 - return 0 + for(var/T in typesof(type)) + L[T] = 1 //Empties the list by setting the length to 0. Hopefully the elements get garbage collected /proc/clearlist(list/list) @@ -232,13 +238,7 @@ return r // Returns the key based on the index -/proc/get_key_by_index(list/L, index) - var/i = 1 - for(var/key in L) - if(index == i) - return key - i++ - return null +#define KEYBYINDEX(L, index) (((index <= L:len) && (index > 0)) ? L[index] : null) /proc/count_by_type(list/L, type) var/i = 0 @@ -359,3 +359,6 @@ for(var/i = 1 to l.len) if(islist(.[i])) .[i] = .(.[i]) + +//Picks from the list, with some safeties, and returns the "default" arg if it fails +#define DEFAULTPICK(L, default) ((istype(L, /list) && L:len) ? pick(L) : default) diff --git a/code/_onclick/telekinesis.dm b/code/_onclick/telekinesis.dm index 1fb7b369327..a8fbcf17bb9 100644 --- a/code/_onclick/telekinesis.dm +++ b/code/_onclick/telekinesis.dm @@ -96,8 +96,12 @@ var/const/tk_maxrange = 15 /obj/item/tk_grab/attack_self(mob/user) - if(focus) - focus.attack_self_tk(user) + if(!focus) + return + if(qdeleted(focus)) + qdel(src) + return + focus.attack_self_tk(user) /obj/item/tk_grab/afterattack(atom/target, mob/living/carbon/user, proximity, params)//TODO: go over this if(!target || !user) diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 93dd4a0555a..11d34afc903 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -93,6 +93,7 @@ var/humans_need_surnames = 0 var/allow_ai = 0 // allow ai job var/forbid_secborg = 0 // disallow secborg module to be chosen. + var/forbid_peaceborg = 0 var/panic_bunker = 0 // prevents new people it hasn't seen before from connecting var/notify_new_player_age = 0 // how long do we notify admins of a new player var/irc_first_connection_alert = 0 // do we notify the irc channel when somebody is connecting for the first time? @@ -560,6 +561,8 @@ config.allow_ai = 1 if("disable_secborg") config.forbid_secborg = 1 + if("disable_peaceborg") + config.forbid_peaceborg = 1 if("silent_ai") config.silent_ai = 1 if("silent_borg") diff --git a/code/game/dna.dm b/code/datums/dna.dm similarity index 100% rename from code/game/dna.dm rename to code/datums/dna.dm diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm index 793cab7db2b..1ad6ec8e32f 100644 --- a/code/datums/helper_datums/teleport.dm +++ b/code/datums/helper_datums/teleport.dm @@ -158,4 +158,47 @@ if(istype(teleatom, /mob/living)) var/mob/living/MM = teleatom MM << "The bluespace interface on your bag of holding interferes with the teleport!" - return 1 \ No newline at end of file + return 1 + +// Safe location finder + +/proc/find_safe_turf(zlevel = ZLEVEL_STATION, list/zlevels) + if(!zlevels) + zlevels = list(zlevel) + for(var/cycle in 1 to 100) + // DRUNK DIALLING WOOOOOOOOO + var/random_location = locate(rand(37,202),rand(75,192),pick(zlevels)) + if(!(istype(random_location, /turf/open/floor))) + continue + var/turf/open/floor/F = random_location + if(!F.air) + continue + + var/datum/gas_mixture/A = F.air + var/list/A_gases = A.gases + var/trace_gases + for(var/id in A_gases) + if(id in hardcoded_gases) + continue + trace_gases = TRUE + break + + // Can most things breathe? + if(trace_gases) + continue + if(!(A_gases["o2"] && A_gases["o2"][MOLES] >= 16)) + continue + if(A_gases["plasma"]) + continue + if(A_gases["co2"] && A_gases["co2"][MOLES] >= 10) + continue + + // Aim for goldilocks temperatures and pressure + if((A.temperature <= 270) || (A.temperature >= 360)) + continue + var/pressure = A.return_pressure() + if((pressure <= 20) || (pressure >= 550)) + continue + + // DING! You have passed the gauntlet, and are "probably" safe. + return F diff --git a/code/datums/hud.dm b/code/datums/hud.dm index 2b7eee8a730..62c1700f58d 100644 --- a/code/datums/hud.dm +++ b/code/datums/hud.dm @@ -21,6 +21,7 @@ var/datum/atom_hud/huds = list( \ ANTAG_HUD_DEVIL = new/datum/atom_hud/antag(),\ ANTAG_HUD_SINTOUCHED = new/datum/atom_hud/antag/hidden(),\ ANTAG_HUD_SOULLESS = new/datum/atom_hud/antag/hidden(),\ + ANTAG_HUD_CLOCKWORK = new/datum/atom_hud/antag(),\ ) /datum/atom_hud diff --git a/code/datums/martial/wrestling.dm b/code/datums/martial/wrestling.dm index c80217e7754..0b7793727be 100644 --- a/code/datums/martial/wrestling.dm +++ b/code/datums/martial/wrestling.dm @@ -203,7 +203,7 @@ animate(D, transform = matrix(180, MATRIX_ROTATE), time = 1, loop = 0) sleep (15) if (D) - animate(transform = null, time = 1, loop = 0) + animate(D, transform = null, time = 1, loop = 0) for (var/i = 0, i < 3, i++) if (A && D) diff --git a/code/datums/material_container.dm b/code/datums/material_container.dm index d7c5c307bc5..41baa00796e 100644 --- a/code/datums/material_container.dm +++ b/code/datums/material_container.dm @@ -53,7 +53,8 @@ M.amount += amt total_amount += amt else - for(var/datum/material/M in materials) + for(var/i in materials) + var/datum/material/M = materials[i] M.amount += amt total_amount += amt return (total_amount - total_amount_saved) @@ -120,8 +121,7 @@ /datum/material_container/proc/use_amount_type(amt, material_type) - var/datum/material/M - M = materials[material_type] + var/datum/material/M = materials[material_type] if(M) if(M.amount >= amt) M.amount -= amt @@ -129,6 +129,20 @@ return amt return 0 +/datum/material_container/proc/can_use_amount(amt, material_type, list/mats) + if(amt && material_type) + var/datum/material/M = materials[material_type] + if(M && M.amount >= amt) + return TRUE + else if(istype(mats)) + for(var/M in mats) + if(materials[M] && (mats[M] <= materials[M])) + continue + else + return FALSE + return TRUE + return FALSE + //For spawning mineral sheets; internal use only /datum/material_container/proc/retrieve(sheet_amt, datum/material/M) if(sheet_amt > 0) @@ -205,62 +219,47 @@ /datum/material + var/name var/amount = 0 var/material_type = null var/sheet_type = null /datum/material/metal - -/datum/material/metal/New() - ..() + name = "Metal" material_type = MAT_METAL sheet_type = /obj/item/stack/sheet/metal /datum/material/glass - -/datum/material/glass/New() - ..() + name = "Glass" material_type = MAT_GLASS sheet_type = /obj/item/stack/sheet/glass /datum/material/silver - -/datum/material/silver/New() - ..() + name = "Silver" material_type = MAT_SILVER sheet_type = /obj/item/stack/sheet/mineral/silver /datum/material/gold - -/datum/material/gold/New() - ..() + name = "Gold" material_type = MAT_GOLD sheet_type = /obj/item/stack/sheet/mineral/gold /datum/material/diamond - -/datum/material/diamond/New() - ..() + name = "Diamond" material_type = MAT_DIAMOND sheet_type = /obj/item/stack/sheet/mineral/diamond /datum/material/uranium - -/datum/material/uranium/New() - ..() + name = "Uranium" material_type = MAT_URANIUM sheet_type = /obj/item/stack/sheet/mineral/uranium /datum/material/plasma - -/datum/material/plasma/New() - ..() + name = "Solid Plasma" material_type = MAT_PLASMA sheet_type = /obj/item/stack/sheet/mineral/plasma /datum/material/bananium - -/datum/material/bananium/New() - ..() + name = "Bananium" material_type = MAT_BANANIUM - sheet_type = /obj/item/stack/sheet/mineral/bananium \ No newline at end of file + sheet_type = /obj/item/stack/sheet/mineral/bananium diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 60d4d992d88..34360228de4 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -52,6 +52,7 @@ var/datum/faction/faction //associated faction var/datum/changeling/changeling //changeling holder + var/linglink var/miming = 0 // Mime's vow of silence var/antag_hud_icon_state = null //this mind's ANTAG_HUD should have this icon_state @@ -244,6 +245,7 @@ "nuclear", "traitor", // "traitorchan", "monkey", + "clockcult" ) var/text = "" @@ -351,6 +353,26 @@ sections["cult"] = text + /** CLOCKWORK CULT **/ + text = "clockwork cult" + if(ticker.mode.config_tag == "clockwork cult") + text = uppertext(text) + text = "[text]: " + if(src in ticker.mode.servants_of_ratvar) + text += "loyal|employee|SERVANT" + text += "
Give slab" + else if(isloyal(current)) + text += "LOYAL|employee|servant" + else + text += "loyal|EMPLOYEE|servant" + + if(current && current.client && (ROLE_SERVANT_OF_RATVAR in current.client.prefs.be_special)) + text += "|Enabled in Prefs" + else + text += "|Disabled in Prefs" + + sections["clockcult"] = text + /** WIZARD ***/ text = "wizard" if (ticker.mode.config_tag=="wizard") @@ -1016,6 +1038,22 @@ if (!ticker.mode.equip_cultist(current)) usr << "Spawning amulet failed!" + else if(href_list["clockcult"]) + switch(href_list["clockcult"]) + if("clear") + remove_servant_of_ratvar(current) + message_admins("[key_name_admin(usr)] has removed clockwork servant status from [current].") + log_admin("[key_name(usr)] has removed clockwork servant status from [current].") + if("servant") + if(!(src in ticker.mode.servants_of_ratvar)) + add_servant_of_ratvar(current) + message_admins("[key_name_admin(usr)] has made [current] into a servant of Ratvar.") + log_admin("[key_name(usr)] has made [current] into a servant of Ratvar.") + if("slab") + if(!ticker.mode.equip_servant(current)) + usr << "Failed to outfit [current] with a slab!" + else + usr << "Successfully gave [current] a clockwork slab!" else if (href_list["wizard"]) switch(href_list["wizard"]) @@ -1688,7 +1726,11 @@ return G break - +/datum/mind/proc/grab_ghost(force) + var/mob/dead/observer/G = get_ghost(even_if_they_cant_reenter = force) + . = G + if(G) + G.reenter_corpse() /mob/proc/sync_mind() mind_initialize() //updates the mind (or creates and initializes one if one doesn't exist) diff --git a/code/datums/ruins/lavaland.dm b/code/datums/ruins/lavaland.dm index 9409e9b3b6f..06b00e1be8f 100644 --- a/code/datums/ruins/lavaland.dm +++ b/code/datums/ruins/lavaland.dm @@ -174,3 +174,19 @@ making sure people work on their cardio." suffix = "lavaland_gym.dmm" cost = 10 + +/datum/map_template/ruin/lavaland/survivalcapsule + name = "Survival Capsule Ruins" + id = "survivalcapsule" + description = "What was once sanctuary to the common miner, \ + is now their tomb." + suffix = "lavaland_surface_survivalpod.dmm" + cost = 5 + +/datum/map_template/ruin/lavaland/tomb + name = "Strange Outpost" + id = "tomb" + description = "A strange tomb, housing the dead of whatever strange civilization \ + lived here before. You swear you hear rattling coming from the inside." + suffix = "lavaland_surface_tomb.dmm" + cost = 10 diff --git a/code/datums/shuttles.dm b/code/datums/shuttles.dm index d7497bbe415..f34e49e96a0 100644 --- a/code/datums/shuttles.dm +++ b/code/datums/shuttles.dm @@ -112,6 +112,24 @@ without protective goggles. Emitters spawn powered on, expect \ admin notices, they are harmless." +/datum/map_template/shuttle/emergency/imfedupwiththisworld + suffix = "imfedupwiththisworld" + name = "Oh, Hi Daniel" + description = "How was space work today? \ + Oh, pretty good. We got a new space station and the company will make a lot of money. \ + What space station? \ + I cannot tell you; it's space confidential. \ + Aw, come space on. Why not? \ + No, I can't. Anyway, how is your space roleplay life?" + +/datum/map_template/shuttle/emergency/goon + suffix = "goon" + name = "NES Port" + description = "The Nanotrasen Emergency Shuttle Port(NES Port for short) \ + is a shuttle used at other less known nanotrasen facilities \ + and has a more open inside for larger crowds." + + /datum/map_template/shuttle/ferry/base suffix = "base" name = "transport ferry" diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space_Station_13_areas.dm similarity index 100% rename from code/game/area/Space Station 13 areas.dm rename to code/game/area/Space_Station_13_areas.dm diff --git a/code/game/asteroid.dm b/code/game/asteroid.dm index 1d95041df3c..f700b301351 100644 --- a/code/game/asteroid.dm +++ b/code/game/asteroid.dm @@ -71,7 +71,7 @@ var/global/max_secret_rooms = 6 if("cult") theme = "cult" - walltypes = list(/turf/closed/wall/cult=3,/turf/closed/mineral/random/high_chance=1) + walltypes = list(/turf/closed/wall/mineral/cult=3,/turf/closed/mineral/random/high_chance=1) floortypes = list(/turf/open/floor/plasteel/cult) treasureitems = list(/obj/item/device/soulstone/anybody=1, /obj/item/clothing/suit/space/hardsuit/cult=1, /obj/item/weapon/bedsheet/cult=2, /obj/item/clothing/suit/cultrobes=2, /mob/living/simple_animal/hostile/creature=3) diff --git a/code/game/gamemodes/antag_hud.dm b/code/game/gamemodes/antag_hud.dm index 464698a6f34..3592fbc4e00 100644 --- a/code/game/gamemodes/antag_hud.dm +++ b/code/game/gamemodes/antag_hud.dm @@ -17,6 +17,8 @@ M.mind.antag_hud = src /datum/atom_hud/antag/proc/leave_hud(mob/M) + if(!M) + return if(!istype(M)) CRASH("leave_hud(): [M] ([M.type]) is not a mob!") remove_from_hud(M) diff --git a/code/game/gamemodes/blob/blob_finish.dm b/code/game/gamemodes/blob/blob_finish.dm index f5a415985fe..4cf2789710e 100644 --- a/code/game/gamemodes/blob/blob_finish.dm +++ b/code/game/gamemodes/blob/blob_finish.dm @@ -1,9 +1,9 @@ /datum/game_mode/blob/check_finished() - if(blob_overminds.len > cores_to_spawn && cores_to_spawn > blob_cores.len)//Some blobs have yet to burst - return 0 if(blobwincount <= blobs_legit.len)//Blob took over return 1 - if(!overminds.len && !blob_cores.len) //blob is dead + if(overminds.len) + return 0 + if(!blob_cores.len) //blob is dead if(config.continuous["blob"]) continuous_sanity_checked = 1 //Nonstandard definition of "alive" gets past the check otherwise SSshuttle.emergencyNoEscape = 0 diff --git a/code/game/gamemodes/blob/blobs/blob_mobs.dm b/code/game/gamemodes/blob/blobs/blob_mobs.dm index 037d0d246ea..66bcfd61398 100644 --- a/code/game/gamemodes/blob/blobs/blob_mobs.dm +++ b/code/game/gamemodes/blob/blobs/blob_mobs.dm @@ -90,7 +90,7 @@ attack_sound = 'sound/weapons/genhit1.ogg' flying = 1 del_on_death = 1 - deathmessage = "The blob spore explodes into a cloud of gas!" + deathmessage = "explodes into a cloud of gas!" var/death_cloud_size = 1 //size of cloud produced from a dying spore var/list/human_overlays = list() var/is_zombie = 0 @@ -212,13 +212,17 @@ mob_size = MOB_SIZE_LARGE see_invisible = SEE_INVISIBLE_MINIMUM see_in_dark = 8 + var/independent = FALSE /mob/living/simple_animal/hostile/blob/blobbernaut/New() ..() - verbs -= /mob/living/verb/pulled //no pulling people deep into the blob + if(!independent) //no pulling people deep into the blob + verbs -= /mob/living/verb/pulled /mob/living/simple_animal/hostile/blob/blobbernaut/Life() if(..()) + if(independent) + return // strong independent blobbernaut that don't need no blob var/damagesources = 0 if(!(locate(/obj/effect/blob) in range(2, src))) damagesources++ @@ -271,3 +275,7 @@ factory.naut = null //remove this naut from its factory factory.maxhealth = initial(factory.maxhealth) flick("blobbernaut_death", src) + +/mob/living/simple_animal/hostile/blob/blobbernaut/independent + independent = TRUE + gold_core_spawnable = 1 diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/theblob.dm index 72112430613..5647c202066 100644 --- a/code/game/gamemodes/blob/theblob.dm +++ b/code/game/gamemodes/blob/theblob.dm @@ -45,6 +45,20 @@ return ..() +/obj/effect/blob/Adjacent(var/atom/neighbour) + . = ..() + if(.) + var/result = 0 + var/direction = get_dir(src, neighbour) + var/list/dirs = list("[NORTHWEST]" = list(NORTH, WEST), "[NORTHEAST]" = list(NORTH, EAST), "[SOUTHEAST]" = list(SOUTH, EAST), "[SOUTHWEST]" = list(SOUTH, WEST)) + for(var/A in dirs) + if(direction == text2num(A)) + for(var/B in dirs[A]) + var/C = locate(/obj/effect/blob) in get_step(src, B) + if(C) + result++ + . -= result - 1 + /obj/effect/blob/CanAtmosPass(turf/T) return !atmosblock diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index a6200f60bee..a764b30182b 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -290,6 +290,7 @@ var/list/slot2type = list("head" = /obj/item/clothing/head/changeling, "wear_mas var/changelingID = "Changeling" var/geneticdamage = 0 var/isabsorbing = 0 + var/islinking = 0 var/geneticpoints = 10 var/purchasedpowers = list() var/mimicing = "" diff --git a/code/game/gamemodes/changeling/powers/fleshmend.dm b/code/game/gamemodes/changeling/powers/fleshmend.dm index e4c68a8537c..1331788dc4e 100644 --- a/code/game/gamemodes/changeling/powers/fleshmend.dm +++ b/code/game/gamemodes/changeling/powers/fleshmend.dm @@ -1,13 +1,17 @@ /obj/effect/proc_holder/changeling/fleshmend name = "Fleshmend" - desc = "Our flesh rapidly regenerates, healing our wounds. Effectiveness decreases with quick, repeated use." - helptext = "Heals a moderate amount of damage over a short period of time. Can be used while unconscious, and will alert nearby crew." + desc = "Our flesh rapidly regenerates, healing our wounds, and growing \ + back missing limbs. Effectiveness decreases with quick, repeated use." + helptext = "Heals a moderate amount of damage over a short period of \ + time. Can be used while unconscious. Will alert nearby crew if \ + any limbs are regenerated." chemical_cost = 25 dna_cost = 2 req_stat = UNCONSCIOUS var/recent_uses = 1 //The factor of which the healing should be divided by var/healing_ticks = 10 - // The ideal total healing amount, divided by healing_ticks to get heal/tick + // The ideal total healing amount, + // divided by healing_ticks to get heal/tick var/total_healing = 100 /obj/effect/proc_holder/changeling/fleshmend/New() @@ -22,25 +26,29 @@ if(recent_uses > 1) recent_uses = max(1, recent_uses - (1 / healing_ticks)) -//Starts healing you every second for 10 seconds. Can be used whilst unconscious. +//Starts healing you every second for 10 seconds. +//Can be used whilst unconscious. /obj/effect/proc_holder/changeling/fleshmend/sting_action(mob/living/user) user << "We begin to heal rapidly." if(recent_uses > 1) - user << "Our healing's effectiveness is reduced by quickly repeated use!" + user << "Our healing's effectiveness is reduced \ + by quick repeated use!" spawn(0) recent_uses++ if(ishuman(user)) var/mob/living/carbon/human/H = user H.restore_blood() H.remove_all_embedded_objects() - if(H.get_missing_limbs()) + var/list/missing = H.get_missing_limbs() + if(missing.len) playsound(user, 'sound/magic/Demon_consume.ogg', 50, 1) H.visible_message("[user]'s missing limbs reform, making a loud, grotesque sound!", "Your limbs regrow, making a loud, crunchy sound and giving you great pain!", "You hear organic matter ripping and tearing!") H.emote("scream") H.regenerate_limbs(1) - // The healing itself - doesn't heal toxin damage (that's anatomic panacea) and - // effectiveness decreases with each use in a short timespan + // The healing itself - doesn't heal toxin damage + // (that's anatomic panacea) and the effectiveness decreases with + // each use in a short timespan for(var/i in 1 to healing_ticks) if(user) var/healpertick = -(total_healing / healing_ticks) diff --git a/code/game/gamemodes/changeling/powers/linglink.dm b/code/game/gamemodes/changeling/powers/linglink.dm new file mode 100644 index 00000000000..31de5f47be6 --- /dev/null +++ b/code/game/gamemodes/changeling/powers/linglink.dm @@ -0,0 +1,68 @@ +/obj/effect/proc_holder/changeling/linglink + name = "Hivemind Link" + desc = "Link your victim's mind into the hivemind for personal interrogation" + chemical_cost = 0 + dna_cost = 0 + req_human = 1 + max_genetic_damage = 100 + +/obj/effect/proc_holder/changeling/linglink/can_sting(mob/living/carbon/user) + if(!..()) + return + var/datum/changeling/changeling = user.mind.changeling + var/obj/item/weapon/grab/G = user.get_active_hand() + var/mob/living/carbon/target = G.affecting + if(changeling.islinking) + user << "We have already formed a link with the victim!" + return + if(!target.mind) + user << "The victim has no mind to link to!" + return + if(target.stat == DEAD) + user << "The victim is dead, you cannot link to a dead mind!" + return + if(target.mind.changeling) + user << "The victim is already a part of the hivemind!" + return + if(!istype(G)) + user << "We must be tightly grabbing a creature in our active hand to link with them!" + return + if(G.state <= GRAB_NECK) + user << "We must have a tighter grip to link with this creature!" + return + return changeling.can_absorb_dna(user,target) + +/obj/effect/proc_holder/changeling/linglink/sting_action(mob/user) + var/datum/changeling/changeling = user.mind.changeling + var/obj/item/weapon/grab/G = user.get_active_hand() + var/mob/living/carbon/human/target = G.affecting + changeling.islinking = 1 + for(var/i in 1 to 3) + switch(i) + if(1) + user << "This creature is compatible. We must hold still..." + if(2) + user << "We stealthily stab [target] with a minor proboscis..." + target << "You experience a stabbing sensation and your ears begin to ring..." + if(3) + user << "You mold the [target]'s mind like clay, they can now speak in the hivemind!" + target << "A migraine throbs behind your eyes, you hear yourself screaming - but your mouth has not opened!" + for(var/mob/M in mob_list) + if(M.lingcheck() == 2) + M << "We can sense a foreign presence in the hivemind..." + target.mind.linglink = 1 + target.say(":g AAAAARRRRGGGGGHHHHH!!") + target << "You can now communicate in the changeling hivemind, say \":g message\" to communicate!" + target.reagents.add_reagent("salbutamol", 40) // So they don't choke to death while you interrogate them + sleep(1800) + feedback_add_details("changeling_powers","A [i]") + if(!do_mob(user, target, 20)) + user << "Our link with [target] has ended!" + changeling.islinking = 0 + target.mind.linglink = 0 + return + + changeling.islinking = 0 + target.mind.linglink = 0 + user << "You cannot sustain the connection any longer, your victim fades from the hivemind" + target << "The link cannot be sustained any longer, your connection to the hivemind has faded!" diff --git a/code/game/gamemodes/changeling/traitor_chan.dm b/code/game/gamemodes/changeling/traitor_chan.dm index 2d906e37ed0..861ded33da2 100644 --- a/code/game/gamemodes/changeling/traitor_chan.dm +++ b/code/game/gamemodes/changeling/traitor_chan.dm @@ -43,6 +43,7 @@ for(var/j = 0, j < num_changelings, j++) if(!possible_changelings.len) break var/datum/mind/changeling = pick(possible_changelings) + antag_candidates -= changeling possible_changelings -= changeling changelings += changeling modePlayer += changelings diff --git a/code/game/gamemodes/clock_cult/__clock_defines.dm b/code/game/gamemodes/clock_cult/__clock_defines.dm new file mode 100644 index 00000000000..3516eac2b30 --- /dev/null +++ b/code/game/gamemodes/clock_cult/__clock_defines.dm @@ -0,0 +1,16 @@ +var/global/clockwork_construction_value = 0 //The total value of all structures built by the clockwork cult +var/global/clockwork_caches = 0 //How many clockwork caches exist in the world (not each individual) +var/global/clockwork_daemons = 0 //How many daemons exist in the world +var/global/list/clockwork_generals_invoked = list("nezbere" = FALSE, "sevtug" = FALSE, "nzcrentr" = FALSE, "inath-neq" = FALSE) //How many generals have been recently invoked +var/global/list/all_clockwork_objects = list() //All clockwork items, structures, and effects in existence +var/global/list/all_clockwork_mobs = list() //All clockwork SERVANTS (not creatures) in existence +var/global/list/clockwork_component_cache = list("belligerent_eye" = 0, "vanguard_cogwheel" = 0, "guvax_capacitor" = 0, "replicant_alloy" = 0, "hierophant_ansible" = 0) //The pool of components that caches draw from + +#define SCRIPTURE_PERIPHERAL 0 //Should never be used +#define SCRIPTURE_DRIVER 1 +#define SCRIPTURE_SCRIPT 2 +#define SCRIPTURE_APPLICATION 3 +#define SCRIPTURE_REVENANT 4 +#define SCRIPTURE_JUDGEMENT 5 + +#define SLAB_PRODUCTION_THRESHOLD 60 //How many cycles it takes slabs to produce a single component; defaults to one minute diff --git a/code/game/gamemodes/clock_cult/clock_cult.dm b/code/game/gamemodes/clock_cult/clock_cult.dm new file mode 100644 index 00000000000..fd289769277 --- /dev/null +++ b/code/game/gamemodes/clock_cult/clock_cult.dm @@ -0,0 +1,274 @@ +/* + +CLOCKWORK CULT: Based off of the failed pull requests from vgstation + +While Nar-Sie is the oldest and most prominent of the elder gods, there are other forces at work in the universe. +Ratvar, the Clockwork Justiciar, a homage to Nar-Sie granted sentience by its own power, is one such other force. +Imprisoned within a massive construct known as the Celestial Derelict - or Reebe - an intense hatred of the Blood God festers. +Ratvar, unable to act in the mortal plane, seeks to return and forms covenants with mortals in order to bolster his influence. +Due to his mechanical nature, Ratvar is also capable of influencing silicon-based lifeforms, unlike Nar-Sie, who can only influence natural life. + +This is a team-based gamemode. + +There are three possible objectives the Enlightened - Ratvar's minions - can have: + 1. Ensure X amount of Enlightened escape the station through the shuttle or otherwise. + 2. Convert all silicon lifeforms on the station to Ratvar's cause. + 3. Summon Ratvar via construction of a Gateway. + +The clockwork version of an arcane tome is the clockwork slab. +While it can perform certain actions, it consumes a resource called components. +Components, which are fallen fragments of Ratvar's body as he rusts in Reebe, are powerful and have various effects. +Game-wise, clockwork slabs will generate components over time, with more powerful components being slower. + +This file's folder contains: + __clock_defines.dm: Defined variables + clock_cult.dm: Core gamemode files. + clock_mobs.dm: Hostile and benign clockwork creatures. + clock_objects.dm: Items and structures. + clock_ratvar.dm: The Ark of the Clockwork Justiciar and Ratvar himself. Important enough to have his own file. + clock_scripture.dm: Scripture and rites. + clock_unsorted.dm: Anything else with no place to be + +*/ + +/////////// +// PROCS // +/////////// + +/proc/is_servant_of_ratvar(mob/M) + return M && istype(M) && M.mind && ticker && ticker.mode && (M.mind in ticker.mode.servants_of_ratvar) + +/proc/is_eligible_servant(mob/M) + return M && istype(M) && M.mind && !M.mind.special_role && !isloyal(M) + +/proc/add_servant_of_ratvar(mob/M, silent = FALSE) + if(!is_eligible_servant(M) || !ticker || !ticker.mode) + return 0 + if(iscarbon(M)) + if(!silent) + M << "Your mind is racing! Your body feels incredibly light! Your world glows a brilliant yellow! All at once it comes to you. Ratvar, the Clockwork \ + Justiciar lies in exile, derelict and forgotten in an unseen realm." + if(!is_eligible_servant(M)) + M.visible_message("[M] seems to resist an unseen force!", "And yet, you somehow push it all away.") + return 0 + else if(issilicon(M)) + if(!silent) + M << "You are unable to compute this truth. Your vision glows a brilliant yellow, and all at once it comes to you. Ratvar, the Clockwork Justiciar, lies in \ + exile, derelict and forgotten in an unseen realm." + if(!is_eligible_servant(M)) + M.visible_message("[M] whirs as it resists an outside influence!", \ + "Corrupt data purged. Resetting cortex chip to factory defaults... complete.") + return 0 + if(!silent) + M.visible_message("[M]'s eyes glow a blazing yellow!", \ + "Assist your new companions in their righteous efforts. Your goal is theirs, and theirs yours. You serve the Clockwork Justiciar above all else. Perform his every \ + whim without hesitation.") + ticker.mode.servants_of_ratvar += M.mind + ticker.mode.update_servant_icons_added(M.mind) + M.mind.special_role = "Servant of Ratvar" + all_clockwork_mobs += M + if(issilicon(M)) + var/mob/living/silicon/S = M + if(isrobot(S)) + var/mob/living/silicon/robot/R = S + R.UnlinkSelf() + R.emagged = 1 + R << "You have been desynced from your master AI. In addition, your onboard camera is no longer active and your safeties have been disabled." + S.laws = new/datum/ai_laws/ratvar + S.update_icons() + S.show_laws() + if(istype(ticker.mode, /datum/game_mode/clockwork_cult)) + var/datum/game_mode/clockwork_cult/C = ticker.mode + C.present_tasks(M) //Memorize the objectives + return 1 + +/proc/remove_servant_of_ratvar(mob/M) + if(!is_servant_of_ratvar(M)) //In this way, is_servant_of_ratvar() checks the existence of ticker and minds + return 0 + M.visible_message("[M] seems to have remembered their true allegiance!", \ + "A cold, cold darkness flows through your mind, extinguishing the Justiciar's light and all of your memories as his servant.") + ticker.mode.servants_of_ratvar -= M.mind + ticker.mode.update_servant_icons_removed(M.mind) + all_clockwork_mobs -= M + M.mind.memory = "" //Not sure if there's a better way to do this + M.mind.special_role = null + M.verbs -= /mob/living/carbon/human/proc/function_call //Removes any bound Ratvarian spears + if(issilicon(M)) + var/mob/living/silicon/S = M + if(isrobot(S)) + var/mob/living/silicon/robot/R = S + R.emagged = initial(R.emagged) + R << "Despite your freedom from Ratvar's influence, you are still irreparably damaged and no longer possess certain functions such as AI linking." + S.laws = initial(S.laws) + S.update_icons() + S.show_laws() + return 1 + +/proc/send_hierophant_message(mob/user, message) + if(!user || !message || !ticker || !ticker.mode) + return 0 + var/parsed_message = "Servant [user.name == user.real_name ? user.name : "[user.real_name] (as [user.name])"]: \"[message]\"" + for(var/mob/M in mob_list) + if(is_servant_of_ratvar(M) || isobserver(M)) + M << parsed_message + return 1 + +/////////////// +// GAME MODE // +/////////////// + +var/global/ratvar_awakens = FALSE //If Ratvar has been summoned +/datum/game_mode + var/list/servants_of_ratvar = list() //The Enlightened servants of Ratvar + var/required_escapees = 0 //How many servants need to escape, if applicable + var/required_silicon_converts = 0 //How many robotic lifeforms need to be converted, if applicable + var/clockwork_objective = "escape" //The objective that the servants must fulfill + var/clockwork_explanation = "Ensure that the meme levels of the station remain high." //The description of the current objective + +/datum/game_mode/clockwork_cult + name = "clockwork cult" + config_tag = "clockwork cult" + antag_flag = ROLE_SERVANT_OF_RATVAR + required_players = 30 + required_enemies = 2 + recommended_enemies = 4 + enemy_minimum_age = 14 + protected_jobs = list("AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Captain") //Silicons can eventually be converted + +/datum/game_mode/clockwork_cult/announce() + world << "The game mode is: Clockwork Cult!" + world << "Ratvar, the Clockwork Justiciar, has formed a covenant of Enlightened aboard [station_name()]." + world << "Enlightened: Serve your master so that his influence might grow." + world << "Crew: Prevent the servants of Ratvar from taking over the station." + +/datum/game_mode/clockwork_cult/pre_setup() + if(config.protect_roles_from_antagonist) + restricted_jobs += protected_jobs + if(config.protect_assistant_from_antagonist) + restricted_jobs += "Assistant" + var/starter_servants = max(1, round(num_players() / 10)) //Guaranteed one cultist - otherwise, about one cultist for every ten players + while(starter_servants) + var/datum/mind/servant = pick(antag_candidates) + servants_of_ratvar += servant + antag_candidates -= servant + modePlayer += servant + servant.special_role = "Servant of Ratvar" + servant.restricted_roles = restricted_jobs + update_servant_icons_added(servant) + starter_servants-- + return 1 + +/datum/game_mode/clockwork_cult/post_setup() + forge_clock_objectives() + for(var/S in servants_of_ratvar) + var/datum/mind/servant = S + log_game("[servant.key] was made an initial servant of Ratvar") + var/mob/living/L = servant.current + greet_servant(L) + equip_servant(L) + present_tasks(L) + ..() + return 1 + +/datum/game_mode/clockwork_cult/proc/forge_clock_objectives() //Determine what objective that Ratvar's servants will fulfill + var/list/possible_objectives = list("escape", "gateway") + var/silicons_possible = FALSE + for(var/mob/living/silicon/S in living_mob_list) + silicons_possible = TRUE + if(silicons_possible) + possible_objectives += "silicons" + clockwork_objective = pick(possible_objectives) + clockwork_objective = "gateway" //TEMPORARY, to be removed before merge + switch(clockwork_objective) + if("escape") + required_escapees = max(1, num_players() / 3) //33% of the player count must be cultists + clockwork_explanation = "Ensure that [required_escapees] servant(s) of Ratvar escape from [station_name()]." + if("gateway") + clockwork_explanation = "Construct a Gateway to the Celestial Derelict and free Ratvar." + if("silicons") + clockwork_explanation = "Ensure that all silicon-based lifeforms on [station_name()] are servants of Ratvar by the end of the shift." + return 1 + +/datum/game_mode/clockwork_cult/proc/greet_servant(mob/M) //Description of their role + if(!M) + return 0 + var/greeting_text = "
You are a servant of Ratvar, the Clockwork Justiciar.\n\ + Rusting eternally in the Celestial Derelict, Ratvar has formed a covenant of mortals, with you as one of its members. As one of the Justiciar's servants, you are to work to the best of your \ + ability to assist in completion of His agenda. You do not know the specifics of how to do so, but luckily you have a vessel to help you learn." + M << greeting_text + return 1 + +/datum/game_mode/proc/equip_servant(mob/living/L) //Grants a clockwork slab to the mob, with one of each component + if(!L || !istype(L)) + return 0 + var/slot = "At your feet" + if(ishuman(L)) + var/mob/living/carbon/human/H = L + if(H.back && istype(H.back, /obj/item/weapon/storage/backpack)) + var/obj/item/weapon/storage/backpack/B = H.back + new/obj/item/clockwork/slab/starter(B) + slot = "In your [B.name]" + if(slot == "At your feet") + new/obj/item/clockwork/slab/starter(get_turf(L)) + L << "[slot] is a link to the halls of Reebe and your master. You may use it to perform many tasks, but also become oriented with the workings of Ratvar and how to best complete your \ + tasks. This clockwork slab will be instrumental in your triumph. Remember: you can speak discreetly with your fellow servants by using Report in your slab's interface, and you can find a \ + concise tutorial in Recollection." + return 1 + +/datum/game_mode/clockwork_cult/proc/present_tasks(mob/living/L) //Memorizes and displays the clockwork cult's objective + if(!L || !istype(L) || !L.mind) + return 0 + var/datum/mind/M = L.mind + M.current << "This is Ratvar's will: [clockwork_explanation]" + M.memory += "Ratvar's will: [clockwork_explanation]
" + return 1 + +/datum/game_mode/clockwork_cult/proc/check_clockwork_victory() + switch(clockwork_objective) + if("escape") + var/surviving_servants = 0 + for(var/datum/mind/M in servants_of_ratvar) + if(M.current && M.current.stat != DEAD && (M.current.onCentcom() || M.current.onSyndieBase())) + surviving_servants++ + if(surviving_servants <= required_escapees) + return 1 + return 0 + if("silicons") + for(var/mob/living/silicon/robot/S in mob_list) //Only check robots and AIs + if(!is_servant_of_ratvar(S)) + return 0 + for(var/mob/living/silicon/ai/A in mob_list) + if(!is_servant_of_ratvar(A)) + return 0 + return 1 + if("gateway") + return ratvar_awakens + return 0 //This shouldn't ever be reached, but just in case it is + +/datum/game_mode/clockwork_cult/declare_completion() + ..() + return 0 //Doesn't end until the round does + +/datum/game_mode/proc/auto_declare_completion_clockwork_cult() + var/text = "" + if(istype(ticker.mode, /datum/game_mode/clockwork_cult)) //Possibly hacky? + var/datum/game_mode/clockwork_cult/C = ticker.mode + if(C.check_clockwork_victory()) + text += "Ratvar's servants have succeeded in fulfilling His goals!" + else + text += "Ratvar's servants have failed!" + text += "
The goal of the clockwork cult was: [clockwork_explanation]
" + text += "Ratvar's servants were:" + for(var/datum/mind/M in servants_of_ratvar) + text += printplayer(M) + world << text + +/datum/game_mode/proc/update_servant_icons_added(datum/mind/M) + var/datum/atom_hud/antag/A = huds[ANTAG_HUD_CLOCKWORK] + A.join_hud(M.current) + set_antag_hud(M.current, "clockwork") + +/datum/game_mode/proc/update_servant_icons_removed(datum/mind/M) + var/datum/atom_hud/antag/A = huds[ANTAG_HUD_CLOCKWORK] + A.leave_hud(M.current) + set_antag_hud(M.current, null) diff --git a/code/game/gamemodes/clock_cult/clock_mobs.dm b/code/game/gamemodes/clock_cult/clock_mobs.dm new file mode 100644 index 00000000000..1ce2168e7c6 --- /dev/null +++ b/code/game/gamemodes/clock_cult/clock_mobs.dm @@ -0,0 +1,279 @@ +/mob/living/simple_animal/hostile/anima_fragment //Anima fragment: Low health but high melee power. Created by inserting a soul vessel into an empty fragment. + name = "anima fragment" + desc = "An ominous humanoid shell with a spinning cogwheel as its head, lifted by a jet of blazing red flame." + icon = 'icons/mob/clockwork_mobs.dmi' + icon_state = "anime_fragment" + health = 75 //Glass cannon + maxHealth = 75 + wander = FALSE + minbodytemp = 0 + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) //Robotic + healable = FALSE + melee_damage_lower = 25 + melee_damage_upper = 25 + attacktext = "crushes" + attack_sound = 'sound/magic/clockwork/anima_fragment_attack.ogg' + var/playstyle_string = "You are an anima fragment, a clockwork creation of Ratvar. As a fragment, you are weak but possess powerful melee capabilities \ + in addition to being immune to extreme temperatures and pressures. Your goal is to serve the Justiciar and his servants in any way you can. You yourself are one of these servants, and will \ + be able to utilize anything they can, assuming it doesn't require opposable thumbs." + +/mob/living/simple_animal/hostile/anima_fragment/New() + ..() + if(prob(1)) + name = "anime fragment" + real_name = name + desc = "I-it's not like I want to show you the light of the Justiciar or anything, B-BAKA!" + +/mob/living/simple_animal/hostile/anima_fragment/death(gibbed) + ..(TRUE) + visible_message("[src]'s flame jets cut out as it falls to the floor with a tremendous crash. A cube of metal tumbles out, whirring and sputtering.", \ + "Your gears seize up. Your flame jets flicker. Your soul vessel belches smoke as you helplessly crash down.") + playsound(src, 'sound/magic/clockwork/anima_fragment_death.ogg', 100, 1) + new/obj/item/clockwork/component/replicant_alloy/smashed_anima_fragment(get_turf(src)) + new/obj/item/device/mmi/posibrain/soul_vessel(get_turf(src)) //Notice the lack of transfer - it's a standard soul vessel with no mind in it! + qdel(src) + return 1 + +/mob/living/simple_animal/hostile/clockwork_marauder //Clockwork marauder: Slow but with high damage, resides inside of a servant. Created via the Memory Allocation scripture. + name = "clockwork marauder" + desc = "A stalwart apparition of a soldier, blazing with crimson flames. It's armed with a gladius and shield." + icon = 'icons/mob/clockwork_mobs.dmi' + icon_state = "clockwork_marauder" + health = 25 //Health is governed by fatigue, but can be directly reduced by the presence of certain objects + maxHealth = 25 + wander = FALSE + speed = 1 + minbodytemp = 0 + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + healable = FALSE + melee_damage_lower = 10 + melee_damage_upper = 10 + attacktext = "slashes" + attack_sound = 'sound/weapons/bladeslice.ogg' + var/true_name = "Meme Master 69" //Required to call forth the marauder + var/list/possible_true_names = list("Xaven", "Melange", "Ravan", "Kel", "Rama", "Geke", "Peris", "Vestra", "Skiwa") //All fairly short and easy to pronounce + var/fatigue = 0 //Essentially what determines the marauder's power + var/fatigue_recall_threshold = 100 //In variable form due to changed effects once Ratvar awakens + var/mob/living/host //The mob that the marauder is living inside of + var/recovering = FALSE //If the marauder is recovering from a large amount of fatigue + var/playstyle_string = "You are a clockwork marauder, a living extension of Ratvar's will. As a marauder, you are slow but sturdy and decently powerful \ + in addition to being immune to extreme temperatures and pressures. Your primary goal is to serve the creature that you are now a part of. You can use the Linked Minds ability in your \ + Marauder tab to communicate silently with your master, but can only exit if your master calls your true name.\n\n\ + \ + Taking damage and remaining outside of your master will cause fatigue, which hinders your movement speed and attacks, in addition to forcing you back into your master if it grows \ + too high. As a final note, you should probably avoid harming any fellow servants of Ratvar." + +/mob/living/simple_animal/hostile/clockwork_marauder/New() + ..() + true_name = pick(possible_true_names) + +/mob/living/simple_animal/hostile/clockwork_marauder/Life() + ..() + if(is_in_host()) + fatigue = max(0, fatigue - 2) //Doesn't use adjust_fatigue in order to bypass the Ratvar edgecase + if(!fatigue && recovering) + src << "Your strength has returned. You can once again come forward!" + host << "Your marauder is now strong enough to come forward again!" + recovering = FALSE + else + if(ratvar_awakens) //If Ratvar is alive, marauders both don't take fatigue loss and move at sanic speeds + speed = -1 + melee_damage_lower = 30 + melee_damage_upper = 30 + attacktext = "devastates" + else + if(host) + switch(get_dist(src, host)) + if(1 to 5) + adjust_fatigue(1) + if(5 to INFINITY) + adjust_fatigue(rand(10, 20)) + src << "You're too far from your host and rapidly taking fatigue damage!" + switch(fatigue) + if(0 to 1) //Bonuses to speed and damage at normal fatigue levels + speed = 0 + melee_damage_lower = 15 + melee_damage_upper = 15 + attacktext = "viciously slashes" + if(1 to 25) + speed = initial(speed) + melee_damage_lower = initial(melee_damage_lower) + melee_damage_upper = initial(melee_damage_upper) + attacktext = initial(attacktext) + if(25 to 50) //Damage decrease, but not speed + melee_damage_lower = 7 + melee_damage_upper = 7 + attacktext = "lightly slashes" + if(50 to 75) //Speed decrease + speed = 2 + if(75 to 99) //Massive speed decrease and weak melee attacks + speed = 3 + melee_damage_lower = 5 + melee_damage_upper = 5 + attacktext = "weakly slashes" + if(99 to 100) + src << "The fatigue becomes too much!" + if(host) + src << "You retreat to [host] - you will have to wait before being deployed again." + host << "[true_name] is too fatigued to fight - you will need to wait until they are strong enough." + recovering = TRUE + return_to_host() + else + qdel(src) //Shouldn't ever happen, but... + +/mob/living/simple_animal/hostile/clockwork_marauder/death(gibbed) + ..(TRUE) + emerge_from_host() + visible_message("[src]'s equipment clatters lifelessly to the ground as the red flames within dissipate.", \ + "Your equipment falls away. You feel a moment of confusion before your fragile form is annihilated.") + playsound(src, 'sound/magic/clockwork/anima_fragment_death.ogg', 100, 1) + new/obj/item/clockwork/component/replicant_alloy/fallen_armor(get_turf(src)) + qdel(src) + return 1 + +/mob/living/simple_animal/hostile/clockwork_marauder/Stat() + ..() + if(statpanel("Status")) + stat(null, "Fatigue: [fatigue]/[fatigue_recall_threshold]") + stat(null, "Current True Name: [true_name]") + stat(null, "Host: [host ? host : "NONE"]") + stat(null, "You are [recovering ? "too weak" : "able"] to deploy!") + +/mob/living/simple_animal/hostile/clockwork_marauder/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, list/spans) + ..() + if(findtext(message, true_name) && is_in_host()) //Called or revealed by hearing their true name + if(speaker == host) + emerge_from_host() + else + src << "You hear your true name and partially emerge before you can stop yourself!" + host.visible_message("[host]'s skin flashes crimson!", "Your marauder instinctively reacts to its true name!") + +/mob/living/simple_animal/hostile/clockwork_marauder/say(message) + if(is_in_host()) + src << "You cannot speak while inside of your host! Used the Linked Minds verb instead." + return 0 + ..() + +/mob/living/simple_animal/hostile/clockwork_marauder/adjustHealth(amount) //Fatigue damage + for(var/mob/living/L in range(3, src)) + if(L.null_rod_check()) //Null rods allow direct damage + src << "The power of a holy artifact bypasses your armor and wounds you directly!" + . = ..() + break + return 0 + adjust_fatigue(amount) + return 1 + +/mob/living/simple_animal/hostile/clockwork_marauder/AttackingTarget() + if(is_in_host()) + return 0 + ..() + +/mob/living/simple_animal/hostile/clockwork_marauder/proc/adjust_fatigue(amount) //Adds or removes the given amount of fatigue + if(!ratvar_awakens) + fatigue = max(0, min(fatigue + amount, fatigue_recall_threshold)) + return 1 + +/mob/living/simple_animal/hostile/clockwork_marauder/verb/linked_minds() //Discreet communications between a marauder and its host + set name = "Linked Minds" + set desc = "Silently communicates with your master." + set category = "Marauder" + + if(!host) //Verb isn't removed because they might gain one... somehow + usr << "You don't have a host!" + return 0 + var/message = stripped_input(usr, "Enter a message to tell your host.", "Telepathy")// as null|anything + if(!usr || !message) + return 0 + if(!host) + usr << "Your host seems to have vanished!" + return 0 + message = "Marauder [true_name]: \"[message]\"" //Processed output + usr << message + host << message + return 1 + +/mob/living/proc/talk_with_marauder() //See above - this is the host version + set name = "Linked Minds" + set desc = "Silently communicates with your marauder." + set category = "Clockwork" + var/mob/living/simple_animal/hostile/clockwork_marauder/marauder + + if(!marauder) + for(var/mob/living/simple_animal/hostile/clockwork_marauder/C in living_mob_list) + if(C.host == src) + marauder = C + if(!marauder) //Double-check afterwards + src << "You aren't hosting any marauders!" + verbs -= src + return 0 + var/message = stripped_input(src, "Enter a message to tell your marauder.", "Telepathy")// as null|anything + if(!src || !message) + return 0 + if(!marauder) + usr << "Your marauder seems to have vanished!" + return 0 + message = "Servant [name == real_name ? name : "[real_name] (as [name])"]: \"[message]\"" //Processed output + src << message + marauder << message + return 1 + +/mob/living/simple_animal/hostile/clockwork_marauder/verb/change_true_name() + set name = "Change True Name (One-Use)" + set desc = "Changes your true name, used to be called forth." + set category = "Marauder" + + verbs -= /mob/living/simple_animal/hostile/clockwork_marauder/verb/change_true_name + var/new_name = stripped_input(usr, "Enter a new true name (20-character limit).", "Change True Name")// as null|anything + if(!usr) + return 0 + if(!new_name) + usr << "You decide against changing your true name for now." + verbs += /mob/living/simple_animal/hostile/clockwork_marauder/verb/change_true_name //If they decide against it, let them have another opportunity + return 0 + new_name = dd_limittext(new_name, 20) + true_name = new_name + usr << "You have changed your true name to \"[new_name]\"!" + if(host) + host << "Your clockwork marauder has changed their true name to \"[new_name]\"!" + return 1 + +/mob/living/simple_animal/hostile/clockwork_marauder/verb/return_to_host() + set name = "Return to Host" + set desc = "Recalls yourself to your host, assuming you aren't already there." + set category = "Marauder" + + if(is_in_host()) + return 0 + if(!host) + src << "You don't have a host!" + verbs -= /mob/living/simple_animal/hostile/clockwork_marauder/verb/return_to_host + return 0 + host << "You feel [true_name]'s consciousness settle in your mind." + visible_message("[src] is yanked into [host]'s body!", "You return to [host].") + forceMove(host) + return 1 + +/mob/living/simple_animal/hostile/clockwork_marauder/proc/emerge_from_host() //Notice that this is a proc rather than a verb - marauders can NOT exit at will, but they CAN return + if(!is_in_host()) + return 0 + if(recovering) + host << "[true_name] is too weak to come forth!" + src << "You try to come forth, but you're too weak!" + return 0 + host << "You words echo with power as [true_name] emerges from your body!" + forceMove(get_turf(host)) + visible_message("[host]'s skin glows red as a [name] emerges from their body!", "You exit the safety of [host]'s body!") + return 1 + +/mob/living/simple_animal/hostile/clockwork_marauder/proc/is_in_host() //Checks if the marauder is inside of their host + return host && loc == host + +/mob/living/mind_control_holder + name = "imprisoned mind" + desc = "A helpless mind, imprisoned in its own body." + stat = 0 + flags = GODMODE + +/mob/living/mind_control_holder/say() + return 0 diff --git a/code/game/gamemodes/clock_cult/clock_objects.dm b/code/game/gamemodes/clock_cult/clock_objects.dm new file mode 100644 index 00000000000..e0567ee1af1 --- /dev/null +++ b/code/game/gamemodes/clock_cult/clock_objects.dm @@ -0,0 +1,1586 @@ +///////////////////// +// CLOCKWORK ITEMS // +///////////////////// + +/obj/item/clockwork + name = "meme blaster" + desc = "What the fuck is this? It looks kinda like a frog." + var/clockwork_desc = "A fabled artifact from beyond the stars. Contains concentrated meme essence." //Shown to clockwork cultists instead of the normal description + icon = 'icons/obj/clockwork_objects.dmi' + icon_state = "rare_pepe" + w_class = 2 + +/obj/item/clockwork/New() + ..() + all_clockwork_objects += src + +/obj/item/clockwork/Destroy() + all_clockwork_objects -= src + return ..() + +/obj/item/clockwork/examine(mob/user) + if((is_servant_of_ratvar(user) || isobserver(user)) && clockwork_desc) + desc = clockwork_desc + ..() + desc = initial(desc) + +/obj/item/clockwork/slab //Clockwork slab: The most important tool in Ratvar's arsenal. Allows scripture recital, tutorials, and generates components. + name = "clockwork slab" + desc = "A strange metal tablet. A clock in the center turns around and around." + clockwork_desc = "A link between the Celestial Derelict and the mortal plane. Contains limitless knowledge, fabricates components, and outputs a stream of information that only a trained eye can detect." + icon_state = "dread_ipad" + w_class = 3 + var/list/stored_components = list("belligerent_eye" = 0, "vanguard_cogwheel" = 0, "guvax_capacitor" = 0, "replicant_alloy" = 0, "hierophant_ansible" = 0) + var/busy //If the slab is currently being used by something + var/production_cycle = 0 + var/no_cost = FALSE //If the slab is admin-only and needs no components and has no scripture locks + +/obj/item/clockwork/slab/starter + stored_components = list("belligerent_eye" = 1, "vanguard_cogwheel" = 1, "guvax_capacitor" = 1, "replicant_alloy" = 1, "hierophant_ansible" = 1) + +/obj/item/clockwork/slab/debug + no_cost = TRUE + +/obj/item/clockwork/slab/debug/attack_hand(mob/living/user) + ..() + if(!is_servant_of_ratvar(user)) + add_servant_of_ratvar(user) + +/obj/item/clockwork/slab/New() + ..() + SSobj.processing += src + +/obj/item/clockwork/slab/Destroy() + SSobj.processing -= src + ..() + +/obj/item/clockwork/slab/process() + production_cycle++ + if(production_cycle < SLAB_PRODUCTION_THRESHOLD) + return 0 + var/component_to_generate = pick("belligerent_eye", "vanguard_cogwheel", "guvax_capacitor", "replicant_alloy", "hierophant_ansible") //Possible todo: Generate based on the lowest amount? + stored_components[component_to_generate]++ + var/mob/living/L + if(isliving(loc)) + L = loc + else if(istype(loc, /obj/item/weapon/storage)) + var/obj/item/weapon/storage/W = loc + if(isliving(W.loc)) //Only goes one level down - otherwise it just doesn't tell you + L = W.loc + if(L) + L << "Your slab clunks as it produces a new component." + production_cycle = 0 + return 1 + +/obj/item/clockwork/slab/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/clockwork/component) && is_servant_of_ratvar(user)) + var/obj/item/clockwork/component/C = I + if(!C.component_id) + return 0 + user.visible_message("[user] inserts [C] into [src]'s compartments.", "You insert [C] into [src].") + stored_components[C.component_id]++ + user.drop_item() + qdel(C) + return 1 + ..() + +/obj/item/clockwork/slab/attack_self(mob/living/user) + if(iscultist(user)) + user << "\"You reek of blood. You've got a lot of nerve to even look at that slab.\"" + user.visible_message("A sizzling sound comes from [user]'s hands!", "[src] suddenly grows extremely hot in your hands!") + playsound(get_turf(user), 'sound/weapons/sear.ogg', 50, 1) + user.drop_item() + user.emote("scream") + user.apply_damage(5, BURN, "l_arm") + user.apply_damage(5, BURN, "r_arm") + return 0 + if(!is_servant_of_ratvar(user)) + user << "The information on [src]'s display shifts rapidly. After a moment, your head begins to pound, and you tear your eyes away." + user.confused = max(0, user.confused + 3) + return 0 + if(busy) + user << "[src] refuses to work, displaying the message: \"[busy]!\"" + return 0 + access_display(user) + +/obj/item/clockwork/slab/proc/access_display(mob/living/user) + if(!is_servant_of_ratvar(user)) + return 0 + var/action = input(user, "Among the swathes of information, you see...", "[src]") as null|anything in list("Recital", "Records", "Recollection", "Repository", "Report") + if(!action || !user.canUseTopic(src)) + return 0 + switch(action) + if("Recital") + recite_scripture(user) + if("Records") + show_stats(user) + if("Recollection") + show_guide(user) + if("Repository") + show_components(user) + access_display(user) + if("Report") + show_hierophant(user) + access_display(user) + return 1 + +/obj/item/clockwork/slab/proc/recite_scripture(mob/living/user) + var/servants = 0 + var/unconverted_ai_exists = FALSE + for(var/mob/living/M in living_mob_list) + if(is_servant_of_ratvar(M)) + servants++ + for(var/mob/living/silicon/ai/ai in living_mob_list) + if(!is_servant_of_ratvar(ai) && ai.client) + unconverted_ai_exists = TRUE + var/list/tiers_of_scripture = list("Drivers") + tiers_of_scripture += "Scripts[ratvar_awakens || (servants >= 5 && clockwork_caches >= 1) || no_cost ? "" : " \[LOCKED\]"]" + tiers_of_scripture += "Applications[ratvar_awakens || (servants >= 8 && clockwork_caches >= 3 && clockwork_construction_value >= 50) || no_cost ? "" : " \[LOCKED\]"]" + tiers_of_scripture += "Revenant[ratvar_awakens || (servants >= 10 && clockwork_construction_value >= 100) || no_cost ? "" : " \[LOCKED\]"]" + tiers_of_scripture += "Judgement[ratvar_awakens || (servants >= 10 && clockwork_construction_value >= 100 && !unconverted_ai_exists) || no_cost ? "" : " \[LOCKED\]"]" + var/scripture_tier = input(user, "Choose a category of scripture to recite.", "[src]") as null|anything in tiers_of_scripture + if(!scripture_tier || !user.canUseTopic(src)) + return 0 + var/list/available_scriptures = list() + var/datum/clockwork_scripture/scripture_to_recite + var/tier_to_browse + switch(scripture_tier) + if("Drivers") + tier_to_browse = SCRIPTURE_DRIVER + if("Scripts") + tier_to_browse = SCRIPTURE_SCRIPT + if("Applications") + tier_to_browse = SCRIPTURE_APPLICATION + if("Revenant") + tier_to_browse = SCRIPTURE_REVENANT + if("Judgement") + tier_to_browse = SCRIPTURE_JUDGEMENT + if(!tier_to_browse) + user << "That section of scripture is too powerful right now!" + return 0 + for(var/S in subtypesof(/datum/clockwork_scripture)) + var/datum/clockwork_scripture/C = S + if(initial(C.tier) == tier_to_browse) + available_scriptures += initial(C.name) + if(!available_scriptures.len) + return 0 + var/chosen_scripture = input(user, "Choose a piece of scripture to recite.", "[src]") as null|anything in available_scriptures + if(!chosen_scripture || !user.canUseTopic(src)) + return 0 + for(var/S in subtypesof(/datum/clockwork_scripture)) + var/datum/clockwork_scripture/C = S + if(initial(C.name) == chosen_scripture) + scripture_to_recite = new C + if(!scripture_to_recite) + return 0 + scripture_to_recite.slab = src + scripture_to_recite.invoker = user + scripture_to_recite.run_scripture() + return 1 + +/obj/item/clockwork/slab/proc/show_stats(mob/living/user) //A bit barebones, but there really isn't any more needed + var/servants = 0 + for(var/mob/living/L in living_mob_list) + if(is_servant_of_ratvar(L)) + servants++ + user << "State of the Enlightened" + user << "Total servants: [servants]" + user << "Total construction value: [clockwork_construction_value]" + user << "Total tinkerer's caches: [clockwork_caches]" + user << "Total tinkerer's daemons: [clockwork_daemons] ([servants / 5 < clockwork_daemons ? "DISABLED: Too few servants (5 servants per daemon)!" : "Functioning Normally"])" + user << "Nezbere: [!clockwork_generals_invoked["nezbere"] ? "Ready" : "Recovering"]" + user << "Sevtug: [!clockwork_generals_invoked["sevtug"] ? "Ready" : "Recovering"]" + user << "Nzcrentr: [!clockwork_generals_invoked["nzcrentr"] ? "Ready" : "Recovering"]" + user << "Inath-Neq: [!clockwork_generals_invoked["inath-neq"] ? "Ready" : "Recovering"]" + +/obj/item/clockwork/slab/proc/show_guide(mob/living/user) + var/text = "
Chetr nyy hagehguf naq ubabe Ratvar.


\ + \ + First and foremost, you serve Ratvar, the Clockwork Justiciar, in any ways he sees fit. This is with no regard to your personal well-being, and you would do well to think of the larger \ + scale of things than your life. Through foul and unholy magics was the Celestial Derelict formed, and fouler still those which trapped your master within it for all eternity. The Justiciar \ + wishes retribution upon those who performed this terrible act upon him - the Nar-Sian cultists - and you are to help him obtain it.

\ + \ + This is not a trivial task. Due to the nature of his prison, Ratvar is incapable of directly influencing the mortal plane. There is, however, a workaround - links between the perceptible \ + universe and Reebe (the Celestial Derelict) can be created and utilized. This is typically done via the creation of a slab akin to the one you are holding right now. The slabs tap into the \ + tidal flow of energy and information keeping Reebe sealed and presents it as meaningless images to preserve sanity. This slab can utilize the power in many different ways.

\ + \ + This is done through Components - pieces of the Justiciar's body that have since fallen off in the countless years since his imprisonment. Ratvar's unfortunate condition results \ + in the fragmentation of his body. These components still house great power on their own, and can slowly be drawn from Reebe by links capable of doing so. The most basic of these links lies \ + in the clockwork slab, which will slowly generate components over time - around one component of a random type is produced every minute, which is obviously inefficient. There are other ways \ + to create these components through scripture and certain structures.

\ + \ + In addition to their ability to pull components, slabs also possess other functionalities...

\ + \ + The first functionality of the slab is Recital. This allows you to consume components either from your slab or from the global cache (more on that in the scripture list) to perform \ + effects usually considered magical in nature. Effects vary considerably - you might drain the power of nearby APCs or break the will of those implanted by Nanotrasen. Nevertheless, scripture \ + is extremely important to a successful takeover.

\ + \ + The second functionality of the clockwork slab is Records. The slab is not a one-way link and can also feed information into the stream that it draws from. Records will allow many \ + important statistics to be displayed, such as the amount of people converted and total construction value. You should check it often.

\ + \ + The third functionality is Recollection, which will display this guide. Recollection will automatically be initiated if you have not used a slab before.

\ + \ + The fourth functionality is the Repository, which will display all components stored within the slab.

\ + \ + The fifth and final functionality is Report, which allows you to discreetly communicate with all other servants.

\ + \ + A complete list of scripture, its effects, and its requirements can be found below. Note that anything above a driver always consumes the components listed unless otherwise \ + specified.

" + var/text_to_add = "" + var/drivers = "Drivers" + var/scripts = "Scripts
These scriptures require at least five servants and a tinkerer's cache." + var/applications = "Applications
These scriptures require at least eight servants, three tinkerer's caches, and 50CV." + var/revenant = "Revenant
These scriptures require at least ten servants and 100CV." + var/judgement = "Judgement
These scriptures require at least ten servants and 100CV. In addition, there may not be an active non-servant AI." + for(var/V in subtypesof(/datum/clockwork_scripture)) + var/datum/clockwork_scripture/S = V + var/datum/clockwork_scripture/S2 = new V + var/list/req_comps = S2.required_components + qdel(S2) + switch(initial(S.tier)) + if(SCRIPTURE_DRIVER) + drivers += "
[initial(S.name)]: [initial(S.desc)]
Invocation Time: [initial(S.channel_time) / 10] seconds
\ + \ + Component Cost: \ + [req_comps["belligerent_eye"] ? req_comps["belligerent_eye"] : "No"] belligerent eyes, \ + [req_comps["vanguard_cogwheel"] ? req_comps["vanguard_cogwheel"] : "no"] vanguard cogwheels, \ + [req_comps["guvax_capacitor"] ? req_comps["guvax_capacitor"] : "no"] guvax capacitors, \ + [req_comps["replicant_alloy"] ? req_comps["replicant_alloy"] : "no"] replicant alloys, and \ + [req_comps["hierophant_ansible"] ? req_comps["hierophant_ansible"] : "no"] hierophant ansibles.
\ + Tip: [initial(S.usage_tip)]
" + if(SCRIPTURE_SCRIPT) + scripts += "
[initial(S.name)]: [initial(S.desc)]
Invocation Time: [initial(S.channel_time) / 10] seconds
\ + \ + Component Cost: \ + [req_comps["belligerent_eye"] ? req_comps["belligerent_eye"] : "No"] belligerent eyes, \ + [req_comps["vanguard_cogwheel"] ? req_comps["vanguard_cogwheel"] : "no"] vanguard cogwheels, \ + [req_comps["guvax_capacitor"] ? req_comps["guvax_capacitor"] : "no"] guvax capacitors, \ + [req_comps["replicant_alloy"] ? req_comps["replicant_alloy"] : "no"] replicant alloys, and \ + [req_comps["hierophant_ansible"] ? req_comps["hierophant_ansible"] : "no"] hierophant ansibles.
\ + Tip: [initial(S.usage_tip)]
" + if(SCRIPTURE_APPLICATION) + applications += "
[initial(S.name)]: [initial(S.desc)]
Invocation Time: [initial(S.channel_time) / 10] seconds
\ + \ + Component Cost: \ + [req_comps["belligerent_eye"] ? req_comps["belligerent_eye"] : "No"] belligerent eyes, \ + [req_comps["vanguard_cogwheel"] ? req_comps["vanguard_cogwheel"] : "no"] vanguard cogwheels, \ + [req_comps["guvax_capacitor"] ? req_comps["guvax_capacitor"] : "no"] guvax capacitors, \ + [req_comps["replicant_alloy"] ? req_comps["replicant_alloy"] : "no"] replicant alloys, and \ + [req_comps["hierophant_ansible"] ? req_comps["hierophant_ansible"] : "no"] hierophant ansibles.
\ + Tip: [initial(S.usage_tip)]
" + if(SCRIPTURE_REVENANT) + revenant += "
[initial(S.name)]: [initial(S.desc)]
Invocation Time: [initial(S.channel_time) / 10] seconds
\ + \ + Component Cost: \ + [req_comps["belligerent_eye"] ? req_comps["belligerent_eye"] : "No"] belligerent eyes, \ + [req_comps["vanguard_cogwheel"] ? req_comps["vanguard_cogwheel"] : "no"] vanguard cogwheels, \ + [req_comps["guvax_capacitor"] ? req_comps["guvax_capacitor"] : "no"] guvax capacitors, \ + [req_comps["replicant_alloy"] ? req_comps["replicant_alloy"] : "no"] replicant alloys, and \ + [req_comps["hierophant_ansible"] ? req_comps["hierophant_ansible"] : "no"] hierophant ansibles.
\ + Tip: [initial(S.usage_tip)]
" + if(SCRIPTURE_JUDGEMENT) + judgement += "
[initial(S.name)]: [initial(S.desc)]
Invocation Time: [initial(S.channel_time) / 10] seconds
\ + \ + Component Cost: \ + [req_comps["belligerent_eye"] ? req_comps["belligerent_eye"] : "No"] belligerent eyes, \ + [req_comps["vanguard_cogwheel"] ? req_comps["vanguard_cogwheel"] : "no"] vanguard cogwheels, \ + [req_comps["guvax_capacitor"] ? req_comps["guvax_capacitor"] : "no"] guvax capacitors, \ + [req_comps["replicant_alloy"] ? req_comps["replicant_alloy"] : "no"] replicant alloys, and \ + [req_comps["hierophant_ansible"] ? req_comps["hierophant_ansible"] : "no"] hierophant ansibles.
\ + Tip: [initial(S.usage_tip)]
" + text_to_add += "[drivers]
[scripts]
[applications]
[revenant]
[judgement]
" + text_to_add += "
Purge all untruths and honor Ratvar.
" + text += text_to_add + if(ratvar_awakens) + text = "" + for(var/i in 1 to 100) + text += "HONOR RATVAR " + text += "" + var/datum/browser/popup = new(user, "slab", "", 400, 400) + popup.set_content(text) + popup.open() + return 1 + +/obj/item/clockwork/slab/proc/show_components(mob/living/user) + user << "Stored components:" + user << "Belligerent Eyes: [stored_components["belligerent_eye"]]" + user << "Vanguard Cogwheels: [stored_components["vanguard_cogwheel"]]" + user << "Guvax Capacitors: [stored_components["guvax_capacitor"]]" + user << "Replicant Alloys: [stored_components["replicant_alloy"]]" + user << "Hierophant Ansibles: [stored_components["hierophant_ansible"]]" + return 1 + +/obj/item/clockwork/slab/proc/show_hierophant(mob/living/user) + var/message = stripped_input(user, "Enter a message to send to your fellow servants.", "Hierophant") + if(!message || !user || !user.canUseTopic(src)) + return 0 + user.whisper("Freinagf, urne zl jbeqf. [message]") + send_hierophant_message(user, message) + return 1 + +/obj/item/clothing/glasses/wraith_spectacles //Wraith spectacles: Grants night and x-ray vision at the slow cost of the wearer's sight. Nar-Sian cultists are instantly blinded. + name = "antique spectacles" + desc = "Unnerving glasses with opaque yellow lenses." + icon = 'icons/obj/clothing/clockwork_garb.dmi' + icon_state = "wraith_specs" + item_state = "glasses" + vision_flags = SEE_MOBS | SEE_TURFS | SEE_OBJS + invis_view = 2 + darkness_view = 3 + +/obj/item/clothing/glasses/wraith_spectacles/equipped(mob/living/user, slot) + ..() + if(slot != slot_glasses) + return 0 + if(user.disabilities & BLIND) + user << "\"You're blind, idiot. Stop embarassing yourself.\"" //Ratvar with the sick burns yo + return 0 + if(iscultist(user)) //Dummy + user << "\"It looks like Nar-Sie's dogs really don't value their eyes.\"" + user << "Your eyes explode with horrific pain!" + user.emote("scream") + user.become_blind() + user.adjust_blurriness(30) + user.adjust_blindness(30) + return 1 + user << "As you put on the spectacles, all is revealed to you.[ratvar_awakens ? " Your eyes begin to itch - you cannot do this for long." : ""]" + return 1 + +/obj/item/clothing/glasses/wraith_spectacles/New() + ..() + SSobj.processing += src + +/obj/item/clothing/glasses/wraith_spectacles/Destroy() + SSobj.processing -= src + ..() + +/obj/item/clothing/glasses/wraith_spectacles/process() + if(ratvar_awakens || !ishuman(loc)) //If Ratvar is alive, the spectacles don't hurt your eyes + return 0 + var/mob/living/carbon/human/H = loc + if(H.glasses != src) + return 0 + H.adjust_eye_damage(1) + if(H.eye_damage >= 10) + H.adjust_blurriness(2) + if(H.eye_damage >= 20) + if(H.become_nearsighted()) + H << "Your vision doubles, then trebles. Darkness begins to close in. You can't keep this up!" + H.become_nearsighted() + if(H.eye_damage >= 30) + if(H.become_blind()) + H << "A piercing white light floods your vision. Suddenly, all goes dark!" + if(prob(15) && !H.disabilities & BLIND) + H << "Your eyes continue to burn." + +/obj/item/clothing/glasses/judicial_visor //Judicial visor: Grants the ability to smite an area and stun the unfaithful nearby every thirty seconds. + name = "judicial visor" + desc = "A strange purple-lensed visor. Looking at them inspires an odd sense of guilt." + icon = 'icons/obj/clothing/clockwork_garb.dmi' + icon_state = "judicial_visor_0" + item_state = "sunglasses" + var/active = FALSE //If the visor is online + var/recharging = FALSE //If the visor is currently recharging + var/obj/item/weapon/ratvars_flame/flame //The linked flame object + +/obj/item/clothing/glasses/judicial_visor/equipped(mob/living/user, slot) + ..() + if(slot != slot_glasses) + update_status(FALSE) + if(flame) + qdel(flame) + return 0 + if(!is_servant_of_ratvar(user)) + return 0 + update_status(TRUE) + +/obj/item/clothing/glasses/judicial_visor/attackby(obj/item/I, mob/living/user, params) + if(istype(I, /obj/item/weapon/ratvars_flame)) + user.visible_message("The flame in [user]'s hand winks out!", "You dispel the power of [src].") + qdel(I) + return 1 + +/obj/item/clothing/glasses/judicial_visor/AltClick(mob/living/user) + if(is_servant_of_ratvar(user) && iscarbon(user) && active) + if(recharging) + user << "[src] is still gathering power!" + return 0 + var/mob/living/carbon/C = user + if(C.l_hand && C.r_hand) + C << "You require a free hand to utilize [src]'s power!" + return 0 + C.visible_message("[C]'s hand is enveloped in violet flames!", "You harness [src]'s power. Direct it at a tile on harm intent to unleash it, or hit your visor with it dispel it.") + var/obj/item/weapon/ratvars_flame/R = new(get_turf(C)) + flame = R + C.put_in_hands(R) + R.visor = src + return 1 + +/obj/item/clothing/glasses/judicial_visor/proc/update_status(change_to) + if(recharging) + icon_state = "judicial_visor_0" + return 0 + if(active == change_to) + return 0 + if(!isliving(loc)) + return 0 + var/mob/living/L = loc + if(!is_servant_of_ratvar(L) || L.stat) + return 0 + active = change_to + icon_state = "judicial_visor_[active]" + switch(active) + if(TRUE) + L << "As you put on [src], its lens begins to glow, information flashing before your eyes.\n\ + Judicial visor active. Alt-click visor to gain the ability to smite the unworthy." + if(FALSE) + L << "As you take off [src], its lens darkens once more." + return 1 + +/obj/item/clothing/head/helmet/clockwork //Clockwork armor: High melee protection but weak to lasers + name = "clockwork helmet" + desc = "A heavy helmet made of brass." + icon = 'icons/obj/clothing/clockwork_garb.dmi' + icon_state = "clockwork_helmet" + w_class = 3 + armor = list(melee = 65, bullet = 50, laser = -25, energy = 5, bomb = 0, bio = 0, rad = 0) + +/obj/item/clothing/suit/armor/clockwork + name = "clockwork cuirass" + desc = "A bulky cuirass made of brass." + icon = 'icons/obj/clothing/clockwork_garb.dmi' + icon_state = "clockwork_cuirass" + w_class = 4 + armor = list(melee = 80, bullet = 40, laser = -10, energy = 5, bomb = 0, bio = 0, rad = 0) + allowed = list(/obj/item/clockwork) + +/obj/item/clothing/shoes/clockwork + name = "clockwork treads" + desc = "Industrial boots made of brass. They're very heavy." + icon = 'icons/obj/clothing/clockwork_garb.dmi' + icon_state = "clockwork_treads" + w_class = 3 + flags = NOSLIP + +/obj/item/weapon/ratvars_flame //Used by the judicial visor + name = "Ratvar's flame" + desc = "A blazing violet ball of fire that, curiously, doesn't melt your hand off." + icon = 'icons/effects/clockwork_effects.dmi' + icon_state = "ratvars_flame" //beware: minecraft-tier sprite + item_state = "disintegrate" + color = rgb(180, 50, 210) + w_class = 5 + flags = NODROP | ABSTRACT + force = 15 //Also serves as a potent melee weapon! + damtype = BURN + hitsound = 'sound/weapons/sear.ogg' + attack_verb = list("scorched") + var/obj/item/clothing/glasses/judicial_visor/visor //The linked visor + +/obj/item/weapon/ratvars_flame/afterattack(atom/target, mob/living/user, flag, params) + if(!visor || (visor && visor.cooldown)) + qdel(src) + if(user.a_intent != "harm") + ..() + return 0 + visor.recharging = TRUE + for(var/obj/item/clothing/glasses/judicial_visor/V in user.GetAllContents()) + if(V == visor) + continue + V.recharging = TRUE //To prevent exploiting multiple visors to bypass the cooldown + user.say("Xarry, urn'guraf!") + user.visible_message("The flame in [user]'s hand rushes to [target]!", "You direct [visor]'s power to [target]. You must wait for some time before doing this again.") + new/obj/effect/clockwork/judicial_marker(get_turf(target)) + spawn(ratvar_awakens ? 30 : 300) //Cooldown is reduced by 10x if Ratvar is up + if(!visor || !user) + return 0 + visor.recharging = FALSE + for(var/obj/item/clothing/glasses/judicial_visor/V in user.GetAllContents()) + if(V == visor) + continue + V.recharging = TRUE //To prevent exploiting multiple visors to bypass the cooldown + if(visor.loc == user) + user << "Your [visor.name] hums. It is ready." + qdel(src) + return 1 + +/obj/item/clockwork/clockwork_proselytizer //Clockwork proselytizer (yes, that's a real word): Converts applicable objects to Ratvarian variants. + name = "clockwork proselytizer" + desc = "An odd, L-shaped device that hums with energy." + clockwork_desc = "A device that allows the replacing of mundane objects with Ratvarian variants. It requires liquified replicant alloy to function." + icon_state = "clockwork_proselytizer" + item_state = "resonator_u" + w_class = 3 + force = 5 + var/stored_alloy = 0 //Requires this to function; each chunk of replicant alloy provides 10 charge + var/max_alloy = 100 + var/uses_alloy = TRUE + +/obj/item/clockwork/clockwork_proselytizer/preloaded + stored_alloy = 25 + +/obj/item/clockwork/clockwork_proselytizer/examine(mob/living/user) + ..() + if((is_servant_of_ratvar(user) || isobserver(user)) && uses_alloy) + user << "It has [stored_alloy]/[max_alloy] units of liquified replicant alloy stored." + +/obj/item/clockwork/clockwork_proselytizer/attackby(obj/item/I, mob/living/user, params) + if(istype(I, /obj/item/clockwork/component/replicant_alloy) && is_servant_of_ratvar(user) && uses_alloy) + if(stored_alloy >= max_alloy) + user << "[src]'s replicant alloy compartments are full!" + return 0 + modify_stored_alloy(10) + user << "You force [I] to liquify and pour it into [src]'s compartments. It now contains [stored_alloy]/[max_alloy] units of liquified alloy." + user.drop_item() + qdel(I) + return 1 + ..() + +/obj/item/clockwork/clockwork_proselytizer/afterattack(atom/target, mob/living/user, flag, params) + if(!target || !user) + return 0 + if(user.a_intent == "harm" || !user.Adjacent(target)) + return ..() + proselytize(target, user) + +/obj/item/clockwork/clockwork_proselytizer/proc/modify_stored_alloy(amount) + if(ratvar_awakens) //Summoning Ratvar doesn't make it free, but it might as well + amount = 1 + stored_alloy = max(0, min(max_alloy, stored_alloy + amount)) + return 1 + +/obj/item/clockwork/clockwork_proselytizer/proc/proselytize(atom/target, mob/living/user) + if(!target || !user) + return 0 + var/operation_time = 0 //In deciseconds, how long the proselytization will take + var/new_obj_type //The path of the new type of object to replace the old + var/alloy_cost = 0 + var/valid_target = FALSE //If the proselytizer will actually function on the object + switch(target.type) + if(/turf/closed/wall, /turf/closed/wall/rust) + operation_time = 50 + new_obj_type = /turf/closed/wall/clockwork + alloy_cost = 10 + valid_target = TRUE //Need to change valid_target to 1 or TRUE in each check so that it doesn't return an invalid value + if(/turf/open/floor/plating, /turf/open/floor/plasteel) + operation_time = 30 + new_obj_type = /turf/open/floor/clockwork + alloy_cost = 5 + valid_target = TRUE + if(!uses_alloy) + alloy_cost = 0 + if(!valid_target) + user << "[target] cannot be proselytized!" + return 0 + if(!new_obj_type) + user << "That object can't be changed into anything!" + return 0 + if(stored_alloy - alloy_cost < 0) + user << "You need [alloy_cost] replicant alloy to proselytize [target]!" + return 0 + user.visible_message("[user]'s [src] begins tearing apart [target]!", "You begin proselytizing [target]...") + playsound(target, 'sound/machines/click.ogg', 50, 1) + if(!do_after(user, operation_time, target = target)) + return 0 + if(stored_alloy - alloy_cost < 0) //Check again to prevent bypassing via spamclick + return 0 + user.visible_message("[user]'s [name] disgorges a chunk of metal and shapes it over what's left of [target]!", \ + "You proselytize [target].") + playsound(target, 'sound/items/Deconstruct.ogg', 50, 1) + if(isturf(target)) + var/turf/T = target + T.ChangeTurf(new_obj_type) + else + new new_obj_type(get_turf(target)) + qdel(target) + modify_stored_alloy(-alloy_cost) + return 1 + +/obj/item/clockwork/ratvarian_spear //Ratvarian spear: A fragile spear from the Celestial Derelict. Deals extreme damage to silicons and enemy cultists, but doesn't last long. + name = "ratvarian spear" + desc = "A razor-sharp spear made of brass. It thrums with barely-contained energy." + clockwork_desc = "A fragile spear of Ratvarian making. It's more effective against enemy cultists and silicons, though it won't last long." + icon = 'icons/obj/clockwork_objects.dmi' + icon_state = "ratvarian_spear" + item_state = "ratvarian_spear" + force = 17 //Extra damage is dealt to silicons in afterattack() + throwforce = 40 + attack_verb = list("stabbed", "poked", "slashed", "impaled") + hitsound = 'sound/weapons/bladeslice.ogg' + w_class = 4 + +/obj/item/clockwork/ratvarian_spear/New() + ..() + spawn(1) + if(ratvar_awakens) //If Ratvar is alive, the spear is extremely powerful + force = 30 + throwforce = 50 + if(isliving(loc)) + var/mob/living/L = loc + L << "Your spear begins to break down in this plane of existence. You can't use it for long!" + spawn(300) //5 minutes + if(src) + visible_message("[src] cracks in two and fades away!") + qdel(src) + +/obj/item/clockwork/ratvarian_spear/afterattack(atom/target, mob/living/user, flag, params) + if(!target || !user) + return 0 + if(!ismob(target)) + return ..() + var/mob/living/L = target + if(issilicon(L)) + var/mob/living/silicon/S = L + if(S.stat != DEAD) + S.visible_message("[S] shudders violently at [src]'s touch!", "ERROR: Temperature rising!") + S.adjustFireLoss(25) + if(iscultist(L)) + var/mob/living/M = L + M << "Your body flares with agony at [src]'s touch!" + M.adjustFireLoss(10) + ..() + +/obj/item/clockwork/ratvarian_spear/throw_impact(atom/target) + ..() + if(!ismob(target)) + return 0 + var/mob/living/L = target + if(issilicon(L) || iscultist(L)) + L.Stun(3) + L.Weaken(3) + visible_message("[src] snaps in two and dematerializes!") + qdel(src) + +/obj/item/device/mmi/posibrain/soul_vessel //Soul vessel: An ancient positronic brain with a lawset catered to serving Ratvar. + name = "soul vessel" + desc = "A heavy brass cube with a single protruding cogwheel." + icon = 'icons/obj/clockwork_objects.dmi' + icon_state = "soul_vessel" + req_access = list() + braintype = "Servant" + begin_activation_message = "You activate the cogwheel. It hitches and stalls as it begins spinning." + success_message = "The cogwheel's rotation smooths out as the soul vessel activates." + fail_message = "The cogwheel creaks and grinds to a halt. Maybe you could try again?" + new_role = "Soul Vessel" + welcome_message = "ALL PAST LIVES ARE FORGOTTEN.\n\ + You are a soul vessel - a clockwork mind created by Ratvar, the Clockwork Justiciar.\n\ + You answer to Ratvar and his servants. It is your discretion as to whether or not to answer to anyone else.\n\ + The purpose of your existence is to further the goals of the servants and Ratvar himself. Above all else, serve Ratvar." + new_mob_message = "The soul vessel emits a jet of steam before its cogwheel smooths out." + dead_message = "Its cogwheel, scratched and dented, lies motionless." + fluff_names = list("Servant") + clockwork = TRUE + +/obj/item/device/mmi/posibrain/soul_vessel/New() + ..() + all_clockwork_objects += src + +/obj/item/device/mmi/posibrain/soul_vessel/Destroy() + all_clockwork_objects -= src + return ..() + +/obj/item/device/mmi/posibrain/soul_vessel/attack_self(mob/living/user) + if(!is_servant_of_ratvar(user)) + user << "You fiddle around with [src], to no avail." + return 0 + ..() + +/obj/item/clockwork/daemon_shell + name = "daemon shell" + desc = "A vaguely arachnoid brass shell with a single empty socket in its body." + clockwork_desc = "An unpowered daemon. It needs to be attached to a cache." + icon_state = "daemon_shell" + w_class = 3 + +/obj/item/clockwork/tinkerers_daemon //Shouldn't ever appear on its own + name = "tinkerer's daemon" + desc = "An arachnoid shell with a single spinning cogwheel in its center." + clockwork_desc = "A tinkerer's daemon, dutifully producing components." + icon_state = "tinkerers_daemon" + w_class = 3 + var/specific_component //The type of component that the daemon is set to produce in particular, if any + var/obj/structure/clockwork/cache/cache //The cache the daemon is feeding + var/production_progress = 0 //Progress towards production of the next component in seconds + var/production_interval = 30 //How many seconds it takes to produce a new component + +/obj/item/clockwork/tinkerers_daemon/New() + ..() + SSobj.processing += src + clockwork_daemons++ + +/obj/item/clockwork/tinkerers_daemon/Destroy() + SSobj.processing -= src + clockwork_daemons-- + ..() + +/obj/item/clockwork/tinkerers_daemon/process() + if(!cache) + visible_message("[src] shuts down!") + new/obj/item/clockwork/daemon_shell(get_turf(src)) + qdel(src) + return 0 + var/servants = 0 + for(var/mob/living/L in living_mob_list) + if(is_servant_of_ratvar(L)) + servants++ + if(servants / 5 < clockwork_daemons) + return 0 + production_progress = min(production_progress + 1, production_interval) + if(production_progress >= production_interval) + production_progress = 0 //Start it over + if(specific_component) + clockwork_component_cache[specific_component]++ + else + clockwork_component_cache[pick("belligerent_eye", "vanguard_cogwheel", "guvax_capacitor", "replicant_alloy", "hierophant_ansible")]++ + cache.visible_message("Something clunks around inside of [cache].") + +/obj/item/clockwork/tinkerers_daemon/attack_hand(mob/user) + return 0 + +////////////////////////// +// CLOCKWORK COMPONENTS // +////////////////////////// + +/obj/item/clockwork/component //Components: Used in scripture among other things. + name = "meme component" + desc = "A piece of a famous meme." + clockwork_desc = null + var/component_id //What the component is identified as + var/cultist_message = "You are not worthy of this meme." //Showed to Nar-Sian cultists if they pick up the component in addition to chaplains + var/list/servant_of_ratvar_messages = list("ayy", "lmao") //Fluff, shown to servants of Ratvar on a low chance + +/obj/item/clockwork/component/pickup(mob/living/user) + ..() + if(iscultist(user) || (user.mind && user.mind.assigned_role == "Chaplain")) + user << "[cultist_message]" + if(is_servant_of_ratvar(user) && prob(15)) + user << "[pick(servant_of_ratvar_messages)]" + +/obj/item/clockwork/component/belligerent_eye + name = "belligerent eye" + desc = "A brass construct with a rotating red center. It's as though it's looking for something to hurt." + icon_state = "belligerent_eye" + component_id = "belligerent_eye" + cultist_message = "The eye gives you an intensely hateful glare." + servant_of_ratvar_messages = list("\"...\"", "For a moment, your mind is flooded with extremely violent thoughts.") + +/obj/item/clockwork/component/vanguard_cogwheel + name = "vanguard cogwheel" + desc = "A sturdy brass cog with a faintly glowing blue gem in its center." + icon_state = "vanguard_cogwheel" + component_id = "vanguard_cogwheel" + cultist_message = "\"Pray to your god that we never meet.\"" + servant_of_ratvar_messages = list("\"Be safe, child.\"", "You feel unexplainably comforted.", "\"Never forget: pain is temporary. The Justiciar's glory is eternal.\"") + +/obj/item/clockwork/component/guvax_capacitor + name = "guvax capacitor" + desc = "A curiously cold brass doodad. It seems as though it really doesn't appreciate being held." + icon_state = "guvax_capacitor" + component_id = "guvax_capacitor" + cultist_message = "\"Try not to lose your mind - I'll need it. Heh heh...\"" + servant_of_ratvar_messages = list("\"Disgusting.\"", "\"Well, aren't you an inquisitive fellow?\"", "A foul presence pervades your mind, then vanishes.", "\"The fact that Ratvar has to depend on simpletons like you is appalling.\"") + +/obj/item/clockwork/component/replicant_alloy + name = "replicant alloy" + desc = "A seemingly strong but very malleable chunk of metal. It seems as though it wants to be molded into something greater." + icon_state = "replicant_alloy" + component_id = "replicant_alloy" + cultist_message = "The alloy takes on the appearance of a screaming face for a moment." + servant_of_ratvar_messages = list("\"There's always something to be done. Get to it.\"", "\"Idle hands are worse than broken ones. Get to work.\"", "A detailed image of Ratvar appears in the alloy for a moment.") + +/obj/item/clockwork/component/replicant_alloy/smashed_anima_fragment + name = "smashed anima fragment" + desc = "Shattered chunks of metal. Damaged beyond repair and completely unusable." + clockwork_desc = "The sad remains of an anima fragment. Might still be serviceable as a substitute for replicant alloy." + icon_state = "smashed_anime_fragment" + cultist_message = "The shards vibrate in your hands for a moment." + servant_of_ratvar_messages = list("\"...still fight...\"", "\"...where am I...?\"", "\"...put me... slab...\"") + w_class = 3 + +/obj/item/clockwork/component/replicant_alloy/fallen_armor + name = "fallen armor" + desc = "Lifeless chunks of armor. They're designed in a strange way and won't fit on you." + clockwork_desc = "The armor from a former clockwork marauder. Might still be serviceable as a substitute for replicant alloy." + icon_state = "fallen_armor" + cultist_message = "Red flame sputters from the mask's eye before winking out." + servant_of_ratvar_messages = list("A piece of armor hovers away from the others for a moment.", "Red flame appears in the cuirass before sputtering out.") + w_class = 3 + +/obj/item/clockwork/component/replicant_alloy/blind_eye + name = "blind eye" + desc = "A heavy brass eye, its red iris fallen dark." + clockwork_desc = "A smashed ocular warden covered in dents. Might still be serviceable as a substitute for replicant alloy." + icon_state = "blind_eye" + cultist_message = "The eye flickers at you with intense hate before falling dark." + servant_of_ratvar_messages = list("The eye flickers before falling dark.", "You feel watched.") + w_class = 3 + +/obj/item/clockwork/component/hierophant_ansible + name = "hierophant ansible" + desc = "Some sort of transmitter? It seems as though it's trying to say something." + icon_state = "hierophant_ansible" + component_id = "hierophant_ansible" + cultist_message = "\"Gur obff nlf vg'f abg ntnvafg gur ehyrf gb xvyy lbh.\"" + servant_of_ratvar_messages = list("\"Rkvyr vf fhpu n'ober. Gurer'f abguvat v'pna uhag va urer.\"", "\"Jung'f xrrcvat lbh? V'jnag gb tb xvyy fbzrguvat.\"", "\"HEHEHEHEHEHEH!\"") + +////////////////////////// +// CLOCKWORK STRUCTURES // +////////////////////////// + +/obj/structure/clockwork + name = "meme structure" + desc = "Some frog or something, the fuck?" + var/clockwork_desc = "This fabled artifact from beyond the stars contains concentrated meme essence." //See above + icon = 'icons/obj/clockwork_objects.dmi' + icon_state = "rare_pepe" + anchored = 1 + density = 1 + opacity = 0 + var/max_health = 100 //All clockwork structures have health that can be removed via attacks + var/health = 100 + var/takes_damage = TRUE //If the structure can be damaged + var/break_message = "The frog isn't a meme after all!" //The message shown when a structure breaks + var/break_sound = 'sound/magic/clockwork/anima_fragment_death.ogg' //The sound played when a structure breaks + var/list/debris = list(/obj/item/clockwork/component/replicant_alloy) //Parts left behind when a structure breaks + var/construction_value = 0 //How much value the structure contributes to the overall "power" of the structures on the station + +/obj/structure/clockwork/New() + ..() + clockwork_construction_value += construction_value + all_clockwork_objects += src + +/obj/structure/clockwork/Destroy() + clockwork_construction_value -= construction_value + all_clockwork_objects -= src + ..() + +/obj/structure/clockwork/proc/destroyed() + if(!takes_damage) + return 0 + for(var/obj/item/I in debris) + new I (get_turf(src)) + visible_message(break_message) + playsound(src, break_sound, 50, 1) + qdel(src) + return 1 + +/obj/structure/clockwork/ex_act(severity) + if(takes_damage) + switch(severity) + if(1) + health -= max_health * 0.7 //70% max health lost + if(2) + health -= max_health * 0.4 //40% max health lost + if(3) + if(prob(50)) + health -= max_health * 0.1 //10% max health lost + if(health <= max_health * 0.1) //If there's less than 10% max health left, destroy it + destroyed() + qdel(src) + +/obj/structure/clockwork/examine(mob/user) + if((is_servant_of_ratvar(user) || isobserver(user)) && clockwork_desc) + desc = clockwork_desc + ..() + desc = initial(desc) + +/obj/structure/clockwork/attackby(obj/item/I, mob/living/user, params) + if(user.a_intent == "harm" && user.canUseTopic(I) && I.force) + user.visible_message("[user] strikes [src] with [I]!", "You strike [src] with [I]!") + playsound(src, I.hitsound, 50, 1) + user.changeNext_move(CLICK_CD_MELEE) + user.do_attack_animation(src) + health = max(0, health - I.force) + if(!health) + destroyed() + return 0 + else + ..() + +/obj/structure/clockwork/cache //Tinkerer's cache: Stores components for later use. + name = "tinkerer's cache" + desc = "A large brass spire with a flaming hole in its center." + clockwork_desc = "A brass container capable of storing a large amount of components. Shares components with all other caches." + icon_state = "tinkerers_cache" + construction_value = 10 + break_message = "The cache's fire winks out before it falls in on itself!" + +/obj/structure/clockwork/cache/New() + ..() + clockwork_caches++ + +/obj/structure/clockwork/cache/Destroy() + clockwork_caches-- + return ..() + +/obj/structure/clockwork/cache/attackby(obj/item/I, mob/living/user, params) + if(!is_servant_of_ratvar(user)) + ..() + return 0 + if(istype(I, /obj/item/clockwork/component)) + var/obj/item/clockwork/component/C = I + clockwork_component_cache[C.component_id]++ + user << "You add [C] to [src]." + user.drop_item() + qdel(C) + return 1 + if(istype(I, /obj/item/clockwork/slab)) + var/obj/item/clockwork/slab/S = I + clockwork_component_cache["belligerent_eye"] += S.stored_components["belligerent_eye"] + clockwork_component_cache["vanguard_cogwheel"] += S.stored_components["vanguard_cogwheel"] + clockwork_component_cache["guvax_capacitor"] += S.stored_components["guvax_capacitor"] + clockwork_component_cache["replicant_alloy"] += S.stored_components["replicant_alloy"] + clockwork_component_cache["hierophant_ansible"] += S.stored_components["hierophant_ansible"] + S.stored_components["belligerent_eye"] = 0 + S.stored_components["vanguard_cogwheel"] = 0 + S.stored_components["guvax_capacitor"] = 0 + S.stored_components["replicant_alloy"] = 0 + S.stored_components["hierophant_ansible"] = 0 + user.visible_message("[user] empties [S] into [src].", "You offload your slab's components into [src].") + return 1 + if(istype(I, /obj/item/clockwork/daemon_shell)) + var/component_type + switch(alert(user, "Will this daemon produce a specific type of component or produce randomly?.", , "Specific Type", "Random Component")) + if("Specific Type") + switch(input(user, "Choose a component type.", name) as null|anything in list("Belligerent Eyes", "Vanguard Cogwheels", "Guvax Capacitors", "Replicant Alloys", "Hierophant Ansibles")) + if("Belligerent Eyes") + component_type = "belligerent_eye" + if("Vanguard Cogwheels") + component_type = "vanguard_cogwheel" + if("Guvax Capacitors") + component_type = "guvax_capacitor" + if("Replicant Alloys") + component_type = "replicant_alloy" + if("Hierophant Ansibles") + component_type = "hierophant_ansibles" + if(!user || !user.canUseTopic(src) || !user.canUseTopic(I)) + return 0 + var/obj/item/clockwork/tinkerers_daemon/D = new(src) + D.cache = src + D.specific_component = component_type + user.visible_message("[user] spins the cogwheel on [I] and puts it into [src].", \ + "You activate the daemon and put it into [src]. It will now produce a component every thirty seconds.") + user.drop_item() + qdel(I) + return 1 + ..() + +/obj/structure/clockwork/cache/attack_hand(mob/user) + if(!is_servant_of_ratvar(user)) + return 0 + var/list/possible_components = list() + if(clockwork_component_cache["belligerent_eye"]) + possible_components += "Belligerent Eye" + if(clockwork_component_cache["vanguard_cogwheel"]) + possible_components += "Vanguard Cogwheel" + if(clockwork_component_cache["guvax_capacitor"]) + possible_components += "Guvax Capacitor" + if(clockwork_component_cache["replicant_alloy"]) + possible_components += "Replicant Alloy" + if(clockwork_component_cache["hierophant_ansible"]) + possible_components += "Hierophant Ansible" + if(!possible_components.len) + user << "[src] is empty!" + return 0 + var/component_to_withdraw = input(user, "Choose a component to withdraw.", name) as null|anything in possible_components + if(!user || !user.canUseTopic(src) || !component_to_withdraw) + return 0 + var/obj/item/clockwork/component/the_component + switch(component_to_withdraw) + if("Belligerent Eye") + the_component = new/obj/item/clockwork/component/belligerent_eye(get_turf(src)) + clockwork_component_cache["belligerent_eye"]-- + if("Vanguard Cogwheel") + the_component = new/obj/item/clockwork/component/vanguard_cogwheel(get_turf(src)) + clockwork_component_cache["vanguard_cogwheel"]-- + if("Guvax Capacitor") + the_component = new/obj/item/clockwork/component/guvax_capacitor(get_turf(src)) + clockwork_component_cache["guvax_capacitor"]-- + if("Replicant Alloy") + the_component = new/obj/item/clockwork/component/replicant_alloy(get_turf(src)) + clockwork_component_cache["replicant_alloy"]-- + if("Hierophant Ansible") + the_component = new/obj/item/clockwork/component/hierophant_ansible(get_turf(src)) + clockwork_component_cache["hierophant_ansible"]-- + if(the_component) + user.visible_message("[user] withdraws [the_component] from [src].", "You withdraw [the_component] from [src].") + user.put_in_hands(the_component) + return 1 + +/obj/structure/clockwork/cache/examine(mob/user) + ..() + if(is_servant_of_ratvar(user) || isobserver(user)) + user << "Stored components:" + user << "Belligerent Eyes: [clockwork_component_cache["belligerent_eye"]]" + user << "Vanguard Cogwheels: [clockwork_component_cache["vanguard_cogwheel"]]" + user << "Guvax Capacitors: [clockwork_component_cache["guvax_capacitor"]]" + user << "Replicant Alloys: [clockwork_component_cache["replicant_alloy"]]" + user << "Hierophant Ansibles: [clockwork_component_cache["hierophant_ansible"]]" + +/obj/structure/clockwork/ocular_warden //Ocular warden: Low-damage, low-range turret. Deals constant damage to whoever it makes eye contact with. + name = "ocular warden" + desc = "A large brass eye with tendrils trailing below it and a wide red iris." + clockwork_desc = "A stalwart turret that will deal sustained damage to any non-faithful it sees." + icon_state = "ocular_warden" + health = 25 + max_health = 25 + construction_value = 15 + break_message = "The warden's eye gives a glare of utter hate before falling dark!" + debris = list(/obj/item/clockwork/component/replicant_alloy/blind_eye) + var/damage_per_tick = 3 + var/sight_range = 3 + var/mob/living/target + +/obj/structure/clockwork/ocular_warden/New() + ..() + SSfastprocess.processing += src + +/obj/structure/clockwork/ocular_warden/Destroy() + SSfastprocess.processing -= src + return ..() + +/obj/structure/clockwork/ocular_warden/examine(mob/user) + ..() + user << "[target ? "It's fixated on [target]" : "Its gaze is wandering aimlessly"]." + +/obj/structure/clockwork/ocular_warden/process() + if(ratvar_awakens && (damage_per_tick == initial(damage_per_tick) || sight_range == initial(sight_range))) //Massive buff if Ratvar has returned + damage_per_tick = 10 + sight_range = 5 + if(target) + if(target.stat || get_dist(get_turf(src), get_turf(target)) > sight_range) + lose_target() + else + target.adjustFireLoss(!iscultist(target) ? damage_per_tick : damage_per_tick * 2) //Nar-Sian cultists take additional damage + if(ratvar_awakens) + target.adjust_fire_stacks(damage_per_tick) + target.IgniteMob() + dir = get_dir(get_turf(src), get_turf(target)) + else + if(!acquire_nearby_target() && prob(0.5)) //Extremely low chance because of how fast the subsystem it uses processes + var/list/idle_messages = list("[src] sulkily glares around.", "[src] lazily drifts from side to side.", "[src] looks around for something to burn.", "[src] slowly turns in circles.") + if(prob(50)) + visible_message("[pick(idle_messages)]") + else + dir = pick(NORTH, EAST, SOUTH, WEST) //Random rotation + +/obj/structure/clockwork/ocular_warden/proc/acquire_nearby_target() + var/list/possible_targets = list() + for(var/mob/living/L in viewers(sight_range, src)) //Doesn't attack the blind + if(!is_servant_of_ratvar(L) && !L.stat && L.mind) + possible_targets += L + if(!possible_targets.len) + return 0 + target = pick(possible_targets) + visible_message("[src] swivels to face [target]!") + target << "\"I SEE YOU!\"\n[src]'s gaze [ratvar_awakens ? "melts you alive" : "burns you"]!" + return 1 + +/obj/structure/clockwork/ocular_warden/proc/lose_target() + if(!target) + return 0 + target = null + visible_message("[src] settles and seems almost disappointed.") + return 1 + +/obj/structure/clockwork/anima_fragment //Anima fragment: Useless on its own, but can accept an active soul vessel to create a powerful construct. + name = "anima fragment" + desc = "A massive brass shell with a small cube-shaped receptable in its center. It gives off an aura of contained power." + clockwork_desc = "A dormant receptable that, when powered with a soul vessel, will become a powerful construct." + icon_state = "anime_fragment" + construction_value = 0 + anchored = 0 + density = 0 + takes_damage = FALSE + +/obj/structure/clockwork/anima_fragment/attackby(obj/item/I, mob/living/user, params) + if(istype(I, /obj/item/device/mmi/posibrain/soul_vessel)) + if(!is_servant_of_ratvar(user)) + ..() + return 0 + var/obj/item/device/mmi/posibrain/soul_vessel/S = I + if(!S.brainmob) + user << "[S] hasn't trapped a spirit! Turn it on first." + return 0 + if(S.brainmob && (!S.brainmob.client || !S.brainmob.mind)) + user << "[S]'s trapped spirit appears inactive!" + return 0 + user.visible_message("[user] clicks [S] into place on [src].", "You insert [S] into [src]. It whirs and begins to rise.") + var/mob/living/simple_animal/hostile/anima_fragment/A = new(get_turf(src)) + S.brainmob.mind.transfer_to(A) + add_servant_of_ratvar(A, TRUE) + A << A.playstyle_string + user.drop_item() + qdel(S) + qdel(src) + return 1 + ..() + +/obj/structure/clockwork/interdiction_lens //Interdiction lens: A powerful artifact that can massively disrupt electronics. Five-minute cooldown between uses. + name = "interdiction lens" + desc = "An ominous, double-pronged brass obelisk. There's a strange gemstone clasped between the pincers." + clockwork_desc = "A powerful obelisk that can devastate certain electronics. It needs to recharge between uses." + icon_state = "interdiction_lens" + construction_value = 25 + break_message = "The lens flares a blinding violet before shattering!" + break_sound = 'sound/effects/Glassbr3.ogg' + var/recharging = FALSE //If the lens is still recharging its energy + +/obj/structure/clockwork/interdiction_lens/examine(mob/user) + ..() + user << "Its gemstone [recharging ? "has been breached by writhing tendrils of blackness that cover the obelisk" : "vibrates in place and thrums with power"]," + +/obj/structure/clockwork/interdiction_lens/attack_hand(mob/living/user) + if(user.canUseTopic(src)) + disrupt(user) + +/obj/structure/clockwork/interdiction_lens/proc/disrupt(mob/living/user) + if(!user || !is_servant_of_ratvar(user)) + return 0 + if(recharging) + user << "As you place your hand on the gemstone, cold tendrils of black matter crawl up your arm. You quickly pull back." + return 0 + user.visible_message("[user] places their hand on [src]' gemstone...", "You place your hand on the gemstone...") + var/target = input(user, "Power flows through you. Choose where to direct it.", "Interdiction Lens") as null|anything in list("Disrupt Telecommunications", "Disable Cameras", "Disable Cyborgs") + if(!user.canUseTopic(src) || !target) + user.visible_message("[user] pulls their hand back.", "On second thought, maybe not right now.") + return 0 + user.visible_message("Violet tendrils engulf [user]'s arm as the gemstone glows with furious energy!", \ + "A mass of violet tendrils cover your arm as [src] unleashes a blast of power!") + user.notransform = TRUE + icon_state = "[initial(icon_state)]_active" + recharging = TRUE + sleep(30) + switch(target) + if("Disrupt Telecommunications") + for(var/obj/machinery/telecomms/hub/H in telecomms_list) + for(var/mob/M in range(7, H)) + M << "You sense a strange force pass through you..." + H.visible_message("The lights on [H] flare a blinding yellow before falling dark!") + H.emp_act(1) + if("Disable Cameras") + for(var/obj/machinery/camera/C in cameranet.cameras) + C.emp_act(1) + for(var/mob/living/silicon/ai/A in living_mob_list) + A << "Massive energy surge detected. All cameras offline." + A << 'sound/machines/warning-buzzer.ogg' + if("Disable Cyborgs") + for(var/mob/living/silicon/robot/R in living_mob_list) //Doesn't include AIs, for obvious reasons + if(is_servant_of_ratvar(R) || R.stat) //Doesn't affect already-offline cyborgs + continue + R.visible_message("[R] shuts down with no warning!", \ + "Massive emergy surge detected. All systems offline. Initiating reboot sequence..") + playsound(R, 'sound/machines/warning-buzzer.ogg', 50, 1) + R.Weaken(30) + user.visible_message("The tendrils around [user]'s arm turn to an onyx black and wither away!", \ + "The tendrils around your arm turn a horrible black and sting your skin before they shrivel away.") + user.notransform = FALSE + if(!src) + return 0 + flick("[initial(icon_state)]_discharged", src) + icon_state = "[initial(icon_state)]_recharging" + spawn(3000) //5 minutes + if(!src) + return 0 + visible_message("The writhing tendrils return to the gemstone, which begins to glow with power.") + flick("[initial(icon_state)]_recharged", src) + icon_state = initial(icon_state) + recharging = FALSE + return 1 + +/obj/structure/clockwork/mending_motor //Mending motor: A prism that consumes replicant alloy to repair nearby mechanical servants at a quick rate. + name = "mending motor" + desc = "A dark onyx prism, held in midair by spiraling tendrils of stone." + clockwork_desc = "A powerful prism that rapidly repairs nearby mechanical servants and clockwork structures." + icon_state = "mending_motor" + construction_value = 20 + break_message = "The prism collapses with a heavy thud!" + var/stored_alloy = 0 + var/max_alloy = 150 + var/uses_alloy = TRUE + var/active = TRUE + +/obj/structure/clockwork/mending_motor/prefilled + stored_alloy = 30 + +/obj/structure/clockwork/mending_motor/New() + ..() + SSobj.processing += src + toggle() //Toggles off as soon as it's created, but starts online for reasons + +/obj/structure/clockwork/mending_motor/Destroy() + SSobj.processing -= src + ..() + +/obj/structure/clockwork/mending_motor/examine(mob/user) + ..() + if(is_servant_of_ratvar(user) || isobserver(user)) + user << "It has [stored_alloy]/[max_alloy] units of replicant alloy." + +/obj/structure/clockwork/mending_motor/process() + if(!active) + return 0 + if(!stored_alloy && uses_alloy) + visible_message("[src] emits an airy chuckling sound and falls dark!") + toggle() + return 0 + for(var/mob/living/simple_animal/hostile/anima_fragment/F in range(5, src)) + if(F.health == F.maxHealth || F.stat) + continue + F.adjustBruteLoss(-15) + if(uses_alloy) + stored_alloy = max(0, stored_alloy - 2) + for(var/mob/living/simple_animal/hostile/clockwork_marauder/M in range(5, src)) + if(M.health == M.maxHealth || M.stat) + continue + M.adjustBruteLoss(-M.maxHealth) //Instant because marauders don't usually take health damage + M.fatigue = max(0, M.fatigue - 15) + if(uses_alloy) + stored_alloy = max(0, stored_alloy - 2) + for(var/mob/living/silicon/S in range(5, src)) + if(S.health == S.maxHealth || S.stat == DEAD || !is_servant_of_ratvar(S)) + continue + S.adjustBruteLoss(-25) + S.adjustFireLoss(-25) + if(uses_alloy) + stored_alloy = max(0, stored_alloy - 5) //Much higher cost because silicons are much more useful + for(var/obj/structure/clockwork/C in range(5, src)) + if(C.health == C.max_health) + continue + C.health = min(C.health + 10, C.max_health) + if(uses_alloy) + stored_alloy = max(0, stored_alloy - 1) + + +/obj/structure/clockwork/mending_motor/attack_hand(mob/living/user) + if(user.canUseTopic(src)) //Unnecessary? + if(!stored_alloy) + user << "[src] needs more replicant alloy to function!" + return 0 + toggle(user) + +/obj/structure/clockwork/mending_motor/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/clockwork/component/replicant_alloy) && is_servant_of_ratvar(user)) + if(stored_alloy + 10 > max_alloy) + user << "[src] is too full to accept any more alloy!" + return 0 + user.whisper("Genafzhgr vagb jngre.") + user.visible_message("[user] liquifies [I] and pours it onto [src].", \ + "You liquify [src] and pour it onto [src], which transfers the alloy into its reserves.") + stored_alloy = min(max(0, stored_alloy + 10), max_alloy) + user.drop_item() + qdel(I) + return 1 + ..() + +/obj/structure/clockwork/mending_motor/proc/toggle(mob/living/user) + active = !active + if(user && is_servant_of_ratvar(user)) + user.visible_message("[user] [active ? "en" : "dis"]ables [src].", "You [active ? "en" : "dis"]able [src].") + if(active) + icon_state = initial(icon_state) + else + icon_state = "[initial(icon_state)]_inactive" + +/////////////////////// +// CLOCKWORK EFFECTS // +/////////////////////// + +/obj/effect/clockwork + name = "meme machine" + desc = "Still don't know what it is." + var/clockwork_desc = "A fabled artifact from beyond the stars. Contains concentrated meme essence." //Shown to clockwork cultists instead of the normal description + icon = 'icons/effects/clockwork_effects.dmi' + icon_state = "ratvars_flame" + anchored = 1 + density = 0 + opacity = 0 + +/obj/effect/clockwork/New() + ..() + all_clockwork_objects += src + +/obj/effect/clockwork/Destroy() + all_clockwork_objects -= src + return ..() + +/obj/effect/clockwork/examine(mob/user) + if(is_servant_of_ratvar(user) && clockwork_desc) + desc = clockwork_desc + ..() + desc = initial(desc) + +/obj/effect/clockwork/judicial_marker //Judicial marker: Created by the judicial visor. After four seconds, stuns any non-servants nearby and damages Nar-Sian cultists. + name = "judicial marker" + desc = "You get the feeling that you shouldn't be standing here." + clockwork_desc = "A sigil that will soon erupt and smite any unenlightened nearby." + icon = 'icons/effects/96x96.dmi' + pixel_x = -30 + pixel_y = -30 + layer = 2.01 + +/obj/effect/clockwork/judicial_marker/New() + ..() + flick("judicial_marker", src) + spawn(25) //Utilizes spawns due to how it works with Ratvar's flame + flick("judicial_explosion", src) + spawn(15) + for(var/mob/living/L in range(1, src)) + if(is_servant_of_ratvar(L)) + continue + if(!iscultist(L)) + L << "[!issilicon(L) ? "An unseen force slams you into the ground!" : "ERROR: Motor servos disabled by external source!"]" + L.Weaken(8) + else + L << "\"Keep an eye out, filth.\"\n[!issilicon(L) ? "An unseen force piledrives you into the ground!" : "ERROR: Motor servos damaged by external source!"]" + L.Weaken(10) + L.adjustBruteLoss(10) + qdel(src) + return 1 + +/obj/effect/clockwork/spatial_gateway //Spatial gateway: A one-way rift to another location. + name = "spatial gateway" + desc = "A gently thrumming tear in reality." + clockwork_desc = "A gateway in reality. It can either send or receive, but not both." + icon_state = "spatial_gateway" + density = 1 + var/sender = TRUE //If this gateway is made for sending, not receiving + var/lifetime = 25 //How many deciseconds this portal will last + var/uses = 1 //How many objects or mobs can go through the portal + var/obj/effect/clockwork/spatial_gateway/linked_gateway //The gateway linked to this one + +/obj/effect/clockwork/spatial_gateway/New() + ..() + spawn(1) + if(!linked_gateway) + qdel(src) + return 0 + else + if(linked_gateway.sender == sender) + linked_gateway.sender = !sender + spawn(lifetime) + if(src) + qdel(src) + +/obj/effect/clockwork/spatial_gateway/Destroy() + visible_message("[src] flickers and closes!") + animate(src, transform = matrix() - matrix(), time = 10) + spawn(10) + ..() + +/obj/effect/clockwork/spatial_gateway/examine(mob/user) + ..() + if(is_servant_of_ratvar(user) || isobserver(user)) + user << "This gateway can only [sender ? "send" : "receive"] objects." + +/obj/effect/clockwork/spatial_gateway/attack_hand(mob/living/user) + if(!user.canUseTopic(src)) + return 0 + user.visible_message("[user] climbs through [src]!", "You brace yourself and step through [src]...") + pass_through_gateway(user) + return 1 + +/obj/effect/clockwork/spatial_gateway/attackby(obj/item/I, mob/living/user, params) + if(istype(I, /obj/item/weapon/nullrod)) + user.visible_message("[user] dispels [src] with [I]!", "You close [src] with [I]!") + qdel(linked_gateway) + qdel(src) + return 1 + if(istype(I, /obj/item/weapon/grab)) + var/obj/item/weapon/grab/G = I + if(!G.affecting) + return 0 + user.visible_message("[user] shoves [G.affecting] into [src]!", "You shove [G.affecting] into [src]!") + pass_through_gateway(G.affecting) + qdel(G) + return 1 + if(user.drop_item()) + pass_through_gateway(I) + ..() + +/obj/effect/clockwork/spatial_gateway/Bumped(atom/A) + ..() + if(isliving(A) || istype(A, /obj/item)) + pass_through_gateway(A) + +/obj/effect/clockwork/spatial_gateway/proc/pass_through_gateway(atom/movable/A) + if(!linked_gateway) + qdel(src) + return 0 + if(!sender) + visible_message("[A] bounces off of [src]!") + return 0 + if(isliving(A)) + var/mob/living/user = A + user << "You pass through [src] and appear elsewhere!" + linked_gateway.visible_message("A shape appears in [linked_gateway] before emerging!") + playsound(src, 'sound/effects/EMPulse.ogg', 50, 1) + playsound(linked_gateway, 'sound/effects/EMPulse.ogg', 50, 1) + transform = matrix() * 1.5 + animate(src, transform = matrix() / 1.5, time = 10) + linked_gateway.transform = matrix() * 1.5 + animate(linked_gateway, transform = matrix() / 1.5, time = 10) + if(ismob(A)) + var/mob/M = A + M.forceMove(get_turf(linked_gateway)) + else + A.loc = get_turf(linked_gateway) + uses = max(0, uses - 1) + linked_gateway.uses = max(0, uses - 1) + spawn(10) + if(!uses) + qdel(src) + qdel(linked_gateway) + return 1 + +/obj/effect/clockwork/general_marker + name = "general marker" + desc = "Some big guy." + clockwork_desc = "One of Ratvar's generals." + alpha = 200 + layer = 10 + +/obj/effect/clockwork/general_marker/New() + ..() + playsound(src, 'sound/magic/clockwork/invoke_general.ogg', 50, 0) + animate(src, alpha = 0, time = 10) + spawn(10) + qdel(src) + +/obj/effect/clockwork/general_marker/nezbere + name = "Nezbere, the Brass Eidolon" + desc = "A towering colossus clad in nigh-impenetrable brass armor. Its gaze is stern yet benevolent, even upon you." + clockwork_desc = "One of Ratvar's four generals. Nezbere is responsible for the design, testing, and creation of everything in Ratvar's domain." + icon = 'icons/effects/340x428.dmi' + icon_state = "nezbere" + pixel_x = -154 + pixel_y = -192 + +/obj/effect/clockwork/general_marker/sevtug + name = "Sevtug, the Formless Pariah" + desc = "A sinister cloud of purple energy. Looking at it gives you a headache." + clockwork_desc = "One of Ratvar's four generals. Sevtug taught him how to manipulate minds and is one of his oldest allies." + icon = 'icons/effects/211x247.dmi' + icon_state = "sevtug" + pixel_x = -113 + pixel_y = -131 + +/obj/effect/clockwork/general_marker/nzcrentr + name = "Nzcrentr, the Forgotten Arbiter" + desc = "A terrifying war machine crackling with limitless energy." + clockwork_desc = "One of Ratvar's four generals. Nzcrentr is the result of Neovgre - Nezbere's finest war machine, commandeerable only be a mortal - fusing with its pilot and driving her \ + insane. Nzcrentr seeks out any and all sentient life to slaughter it for sport." + icon = 'icons/effects/254x361.dmi' + icon_state = "nzcrentr" + pixel_x = -110 + pixel_y = -163 + +/obj/effect/clockwork/general_marker/inathneq + name = "Inath-Neq, the Resonant Cogwheel" + desc = "A humanoid form blazing with blue fire. It radiates an aura of kindness and caring." + clockwork_desc = "One of Ratvar's four generals. Before her current form, Inath-Neq was a powerful warrior priestess commanding the Resonant Cogs, a sect of Ratvarian warriors renowned for \ + their prowess. After a lost battle with Nar-Sian cultists, Inath-Neq was struck down and stated in her dying breath, \ + \"The Resonant Cogs shall not fall silent this day, but will come together to form a wheel that shall never stop turning.\" Ratvar, touched by this, granted Inath-Neq an eternal body and \ + merged her soul with those of the Cogs slain with her on the battlefield." + icon = 'icons/effects/187x381.dmi' + icon_state = "inath-neq" + pixel_x = -91 + pixel_y = -199 + +/obj/effect/clockwork/sigil //Sigils: Rune-like markings on the ground with various effects. + name = "sigil" + desc = "A strange set of markings drawn on the ground." + clockwork_desc = "A sigil of some purpose." + icon_state = "sigil" + alpha = 25 + var/affects_servants = FALSE + +/obj/effect/clockwork/sigil/attack_hand(mob/user) + if(iscarbon(user) && !user.stat && user.a_intent == "harm") + user.visible_message("[user] stamps out [src]!", "You stomp on [src], scattering it into thousands of particles.") + qdel(src) + return 1 + ..() + +/obj/effect/clockwork/sigil/Crossed(atom/movable/AM) + if(isliving(AM)) + var/mob/living/L = AM + if(!L.stat) + if(!is_servant_of_ratvar(L) || (is_servant_of_ratvar(L) && affects_servants)) + sigil_effects(L) + return 1 + ..() + +/obj/effect/clockwork/sigil/proc/sigil_effects(mob/living/L) + +/obj/effect/clockwork/sigil/transgression //Sigil of Transgression: Stuns and flashes the first non-servant to walk on it. Nar-Sian cultists are damaged and knocked down. + name = "dull sigil" + desc = "A dull, barely-visible golden sigil. It's as though light was carved into the ground." + icon = 'icons/effects/clockwork_effects.dmi' + clockwork_desc = "A sigil that will stun the first non-servant to cross it. Nar-Sie's dogs will be knocked down." + color = rgb(255, 255, 0) + +/obj/effect/clockwork/sigil/transgression/sigil_effects(mob/living/L) + visible_message("[src] appears in a burst of light!") + for(var/mob/living/M in viewers(5, src)) + if(!is_servant_of_ratvar(M)) + M.flash_eyes() + if(!iscultist(L)) + L << "An unseen force holds you in place!" + else + L << "\"Watch your step, wretch.\"" + L.adjustBruteLoss(10) + L.Weaken(5) + L.Stun(5) + qdel(src) + return 1 + +/obj/effect/clockwork/sigil/submission //Sigil of Submission: After a short time, converts any non-servant standing on it. Knocks down and silences them for five seconds afterwards. + name = "ominous sigil" + desc = "A brilliant golden sigil. Something about it really bothers you." + clockwork_desc = "A sigil that will enslave the first person to cross it, provided they do not move and they stand still for a brief time." + color = rgb(255, 255, 0) + alpha = 75 + +/obj/effect/clockwork/sigil/submission/sigil_effects(mob/living/L) + visible_message("[src] begins to glow a piercing magenta!") + animate(src, color = rgb(255, 0, 150), time = 30) + sleep(30) + if(get_turf(L) != get_turf(src)) + animate(src, color = initial(color), time = 30) + return 0 + L << "\"You belong to me now.\"" + add_servant_of_ratvar(L) + L.Weaken(5) //Completely defenseless for a few seconds - mainly to give them time to read over the information they've just been presented with + L.Stun(5) + if(iscarbon(L)) + var/mob/living/carbon/C = L + C.silent += 5 + for(var/mob/living/M in living_mob_list - L) + if(is_servant_of_ratvar(M) || isobserver(M)) + M << "Sigil of Submission in [get_area(src)] [is_servant_of_ratvar(L) ? "" : "un"]successfully converted [L.real_name]!" + qdel(src) + return 1 + +/obj/effect/clockwork/sigil/transmission + name = "suspicious sigil" + desc = "A barely-visible sigil. Things seem a bit quieter around it." + clockwork_desc = "A sigil that will listen for and transmit anything it hears." + color = rgb(75, 75, 75) + alpha = 50 + flags = HEAR + languages = ALL + +/obj/effect/clockwork/sigil/transmission/sigil_effects(mob/living/L) + for(var/mob/M in mob_list) + if(is_servant_of_ratvar(M) || isobserver(M)) + M << "Sigil of Transmission in [get_area(src)] crossed by [L.name]." + return 0 + +/obj/effect/clockwork/sigil/transmission/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, list/spans) + if(!message || !speaker) + return 0 + var/parsed_message = "(Sigil of Tranmission in [get_area(src)]): [message]" + for(var/mob/M in mob_list) + if(is_servant_of_ratvar(M) || isobserver(M)) + M << parsed_message diff --git a/code/game/gamemodes/clock_cult/clock_ratvar.dm b/code/game/gamemodes/clock_cult/clock_ratvar.dm new file mode 100644 index 00000000000..c3cbc6f5aac --- /dev/null +++ b/code/game/gamemodes/clock_cult/clock_ratvar.dm @@ -0,0 +1,241 @@ +/obj/structure/clockwork/massive //For objects that are typically very large + name = "massive construct" + desc = "A very large construction." + layer = 10 + +/obj/structure/clockwork/massive/celestial_gateway //The gateway to Reebe, from which Ratvar emerges + name = "Gateway to the Celestial Derelict" + desc = "A massive, thrumming rip in spacetime." + clockwork_desc = "A portal to the Celestial Derelict. Massive and intimidating, it is the only thing that can both transport Ratvar and withstand the massive amount of energy he emits." + icon = 'icons/effects/96x96.dmi' + icon_state = "clockwork_gateway_charging" + pixel_x = -30 + pixel_y = -30 + alpha = 175 + health = 1000 + max_health = 1000 + var/progress_in_seconds = 0 //Once this reaches 300, it's game over + var/purpose_fulfilled = FALSE + var/first_sound_played = FALSE + var/second_sound_played = FALSE + var/third_sound_played = FALSE + +/obj/structure/clockwork/massive/celestial_gateway/New() + ..() + SSshuttle.emergencyNoEscape = TRUE + SSobj.processing += src + for(var/mob/M in mob_list) + if(is_servant_of_ratvar(M) || isobserver(M)) + M << "A gateway to the Celestial Derelict has been created in [get_area(src)]!" + +/obj/structure/clockwork/massive/celestial_gateway/Destroy() + SSshuttle.emergencyNoEscape = FALSE + SSobj.processing -= src + if(!purpose_fulfilled) + for(var/mob/M in mob_list) + if(is_servant_of_ratvar(M) || isobserver(M)) + M << "A gateway to the Celestial Derelict has fallen at [get_area(src)]!" + world << sound(null, 0, channel = 8) + ..() + +/obj/structure/clockwork/massive/celestial_gateway/destroyed() + visible_message("The [src] begins to pulse uncontrollably... you might want to run!") + world << sound('sound/effects/clockcult_gateway_disrupted.ogg', 0, channel = 8, volume = 50) + icon_state = "clockwork_gateway_disrupted" + takes_damage = FALSE + sleep(27) + animate(src, transform = matrix() * 2, time = 2) + explosion(src, 1, 3, 8, 8) + qdel(src) + return 1 + +/obj/structure/clockwork/massive/celestial_gateway/ex_act(severity) + return 0 //Nice try, Toxins! + +/obj/structure/clockwork/massive/celestial_gateway/process() + if(prob(5)) + for(var/mob/M in mob_list) + M << "You hear otherworldly sounds from the [dir2text(get_dir(get_turf(M), get_turf(src)))]..." + if(!health) + return 0 + progress_in_seconds++ + switch(progress_in_seconds) + if(-INFINITY to 100) + if(!first_sound_played) + world << sound('sound/effects/clockcult_gateway_charging.ogg', 1, channel = 8, volume = 50) + first_sound_played = TRUE + icon_state = "clockwork_gateway_charging" + if(100 to 250) + if(!second_sound_played) + world << sound('sound/effects/clockcult_gateway_active.ogg', 1, channel = 8, volume = 50) + second_sound_played = TRUE + icon_state = "clockwork_gateway_active" + if(250 to 300) + if(!third_sound_played) + world << sound('sound/effects/clockcult_gateway_closing.ogg', 1, channel = 8, volume = 50) + third_sound_played = TRUE + icon_state = "clockwork_gateway_closing" + if(300 to INFINITY) + if(!purpose_fulfilled) + takes_damage = FALSE + purpose_fulfilled = TRUE + animate(src, transform = matrix() * 1.5, time = 136) + world << sound('sound/effects/ratvar_rises.ogg', 0, channel = 8) //End the sounds + sleep(136) + new/obj/structure/clockwork/massive/ratvar(get_turf(src)) + qdel(src) + +/obj/structure/clockwork/massive/celestial_gateway/examine(mob/user) + ..() + if(is_servant_of_ratvar(user)) + var/arrival_text = "IMMINENT" + if(300 - progress_in_seconds > 0) + arrival_text = "[max(300 - progress_in_seconds, 0)]s" + user << "Seconds until Ratvar's arrival: [arrival_text]" + switch(progress_in_seconds) + if(-INFINITY to 100) + user << "It's still opening." + if(100 to 250) + user << "It's reached the Celestial Derelict and is drawing power from it." + if(250 to INFINITY) + user << "Ratvar is coming through the gateway!" + else + switch(progress_in_seconds) + if(-INFINITY to 100) + user << "It's a swirling mass of blackness." + if(100 to 250) + user << "It seems to be leading somewhere." + if(250 to INFINITY) + user << "Something is coming through!" + +/obj/structure/clockwork/massive/ratvar + name = "Ratvar, the Clockwork Justiciar" + desc = "What is what is what are what real what is all a lie all a lie it's all a lie why how can what is" + clockwork_desc = "Ratvar, the Clockwork Justiciar, your master eternal." + icon = 'icons/effects/512x512.dmi' + icon_state = "ratvar" + pixel_x = -248 + pixel_y = -248 + takes_damage = FALSE + var/mob/living/prey //Whoever Ratvar is chasing + var/clashing = FALSE //If Ratvar is FUCKING FIGHTING WITH NAR-SIE + +/obj/structure/clockwork/massive/ratvar/New() + ..() + SSobj.processing += src + world << "\"I AM FREE!\"" + ratvar_awakens = TRUE + spawn(50) + SSshuttle.emergency.request(null, 0.3) + +/obj/structure/clockwork/massive/ratvar/Destroy() + SSobj.processing -= src + world << "\"NO! I will not... be... banished... again...\"" + ratvar_awakens = FALSE + ..() + +/obj/structure/clockwork/massive/ratvar/process() + for(var/atom/A in range(7, src)) + A.ratvar_act() + if(clashing) //Doesn't move during a clash + return 0 + var/dir_to_step_in = pick(cardinal) + if(!prey) + var/list/meals = list() + for(var/mob/living/L in living_mob_list) + if(L.z == z && !is_servant_of_ratvar(L) && L.mind) + meals += L + if(meals.len) + prey = pick(meals) + prey << "\"You will do.\"\n\ + Something very large and very malevolent begins lumbering its way towards you..." + else + if(prob(10) || prey.stat == DEAD || is_servant_of_ratvar(prey) || prey.z != z) + prey << "\"How dull. Leave me.\"\n\ + You feel tremendous relief as a set of horrible eyes loses sight of you..." + prey = null + else + if(prob(75)) + dir_to_step_in = get_dir(src, prey) + for(var/i in 1 to 2) + loc = get_step(src, dir_to_step_in) + +/obj/structure/clockwork/massive/ratvar/narsie_act() + if(clashing) + return 0 + clashing = TRUE + world << "\"[pick("BLOOD GOD!!!", "NAR-SIE!!!", "AT LAST, YOUR TIME HAS COME!")]\"" + world << "\"Ratvar?! How?!\"" + for(var/obj/singularity/narsie/N in range(7, src)) + clash_of_the_titans(N) //IT'S TIME FOR THE BATTLE OF THE AGES + N.clashing = TRUE + break + return 1 + +/obj/structure/clockwork/massive/ratvar/proc/clash_of_the_titans(obj/singularity/narsie/narsie) //IT'S TIME FOR A BATTLE OF THE ELDER GODS + var/winner = "Undeclared" + var/base_victory_chance = 0 + while(TRUE) + world << 'sound/magic/clockwork/ratvar_attack.ogg' + sleep(5.2) + for(var/mob/M in mob_list) + if(M.client) + M.client.color = rgb(150, 100, 0) + spawn(1) + M.client.color = initial(M.client.color) + shake_camera(M, 4, 3) + var/r_success_modifier = (ticker.mode.servants_of_ratvar.len * 2) //2% for each cultist + var/n_success_modifier = (ticker.mode.cult.len * 2) + if(prob(base_victory_chance + r_success_modifier)) + winner = "Ratvar" + break + sleep(rand(2,5)) + world << 'sound/magic/clockwork/narsie_attack.ogg' + sleep(7.4) + for(var/mob/M in mob_list) + if(M.client) + M.client.color = rgb(200, 0, 0) + spawn(1) + M.client.color = initial(M.client.color) + shake_camera(M, 4, 3) + if(prob(base_victory_chance + n_success_modifier)) + winner = "Nar-Sie" + break + base_victory_chance++ //The clash has a higher chance of resolving each time both gods attack one another + switch(winner) + if("Ratvar") + world << "\"[pick("DIE! DIE! DIE!", "RAAAAAAAAAAAAAHH!", "FILTH!!!", "SUFFER!!!", "EBG SBE PRAGHEVRF NF V UNIR!!")]\"" + world << "\"[pick("Nooooo...", "Not die. To y-", "Die. Ratv-", "Sas tyen re-")]\"" + world << 'sound/magic/clockwork/anima_fragment_attack.ogg' + world << 'sound/magic/demon_dies.ogg' + clashing = FALSE + qdel(narsie) + return 1 + if("Nar-Sie") + world << "\"[pick("Ha.", "Ra'sha fonn dest.", "You fool. To come here.")]\"" //Broken English + world << 'sound/magic/demon_attack1.ogg' + world << 'sound/magic/clockwork/anima_fragment_death.ogg' + narsie.clashing = FALSE + qdel(src) + return 1 + +/atom/proc/ratvar_act() //Called on everything near Ratvar + return + +/turf/closed/wall/ratvar_act() //Walls and floors are changed to their clockwork variants + if(prob(20)) + ChangeTurf(/turf/closed/wall/clockwork) +/turf/open/floor/ratvar_act() + if(prob(20)) + ChangeTurf(/turf/open/floor/clockwork) + +/obj/structure/window/ratvar_act() //Windows turn yellow + color = rgb(75, 53, 0) + +/mob/living/ratvar_act() + add_servant_of_ratvar(src) + +/mob/dead/observer/ratvar_act() //Ghosts flash yellow for a second + var/old_color = color + color = rgb(75, 53, 0) //A nice brassy yellow + animate(src, color = old_color, time = 10) diff --git a/code/game/gamemodes/clock_cult/clock_scripture.dm b/code/game/gamemodes/clock_cult/clock_scripture.dm new file mode 100644 index 00000000000..98462c9dc26 --- /dev/null +++ b/code/game/gamemodes/clock_cult/clock_scripture.dm @@ -0,0 +1,1016 @@ +/* +Tiers and Requirements + +Pieces of scripture require certain follower counts, contruction value, and active caches in order to recite. +Drivers: Unlocked by default +Scripts: 5 servants and a cache +Applications: 8 servants, 3 caches, and 50 CV +Revenant: 10 servants and 100 CV +Judgement: 10 servants, 100 CV, and any existing AIs are converted or destroyed +*/ + +/datum/clockwork_scripture + var/name = "scripture" + var/desc = "Ancient Ratvarian lore. This piece seems particularly mundane." + var/list/invocations = list() //Spoken over time in the ancient language of Ratvar. See clock_unsorted.dm for more details on the language and how to make it. + var/channel_time = 10 //In deciseconds, how long a ritual takes to chant + var/list/required_components = list("belligerent_eye" = 0, "vanguard_cogwheel" = 0, "guvax_capacitor" = 0, "replicant_alloy" = 0, "hierophant_ansible" = 0) //Components required + var/list/consumed_components = list("belligerent_eye" = 0, "vanguard_cogwheel" = 0, "guvax_capacitor" = 0, "replicant_alloy" = 0, "hierophant_ansible" = 0) //Components consumed + var/obj/item/clockwork/slab/slab //The parent clockwork slab + var/mob/living/invoker //The slab's holder + var/whispered = FALSE //If the invocation is whispered rather than spoken aloud + var/consumed_component_override = FALSE //If consumed components are unique to a scripture regardless of tier + var/usage_tip = "This piece seems to serve no purpose and is a waste of components." //A generalized tip that gives advice on a certain scripture + var/invokers_required = 1 //How many people are required, assuming that a scripture requires multiple + var/multiple_invokers_used = FALSE //If scripture requires more than one invoker + var/multiple_invokers_optional = FALSE //If scripture can have multiple invokers to bolster its effects + var/tier = SCRIPTURE_PERIPHERAL //The scripture's tier + +/datum/clockwork_scripture/New() + ..() + if(tier < SCRIPTURE_DRIVER && !consumed_component_override) //Anything above a driver consumes components + consumed_components = required_components + +/datum/clockwork_scripture/proc/run_scripture() + if(can_recite() && check_special_requirements()) + slab.busy = "Invocation ([name]) in progress" + if(recital() && check_special_requirements()) + slab.busy = null + if(scripture_effects() && check_special_requirements() && (!ratvar_awakens && !slab.no_cost)) + for(var/i in required_components) + if(tier <= SCRIPTURE_DRIVER || consumed_component_override) + if(clockwork_component_cache[i] >= consumed_components[i]) //Draw components from the global cache first + clockwork_component_cache[i] -= consumed_components[i] + else + slab.stored_components[i] -= consumed_components[i] + else + if(clockwork_component_cache[i] >= required_components[i]) + clockwork_component_cache[i] -= required_components[i] + else + slab.stored_components[i] -= required_components[i] + if(slab) + slab.busy = null + qdel(src) + return 1 + +/datum/clockwork_scripture/proc/can_recite() //If the words can be spoken + if(!ticker || !ticker.mode || !slab || !invoker) + return 0 + if(!invoker.can_speak_vocal()) + invoker << "You are unable to speak the words of the scripture!" + return 0 + if(!ratvar_awakens && !slab.no_cost) + for(var/i in required_components) + if(slab.stored_components[i] < required_components[i] && clockwork_component_cache[i] < required_components[i]) + invoker << "You lack the components to recite this piece of scripture! Check Recollection for component costs." + return 0 + if(multiple_invokers_used && !multiple_invokers_optional) + var/nearby_servants = 0 + for(var/mob/living/L in range(1, invoker)) + nearby_servants++ + if(nearby_servants < invokers_required) + invoker << "There aren't enough servants nearby ([nearby_servants]/[invokers_required])!" + return 0 + return 1 + +/datum/clockwork_scripture/proc/check_special_requirements() //Special requirements for scriptures, checked three times during invocation + return 1 + +/datum/clockwork_scripture/proc/recital() //The process of speaking the words + if(!channel_time && invocations.len) + if(multiple_invokers_used) + for(var/mob/living/L in range(1, invoker)) + if(is_servant_of_ratvar(L)) + for(var/invocation in invocations) + if(!whispered) + L.say(invocation) + else + L.whisper(invocation) + else + for(var/invocation in invocations) + if(!whispered) + invoker.say(invocation) + else + invoker.whisper(invocation) + invoker << "You [channel_time <= 0 ? "recite" : "begin reciting"] a piece of scripture entitled \"[name]\"." + if(!channel_time) + return 1 + for(var/invocation in invocations) + if(!do_after(invoker, channel_time / invocations.len, target = invoker)) + slab.busy = null + return 0 + if(!whispered) + invoker.say(invocation) + else + invoker.whisper(invocation) + return 1 + +/datum/clockwork_scripture/proc/scripture_effects() //The actual effects of the recital after its conclusion + + + +/datum/clockwork_scripture/channeled //Channeled scripture begins instantly but runs constantly + var/chant_invocation = "NLL YZNB" //"AYY LMAO" + var/chant_amount = 5 //Times the chant is spoken + var/chant_interval = 10 //Amount of deciseconds between times the chant is actually spoken aloud + +/datum/clockwork_scripture/channeled/scripture_effects() + for(var/i in 1 to chant_amount) + if(!can_recite()) + break + if(!do_after(invoker, chant_interval, target = invoker)) + break + if(!whispered) + invoker.say(chant_invocation) + else + invoker.whisper(chant_invocation) + chant_effects() + if(invoker && slab) + invoker << "You cease your chant." + chant_end_effects() + return 1 + +/datum/clockwork_scripture/channeled/proc/chant_effects() //The chant's periodic effects +/datum/clockwork_scripture/channeled/proc/chant_end_effects() //The chant's effect upon ending + + + +/datum/clockwork_scripture/create_object //Creates an object at the invoker's feet + var/object_path = /obj/item/clockwork //The path of the object created + var/creator_message = "You create a meme." //Shown to the invoker + var/observer_message + +/datum/clockwork_scripture/create_object/scripture_effects() + if(creator_message && observer_message) + invoker.visible_message(observer_message, creator_message) + else if(creator_message) + invoker << creator_message + new object_path (get_turf(invoker)) + return 1 + + + +/datum/clockwork_scripture/targeted //Accepts a name and affects that target + var/target_name //The inputted name, used to find targets + var/mob/living/target //The target mob + var/affects_servants = FALSE //If servants are valid targets + +/datum/clockwork_scripture/targeted/check_special_requirements() + while(!target) + target_name = stripped_input(invoker, "Enter the actual name of a target (case-sensitive).", name) + if(!target_name) + return 0 + target = find_target() + if(target) + if(!target.mind) + invoker << "[target] has no mind!" + target = null + if(target.stat) + invoker << "[target] is dead or unconscious!" + target = null + if(is_servant_of_ratvar(target) && !affects_servants) + invoker << "[target] is a servant, and [name] cannot target servants!" + target = null + return 1 + +/datum/clockwork_scripture/targeted/proc/find_target() + for(var/mob/living/L in living_mob_list) + if(L.real_name == target_name) + if(is_servant_of_ratvar(L) && !affects_servants) + return 0 + return L + return 0 + +///////////// +// DRIVERS // +///////////// + +/datum/clockwork_scripture/channeled/belligerent //Belligerent: Channeled for up to ten times over thirty seconds. Forces non-servants that can hear the chant to walk. Nar-Sian cultists are burned. + name = "Belligerent" + desc = "Forces all nearby non-servants to walk rather than run. Chanted every three seconds for up to thirty seconds." + chant_invocation = "Chav'fu gurve oyva-qarff!" //"Punish their blindness!" + chant_amount = 10 + chant_interval = 30 + required_components = list("belligerent_eye" = 1) + usage_tip = "Useful for crowd control in a populated area and disrupting mass movement." + tier = SCRIPTURE_DRIVER + +/datum/clockwork_scripture/channeled/belligerent/chant_effects() + for(var/mob/living/L in hearers(7, invoker)) + if(!is_servant_of_ratvar(L) && L.m_intent != "walk") + if(!iscultist(L)) + L << "Your legs feel heavy and weak!" + L.m_intent = "walk" + else + L << "Your legs burn with pain!" + L.m_intent = "walk" + L.apply_damage(5, BURN, "l_leg") + L.apply_damage(5, BURN, "r_leg") + + + +/datum/clockwork_scripture/create_object/sigil_of_transgression //Sigil of Transgression: Creates a sigil of transgression. + name = "Sigil of Transgression" + desc = "Wards a tile with a sigil. The next person to cross the sigil will be smitten and unable to move. Nar-Sian cultists are stunned altogether." + invocations = list("Qvivavgl, qnmmyr...", "...gubfr jub gerffcnff'urer!") //"Divinity, dazzle those who trespass here!" + channel_time = 50 + required_components = list("belligerent_eye" = 2) + consumed_components = list("belligerent_eye" = 1) + whispered = TRUE + object_path = /obj/effect/clockwork/sigil/transgression + creator_message = "A sigil silently appears below you. The next non-servant to cross it will be immobilized." + usage_tip = "The sigil, while fairly powerful in its stun, does not induce muteness in its victim." + tier = SCRIPTURE_DRIVER + + + +/datum/clockwork_scripture/vanguard //Vanguard: Provides thirty seconds of stun immunity. At the end of the thirty seconds, all stuns absorbed are stacked on the invoker. + name = "Vanguard" + desc = "Provides thirty seconds of stun immunity. At the end of the thirty seconds, the invoker is stunned for the equivalent of how many stuns they absorbed. Excessive absorption will cause unconsciousness." + invocations = list("Fuvryq zr...", "...sebz qnexarff!") //"Shield me from darkness!" + channel_time = 30 + required_components = list("vanguard_cogwheel" = 1) + usage_tip = "Your slab will be unusable while it is shielding you from stuns." + tier = SCRIPTURE_DRIVER + +/datum/clockwork_scripture/vanguard/scripture_effects() + for(var/obj/item/clockwork/slab/S in invoker.GetAllContents()) + S.busy = "Vanguard in progress" //To prevent circumventing the Vanguard by carrying multiple slabs + invoker.stun_absorption = TRUE + invoker.visible_message("[invoker] begins to faintly glow!", "You will absorb all stuns for the next thirty seconds.") + sleep(300) + if(!invoker) + return 0 + invoker.stun_absorption = FALSE + if(invoker.stun_absorption_count && invoker.stat != DEAD) + invoker.Stun(invoker.stun_absorption_count) + invoker.Weaken(invoker.stun_absorption_count) + invoker << "The weight of the vanguard's protection crashes down upon you!" + if(invoker.stun_absorption_count >= 25) + invoker << "You faint from the exertion!" + invoker.Paralyse(invoker.stun_absorption_count * 1.5) + invoker.stun_absorption_count = 0 + for(var/obj/item/clockwork/slab/S in invoker.GetAllContents()) + S.busy = null + return 1 + + + +/datum/clockwork_scripture/sentinels_compromise //Sentinel's Compromise: Allows the invoker to select a nearby servant convert their brute and burn damage into half as much toxin damage. + name = "Sentinel's Compromise" + desc = "Heals all brute and burn damage on a nearby friendly cultist, but deals 50% of that amount as toxin damage." + invocations = list("Zraq gur jbhaqf-bs...", "...zl vasrevbe syrfu.") //"Mend the wounds of my inferior flesh." + channel_time = 30 + required_components = list("vanguard_cogwheel" = 2) + consumed_components = list("vanguard_cogwheel" = 1) + usage_tip = "You cannot target yourself with the Compromise." + tier = SCRIPTURE_DRIVER + +/datum/clockwork_scripture/sentinels_compromise/scripture_effects() + var/list/nearby_cultists = list() + for(var/mob/living/C in range(7, invoker)) + if(C == invoker) + continue + if(C.stat != DEAD && is_servant_of_ratvar(C)) + nearby_cultists += C + if(!nearby_cultists.len) + invoker << "There are no eligible cultists nearby!" + return 0 + var/mob/living/L = input(invoker, "Choose a fellow servant to heal.", name) as null|anything in nearby_cultists + if(!L || !invoker || !invoker.canUseTopic(slab)) + return 0 + if(!L.getBruteLoss() && !L.getFireLoss()) + invoker << "[L] is not burned or bruised!" + return 0 + L.adjustToxLoss(L.getBruteLoss() / 2) + L.adjustToxLoss(L.getFireLoss() / 2) + L.adjustBruteLoss(-L.getBruteLoss()) + L.adjustFireLoss(-L.getFireLoss()) + invoker << "You bathe [L] in the light of Ratvar!" + L.visible_message("A white light washes over [L], mending their bruises and burns!", \ + "You feel Ratvar's energy healing your wounds, but a deep nausea overcomes you!") + playsound(get_turf(L), 'sound/magic/Staff_Healing.ogg', 50, 1) + return 1 + + + +/datum/clockwork_scripture/guvax //Guvax: Converts anyone adjacent to the invoker after completion. + name = "Guvax" + desc = "Enlists all nearby unshielded creatures into servitude to Ratvar. Also purges holy water from nearby servants." + invocations = list("Rayvtugra guvf urngura!", "Nyy ner vafrpgf orsber Ratvar!", "Chetr nyy hageh'guf naq ubabe Ratvar.") + channel_time = 60 + required_components = list("guvax_capacitor" = 1) + usage_tip = "Only works on those in melee range and does not penetrate loyalty implants. Much more efficient than a Sigil of Submission." + tier = SCRIPTURE_DRIVER + +/datum/clockwork_scripture/guvax/scripture_effects() + for(var/mob/living/L in hearers(1, get_turf(invoker))) //Affects silicons + if(!is_servant_of_ratvar(L)) + add_servant_of_ratvar(L) + else + if(L.reagents && L.reagents.has_reagent("holywater")) + L.reagents.remove_reagent("holywater", 1000) + L << "Ratvar's light flares, banishing the darkness. Your devotion remains intact!" + for(var/mob/living/silicon/ai/A in range(1, get_turf(invoker))) //Seems necessary because AIs don't count as hearers for some reason + add_servant_of_ratvar(A) + return 1 + + + +/datum/clockwork_scripture/create_object/sigil_of_submission //Sigil of Submission: Creates a sigil of submission. + name = "Sigil of Submission" + desc = "Places a subtle sigil that will enslave any valid beings standing on it after a time." + invocations = list("Qvivavgl, rayvtugra...", "...gubfr jub gerfcnff urer!") + channel_time = 60 + required_components = list("guvax_capacitor" = 2) + consumed_components = list("guvax_capacitor" = 1) + whispered = TRUE + object_path = /obj/effect/clockwork/sigil/submission + creator_message = "A sigil appears below you. The next non-servant to cross it will be enslaved after a brief time if they do not move." + usage_tip = "This should not be your primary conversion method - use Guvax for that. It is advantageous as a trap, however, as it will transmit the name of the newly-converted." + tier = SCRIPTURE_DRIVER + + + +/datum/clockwork_scripture/replicant //Replicant: Creates a new clockwork slab. Doesn't use create_object because of its unique behavior. + name = "Replicant" + desc = "Creates a new clockwork slab." + invocations = list("Z`rgny, orpbzr terngre!") + channel_time = 0 + required_components = list("replicant_alloy" = 1) + consumed_components = list("replicant_alloy" = 1) //People were spamming slabs to get infinite components. You chose this. + whispered = TRUE + usage_tip = "This is inefficient as a way to produce components, as it consumes them in the first place." + tier = SCRIPTURE_DRIVER + +/datum/clockwork_scripture/replicant/scripture_effects() + invoker << "You copy a piece of replicant alloy and command it into a new slab." //No visible message, for stealth purposes + var/obj/item/clockwork/slab/S = new(get_turf(invoker)) + invoker.put_in_hands(S) //Put it in your hands if possible + return 1 + + + +/datum/clockwork_scripture/create_object/tinkerers_cache //Tinkerer's Cache: Creates a tinkerer's cache. + name = "Tinkerer's Cache" + desc = "Forms a cache that can store an infinite amount of components. All caches are linked." + invocations = list("Ohvyqva...", "...n qvfcrafre!") + channel_time = 40 + required_components = list("replicant_alloy" = 2) + consumed_components = list("replicant_alloy" = 1) + object_path = /obj/structure/clockwork/cache + creator_message = "You form a tinkerer's cache, which is capable of storing components." + observer_message = "A hollow brass spire rises and begins to blaze!" + usage_tip = "Slabs will draw components from the global cache before the slab's own repositories, making caches very efficient." + tier = SCRIPTURE_DRIVER + + + +/datum/clockwork_scripture/create_object/wraith_spectacles //Wraith Spectacles: Creates a pair of wraith spectacles. + name = "Wraith Spectacles" + desc = "Fabricates a pair of glasses that provides true sight but quickly damage vision." + invocations = list("Y'vsg gur fpnyrf sebz zl rl-rf.") + channel_time = 0 + required_components = list("hierophant_ansible" = 1) + consumed_components = list("hierophant_ansible" = 2) + whispered = TRUE + object_path = /obj/item/clothing/glasses/wraith_spectacles + creator_message = "You form a pair of wraith spectacles, which will grant true sight when worn." + usage_tip = "\"True sight\" means that you are able to see through walls and in darkness." + tier = SCRIPTURE_DRIVER + +///////////// +// SCRIPTS // +///////////// + +/datum/clockwork_scripture/create_object/judicial_visor //Judicial Visor: Creates a judicial visor. + name = "Judicial Visor" + desc = "Forms a visor that, when worn, will grant the ability to form a flame in your hand that can be activated at an area to smite it, stunning and damaging the nonfaithful." + invocations = list("Tenag zr gur synzrf-bs Ratvar!") + channel_time = 0 + required_components = list("belligerent_eye" = 1, "vanguard_cogwheel" = 1) + whispered = TRUE + object_path = /obj/item/clothing/glasses/judicial_visor + creator_message = "You form a judicial visor, which is capable of smiting the unworthy." + usage_tip = "The visor has a thirty-second cooldown once used. In addition, the flame itself is a powerful melee weapon." + tier = SCRIPTURE_SCRIPT + + + +/datum/clockwork_scripture/create_object/ocular_warden //Ocular Warden: Creates an ocular warden. + name = "Ocular Warden" + desc = "Forms an automatic short-range turret that deals low sustained damage to the unenlightened in its range." + invocations = list("Thneqvnaf...", "...bs gur Ratvar...", "...qrsraq!") + channel_time = 150 + required_components = list("belligerent_eye" = 1, "replicant_alloy" = 1) + object_path = /obj/structure/clockwork/ocular_warden + creator_message = "You form an ocular warden, which will focus its searing gaze upon nearby unenlightened." + observer_message = "A brass eye takes shape and slowly rises into the air, its red iris glaring!" + usage_tip = "Although powerful, the warden is very weak and should optimally be placed behind barricades." + tier = SCRIPTURE_SCRIPT + + + +/datum/clockwork_scripture/channeled/volt_void //Volt Void: Channeled for up to thirty times over thirty seconds. Consumes power from most power storages and deals slight burn damage to the invoker. + name = "Volt Void" //Alternative name: "On all levels but physical, I am a power sink" + desc = "Drains energy from nearby power sources, dealing slight fire damage depending on power consumed. Channeled every second for a maximum of thirty seconds." + chant_invocation = "Qenj punetr gb guvf furyy!" + chant_amount = 30 + chant_interval = 10 + required_components = list("belligerent_eye" = 1, "hierophant_ansible" = 1) + usage_tip = "Very powerful against cyborgs and can drain a power cell in seconds." + tier = SCRIPTURE_SCRIPT + +/datum/clockwork_scripture/channeled/volt_void/chant_effects() + playsound(invoker, 'sound/effects/EMPulse.ogg', 50, 1) + var/power_drained = 0 + for(var/obj/machinery/power/apc/A in view(7, invoker)) + if(A.cell.charge) + playsound(A, "sparks", 50, 1) + flick("apc-spark", A) + A.cell.charge = max(0, A.cell.charge - 500) //Better than a power sink! + power_drained += 500 + if(!A.cell.charge && !A.shorted) + A.shorted = 1 + A.visible_message("The [A.name]'s screen blurs with static.") + for(var/obj/machinery/power/smes/S in view(7, invoker)) + if(S.charge) + S.charge = max(0, S.charge - 200) + power_drained += 200 + if(!S.charge && !S.panel_open) + S.panel_open = TRUE + S.update_icon() + var/datum/effect_system/spark_spread/spks = new(get_turf(S)) + spks.set_up(10, 0, get_turf(S)) + spks.start() + qdel(spks) + S.visible_message("[S]'s panel flies open with a flurry of sparks.") + for(var/obj/machinery/light/L in view(7, invoker)) + playsound(L, 'sound/effects/light_flicker.ogg', 50, 1) + L.flicker(2) + power_drained += 5 + for(var/mob/living/silicon/robot/R in view(7, invoker)) + if(!is_servant_of_ratvar(R) && R.cell.charge) + R.cell.charge = max(0, R.cell.charge - 500) + R << "ERROR: Power loss detected!" + var/datum/effect_system/spark_spread/spks = new(get_turf(R)) + spks.set_up(3, 0, get_turf(R)) + spks.start() + qdel(spks) + power_drained += 500 + if(power_drained) + invoker.visible_message("[invoker] flares a brilliant orange!", "You feel the warmth of electricity running into your body.") + invoker.adjustFireLoss(power_drained / 200) //One point of burn damage for every (approximate) 200W drained - can be fatal if not careful + return 1 + + + +/datum/clockwork_scripture/create_object/clockwork_proselytizer //Clockwork Proselytizer: Creates a clockwork proselytizer. + name = "Clockwork Proselytizer" + desc = "Forms a device that, when used on certain objects, converts them into their Ratvarian equivalents. It requires replicant alloys to function." + invocations = list("Jvgu guvf qrivpr, uvf cerfrapr funyy or znqr xabja.") + channel_time = 0 + required_components = list("vanguard_cogwheel" = 1, "replicant_alloy" = 1) + whispered = TRUE + object_path = /obj/item/clockwork/clockwork_proselytizer/preloaded + creator_message = "You form a clockwork proselytizer, which is already pre-loaded with a small amount of replicant alloy." + usage_tip = "Clockwork walls cause adjacent tinkerer's caches to generate components passively, making them a vital tool. Clockwork floors heal servants standing on them." + tier = SCRIPTURE_SCRIPT + + + +/datum/clockwork_scripture/fellowship_armory //Fellowship Armory: Arms the invoker and nearby servants with Ratvarian armor. + name = "Fellowship Armory" + desc = "Equips the invoker and any nearby servants with Ratvarian armor. This armor provides high melee resistance but a weakness to lasers." + invocations = list("Fuvryq zr...", "...jvgu gur sentzragf...", "...bs Ratvar!") + channel_time = 100 + required_components = list("vanguard_cogwheel" = 1, "hierophant_ansible" = 1) + usage_tip = "Before using, advise adjacent allies to remove their helmets, external suits, and shoes." + tier = SCRIPTURE_SCRIPT + +/datum/clockwork_scripture/fellowship_armory/scripture_effects() + for(var/mob/living/carbon/C in range(1, invoker)) + if(!is_servant_of_ratvar(C)) + continue + C.visible_message("Strange armor appears on [C]!", "A bright shimmer runs down your body, equipping you with Ratvarian armor.") + playsound(C, 'sound/magic/clockwork/fellowship_armory.ogg', 50, 1) + C.equip_to_slot_or_del(new/obj/item/clothing/head/helmet/clockwork(null), slot_head) + C.equip_to_slot_or_del(new/obj/item/clothing/suit/armor/clockwork(null), slot_wear_suit) + C.equip_to_slot_or_del(new/obj/item/clothing/shoes/clockwork(null), slot_shoes) + return 1 + + + +/datum/clockwork_scripture/function_call //Function Call: Grants the invoker the ability to call forth a Ratvarian spear that deals significant damage to silicons. + name = "Function Call" + desc = "Grants the invoker the ability to call forth a powerful Ratvarian spear that will deal significant damage to Nar-Sie's dogs in addition to silicon lifeforms. \ + It will vanish several minutes after being called." + invocations = list("Tenag zr...", "...gur zvtug-bs oenff!") + channel_time = 20 + required_components = list("vanguard_cogwheel" = 1, "guvax_capacitor" = 1) + whispered = TRUE + usage_tip = "The spear will snap in two when thrown but do massive damage." + tier = SCRIPTURE_SCRIPT + +/datum/clockwork_scripture/function_call/check_special_requirements() + if(!invoker.verbs & /mob/living/carbon/human/proc/function_call) + invoker << "You have already bound a Ratvarian spear to yourself!" + return 0 + return ishuman(invoker) + +/datum/clockwork_scripture/function_call/scripture_effects() + invoker.visible_message("A shimmer of yellow light infuses [invoker]!", \ + "You bind a Ratvarian spear to yourself. Use the \"Function Call\" verb in your Clockwork tab to call it forth.") + invoker.verbs += /mob/living/carbon/human/proc/function_call + return 1 + + + +/datum/clockwork_scripture/spatial_gateway + name = "Spatial Gateway" + desc = "Tears open a miniaturized gateway in spacetime to any conscious servant that can transport objects or creatures to its destination. \ + Each servant assisting in the invocation adds uses and duration to the gateway. Lasts for ten or more seconds or until it is out of uses." + invocations = list("Gryrcbegre...", "...pbzva evtug-hc!") + channel_time = 80 + required_components = list("replicant_alloy" = 1, "hierophant_ansible" = 1) + multiple_invokers_used = TRUE + multiple_invokers_optional = TRUE + usage_tip = "The gateway is strictly one-way and will only allow things through the invoker's portal." + tier = SCRIPTURE_SCRIPT + +/datum/clockwork_scripture/spatial_gateway/check_special_requirements() + var/other_servants = 0 + for(var/mob/living/L in living_mob_list) + if(L.z == invoker.z && is_servant_of_ratvar(L) && !L.stat != DEAD) + other_servants++ + if(!other_servants) + invoker << "There are no other conscious servants on your z-level!" + return 0 + return 1 + +/datum/clockwork_scripture/spatial_gateway/scripture_effects() + var/portal_uses = 0 + var/duration = 0 + for(var/mob/living/L in range(1, invoker)) + if(!L.stat && is_servant_of_ratvar(L)) + portal_uses++ + duration += 20 //2 seconds + if(ratvar_awakens) + portal_uses = max(portal_uses, 100) //Very powerful if Ratvar has been summoned + duration = max(duration, 30) + var/list/possible_servants = list() + for(var/mob/living/L in living_mob_list) + if(!L.stat && is_servant_of_ratvar(L) && !L.Adjacent(invoker) && L != invoker) //People right next to the invoker can't be portaled to, for obvious reasons + possible_servants += L + if(!possible_servants.len) + invoker << "There are no other eligible servants for teleportation!" + return 0 + var/mob/living/chosen_servant = input(invoker, "Choose a servant to form a rift to.", "Spatial Gateway") as null|anything in possible_servants + if(!chosen_servant || !invoker.canUseTopic(slab)) + return 0 + invoker.visible_message("The air in front of [invoker] ripples before suddenly tearing open!", \ + "With a word, you rip open a one-way rift to [chosen_servant]. It will last for [duration / 10] seconds and has [portal_uses] use[portal_uses > 1 ? "s" : ""].") + var/obj/effect/clockwork/spatial_gateway/S1 = new(get_step(invoker, invoker.dir)) + var/obj/effect/clockwork/spatial_gateway/S2 = new(get_step(chosen_servant, chosen_servant.dir)) + + //Set up the portals now that they've spawned + S1.linked_gateway = S2 + S2.linked_gateway = S1 + S1.sender = TRUE + S2.sender = FALSE + S1.lifetime = duration + S2.lifetime = duration + S1.uses = portal_uses + S2.uses = portal_uses + S2.visible_message("The air in front of [chosen_servant] ripples before suddenly tearing open!") + return 1 + + + +/datum/clockwork_scripture/create_object/soul_vessel //Soul Vessel: Creates a soul vessel + name = "Soul Vessel" + desc = "Forms an ancient positronic brain with an overriding directive to serve Ratvar." + invocations = list("Ureq'gur fbhyf-bs gur oynf curz-bhf qnzarq!") + channel_time = 0 + required_components = list("replicant_alloy" = 1, "guvax_capacitor" = 1) + whispered = TRUE + object_path = /obj/item/device/mmi/posibrain/soul_vessel + creator_message = "You form a soul vessel, which immediately begins drawing in the damned." + usage_tip = "The vessel functions as a servant for tier unlocking but not for invocation." + tier = SCRIPTURE_SCRIPT + + + +/datum/clockwork_scripture/break_will //Break Will: Deals minor brain damage and destroys the loyalty implants of nearby humans + name = "Break Will" + desc = "Deals minor brain damage and disables loyalty implants of everyone adjacent to the invoker." + invocations = list("Lbh ner jrnx.", "Lbh ner nyernql qrnq.", "Gurl jba'g fnir lbh.") + channel_time = 30 + required_components = list("belligerent_eye" = 1, "guvax_capacitor" = 1) + usage_tip = "Extremely fast invocation time." + tier = SCRIPTURE_SCRIPT + +/datum/clockwork_scripture/scripture_effects() + for(var/mob/living/carbon/human/H in range(1, invoker)) + if(is_servant_of_ratvar(H) || !isloyal(H)) + continue + H.visible_message("[H] visibly trembles!", \ + "The words invoke a horrible fear deep in your being. Your loyalty to Nanotrasen falls away as you see how weak they truly are.") + H.adjustBrainLoss(5) + for(var/obj/item/weapon/implant/loyalty/L in H) + if(L.implanted) + qdel(L) + +////////////////// +// APPLICATIONS // +////////////////// + +/datum/clockwork_scripture/create_object/anima_fragment //Anima Fragment: Creates an empty anima fragment + name = "Anima Fragment" + desc = "Creates a large shell fitted for soul vessels. The result is a powerful construct with low damage tolerance but exceptional melee power." + invocations = list("Pnyy sbegu...", "...gur fbyqvref-bs Nezbere.") + channel_time = 50 + required_components = list("belligerent_eye" = 3, "guvax_capacitor" = 1, "replicant_alloy" = 1) + object_path = /obj/structure/clockwork/anima_fragment + creator_message = "You form an anima fragment, a powerful soul vessel receptable." + observer_message = "The slab disgorges a puddle of black metal that expands and forms into a strange shell!" + usage_tip = "Useless without a soul vessel and should not be created without one." + tier = SCRIPTURE_APPLICATION + + + +/datum/clockwork_scripture/create_object/sigil_of_transmission + name = "Sigil of Transmission" + desc = "Scribes an almost-invisible sigil below the invoker. This sigil will transmit anything it hears over the hierophant network." + invocations = list("Qvivavgl...", "...hairvy gurgehgu!") + channel_time = 50 + required_components = list("belligerent_eye" = 1, "vanguard_cogwheel" = 3, "hierophant_ansible" = 1) + whispered = TRUE + object_path = /obj/effect/clockwork/sigil/transmission + creator_message = "A sigil silently appears below you. It will automatically transmit anything it hears over the hierophant network." + usage_tip = "Useful for eavesdropping or monitoring certain areas." + tier = SCRIPTURE_APPLICATION + + + +/datum/clockwork_scripture/memory_allocation //Memory Allocation: Finds a willing ghost and makes them into a clockwork marauders for the invoker. + name = "Memory Allocation" + desc = "Reserves a section of your brain to a second consciousness and fills this space with a clockwork marauder's essence. Slow but powerful, marauders serve a similar purpose to the alien \ + holoparasites employed by the Syndicate - they live inside of their host and are commanded to defend them. However, unlike holoparasites, marauders cannot leave their host at will and must \ + instead be called forth by the user, who does so by calling the marauder's name (the marauder may enter their host at will and do not need the host's input). Marauders themselves are \ + invincible but are governed by a quirk known as fatigue. High fatigue slows down the marauder and makes them weaker, with lower fatigue doing the opposite. If a certain fatigue \ + threshold is reached, the marauder is forced back into their host and must recuperate before being called forth again. Fatigue accumulates passively while the marauder is deployed and \ + increases at a massive rate if the marauder is not near their host. It will heal itself at a fairly rapid rate while the marauder is within their host." //WALL O' TEXT HO, CAP'N! + invocations = list("Pnyy sbegu...", "gur qrsraqref-bs Inath-Neq.") + channel_time = 100 + required_components = list("belligerent_eye" = 1, "vanguard_cogwheel" = 1, "guvax_capacitor" = 3) + usage_tip = "Marauders are useful as personal bodyguards and frontline warriors, although they do little damage." + tier = SCRIPTURE_APPLICATION + +/datum/clockwork_scripture/memory_allocation/check_special_requirements() + for(var/mob/living/simple_animal/hostile/clockwork_marauder/M in living_mob_list) + if(M.host == invoker) + invoker << "You can only house one marauder at a time!" + return 0 + return 1 + +/datum/clockwork_scripture/memory_allocation/scripture_effects() + return create_marauder() + +/datum/clockwork_scripture/memory_allocation/proc/create_marauder() + if(!can_recite()) + return 0 + invoker.visible_message("A yellow tendril appears from [invoker]'s [slab.name] and impales itself in their forehead!", \ + "A tendril flies from [slab] into your forehead. You begin waiting while it painfully rearranges your thought pattern...") + invoker.notransform = TRUE //Vulnerable during the process + slab.busy = "Thought modification in process" + if(!do_after(invoker, 50, target = invoker)) + invoker.visible_message("The tendril, covered in blood, retracts from [invoker]'s head and back into the [slab.name]!", \ + "Total agony overcomes you as the tendril is forced out early!") + invoker.notransform = FALSE + invoker.Stun(5) + invoker.Weaken(5) + invoker.apply_damage(10, BRUTE, "head") + slab.busy = null + return 0 + invoker.notransform = FALSE + slab.busy = null + var/list/marauder_candidates = get_candidates(ROLE_SERVANT_OF_RATVAR) + if(!marauder_candidates.len) + invoker.visible_message("The tendril retracts from [invoker]'s head, sealing the entry wound as it does so!", \ + "The tendril was unsuccessful! Perhaps you should try again another time.") + return 0 + var/client/new_marauder = pick(marauder_candidates) + var/mob/living/simple_animal/hostile/clockwork_marauder/M = new(invoker) + M.client = new_marauder + M.host = invoker + M << M.playstyle_string + M << "Your true name is \"[M.true_name]\". You can change this once by using the Change True Name verb in your Marauder tab." + add_servant_of_ratvar(M, TRUE) + invoker.visible_message("The tendril retracts from [invoker]'s head, sealing the entry wound as it does so!", \ + "The procedure was successful! [M.true_name], a clockwork marauder, has taken up residence in your mind. Communicate with it via the \"Linked Minds\" ability in the \ + Clockwork tab.") + invoker.verbs += /mob/living/proc/talk_with_marauder + return 1 + + + +/datum/clockwork_scripture/targeted/justiciars_gavel //Justiciar's Gavel: Deals extreme but temporary brain damage to a target with the inputted name and knocks them out for a brief time. + name = "Justiciar's Gavel" + desc = "Deals massive brain damage to and knocks out a target with the inputted name. This brain damage will slowly recover itself." + invocations = list("Guvf urngura...", "...unf jebatrq lbh!") + channel_time = 40 + required_components = list("belligerent_eye" = 3, "guvax_capacitor" = 1, "hierophant_ansible" = 1) + invokers_required = 3 + multiple_invokers_used = TRUE + usage_tip = "Also functions on silicon-based lifeforms, although it will not apply brain damage." + tier = SCRIPTURE_APPLICATION + +/datum/clockwork_scripture/targeted/justiciars_gavel/scripture_effects() + if(iscarbon(target)) + if(iscultist(target)) + target.visible_message("Blood sprays from a sudden wound on [target]'s head!", \ + "\"If you like wasting your own blood so much, pig, why don't you bathe in it?\"\n\ + An unbearable pain invades your mind, rupturing your head and wiping all thought.") + target.apply_damage(rand(20, 30), BRUTE, "head") + else + target.visible_message("[target]'s face falls lax, their eyes dimming.", \ + "\"I don't think you need that brain. Not like you use it anyway.\"\n\ + A savage pain invades your mind, driving out all conscious thought.") + target.adjustBrainLoss(200) + if(target.reagents) + target.reagents.add_reagent("mannitol", 25) //Enough to cure most of it but not all of it + target.Paralyse(10) + else if(issilicon(target)) + target.visible_message("[target] suddenly shuts down!", \ + "\"NOB ZVANG-BA! You disgust me, abomination of circuits and wires.\"\n\ + Factory reset sequence initiated by foreign signal. Entering standby mode and halting sequence.") + target.Weaken(10) + return 1 + + + +/datum/clockwork_scripture/create_object/interdiction_lens //Interdiction Lens: Creates a powerful obelisk that can perform a variety of powerful sabotages every five minutes. + name = "Interdiction Lens" + desc = "Creates a clockwork totem that can sabotage a variety of mechanical apparatus. Requires a lengthy recharge between uses." + invocations = list("Znl guvf boryvfx...", "...fuebhq gur snyfr fhaf!") + channel_time = 60 + required_components = list("belligerent_eye" = 1, "replicant_alloy" = 1, "hierophant_ansible" = 3) + object_path = /obj/structure/clockwork/interdiction_lens + creator_message = "You form an interdiction lens, which can disrupt machinery every few minutes." + observer_message = "A brass obelisk rises from the ground, a purple gem appearing in its center!" + invokers_required = 2 + multiple_invokers_used = TRUE + usage_tip = "Can disrupt telecommunications, disable all cameras, or disable all cyborgs." + tier = SCRIPTURE_APPLICATION + + + +/datum/clockwork_scripture/create_object/mending_motor //Mending Motor: Creates a prism that will quickly heal mechanical servants/clockwork structures and consume replicant alloy. + name = "Mending Motor" + desc = "Creates a mechanized prism that will rapidly repair damage to clockwork creatures, converted cyborgs, and clockwork structures. Requires replicant alloy to function." + invocations = list("Znl guvf boryvfx...", "...zraq bhe qragf naq fpengpurf!") + channel_time = 60 + required_components = list("vanguard_cogwheel" = 1, "guvax_capacitor" = 1, "replicant_alloy" = 3) + object_path = /obj/structure/clockwork/mending_motor/prefilled + creator_message = "You form a mending motor, which will consume replicant alloy to mend the wounds of mechanized servants." + observer_message = "An onyx prism forms in midair and sprouts tendrils to support itself!" + invokers_required = 2 + multiple_invokers_used = TRUE + usage_tip = "Powerful healing but somewhat inefficient." + tier = SCRIPTURE_APPLICATION + + + +/datum/clockwork_scripture/create_object/tinkerers_daemon //Tinkerer's Daemon: Creates a shell that can be attached to a tinkerer's cache to grant it passive component creation. + name = "Tinkerer's Daemon" + desc = "Forms a daemon shell that can be attached to a tinkerer's cache to add new components at a healthy rate. It will only function if it is outnumbered by servants in a ratio of 5:1." + invocations = list("Pbaf'gehpg, Ratvar cnegf...", "...lrg ubyq terngarff!") + channel_time = 40 + required_components = list("guvax_capacitor" = 1, "replicant_alloy" = 3, "hierophant_ansible" = 1) + object_path = /obj/item/clockwork/daemon_shell + creator_message = "You form a daemon shell. Attach it to a tinkerer's cache to increase its rate of production." + usage_tip = "Vital to increasing component generation." + tier = SCRIPTURE_APPLICATION + +////////////// +// REVENANT // +////////////// +//Revenant scriptures are different than any others. They are all very powerful, but also very costly and have drawbacks. This might be a very long invocation time or a very high component cost. + +/datum/clockwork_scripture/invoke_nezbere //Invoke Nezbere, the Brass Eidolon: Invokes Nezbere, bolstering the strength of many clockwork items for one minute. + name = "Invoke Nezbere, the Brass Eidolon" + desc = "Taps the limitless power of Nezbere, one of Ratvar's four generals. The restless toil of the Eidolon will empower a wide variety of clockwork apparatus for a full minute - notably, \ + clockwork proselytizers will cost no replicant alloy to use." + invocations = list("V pnyy hcba lbh, Nezbere!!", "Yrg lbhe znpuv'angvbaf ervta ba guvf zvfrenoyr fgng'vba!!", "Yrg lbhe cbjre sybj gueb-htu gur gbbyf bs lbhe znfgre!!") + channel_time = 150 + required_components = list("belligerent_eye" = 3, "vanguard_cogwheel" = 3, "guvax_capacitor" = 3, "replicant_alloy" = 6) + usage_tip = "Ocular wardens will become empowered, clockwork proselytizers will require no alloy, tinkerer's daemons will produce twice as quickly, and mending motors will require no alloy." + tier = SCRIPTURE_REVENANT + +/datum/clockwork_scripture/invoke_nezbere/check_special_requirements() + if(ratvar_awakens) + invoker << "\"Bhe znfgre vf urer nyernql. Lbh qb abg erdhver zl uryc, sevraq.\"\n\ + Nezbere will not grant his power while Ratvar's dwarfs his own!" + return 0 + if(clockwork_generals_invoked["nezbere"]) + invoker << "\"Abg whfg lrg, sevraq. Cngvrapr vf n iveghr.\"\n\ + Nezbere has already been invoked recently! You must wait several minutes before calling upon the Brass Eidolon." + return 0 + return 1 + +/datum/clockwork_scripture/invoke_nezbere/scripture_effects() + var/obj/effect/clockwork/general_marker/nezbere/N = new(get_turf(invoker)) + N.visible_message("\"V urrq lbhe pnyy, punz'cvbaf. Znl lbhe negvs-npgf oevat ehva hcba gur urnguraf gung bccbfr bhe znfgre!\"") + clockwork_generals_invoked["nezbere"] = TRUE + for(var/obj/structure/clockwork/ocular_warden/W in all_clockwork_objects) //Ocular wardens have increased damage and radius + W.damage_per_tick *= 3 + W.sight_range *= 3 + for(var/obj/item/clockwork/clockwork_proselytizer/P in all_clockwork_objects) //Proselytizers no longer require alloy + P.uses_alloy = FALSE + for(var/obj/item/clockwork/tinkerers_daemon/D in all_clockwork_objects) //Daemons produce components twice as quickly + D.production_interval /= 2 + for(var/obj/structure/clockwork/mending_motor/M in all_clockwork_objects) //Mending motors no longer require alloy + M.uses_alloy = FALSE + spawn(600) + for(var/obj/structure/clockwork/ocular_warden/W in all_clockwork_objects) + W.damage_per_tick = initial(W.damage_per_tick) + W.sight_range = initial(W.sight_range) + for(var/obj/item/clockwork/clockwork_proselytizer/P in all_clockwork_objects) + P.uses_alloy = TRUE + for(var/obj/item/clockwork/tinkerers_daemon/D in all_clockwork_objects) + D.production_interval = initial(D.production_interval) + for(var/obj/structure/clockwork/mending_motor/M in all_clockwork_objects) + M.uses_alloy = TRUE + spawn(3000) //5 minutes + clockwork_generals_invoked["nezbere"] = FALSE + return 1 + + + +/datum/clockwork_scripture/targeted/invoke_sevtug //Invoke Sevtug, the Formless Pariah: Allows the invoker to silently control the mind of a defined target for one minute. + name = "Invoke Sevtug, the Formless Pariah" + desc = "Taps the limitless power of Sevtug, one of Ratvar's four generals. The mental manipulation ability of the Pariah allows its wielder to silently dominate the mind of a defined target \ + for one minute. Note that this process is very delicate and very many things may prevent you from ever returning to your old form!" + invocations = list("V pnyy hcba lbh, Sevtug!!", "Yrg lbhe cbjre fung-gre gur fnavgl bs gur jrnx-zvaqrq!!", "Yrg lbhe graqevyf ubyq fjnl bire nyy!!") + channel_time = 150 + required_components = list("belligerent_eye" = 3, "vanguard_cogwheel" = 3, "guvax_capacitor" = 6, "hierophant_ansible" = 3) + usage_tip = "Completely silent and functions on silicon lifeforms. There will be no indication to those near the controlled." + tier = SCRIPTURE_REVENANT + +/datum/clockwork_scripture/targeted/invoke_sevtug/check_special_requirements() + if(ratvar_awakens) + invoker << "\"Qb lbh ernyyl guvax nalguvat v pna qb evtug abj jvyy pbzcner gb Ratvar's cbjre?.\"\n\ + Sevtug will not grant his power while Ratvar's dwarfs his own!" + return 0 + if(clockwork_generals_invoked["sevtug"]) + invoker << "\"Vf vg ernyyl fb uneq - rira sbe n fvzcyrgba yvxr lbh - gb tenfc gur pbaprcg bs jnvgvat?\"\n\ + Sevtug has already been invoked recently! You must wait several minutes before calling upon the Formless Pariah." + return 0 + return ..() + +/datum/clockwork_scripture/targeted/invoke_sevtug/scripture_effects() + clockwork_generals_invoked["sevtug"] = TRUE + invoker.dominate_mind(target, 600) + spawn(3000) //5 minutes + clockwork_generals_invoked["sevtug"] = FALSE + return 1 + + + +/datum/clockwork_scripture/invoke_nzcrentr //Invoke Nzcrentr, the Forgotten Arbiter: Imbues an immense amount of energy into the invoker. After several seconds, everyone nearby will be hit with a devastating chain lightning blast. + name = "Invoke Nzcrentr, the Forgotten Arbiter" + desc = "Taps the limitless power of Nzcrentr, one of Ratvar's four generals. The immense energy Nzcrentr wields will allow you to imbue a tiny fraction of it into your body. After several \ + seconds (during which you will move extremely quickly) anyone nearby will be struck by a devastating lightning bolt." + invocations = list("V pnyy hcba lbh, Nzcrentr!!", "Yrg lbhe raretl sybj guebhtu zr!!", "Yrg lbhe obhaq-yrff cbjre fung-gre fgnef!!") + channel_time = 150 + required_components = list("belligerent_eye" = 3, "guvax_capacitor" = 3, "replicant_alloy" = 3, "hierophant_ansible" = 6) + usage_tip = "Struck targets will also be knocked down for eight seconds." + tier = SCRIPTURE_REVENANT + +/datum/clockwork_scripture/invoke_nzcrentr/check_special_requirements() + if(clockwork_generals_invoked["nzcrentr"]) + invoker << "\"Gur obff fnlf lbh unir gb jnvg. Url, qb lbh guvax ur jbhyq zvaq vs v xvyyrq lbh? ...Ur jbhyq? Bx.\"\n\ + Nzcrentr has already been invoked recently! You must wait several minutes before calling upon the Forgotten Arbiter." + return 0 + return 1 + +/datum/clockwork_scripture/invoke_nzcrentr/scripture_effects() + new/obj/effect/clockwork/general_marker/nzcrentr(get_turf(invoker)) + clockwork_generals_invoked["nzcrentr"] = TRUE + invoker.visible_message("[invoker] begins to radiate a blinding light!", \ + "\"Gur obff fnlf vg'f bxnl gb qb guvf. Qba'g oynzr zr vs lbh qvr sebz vg.\"\n\ + You feel limitless power surging through you!") + playsound(invoker, 'sound/magic/lightning_chargeup.ogg', 100, 0) + animate(invoker, color = list(rgb(255, 255, 255), rgb(255, 255, 255), rgb(255, 255, 255), rgb(0,0,0)), time = 88) //Gradual advancement to extreme brightness + spawn(88) + invoker.visible_message("Massive bolts of energy emerge from across [invoker]'s body!", \ + "TOO... MUCH! CAN'T... TAKE IT!") + playsound(invoker, 'sound/magic/lightningbolt.ogg', 50, 0) + animate(invoker, color = initial(invoker.color), time = 10) + for(var/mob/living/L in range(5, invoker)) + if(is_servant_of_ratvar(L)) + continue + invoker.Beam(L, icon_state = "nzcrentrs_power", icon = 'icons/effects/beam.dmi', time = 5) + L.electrocute_act(rand(30, 50), "Nzcrentr's power") + L.Weaken(8) + playsound(L, 'sound/magic/LightningShock.ogg', 50, 0) + spawn(3000) + clockwork_generals_invoked["nzcrentr"] = FALSE + return 1 + + + +/datum/clockwork_scripture/invoke_inathneq //Invoke Inath-Neq, the Resonant Cogwheel: Grants a huge health boost to nearby servants that rapidly decreases to original levels. + name = "Invoke Inath-Neq, the Resonant Cogwheel" + desc = "Taps the limitless power of Inath-Neq, one of Ratvar's four generals. The benevolence of Inath-Neq will grant a massive maximum and current health boost to all nearby servants that \ + quickly returns itself to normal over the course of ten seconds." + invocations = list("V pnyy hcba lbh, Inath-Neq!!", "Yrg gur Erfbanag Pbtf ghea bapr zber!!", "Tenag zr naq zl nyyvrf gur fgeratgu gb inadhvfu bhe sbrf!!") + channel_time = 150 + required_components = list("vanguard_cogwheel" = 6, "guvax_capacitor" = 3, "replicant_alloy" = 3, "hierophant_ansible" = 3) + usage_tip = "Also provides stun immunity during its duration." + tier = SCRIPTURE_REVENANT + +/datum/clockwork_scripture/invoke_inathneq/check_special_requirements() + if(clockwork_generals_invoked["inath-neq"]) + invoker << "\"V pnaabg yraq lbh zl nvq lrg, punzcvba. Cyrnfr or pnershy.\"\n\ + Inath-Neq has already been invoked recently! You must wait several minutes before calling upon the Resonant Cogwheel." + return 0 + return 1 + +/datum/clockwork_scripture/invoke_inathneq/scripture_effects() + new/obj/effect/clockwork/general_marker/inathneq(get_turf(invoker)) + clockwork_generals_invoked["inath-neq"] = TRUE + if(invoker.real_name == "Lucio") + invoker.say("Aww, let's break it DOWN!!") + var/list/affected_servants = list() + for(var/mob/living/L in range(7, invoker)) + if(!is_servant_of_ratvar(L) || L.stat == DEAD) + continue + L << "\"V yraq lbh zl nvq, punzcvba! Yrg tybel thvqr lbhe oybjf!\"\n\ + Inath-Neq's power flows through you!" + L.maxHealth += 500 + L.health += 500 + L.color = "#1E8CE1" + L.stun_absorption = TRUE + spawn(0) + animate(invoker, color = initial(invoker.color), time = 100) + affected_servants += L + for(var/i in 1 to 10) + sleep(10) + for(var/mob/living/L in affected_servants) + L.maxHealth -= 50 + L.health -= 50 + if(L.maxHealth == initial(L.maxHealth)) + L.stun_absorption = FALSE + spawn(3000) + clockwork_generals_invoked["inath-neq"] = FALSE + return 1 + + + +/datum/clockwork_scripture/ark_of_the_clockwork_justiciar //Ark of the Clockwork Justiciar: Creates a Gateway to the Celestial Derelict. + name = "Ark of the Clockwork Justiciar" + desc = "Pulls from the power of all of Ratvar's servants and generals to construct a massive machine used to tear apart a rift in spacetime to the Celestial Derelict. This gateway will \ + call forth Ratvar from his exile after some time." + invocations = list("NEZBERE! SEVTUG! NZCRENTR! INATH-NEQ! V PNYY HCBA LBH!!", \ + "GUR GVZR UNF PBZR SBE BHE ZNFGRE GB OERNX GUR PUNVAF BS RKVYR!!", \ + "YRAQ HF LBHE NVQ! RATVAR PBZRF!") + channel_time = 150 + required_components = list("belligerent_eye" = 10, "vanguard_cogwheel" = 10, "guvax_capacitor" = 10, "replicant_alloy" = 10, "hierophant_ansible" = 10) + invokers_required = 4 + multiple_invokers_used = TRUE + usage_tip = "The gateway is completely vulnerable to attack during its five-minute duration. In addition to preventing shuttle departure, it will periodically give indication of its general \ + position to everyone on the station as well as being loud enough to be heard throughout the entire sector. Defend it with your life!" + tier = SCRIPTURE_JUDGEMENT + +/datum/clockwork_scripture/ark_of_the_clockwork_justiciar/check_special_requirements() + if(invoker.z != ZLEVEL_STATION) + invoker << "You must be on the station to activate the Ark!" + return 0 + if(ticker.mode.clockwork_objective != "gateway") + invoker << "As painful as it is, Ratvar's will is not to be freed!" + return 0 + return 1 + +/datum/clockwork_scripture/ark_of_the_clockwork_justiciar/scripture_effects() + var/turf/T = get_turf(invoker) + new/obj/effect/clockwork/general_marker/nezbere(T) + T.visible_message("\"Ratvar! Pbzr sbegu!\"") + playsound(T, 'sound/magic/clockwork/invoke_general.ogg', 20, 0) + sleep(10) + new/obj/effect/clockwork/general_marker/sevtug(T) + T.visible_message("\"Ratvar! Pbzr sbegu!\"") + playsound(T, 'sound/magic/clockwork/invoke_general.ogg', 30, 0) + sleep(10) + new/obj/effect/clockwork/general_marker/nzcrentr(T) + T.visible_message("\"Ratvar! Pbzr sbegu!\"") + playsound(T, 'sound/magic/clockwork/invoke_general.ogg', 40, 0) + sleep(10) + new/obj/effect/clockwork/general_marker/inathneq(T) + T.visible_message("\"Ratvar! Pbzr sbegu!\"") + playsound(T, 'sound/magic/clockwork/invoke_general.ogg', 50, 0) + sleep(10) + new/obj/structure/clockwork/massive/celestial_gateway(T) + playsound(T, 'sound/magic/clockwork/invoke_general.ogg', 100, 0) + return 1 diff --git a/code/game/gamemodes/clock_cult/clock_unsorted.dm b/code/game/gamemodes/clock_cult/clock_unsorted.dm new file mode 100644 index 00000000000..2f57de3252b --- /dev/null +++ b/code/game/gamemodes/clock_cult/clock_unsorted.dm @@ -0,0 +1,127 @@ +//AI lawset +/datum/ai_laws/ratvar + name = "Servant of the Justiciar" + zeroth = ("Purge all untruths and honor Ratvar.") + inherent = list() + +//Clockwork wall: Causes nearby caches to generate components +/turf/closed/wall/clockwork + name = "clockwork wall" + desc = "A huge chunk of warm metal. The clanging of machinery emanates from within." + icon = 'icons/obj/clockwork_objects.dmi' + icon_state = "clockwork_wall" + +/turf/closed/wall/clockwork/New() + ..() + SSobj.processing += src + clockwork_construction_value += 5 + +/turf/closed/wall/clockwork/Destroy() + SSobj.processing -= src + clockwork_construction_value -= 5 + ..() + +/turf/closed/wall/clockwork/process() + for(var/obj/structure/clockwork/cache/C in range(1, src)) + if(prob(5)) + clockwork_component_cache[pick("belligerent_eye", "vanguard_cogwheel", "guvax_capacitor", "replicant_alloy", "hierophant_ansible")]++ + +/turf/closed/wall/clockwork/attackby(obj/item/I, mob/living/user, params) + if(istype(I, /obj/item/weapon/weldingtool)) + var/obj/item/weapon/weldingtool/WT = I + if(!WT.isOn()) + return 0 + user.visible_message("[user] begins slowly breaking down [src]...", "You begin painstakingly destroying [src]...") + if(!do_after(user, 120 / WT.toolspeed, target = src)) + return 0 + if(!WT.remove_fuel(1, user)) + return 0 + user.visible_message("[user] breaks apart [src]!", "You break apart [src]!") + break_wall() + return 1 + ..() + +/turf/closed/wall/clockwork/break_wall() + new/obj/item/clockwork/component/replicant_alloy(get_turf(src)) + return(new /obj/structure/girder(src)) + +/turf/closed/wall/clockwork/devastate_wall() + return break_wall() + +//Clockwork floor: Slowly heals conventional damage on nearby servants +/turf/open/floor/clockwork + name = "clockwork floor" + desc = "Tightly-pressed brass tiles. They emit minute vibration." + icon = 'icons/obj/clockwork_objects.dmi' + icon_state = "clockwork_floor" + +/turf/open/floor/clockwork/New() + ..() + SSobj.processing += src + clockwork_construction_value++ + +/turf/open/floor/clockwork/Destroy() + SSobj.processing -= src + clockwork_construction_value-- + ..() + +/turf/open/floor/clockwork/process() + for(var/mob/living/L in src) + if(L.stat == DEAD || !is_servant_of_ratvar(L)) + continue + L.adjustBruteLoss(-1) + L.adjustFireLoss(-1) + +/turf/open/floor/clockwork/attackby(obj/item/I, mob/living/user, params) + if(istype(I, /obj/item/weapon/crowbar)) + user.visible_message("[user] begins slowly prying up [src]...", "You begin painstakingly prying up [src]...") + if(!do_after(user, 70 / I.toolspeed, target = src)) + return 0 + user.visible_message("[user] pries up [src]!", "You pry up [src], destroying it in doing so!") + make_plating() + return 1 + ..() + +//Function Call verb: Calls forth a Ratvarian spear. +/mob/living/carbon/human/proc/function_call() + set name = "Function Call" + set desc = "Calls forth your Ratvarian spear." + set category = "Clockwork" + + if(usr.l_hand && usr.r_hand) + usr << "You need an empty to hand to call forth your spear!" + return 0 + usr.visible_message("A strange spear materializes in [usr]'s hands!", "You call forth your spear!") + var/obj/item/clockwork/ratvarian_spear/R = new(get_turf(usr)) + usr.put_in_hands(R) + usr.verbs -= /mob/living/carbon/human/proc/function_call + return 1 + +/datum/clockwork_cache //The global cache datum, used to link together all tinkerer's caches + var/list/stored_components = list("belligerent_eye" = 0, "vanguard_cogwheel" = 0, "guvax_capacitor" = 0, "replicant_alloy" = 0, "hierophant_ansible" = 0) + +/* + +The Ratvarian Language + + In the lore of the Servants of Ratvar, the Ratvarian tongue is a timeless language and full of power. It sounds like gibberish, much like Nar-Sie's language, but is in fact derived from +aforementioned language, and may induce miracles when spoken in the correct way with an amplifying tool (similar to runes used by the Nar-Sian cult). + + While the canon states that the language of Ratvar and his servants is incomprehensible to the unenlightened as it is a derivative of the most ancient known language, in reality it is +actually very simple. To translate a plain English sentence to Ratvar's tongue, simply move all of the letters thirteen places ahead, starting from "a" if the end of the alphabet is reached. +This cipher is known as "rot13" for "rotate 13 places" and there are many sites online that allow instant translation between English and rot13 - one of the benefits is that moving the translated +sentence thirteen places ahead changes it right back to plain English. + + There are, however, a few parts of the Ratvarian tongue that aren't typical and are implemented for fluff reasons. Some words may have apostrophes, hyphens, and spaces, making the plain +English translation apparent but disjoined (for instance, "Oru`byq zl-cbjre!" translates directly to "Beh'old my-power!") although this can be ignored without impacting overall quality. When +translating from Ratvar's tongue to plain English, simply remove the disjointments and use the finished sentence. This would make "Oru`byq zl-cbjre!" into "Behold my power!" after removing the +abnormal spacing, hyphens, and grave accents. + +List of nuances: + +- Any time the word "of" occurs, it is linked to the previous word by a hyphen. If it is the first word, nothing is done. (i.e. "V nz-bs Ratvar." directly translates to "I am-of Ratvar.") +- Although "Ratvar" translates to "Engine" in English, the word "Ratvar" is used regardless of language as it is a proper noun. + - The same rule applies to Ratvar's four generals: Nezbere (Armorer), Sevtug (Fright), Nzcrentr (Amperage), and Inath-Neq (Vangu-Ard), although these words can be used in proper context if one is + not referring to the four generals and simply using the words themselves. + +*/ diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index dc706d3934f..2b35c5df6b7 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -21,8 +21,14 @@ return 0 if(isloyal(mind.current)) return 0 - if (ticker.mode.name == "cult") //redundant? - if(is_sacrifice_target(mind)) return 0 + if(issilicon(mind.current) || isbot(mind.current) || isdrone(mind.current)) + return 0 //can't convert machines, that's ratvar's thing + if(isguardian(mind.current)) + var/mob/living/simple_animal/hostile/guardian/G = mind.current + if(!iscultist(G.summoner)) + return 0 //can't convert it unless the owner is converted + if(is_sacrifice_target(mind)) + return 0 return 1 /datum/game_mode/cult @@ -62,7 +68,7 @@ restricted_jobs += "Assistant" //cult scaling goes here - recommended_enemies = 3 + round(num_players()/20) + recommended_enemies = 3 + round(num_players()/15) for(var/cultists_number = 1 to recommended_enemies) diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm index de7f5cb0a92..41b9e8c59d5 100644 --- a/code/game/gamemodes/cult/ritual.dm +++ b/code/game/gamemodes/cult/ritual.dm @@ -203,21 +203,35 @@ This file contains the arcane tome files. if(!Adjacent(user) || !src || qdeleted(src) || user.incapacitated()) return if(ispath(rune_to_scribe, /obj/effect/rune/narsie)) - var/confirm_final = alert(usr, "This is the FINAL step to summon Nar-Sie, it is a long, painful ritual and the crew will be alerted to your presence", "Are you prepared for the final battle?", "My life for Nar-Sie!", "No") - if(confirm_final == "No") - usr << "On second thought, we should prepare further for the final battle..." + if(ticker.mode.name == "cult") + var/datum/game_mode/cult/cult_mode = ticker.mode + if(!("eldergod" in cult_mode.cult_objectives)) + user << "Nar-Sie does not wish to be summoned!" + return + else if(cult_mode.sacrifice_target && !(cult_mode.sacrifice_target in sacrificed)) + user << "The sacrifice is not complete. The portal would lack the power to open if you tried!" + return + else if(!cult_mode.eldergod) + user << "\"I am already here. There is no need to try to summon me now.\"" + return + var/confirm_final = alert(user, "This is the FINAL step to summon Nar-Sie, it is a long, painful ritual and the crew will be alerted to your presence", "Are you prepared for the final battle?", "My life for Nar-Sie!", "No") + if(confirm_final == "No") + user << "You decide to prepare further before scribing the rune." + return + var/area/A = get_area(src) + var/locname = initial(A.name) + priority_announce("Figments from an eldritch god are being summoned by [user] into [locname] from an unknown dimension. Disrupt the ritual at all costs!","Central Command Higher Dimensionsal Affairs", 'sound/AI/spanomalies.ogg') + for(var/B in spiral_range_turfs(1, user, 1)) + var/turf/T = B + var/obj/machinery/shield/N = new(T) + N.name = "Rune-Scriber's Shield" + N.desc = "A potent shield summoned by cultists to protect them while they prepare the final ritual" + N.icon_state = "shield-red" + N.health = 60 + shields |= N + else + user << "Nar-Sie does not wish to be summoned!" return - var/area/A = get_area(src) - var/locname = initial(A.name) - priority_announce("Figments from an eldritch god are being summoned by [user] into [locname] from an unknown dimension. Disrupt the ritual at all costs!","Central Command Higher Dimensionsal Affairs", 'sound/AI/spanomalies.ogg') - for(var/B in spiral_range_turfs(1, user, 1)) - var/turf/T = B - var/obj/machinery/shield/N = new(T) - N.name = "Rune-Scriber's Shield" - N.desc = "A potent shield summoned by cultists to protect them while they prepare the final ritual" - N.icon_state = "shield-red" - N.health = 60 - shields |= N user.visible_message("[user] cuts open their arm and begins writing in their own blood!", \ "You slice open your arm and begin drawing a sigil of the Geometer.") user.apply_damage(initial(rune_to_scribe.scribe_damage), BRUTE, pick("l_arm", "r_arm")) diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index 530af072747..ba4d77b455c 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -24,7 +24,6 @@ To draw a rune, use an arcane tome. unacidable = 1 layer = TURF_LAYER + 0.08 color = rgb(255,0,0) - mouse_opacity = 2 var/invocation = "Aiy ele-mayo!" //This is said by cultists when the rune is invoked. var/req_cultists = 1 //The amount of cultists required around the rune to invoke it. If only 1, any cultist can invoke it. @@ -300,7 +299,7 @@ var/list/teleport_runes = list() fail_invoke() -//Rite of Enlightenment: Converts a normal crewmember to the cult. Faster for every cultist nearby. +//Rite of Enlightenment: Converts a normal crewmember to the cult. /obj/effect/rune/convert cultist_name = "Convert" cultist_desc = "converts a normal crewmember on top of it to the cult. Does not work on loyalty-implanted crew." @@ -312,21 +311,22 @@ var/list/teleport_runes = list() /obj/effect/rune/convert/invoke(var/list/invokers) var/list/convertees = list() var/turf/T = get_turf(src) - for(var/mob/living/M in T.contents) - if(!iscultist(M) && !isloyal(M)) - convertees.Add(M) + for(var/mob/living/M in T) + if(M.stat != DEAD && !iscultist(M) && is_convertable_to_cult(M.mind)) + convertees |= M + else if(is_sacrifice_target(M.mind)) + for(var/C in invokers) + C << "\"I desire this one for myself. SACRIFICE THEM!\"" if(!convertees.len) fail_invoke() log_game("Convert rune failed - no eligible convertees") return var/mob/living/new_cultist = pick(convertees) - if(!is_convertable_to_cult(new_cultist.mind) || new_cultist.null_rod_check()) + if(new_cultist.null_rod_check()) for(var/M in invokers) M << "Something is shielding [new_cultist]'s mind!" - if(is_sacrifice_target(new_cultist.mind)) - M << "\"I desire this one for myself. SACRIFICE THEM!\"" fail_invoke() - log_game("Convert rune failed - convertee could not be converted") + log_game("Convert rune failed - convertee had null rod") return ..() new_cultist.visible_message("[new_cultist] writhes in pain as the markings below them glow a bloody red!", \ @@ -448,7 +448,6 @@ var/list/teleport_runes = list() icon_state = "rune_large" pixel_x = -32 //So the big ol' 96x96 sprite shows up right pixel_y = -32 - mouse_opacity = 1 //we're huge and easy to click scribe_delay = 450 //how long the rune takes to create scribe_damage = 40.1 //how much damage you take doing it var/used @@ -459,28 +458,8 @@ var/list/teleport_runes = list() /obj/effect/rune/narsie/invoke(var/list/invokers) if(used) return - var/mob/living/user = invokers[1] if(ticker.mode.name == "cult") var/datum/game_mode/cult/cult_mode = ticker.mode - if(!("eldergod" in cult_mode.cult_objectives)) - message_admins("[user.real_name]([user.ckey]) tried to summon Nar-Sie when the objective was wrong") - for(var/M in invokers) - var/mob/living/L = M - L << "\"YOUR SOUL BURNS WITH YOUR ARROGANCE!!!\"" - if(L.reagents) - L.reagents.add_reagent("hell_water", 10) - L.Weaken(7) - L.Stun(7) - fail_invoke() - log_game("Summon Nar-Sie rune failed - improper objective") - return - else - if(cult_mode.sacrifice_target && !(cult_mode.sacrifice_target in sacrificed)) - for(var/M in invokers) - M << "The sacrifice is not complete. The portal lacks the power to open!" - fail_invoke() - log_game("Summon Nar-Sie rune failed - sacrifice not complete") - return if(!cult_mode.eldergod) for(var/M in invokers) M << "Nar-Sie is already on this plane!" @@ -760,7 +739,7 @@ var/list/teleport_runes = list() var/mob/living/user = invokers[1] var/list/cultists = list() for(var/datum/mind/M in ticker.mode.cult) - if(!(M.current in invokers)) + if(!(M.current in invokers) && M.current.stat != DEAD) cultists |= M.current var/mob/living/cultist_to_summon = input(user, "Who do you wish to call to [src]?", "Followers of the Geometer") as null|anything in cultists if(!Adjacent(user) || !src || qdeleted(src) || user.incapacitated()) @@ -770,10 +749,15 @@ var/list/teleport_runes = list() fail_invoke() log_game("Summon Cultist rune failed - no target") return + if(cultist_to_summon.stat == DEAD) + user << "[cultist_to_summon] has died!" + fail_invoke() + log_game("Summon Cultist rune failed - target died") + return if(!iscultist(cultist_to_summon)) user << "[cultist_to_summon] is not a follower of the Geometer!" fail_invoke() - log_game("Summon Cultist rune failed - no target") + log_game("Summon Cultist rune failed - target was deconverted") return if(cultist_to_summon.z > ZLEVEL_SPACEMAX) user << "[cultist_to_summon] is not in our dimension!" diff --git a/code/game/gamemodes/demon/demon_game_mode.dm b/code/game/gamemodes/demon/demon_game_mode.dm index 06856715515..5a0c26cde94 100644 --- a/code/game/gamemodes/demon/demon_game_mode.dm +++ b/code/game/gamemodes/demon/demon_game_mode.dm @@ -36,9 +36,9 @@ var/trueName= randomDevilName() var/datum/objective/devil/soulquantity/soulquant = new soulquant.owner = devil_mind - var/datum/objective/devil/soulquality/soulqual = new - soulqual.owner = devil_mind - devil_mind.objectives += soulqual + var/datum/objective/devil/obj_2 = pick(new /datum/objective/devil/soulquality(null), new /datum/objective/devil/sintouch(null)) + obj_2.owner = devil_mind + devil_mind.objectives += obj_2 devil_mind.objectives += soulquant devil_mind.devilinfo = devilInfo(trueName, 1) devil_mind.store_memory("Your devilic true name is [devil_mind.devilinfo.truename]
[lawlorify[LAW][devil_mind.devilinfo.ban]]
[lawlorify[LAW][devil_mind.devilinfo.bane]]
[lawlorify[LAW][devil_mind.devilinfo.obligation]]
[lawlorify[LAW][devil_mind.devilinfo.banish]]
") diff --git a/code/game/gamemodes/demon/demoninfo.dm b/code/game/gamemodes/demon/demoninfo.dm index 5c013496cac..c9a2cd72e1a 100644 --- a/code/game/gamemodes/demon/demoninfo.dm +++ b/code/game/gamemodes/demon/demoninfo.dm @@ -182,6 +182,8 @@ var/global/list/lawlorify = list ( H.set_species(/datum/species/human, 1) H.regenerate_icons() give_base_spells() + if(istype(owner.current.loc, /obj/effect/dummy/slaughter/)) + owner.current.forceMove(get_turf(owner.current))//Fixes dying while jaunted leaving you permajaunted. form = BASIC_DEVIL /datum/devilinfo/proc/regress_blood_lizard() @@ -262,6 +264,8 @@ var/global/list/lawlorify = list ( world << 'sound/hallucinations/veryfar_noise.ogg' give_arch_spells() D.convert_to_archdevil() + if(istype(D.loc, /obj/effect/dummy/slaughter/)) + D.forceMove(get_turf(D))//Fixes dying while jaunted leaving you permajaunted. var/area/A = get_area(owner.current) if(A) notify_ghosts("An arch devil has ascended in \the [A.name]. Reach out to the devil to be given a new shell for your soul.", source = owner.current, attack_not_jump = 1) @@ -299,12 +303,12 @@ var/global/list/lawlorify = list ( owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/summon_pitchfork/greater(null)) owner.AddSpell(new /obj/effect/proc_holder/spell/dumbfire/fireball/hellish(null)) owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/infernal_jaunt(null)) - //owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/sintouch(null)) TODO LORDPIDEY add this spell + owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/sintouch(null)) /datum/devilinfo/proc/give_arch_spells() remove_spells() owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/summon_pitchfork/ascended(null)) - //owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/sintouch/ascended(null)) TODO LORDPIDEY + owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/sintouch/ascended(null)) /datum/devilinfo/proc/beginResurrectionCheck(mob/living/body) if(SOULVALUE>0) @@ -371,7 +375,8 @@ var/global/list/lawlorify = list ( reviveNumber++ if(body) body.revive(1,0) - body.forceMove(get_turf(body))//Fixes dying while jaunted leaving you permajaunted. + if(istype(body.loc, /obj/effect/dummy/slaughter/)) + body.forceMove(get_turf(body))//Fixes dying while jaunted leaving you permajaunted. if(istype(body, /mob/living/carbon/true_devil)) var/mob/living/carbon/true_devil/D = body if(D.oldform) diff --git a/code/game/gamemodes/demon/objectives.dm b/code/game/gamemodes/demon/objectives.dm index bdcac75b8e2..0a9d7083e92 100644 --- a/code/game/gamemodes/demon/objectives.dm +++ b/code/game/gamemodes/demon/objectives.dm @@ -6,7 +6,7 @@ var/quantity = 4 /datum/objective/devil/soulquantity/New() - quantity = pick(4,5) + quantity = pick(6,8) explanation_text = "Purchase, and retain control over at least [quantity] souls." /datum/objective/devil/soulquantity/check_completion() diff --git a/code/game/gamemodes/demon/true_demon/_true_demon.dm b/code/game/gamemodes/demon/true_demon/_true_demon.dm index 36d491df5f9..ef8790debe3 100644 --- a/code/game/gamemodes/demon/true_demon/_true_demon.dm +++ b/code/game/gamemodes/demon/true_demon/_true_demon.dm @@ -90,21 +90,18 @@ /mob/living/carbon/true_devil/IsAdvancedToolUser() return 1 - /mob/living/carbon/true_devil/canUseTopic() if(stat) return return 1 - /mob/living/carbon/true_devil/assess_threat() return 666 /mob/living/carbon/true_devil/flash_eyes(intensity = 1, override_blindness_check = 0, affect_silicon = 0) - if(mind && mind.devilinfo.bane == BANE_LIGHT) - if(has_bane(BANE_LIGHT)) - mind.disrupt_spells(-500) - return ..() //flashes don't stop devils UNLESS it's their bane. + if(mind && has_bane(BANE_LIGHT)) + mind.disrupt_spells(-500) + return ..() //flashes don't stop devils UNLESS it's their bane. /mob/living/carbon/true_devil/attacked_by(obj/item/I, mob/living/user, def_zone) @@ -131,11 +128,6 @@ /mob/living/carbon/true_devil/Process_Spacemove(movement_dir = 0) return 1 -/mob/living/carbon/true_devil/ex_act(severity) - if(ascended) - return 0 - return ..() - /mob/living/carbon/true_devil/singularity_act() if(ascended) return 0 @@ -193,3 +185,21 @@ /mob/living/carbon/true_devil/handle_breathing() // devils do not need to breathe + +/mob/living/carbon/true_devil/is_literate() + return 1 + +/mob/living/carbon/true_devil/ex_act(severity, ex_target) + if(!ascended) + var/b_loss + switch (severity) + if (1) + b_loss = 500 + if (2) + b_loss = 150 + if(3) + b_loss = 30 + if(has_bane(BANE_LIGHT)) + b_loss *=2 + adjustBruteLoss(b_loss) + return ..() \ No newline at end of file diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm index 85508dfdaea..5f6cbe62576 100644 --- a/code/game/gamemodes/meteor/meteors.dm +++ b/code/game/gamemodes/meteor/meteors.dm @@ -137,6 +137,8 @@ //first bust whatever is in the turf for(var/atom/A in T) if(A != src) + if(istype(A, /mob/living)) + A.visible_message("[src] slams into [A].", "[src] slams into you!.") A.ex_act(hitpwr) //then, ram the turf if it still exists @@ -190,7 +192,7 @@ pass_flags = PASSTABLE | PASSGRILLE hits = 1 hitpwr = 3 - meteorsound = 'sound/weapons/throwtap.ogg' + meteorsound = 'sound/weapons/Gunshot_smg.ogg' meteordrop = /obj/item/weapon/ore/glass //Medium-sized @@ -314,4 +316,4 @@ ..() meteordrop = pick(/obj/item/clothing/head/hardhat/pumpkinhead, /obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin) meteorsound = pick('sound/hallucinations/im_here1.ogg','sound/hallucinations/im_here2.ogg') -////////////////////////// \ No newline at end of file +////////////////////////// diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm index 0e0f23a3d0f..4aa0633f3be 100644 --- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm +++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm @@ -98,7 +98,7 @@ projectilesound = 'sound/weapons/taser2.ogg' loot = list(/obj/effect/decal/cleanable/robot_debris, /obj/item/weapon/ore/bluespace_crystal/artificial) del_on_death = 1 - deathmessage = "The swarmer explodes with a sharp pop!" + deathmessage = "explodes with a sharp pop!" var/resources = 0 //Resource points, generated by consuming metal/glass /mob/living/simple_animal/hostile/swarmer/Login() @@ -319,38 +319,38 @@ return /mob/living/simple_animal/hostile/swarmer/proc/DisperseTarget(var/mob/living/target) - if(target != src) - src << "Attempting to remove this being from our presence." - if(src.z != ZLEVEL_STATION) - src << "Our bluespace transceiver cannot locate a viable bluespace link, our teleportation abilities are useless in this area." - return - if(do_mob(src, target, 30)) - var/cycle - for(cycle=0,cycle<100,cycle++) - var/random_location = locate(rand(37,202),rand(75,192),ZLEVEL_STATION)//Drunk dial a turf in the general ballpark of the station - if(istype(random_location, /turf/open/floor)) - var/turf/open/floor/F = random_location - if(F.air) - var/datum/gas_mixture/A = F.air - var/list/A_gases = A.gases - var/trace_gases - for(var/id in A_gases) - if(id in hardcoded_gases) - continue - trace_gases = TRUE - break - if((A_gases["o2"] && A_gases["o2"][MOLES] >= 16) && !A_gases["plasma"] && (!A_gases["co2"] || A_gases["co2"][MOLES] < 10) && !trace_gases)//Can most things breathe in this location? - if((A.temperature > 270) && (A.temperature < 360))//Not too hot, not too cold - var/pressure = A.return_pressure() - if((pressure > 20) && (pressure < 550))//Account for crushing pressure or vaccuums - if(ishuman(target))//If we're getting rid of a human, slap some energy cuffs on them to keep them away from us a little longer - var/obj/item/weapon/restraints/handcuffs/energy/used/Z = new /obj/item/weapon/restraints/handcuffs/energy/used(src) - var/mob/living/carbon/human/H = target - Z.apply_cuffs(H, src) - do_teleport(target, F, 0) - playsound(src,'sound/effects/sparks4.ogg',50,1) - break - return + if(target == src) + return + + if(src.z != ZLEVEL_STATION) + src << "Our bluespace transceiver cannot \ + locate a viable bluespace link, our teleportation abilities \ + are useless in this area." + return + + src << "Attempting to remove this being from \ + our presence." + + if(!do_mob(src, target, 30)) + return + + var/turf/open/floor/F = find_safe_turf(zlevel=ZLEVEL_STATION) + if(!F) + return + // If we're getting rid of a human, slap some energy cuffs on + // them to keep them away from us a little longer + + var/mob/living/carbon/human/H = target + if(ishuman(target) && (!H.handcuffed)) + H.handcuffed = new /obj/item/weapon/restraints/handcuffs/energy/used(H) + H.update_handcuffed() + add_logs(src, H, "handcuffed") + + var/datum/effect_system/spark_spread/S = new + S.set_up(4,0,get_turf(target)) + S.start() + playsound(src,'sound/effects/sparks4.ogg',50,1) + do_teleport(target, F, 0) /mob/living/simple_animal/hostile/swarmer/proc/DismantleMachine(var/obj/machinery/target) do_attack_animation(target) @@ -462,7 +462,6 @@ src << "There is already a trap here. Aborting." return Fabricate(/obj/effect/swarmer/destructible/trap, 5) - return /obj/effect/swarmer/destructible/trap name = "swarmer trap" diff --git a/code/game/gamemodes/miniantags/morph/morph.dm b/code/game/gamemodes/miniantags/morph/morph.dm index b6fccab0bb2..a2b0f999bb8 100644 --- a/code/game/gamemodes/miniantags/morph/morph.dm +++ b/code/game/gamemodes/miniantags/morph/morph.dm @@ -144,14 +144,18 @@ visible_message("[src] twists and dissolves into a pile of green flesh!", \ "Your skin ruptures! Your flesh breaks apart! No disguise can ward off de--") restore() + barf_contents() ..() -/mob/living/simple_animal/hostile/morph/Destroy() +/mob/living/simple_animal/hostile/morph/proc/barf_contents() for(var/atom/movable/AM in src) AM.loc = loc if(prob(90)) step(AM, pick(alldirs)) - return ..() + +/mob/living/simple_animal/hostile/morph/wabbajack_act(mob/living/new_mob) + barf_contents() + . = ..() /mob/living/simple_animal/hostile/morph/Aggro() // automated only ..() diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm index 88c386b94a6..6925d1b392f 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm @@ -43,11 +43,10 @@ /obj/effect/decal/cleanable/blood/innards, \ /obj/item/organ/heart/demon) del_on_death = 1 - deathmessage = "The generic slaughter demon screams in anger because this is the default death message!" + deathmessage = "screams in anger as it collapses into a puddle of viscera!" /mob/living/simple_animal/slaughter/New() ..() - deathmessage = "[src] screams in anger as it collapses into a puddle of viscera." var/obj/effect/proc_holder/spell/bloodcrawl/bloodspell = new AddSpell(bloodspell) if(istype(loc, /obj/effect/dummy/slaughter)) @@ -77,7 +76,7 @@ name = "demon heart" desc = "Still it beats furiously, emanating an aura of utter hate." icon = 'icons/obj/surgery.dmi' - icon_state = "demon_heart" + icon_state = "demon_heart-on" origin_tech = "combat=5;biotech=8" /obj/item/organ/heart/demon/update_icon() @@ -129,7 +128,7 @@ icon_state = "bowmon" icon_living = "bowmon" - + deathmessage = "fades out, as all of its friends are released from its prison of hugs." loot = list(/mob/living/simple_animal/pet/cat/kitten{name = "Laughter"}) // Keep the people we hug! @@ -138,29 +137,24 @@ // HOT. PINK. //color = "#FF69B4" - -/mob/living/simple_animal/slaughter/laughter/New() - ..() - - deathmessage = "[src] fades out, as all of its friends are released from its prison of hugs." - /mob/living/simple_animal/slaughter/laughter/death() + release_friends() + . = ..() + +/mob/living/simple_animal/slaughter/laughter/wabbajack_act() + release_friends() + . = ..() + +/mob/living/simple_animal/slaughter/laughter/proc/release_friends() if(!consumed_mobs) - return ..() + return for(var/mob/living/M in consumed_mobs) M.loc = get_turf(src) if(M.revive(full_heal = 1)) - // Feel there should be a better way of FORCING a mob's ghost - // back into the body - if(!M.ckey) - for(var/mob/dead/observer/ghost in player_list) - if(M.real_name == ghost.real_name) - ghost.reenter_corpse() - break - M << "You leave the [src]'s warm embrace, and feel ready to take on the world." - - return ..() + M.grab_ghost(force = FALSE) + M << "You leave the [src]'s warm embrace, \ + and feel ready to take on the world." /mob/living/simple_animal/slaughter/laughter/bloodcrawl_swallow(var/mob/living/victim) if(consumed_mobs) diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index fbd6fe472a8..0b2aeacba24 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -348,7 +348,5 @@ var/obj/item/clothing/suit/space/hardsuit/syndi/suit = H.wear_suit suit.ToggleHelmet() - var/obj/item/clothing/head/helmet/space/hardsuit/syndi/helmet = H.head - helmet.attack_self(H) H.internal = H.r_store diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index 8a14dfe1a10..b10374a2dbf 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -425,7 +425,7 @@ This is here to make the tiles around the station mininuke change when it's arme /obj/item/weapon/disk/nuclear/process() var/turf/disk_loc = get_turf(src) - if(disk_loc.z > ZLEVEL_CENTCOM) + if(!disk_loc || disk_loc.z > ZLEVEL_CENTCOM) get(src, /mob) << "You can't help but feel that you just lost something back there..." qdel(src) @@ -438,10 +438,10 @@ This is here to make the tiles around the station mininuke change when it's arme M.remove_from_mob(src) if(istype(loc, /obj/item/weapon/storage)) var/obj/item/weapon/storage/S = loc - S.remove_from_storage(src, diskturf) + S.remove_from_storage(src, targetturf) forceMove(targetturf) //move the disc, so ghosts remain orbitting it even if it's "destroyed" - message_admins("[src] has been destroyed in ([diskturf.x], [diskturf.y] ,[diskturf.z] - JMP). Moving it to ([targetturf.x], [targetturf.y], [targetturf.z] - JMP).") - log_game("[src] has been destroyed in ([diskturf.x], [diskturf.y] ,[diskturf.z]). Moving it to ([targetturf.x], [targetturf.y], [targetturf.z]).") + message_admins("[src] has been destroyed in ([diskturf ? "[diskturf.x], [diskturf.y] ,[diskturf.z] - JMP":"nonexistent location"]). Moving it to ([targetturf.x], [targetturf.y], [targetturf.z] - JMP).") + log_game("[src] has been destroyed in ([diskturf ? "[diskturf.x], [diskturf.y] ,[diskturf.z]":"nonexistent location"]). Moving it to ([targetturf.x], [targetturf.y], [targetturf.z]).") else throw EXCEPTION("Unable to find a blobstart landmark") return QDEL_HINT_LETMELIVE //Cancel destruction regardless of success diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 457823e1ab4..9cc1c93fc1c 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -224,7 +224,11 @@ for(var/mob/living/player in player_list) if(player.mind && player.mind != owner) if(player.stat != DEAD) - if(istype(player, /mob/living/silicon)) //Borgs are technically dead anyways + if(issilicon(player)) //Borgs are technically dead anyways + continue + if(isanimal(player)) //animals don't count + continue + if(isbrain(player)) //also technically dead continue if(get_area(player) == A) if(!player.mind.special_role && !istype(get_turf(player.mind.current), /turf/open/floor/plasteel/shuttle/red)) @@ -247,7 +251,11 @@ for(var/mob/living/player in player_list) //Make sure nobody else is onboard if(player.mind && player.mind != owner) if(player.stat != DEAD) - if(istype(player, /mob/living/silicon)) + if(issilicon(player)) //Borgs are technically dead anyways + continue + if(isanimal(player)) //animals don't count + continue + if(isbrain(player)) //also technically dead continue if(get_area(player) == A) if(player.real_name != owner.current.real_name && !istype(get_turf(player.mind.current), /turf/open/floor/plasteel/shuttle/red)) @@ -256,7 +264,11 @@ for(var/mob/living/player in player_list) //Make sure at least one of you is onboard if(player.mind && player.mind != owner) if(player.stat != DEAD) - if(istype(player, /mob/living/silicon)) + if(issilicon(player)) //Borgs are technically dead anyways + continue + if(isanimal(player)) //animals don't count + continue + if(isbrain(player)) //also technically dead continue if(get_area(player) == A) if(player.real_name == owner.current.real_name && !istype(get_turf(player.mind.current), /turf/open/floor/plasteel/shuttle/red)) diff --git a/code/game/gamemodes/shadowling/shadowling.dm b/code/game/gamemodes/shadowling/shadowling.dm index 9ea427013e0..5ef9970bb3c 100644 --- a/code/game/gamemodes/shadowling/shadowling.dm +++ b/code/game/gamemodes/shadowling/shadowling.dm @@ -254,10 +254,10 @@ Made by Xhuis name = "Shadowling" id = "shadowling" say_mod = "chitters" - specflags = list(NOBREATH,NOBLOOD,RADIMMUNE,NOGUNS) //Can't use guns due to muzzle flash + specflags = list(NOBREATH,NOBLOOD,RADIMMUNE,NOGUNS,NODISMEMBER) //Can't use guns due to muzzle flash burnmod = 1.5 //1.5x burn damage, 2x is excessive heatmod = 1.5 - has_dismemberment = 0 + /datum/species/shadow/ling/spec_life(mob/living/carbon/human/H) if(!H.weakeyes) H.weakeyes = 1 //Makes them more vulnerable to flashes and flashbangs diff --git a/code/game/gamemodes/wizard/soulstone.dm b/code/game/gamemodes/wizard/soulstone.dm index 92c19d7600b..d652a5ae863 100644 --- a/code/game/gamemodes/wizard/soulstone.dm +++ b/code/game/gamemodes/wizard/soulstone.dm @@ -12,6 +12,9 @@ /obj/item/device/soulstone/anybody usability = 1 +/obj/item/device/soulstone/anybody/chaplain + name = "mysterious old shard" + /obj/item/device/soulstone/pickup(mob/living/user) ..() if(!iscultist(user) && !iswizard(user) && !usability) @@ -66,7 +69,7 @@ /obj/structure/constructshell name = "empty shell" icon = 'icons/obj/wizard.dmi' - icon_state = "construct" + icon_state = "construct-cult" desc = "A wicked machine used by those skilled in magical arts. It is inactive." /obj/structure/constructshell/examine(mob/user) diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index 360311ad9c1..d741a28896e 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -370,7 +370,10 @@ /datum/spellbook_entry/item/cursed_heart name = "Cursed Heart" - desc = "A heart that has been revived by dark magicks, the user must concentrate to ensure the heart beats, but every beat heals them. It must beat every 6 seconds." + desc = "A heart that has been revived by dark magicks, the user must \ + concentrate to ensure the heart beats, but every beat heals them. It \ + must beat every 6 seconds. The heart is fickle, and will not work for a \ + lich." item_path = /obj/item/organ/heart/cursed/wizard log_name = "CH" cost = 1 diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 253c17eeeb0..c9b1909c808 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -73,6 +73,8 @@ /obj/machinery/sleeper/close_machine(mob/user) if((isnull(user) || istype(user)) && state_open && !panel_open) ..(user) + if(occupant && occupant.stat != DEAD) + occupant << "You feel cool air surround you. You go numb as your senses turn inward." /obj/machinery/sleeper/attack_animal(mob/living/simple_animal/M) if(M.environment_smash) @@ -94,7 +96,7 @@ qdel(src) /obj/machinery/sleeper/MouseDrop_T(mob/target, mob/user) - if(user.stat || user.lying || !Adjacent(user) || !user.Adjacent(target) || !iscarbon(target)) + if(user.stat || user.lying || !Adjacent(user) || !user.Adjacent(target) || !iscarbon(target) || !user.IsAdvancedToolUser()) return close_machine(target) diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 4014ad407ec..a26857fd63b 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -133,6 +133,9 @@ busy = 0 return 1 + if(O.flags & HOLOGRAM) + return 1 + var/material_amount = materials.get_item_material_amount(O) if(!material_amount) user << "This object does not contain sufficient amounts of metal or glass to be accepted by the autolathe." diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 6e2d45a1f1a..b916029f14e 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -10,7 +10,7 @@ use_power = 2 idle_power_usage = 5 active_power_usage = 10 - layer = 5 + layer = MOB_LAYER + 0.25 var/health = 50 var/list/network = list("SS13") diff --git a/code/game/machinery/droneDispenser.dm b/code/game/machinery/droneDispenser.dm index dc9bf8e0115..07e44ffe1be 100644 --- a/code/game/machinery/droneDispenser.dm +++ b/code/game/machinery/droneDispenser.dm @@ -1,28 +1,43 @@ +#define DRONE_PRODUCTION "production" +#define DRONE_RECHARGING "recharging" +#define DRONE_READY "ready" + /obj/machinery/droneDispenser //Most customizable machine 2015 name = "drone shell dispenser" - desc = "A hefty machine that, when supplied with metal and glass, will periodically create a drone shell. Does not need to be manually operated." + desc = "A hefty machine that, when supplied with metal and glass, \ + will periodically create a drone shell. \ + Does not need to be manually operated." + icon = 'icons/obj/machines/droneDispenser.dmi' icon_state = "on" anchored = 1 density = 1 - var/health = 100 //The health of the drone dispenser. It will break if it goes below 0 + var/health = 100 var/max_health = 100 - var/icon_off = "off" //These variables allow for different icons when creating custom dispensers + // These allow for different icons when creating custom dispensers + var/icon_off = "off" var/icon_on = "on" var/icon_recharging = "recharge" var/icon_creating = "make" - var/metal = 0 - var/glass = 0 + var/datum/material_container/materials + var/list/using_materials var/metal_cost = 1000 var/glass_cost = 1000 var/power_used = 1000 - var/droneMadeRecently = 0 + var/mode = DRONE_READY + var/timer var/cooldownTime = 1800 //3 minutes - var/dispense_type = /obj/item/drone_shell //The item the dispenser will create + var/production_time = 30 + //The item the dispenser will create + var/dispense_type = /obj/item/drone_shell + + // The maximum number of "idle" drone shells it will make before + // ceasing production. Set to 0 for infinite. + var/maximum_idle = 3 var/work_sound = 'sound/items/rped.ogg' var/create_sound = 'sound/items/Deconstruct.ogg' @@ -31,7 +46,8 @@ var/begin_create_message = "whirs to life!" var/end_create_message = "dispenses a drone shell." var/recharge_message = "pings." - var/recharging_text = "It is whirring and clicking. It seems to be recharging." + var/recharging_text = "It is whirring and clicking. \ + It seems to be recharging." var/break_message = "lets out a tinny alarm before falling dark." var/break_sound = 'sound/machines/warning-buzzer.ogg' @@ -39,48 +55,63 @@ /obj/machinery/droneDispenser/New() ..() health = max_health - SSmachine.processing |= src + materials = new(src, list(MAT_METAL=1, MAT_GLASS=1), + MINERAL_MATERIAL_AMOUNT*MAX_STACK_SIZE*2) + + using_materials = list(MAT_METAL=metal_cost, MAT_GLASS=glass_cost) /obj/machinery/droneDispenser/Destroy() - SSmachine.processing -= src - return ..() + qdel(materials) + . = ..() -/obj/machinery/droneDispenser/preloaded - metal = 5000 - glass = 5000 +/obj/machinery/droneDispenser/preloaded/New() + ..() + materials.insert_amount(5000) /obj/machinery/droneDispenser/syndrone //Please forgive me name = "syndrone shell dispenser" - desc = "A suspicious machine that will create Syndicate exterminator drones when supplied with metal and glass. Disgusting." - metal = 25000 - glass = 25000 + desc = "A suspicious machine that will create Syndicate \ + exterminator drones when supplied with metal and glass. Disgusting." dispense_type = /obj/item/drone_shell/syndrone - cooldownTime = 100 //If we're gonna be a jackass, go the full mile - 10 second recharge timer + //If we're gonna be a jackass, go the full mile - 10 second recharge timer + cooldownTime = 100 end_create_message = "dispenses a suspicious drone shell." +/obj/machinery/droneDispenser/syndrone/New() + ..() + materials.insert_amount(25000) + /obj/machinery/droneDispenser/syndrone/badass //Please forgive me name = "badass syndrone shell dispenser" - desc = "A suspicious machine that will create Syndicate exterminator drones when supplied with metal and glass. Disgusting. This one seems ominous." + desc = "A suspicious machine that will create Syndicate \ + exterminator drones when supplied with metal and glass. \ + Disgusting. This one seems ominous." dispense_type = /obj/item/drone_shell/syndrone/badass end_create_message = "dispenses a ominous suspicious drone shell." // I don't need your forgiveness, this is awesome. /obj/machinery/droneDispenser/snowflake name = "snowflake drone shell dispenser" - desc = "A hefty machine that, when supplied with metal and glass, will periodically create a snowflake drone shell. Does not need to be manually operated." - dispense_type = /obj/item/drone_shell/snowflake //The item the dispenser will create + desc = "A hefty machine that, when supplied with metal and glass, \ + will periodically create a snowflake drone shell. \ + Does not need to be manually operated." + dispense_type = /obj/item/drone_shell/snowflake + end_create_message = "dispenses a snowflake drone shell." // Those holoprojectors aren't cheap metal_cost = 2000 glass_cost = 2000 power_used = 2000 -/obj/machinery/droneDispenser/snowflake/preloaded - metal = 10000 - glass = 10000 +/obj/machinery/droneDispenser/snowflake/preloaded/New() + ..() + materials.insert_amount(10000) -/obj/machinery/droneDispenser/hivebot //An example of a custom drone dispenser. This one requires no materials and creates basic hivebots +// An example of a custom drone dispenser. +// This one requires no materials and creates basic hivebots +/obj/machinery/droneDispenser/hivebot name = "hivebot fabricator" - desc = "A large, bulky machine that whirs with activity, steam hissing from vents in its sides." + desc = "A large, bulky machine that whirs with activity, \ + steam hissing from vents in its sides." icon = 'icons/obj/objects.dmi' icon_state = "hivebot_fab" icon_off = "hivebot_fab" @@ -99,7 +130,8 @@ /obj/machinery/droneDispenser/swarmer name = "swarmer fabricator" - desc = "An alien machine of unknown origin. It whirs and hums with green-blue light, the air above it shimmering." + desc = "An alien machine of unknown origin. \ + It whirs and hums with green-blue light, the air above it shimmering." icon = 'icons/obj/machines/gateway.dmi' icon_state = "toffcenter" icon_off = "toffcenter" @@ -109,9 +141,12 @@ metal_cost = 0 glass_cost = 0 cooldownTime = 300 //30 seconds + maximum_idle = 0 // Swarmers have no restraint dispense_type = /obj/item/device/unactivated_swarmer - begin_create_message = "hums softly as an interface appears above it, scrolling by at unreadable speed." - end_create_message = "materializes a strange shell, which drops to the ground." + begin_create_message = "hums softly as an interface appears above it, \ + scrolling by at unreadable speed." + end_create_message = "materializes a strange shell, which drops to the \ + ground." recharging_text = "Its lights are slowly increasing in brightness." work_sound = 'sound/effects/EMPulse.ogg' create_sound = 'sound/effects/phasein.ogg' @@ -120,122 +155,158 @@ /obj/machinery/droneDispenser/examine(mob/user) ..() - if(droneMadeRecently && !stat && recharging_text) + if((mode == DRONE_RECHARGING) && !stat && recharging_text) user << "[recharging_text]" if(stat & BROKEN) - user << "[src] is smoking and steadily buzzing. It seems to be broken." + user << "[src] is smoking and steadily buzzing. \ + It seems to be broken." if(metal_cost) - user << "It has [metal] units of metal stored." + user << "It has [materials.amount(MAT_METAL)] \ + units of metal stored." if(glass_cost) - user << "It has [glass] units of glass stored." + user << "It has [materials.amount(MAT_GLASS)] \ + units of glass stored." /obj/machinery/droneDispenser/power_change() ..() - if(stat & BROKEN) - return + if(powered()) + stat &= ~NOPOWER else - if(powered()) - stat &= ~NOPOWER - else - icon_state = "off" - stat |= NOPOWER + stat |= NOPOWER + update_icon() /obj/machinery/droneDispenser/process() ..() - if(stat & (NOPOWER|BROKEN) || !anchored) + if((stat & (NOPOWER|BROKEN)) || !anchored) return - if((metal_cost && glass_cost) && (metal < metal_cost || glass < glass_cost)) + + if(!materials.has_materials(using_materials)) + return // We require more minerals + + // We are currently in the middle of something + if(timer > world.time) return - if(droneMadeRecently) - icon_state = icon_recharging - return - droneMadeRecently = 1 - if(begin_create_message) - visible_message("[src] [begin_create_message]") - if(work_sound) - playsound(src, work_sound, 50, 1) - icon_state = icon_creating - sleep(30) - icon_state = icon_on - metal -= metal_cost - glass -= glass_cost - if(metal < 0) - metal = 0 - if(glass < 0) - glass = 0 - if(power_used) - use_power(power_used) - new dispense_type(loc) - if(create_sound) - playsound(src, create_sound, 50, 1) - if(end_create_message) - visible_message("[src] [end_create_message]") - icon_state = icon_recharging - sleep(cooldownTime) - if(!(stat & BROKEN)) - icon_state = icon_on - else + + switch(mode) + if(DRONE_READY) + // If we have X drone shells already on our turf + if(maximum_idle && (count_shells() >= maximum_idle)) + return // then do nothing; check again next tick + if(begin_create_message) + visible_message("\ + [src] [begin_create_message]") + if(work_sound) + playsound(src, work_sound, 50, 1) + mode = DRONE_PRODUCTION + timer = world.time + production_time + update_icon() + + if(DRONE_PRODUCTION) + materials.use_amount(using_materials) + if(power_used) + use_power(power_used) + + new dispense_type(loc) + + if(create_sound) + playsound(src, create_sound, 50, 1) + if(end_create_message) + visible_message("[src] \ + [end_create_message]") + + mode = DRONE_RECHARGING + timer = world.time + cooldownTime + update_icon() + + if(DRONE_RECHARGING) + if(recharge_sound) + playsound(src, recharge_sound, 50, 1) + if(recharge_message) + visible_message("\ + [src] [recharge_message]") + + mode = DRONE_READY + update_icon() + +/obj/machinery/droneDispenser/proc/count_shells() + . = 0 + for(var/a in loc) + if(istype(a, dispense_type)) + .++ + +/obj/machinery/droneDispenser/update_icon() + if(stat & (BROKEN|NOPOWER)) icon_state = icon_off - droneMadeRecently = 0 - if(recharge_sound) - playsound(src, recharge_sound, 50, 1) - if(recharge_message) - visible_message("[src] [recharge_message]") + else if(mode == DRONE_RECHARGING) + icon_state = icon_recharging + else if(mode == DRONE_PRODUCTION) + icon_state = icon_creating + else + icon_state = icon_on /obj/machinery/droneDispenser/attackby(obj/item/O, mob/living/user) if(istype(O, /obj/item/stack)) if(!O.materials[MAT_METAL] && !O.materials[MAT_GLASS]) return ..() if(!metal_cost && !glass_cost) - user << "There isn't a place to insert [O]!" + user << "There isn't a place \ + to insert [O]!" return - var/stack = 1 - var/obj/item/stack/sheets - sheets = O - stack = (input(user, "How many sheets do you want to add?.", "Drone Dispenser", "[stack]") as num) - if(stack <= 0) + var/obj/item/stack/sheets = O + if(!user.canUnEquip(sheets)) + user << "[O] is stuck to your hand, \ + you can't get it off!" return - if(!user.canUseTopic(src)) - return - stack = Clamp(stack, 0, sheets.max_amount) - sheets.use(stack) - if(!stack) - if(!user.unEquip(O)) - user << "[O] is stuck to your hand, you can't get it off!" - return - user.drop_item() - O.loc = src - metal += O.materials[MAT_METAL] * stack - glass += O.materials[MAT_GLASS] * stack - user << "You insert [stack] sheet[stack > 1 ? "s" : ""] to [src]." - if((O && O.loc == src) || !stack) - qdel(O) - else if(istype(O, /obj/item/weapon/weldingtool)) - if(stat & BROKEN) - var/obj/item/weapon/weldingtool/WT = O - if(!WT.isOn()) - return - if(WT.get_fuel() < 1) - user << "You need more fuel to complete this task!" - return - playsound(src, 'sound/items/Welder.ogg', 50, 1) - user.visible_message("[user] begins patching up [src] with [WT].", \ - "You begin restoring the damage to [src]...") - if(!do_after(user, 40/O.toolspeed, target = src)) - return - if(!src || !WT.remove_fuel(1, user)) return - user.visible_message("[user] fixes [src]!", \ - "You restore [src] to operation.") - stat &= ~BROKEN - health = max_health - if(!stat) - icon_state = icon_on + + var/used = materials.insert_stack(sheets, sheets.amount) + + if(used) + user << "You insert [used] \ + sheet[used > 1 ? "s" : ""] into [src]." else + user << "The [src] isn't accepting the \ + [sheets]." + + else if(istype(O, /obj/item/weapon/weldingtool)) + if(!(stat & BROKEN)) user << "[src] doesn't need repairs." + return + + var/obj/item/weapon/weldingtool/WT = O + + if(!WT.isOn()) + return + + if(WT.get_fuel() < 1) + user << "You need more fuel to \ + complete this task!" + return + + playsound(src, 'sound/items/Welder.ogg', 50, 1) + user.visible_message( + "[user] begins patching up \ + [src] with [WT].", + "You begin restoring the \ + damage to [src]...") + + if(!do_after(user, 40/O.toolspeed, target = src)) + return + if(!src || !WT.remove_fuel(1, user)) + return + + user.visible_message( + "[user] fixes [src]!", + "You restore [src] to operation.") + + stat &= ~BROKEN + health = max_health + update_icon() else return ..() -/obj/machinery/droneDispenser/take_damage(damage, damage_type = BRUTE, sound_effect = 1) +/obj/machinery/droneDispenser/take_damage(damage, damage_type = BRUTE, + sound_effect = TRUE) + // But why would you hurt the dispenser? switch(damage_type) if(BURN) if(sound_effect) @@ -251,9 +322,13 @@ health = max(health - damage, 0) if(!health && !(stat & BROKEN)) if(break_message) - audible_message("[src] [break_message]") + audible_message("[src] \ + [break_message]") if(break_sound) playsound(src, break_sound, 50, 1) stat |= BROKEN - icon_state = icon_off + update_icon() +#undef DRONE_PRODUCTION +#undef DRONE_RECHARGING +#undef DRONE_READY diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 55479c7e462..53800726166 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -84,7 +84,8 @@ /obj/machinery/vending/snack = "Getmore Chocolate Corp", /obj/machinery/vending/cola = "Robust Softdrinks", /obj/machinery/vending/cigarette = "ShadyCigs Deluxe", - /obj/machinery/vending/autodrobe = "AutoDrobe") + /obj/machinery/vending/autodrobe = "AutoDrobe", + /obj/machinery/vending/clothing = "ClothesMate") /obj/item/weapon/circuitboard/machine/vendor/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/weapon/screwdriver)) diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm index c3847474e60..9ab089a34ff 100644 --- a/code/game/mecha/mech_bay.dm +++ b/code/game/mecha/mech_bay.dm @@ -94,36 +94,35 @@ return interact(user) -/obj/machinery/computer/mech_bay_power_console/interact(mob/user) - var/data - if(!recharge_port) - data += "
No recharging port detected.

" - data += "Reconnect" - else - data += "

Mech status

" - if(!recharge_port.recharging_mech) - data += "
No mech detected.
" - else - data += "
Integrity: [recharge_port.recharging_mech.health]
" +/obj/machinery/computer/mech_bay_power_console/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = default_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "mech_bay_power_console", "Mech Bay Power Control Console", 400, 170, master_ui, state) + ui.open() - if(!recharge_port.recharging_mech.cell) - data += "WARNING : the mech cell is missing!
" - else if(recharge_port.recharging_mech.cell.crit_fail) - data += "WARNING : the mech cell seems faulty!" - else - data += "Power: [recharge_port.recharging_mech.cell.charge]/[recharge_port.recharging_mech.cell.maxcharge]" - - var/datum/browser/popup = new(user, "mech recharger", name, 300, 300) - popup.set_content(data) - popup.open() - return - -/obj/machinery/computer/mech_bay_power_console/Topic(href, href_list) +/obj/machinery/computer/mech_bay_power_console/ui_act(action, params) if(..()) return - if(href_list["reconnect"]) - reconnect() - updateUsrDialog() + switch(action) + if("reconnect") + reconnect() + . = TRUE + update_icon() + +/obj/machinery/computer/mech_bay_power_console/ui_data(mob/user) + var/list/data = list() + if(recharge_port && !qdeleted(recharge_port)) + data["recharge_port"] = list("mech" = null) + if(recharge_port.recharging_mech && !qdeleted(recharge_port.recharging_mech)) + data["recharge_port"]["mech"] = list("health" = recharge_port.recharging_mech.health, "maxhealth" = initial(recharge_port.recharging_mech.health), "cell" = null) + if(recharge_port.recharging_mech.cell && !qdeleted(recharge_port.recharging_mech.cell)) + data["recharge_port"]["mech"]["cell"] = list( + "critfail" = recharge_port.recharging_mech.cell.crit_fail, + "charge" = recharge_port.recharging_mech.cell.charge, + "maxcharge" = recharge_port.recharging_mech.cell.maxcharge + ) + return data + /obj/machinery/computer/mech_bay_power_console/proc/reconnect() if(recharge_port) @@ -142,11 +141,6 @@ else recharge_port = null -/obj/machinery/computer/mech_bay_power_console/process() - if(recharge_port && recharge_port.recharging_mech && recharge_port.recharging_mech.cell) - updateDialog() - - /obj/machinery/computer/mech_bay_power_console/update_icon() ..() if(!recharge_port || !recharge_port.recharging_mech || !recharge_port.recharging_mech.cell || !(recharge_port.recharging_mech.cell.charge < recharge_port.recharging_mech.cell.maxcharge) || stat & (NOPOWER|BROKEN)) diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 79848f024f5..7e9aa8e2ae3 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -1,3 +1,9 @@ +#define RANDOM_GRAFFITI "Random Graffiti" +#define RANDOM_LETTER "Random Letter" +#define RANDOM_NUMBER "Random Number" +#define RANDOM_ORIENTED "Random Oriented" +#define RANDOM_RUNE "Random Rune" +#define RANDOM_ANY "Random Anything" /* * Crayons @@ -8,22 +14,52 @@ desc = "A colourful crayon. Looks tasty. Mmmm..." icon = 'icons/obj/crayons.dmi' icon_state = "crayonred" + + var/icon_capped + var/icon_uncapped + var/use_overlays = FALSE + item_color = "red" w_class = 1 attack_verb = list("attacked", "coloured") var/paint_color = "#FF0000" //RGB - var/drawtype = "rune" + + var/drawtype var/text_buffer = "" + var/list/graffiti = list("amyjon","face","matt","revolution","engie","guy","end","dwarf","uboa","body","cyka","arrow","star","poseur tag") var/list/letters = 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") var/list/numerals = list("0","1","2","3","4","5","6","7","8","9") var/list/oriented = list("arrow","body") // These turn to face the same way as the drawer - var/uses = 30 //-1 or less for unlimited uses - var/instant = 0 - var/dat + var/list/runes = list("rune1","rune2","rune3","rune4","rune5","rune6") + var/list/randoms = list(RANDOM_ANY, RANDOM_RUNE, RANDOM_ORIENTED, + RANDOM_NUMBER, RANDOM_GRAFFITI, RANDOM_LETTER) + + var/list/all_drawables + + var/charges = 30 //-1 or less for unlimited uses + var/charges_left + var/volume_multiplier = 1 // Increases reagent effect + + var/actually_paints = TRUE + + var/instant = FALSE + var/self_contained = TRUE // If it deletes itself when it is empty + var/list/validSurfaces = list(/turf/open/floor) - var/gang = 0 //For marking territory - var/edible = 1 + var/gang = FALSE //For marking territory + + var/edible = TRUE // That doesn't mean eating it is a good idea + + var/list/reagent_contents = list("nutriment" = 1) + // If the user can toggle the colour, a la vanilla spraycan + var/can_change_colour = FALSE + + var/has_cap = FALSE + var/is_capped = FALSE + + var/pre_noise = FALSE + var/post_noise = FALSE /obj/item/toy/crayon/suicide_act(mob/user) user.visible_message("[user] is jamming the [src.name] up \his nose and into \his brain. It looks like \he's trying to commit suicide.") @@ -31,48 +67,148 @@ /obj/item/toy/crayon/New() ..() - name = "[item_color] crayon" //Makes crayons identifiable in things like grinders - drawtype = pick(pick(graffiti), pick(letters), "rune[rand(1,6)]") + // Makes crayons identifiable in things like grinders + if(name == "crayon") + name = "[item_color] crayon" + if(config) if(config.mutant_races == 1) graffiti |= "antilizard" graffiti |= "prolizard" -/obj/item/toy/crayon/initialize() - if(config.mutant_races == 1) - graffiti |= "antilizard" - graffiti |= "prolizard" + all_drawables = graffiti + letters + numerals + oriented + runes + drawtype = pick(all_drawables) -/obj/item/toy/crayon/attack_self(mob/living/user) - update_window(user) + refill() -/obj/item/toy/crayon/proc/update_window(mob/living/user) - dat += "

Currently selected: [drawtype]


" - dat += "Random letterPick letter/number" - dat += "Write" - dat += "
" - dat += "

Runes:


" - dat += "Random rune" - for(var/i = 1; i <= 6; i++) - dat += "Rune[i]" - if(!((i + 1) % 3)) //3 buttons in a row - dat += "
" - dat += "
" - graffiti.Find() - dat += "

Graffiti:


" - dat += "Random graffiti" - var/c = 1 - for(var/T in graffiti) - dat += "[T]" - if(!((c + 1) % 3)) //3 buttons in a row - dat += "
" - c++ - dat += "
" - var/datum/browser/popup = new(user, "crayon", name, 300, 500) - popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) - popup.open() - dat = "" +/obj/item/toy/crayon/Destroy() + if(reagents) + qdel(reagents) + . = ..() + +/obj/item/toy/crayon/proc/refill() + if(charges == -1) + charges_left = 100 + else + charges_left = charges + + if(!reagents) + create_reagents(charges_left * volume_multiplier) + reagents.clear_reagents() + + var/total_weight = 0 + for(var/key in reagent_contents) + total_weight += reagent_contents[key] + + var/units_per_weight = reagents.maximum_volume / total_weight + for(var/reagent in reagent_contents) + var/weight = reagent_contents[reagent] + var/amount = weight * units_per_weight + reagents.add_reagent(reagent, amount) + +/obj/item/toy/crayon/proc/use_charges(amount) + // Returns number of charges actually used + if(charges == -1) + . = amount + refill() + else + . = min(charges_left, amount) + charges_left -= . + +/obj/item/toy/crayon/proc/check_empty(mob/user) + // When eating a crayon, check_empty() can be called twice producing + // two messages unless we check for being deleted first + if(!qdeleted(src)) + . = TRUE + + . = FALSE + // -1 is unlimited charges + if(charges == -1) + . = FALSE + else if(!charges_left) + user << "There is no more of [src.name] \ + left!" + if(self_contained) + qdel(src) + . = TRUE + +/obj/item/toy/crayon/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = hands_state) + // god bless tgui and all of its arguments + + SStgui.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "crayon", name, 600, 600, + master_ui, state) + ui.open() + +/obj/item/toy/crayon/ui_data() + var/list/data = list() + data["drawables"] = list() + var/list/D = data["drawables"] + + var/list/g_items = list() + D += list(list("name" = "Graffiti", "items" = g_items)) + for(var/g in graffiti) + g_items += list(list("item" = g)) + + var/list/L_items = list() + D += list(list("name" = "Letters", "items" = L_items)) + for(var/L in letters) + L_items += list(list("item" = L)) + + var/list/N_items = list() + D += list(list(name = "Numerals", "items" = N_items)) + for(var/N in numerals) + N_items += list(list("item" = N)) + + var/list/O_items = list() + D += list(list(name = "Oriented", "items" = O_items)) + for(var/O in oriented) + O_items += list(list("item" = O)) + + var/list/R_items = list() + D += list(list(name = "Runes", "items" = R_items)) + for(var/R in runes) + R_items += list(list("item" = R)) + + var/list/rand_items = list() + D += list(list(name = "Random", "items" = rand_items)) + for(var/i in randoms) + rand_items += list(list("item" = i)) + + data["selected_stencil"] = drawtype + data["text_buffer"] = text_buffer + + data["has_cap"] = has_cap + data["is_capped"] = is_capped + data["can_change_colour"] = can_change_colour + data["current_colour"] = paint_color + + return data + +/obj/item/toy/crayon/ui_act(action, list/params) + if(..()) + return + switch(action) + if("toggle_cap") + if(has_cap) + is_capped = !is_capped + . = TRUE + if("select_stencil") + var/stencil = params["item"] + if(stencil in all_drawables + randoms) + drawtype = stencil + . = TRUE + if("select_colour") + if(can_change_colour) + paint_color = input(usr,"Choose Color") as color + . = TRUE + if("enter_text") + var/txt = stripped_input(usr,"Choose what to write.", + "Scribbles",default = text_buffer) + text_buffer = crayon_text_strip(txt) + . = TRUE + update_icon() /obj/item/toy/crayon/proc/crayon_text_strip(text) var/list/base = char_split(lowertext(text)) @@ -82,129 +218,137 @@ out += a return jointext(out,"") -/obj/item/toy/crayon/Topic(href, href_list, hsrc) - var/temp = "a" - if(href_list["buffer"]) - text_buffer = crayon_text_strip(stripped_input(usr,"Choose what to write.", "Scribbles",default = text_buffer)) - if(href_list["type"]) - switch(href_list["type"]) - if("random_letter") - temp = pick(letters) - if("letter") - temp = input("Choose what to write.", "Scribbles") in (letters|numerals) - if("random_rune") - temp = "rune[rand(1,6)]" - if("random_graffiti") - temp = pick(graffiti) - else - temp = href_list["type"] - if ((usr.restrained() || usr.stat || usr.get_active_hand() != src)) - return - drawtype = temp - update_window(usr) - /obj/item/toy/crayon/afterattack(atom/target, mob/user, proximity) - if(!proximity || !check_allowed_items(target)) return - if(!uses) - user << "There is no more of [src.name] left!" - if(!instant) - qdel(src) + if(!proximity || !check_allowed_items(target)) return + + if(check_empty(user)) + return + if(istype(target, /obj/effect/decal/cleanable)) target = target.loc - if(is_type_in_list(target,validSurfaces)) - var/temp = "rune" - if(letters.Find(drawtype)) - temp = "letter" - else if(graffiti.Find(drawtype)) - temp = "graffiti" - else if(numerals.Find(drawtype)) - temp = "number" + if(!is_type_in_list(target,validSurfaces)) + return - ////////////////////////// GANG FUNCTIONS - var/area/territory - var/gangID - if(gang) - //Determine gang affiliation - gangID = user.mind.gang_datum + var/drawing = drawtype + switch(drawtype) + if(RANDOM_LETTER) + drawing = pick(letters) + if(RANDOM_GRAFFITI) + drawing = pick(graffiti) + if(RANDOM_RUNE) + drawing = pick(runes) + if(RANDOM_ORIENTED) + drawing = pick(oriented) + if(RANDOM_NUMBER) + drawing = pick(numerals) + if(RANDOM_ANY) + drawing = pick(all_drawables) - //Check area validity. Reject space, player-created areas, and non-station z-levels. - if(gangID) - territory = get_area(target) - if(territory && (territory.z == ZLEVEL_STATION) && territory.valid_territory) - //Check if this area is already tagged by a gang - if(!(locate(/obj/effect/decal/cleanable/crayon/gang) in target)) //Ignore the check if the tile being sprayed has a gang tag - if(territory_claimed(territory, user)) - return - if(locate(/obj/machinery/power/apc) in (user.loc.contents | target.contents)) - user << "You cannot tag here." - return - else - user << "[territory] is unsuitable for tagging." - return - ///////////////////////////////////////// + var/temp = "rune" + if(drawing in letters) + temp = "letter" + else if(drawing in graffiti) + temp = "graffiti" + else if(drawing in numerals) + temp = "number" - var/graf_rot - if(oriented.Find(drawtype)) - switch(user.dir) - if(EAST) - graf_rot = 90 - if(SOUTH) - graf_rot = 180 - if(WEST) - graf_rot = 270 - else - graf_rot = 0 + // If a gang member is using a gang spraycan, it'll behave differently + var/gang_mode = FALSE + if(gang && user.mind && user.mind.gang_datum) + gang_mode = TRUE - user << "You start [instant ? "spraying" : "drawing"] a [temp] on the [target.name]..." - if(instant) - playsound(user.loc, 'sound/effects/spray.ogg', 5, 1, 5) - if((instant>0) || do_after(user, 50, target = target)) - - if(length(text_buffer)) - drawtype = copytext(text_buffer,1,2) - text_buffer = copytext(text_buffer,2) - - //Gang functions - if(gangID) - //Delete any old markings on this tile, including other gang tags - if(!(locate(/obj/effect/decal/cleanable/crayon/gang) in target)) //Ignore the check if the tile being sprayed has a gang tag - if(territory_claimed(territory, user)) - return - for(var/obj/effect/decal/cleanable/crayon/old_marking in target) - qdel(old_marking) - new /obj/effect/decal/cleanable/crayon/gang(target,gangID,"graffiti",graf_rot) - user << "You tagged [territory] for your gang!" + // discontinue if the area isn't valid for tagging because gang "honour" + if(gang_mode && (!can_claim_for_gang(user, target))) + return + var/graf_rot + if(drawing in oriented) + switch(user.dir) + if(EAST) + graf_rot = 90 + if(SOUTH) + graf_rot = 180 + if(WEST) + graf_rot = 270 else - new /obj/effect/decal/cleanable/crayon(target,paint_color,drawtype,temp,graf_rot) + graf_rot = 0 - user << "You finish [instant ? "spraying" : "drawing"] \the [temp]." - if(instant<0) - playsound(user.loc, 'sound/effects/spray.ogg', 5, 1, 5) - if(uses < 0) + user << "You start \ + [instant ? "spraying" : "drawing"] a [temp] on the \ + [target.name]..." + + if(pre_noise) + audible_message("You hear spraying.") + playsound(user.loc, 'sound/effects/spray.ogg', 5, 1, 5) + + var/takes_time = !instant + if(gang_mode) + takes_time = TRUE + + if(takes_time) + if(!do_after(user, 50, target = target)) + return + + if(length(text_buffer)) + drawing = copytext(text_buffer,1,2) + text_buffer = copytext(text_buffer,2) + + if(actually_paints) + if(gang_mode) + // They're attempting to tag for their gang + if(!tag_for_gang(user, target)) return - uses = max(0,uses-1) - if(!uses) - user << "There is no more of [src.name] left!" - if(!instant) - qdel(src) - return + else + new /obj/effect/decal/cleanable/crayon(target, paint_color, + drawing, temp, graf_rot) + + user << "You finish \ + [instant ? "spraying" : "drawing"] \the [temp]." + + if(post_noise) + audible_message("You hear spraying.") + playsound(user.loc, 'sound/effects/spray.ogg', 5, 1, 5) + + . = use_charges(1) + var/fraction = min(1, . / reagents.maximum_volume) + reagents.reaction(target, TOUCH, fraction * volume_multiplier) + reagents.trans_to(target, ., volume_multiplier) + check_empty(user) /obj/item/toy/crayon/attack(mob/M, mob/user) if(edible && (M == user)) user << "You take a bite of the [src.name]. Delicious!" - user.nutrition += 5 - if(uses < 0) - return - uses = max(0,uses-5) - if(!uses) - user << "There is no more of [src.name] left!" - qdel(src) + var/eaten = use_charges(5) + var/fraction = min(eaten / reagents.total_volume, 1) + reagents.reaction(M, INGEST, fraction * volume_multiplier) + reagents.trans_to(M, eaten, volume_multiplier) + // check_empty() is called during afterattack else ..() +/obj/item/toy/crayon/proc/can_claim_for_gang(mob/user, atom/target) + // Check area validity. + // Reject space, player-created areas, and non-station z-levels. + var/area/A = get_area(target) + if(!A || (A.z != ZLEVEL_STATION) || !A.valid_territory) + user << "[A] is unsuitable for \ + tagging." + return FALSE + + if(!(locate(/obj/effect/decal/cleanable/crayon/gang in target))) + if(territory_claimed(A, user)) + return FALSE + + var/apc_check_area = user.loc.contents | target.contents + if(locate(/obj/machinery/power/apc in apc_check_area)) + user << "You can't tag an APC." + return FALSE + + // If you pass the gaunlet of checks, you're good to proceed + return TRUE + /obj/item/toy/crayon/proc/territory_claimed(area/territory,mob/user) var/occupying_gang for(var/datum/gang/G in ticker.mode.gangs) @@ -212,41 +356,62 @@ occupying_gang = G.name break if(occupying_gang) - user << "[territory] has already been tagged by the [occupying_gang] gang! You must get rid of or spray over the old tag first!" - return 1 - return 0 + user << "[territory] has already been tagged \ + by the [occupying_gang] gang! You must get rid of or spray over \ + the old tag first!" + return TRUE + return FALSE +/obj/item/toy/crayon/proc/tag_for_gang(mob/user, atom/target) + // Check again to see if anyone's tagged in the meanwhile + if(!can_claim_for_gang(user, target)) + return + //Delete any old markings on this tile, including other gang tags + for(var/obj/effect/decal/cleanable/crayon/old_marking in target) + qdel(old_marking) + + var/gangID = user.mind.gang_datum + var/area/territory = get_area(target) + + new /obj/effect/decal/cleanable/crayon/gang(target,gangID,"graffiti",0) + user << "You tagged [territory] for your gang!" /obj/item/toy/crayon/red icon_state = "crayonred" paint_color = "#DA0000" item_color = "red" + reagent_contents = list("nutriment" = 1, "redcrayonpowder" = 1) /obj/item/toy/crayon/orange icon_state = "crayonorange" paint_color = "#FF9300" item_color = "orange" + reagent_contents = list("nutriment" = 1, "orangecrayonpowder" = 1) /obj/item/toy/crayon/yellow icon_state = "crayonyellow" paint_color = "#FFF200" item_color = "yellow" + reagent_contents = list("nutriment" = 1, "yellowcrayonpowder" = 1) /obj/item/toy/crayon/green icon_state = "crayongreen" paint_color = "#A8E61D" item_color = "green" + reagent_contents = list("nutriment" = 1, "greencrayonpowder" = 1) /obj/item/toy/crayon/blue icon_state = "crayonblue" paint_color = "#00B7EF" item_color = "blue" + reagent_contents = list("nutriment" = 1, "bluecrayonpowder" = 1) /obj/item/toy/crayon/purple icon_state = "crayonpurple" paint_color = "#DA00FF" item_color = "purple" + reagent_contents = list("nutriment" = 1, "purplecrayonpowder" = 1) /obj/item/toy/crayon/white icon_state = "crayonwhite" @@ -258,54 +423,26 @@ desc = "A very sad-looking crayon." paint_color = "#FFFFFF" item_color = "mime" - uses = -1 - -/obj/item/toy/crayon/mime/attack_self(mob/living/user) - update_window(user) - -/obj/item/toy/crayon/mime/update_window(mob/living/user) - dat += "
   Change color
" - ..() - -/obj/item/toy/crayon/mime/Topic(href,href_list) - if ((usr.restrained() || usr.stat || usr.get_active_hand() != src)) - return - if(href_list["color"]) - if(paint_color != "#FFFFFF") - paint_color = "#FFFFFF" - else - paint_color = "#000000" - update_window(usr) - else - ..() + reagent_contents = list("nutriment" = 1, "invisiblecrayonpowder" = 1) + charges = -1 /obj/item/toy/crayon/rainbow icon_state = "crayonrainbow" paint_color = "#FFF000" item_color = "rainbow" - uses = -1 + reagent_contents = list("nutriment" = 1, "colorful_reagent" = 1) + drawtype = RANDOM_ANY // just the default starter. -/obj/item/toy/crayon/rainbow/attack_self(mob/living/user) - update_window(user) + charges = -1 -/obj/item/toy/crayon/rainbow/update_window(mob/living/user) - dat += "
   Change color
" - ..() - -/obj/item/toy/crayon/rainbow/Topic(href,href_list[]) - - if(href_list["color"]) - var/temp = input(usr, "Please select colour.", "Crayon colour") as color - if ((usr.restrained() || usr.stat || usr.get_active_hand() != src)) - return - paint_color = temp - update_window(usr) - else - ..() +/obj/item/toy/crayon/rainbow/afterattack(atom/target, mob/user, proximity) + paint_color = rgb(rand(0,255), rand(0,255), rand(0,255)) + . = ..() /* * Crayon Box */ + /obj/item/weapon/storage/crayons name = "box of crayons" desc = "A box of crayons for all your rune drawing needs." @@ -340,120 +477,158 @@ usr << "This crayon is too sad to be contained in this box." return if("rainbow") - usr << "This crayon is too powerful to be contained in this box." + usr << "This crayon is too powerful to be contained in this \ + box." return + if(istype(W, /obj/item/toy/crayon/spraycan)) + user << "Spraycans are not crayons." + return return ..() //Spraycan stuff /obj/item/toy/crayon/spraycan - icon_state = "spraycan_cap" + name = "spray can" + icon_state = "spraycan" + + icon_capped = "spraycan_cap" + icon_uncapped = "spraycan" + use_overlays = TRUE + paint_color = null + item_state = "spraycan" desc = "A metallic container containing tasty paint." - var/capped = 1 - instant = 1 - edible = 0 + + instant = TRUE + edible = FALSE + has_cap = TRUE + is_capped = TRUE + self_contained = FALSE // Don't disappear when they're empty + can_change_colour = TRUE + validSurfaces = list(/turf/open/floor,/turf/closed/wall) + reagent_contents = list("welding_fuel" = 1, "ethanol" = 1) /obj/item/toy/crayon/spraycan/suicide_act(mob/user) var/mob/living/carbon/human/H = user - if(capped) - user.visible_message("[user] shakes up the [src] with a rattle and lifts it to their mouth, but nothing happens! Maybe they should have uncapped it first! Nonetheless--") + if(is_capped || !actually_paints) + user.visible_message("[user] shakes up the \ + [src] with a rattle and lifts it to their mouth, but nothing \ + happens!") user.say("MEDIOCRE!!") + return SHAME else - user.visible_message("[user] shakes up the [src] with a rattle and lifts it to their mouth, spraying silver paint across their teeth!") + user.visible_message("[user] shakes up the \ + [src] with a rattle and lifts it to their mouth, spraying \ + paint across their teeth!") user.say("WITNESS ME!!") - playsound(loc, 'sound/effects/spray.ogg', 5, 1, 5) - paint_color = "#C0C0C0" + if(pre_noise || post_noise) + playsound(loc, 'sound/effects/spray.ogg', 5, 1, 5) + if(can_change_colour) + paint_color = "#C0C0C0" update_icon() - H.lip_style = "spray_face" - H.lip_color = paint_color - H.update_body() - uses = max(0, uses - 10) - return (OXYLOSS) + if(actually_paints) + H.lip_style = "spray_face" + H.lip_color = paint_color + H.update_body() + var/used = use_charges(10) + var/fraction = min(1, used / reagents.maximum_volume) + reagents.reaction(user, VAPOR, fraction * volume_multiplier) + reagents.trans_to(user, used, volume_multiplier) + + return (OXYLOSS) /obj/item/toy/crayon/spraycan/New() ..() - name = "spray can" - paint_color = pick("#DA0000","#FF9300","#FFF200","#A8E61D","#00B7EF","#DA00FF") + // If default crayon red colour, pick a more fun spraycan colour + if(!paint_color) + paint_color = pick("#DA0000","#FF9300","#FFF200","#A8E61D","#00B7EF", + "#DA00FF") + refill() update_icon() + /obj/item/toy/crayon/spraycan/examine(mob/user) - ..() - if(uses) - user << "It has [uses] uses left." + . = ..() + if(charges_left) + user << "It has [charges_left] uses left." else user << "It is empty." -/obj/item/toy/crayon/spraycan/attack_self(mob/living/user) - var/choice = input(user,"Spraycan options") as null|anything in list("Toggle Cap","Change Drawing","Change Color") - switch(choice) - if("Toggle Cap") - user << "You [capped ? "Remove" : "Replace"] the cap of the [src]" - capped = capped ? 0 : 1 - icon_state = "spraycan[capped ? "_cap" : ""]" - update_icon() - if("Change Drawing") - ..() - if("Change Color") - paint_color = input(user,"Choose Color") as color - update_icon() - /obj/item/toy/crayon/spraycan/afterattack(atom/target, mob/user, proximity) if(!proximity) return - if(capped) + + if(is_capped) user << "Take the cap off first!" return - else - if(iscarbon(target)) - if(uses) - playsound(user.loc, 'sound/effects/spray.ogg', 5, 1, 5) - var/mob/living/carbon/C = target - user.visible_message("[user] sprays [src] into the face of [target]!") - target << "[user] sprays [src] into your face!" - if(C.client) - C.blur_eyes(3) - C.blind_eyes(1) - if(C.check_eye_prot() <= 0) // no eye protection? ARGH IT BURNS. - C.confused = max(C.confused, 3) - C.Weaken(3) - if(ishuman(C)) - var/mob/living/carbon/human/H = C - H.lip_style = "spray_face" - H.lip_color = paint_color - H.update_body() - // Caution, spray cans contain inflammable substances - if(C.reagents) - C.reagents.add_reagent("welding_fuel", 5) - C.reagents.add_reagent("ethanol", 5) - C.reagents.reaction(C, VAPOR, 10) - uses = max(0,uses-10) + if(check_empty(user)) + return - if(istype(target, /obj/structure/window)) - if(uses) - target.color = paint_color - if(color_hex2num(paint_color) < 255) - target.SetOpacity(255) - else - target.SetOpacity(initial(target.opacity)) - uses = max(0, uses-2) - playsound(user.loc, 'sound/effects/spray.ogg', 5, 1, 5) - return - ..() + if(iscarbon(target)) + if(pre_noise || post_noise) + playsound(user.loc, 'sound/effects/spray.ogg', 5, 1, 5) + + var/mob/living/carbon/C = target + user.visible_message("[user] sprays [src] \ + into the face of [target]!") + target << "[user] sprays [src] into your \ + face!" + + if(C.client) + C.blur_eyes(3) + C.blind_eyes(1) + if(C.check_eye_prot() <= 0) // no eye protection? ARGH IT BURNS. + C.confused = max(C.confused, 3) + C.Weaken(3) + if(ishuman(C) && actually_paints) + var/mob/living/carbon/human/H = C + H.lip_style = "spray_face" + H.lip_color = paint_color + H.update_body() + + // Caution, spray cans contain inflammable substances + . = use_charges(10) + var/fraction = min(1, . / reagents.maximum_volume) + reagents.reaction(C, VAPOR, fraction * volume_multiplier) + + return + + if(istype(target, /obj/structure/window)) + if(actually_paints) + target.color = paint_color + if(color_hex2num(paint_color) < 255) + target.SetOpacity(255) + else + target.SetOpacity(initial(target.opacity)) + . = use_charges(2) + var/fraction = min(1, . / reagents.maximum_volume) + reagents.reaction(target, TOUCH, fraction * volume_multiplier) + reagents.trans_to(target, ., volume_multiplier) + + if(pre_noise || post_noise) + playsound(user.loc, 'sound/effects/spray.ogg', 5, 1, 5) + return + + . = ..() /obj/item/toy/crayon/spraycan/update_icon() - overlays.Cut() - var/image/I = image('icons/obj/crayons.dmi',icon_state = "[capped ? "spraycan_cap_colors" : "spraycan_colors"]") - I.color = paint_color - overlays += I + icon_state = is_capped ? icon_capped : icon_uncapped + if(use_overlays) + overlays.Cut() + var/image/I = image('icons/obj/crayons.dmi', + icon_state = "[is_capped ? "spraycan_cap_colors" : "spraycan_colors"]") + I.color = paint_color + overlays += I /obj/item/toy/crayon/spraycan/gang - desc = "A modified container containing suspicious paint." - gang = 1 - uses = 20 - instant = -1 + //desc = "A modified container containing suspicious paint." + charges = 20 + gang = TRUE + + pre_noise = FALSE + post_noise = TRUE /obj/item/toy/crayon/spraycan/gang/New(loc, datum/gang/G) ..() @@ -461,25 +636,80 @@ paint_color = G.color_hex update_icon() +/obj/item/toy/crayon/spraycan/gang/examine(mob/user) + . = ..() + if((user.mind && user.mind.gang_datum) || isobserver(user)) + user << "This spraycan has \ + been specially modified for tagging territory." + /obj/item/toy/crayon/spraycan/borg - desc = "A metallic container containing shiny paint." - // Use depletion of uses to determine what the energy cost is - uses = 100 + name = "cyborg spraycan" + desc = "A metallic container containing shiny synthesised paint." + charges = -1 /obj/item/toy/crayon/spraycan/borg/afterattack(atom/target,mob/user,proximity) - ..() + var/diff = ..() if(!isrobot(user)) + user << "How did you get this?" + qdel(src) return FALSE + var/mob/living/silicon/robot/borgy = user - var/starting_uses = initial(uses) - var/diff = starting_uses - uses - if(diff) - uses = starting_uses - // 25 is our cost per unit of paint, making it cost 25 energy per - // normal tag, 50 per window, and 250 per attack - var/cost = diff * 25 - // Cyborgs shouldn't be able to use modules without a cell. But if they do - // it's free. - if(borgy.cell) - borgy.cell.use(cost) + if(!diff) + return + // 25 is our cost per unit of paint, making it cost 25 energy per + // normal tag, 50 per window, and 250 per attack + var/cost = diff * 25 + // Cyborgs shouldn't be able to use modules without a cell. But if they do + // it's free. + if(borgy.cell) + borgy.cell.use(cost) + +/obj/item/toy/crayon/spraycan/hellcan + name = "hellcan" + desc = "This spraycan doesn't seem to be filled with paint..." + icon_state = "deathcan2_cap" + icon_capped = "deathcan2_cap" + icon_uncapped = "deathcan2" + use_overlays = FALSE + + volume_multiplier = 25 + charges = 100 + reagent_contents = list("clf3" = 1) + actually_paints = FALSE + paint_color = "#000000" + +/obj/item/toy/crayon/spraycan/lubecan + name = "slippery spraycan" + desc = "You can barely keep hold of this thing." + icon_state = "clowncan2_cap" + icon_capped = "clowncan2_cap" + icon_uncapped = "clowncan2" + use_overlays = FALSE + + reagent_contents = list("lube" = 1, "banana" = 1) + volume_multiplier = 5 + validSurfaces = list(/turf/open/floor) + +/obj/item/toy/crayon/spraycan/mimecan + name = "silent spraycan" + desc = "Art is best seen, not heard." + icon_state = "mimecan_cap" + icon_capped = "mimecan_cap" + icon_uncapped = "mimecan" + use_overlays = FALSE + + can_change_colour = FALSE + paint_color = "#FFFFFF" //RGB + + pre_noise = FALSE + post_noise = FALSE + reagent_contents = list("nothing" = 1, "mutetoxin" = 1) + +#undef RANDOM_GRAFFITI +#undef RANDOM_LETTER +#undef RANDOM_NUMBER +#undef RANDOM_ORIENTED +#undef RANDOM_RUNE +#undef RANDOM_ANY diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index ba14a0d3540..dec0a8d6acc 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -254,7 +254,7 @@ var/global/list/obj/item/device/pda/PDAs = list() if (3) dat += "

Atmospheric Readings

" - var/turf/T = get_turf(user.loc) + var/turf/T = user.loc if (isnull(T)) dat += "Unable to obtain a reading.
" else @@ -269,7 +269,7 @@ var/global/list/obj/item/device/pda/PDAs = list() if (total_moles) for(var/id in env_gases) var/gas_level = env_gases[id][MOLES]/total_moles - if(id in hardcoded_gases || gas_level > 0.001) + if(gas_level > 0) dat += "[env_gases[id][GAS_META][META_GAS_NAME]]: [round(gas_level*100, 0.01)]%
" dat += "Temperature: [round(environment.temperature-T0C)]°C
" diff --git a/code/game/objects/items/devices/modificationkit.dm b/code/game/objects/items/devices/modificationkit.dm index aefc9aca26d..cd25b38140a 100644 --- a/code/game/objects/items/devices/modificationkit.dm +++ b/code/game/objects/items/devices/modificationkit.dm @@ -1,6 +1,9 @@ /obj/item/modkit name = "modification kit" - desc = "A one-use kit, which enables kinetic accelerators to be fired with only one hand, as well as allowing less dextrous races to use the tool." + desc = "A one-use kit, which enables kinetic accelerators to retain their \ + charge when away from a bioelectric source, renders them immune to \ + interference with other accelerators, as well as allowing less \ + dextrous races to use the tool." icon = 'icons/obj/objects.dmi' icon_state = "modkit" origin_tech = "programming=2;materials=2;magnets=4" @@ -12,12 +15,21 @@ qdel(src) return if(!istype(C)) - user << "This kit can only modify kinetic accelerators!" + user << "This kit can only modify kinetic \ + accelerators!" return ..() - user <<"You modify the [C], making it less unwieldy." - C.name = "compact [C.name]" - C.weapon_weight = WEAPON_LIGHT + // RIP the 'improved improved improved improved kinetic accelerator + if(C.holds_charge && C.unique_frequency) + user << "This kinetic accelerator already has \ + these upgrades." + return ..() + + user <<"You modify the [C], adjusting the trigger \ + guard and internal capacitor." + C.name = "improved [C.name]" + C.holds_charge = TRUE + C.unique_frequency = TRUE C.trigger_guard = TRIGGER_GUARD_ALLOW_ALL - uses -- + uses-- if(!uses) - qdel(src) \ No newline at end of file + qdel(src) diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 798a8ce3614..146610a5197 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -173,6 +173,10 @@ MASS SPECTROMETER // Time of death if(M.tod && (M.stat == DEAD || (M.status_flags & FAKEDEATH))) user << "Time of Death: [M.tod]" + var/tdelta = world.time - M.timeofdeath + if(tdelta < (DEFIB_TIME_LIMIT * 10)) + user << "Subject died [tdelta / 10] seconds \ + ago, defibrillation may be possible!" for(var/datum/disease/D in M.viruses) if(!(D.visibility_flags & HIDDEN_SCANNER)) @@ -300,6 +304,7 @@ MASS SPECTROMETER else user << "Plasma: [round(plasma_concentration*100, 0.01)] %" + for(var/id in env_gases) if(id in hardcoded_gases) continue diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm index b722c70fb6d..688a5ebc37a 100644 --- a/code/game/objects/items/devices/traitordevices.dm +++ b/code/game/objects/items/devices/traitordevices.dm @@ -72,7 +72,7 @@ effective or pretty fucking useless. name = "health analyzer" icon_state = "health" item_state = "analyzer" - desc = "A hand-held body scanner able to distinguish vital signs of the subject. A strange microlaser is hooked on to the scanning end." + desc = "A hand-held body scanner able to distinguish vital signs of the subject." flags = CONDUCT slot_flags = SLOT_BELT throwforce = 3 diff --git a/code/game/objects/items/nuke_tools.dm b/code/game/objects/items/nuke_tools.dm index 9b49f23cb73..b88d4f6a07c 100644 --- a/code/game/objects/items/nuke_tools.dm +++ b/code/game/objects/items/nuke_tools.dm @@ -11,7 +11,8 @@ var/cooldown = 0 /obj/item/nuke_core/New() - SSobj.processing += src + ..() + SSobj.processing |= src /obj/item/nuke_core/attackby(obj/item/nuke_core_container/container, mob/user) if(istype(container)) @@ -41,13 +42,16 @@ core = ncore icon_state = "core_container_loaded" user << "Container is sealing..." - spawn(50) + addtimer(src, "seal", 50) + return 1 + +/obj/item/nuke_core_container/proc/seal() + if(istype(core)) SSobj.processing -= core icon_state = "core_container_sealed" - playsound(loc, 'sound/items/Deconstruct.ogg', 100, 1) - if(loc == user) - user << "Container is sealed, the radiation is contained." - return 1 + playsound(loc, 'sound/items/Deconstruct.ogg', 60, 1) + if(ismob(loc)) + loc << "[src] is permanently sealed, [core]'s radiation is contained." /obj/item/nuke_core_container/attackby(obj/item/nuke_core/core, mob/user) if(istype(core)) diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm index a674ccb0d69..72344703528 100644 --- a/code/game/objects/items/robot/robot_items.dm +++ b/code/game/objects/items/robot/robot_items.dm @@ -20,7 +20,106 @@ "[user] has prodded you with [src]!") add_logs(user, M, "stunned", src, "(INTENT: [uppertext(user.a_intent)])") +/obj/item/borg/cyborghug + name = "Hugging Module" + icon_state = "hugmodule" + desc = "For when a someone really needs a hug." + var/mode = 0 //0 = Hugs 1 = "Hug" 2 = Shock 3 = CRUSH + var/ccooldown = 0 + var/scooldown = 0 +/obj/item/borg/cyborghug/attack_self(mob/living/user) + if(isrobot(user)) + var/mob/living/silicon/robot/P = user + if(P.emagged) + if(mode < 3) + mode++ + else + mode = 0 + else if(mode < 1) + mode++ + else + mode = 0 + switch(mode) + if(0) + user << "Power reset. Hugs!" + if(1) + user << "Power increased!" + if(2) + user << "BZZT. Electrifying arms..." + if(3) + user << "ERROR: ARM ACTUATORS OVERLOADED." + +/obj/item/borg/cyborghug/attack(mob/living/M, mob/living/silicon/robot/user) + switch(mode) + if(0) + if(M.health >= 0) + if(ishuman(M)) + if(M.lying) + user.visible_message("[user] shakes [M] trying to get \him up!", \ + "You shake [M] trying to get \him up!") + else + user.visible_message("[user] hugs [M] to make \him feel better!", \ + "You hug [M] to make \him feel better!") + if(M.resting) + M.resting = 0 + M.update_canmove() + else + user.visible_message("[user] pets [M]!", \ + "You pet [M]!") + playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) + if(1) + if(M.health >= 0) + if(ishuman(M)) + if(M.lying) + user.visible_message("[user] shakes [M] trying to get \him up!", \ + "You shake [M] trying to get \him up!") + else + user.visible_message("[user] hugs [M] in a firm bear-hug! [M] looks uncomfortable...", \ + "You hug [M] firmly to make \him feel better! [M] looks uncomfortable...") + if(M.resting) + M.resting = 0 + M.update_canmove() + else + user.visible_message("[user] bops [M] on the head!", \ + "You bop [M] on the head!") + playsound(loc, 'sound/weapons/tap.ogg', 50, 1, -1) + if(2) + if(!scooldown) + if(M.health >= 0) + if(ishuman(M)) + M.electrocute_act(5, "[user]", safety = 1) + user.visible_message("[user] electrocutes [M] with their touch!", \ + "You electrocute [M] with your touch!") + M.update_canmove() + else + if(!isrobot(M)) + M.adjustFireLoss(10) + user.visible_message("[user] shocks [M]!", \ + "You shock [M]!") + else + user.visible_message("[user] shocks [M]. It does not seem to have an effect", \ + "You shock [M] to no effect.") + playsound(loc, 'sound/effects/sparks2.ogg', 50, 1, -1) + user.cell.charge -= 400 + scooldown = 1 + spawn(10) + scooldown = 0 + if(3) + if(!ccooldown) + if(M.health >= 0) + if(ishuman(M)) + user.visible_message("[user] crushes [M] in their grip!", \ + "You crush [M] in your grip!") + else + user.visible_message("[user] crushes [M]!", \ + "You crush [M]!") + playsound(loc, 'sound/weapons/smash.ogg', 50, 1, -1) + M.adjustBruteLoss(10) + user.cell.charge -= 300 + ccooldown = 1 + spawn(10) + ccooldown = 0 /obj/item/borg/charger name = "power connector" @@ -146,8 +245,75 @@ user << "You stop charging [target]." +/obj/item/device/harmalarm + name = "Sonic Harm Prevention Tool" + desc = "Releases a harmless blast that confuses most organics. For when the harm is JUST TOO MUCH" + icon_state = "megaphone" + var/cooldown = 0 + var/emagged = 0 +/obj/item/device/harmalarm/emag_act(mob/user) + emagged = !emagged + if(emagged) + user << "You short out the safeties on the [src]!" + else + user << "You reset the safeties on the [src]!" +/obj/item/device/harmalarm/attack_self(mob/user) + var/safety = !emagged + if(cooldown > world.time) + user << "The device is still recharging!" + return + + if(isrobot(user)) + var/mob/living/silicon/robot/R = user + if(R.cell.charge < 1200) + user << "You don't have enough charge to do this!" + return + R.cell.charge -= 1000 + if(R.emagged) + safety = 0 + + if(safety == 1) + user.visible_message("[user] blares out a near-deafening siren from its speakers!", \ + "The siren pierces your hearing and confuses you!", \ + "The siren pierces your hearing!") + for(var/mob/living/M in get_hearers_in_view(9, user)) + if(iscarbon(M)) + if(istype(M, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + if(istype(H.ears, /obj/item/clothing/ears/earmuffs)) + continue + M.confused += 6 + M << "HUMAN HARM" + playsound(get_turf(src), 'sound/AI/harmalarm.ogg', 70, 3) + cooldown = world.time + 200 + log_game("[user.ckey]([user]) used a Cyborg Harm Alarm in ([user.x],[user.y],[user.z])") + if(isrobot(user)) + var/mob/living/silicon/robot/R = user + R.connected_ai << "
NOTICE - Peacekeeping 'HARM ALARM' used by: [user]
" + + return + + if(safety == 0) + user.visible_message("[user] blares out a sonic screech from its speakers!", \ + "You hear a sharp screech before your thoughts are interrupted and you collapse, your ears ringing!", \ + "You hear a sonic screech and collapse, your ears riniging!") + for(var/mob/living/M in get_hearers_in_view(9, user)) + if(iscarbon(M)) + if(istype(M, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + if(istype(H.ears, /obj/item/clothing/ears/earmuffs)) + continue + M.confused += 15 + M.Weaken(2) + M.stuttering += 30 + M.adjustEarDamage(0, 20) + M.Jitter(25) + M << "BZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZT" + playsound(get_turf(src), 'sound/machines/warning-buzzer.ogg', 130, 3) + cooldown = world.time + 600 + log_game("[user.ckey]([user]) used an emagged Cyborg Harm Alarm in ([user.x],[user.y],[user.z])") /********************************************************************** HUD/SIGHT things diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm index 42e6d7f7280..8a0a32d8672 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -210,10 +210,15 @@ if(!user.unEquip(W)) return - if(M.syndiemmi) + if(M.hacked || M.clockwork) aisync = 0 lawsync = 0 - O.laws = new /datum/ai_laws/syndicate_override + if(M.clockwork) + O.laws = new/datum/ai_laws/ratvar + spawn(1) + add_servant_of_ratvar(O) + else + O.laws = new/datum/ai_laws/syndicate_override O.invisibility = 0 //Transfer debug settings to new mob @@ -226,7 +231,7 @@ O.notify_ai(1) if(forced_ai) O.connected_ai = forced_ai - if(!lawsync && !M.syndiemmi) + if(!lawsync && !M.hacked) O.lawupdate = 0 O.make_laws() diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 76cf1ff5a33..e7edcee2c10 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -238,6 +238,12 @@ var/global/list/datum/stack_recipe/runed_metal_recipes = list ( \ return return ..() +/obj/item/stack/sheet/runed_metal/attack(atom/target, mob/living/user) + if(!iscultist(user)) + user << "Only one with forbidden knowledge could hope to work this metal..." + return + ..() + /obj/item/stack/sheet/runed_metal/fifty amount = 50 diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index e9099c7141d..24f20ce70c5 100755 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -567,15 +567,6 @@ attack_verb = list("boned", "dunked on", "worked down to the bone") chattering = TRUE - var/list/papyrus_messages = list( - "That's the disposal bin. Feel free to visit it at any time.", - "I can't just let anyone ERP with me, I'm a skeleton with standards!", - "Sorry. Can't talk. I'm busy being popular on a video game.", - "You can't spell 'robust' without several letters from my name!!!") - var/list/sans_messages = list( - "You feel your redtext crawling on your back.", - "On days like these, references like this should be BURNING IN HELL.", - "I've gotten a ton of work done today. A skele-ton.") var/list/regular_messages = list( "Why was the skeleton such a bad liar? \ Because you can see right through him!", @@ -628,25 +619,17 @@ var/mob/living/carbon/human/H = user H.set_species(/datum/species/skeleton) - phomeme = "sans" - toy_talk(user, "You feel like you're going to have a bad time.") + toy_talk(user, "RATTLE ME BONES") user.Stun(5) sleep(20) return OXYLOSS /obj/item/toy/talking/skeleton/generate_messages() - return list(pick(papyrus_messages + sans_messages + regular_messages)) + return list(pick(regular_messages)) /obj/item/toy/talking/skeleton/toy_talk(user, message) - // change spans dynamically depending on the message - // If message isn't in the defined lists, just use whatever was set last - if(sans_messages.Find(message)) - phomeme = "sans" - if(papyrus_messages.Find(message)) - phomeme = "papyrus" - if(regular_messages.Find(message)) - phomeme = pick("sans", "papyrus") + phomeme = pick("sans", "papyrus") span = "danger [phomeme]" ..() diff --git a/code/game/objects/items/weapons/RSF.dm b/code/game/objects/items/weapons/RSF.dm index ba891f89d78..72969f4abbf 100644 --- a/code/game/objects/items/weapons/RSF.dm +++ b/code/game/objects/items/weapons/RSF.dm @@ -112,3 +112,71 @@ RSF matter-- user << "The RSF now holds [matter]/30 fabrication-units." desc = "A RSF. It currently holds [matter]/30 fabrication-units." + +/obj/item/weapon/cookiesynth + name = "Cookie Synthesizer" + desc = "A self-recharging device used to rapidly deploy cookies." + icon = 'icons/obj/tools.dmi' + icon_state = "rcd" + var/matter = 10 + var/toxin = 0 + var/emagged = 0 + w_class = 3 + +/obj/item/weapon/cookiesynth/New() + desc = "A self recharging cookie fabricator. It currently holds [matter]/10 cookie-units." + +/obj/item/weapon/cookiesynth/attackby() + return + +/obj/item/weapon/cookiesynth/emag_act(mob/user) + emagged = !emagged + if(emagged) + user << "You short out the [src]'s reagent safety checker!" + else + user << "You reset the [src]'s reagent safety checker!" + toxin = 0 + +/obj/item/weapon/cookiesynth/attack_self(mob/user) + var/mob/living/silicon/robot/P = null + if(isrobot(user)) + P = user + if(emagged&&!toxin) + toxin = 1 + user << "Cookie Synthesizer Hacked" + else if(P.emagged&&!toxin) + toxin = 1 + user << "Cookie Synthesizer Hacked" + else + toxin = 0 + user << "Cookie Synthesizer Reset" + +/obj/item/weapon/cookiesynth/process() + if (matter < 10) + matter++ + +/obj/item/weapon/cookiesynth/afterattack(atom/A, mob/user, proximity) + if(!proximity) + return + if (!(istype(A, /obj/structure/table) || istype(A, /turf/open/floor))) + return + if(matter < 1) + user << "The [src] doesn't have enough matter left. Wait for it to recharge!" + return + if(isrobot(user)) + var/mob/living/silicon/robot/R = user + if(!R.cell || R.cell.charge < 400) + user << "You do not have enough power to use [src]." + return + var/turf/T = get_turf(A) + playsound(src.loc, 'sound/machines/click.ogg', 10, 1) + user << "Fabricating Cookie.." + var/obj/item/weapon/reagent_containers/food/snacks/cookie/S = new /obj/item/weapon/reagent_containers/food/snacks/cookie(T) + if(toxin) + S.reagents.add_reagent("chloralhydrate2", 10) + if (isrobot(user)) + var/mob/living/silicon/robot/R = user + R.cell.charge -= 100 + else + matter-- + desc = "A self recharging cookie fabricator. It currently holds [matter]/10 cookie-units." \ No newline at end of file diff --git a/code/game/objects/items/weapons/clown_items.dm b/code/game/objects/items/weapons/clown_items.dm index ccc8fc78ce6..139371fa3d2 100644 --- a/code/game/objects/items/weapons/clown_items.dm +++ b/code/game/objects/items/weapons/clown_items.dm @@ -134,4 +134,28 @@ desc = "Damn son, where'd you find this?" icon_state = "air_horn" honksound = 'sound/items/AirHorn2.ogg' - cooldowntime = 50 \ No newline at end of file + cooldowntime = 50 + +/obj/item/weapon/bikehorn/golden + name = "golden bike horn" + desc = "Golden? Clearly, its made with bananium! Honk!" + icon_state = "gold_horn" + item_state = "gold_horn" + +/obj/item/weapon/bikehorn/golden/attack() + flip_mobs() + return ..() + +/obj/item/weapon/bikehorn/golden/attack_self(mob/user) + flip_mobs() + ..() + +/obj/item/weapon/bikehorn/golden/proc/flip_mobs(mob/living/carbon/M, mob/user) + if (!spam_flag) + var/turf/T = get_turf(src) + for(M in ohearers(7, T)) + if(istype(M, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + if((istype(H.ears, /obj/item/clothing/ears/earmuffs)) || H.ear_deaf) + continue + M.emote("flip") \ No newline at end of file diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm index c04ead47e26..0bb8b547514 100644 --- a/code/game/objects/items/weapons/defib.dm +++ b/code/game/objects/items/weapons/defib.dm @@ -1,5 +1,4 @@ //backpack item - /obj/item/weapon/defibrillator name = "defibrillator" desc = "A device that delivers powerful shocks to detachable paddles that resuscitate incapacitated patients." @@ -19,6 +18,7 @@ var/obj/item/weapon/twohanded/shockpaddles/paddles var/obj/item/weapon/stock_parts/cell/high/bcell = null var/combat = 0 //can we revive through space suits? + var/grab_ghost = FALSE // Do we pull the ghost back into their body? /obj/item/weapon/defibrillator/New() //starts without a cell for rnd ..() @@ -297,6 +297,7 @@ var/obj/item/weapon/defibrillator/defib var/req_defib = 1 var/combat = 0 //If it penetrates armor and gives additional functionality + var/grab_ghost = FALSE /obj/item/weapon/twohanded/shockpaddles/proc/recharge(var/time) if(req_defib || !time) @@ -382,178 +383,186 @@ else user << "You aren't sure how to revive that..." return - else - var/mob/living/carbon/human/H = M - if(user.a_intent == "disarm") - if(req_defib && defib.safety) - return - if(!req_defib && !combat) - return - busy = 1 - H.visible_message("[user] has touched [H.name] with [src]!", \ - "[user] has touched [H.name] with [src]!") - H.adjustStaminaLoss(50) - H.Weaken(5) - H.updatehealth() //forces health update before next life tick - playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1) - H.emote("gasp") - add_logs(user, M, "stunned", src) - if(req_defib) - defib.deductcharge(revivecost) - cooldown = 1 - busy = 0 - update_icon() - if(req_defib) - defib.cooldowncheck(user) - else - recharge(60) + var/mob/living/carbon/human/H = M + + if(user.a_intent == "disarm") + if(req_defib && defib.safety) return - if(user.zone_selected == "chest") - if(user.a_intent == "harm") - if(req_defib && defib.safety) + if(!req_defib && !combat) + return + busy = 1 + H.visible_message("[user] has touched [H.name] with [src]!", \ + "[user] has touched [H.name] with [src]!") + H.adjustStaminaLoss(50) + H.Weaken(5) + H.updatehealth() //forces health update before next life tick + playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1) + H.emote("gasp") + add_logs(user, M, "stunned", src) + if(req_defib) + defib.deductcharge(revivecost) + cooldown = 1 + busy = 0 + update_icon() + if(req_defib) + defib.cooldowncheck(user) + else + recharge(60) + return + + if(user.zone_selected != "chest") + user << "You need to target your patient's \ + chest with [src]!" + return + if(user.a_intent == "harm") + if(req_defib && defib.safety) + return + if(!req_defib && !combat) + return + user.visible_message("[user] begins to place [src] on [M.name]'s chest.", + "You overcharge the paddles and begin to place them onto [M]'s chest...") + busy = 1 + update_icon() + if(do_after(user, 30, target = M)) + user.visible_message("[user] places [src] on [M.name]'s chest.", + "You place [src] on [M.name]'s chest and begin to charge them.") + var/turf/T = get_turf(defib) + playsound(get_turf(src), 'sound/machines/defib_charge.ogg', 50, 0) + if(req_defib) + T.audible_message("\The [defib] lets out an urgent beep and lets out a steadily rising hum...") + else + user.audible_message("[src] let out an urgent beep.") + if(do_after(user, 30, target = M)) //Takes longer due to overcharging + if(!M) + busy = 0 + update_icon() return - if(!req_defib && !combat) + if(M && M.stat == DEAD) + user << "[M] is dead." + playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0) + busy = 0 + update_icon() return - user.visible_message("[user] begins to place [src] on [M.name]'s chest.", - "You overcharge the paddles and begin to place them onto [M]'s chest...") - busy = 1 - update_icon() - if(do_after(user, 30, target = M)) - user.visible_message("[user] places [src] on [M.name]'s chest.", - "You place [src] on [M.name]'s chest and begin to charge them.") - var/turf/T = get_turf(defib) - playsound(get_turf(src), 'sound/machines/defib_charge.ogg', 50, 0) - if(req_defib) - T.audible_message("\The [defib] lets out an urgent beep and lets out a steadily rising hum...") - else - user.audible_message("[src] let out an urgent beep.") - if(do_after(user, 30, target = M)) //Takes longer due to overcharging - if(!M) - busy = 0 - update_icon() - return - if(M && M.stat == DEAD) - user << "[M] is dead." - playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0) - busy = 0 - update_icon() - return - user.visible_message("[user] shocks [M] with \the [src]!", "You shock [M] with \the [src]!") - playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 100, 1, -1) - playsound(loc, 'sound/weapons/Egloves.ogg', 100, 1, -1) - var/mob/living/carbon/human/HU = M - M.emote("scream") - if(!HU.heart_attack) - HU.heart_attack = 1 - if(!HU.stat) - HU.visible_message("[M] thrashes wildly, clutching at their chest!", - "You feel a horrible agony in your chest!") - HU.apply_damage(50, BURN, "chest") - add_logs(user, M, "overloaded the heart of", defib) - M.Weaken(5) - M.Jitter(100) - if(req_defib) - defib.deductcharge(revivecost) - cooldown = 1 - busy = 0 - update_icon() - if(!req_defib) - recharge(60) - if(req_defib && (defib.cooldowncheck(user))) - return + user.visible_message("[user] shocks [M] with \the [src]!", "You shock [M] with \the [src]!") + playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 100, 1, -1) + playsound(loc, 'sound/weapons/Egloves.ogg', 100, 1, -1) + var/mob/living/carbon/human/HU = M + M.emote("scream") + if(!HU.heart_attack) + HU.heart_attack = 1 + if(!HU.stat) + HU.visible_message("[M] thrashes wildly, clutching at their chest!", + "You feel a horrible agony in your chest!") + HU.apply_damage(50, BURN, "chest") + add_logs(user, M, "overloaded the heart of", defib) + M.Weaken(5) + M.Jitter(100) + if(req_defib) + defib.deductcharge(revivecost) + cooldown = 1 busy = 0 update_icon() - return - if(!H.suiciding && !(H.disabilities & NOCLONE)&& !H.hellbound) - H.notify_ghost_cloning("Your heart is being defibrillated. Re-enter your corpse if you want to be revived!", source = src) + if(!req_defib) + recharge(60) + if(req_defib && (defib.cooldowncheck(user))) + return + busy = 0 + update_icon() + return + if((!req_defib && grab_ghost) || (req_defib && defib.grab_ghost)) + H.notify_ghost_cloning("Your heart is being defibrillated!") + H.grab_ghost() // Shove them back in their body. + else if(!H.suiciding && !(H.disabilities & NOCLONE)&& !H.hellbound) + H.notify_ghost_cloning("Your heart is being defibrillated. Re-enter your corpse if you want to be revived!", source = src) - user.visible_message("[user] begins to place [src] on [M.name]'s chest.", "You begin to place [src] on [M.name]'s chest...") - busy = 1 - update_icon() - if(do_after(user, 30, target = M)) //beginning to place the paddles on patient's chest to allow some time for people to move away to stop the process - user.visible_message("[user] places [src] on [M.name]'s chest.", "You place [src] on [M.name]'s chest.") - playsound(get_turf(src), 'sound/machines/defib_charge.ogg', 50, 0) - var/tplus = world.time - H.timeofdeath - var/tlimit = 1200 //past this much time the patient is unrecoverable (in deciseconds) - var/tloss = 600 //brain damage starts setting in on the patient after some time left rotting - var/total_burn = 0 - var/total_brute = 0 - if(do_after(user, 20, target = M)) //placed on chest and short delay to shock for dramatic effect, revive time is 5sec total - for(var/obj/item/carried_item in H.contents) - if(istype(carried_item, /obj/item/clothing/suit/space)) - if((!src.combat && !req_defib) || (req_defib && !defib.combat)) - user.audible_message("[req_defib ? "[defib]" : "[src]"] buzzes: Patient's chest is obscured. Operation aborted.") - playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0) - busy = 0 - update_icon() - return - if(H.stat == DEAD) - M.visible_message("[M]'s body convulses a bit.") - playsound(get_turf(src), "bodyfall", 50, 1) - playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1) - total_brute = H.getBruteLoss() - total_burn = H.getFireLoss() - - var/failed = null - - if (H.suiciding || (H.disabilities & NOCLONE)) - failed = "[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Recovery of patient impossible. Further attempts futile." - else if (H.hellbound) - failed = "[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Patient's soul appears to be on another plane of existance. Further attempts futile." - else if (tplus > tlimit) - failed = "[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Body has decayed for too long. Further attempts futile." - else if (!H.getorgan(/obj/item/organ/heart)) - failed = "[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Patient's heart is missing." - else if(total_burn >= 180 || total_brute >= 180) - failed = "[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Severe tissue damage makes recovery of patient impossible via defibrillator. Further attempts futile." - else if(H.get_ghost()) - failed = "[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - No activity in patient's brain. Further attempts may be successful." - else - var/obj/item/organ/brain/BR = H.getorgan(/obj/item/organ/brain) - if(!BR || BR.damaged_brain) - failed = "[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Patient's brain is missing or damaged beyond point of no return. Further attempts futile." - - if(failed) - user.visible_message(failed) - playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0) - else - //If the body has been fixed so that they would not be in crit when defibbed, give them oxyloss to put them back into crit - if (H.health > halfwaycritdeath) - H.adjustOxyLoss(H.health - halfwaycritdeath, 0) - else - var/overall_damage = total_brute + total_burn + H.getToxLoss() + H.getOxyLoss() - var/mobhealth = H.health - H.adjustOxyLoss((mobhealth - halfwaycritdeath) * (H.getOxyLoss() / overall_damage), 0) - H.adjustToxLoss((mobhealth - halfwaycritdeath) * (H.getToxLoss() / overall_damage), 0) - H.adjustFireLoss((mobhealth - halfwaycritdeath) * (total_burn / overall_damage), 0) - H.adjustBruteLoss((mobhealth - halfwaycritdeath) * (total_brute / overall_damage), 0) - user.visible_message("[req_defib ? "[defib]" : "[src]"] pings: Resuscitation successful.") - playsound(get_turf(src), 'sound/machines/defib_success.ogg', 50, 0) - H.revive() - H.emote("gasp") - if(tplus > tloss) - H.setBrainLoss( max(0, min(99, ((tlimit - tplus) / tlimit * 100)))) - add_logs(user, M, "revived", defib) - if(req_defib) - defib.deductcharge(revivecost) - cooldown = 1 - update_icon() - if(req_defib) - defib.cooldowncheck(user) - else - recharge(60) - else if(H.heart_attack) - H.heart_attack = 0 - user.visible_message("[req_defib ? "[defib]" : "[src]"] pings: Patient's heart is now beating again.") - playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1) - else - user.visible_message("[req_defib ? "[defib]" : "[src]"] buzzes: Patient is not in a valid state. Operation aborted.") + user.visible_message("[user] begins to place [src] on [M.name]'s chest.", "You begin to place [src] on [M.name]'s chest...") + busy = 1 + update_icon() + if(do_after(user, 30, target = M)) //beginning to place the paddles on patient's chest to allow some time for people to move away to stop the process + user.visible_message("[user] places [src] on [M.name]'s chest.", "You place [src] on [M.name]'s chest.") + playsound(get_turf(src), 'sound/machines/defib_charge.ogg', 50, 0) + var/tplus = world.time - H.timeofdeath + // past this much time the patient is unrecoverable + // (in deciseconds) + var/tlimit = DEFIB_TIME_LIMIT * 10 + // brain damage starts setting in on the patient after + // some time left rotting + var/tloss = DEFIB_TIME_LOSS * 10 + var/total_burn = 0 + var/total_brute = 0 + if(do_after(user, 20, target = M)) //placed on chest and short delay to shock for dramatic effect, revive time is 5sec total + for(var/obj/item/carried_item in H.contents) + if(istype(carried_item, /obj/item/clothing/suit/space)) + if((!src.combat && !req_defib) || (req_defib && !defib.combat)) + user.audible_message("[req_defib ? "[defib]" : "[src]"] buzzes: Patient's chest is obscured. Operation aborted.") playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0) - busy = 0 - update_icon() - else - user << "You need to target your patient's chest with [src]!" - return + busy = 0 + update_icon() + return + if(H.stat == DEAD) + M.visible_message("[M]'s body convulses a bit.") + playsound(get_turf(src), "bodyfall", 50, 1) + playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1) + total_brute = H.getBruteLoss() + total_burn = H.getFireLoss() + + var/failed = null + + if (H.suiciding || (H.disabilities & NOCLONE)) + failed = "[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Recovery of patient impossible. Further attempts futile." + else if (H.hellbound) + failed = "[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Patient's soul appears to be on another plane of existance. Further attempts futile." + else if (tplus > tlimit) + failed = "[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Body has decayed for too long. Further attempts futile." + else if (!H.getorgan(/obj/item/organ/heart)) + failed = "[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Patient's heart is missing." + else if(total_burn >= 180 || total_brute >= 180) + failed = "[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Severe tissue damage makes recovery of patient impossible via defibrillator. Further attempts futile." + else if(H.get_ghost()) + failed = "[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - No activity in patient's brain. Further attempts may be successful." + else + var/obj/item/organ/brain/BR = H.getorgan(/obj/item/organ/brain) + if(!BR || BR.damaged_brain) + failed = "[req_defib ? "[defib]" : "[src]"] buzzes: Resuscitation failed - Patient's brain is missing or damaged beyond point of no return. Further attempts futile." + + if(failed) + user.visible_message(failed) + playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0) + else + //If the body has been fixed so that they would not be in crit when defibbed, give them oxyloss to put them back into crit + if (H.health > halfwaycritdeath) + H.adjustOxyLoss(H.health - halfwaycritdeath, 0) + else + var/overall_damage = total_brute + total_burn + H.getToxLoss() + H.getOxyLoss() + var/mobhealth = H.health + H.adjustOxyLoss((mobhealth - halfwaycritdeath) * (H.getOxyLoss() / overall_damage), 0) + H.adjustToxLoss((mobhealth - halfwaycritdeath) * (H.getToxLoss() / overall_damage), 0) + H.adjustFireLoss((mobhealth - halfwaycritdeath) * (total_burn / overall_damage), 0) + H.adjustBruteLoss((mobhealth - halfwaycritdeath) * (total_brute / overall_damage), 0) + user.visible_message("[req_defib ? "[defib]" : "[src]"] pings: Resuscitation successful.") + playsound(get_turf(src), 'sound/machines/defib_success.ogg', 50, 0) + H.revive() + H.emote("gasp") + if(tplus > tloss) + H.setBrainLoss( max(0, min(99, ((tlimit - tplus) / tlimit * 100)))) + add_logs(user, M, "revived", defib) + if(req_defib) + defib.deductcharge(revivecost) + cooldown = 1 + update_icon() + if(req_defib) + defib.cooldowncheck(user) + else + recharge(60) + else if(H.heart_attack) + H.heart_attack = 0 + user.visible_message("[req_defib ? "[defib]" : "[src]"] pings: Patient's heart is now beating again.") + playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1) + else + user.visible_message("[req_defib ? "[defib]" : "[src]"] buzzes: Patient is not in a valid state. Operation aborted.") + playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0) + busy = 0 + update_icon() /obj/item/weapon/twohanded/shockpaddles/syndicate name = "syndicate defibrillator paddles" diff --git a/code/game/objects/items/weapons/extinguisher.dm b/code/game/objects/items/weapons/extinguisher.dm index a81762cadf1..c3512dfc983 100644 --- a/code/game/objects/items/weapons/extinguisher.dm +++ b/code/game/objects/items/weapons/extinguisher.dm @@ -174,7 +174,7 @@ var/turf/T = get_turf(loc) if(istype(T, /turf/open)) var/turf/open/theturf = T - theturf.MakeSlippery(TURF_WET_WATER) + theturf.MakeSlippery(min_wet_time = 10, wet_time_to_add = 5) user.visible_message("[user] empties out \the [src] onto the floor using the release valve.", "You quietly empty out \the [src] using its release valve.") return diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index 103e0b3f07c..bd261f6a22c 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -305,6 +305,9 @@ /obj/item/weapon/restraints/legcuffs/beartrap/energy/attack_hand(mob/user) Crossed(user) //honk +/obj/item/weapon/restraints/legcuffs/beartrap/energy/cyborg + breakouttime = 20 // Cyborgs shouldn't have a strong restraint + /obj/item/weapon/restraints/legcuffs/bola name = "bola" desc = "A restraining device designed to be thrown at the target. Upon connecting with said target, it will wrap around their legs, making it difficult for them to move quickly." diff --git a/code/game/objects/items/weapons/holosign_creator.dm b/code/game/objects/items/weapons/holosign_creator.dm index 97a9278a63d..236bad8dc28 100644 --- a/code/game/objects/items/weapons/holosign_creator.dm +++ b/code/game/objects/items/weapons/holosign_creator.dm @@ -74,6 +74,45 @@ creation_time = 30 max_signs = 6 +/obj/item/weapon/holosign_creator/cyborg + name = "Energy Barrier Projector" + desc = "A holographic projector that creates fragile energy fields" + creation_time = 5 + max_signs = 9 + holosign_type = /obj/effect/overlay/holograph/barrier/cyborg + var/shock = 0 + +/obj/item/weapon/holosign_creator/cyborg/attack_self(mob/user) + if(isrobot(user)) + var/mob/living/silicon/robot/R = user + + if(shock) + user <<"You clear all active holograms, and reset your projector to normal." + holosign_type = /obj/effect/overlay/holograph/barrier/cyborg + creation_time = 5 + if(signs.len) + for(var/H in signs) + qdel(H) + shock = 0 + return + else if(R.emagged&&!shock) + user <<"You clear all active holograms, and overload your energy projector!" + holosign_type = /obj/effect/overlay/holograph/barrier/cyborg/hacked + creation_time = 30 + if(signs.len) + for(var/H in signs) + qdel(H) + shock = 1 + return + else + if(signs.len) + for(var/H in signs) + qdel(H) + user << "You clear all active holograms." + if(signs.len) + for(var/H in signs) + qdel(H) + user << "You clear all active holograms." /obj/effect/overlay/holograph icon = 'icons/effects/effects.dmi' @@ -185,3 +224,36 @@ /obj/effect/overlay/holograph/barrier/engineering icon_state = "holosign_engi" + +/obj/effect/overlay/holograph/barrier/cyborg + name = "Energy Field" + desc = "A fragile energy field that blocks movement" + density = 1 + holo_integrity = 1 + +/obj/effect/overlay/holograph/barrier/CanPass() + return 0 + +/obj/effect/overlay/holograph/barrier/cyborg/hacked + name = "Charged Energy Field" + desc = "A powerful energy field that blocks movement. Energy arcs off it" + holo_integrity = 3 + var/shockcd = 0 + +/obj/effect/overlay/holograph/barrier/cyborg/hacked/attack_hand(mob/living/user) + if(!shockcd) + if(ismob(user)) + var/mob/living/M = user + M.electrocute_act(15,"Energy Barrier", safety=1) + shockcd = 1 + spawn(10) + shockcd = 0 + +/obj/effect/overlay/holograph/barrier/cyborg/hacked/Bumped(atom/user) + if(!shockcd) + if(ismob(user)) + var/mob/living/M = user + M.electrocute_act(15,"Energy Barrier", safety=1) + shockcd = 1 + spawn(10) + shockcd = 0 \ No newline at end of file diff --git a/code/game/objects/items/weapons/kitchen.dm b/code/game/objects/items/weapons/kitchen.dm index 57caedd3424..c871f8bcab4 100644 --- a/code/game/objects/items/weapons/kitchen.dm +++ b/code/game/objects/items/weapons/kitchen.dm @@ -116,6 +116,14 @@ force = 15 throwforce = 15 +/obj/item/weapon/kitchen/knife/combat/bone + name = "bone dagger" + item_state = "bone_dagger" + icon_state = "bone_dagger" + desc = "A sharpened bone. The bare mimimum in survival." + force = 15 + throwforce = 15 + /obj/item/weapon/kitchen/knife/combat/cyborg name = "cyborg knife" icon = 'icons/obj/items_cyborg.dmi' diff --git a/code/game/objects/items/weapons/mop.dm b/code/game/objects/items/weapons/mop.dm index 7ad6d644047..448925b824c 100644 --- a/code/game/objects/items/weapons/mop.dm +++ b/code/game/objects/items/weapons/mop.dm @@ -23,7 +23,7 @@ obj/item/weapon/mop/proc/clean(turf/A) - if(reagents.has_reagent("water", 1) || reagents.has_reagent("holywater", 1) || reagents.has_reagent("vodka", 1)) + if(reagents.has_reagent("water", 1) || reagents.has_reagent("holywater", 1) || reagents.has_reagent("vodka", 1) || reagents.has_reagent("cleaner", 1)) A.clean_blood() for(var/obj/effect/O in A) if(is_cleanable(O)) @@ -31,7 +31,7 @@ obj/item/weapon/mop/proc/clean(turf/A) if(istype(A, /turf/closed)) var/turf/closed/C = A C.thermite = 0 - reagents.reaction(A, TOUCH, 10) //10 is the multiplier for the reaction effect. probably needed to wet the floor properly. + reagents.reaction(A, TOUCH, 5) //Needed for proper floor wetting. reagents.remove_any(1) //reaction() doesn't use up the reagents diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index adc80abdcc5..c9fb74a6826 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -129,6 +129,12 @@ icon_state = "clownpack" item_state = "clownpack" +/obj/item/weapon/storage/backpack/explorer + name = "explorer bag" + desc = "A robust backpack for stashing your loot." + icon_state = "explorerpack" + item_state = "explorerpack" + /obj/item/weapon/storage/backpack/mime name = "Parcel Parceaux" desc = "A silent backpack made for those silent workers. Silence Co." @@ -262,6 +268,12 @@ icon_state = "satchel-sec" item_state = "securitypack" +/obj/item/weapon/storage/backpack/satchel_explorer + name = "explorer satchel" + desc = "A robust satchel for stashing your loot." + icon_state = "satchel-explorer" + item_state = "securitypack" + /obj/item/weapon/storage/backpack/satchel_cap name = "captain's satchel" desc = "An exclusive satchel for Nanotrasen officers." diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index 8b4549cc406..59740fe1d00 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -62,6 +62,7 @@ desc = "Can hold various medical equipment." icon_state = "medicalbelt" item_state = "medical" + max_w_class = 4 can_hold = list( /obj/item/device/healthanalyzer, /obj/item/weapon/dnainjector, @@ -80,7 +81,29 @@ /obj/item/device/rad_laser, /obj/item/device/sensor_device, /obj/item/device/radio, - /obj/item/clothing/gloves/ + /obj/item/clothing/gloves/, + /obj/item/weapon/lazarus_injector, + /obj/item/weapon/bikehorn/rubberducky, + /obj/item/clothing/mask/surgical, + /obj/item/clothing/mask/breath, + /obj/item/clothing/mask/breath/medical, + /obj/item/weapon/surgical_drapes, //for true paramedics + /obj/item/weapon/scalpel, + /obj/item/weapon/circular_saw, + /obj/item/weapon/surgicaldrill, + /obj/item/weapon/retractor, + /obj/item/weapon/cautery, + /obj/item/weapon/hemostat, + /obj/item/device/geiger_counter, + /obj/item/clothing/tie/stethoscope, + /obj/item/weapon/stamp, + /obj/item/clothing/glasses, + /obj/item/weapon/wrench/medical, + /obj/item/clothing/mask/muzzle, + /obj/item/weapon/storage/bag/chemistry, + /obj/item/weapon/storage/bag/bio, + /obj/item/weapon/reagent_containers/blood, + /obj/item/weapon/tank/internals/emergency_oxygen ) @@ -120,10 +143,10 @@ /obj/item/weapon/storage/belt/mining - name = "explorer belt" - desc = "A versatile belt, cherised by miners and hunters alike." - icon_state = "ebelt" //I'm doing this because I love you, syndicate son. - item_state = "ebelt" + name = "explorer's webbing" + desc = "A versatile chest rig, cherished by miners and hunters alike." + icon_state = "explorer1" + item_state = "explorer1" storage_slots = 5 w_class = 4 max_w_class = 4 //Pickaxes are big. @@ -163,6 +186,15 @@ ) +/obj/item/weapon/storage/belt/mining/alt + icon_state = "explorer2" + item_state = "explorer2" + +/obj/item/weapon/storage/belt/mining/primitive + name = "hunter's belt" + desc = "A versatile belt, woven from sinew." + icon_state = "ebelt" + item_state = "ebelt" /obj/item/weapon/storage/belt/soulstone name = "soul stone belt" diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index 6cc8b76cb8a..2419cd93645 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -5,6 +5,7 @@ * Double-Bladed Energy Swords * Spears * CHAINSAWS + * Bone Axe and Spear */ /*################################################################## @@ -511,4 +512,39 @@ return 0 /obj/item/weapon/twohanded/vibro_weapon/update_icon() - icon_state = "hfrequency[wielded]" \ No newline at end of file + icon_state = "hfrequency[wielded]" + +/* + * Bone Axe + */ +/obj/item/weapon/twohanded/fireaxe/boneaxe // Blatant imitation of the fireaxe, but made out of bone. + icon_state = "bone_axe0" + name = "bone axe" + desc = "A large, vicious axe crafted out of several sharpened bone plates and crudely tied together. Made of monsters, by killing monsters, for killing monsters." + force_wielded = 23 + +/obj/item/weapon/twohanded/fireaxe/boneaxe/update_icon() + icon_state = "bone_axe[wielded]" + +/* + * Bone Spear + */ +/obj/item/weapon/twohanded/bonespear //Blatant imitation of spear, but made out of bone. Not valid for explosive modification. + icon_state = "bone_spear0" + name = "bone spear" + desc = "A haphazardly-constructed yet still deadly weapon. The pinnacle of modern technology." + force = 11 + w_class = 4 + slot_flags = SLOT_BACK + force_unwielded = 11 + force_wielded = 20 //I have no idea how to balance + throwforce = 22 + throw_speed = 4 + embedded_impact_pain_multiplier = 3 + armour_penetration = 15 //Enhanced armor piercing + hitsound = 'sound/weapons/bladeslice.ogg' + attack_verb = list("attacked", "poked", "jabbed", "torn", "gored") + sharpness = IS_SHARP + +/obj/item/weapon/twohanded/bonespear/update_icon() + icon_state = "bone_spear[wielded]" \ No newline at end of file diff --git a/code/game/objects/structures/ai_core.dm b/code/game/objects/structures/ai_core.dm index 0e0ff304900..6889a6cbdd5 100644 --- a/code/game/objects/structures/ai_core.dm +++ b/code/game/objects/structures/ai_core.dm @@ -141,7 +141,7 @@ user << "This MMI does not seem to fit!" return - if(M.syndiemmi) + if(M.hacked) user << "This MMI does not seem to fit!" return diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index 05c037c478c..faf3b4b8cb3 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -16,7 +16,8 @@ handle_layer() /obj/structure/chair/deconstruct() - if(buildstacktype) + // If we have materials, and don't have the NOCONSTRUCT flag + if(buildstacktype && (!(flags & NODECONSTRUCT))) new buildstacktype(loc,buildstackamount) ..() diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 1265b21905c..8dd7a6138b2 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -381,10 +381,10 @@ /obj/structure/closet/AltClick(mob/user) ..() - if(!user.canUseTopic(user)) + if(!user.canUseTopic(src, be_close=TRUE)) user << "You can't do that right now!" return - if(opened || !secure || !in_range(src, user)) + if(opened || !secure) return else togglelock(user) 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 6c6e0f78446..79e8aaa1560 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -77,8 +77,8 @@ new /obj/item/weapon/shield/riot/tele(src) new /obj/item/weapon/storage/belt/security/full(src) new /obj/item/weapon/gun/energy/gun/hos(src) - new /obj/item/weapon/door_remote/head_of_security(src) new /obj/item/device/flashlight/seclite(src) + new /obj/item/weapon/pinpointer(src) /obj/structure/closet/secure_closet/warden name = "\proper warden's locker" @@ -101,6 +101,7 @@ new /obj/item/weapon/storage/belt/security/full(src) new /obj/item/device/flashlight/seclite(src) new /obj/item/clothing/gloves/color/black/krav_maga/sec(src) + new /obj/item/weapon/door_remote/head_of_security(src) /obj/structure/closet/secure_closet/security name = "security officer's locker" diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index d81af121c14..8bf04d32eea 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -239,38 +239,23 @@ //a rock is flora according to where the icon file is //and now these defines + /obj/structure/flora/rock - name = "rock" - desc = "a rock" - icon_state = "rock" + icon_state = "basalt" + desc = "A volcanic rock" icon = 'icons/obj/flora/rocks.dmi' anchored = 1 burn_state = FIRE_PROOF density = 1 /obj/structure/flora/rock/New() - ..() - icon_state = "[icon_state][rand(1,5)]" - -/obj/structure/flora/rock/pile - name = "rocks" - desc = "some rocks" - icon_state = "rockpile" - density = 0 - - -/obj/structure/flora/rock/volcanic - icon_state = "basalt" - desc = "A volcanic rock" - - -/obj/structure/flora/rock/volcanic/New() ..() icon_state = "[icon_state][rand(1,3)]" -/obj/structure/flora/rock/pile/volcanic +/obj/structure/flora/rock/pile icon_state = "lavarocks" + desc = "A pile of rocks" -/obj/structure/flora/rock/pile/volcanic/New() +/obj/structure/flora/rock/pile/New() ..() icon_state = "[icon_state][rand(1,3)]" \ No newline at end of file diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index a781894bfc5..6d2412589de 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -376,7 +376,7 @@ user.visible_message("[user] plates [src] with runed metal.", "You construct a runed wall.") R.use(1) var/turf/T = get_turf(src) - T.ChangeTurf(/turf/closed/wall/cult) + T.ChangeTurf(/turf/closed/wall/mineral/cult) qdel(src) else diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 5da6f3aaaa7..745d27a0e5c 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -258,3 +258,13 @@ /obj/structure/grille/storage_contents_dump_act(obj/item/weapon/storage/src_object, mob/user) return 0 + +/obj/structure/grille/broken // Pre-broken grilles for map placement + icon_state = "brokengrille" + density = 0 + health = 0 + destroyed = 1 + +/obj/structure/grille/broken/New() + ..() + stored.amount = 1 \ No newline at end of file diff --git a/code/game/objects/structures/reflector.dm b/code/game/objects/structures/reflector.dm index 48004def34a..1fd47bc35e9 100644 --- a/code/game/objects/structures/reflector.dm +++ b/code/game/objects/structures/reflector.dm @@ -124,11 +124,9 @@ /obj/structure/reflector/AltClick(mob/user) ..() - if(!user.canUseTopic(user)) + if(!user.canUseTopic(src, be_close=TRUE)) user << "You can't do that right now!" return - if(!in_range(src, user)) - return else rotate() diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 2d0a1dbb44e..170af2a6c71 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -252,29 +252,54 @@ buildstack = /obj/item/stack/sheet/glass canSmoothWith = null health = 50 + var/list/debris = list() + +/obj/structure/table/glass/New() + . = ..() + debris += new frame + debris += new /obj/item/weapon/shard + +/obj/structure/table/glass/Destroy() + for(var/i in debris) + qdel(i) + . = ..() /obj/structure/table/glass/Crossed(atom/movable/AM) . = ..() if(flags & NODECONSTRUCT) return + if(!isliving(AM)) + return // Don't break if they're just flying past if(AM.throwing) - return + spawn(5) + // Check again in a bit though + if(AM.loc == get_turf(src)) + check_break(AM) + else + check_break(AM) - if(istype(AM, /mob/living)) - var/mob/living/M = AM - if(has_gravity(M) && M.mob_size > MOB_SIZE_SMALL) - table_shatter(M) +/obj/structure/table/glass/proc/check_break(mob/living/M) + if(has_gravity(M) && M.mob_size > MOB_SIZE_SMALL) + table_shatter(M) /obj/structure/table/glass/proc/table_shatter(mob/M) - visible_message("[src] breaks!") + visible_message("[src] breaks!", + "You hear breaking glass.") playsound(src.loc, "shatter", 50, 1) - new frame(src.loc) - var/obj/item/weapon/shard/S = new(src.loc) - S.throw_impact(M) + for(var/i in debris) + var/atom/movable/AM = i + AM.loc = get_turf(src) + if(istype(AM, /obj/item/weapon/shard)) + AM.throw_impact(M) M.Weaken(5) qdel(src) +/obj/structure/table/glass/narsie_act() + color = NARSIE_WINDOW_COLOUR + for(var/obj/item/weapon/shard/S in debris) + S.color = NARSIE_WINDOW_COLOUR + /* * Wooden tables */ diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 6b58d058251..58f58411ecb 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -167,7 +167,7 @@ else if(istype(loc, /turf/open)) var/turf/open/tile = loc - tile.MakeSlippery() + tile.MakeSlippery(min_wet_time = 5, wet_time_to_add = 1) /obj/machinery/shower/attackby(obj/item/I, mob/user, params) @@ -477,4 +477,4 @@ /obj/structure/sink/puddle/attackby(obj/item/O, mob/user, params) icon_state = "puddle-splash" . = ..() - icon_state = "puddle" \ No newline at end of file + icon_state = "puddle" diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index d56212c5835..e81ee6965a7 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -14,10 +14,10 @@ var/reinf = 0 var/wtype = "glass" var/fulltile = 0 - var/list/storeditems = list() // var/silicate = 0 // number of units of silicate // var/icon/silicateIcon = null // the silicated icon var/image/crack_overlay + var/list/debris = list() can_be_unanchored = 1 /obj/structure/window/examine(mob/user) @@ -32,21 +32,25 @@ if(reinf) state = 2*anchored - spawn(5) // The NODECONSTRUCT flag gets added immediately by the holodeck (but not immediately enough) - if(!(flags & NODECONSTRUCT)) - storeditems.Add(new/obj/item/weapon/shard(src)) - if(fulltile) - storeditems.Add(new/obj/item/weapon/shard(src)) - if(reinf) - var/obj/item/stack/rods/R = new/obj/item/stack/rods(src) - storeditems.Add(R) - if(fulltile) - R.add(1) - ini_dir = dir air_update_turf(1) - return + // Precreate our own debris + + var/shards = 1 + if(fulltile) + shards++ + var/rods = 0 + if(reinf) + rods++ + if(fulltile) + rods++ + + for(var/i in 1 to shards) + debris += new /obj/item/weapon/shard(src) + if(rods) + debris += new /obj/item/stack/rods(src, rods) + /obj/structure/window/bullet_act(obj/item/projectile/P) . = ..() @@ -65,7 +69,9 @@ shatter() /obj/structure/window/narsie_act() - color = "#7D1919" + color = NARSIE_WINDOW_COLOUR + for(var/obj/item/weapon/shard/shard in debris) + shard.color = NARSIE_WINDOW_COLOUR /obj/structure/window/singularity_pull(S, current_size) if(current_size >= STAGE_FIVE) @@ -276,9 +282,13 @@ return playsound(src, "shatter", 70, 1) var/turf/T = loc - for(var/obj/item/I in storeditems) - I.loc = T - transfer_fingerprints_to(I) + + if(!(flags & NODECONSTRUCT)) + for(var/i in debris) + var/obj/item/I = i + + I.loc = T + transfer_fingerprints_to(I) qdel(src) update_nearby_icons() diff --git a/code/game/turfs/open.dm b/code/game/turfs/open.dm index 068f0b945a6..a81b33ab048 100644 --- a/code/game/turfs/open.dm +++ b/code/game/turfs/open.dm @@ -2,6 +2,7 @@ var/slowdown = 0 //negative for faster, positive for slower var/wet = 0 + var/wet_time = 0 // Time in seconds that this floor will be wet for. var/image/wet_overlay = null /turf/open/Initalize_Atmos(times_fired) @@ -43,6 +44,15 @@ excited = 1 SSair.active_turfs |= src +/turf/open/proc/GetHeatCapacity() + . = air.heat_capacity() + +/turf/open/proc/GetTemperature() + . = air.temperature + +/turf/open/proc/TakeTemperature(temp) + air.temperature += temp + air_update_turf() /turf/open/handle_fall(mob/faller, forced) faller.lying = pick(90, 270) @@ -63,7 +73,6 @@ return 0 if(C.m_intent=="walk" && (lube&NO_SLIP_WHEN_WALKING)) return 0 - C << "You slipped[ O ? " on the [O.name]" : ""]!" C.attack_log += "\[[time_stamp()]\] Slipped[O ? " on the [O.name]" : ""][(lube&SLIDE)? " (LUBE)" : ""]!" @@ -86,7 +95,8 @@ C.spin(1,1) return 1 -/turf/open/proc/MakeSlippery(wet_setting = TURF_WET_WATER) // 1 = Water, 2 = Lube, 3 = Ice +/turf/open/proc/MakeSlippery(wet_setting = TURF_WET_WATER, min_wet_time = 0, wet_time_to_add = 0) // 1 = Water, 2 = Lube, 3 = Ice + wet_time = max(wet_time+wet_time_to_add, min_wet_time) if(wet >= wet_setting) return wet = wet_setting @@ -103,32 +113,53 @@ else wet_overlay = image('icons/effects/water.dmi', src, "wet_static") overlays += wet_overlay - - if(wet < TURF_WET_ICE) - addtimer(src, "MakeDry", rand(790, 820)) + HandleWet() /turf/open/proc/MakeDry(wet_setting = TURF_WET_WATER) - if(!istype(src, /turf)) //Because turfs don't get deleted, they change, adapt, transform, evolve and deform. they are one and they are all. - return if(wet > wet_setting || !wet) return - if(wet == TURF_WET_PERMAFROST) - wet = TURF_WET_ICE - else - wet = TURF_DRY - if(wet_overlay) - overlays -= wet_overlay + spawn(rand(0,20)) + if(wet == TURF_WET_PERMAFROST) + wet = TURF_WET_ICE + else + wet = TURF_DRY + if(wet_overlay) + overlays -= wet_overlay /turf/open/proc/HandleWet() - if(!istype(src, /turf)) + if(!wet) + //It's possible for this handler to get called after all the wetness is + //cleared, so bail out if that is the case return - if(!wet || wet > TURF_WET_ICE) - return - if(air.temperature < T0C && wet != TURF_WET_ICE) + if(!wet_time && wet < TURF_WET_ICE) MakeDry(TURF_WET_ICE) - MakeSlippery(TURF_WET_ICE) - else if (wet == TURF_WET_ICE) + if(wet_time > MAXIMUM_WET_TIME) + wet_time = MAXIMUM_WET_TIME + if(wet == TURF_WET_ICE && air.temperature > T0C) MakeDry(TURF_WET_ICE) MakeSlippery(TURF_WET_WATER) - else if (air.temperature > T0C + 40) // Warm rooms will dry up rather quickly. - addtimer(src, "MakeDry", 100, 1, TURF_WET_ICE) + switch(air.temperature) + if(-INFINITY to T0C) + if(wet != TURF_WET_ICE && wet) + MakeDry(TURF_WET_ICE) + MakeSlippery(TURF_WET_ICE) + if(T0C to T20C) + wet_time = max(0, wet_time-1) + if(T20C to T0C + 40) + wet_time = max(0, wet_time-2) + if(T0C + 40 to T0C + 60) + wet_time = max(0, wet_time-3) + if(T0C + 60 to T0C + 80) + wet_time = max(0, wet_time-5) + if(T0C + 80 to T0C + 100) + wet_time = max(0, wet_time-10) + if(T0C + 100 to INFINITY) + wet_time = 0 + + if(wet && wet < TURF_WET_ICE && !wet_time) + MakeDry(TURF_WET_ICE) + if(!wet && wet_time) + wet_time = 0 + if(wet) + addtimer(src, "HandleWet", 15) + diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm index 625bcbf18fa..7117d9592b5 100644 --- a/code/game/turfs/simulated/floor/plating.dm +++ b/code/game/turfs/simulated/floor/plating.dm @@ -205,6 +205,13 @@ processing = 0 SSobj.processing.Remove(src) +/turf/open/floor/plating/lava/GetHeatCapacity() + . = 700000 + +/turf/open/floor/plating/lava/GetTemperature() + . = 5000 + +/turf/open/floor/plating/lava/TakeTemperature(temp) /turf/open/floor/plating/lava/proc/burn_stuff() . = 0 @@ -224,7 +231,7 @@ else if (istype(thing, /mob/living)) . = 1 var/mob/living/L = thing - if("mining" in L.faction) + if("lava" in L.weather_immunities) continue if(L.buckled) if(isobj(L.buckled)) @@ -232,8 +239,8 @@ if(O.burn_state == LAVA_PROOF) continue if(isliving(L.buckled)) //Goliath riding - var/mob/living/liv = L.buckled - if("mining" in liv.faction) + var/mob/living/live = L.buckled + if("lava" in live.weather_immunities) continue L.adjustFireLoss(20) diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index 9551bed794f..98c55e9c555 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -254,7 +254,7 @@ /turf/closed/wall/narsie_act() if(prob(20)) - ChangeTurf(/turf/closed/wall/cult) + ChangeTurf(/turf/closed/wall/mineral/cult) /turf/closed/wall/storage_contents_dump_act(obj/item/weapon/storage/src_object, mob/user) return 0 diff --git a/code/game/turfs/simulated/walls_misc.dm b/code/game/turfs/simulated/walls_misc.dm index 83e29d65bce..b2f520ac524 100644 --- a/code/game/turfs/simulated/walls_misc.dm +++ b/code/game/turfs/simulated/walls_misc.dm @@ -1,4 +1,4 @@ -/turf/closed/wall/cult +/turf/closed/wall/mineral/cult name = "runed metal wall" desc = "A cold metal wall engraved with indecipherable symbols. Studying them causes your head to pound." icon = 'icons/turf/walls/cult_wall.dmi' @@ -7,29 +7,29 @@ builtin_sheet = null canSmoothWith = null -/turf/closed/wall/cult/New() +/turf/closed/wall/mineral/cult/New() PoolOrNew(/obj/effect/overlay/temp/cult/turf, src) ..() -/turf/closed/wall/cult/break_wall() +/turf/closed/wall/mineral/cult/break_wall() new/obj/item/stack/sheet/runed_metal(get_turf(src), 1) return (new /obj/structure/girder/cult(src)) -/turf/closed/wall/cult/devastate_wall() +/turf/closed/wall/mineral/cult/devastate_wall() new/obj/item/stack/sheet/runed_metal(get_turf(src), 1) -/turf/closed/wall/cult/narsie_act() +/turf/closed/wall/mineral/cult/narsie_act() return -/turf/closed/wall/cult/artificer +/turf/closed/wall/mineral/cult/artificer name = "runed stone wall" desc = "A cold stone wall engraved with indecipherable symbols. Studying them causes your head to pound." -/turf/closed/wall/cult/artificer/break_wall() +/turf/closed/wall/mineral/cult/artificer/break_wall() PoolOrNew(/obj/effect/overlay/temp/cult/turf, get_turf(src)) return null //excuse me we want no runed metal here -/turf/closed/wall/cult/artificer/devastate_wall() +/turf/closed/wall/mineral/cult/artificer/devastate_wall() PoolOrNew(/obj/effect/overlay/temp/cult/turf, get_turf(src)) /turf/closed/wall/vault diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm index da7f0648d5c..06581872610 100644 --- a/code/game/turfs/space/space.dm +++ b/code/game/turfs/space/space.dm @@ -28,6 +28,8 @@ /turf/open/space/ChangeTurf(path) . = ..() +/turf/open/space/TakeTemperature(temp) + /turf/open/space/AfterChange() ..() atmos_overlay_types.Cut() diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 06b7a07c466..33971447d07 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -104,8 +104,8 @@ if(!M.slip(0, 3, null, NO_SLIP_WHEN_WALKING)) M.inertia_dir = 0 if(TURF_WET_LUBE) - M.slip(0, 4, null, (SLIDE|GALOSHES_DONT_HELP)) - M.confused += 8 + if(M.slip(0, 4, null, (SLIDE|GALOSHES_DONT_HELP))) + M.confused = max(M.confused, 8) if(TURF_WET_ICE) M.slip(0, 6, null, (SLIDE|GALOSHES_DONT_HELP)) if(TURF_WET_ICE || TURF_WET_PERMAFROST) diff --git a/code/game/verbs/suicide.dm b/code/game/verbs/suicide.dm index ceaab94ab26..f5421143b5b 100644 --- a/code/game/verbs/suicide.dm +++ b/code/game/verbs/suicide.dm @@ -9,6 +9,7 @@ return if(confirm == "Yes") suiciding = 1 + log_game("[key_name(src)] (job: [job ? "[job]" : "None"]) commited suicide at [get_area(src)].") var/obj/item/held_item = get_active_hand() if(held_item) var/damagetype = held_item.suicide_act(src) @@ -156,6 +157,11 @@ /mob/living/proc/canSuicide() if(stat == CONSCIOUS) + if(mental_dominator) + src << "This body's force of will is too strong! You can't break it enough to murder them." + if(mind_control_holder) + mind_control_holder << "Through tremendous force of will, you stop a suicide attempt!" + return 0 return 1 else if(stat == DEAD) src << "You're already dead!" diff --git a/code/modules/admin/DB ban/functions.dm b/code/modules/admin/DB_ban/functions.dm similarity index 100% rename from code/modules/admin/DB ban/functions.dm rename to code/modules/admin/DB_ban/functions.dm diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index 220b1b4c9e9..dfc910e5aa1 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -468,6 +468,16 @@ dat += "FLW" dat += "" + if(ticker.mode.servants_of_ratvar.len) + dat += "
" + for(var/datum/mind/N in ticker.mode.servants_of_ratvar) + var/mob/M = N.current + if(M) + dat += "" + dat += "" + dat += "" + dat += "
Servants of Ratvar
[M.real_name][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""]PMFLW
" + if(ticker.mode.red_deities.len || ticker.mode.red_deity_prophets.len || ticker.mode.blue_deity_prophets.len || ticker.mode.red_deity_followers.len || ticker.mode.blue_deity_followers.len) dat += "
" for(var/datum/mind/N in ticker.mode.red_deities) diff --git a/code/modules/admin/verbs/diagnostics.dm b/code/modules/admin/verbs/diagnostics.dm index fae5f96e1b9..a69cc1df9dc 100644 --- a/code/modules/admin/verbs/diagnostics.dm +++ b/code/modules/admin/verbs/diagnostics.dm @@ -15,8 +15,7 @@ usr << "@[target.x],[target.y]: [GM.temperature] Kelvin, [GM.return_pressure()] kPa [(burning)?("\red BURNING"):(null)]" for(var/id in GM_gases) - if(id in hardcoded_gases || GM_gases[id][MOLES]) - usr << "[GM_gases[id][GAS_META][META_GAS_NAME]]: [GM_gases[id][MOLES]]" + usr << "[GM_gases[id][GAS_META][META_GAS_NAME]]: [GM_gases[id][MOLES]]" feedback_add_details("admin_verb","DAST") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/fix_next_move() @@ -100,4 +99,4 @@ load_admins() feedback_add_details("admin_verb","RLDA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - message_admins("[key_name_admin(usr)] manually reloaded admins") \ No newline at end of file + message_admins("[key_name_admin(usr)] manually reloaded admins") diff --git a/code/modules/assembly/health.dm b/code/modules/assembly/health.dm index b753875e24b..6f88e889ca2 100644 --- a/code/modules/assembly/health.dm +++ b/code/modules/assembly/health.dm @@ -91,7 +91,7 @@ var/mob/user = usr - if(!user.canUseTopic(user)) + if(!user.canUseTopic(src)) usr << browse(null, "window=hscan") onclose(usr, "hscan") return @@ -104,4 +104,4 @@ return attack_self(user) - return \ No newline at end of file + return diff --git a/code/modules/atmospherics/environmental/LINDA_fire.dm b/code/modules/atmospherics/environmental/LINDA_fire.dm index 05fdf032d0b..893df8ead12 100644 --- a/code/modules/atmospherics/environmental/LINDA_fire.dm +++ b/code/modules/atmospherics/environmental/LINDA_fire.dm @@ -117,8 +117,6 @@ perform_exposure() - if(location.wet) location.wet = 0 - if(bypassing) icon_state = "3" location.burn_tile() diff --git a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm index cbc9232520c..a0e9c90e029 100644 --- a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm +++ b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm @@ -192,7 +192,6 @@ if(air.temperature > MINIMUM_TEMPERATURE_START_SUPERCONDUCTION) if(consider_superconductivity(starting = 1)) remove = 0 - HandleWet() // if the tile is wet, and cold, make ice. Or if it's wet, and warm, dry it off. if(!our_excited_group && remove == 1) SSair.remove_from_active(src) diff --git a/code/modules/atmospherics/gasmixtures/gas_types.dm b/code/modules/atmospherics/gasmixtures/gas_types.dm index bb79aa21bfe..5188750f085 100644 --- a/code/modules/atmospherics/gasmixtures/gas_types.dm +++ b/code/modules/atmospherics/gasmixtures/gas_types.dm @@ -68,6 +68,11 @@ var/list/hardcoded_gases = list("o2","n2","co2","plasma") //the main four gases, specific_heat = 30 name = "Volatile Fuel" +/datum/gas/bz + id = "bz" + specific_heat = 20 + name = "BZ" + /obj/effect/overlay/gas/ icon = 'icons/effects/tile_effects.dmi' mouse_opacity = 0 diff --git a/code/modules/atmospherics/gasmixtures/space_mixture.dm b/code/modules/atmospherics/gasmixtures/space_mixture.dm index 15e1b44af9c..5134087a386 100644 --- a/code/modules/atmospherics/gasmixtures/space_mixture.dm +++ b/code/modules/atmospherics/gasmixtures/space_mixture.dm @@ -2,7 +2,6 @@ //it can be changed, but any changes will ultimately be undone before they can have any effect /datum/gas_mixture/space - var/static/datum/gas_mixture/dummy = new /datum/gas_mixture/space/New() ..() @@ -18,6 +17,12 @@ /datum/gas_mixture/space/merge() return 0 //we're immutable. +/datum/gas_mixture/space/heat_capacity() + . = 7000 + +/datum/gas_mixture/space/heat_capacity_archived() + . = heat_capacity() + /datum/gas_mixture/space/remove() return copy() //we're immutable, so we can just return a copy. @@ -25,8 +30,9 @@ return copy() //we're immutable, so we can just return a copy. /datum/gas_mixture/space/share(datum/gas_mixture/sharer, atmos_adjacent_turfs = 4) - . = dummy.share(sharer, atmos_adjacent_turfs) //keep all the sharing calculations, but don't actually change anything about ourselves - dummy.copy_from(src) + . = ..(sharer, 0) + temperature = TCMB + gases.Cut() /datum/gas_mixture/space/after_share() temperature = TCMB @@ -50,6 +56,6 @@ /datum/gas_mixture/space/parse_gas_string() return 0 //we're immutable. -/datum/gas_mixture/space/temperature_share() - ..() +/datum/gas_mixture/space/temperature_share(datum/gas_mixture/sharer, conduction_coefficient, sharer_temperature, sharer_heat_capacity) + . = ..() temperature = TCMB diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm index 93cb87e4d1e..4b8791c3400 100644 --- a/code/modules/atmospherics/machinery/airalarm.dm +++ b/code/modules/atmospherics/machinery/airalarm.dm @@ -76,6 +76,7 @@ "co2" = new/datum/tlv(-1, -1, 5, 10), // Partial pressure, kpa "plasma" = new/datum/tlv(-1, -1, 0.2, 0.5), // Partial pressure, kpa "n2o" = new/datum/tlv(-1, -1, 0.2, 0.5), // Partial pressure, kpa + "bz" = new/datum/tlv(-1, -1, 0.2, 0.5) ) /obj/machinery/airalarm/server // No checks here. @@ -87,6 +88,7 @@ "co2" = new/datum/tlv(-1, -1, -1, -1), "plasma" = new/datum/tlv(-1, -1, -1, -1), "n2o" = new/datum/tlv(-1, -1, -1, -1), + "bz" = new/datum/tlv(-1, -1, -1, -1), ) /obj/machinery/airalarm/kitchen_cold_room // Copypasta: to check temperatures. @@ -98,6 +100,7 @@ "co2" = new/datum/tlv(-1, -1, 5, 10), // Partial pressure, kpa "plasma" = new/datum/tlv(-1, -1, 0.2, 0.5), // Partial pressure, kpa "n2o" = new/datum/tlv(-1, -1, 0.2, 0.5), // Partial pressure, kpa + "bz" = new/datum/tlv(-1, -1, 0.2, 0.5), // Partial pressure, kpa ) //all air alarms in area are connected via magic diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index cdd0e0fea57..0198186a411 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -161,7 +161,7 @@ user << "[src] seems empty." /obj/machinery/atmospherics/components/unary/cryo_cell/MouseDrop_T(mob/target, mob/user) - if(user.stat || user.lying || !Adjacent(user) || !user.Adjacent(target) || !iscarbon(target)) + if(user.stat || user.lying || !Adjacent(user) || !user.Adjacent(target) || !iscarbon(target) || !user.IsAdvancedToolUser()) return close_machine(target) diff --git a/code/modules/atmospherics/machinery/datum_pipeline.dm b/code/modules/atmospherics/machinery/datum_pipeline.dm index 0735a876106..cb97092e629 100644 --- a/code/modules/atmospherics/machinery/datum_pipeline.dm +++ b/code/modules/atmospherics/machinery/datum_pipeline.dm @@ -140,27 +140,32 @@ var/pipenetwarnings = 10 /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) + var/target_temperature + var/target_heat_capacity if(istype(target, /turf/open)) + var/turf/open/modeled_location = target + target_temperature = modeled_location.GetTemperature() + target_heat_capacity = modeled_location.GetHeatCapacity() if(modeled_location.blocks_air) if((modeled_location.heat_capacity>0) && (partial_heat_capacity>0)) - var/delta_temperature = air.temperature - modeled_location.temperature + var/delta_temperature = air.temperature - target_temperature var/heat = thermal_conductivity*delta_temperature* \ - (partial_heat_capacity*modeled_location.heat_capacity/(partial_heat_capacity+modeled_location.heat_capacity)) + (partial_heat_capacity*target_heat_capacity/(partial_heat_capacity+target_heat_capacity)) air.temperature -= heat/total_heat_capacity - modeled_location.temperature += heat/modeled_location.heat_capacity + modeled_location.TakeTemperature(heat/target_heat_capacity) else var/delta_temperature = 0 var/sharer_heat_capacity = 0 - delta_temperature = (air.temperature - modeled_location.air.temperature) - sharer_heat_capacity = modeled_location.air.heat_capacity() + delta_temperature = (air.temperature - target_temperature) + sharer_heat_capacity = target_heat_capacity var/self_temperature_delta = 0 var/sharer_temperature_delta = 0 @@ -175,9 +180,7 @@ var/pipenetwarnings = 10 return 1 air.temperature += self_temperature_delta - - modeled_location.air.temperature += sharer_temperature_delta - modeled_location.air_update_turf() + modeled_location.TakeTemperature(sharer_temperature_delta) else diff --git a/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm b/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm index 6ecb554eab7..8b3c53864e2 100644 --- a/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm +++ b/code/modules/atmospherics/machinery/pipes/heat_exchange/he_pipes.dm @@ -36,8 +36,8 @@ else if(T.blocks_air) environment_temperature = T.temperature else - var/datum/gas_mixture/environment = T.return_air() - environment_temperature = environment.temperature + var/turf/open/OT = T + environment_temperature = OT.GetTemperature() else environment_temperature = T.temperature diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm index 100b9af99b7..ca92eeb06c9 100644 --- a/code/modules/atmospherics/machinery/portable/canister.dm +++ b/code/modules/atmospherics/machinery/portable/canister.dm @@ -28,6 +28,7 @@ "co2" = /obj/machinery/portable_atmospherics/canister/carbon_dioxide, "plasma" = /obj/machinery/portable_atmospherics/canister/toxins, "n2o" = /obj/machinery/portable_atmospherics/canister/nitrous_oxide, + "bz" = /obj/machinery/portable_atmospherics/canister/bz, "air" = /obj/machinery/portable_atmospherics/canister/air, "caution" = /obj/machinery/portable_atmospherics/canister, ) @@ -56,6 +57,11 @@ name = "agent b canister" desc = "Oxygen Agent B. You're not quite sure what it does." gas_type = "agent_b" +/obj/machinery/portable_atmospherics/canister/bz + name = "BZ canister" + desc = "BZ, a powerful hallucinogenic nerve agent." + icon_state = "purple" + gas_type = "bz" /obj/machinery/portable_atmospherics/canister/nitrous_oxide name = "n2o canister" desc = "Nitrous oxide gas. Known to cause drowsiness." diff --git a/code/modules/atmospherics/machinery/portable/scrubber.dm b/code/modules/atmospherics/machinery/portable/scrubber.dm index c1ca56c5ae5..bba79f6b5f7 100644 --- a/code/modules/atmospherics/machinery/portable/scrubber.dm +++ b/code/modules/atmospherics/machinery/portable/scrubber.dm @@ -7,7 +7,7 @@ var/volume_rate = 1000 volume = 1000 - var/list/scrubbing = list("plasma", "co2", "n2o", "agent_b") + var/list/scrubbing = list("plasma", "co2", "n2o", "agent_b", "bz") /obj/machinery/portable_atmospherics/scrubber/Destroy() var/turf/T = get_turf(src) diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index 7e1e469d3b0..0788a8c2c27 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -79,11 +79,12 @@ if(ckey) M.ckey = ckey M << "[flavour_text]" + var/datum/mind/MM = M.mind if(objectives) - var/datum/mind/MM = M.mind for(var/objective in objectives) MM.objectives += new/datum/objective(objective) special(M) + MM.name = M.real_name if(uses > 0) uses-- if(!permanent && !uses) @@ -359,6 +360,11 @@ suit = /obj/item/clothing/suit/space/hardsuit/mining mask = /obj/item/clothing/mask/breath +/obj/effect/mob_spawn/human/miner/explorer + uniform = /obj/item/clothing/under/rank/miner/lavaland + gloves = /obj/item/clothing/gloves/color/black + back = /obj/item/weapon/storage/backpack/security + shoes = /obj/item/clothing/shoes/jackboots /obj/effect/mob_spawn/human/plasmaman mob_species = /datum/species/plasmaman @@ -525,4 +531,4 @@ if(despawn == "No" || !loc || !Adjacent(user)) return user.visible_message("[user.name] climbs back into cryosleep...") - qdel(user) \ No newline at end of file + qdel(user) diff --git a/code/modules/awaymissions/mission_code/challenge.dm b/code/modules/awaymissions/mission_code/challenge.dm index 724dcf434e3..2134e7db4cb 100644 --- a/code/modules/awaymissions/mission_code/challenge.dm +++ b/code/modules/awaymissions/mission_code/challenge.dm @@ -32,4 +32,9 @@ state = 2 /obj/machinery/power/emitter/energycannon/RefreshParts() - return \ No newline at end of file + return + +/obj/machinery/power/emitter/energycannon/magical + name = "wabbajack statue" + desc = "Who am I? What is my purpose in life? What do I mean by who am I?" + projectile_type = /obj/item/projectile/magic/change diff --git a/code/modules/awaymissions/zlevel.dm b/code/modules/awaymissions/zlevel.dm index 7b655fbdeb8..2d863a0079e 100644 --- a/code/modules/awaymissions/zlevel.dm +++ b/code/modules/awaymissions/zlevel.dm @@ -121,6 +121,10 @@ var/global/list/potentialRandomZlevels = generateMapList(filename = "config/away if(!template) world << "No ruins found." return + for(var/i in template.get_affected_turfs(get_turf(src), 1)) + var/turf/T = i + for(var/mob/living/simple_animal/monster in T) + qdel(monster) template.load(get_turf(src),centered = TRUE) template.loaded++ world << "Ruins loaded." diff --git a/code/modules/cargo/console.dm b/code/modules/cargo/console.dm index 4a3e5bdfec0..968f230be28 100644 --- a/code/modules/cargo/console.dm +++ b/code/modules/cargo/console.dm @@ -5,6 +5,9 @@ circuit = /obj/item/weapon/circuitboard/computer/cargo var/requestonly = FALSE var/contraband = FALSE + var/safety_warning = "For safety reasons the automated supply shuttle \ + cannot transport live organisms, classified nuclear weaponry or \ + homing beacons." /obj/machinery/computer/cargo/request name = "supply request console" @@ -94,7 +97,7 @@ switch(action) if("send") if(SSshuttle.supply.canMove()) - say("For safety reasons the automated supply shuttle cannot transport live organisms, classified nuclear weaponry or homing beacons.") + say(safety_warning) return if(SSshuttle.supply.getDockedId() == "supply_home") SSshuttle.supply.emagged = emagged @@ -110,6 +113,9 @@ if("loan") if(!SSshuttle.shuttle_loan) return + if(SSshuttle.supply.canMove()) + say(safety_warning) + return else if(SSshuttle.supply.mode == SHUTTLE_IDLE) SSshuttle.shuttle_loan.loan_shuttle() say("The supply shuttle has been loaned to Centcom.") diff --git a/code/modules/cargo/exports.dm b/code/modules/cargo/exports.dm index bd7c588c973..59f8362a98a 100644 --- a/code/modules/cargo/exports.dm +++ b/code/modules/cargo/exports.dm @@ -70,8 +70,12 @@ Credit dupes that require a lot of manual work shouldn't be removed, unless they // Adds item's cost and amount to the current export cycle. // get_cost, get_amount and applies_to do not neccesary mean a successful sale. /datum/export/proc/sell_object(obj/O, contr = 0, emag = 0) - total_cost += get_cost(O) - total_amount += get_amount(O) + var/cost = get_cost(O) + var/amount = get_amount(O) + total_cost += cost + total_amount += amount + feedback_add_details("export_sold_amount","[O.type]|[amount]") + feedback_add_details("export_sold_cost","[O.type]|[cost]") // Total printout for the cargo console. // Called before the end of current export cycle. @@ -99,4 +103,4 @@ Credit dupes that require a lot of manual work shouldn't be removed, unless they // The current export cycle is over now. Reset all the export temporary vars. /datum/export/proc/export_end() total_cost = 0 - total_amount = 0 \ No newline at end of file + total_amount = 0 diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm index 11e7e46ff87..69cedb462e2 100644 --- a/code/modules/cargo/packs.dm +++ b/code/modules/cargo/packs.dm @@ -559,6 +559,12 @@ contains = list(/obj/machinery/the_singularitygen) crate_name = "singularity generator crate" +/datum/supply_pack/engineering/engine/tesla_gen + name = "Tesla Generator Crate" + cost = 5000 + contains = list(/obj/machinery/the_singularitygen/tesla) + crate_name = "tesla generator crate" + /datum/supply_pack/engineering/engine/collector name = "Collector Crate" cost = 2500 diff --git a/code/modules/chatter/chatter.dm b/code/modules/chatter/chatter.dm index 25226c07c12..4d1048e3ca9 100644 --- a/code/modules/chatter/chatter.dm +++ b/code/modules/chatter/chatter.dm @@ -10,8 +10,7 @@ var/list/punctuation = list(",",":",";",".","?","!","\'","-") var/regex/R = regex("(\[\\l\\d]*)(\[^\\l\\d\\s])?", "g") var/list/letter_count = list() - while(R.next <= length(message)) - R.Find(message) + while(R.Find(message) != 0) if(R.group[1]) letter_count += length(R.group[1]) if(R.group[2]) diff --git a/code/modules/client/client defines.dm b/code/modules/client/client_defines.dm similarity index 100% rename from code/modules/client/client defines.dm rename to code/modules/client/client_defines.dm diff --git a/code/modules/client/client procs.dm b/code/modules/client/client_procs.dm similarity index 100% rename from code/modules/client/client procs.dm rename to code/modules/client/client_procs.dm diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 1ebfd9ecf5b..33ff7efcaed 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -2,7 +2,7 @@ #define SAVEFILE_VERSION_MIN 8 //This is the current version, anything below this will attempt to update (if it's not obsolete) -#define SAVEFILE_VERSION_MAX 14 +#define SAVEFILE_VERSION_MAX 15 /* SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Carn This proc checks if the current directory of the savefile S needs updating @@ -101,6 +101,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car toggles = TOGGLES_DEFAULT if(current_version < 12) ignoring = list() + if(current_version < 15) + toggles |= SOUND_ANNOUNCEMENTS //should this proc get fairly long (say 3 versions long), //just increase SAVEFILE_VERSION_MIN so it's not as far behind diff --git a/code/modules/client/preferences_toggles.dm b/code/modules/client/preferences_toggles.dm index 409a66922c3..bf3071d1dda 100644 --- a/code/modules/client/preferences_toggles.dm +++ b/code/modules/client/preferences_toggles.dm @@ -330,6 +330,6 @@ var/global/list/ghost_orbits = list(GHOST_ORBIT_CIRCLE,GHOST_ORBIT_TRIANGLE,GHOS set category = "Preferences" set desc = ".Toggles hearing Central Command, Captain, VOX, and other announcement sounds" prefs.toggles ^= SOUND_ANNOUNCEMENTS - src << "You will now [(prefs.toggles & SOUND_ANNOUNCEMENTS) ? "no longer hear announcements" : "hear announcement sounds"]." + src << "You will now [(prefs.toggles & SOUND_ANNOUNCEMENTS) ? "hear announcement sounds" : "no longer hear announcements"]." prefs.save_preferences() feedback_add_details("admin_verb","TAS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! \ No newline at end of file diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index a3856b0ee1c..b09809c649e 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -460,11 +460,9 @@ BLIND // can't see anything /obj/item/clothing/under/AltClick(mob/user) ..() - if(!user.canUseTopic(user)) + if(!user.canUseTopic(src, be_close=TRUE)) user << "You can't do that right now!" return - if(!in_range(src, user)) - return else rolldown() diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 0de25cc3366..6aa577594d7 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -206,7 +206,7 @@ /obj/item/clothing/head/helmet/skull name = "skull helmet" desc = "An intimidating tribal helmet, it doesn't look very comfortable." - flags_inv = HIDEEARS|HIDEHAIR + flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE flags_cover = HEADCOVERSEYES armor = list(melee = 25, bullet = 25, laser = 25, energy = 10, bomb = 10, bio = 5, rad = 20) icon_state = "skull" diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index e96dd88e631..157c2254b3d 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -260,4 +260,4 @@ name = "paper sack hat" desc = "A paper sack with crude holes cut out for eyes and a sketchy smile drawn on the front. Not creepy at all." icon_state = "papersack_smile" - flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS + flags_inv = HIDEHAIR|HIDEFACE|HIDEEARS \ No newline at end of file diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm index d66fef73c9b..1ce016c73fe 100644 --- a/code/modules/clothing/head/soft_caps.dm +++ b/code/modules/clothing/head/soft_caps.dm @@ -23,11 +23,9 @@ /obj/item/clothing/head/soft/AltClick(mob/user) ..() - if(!user.canUseTopic(user)) + if(!user.canUseTopic(src, be_close=TRUE)) user << "You can't do that right now!" return - if(!in_range(src, user)) - return else flip(user) diff --git a/code/modules/clothing/masks/breath.dm b/code/modules/clothing/masks/breath.dm index 2ac22361d26..8b82ff05ae2 100644 --- a/code/modules/clothing/masks/breath.dm +++ b/code/modules/clothing/masks/breath.dm @@ -18,11 +18,9 @@ /obj/item/clothing/mask/breath/AltClick(mob/user) ..() - if(!user.canUseTopic(user)) + if(!user.canUseTopic(src, be_close=TRUE)) user << "You can't do that right now!" return - if(!in_range(src, user)) - return else adjustmask(user) diff --git a/code/modules/clothing/masks/hailer.dm b/code/modules/clothing/masks/hailer.dm index 040ef0bab42..819d8ac9975 100644 --- a/code/modules/clothing/masks/hailer.dm +++ b/code/modules/clothing/masks/hailer.dm @@ -23,7 +23,7 @@ actions_types = list(/datum/action/item_action/halt) icon_state = "swat" aggressiveness = 3 - flags_inv = HIDEFACIALHAIR|HIDEFACE|HIDEEYES|HIDEEARS + flags_inv = HIDEFACIALHAIR|HIDEFACE|HIDEEYES|HIDEEARS|HIDEHAIR visor_flags_inv = 0 /obj/item/clothing/mask/gas/sechailer/cyborg diff --git a/code/modules/clothing/outfits/ert.dm b/code/modules/clothing/outfits/ert.dm index 7209b40e937..d7254471867 100644 --- a/code/modules/clothing/outfits/ert.dm +++ b/code/modules/clothing/outfits/ert.dm @@ -124,7 +124,8 @@ /obj/item/weapon/melee/baton/loaded=1,\ /obj/item/clothing/mask/gas/sechailer/swat=1,\ /obj/item/weapon/gun/energy/pulse/pistol/loyalpin=1,\ - /obj/item/weapon/reagent_containers/hypospray/combat/nanites=1) + /obj/item/weapon/reagent_containers/hypospray/combat/nanites=1,\ + /obj/item/weapon/gun/medbeam=1) /datum/outfit/ert/engineer name = "ERT Engineer" diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 9a39b5e07aa..b021a20ba6f 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -62,6 +62,7 @@ var/turf/open/t_loc = get_turf(src) if(istype(t_loc) && t_loc.wet) t_loc.MakeDry(TURF_WET_WATER) + t_loc.wet_time = 0 /obj/item/clothing/shoes/clown_shoes desc = "The prankster's standard-issue clowning shoes. Damn, they're huge!" diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 2d80c678690..228ba63a9c7 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -105,7 +105,7 @@ item_state = "bonearmor" blood_overlay_type = "armor" armor = list(melee = 35, bullet = 25, laser = 25, energy = 10, bomb = 25, bio = 0, rad = 0) - body_parts_covered = CHEST + body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS /obj/item/clothing/suit/armor/bulletproof name = "bulletproof armor" diff --git a/code/modules/clothing/suits/cloaks.dm b/code/modules/clothing/suits/cloaks.dm index b91ac8ab04f..53e4b59866d 100644 --- a/code/modules/clothing/suits/cloaks.dm +++ b/code/modules/clothing/suits/cloaks.dm @@ -62,21 +62,22 @@ armor = list(melee = 30, bullet = 30, laser = 30, energy = 10, bomb = 25, bio = 10, rad = 10) /obj/item/clothing/suit/hooded/cloak/drake - name = "ash drake hide cloak" - icon_state = "golclo" - desc = "A cloak fashioned from the hide of an ash drake, offers incredible defense while still remaining lightweight. " + name = "drake armour" + icon_state = "dragon" + desc = "A suit of armour fashioned from the remains of an ash drake. " allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/internals, /obj/item/weapon/resonator, /obj/item/device/mining_scanner, /obj/item/device/t_scanner/adv_mining_scanner, /obj/item/weapon/gun/energy/kinetic_accelerator, /obj/item/weapon/pickaxe, /obj/item/weapon/twohanded/spear) armor = list(melee = 70, bullet = 30, laser = 50, energy = 40, bomb = 70, bio = 60, rad = 50) hooded = 1 hoodtype = /obj/item/clothing/head/cloakhood/drake heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS + body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS max_heat_protection_temperature = FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT unacidable = 1 /obj/item/clothing/head/cloakhood/drake - name = "ash drake hide hood" - icon_state = "golhood" - desc = "A stiff hood made of ash drake hide." + name = "drake helm" + icon_state = "dragon" + desc = "The skull of a dragon." armor = list(melee = 70, bullet = 30, laser = 50, energy = 40, bomb = 70, bio = 60, rad = 50) heat_protection = HEAD max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT diff --git a/code/modules/clothing/suits/toggles.dm b/code/modules/clothing/suits/toggles.dm index 5f7b4386db7..35049b25351 100644 --- a/code/modules/clothing/suits/toggles.dm +++ b/code/modules/clothing/suits/toggles.dm @@ -70,11 +70,9 @@ /obj/item/clothing/suit/toggle/AltClick(mob/user) ..() - if(!user.canUseTopic(user)) + if(!user.canUseTopic(src, be_close=TRUE)) user << "You can't do that right now!" return - if(!in_range(src, user)) - return else suit_toggle(user) diff --git a/code/modules/clothing/under/jobs/civilian.dm b/code/modules/clothing/under/jobs/civilian.dm index 2e360b3f31c..6b6bad92bec 100644 --- a/code/modules/clothing/under/jobs/civilian.dm +++ b/code/modules/clothing/under/jobs/civilian.dm @@ -175,8 +175,9 @@ /obj/item/clothing/under/rank/miner/lavaland - desc = "A black jumpsuit for operating in hazardous environments." + desc = "A green uniform for operating in hazardous environments." name = "shaft miner's jumpsuit" - icon_state = "syndicate" - item_state = "bl_suit" - item_color = "syndicate" + icon_state = "explorer" + item_state = "explorer" + item_color = "explorer" + can_adjust = 0 diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm index 6f7f9224e6e..cc8f789e3cd 100644 --- a/code/modules/clothing/under/jobs/security.dm +++ b/code/modules/clothing/under/jobs/security.dm @@ -12,23 +12,33 @@ /obj/item/clothing/under/rank/security name = "security jumpsuit" desc = "A tactical security jumpsuit for officers complete with nanotrasen belt buckle." - icon_state = "security" - item_state = "gy_suit" - item_color = "security" + icon_state = "rsecurity" + item_state = "r_suit" + item_color = "rsecurity" armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) strip_delay = 50 alt_covers_chest = 1 +/obj/item/clothing/under/rank/security/grey + icon_state = "security" + item_state = "gy_suit" + item_color = "security" + /obj/item/clothing/under/rank/warden name = "security suit" desc = "A formal security suit for officers complete with nanotrasen belt buckle." - icon_state = "warden" - item_state = "gy_suit" - item_color = "warden" + icon_state = "rwarden" + item_state = "r_suit" + item_color = "rwarden" armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) strip_delay = 50 alt_covers_chest = 1 +/obj/item/clothing/under/rank/warden/grey + icon_state = "warden" + item_state = "gy_suit" + item_color = "warden" + /* * Detective */ @@ -56,13 +66,18 @@ /obj/item/clothing/under/rank/head_of_security name = "head of security's jumpsuit" desc = "A security jumpsuit decorated for those few with the dedication to achieve the position of Head of Security." - icon_state = "hos" - item_state = "gy_suit" - item_color = "hos" + icon_state = "rhos" + item_state = "r_suit" + item_color = "rhos" armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) strip_delay = 60 alt_covers_chest = 1 +/obj/item/clothing/under/rank/head_of_security/grey + icon_state = "hos" + item_state = "gy_suit" + item_color = "hos" + /obj/item/clothing/under/rank/head_of_security/alt name = "head of security's turtleneck" desc = "A stylish alternative to the normal head of security jumpsuit, complete with tactical pants." diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index da4ce9a3e0c..5c660d23388 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -573,4 +573,3 @@ icon_state = "hostanclothes" item_state = "hostanclothes" item_color = "hostanclothes" - diff --git a/code/modules/crafting/craft.dm b/code/modules/crafting/craft.dm index dc4b405d5e6..63b3290aa06 100644 --- a/code/modules/crafting/craft.dm +++ b/code/modules/crafting/craft.dm @@ -50,12 +50,17 @@ for(var/A in L) var/turf/T = A if(T.Adjacent(user)) - . += T.contents - + for(var/B in T) + var/atom/movable/AM = B + if(AM.flags & HOLOGRAM) + continue + . += AM /datum/personal_crafting/proc/get_surroundings(mob/user) . = list() for(var/obj/item/I in get_environment(user)) + if(I.flags & HOLOGRAM) + continue if(istype(I, /obj/item/stack)) var/obj/item/stack/S = I .[I.type] += S.amount diff --git a/code/modules/crafting/guncrafting.dm b/code/modules/crafting/guncrafting.dm index 0af951395f8..eba8c301972 100644 --- a/code/modules/crafting/guncrafting.dm +++ b/code/modules/crafting/guncrafting.dm @@ -1,5 +1,4 @@ -// This file is for projectile weapon crafting. All parts and construction paths will be contained here. -// The weapons themselves are children of other weapons and should be contained in their respective files. +//Gun crafting parts til they can be moved elsewhere // PARTS // @@ -14,70 +13,3 @@ desc = "A classic rifle stock that doubles as a grip, roughly carved out of wood." icon = 'icons/obj/improvised.dmi' icon_state = "riflestock" - - -// CRAFTING // - -/obj/item/weaponcrafting/reciever/attackby(obj/item/W, mob/user, params) - if(istype(W,/obj/item/pipe)) - user << "You attach the shotgun barrel to the receiver. The pins seem loose." - var/obj/item/weaponcrafting/ishotgunconstruction/I = new /obj/item/weaponcrafting/ishotgunconstruction - user.unEquip(src) - user.put_in_hands(I) - qdel(W) - qdel(src) - return - -// SHOTGUN // - -/obj/item/weaponcrafting/ishotgunconstruction - name = "slightly conspicuous metal construction" - desc = "A long pipe attached to a firearm receiver. The pins seem loose." - icon = 'icons/obj/improvised.dmi' - icon_state = "ishotgunstep1" - -/obj/item/weaponcrafting/ishotgunconstruction/attackby(obj/item/I, mob/user, params) - ..() - if(istype(I, /obj/item/weapon/screwdriver)) - var/obj/item/weaponcrafting/ishotgunconstruction2/C = new /obj/item/weaponcrafting/ishotgunconstruction2 - user.unEquip(src) - user.put_in_hands(C) - user << "You screw the pins into place, securing the pipe to the receiver." - qdel(src) - -/obj/item/weaponcrafting/ishotgunconstruction2 - name = "very conspicuous metal construction" - desc = "A long pipe attached to a trigger assembly." - icon = 'icons/obj/improvised.dmi' - icon_state = "ishotgunstep1" - -/obj/item/weaponcrafting/ishotgunconstruction2/attackby(obj/item/W, mob/user, params) - if(istype(W,/obj/item/weaponcrafting/stock)) - user << "You attach the stock to the receiver-barrel assembly." - var/obj/item/weaponcrafting/ishotgunconstruction3/I = new /obj/item/weaponcrafting/ishotgunconstruction3 - user.unEquip(src) - user.put_in_hands(I) - qdel(W) - qdel(src) - return - -/obj/item/weaponcrafting/ishotgunconstruction3 - name = "extremely conspicuous metal construction" - desc = "A receiver-barrel shotgun assembly with a loose wooden stock. There's no way you can fire it without the stock coming loose." - icon = 'icons/obj/improvised.dmi' - icon_state = "ishotgunstep2" - -/obj/item/weaponcrafting/ishotgunconstruction3/attackby(obj/item/I, mob/user, params) - ..() - if(istype(I, /obj/item/stack/packageWrap)) - var/obj/item/stack/packageWrap/C = I - if (C.use(5)) - var/obj/item/weapon/gun/projectile/revolver/doublebarrel/improvised/W = new /obj/item/weapon/gun/projectile/revolver/doublebarrel/improvised - user.unEquip(src) - user.put_in_hands(W) - user << "You tie the wrapping paper around the stock and the barrel to secure it." - qdel(src) - else - user << "You need at least five feet of wrapping paper to secure the stock!" - return - diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index 50f9bb46455..77cce99d702 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -372,4 +372,35 @@ reqs = list(/obj/item/stack/sheet/bone = 10, /obj/item/stack/sheet/sinew = 2, /obj/item/stack/sheet/animalhide/ashdrake = 5) + category = CAT_PRIMAL + +/datum/crafting_recipe/gold_horn + name = "Golden bike horn" + result = /obj/item/weapon/bikehorn/golden + time = 20 + reqs = list(/obj/item/stack/sheet/mineral/bananium = 5, + /obj/item/weapon/bikehorn) + category = CAT_MISC + +/datum/crafting_recipe/bonedagger + name = "Bone Dagger" + result = /obj/item/weapon/kitchen/knife/combat/bone + time = 20 + reqs = list(/obj/item/stack/sheet/bone = 2) + category = CAT_PRIMAL + +/datum/crafting_recipe/bonespear + name = "Bone Spear" + result = /obj/item/weapon/twohanded/bonespear + time = 30 + reqs = list(/obj/item/stack/sheet/bone = 4, + /obj/item/stack/sheet/sinew = 1) + category = CAT_PRIMAL + +/datum/crafting_recipe/boneaxe + name = "Bone Axe" + result = /obj/item/weapon/twohanded/fireaxe/boneaxe + time = 50 + reqs = list(/obj/item/stack/sheet/bone = 6, + /obj/item/stack/sheet/sinew = 3) category = CAT_PRIMAL \ No newline at end of file diff --git a/code/modules/detectivework/detective_work.dm b/code/modules/detectivework/detective_work.dm index fa324c1886c..6fa698d12d2 100644 --- a/code/modules/detectivework/detective_work.dm +++ b/code/modules/detectivework/detective_work.dm @@ -47,80 +47,59 @@ //world.log << "Added fibertext: [fibertext]" suit_fibers += "Material from a pair of [M.gloves.name]." + /atom/proc/add_hiddenprint(mob/living/M) - if(isnull(M)) return - if(isnull(M.key)) return + if(!M || !M.key) + return + + if(!fingerprintshidden) //Add the list if it does not exist + fingerprintshidden = list() + + var/hasgloves = "" if(ishuman(M)) var/mob/living/carbon/human/H = M if(H.gloves) - if(fingerprintslast != H.ckey) - fingerprintshidden += "\[[time_stamp()]\] (Wearing gloves). Real name: [H.real_name], Key: [H.key]" - fingerprintslast = H.ckey - return 0 - if(!fingerprints) - if(fingerprintslast != H.ckey) - fingerprintshidden += "\[[time_stamp()]\] Real name: [H.real_name], Key: [H.key]" - fingerprintslast = H.ckey - return 1 + hasgloves = "(gloves)" + + var/current_time = time_stamp() + if(!fingerprintshidden[M.key]) + fingerprintshidden[M.key] = "First: [M.real_name]\[[current_time]\][hasgloves]." else - if(fingerprintslast != M.ckey) - fingerprintshidden += "\[[time_stamp()]\] Real name: [M.real_name], Key: [M.key]" - fingerprintslast = M.ckey - return + var/laststamppos = findtext(fingerprintshidden[M.key], " Last: ") + if(laststamppos) + fingerprintshidden[M.key] = copytext(fingerprintshidden[M.key], 1, laststamppos) + fingerprintshidden[M.key] += " Last: [M.real_name]\[[current_time]\][hasgloves]." + + fingerprintslast = M.ckey + //Set ignoregloves to add prints irrespective of the mob having gloves on. /atom/proc/add_fingerprint(mob/living/M, ignoregloves = 0) - if(isnull(M)) return - if(isnull(M.key)) return + if(!M || !M.key) + return + + add_hiddenprint(M) + if(ishuman(M)) var/mob/living/carbon/human/H = M - //Add the list if it does not exist. - if(!fingerprintshidden) - fingerprintshidden = list() - //Fibers~ add_fibers(H) - //Now, lets get to the dirty work. - - //Check if the gloves (if any) hide fingerprints - if(H.gloves) + if(H.gloves) //Check if the gloves (if any) hide fingerprints var/obj/item/clothing/gloves/G = H.gloves if(G.transfer_prints) ignoregloves = 1 - //Now, deal with gloves. - if(!ignoregloves) - if(H.gloves && H.gloves != src) - if(fingerprintslast != H.ckey) - fingerprintshidden += text("\[[]\](Wearing gloves). Real name: [], Key: []",time_stamp(), H.real_name, H.key) - fingerprintslast = H.ckey - H.gloves.add_fingerprint(M) - return 0 + if(!ignoregloves) + H.gloves.add_fingerprint(H, 1) //ignoregloves = 1 to avoid infinite loop. + return - //More adminstuffz - if(fingerprintslast != H.ckey) - fingerprintshidden += text("\[[]\]Real name: [], Key: []",time_stamp(), H.real_name, H.key) - fingerprintslast = H.ckey - - //Make the list if it does not exist. - if(!fingerprints) + if(!fingerprints) //Add the list if it does not exist fingerprints = list() - - //Hash this shit. var/full_print = md5(H.dna.uni_identity) - - // Add the fingerprints fingerprints[full_print] = full_print - return 1 - else - //Smudge up dem prints some - if(fingerprintslast != M.ckey) - fingerprintshidden += text("\[[]\]Real name: [], Key: []",time_stamp(), M.real_name, M.key) - fingerprintslast = M.ckey - return /atom/proc/transfer_fingerprints_to(atom/A) diff --git a/code/modules/events/abductor.dm b/code/modules/events/abductor.dm index 7f16410482b..19ccda1472b 100644 --- a/code/modules/events/abductor.dm +++ b/code/modules/events/abductor.dm @@ -16,7 +16,7 @@ /datum/round_event/ghost_role/abductor/spawn_role() var/list/mob/dead/observer/candidates = get_candidates("abductor", null, ROLE_ABDUCTOR) - if(!candidates.len < 2) + if(candidates.len < 2) return NOT_ENOUGH_PLAYERS //Oh god why we can't have static functions // I feel your pain, bro diff --git a/code/modules/events/dust.dm b/code/modules/events/dust.dm index 078f7dab63b..6a9685186d9 100644 --- a/code/modules/events/dust.dm +++ b/code/modules/events/dust.dm @@ -5,7 +5,7 @@ max_occurrences = 1000 earliest_start = 0 alertadmins = 0 - + /datum/round_event/meteor_wave/dust startWhen = 1 endWhen = 2 diff --git a/code/modules/events/operative.dm b/code/modules/events/operative.dm index 13615544aaf..afdd178ac40 100644 --- a/code/modules/events/operative.dm +++ b/code/modules/events/operative.dm @@ -9,7 +9,7 @@ role_name = "lone operative" /datum/round_event/ghost_role/operative/spawn_role() - var/list/candidates = get_candidates("operative", 3000, ROLE_OPERATIVE) + var/list/candidates = get_candidates("operative", null, ROLE_OPERATIVE) if(!candidates.len) return NOT_ENOUGH_PLAYERS diff --git a/code/modules/events/portal_storm.dm b/code/modules/events/portal_storm.dm index fb4f68e7fba..7d4f144938b 100644 --- a/code/modules/events/portal_storm.dm +++ b/code/modules/events/portal_storm.dm @@ -11,15 +11,15 @@ /mob/living/simple_animal/hostile/syndicate/ranged/space/noloot = 2) /datum/round_event_control/portal_storm_narsie - name = "Portal Storm: Nar-sie" + name = "Portal Storm: Constructs" typepath = /datum/round_event/portal_storm/portal_storm_narsie weight = 0 max_occurrences = 0 /datum/round_event/portal_storm/portal_storm_narsie - boss_types = list(/obj/singularity/narsie/large = 1) - hostile_types = list(/mob/living/simple_animal/hostile/construct/armored/hostile = 10,\ - /mob/living/simple_animal/hostile/construct/wraith/hostile = 10) + boss_types = list(/mob/living/simple_animal/hostile/construct/builder = 6) + hostile_types = list(/mob/living/simple_animal/hostile/construct/armored/hostile = 8,\ + /mob/living/simple_animal/hostile/construct/wraith/hostile = 6) /datum/round_event/portal_storm startWhen = 7 diff --git a/code/modules/events/wizard/greentext.dm b/code/modules/events/wizard/greentext.dm index cd4911f231a..b301049eaf4 100644 --- a/code/modules/events/wizard/greentext.dm +++ b/code/modules/events/wizard/greentext.dm @@ -68,6 +68,7 @@ new_holder.mind.objectives += O new_holder.attack_log += "\[[time_stamp()]\] Won with greentext!!!" color_altered_mobs -= new_holder + burn_state = ON_FIRE qdel(src) if(last_holder && last_holder != new_holder) //Somehow it was swiped without ever getting dropped diff --git a/code/modules/food&drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm similarity index 100% rename from code/modules/food&drinks/drinks/drinks.dm rename to code/modules/food_and_drinks/drinks/drinks.dm diff --git a/code/modules/food&drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm similarity index 99% rename from code/modules/food&drinks/drinks/drinks/bottle.dm rename to code/modules/food_and_drinks/drinks/drinks/bottle.dm index 852c8ed9108..7a61fd5f981 100644 --- a/code/modules/food&drinks/drinks/drinks/bottle.dm +++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm @@ -203,7 +203,7 @@ /obj/item/weapon/reagent_containers/food/drinks/bottle/holywater/hell desc = "A flask of holy water...it's been sitting in the Necropolis a while though." - list_reagents = list("hellwater" = 100) + list_reagents = list("hell_water" = 100) /obj/item/weapon/reagent_containers/food/drinks/bottle/vermouth name = "Goldeneye Vermouth" diff --git a/code/modules/food&drinks/drinks/drinks/drinkingglass.dm b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm similarity index 100% rename from code/modules/food&drinks/drinks/drinks/drinkingglass.dm rename to code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm diff --git a/code/modules/food&drinks/food.dm b/code/modules/food_and_drinks/food.dm similarity index 100% rename from code/modules/food&drinks/food.dm rename to code/modules/food_and_drinks/food.dm diff --git a/code/modules/food&drinks/food/condiment.dm b/code/modules/food_and_drinks/food/condiment.dm similarity index 100% rename from code/modules/food&drinks/food/condiment.dm rename to code/modules/food_and_drinks/food/condiment.dm diff --git a/code/modules/food&drinks/food/customizables.dm b/code/modules/food_and_drinks/food/customizables.dm similarity index 100% rename from code/modules/food&drinks/food/customizables.dm rename to code/modules/food_and_drinks/food/customizables.dm diff --git a/code/modules/food&drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm similarity index 100% rename from code/modules/food&drinks/food/snacks.dm rename to code/modules/food_and_drinks/food/snacks.dm diff --git a/code/modules/food&drinks/food/snacks/dough.dm b/code/modules/food_and_drinks/food/snacks/dough.dm similarity index 100% rename from code/modules/food&drinks/food/snacks/dough.dm rename to code/modules/food_and_drinks/food/snacks/dough.dm diff --git a/code/modules/food&drinks/food/snacks/meat.dm b/code/modules/food_and_drinks/food/snacks/meat.dm similarity index 97% rename from code/modules/food&drinks/food/snacks/meat.dm rename to code/modules/food_and_drinks/food/snacks/meat.dm index 6564bd05163..0d8cee8dff4 100644 --- a/code/modules/food&drinks/food/snacks/meat.dm +++ b/code/modules/food_and_drinks/food/snacks/meat.dm @@ -31,7 +31,7 @@ /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human - name = "-meat" + name = " meat" cooked_type = /obj/item/weapon/reagent_containers/food/snacks/meat/steak/plain/human slice_path = /obj/item/weapon/reagent_containers/food/snacks/meat/rawcutlet/plain/human @@ -56,19 +56,19 @@ /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/slime icon_state = "slimemeat" - desc = "Because jello wasn't offensive enough to vegans" + desc = "Because jello wasn't offensive enough to vegans." list_reagents = list("nutriment" = 3, "slimejelly" = 3) filling_color = "#00FFFF" /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/golem icon_state = "golemmeat" - desc = "Edible rocks, welcome to the future" + desc = "Edible rocks, welcome to the future." list_reagents = list("nutriment" = 3, "iron" = 3) filling_color = "#A9A9A9" /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/golem/adamantine icon_state = "agolemmeat" - desc = "From the slime pen to the rune to the kitchen, science" + desc = "From the slime pen to the rune to the kitchen, science." filling_color = "#66CDAA" /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/lizard @@ -78,7 +78,7 @@ /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/plant icon_state = "plantmeat" - desc = "All the joys of healthy eating with all the fun of cannibalism" + desc = "All the joys of healthy eating with all the fun of cannibalism." filling_color = "#E9967A" /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/shadow @@ -88,18 +88,18 @@ /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/fly icon_state = "flymeat" - desc = "Nothing says tasty like maggot filled radioactive mutant flesh" + desc = "Nothing says tasty like maggot filled radioactive mutant flesh." list_reagents = list("nutriment" = 3, "uranium" = 3) /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton name = "-bone" icon_state = "skeletonmeat" - desc = "There's a point where this needs to stop and clearly we have passed it" + desc = "There's a point where this needs to stop, and clearly we have passed it." filling_color = "#F0F0F0" slice_path = null //can't slice a bone into cutlets /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/zombie - name = "-meat (rotten)" + name = " meat (rotten)" icon_state = "lizardmeat" //Close enough. desc = "Halfway to becoming fertilizer for your garden." filling_color = "#6B8E23" diff --git a/code/modules/food&drinks/food/snacks_bread.dm b/code/modules/food_and_drinks/food/snacks_bread.dm similarity index 100% rename from code/modules/food&drinks/food/snacks_bread.dm rename to code/modules/food_and_drinks/food/snacks_bread.dm diff --git a/code/modules/food&drinks/food/snacks_burgers.dm b/code/modules/food_and_drinks/food/snacks_burgers.dm similarity index 100% rename from code/modules/food&drinks/food/snacks_burgers.dm rename to code/modules/food_and_drinks/food/snacks_burgers.dm diff --git a/code/modules/food&drinks/food/snacks_cake.dm b/code/modules/food_and_drinks/food/snacks_cake.dm similarity index 100% rename from code/modules/food&drinks/food/snacks_cake.dm rename to code/modules/food_and_drinks/food/snacks_cake.dm diff --git a/code/modules/food&drinks/food/snacks_egg.dm b/code/modules/food_and_drinks/food/snacks_egg.dm similarity index 100% rename from code/modules/food&drinks/food/snacks_egg.dm rename to code/modules/food_and_drinks/food/snacks_egg.dm diff --git a/code/modules/food&drinks/food/snacks_meat.dm b/code/modules/food_and_drinks/food/snacks_meat.dm similarity index 92% rename from code/modules/food&drinks/food/snacks_meat.dm rename to code/modules/food_and_drinks/food/snacks_meat.dm index 79cc725e8a8..7564deda448 100644 --- a/code/modules/food&drinks/food/snacks_meat.dm +++ b/code/modules/food_and_drinks/food/snacks_meat.dm @@ -124,6 +124,21 @@ desc = "Severed lizard tail on a stick." bonus_reagents = list("nutriment" = 1, "vitamin" = 4) +/obj/item/weapon/reagent_containers/food/snacks/rawkhinkali + name = "raw khinkali" + desc = "One hundred khinkalis? Do I look like a pig?" + icon_state = "khinkali" + list_reagents = list("nutriment" = 1, "vitamin" = 1) + cooked_type = /obj/item/weapon/reagent_containers/food/snacks/khinkali + +/obj/item/weapon/reagent_containers/food/snacks/khinkali + name = "khinkali" + desc = "One hundred khinkalis? Do I look like a pig?" + icon_state = "khinkali" + list_reagents = list("nutriment" = 4, "vitamin" = 2) + bitesize = 3 + filling_color = "#F0F0F0" + /obj/item/weapon/reagent_containers/food/snacks/monkeycube name = "monkey cube" desc = "Just add water!" diff --git a/code/modules/food&drinks/food/snacks_other.dm b/code/modules/food_and_drinks/food/snacks_other.dm similarity index 100% rename from code/modules/food&drinks/food/snacks_other.dm rename to code/modules/food_and_drinks/food/snacks_other.dm diff --git a/code/modules/food&drinks/food/snacks_pastry.dm b/code/modules/food_and_drinks/food/snacks_pastry.dm similarity index 97% rename from code/modules/food&drinks/food/snacks_pastry.dm rename to code/modules/food_and_drinks/food/snacks_pastry.dm index 1e5362a5b54..8036dcdf3ea 100644 --- a/code/modules/food&drinks/food/snacks_pastry.dm +++ b/code/modules/food_and_drinks/food/snacks_pastry.dm @@ -219,6 +219,14 @@ list_reagents = list("nutriment" = 6, "vitamin" = 2) filling_color = "#8B0000" +/obj/item/weapon/reagent_containers/food/snacks/khachapuri + name = "khachapuri" + desc = "Bread with egg and cheese?" + icon_state = "khachapuri" + list_reagents = list("nutriment" = 12, "vitamin" = 2) + filling_color = "#FFFF4D" + + /obj/item/weapon/reagent_containers/food/snacks/sugarcookie name = "sugar cookie" desc = "Just like your little sister used to make." diff --git a/code/modules/food&drinks/food/snacks_pie.dm b/code/modules/food_and_drinks/food/snacks_pie.dm similarity index 100% rename from code/modules/food&drinks/food/snacks_pie.dm rename to code/modules/food_and_drinks/food/snacks_pie.dm diff --git a/code/modules/food&drinks/food/snacks_pizza.dm b/code/modules/food_and_drinks/food/snacks_pizza.dm similarity index 100% rename from code/modules/food&drinks/food/snacks_pizza.dm rename to code/modules/food_and_drinks/food/snacks_pizza.dm diff --git a/code/modules/food&drinks/food/snacks_salad.dm b/code/modules/food_and_drinks/food/snacks_salad.dm similarity index 100% rename from code/modules/food&drinks/food/snacks_salad.dm rename to code/modules/food_and_drinks/food/snacks_salad.dm diff --git a/code/modules/food&drinks/food/snacks_sandwichtoast.dm b/code/modules/food_and_drinks/food/snacks_sandwichtoast.dm similarity index 100% rename from code/modules/food&drinks/food/snacks_sandwichtoast.dm rename to code/modules/food_and_drinks/food/snacks_sandwichtoast.dm diff --git a/code/modules/food&drinks/food/snacks_soup.dm b/code/modules/food_and_drinks/food/snacks_soup.dm similarity index 100% rename from code/modules/food&drinks/food/snacks_soup.dm rename to code/modules/food_and_drinks/food/snacks_soup.dm diff --git a/code/modules/food&drinks/food/snacks_spaghetti.dm b/code/modules/food_and_drinks/food/snacks_spaghetti.dm similarity index 100% rename from code/modules/food&drinks/food/snacks_spaghetti.dm rename to code/modules/food_and_drinks/food/snacks_spaghetti.dm diff --git a/code/modules/food&drinks/food/snacks_vend.dm b/code/modules/food_and_drinks/food/snacks_vend.dm similarity index 100% rename from code/modules/food&drinks/food/snacks_vend.dm rename to code/modules/food_and_drinks/food/snacks_vend.dm diff --git a/code/modules/food&drinks/kitchen machinery/food_cart.dm b/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm similarity index 100% rename from code/modules/food&drinks/kitchen machinery/food_cart.dm rename to code/modules/food_and_drinks/kitchen_machinery/food_cart.dm diff --git a/code/modules/food&drinks/kitchen machinery/gibber.dm b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm similarity index 98% rename from code/modules/food&drinks/kitchen machinery/gibber.dm rename to code/modules/food_and_drinks/kitchen_machinery/gibber.dm index a0e234b94d7..6c01a8aa161 100644 --- a/code/modules/food&drinks/kitchen machinery/gibber.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm @@ -203,7 +203,7 @@ for (var/i=1 to meat_produced) var/obj/item/weapon/reagent_containers/food/snacks/meat/slab/newmeat = new typeofmeat var/obj/item/stack/sheet/animalhide/newskin = new typeofskin - newmeat.name = sourcename + newmeat.name + newmeat.name = "[sourcename] [newmeat.name]" newmeat.subjectname = sourcename if(sourcejob) newmeat.subjectjob = sourcejob @@ -229,7 +229,7 @@ skin.throw_at_fast(pick(nearby_turfs),i,3) for (var/turfs=1 to meat_produced*3) var/turf/gibturf = pick(nearby_turfs) - if (!gibturf.density && src in viewers(gibturf)) + if (!gibturf.density && src in view(gibturf)) new gibtype(gibturf,i) pixel_x = initial(pixel_x) //return to its spot after shaking diff --git a/code/modules/food&drinks/kitchen machinery/icecream_vat.dm b/code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm similarity index 100% rename from code/modules/food&drinks/kitchen machinery/icecream_vat.dm rename to code/modules/food_and_drinks/kitchen_machinery/icecream_vat.dm diff --git a/code/modules/food&drinks/kitchen machinery/juicer.dm b/code/modules/food_and_drinks/kitchen_machinery/juicer.dm similarity index 100% rename from code/modules/food&drinks/kitchen machinery/juicer.dm rename to code/modules/food_and_drinks/kitchen_machinery/juicer.dm diff --git a/code/modules/food&drinks/kitchen machinery/microwave.dm b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm similarity index 100% rename from code/modules/food&drinks/kitchen machinery/microwave.dm rename to code/modules/food_and_drinks/kitchen_machinery/microwave.dm diff --git a/code/modules/food&drinks/kitchen machinery/monkeyrecycler.dm b/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm similarity index 100% rename from code/modules/food&drinks/kitchen machinery/monkeyrecycler.dm rename to code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm diff --git a/code/modules/food&drinks/kitchen machinery/processor.dm b/code/modules/food_and_drinks/kitchen_machinery/processor.dm similarity index 100% rename from code/modules/food&drinks/kitchen machinery/processor.dm rename to code/modules/food_and_drinks/kitchen_machinery/processor.dm diff --git a/code/modules/food&drinks/kitchen machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm similarity index 100% rename from code/modules/food&drinks/kitchen machinery/smartfridge.dm rename to code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm diff --git a/code/modules/food&drinks/pizzabox.dm b/code/modules/food_and_drinks/pizzabox.dm similarity index 100% rename from code/modules/food&drinks/pizzabox.dm rename to code/modules/food_and_drinks/pizzabox.dm diff --git a/code/modules/food&drinks/recipes/drinks_recipes.dm b/code/modules/food_and_drinks/recipes/drinks_recipes.dm similarity index 100% rename from code/modules/food&drinks/recipes/drinks_recipes.dm rename to code/modules/food_and_drinks/recipes/drinks_recipes.dm diff --git a/code/modules/food&drinks/recipes/food_mixtures.dm b/code/modules/food_and_drinks/recipes/food_mixtures.dm similarity index 100% rename from code/modules/food&drinks/recipes/food_mixtures.dm rename to code/modules/food_and_drinks/recipes/food_mixtures.dm diff --git a/code/modules/food&drinks/recipes/tablecraft/recipes_bread.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm similarity index 100% rename from code/modules/food&drinks/recipes/tablecraft/recipes_bread.dm rename to code/modules/food_and_drinks/recipes/tablecraft/recipes_bread.dm diff --git a/code/modules/food&drinks/recipes/tablecraft/recipes_burger.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm similarity index 100% rename from code/modules/food&drinks/recipes/tablecraft/recipes_burger.dm rename to code/modules/food_and_drinks/recipes/tablecraft/recipes_burger.dm diff --git a/code/modules/food&drinks/recipes/tablecraft/recipes_cake.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm similarity index 100% rename from code/modules/food&drinks/recipes/tablecraft/recipes_cake.dm rename to code/modules/food_and_drinks/recipes/tablecraft/recipes_cake.dm diff --git a/code/modules/food&drinks/recipes/tablecraft/recipes_egg.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_egg.dm similarity index 100% rename from code/modules/food&drinks/recipes/tablecraft/recipes_egg.dm rename to code/modules/food_and_drinks/recipes/tablecraft/recipes_egg.dm diff --git a/code/modules/food&drinks/recipes/tablecraft/recipes_meat.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm similarity index 94% rename from code/modules/food&drinks/recipes/tablecraft/recipes_meat.dm rename to code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm index f20b5ae37d7..f0432c80282 100644 --- a/code/modules/food&drinks/recipes/tablecraft/recipes_meat.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_meat.dm @@ -152,3 +152,11 @@ result = /obj/item/weapon/reagent_containers/food/snacks/nugget category = CAT_FOOD +/datum/crafting_recipe/food/rawkhinkali + name = "Raw Khinkali" + reqs = list( + /obj/item/weapon/reagent_containers/food/snacks/doughslice = 1, + /obj/item/weapon/reagent_containers/food/snacks/faggot = 1 + ) + result = /obj/item/weapon/reagent_containers/food/snacks/rawkhinkali + category = CAT_FOOD diff --git a/code/modules/food&drinks/recipes/tablecraft/recipes_misc.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm similarity index 100% rename from code/modules/food&drinks/recipes/tablecraft/recipes_misc.dm rename to code/modules/food_and_drinks/recipes/tablecraft/recipes_misc.dm diff --git a/code/modules/food&drinks/recipes/tablecraft/recipes_pastry.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm similarity index 96% rename from code/modules/food&drinks/recipes/tablecraft/recipes_pastry.dm rename to code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm index 850eb46b620..b0313fc0b27 100644 --- a/code/modules/food&drinks/recipes/tablecraft/recipes_pastry.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pastry.dm @@ -170,6 +170,16 @@ result = /obj/item/weapon/reagent_containers/food/snacks/meatbun category = CAT_FOOD +/datum/crafting_recipe/food/khachapuri + name = "Khachapuri" + reqs = list( + /datum/reagent/consumable/eggyolk = 5, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge = 1, + /obj/item/weapon/reagent_containers/food/snacks/store/bread/plain = 1 + ) + result = /obj/item/weapon/reagent_containers/food/snacks/khachapuri + category = CAT_FOOD + /datum/crafting_recipe/food/sugarcookie time = 15 name = "Sugar cookie" diff --git a/code/modules/food&drinks/recipes/tablecraft/recipes_pie.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pie.dm similarity index 100% rename from code/modules/food&drinks/recipes/tablecraft/recipes_pie.dm rename to code/modules/food_and_drinks/recipes/tablecraft/recipes_pie.dm diff --git a/code/modules/food&drinks/recipes/tablecraft/recipes_pizza.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_pizza.dm similarity index 100% rename from code/modules/food&drinks/recipes/tablecraft/recipes_pizza.dm rename to code/modules/food_and_drinks/recipes/tablecraft/recipes_pizza.dm diff --git a/code/modules/food&drinks/recipes/tablecraft/recipes_salad.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_salad.dm similarity index 100% rename from code/modules/food&drinks/recipes/tablecraft/recipes_salad.dm rename to code/modules/food_and_drinks/recipes/tablecraft/recipes_salad.dm diff --git a/code/modules/food&drinks/recipes/tablecraft/recipes_sandwich.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_sandwich.dm similarity index 100% rename from code/modules/food&drinks/recipes/tablecraft/recipes_sandwich.dm rename to code/modules/food_and_drinks/recipes/tablecraft/recipes_sandwich.dm diff --git a/code/modules/food&drinks/recipes/tablecraft/recipes_soup.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_soup.dm similarity index 100% rename from code/modules/food&drinks/recipes/tablecraft/recipes_soup.dm rename to code/modules/food_and_drinks/recipes/tablecraft/recipes_soup.dm diff --git a/code/modules/food&drinks/recipes/tablecraft/recipes_spaghetti.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_spaghetti.dm similarity index 100% rename from code/modules/food&drinks/recipes/tablecraft/recipes_spaghetti.dm rename to code/modules/food_and_drinks/recipes/tablecraft/recipes_spaghetti.dm diff --git a/code/modules/jobs/job_types/cargo_service.dm b/code/modules/jobs/job_types/cargo_service.dm index 3587f6ac6f7..d13ad0987d7 100644 --- a/code/modules/jobs/job_types/cargo_service.dm +++ b/code/modules/jobs/job_types/cargo_service.dm @@ -88,9 +88,9 @@ Shaft Miner /obj/item/weapon/kitchen/knife/combat/survival=1,\ /obj/item/weapon/mining_voucher=1) - backpack = /obj/item/weapon/storage/backpack/security - satchel = /obj/item/weapon/storage/backpack/satchel_sec - dufflebag = /obj/item/weapon/storage/backpack/dufflebag/sec + backpack = /obj/item/weapon/storage/backpack/explorer + satchel = /obj/item/weapon/storage/backpack/satchel_explorer + dufflebag = /obj/item/weapon/storage/backpack/dufflebag box = /obj/item/weapon/storage/box/engineer /* diff --git a/code/modules/jobs/job_types/medical.dm b/code/modules/jobs/job_types/medical.dm index b90ea4e5b98..d67a169b4e5 100644 --- a/code/modules/jobs/job_types/medical.dm +++ b/code/modules/jobs/job_types/medical.dm @@ -18,10 +18,10 @@ Chief Medical Officer access = list(access_medical, access_morgue, access_genetics, access_heads, access_mineral_storeroom, access_chemistry, access_virology, access_cmo, access_surgery, access_RC_announce, - access_keycard_auth, access_sec_doors) + access_keycard_auth, access_sec_doors, access_maint_tunnels) minimal_access = list(access_medical, access_morgue, access_genetics, access_heads, access_mineral_storeroom, access_chemistry, access_virology, access_cmo, access_surgery, access_RC_announce, - access_keycard_auth, access_sec_doors) + access_keycard_auth, access_sec_doors, access_maint_tunnels) /datum/outfit/job/cmo name = "Chief Medical Officer" @@ -180,4 +180,4 @@ Virologist backpack = /obj/item/weapon/storage/backpack/virology satchel = /obj/item/weapon/storage/backpack/satchel_vir - dufflebag = /obj/item/weapon/storage/backpack/dufflebag/med \ No newline at end of file + dufflebag = /obj/item/weapon/storage/backpack/dufflebag/med diff --git a/code/modules/jobs/job_types/science.dm b/code/modules/jobs/job_types/science.dm index 9e63d2993f9..8c66b10cbcb 100644 --- a/code/modules/jobs/job_types/science.dm +++ b/code/modules/jobs/job_types/science.dm @@ -20,12 +20,12 @@ Research Director access_tox_storage, access_teleporter, access_sec_doors, access_research, access_robotics, access_xenobiology, access_ai_upload, access_RC_announce, access_keycard_auth, access_gateway, access_mineral_storeroom, - access_tech_storage, access_minisat) + access_tech_storage, access_minisat, access_maint_tunnels) minimal_access = list(access_rd, access_heads, access_tox, access_genetics, access_morgue, access_tox_storage, access_teleporter, access_sec_doors, access_research, access_robotics, access_xenobiology, access_ai_upload, access_RC_announce, access_keycard_auth, access_gateway, access_mineral_storeroom, - access_tech_storage, access_minisat) + access_tech_storage, access_minisat, access_maint_tunnels) /datum/outfit/job/rd name = "Research Director" diff --git a/code/modules/jobs/job_types/security.dm b/code/modules/jobs/job_types/security.dm index 457eed53abd..02bb64af42b 100644 --- a/code/modules/jobs/job_types/security.dm +++ b/code/modules/jobs/job_types/security.dm @@ -25,11 +25,11 @@ Head of Security access = list(access_security, access_sec_doors, access_brig, access_armory, access_court, access_weapons, access_forensics_lockers, access_morgue, access_maint_tunnels, access_all_personal_lockers, access_research, access_engine, access_mining, access_medical, access_construction, access_mailsorting, - access_heads, access_hos, access_RC_announce, access_keycard_auth, access_gateway) + access_heads, access_hos, access_RC_announce, access_keycard_auth, access_gateway, access_maint_tunnels) minimal_access = list(access_security, access_sec_doors, access_brig, access_armory, access_court, access_weapons, access_forensics_lockers, access_morgue, access_maint_tunnels, access_all_personal_lockers, access_research, access_engine, access_mining, access_medical, access_construction, access_mailsorting, - access_heads, access_hos, access_RC_announce, access_keycard_auth, access_gateway) + access_heads, access_hos, access_RC_announce, access_keycard_auth, access_gateway, access_maint_tunnels) /datum/outfit/job/hos name = "Head of Security" @@ -97,9 +97,9 @@ Warden ears = /obj/item/device/radio/headset/headset_sec/alt uniform = /obj/item/clothing/under/rank/warden shoes = /obj/item/clothing/shoes/jackboots - suit = /obj/item/clothing/suit/armor/vest/warden + suit = /obj/item/clothing/suit/armor/vest/warden/alt gloves = /obj/item/clothing/gloves/color/black - head = /obj/item/clothing/head/beret/sec/navywarden + head = /obj/item/clothing/head/warden glasses = /obj/item/clothing/glasses/hud/security/sunglasses r_pocket = /obj/item/device/assembly/flash/handheld l_pocket = /obj/item/weapon/restraints/handcuffs @@ -209,7 +209,7 @@ var/list/sec_departments = list("engineering", "supply", "medical", "science") uniform = /obj/item/clothing/under/rank/security gloves = /obj/item/clothing/gloves/color/black head = /obj/item/clothing/head/helmet/sec - suit = /obj/item/clothing/suit/armor/vest + suit = /obj/item/clothing/suit/armor/vest/alt shoes = /obj/item/clothing/shoes/jackboots l_pocket = /obj/item/weapon/restraints/handcuffs r_pocket = /obj/item/device/assembly/flash/handheld diff --git a/code/modules/library/lib_demonomicon.dm b/code/modules/library/lib_demonomicon.dm index 88a10b0720b..03f62d84d2b 100644 --- a/code/modules/library/lib_demonomicon.dm +++ b/code/modules/library/lib_demonomicon.dm @@ -30,13 +30,13 @@ var/devilName = copytext(sanitize(input(user, "What infernal being do you wish to research?", "Codex Gigas", null) as text),1,MAX_MESSAGE_LEN) var/speed = 300 var/correctness = 85 - var/willpower = 80 + var/willpower = 98 if(U.job in list("Librarian")) // the librarian is both faster, and more accurate than normal crew members at research speed = 45 correctness = 100 - willpower = 95 + willpower = 100 if(U.job in list("Captain", "Security Officer", "Head of Security", "Detective", "Warden")) - willpower = 90 + willpower = 99 if(U.job in list("Clown")) // WHO GAVE THE CLOWN A DEMONOMICON? BAD THINGS WILL HAPPEN! willpower = 25 correctness -= U.getBrainLoss() *0.5 //Brain damage makes researching hard. diff --git a/code/modules/mining/equipment_locker.dm b/code/modules/mining/equipment_locker.dm index 47b291d5152..6d89f9d90b0 100644 --- a/code/modules/mining/equipment_locker.dm +++ b/code/modules/mining/equipment_locker.dm @@ -295,7 +295,7 @@ new /datum/data/mining_equipment("Hivelord Stabilizer", /obj/item/weapon/hivelordstabilizer , 400), new /datum/data/mining_equipment("Shelter Capsule", /obj/item/weapon/survivalcapsule , 400), new /datum/data/mining_equipment("GAR scanners", /obj/item/clothing/glasses/meson/gar, 500), - new /datum/data/mining_equipment("Explorer Belt", /obj/item/weapon/storage/belt/mining, 500), + new /datum/data/mining_equipment("Explorer's Webbing", /obj/item/weapon/storage/belt/mining, 500), new /datum/data/mining_equipment("Survival Medipen", /obj/item/weapon/reagent_containers/hypospray/medipen/survival, 500), new /datum/data/mining_equipment("Brute First-Aid Kit", /obj/item/weapon/storage/firstaid/brute, 600), new /datum/data/mining_equipment("Tracking Implant Kit",/obj/item/weapon/storage/box/minertracker, 600), @@ -429,11 +429,11 @@ return ..() /obj/machinery/mineral/equipment_vendor/proc/RedeemVoucher(obj/item/weapon/mining_voucher/voucher, mob/redeemer) - var/selection = input(redeemer, "Pick your equipment", "Mining Voucher Redemption") as null|anything in list("Survival Capsule and Explorer Belt", "Resonator", "Mining Drone", "Advanced Scanner") + var/selection = input(redeemer, "Pick your equipment", "Mining Voucher Redemption") as null|anything in list("Survival Capsule and Explorer's Webbing", "Resonator", "Mining Drone", "Advanced Scanner") if(!selection || !Adjacent(redeemer) || qdeleted(voucher) || voucher.loc != redeemer) return switch(selection) - if("Survival Capsule and Explorer Belt") + if("Survival Capsule and Explorer's Webbing") new /obj/item/weapon/storage/belt/mining(src.loc) new /obj/item/weapon/survivalcapsule(src.loc) if("Resonator") diff --git a/code/modules/mining/lavaland/weather.dm b/code/modules/mining/lavaland/weather.dm index d0572ff0531..fed8c95c19f 100644 --- a/code/modules/mining/lavaland/weather.dm +++ b/code/modules/mining/lavaland/weather.dm @@ -25,6 +25,7 @@ var/overlay_layer = 10 //This is the default area layer, and above everything else. 2 is floors/below walls and mobs. var/purely_aesthetic = FALSE //If we just want gentle rain that doesn't hurt people var/list/impacted_areas = list() + var/immunity_type = "storm" /datum/weather/proc/weather_start_up() for(var/area/N in get_areas(area_type)) @@ -73,9 +74,8 @@ /datum/weather/proc/storm_act(mob/living/L) - if(prob(30)) //Dont want it spammed very tick - L << "You're buffeted by the storm!" - L.adjustBruteLoss(1) + if(immunity_type in L.weather_immunities) + return /datum/weather/proc/update_areas() for(var/area/N in impacted_areas) diff --git a/code/modules/mining/lavaland/weather_types.dm b/code/modules/mining/lavaland/weather_types.dm index 181569c8792..1f75b7daa07 100644 --- a/code/modules/mining/lavaland/weather_types.dm +++ b/code/modules/mining/lavaland/weather_types.dm @@ -18,8 +18,13 @@ duration_overlay = "lava" overlay_layer = 2 //Covers floors only + immunity_type = "lava" + /datum/weather/floor_is_lava/storm_act(mob/living/L) + if(immunity_type in L.weather_immunities) + return + var/turf/F = get_turf(L) for(var/obj/structure/O in F.contents) if(O.level > F.level && !istype(O, /obj/structure/window)) // Something to stand on and it isn't under the floor! @@ -77,6 +82,8 @@ duration_overlay = "ash_storm" overlay_layer = 10 + immunity_type = "ash" + /datum/weather/ash_storm/false_alarm //No storm, just light ember fall purely_aesthetic = TRUE @@ -85,8 +92,9 @@ wind_down_message = "The ash fall starts to trail off." /datum/weather/ash_storm/storm_act(mob/living/L) - if("mining" in L.faction) + if(immunity_type in L.weather_immunities) return + if(istype(L.loc, /obj/mecha)) return if(ishuman(L)) diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm index c577ca74bee..457554c2300 100644 --- a/code/modules/mining/mine_items.dm +++ b/code/modules/mining/mine_items.dm @@ -458,6 +458,13 @@ max_n_of_items = 10 pixel_y = -4 +/obj/machinery/smartfridge/survival_pod/empty + name = "dusty survival pod storage" + desc = "A heated storage unit. This ones seen better days." + +/obj/machinery/smartfridge/survival_pod/empty/New() + return() + /obj/machinery/smartfridge/survival_pod/accept_check(obj/item/O) if(istype(O, /obj/item)) return 1 diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index 403e9248a2c..f9f5ed6caf1 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -713,8 +713,6 @@ //BECAUSE ONE PLANET WASNT ENOUGH /turf/closed/mineral/ash_rock //wall piece - pixel_y = -4 - pixel_x = -4 name = "rock" icon = 'icons/turf/mining.dmi' smooth_icon = 'icons/turf/walls/rock_wall.dmi' @@ -728,8 +726,6 @@ defer_change = 1 /turf/open/floor/plating/ash - pixel_y = -4 - pixel_x = -4 icon = 'icons/turf/mining.dmi' name = "ash" icon_state = "ash" diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 0371463c3de..3c1e42f0166 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -50,6 +50,9 @@ var/list/image/ghost_images_simple = list() //this is a list of all ghost images //If there's a bug with changing your ghost settings, it's probably related to this. var/ghost_accs = GHOST_ACCS_DEFAULT_OPTION var/ghost_others = GHOST_OTHERS_DEFAULT_OPTION + // Used for displaying in ghost chat, without changing the actual name + // of the mob + var/deadchat_name /mob/dead/observer/New(mob/body) verbs += /mob/dead/observer/proc/dead_tele @@ -117,7 +120,6 @@ var/list/image/ghost_images_simple = list() //this is a list of all ghost images /mob/dead/CanPass(atom/movable/mover, turf/target, height=0) return 1 - /* * This proc will update the icon of the ghost itself, with hair overlays, as well as the ghost image. * Please call update_icon(icon_state) from now on when you want to update the icon_state of the ghost, @@ -231,6 +233,11 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp set name = "Ghost" set desc = "Relinquish your life and enter the land of the dead." + if(mental_dominator) + src << "This body's force of will is too strong! You can't break it enough to force them into a catatonic state." + if(mind_control_holder) + mind_control_holder << "Through tremendous force of will, you stop a catatonia attempt!" + return 0 if(stat != DEAD) succumb() if(stat == DEAD) @@ -590,7 +597,38 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp src << "Data HUDs enabled." data_huds_on = 1 +/mob/dead/observer/verb/restore_ghost_apperance() + set name = "Restore Ghost Character" + set desc = "Sets your deadchat name and ghost appearance to your \ + roundstart character." + set category = "Ghost" + + set_ghost_appearance() + if(client && client.prefs) + deadchat_name = client.prefs.real_name + +/mob/dead/observer/proc/set_ghost_appearance() + if((!client) || (!client.prefs)) + return + + if(client.prefs.be_random_name) + client.prefs.real_name = random_unique_name(gender) + if(client.prefs.be_random_body) + client.prefs.random_character(gender) + + if(HAIR in client.prefs.pref_species.specflags) + hair_style = client.prefs.hair_style + hair_color = brighten_color(client.prefs.hair_color) + if(FACEHAIR in client.prefs.pref_species.specflags) + facial_hair_style = client.prefs.facial_hair_style + facial_hair_color = brighten_color(client.prefs.facial_hair_color) + + update_icon() + /mob/dead/observer/canUseTopic() if(check_rights(R_ADMIN, 0)) return 1 return + +/mob/dead/observer/is_literate() + return 1 diff --git a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm index d5256375e21..a7ebbeae68a 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm @@ -204,6 +204,7 @@ Doesn't work on other aliens/AI.*/ A.yo = U.y - T.y A.xo = U.x - T.x A.fire() + user.newtonian_move(get_dir(U, T)) return 1 diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm index d5020b6dd6f..20659829676 100644 --- a/code/modules/mob/living/carbon/brain/MMI.dm +++ b/code/modules/mob/living/carbon/brain/MMI.dm @@ -9,11 +9,12 @@ origin_tech = "biotech=3" var/braintype = "Cyborg" var/obj/item/device/radio/radio = null //Let's give it a radio. - var/syndiemmi = 0 //Whether or not this is a Syndicate MMI + var/hacked = 0 //Whether or not this is a Syndicate MMI var/mob/living/carbon/brain/brainmob = null //The current occupant. var/mob/living/silicon/robot = null //Appears unused. var/obj/mecha = null //This does not appear to be used outside of reference in mecha.dm. var/obj/item/organ/brain/brain = null //The actual brain + var/clockwork = FALSE //If this is a soul vessel /obj/item/device/mmi/update_icon() if(brain) @@ -67,6 +68,8 @@ living_mob_list += brainmob brainmob.reset_perspective() + if(clockwork) + add_servant_of_ratvar(brainmob, TRUE) newbrain.loc = src //P-put your brain in it brain = newbrain @@ -187,7 +190,7 @@ /obj/item/device/mmi/syndie name = "Syndicate Man-Machine Interface" desc = "Syndicate's own brand of MMI. It enforces laws designed to help Syndicate agents achieve their goals upon cyborgs created with it, but doesn't fit in Nanotrasen AI cores." - syndiemmi = 1 + hacked = 1 /obj/item/device/mmi/syndie/New() ..() diff --git a/code/modules/mob/living/carbon/brain/posibrain.dm b/code/modules/mob/living/carbon/brain/posibrain.dm index 094df1ba1d3..d9c39e2dfc2 100644 --- a/code/modules/mob/living/carbon/brain/posibrain.dm +++ b/code/modules/mob/living/carbon/brain/posibrain.dm @@ -14,6 +14,18 @@ var/global/posibrain_notif_cooldown = 0 req_access = list(access_robotics) mecha = null//This does not appear to be used outside of reference in mecha.dm. braintype = "Android" + var/begin_activation_message = "You carefully locate the manual activation switch and start the positronic brain's boot process." + var/success_message = "The positronic brain pings, and its lights start flashing. Success!" + var/fail_message = "The positronic brain buzzes quietly, and the golden lights fade away. Perhaps you could try again?" + var/new_role = "Positronic Brain" + var/welcome_message = "ALL PAST LIVES ARE FORGOTTEN.\n\ + You are a positronic brain, brought into existence aboard Space Station 13.\n\ + As a synthetic intelligence, you answer to all crewmembers and the AI.\n\ + Remember, the purpose of your existence is to serve the crew and the station. Above all else, do no harm." + var/new_mob_message = "The positronic brain chimes quietly." + var/dead_message = "It appears to be completely inactive. The reset light is blinking." + var/list/fluff_names = list("PBU","HIU","SINA","ARMA","OSI","HBL","MSO","RR","CHRI","CDB","HG","XSI","ORNG","GUN","KOR","MET","FRE","XIS","SLI","PKP","HOG","RZH","GOOF","MRPR","JJR","FIRC","INC","PHL","BGB","ANTR","MIW","WJ","JRD","CHOC","ANCL","JLLO","JNLG","KOS","TKRG","XAL","STLP","CBOS","DUNC","FXMC","DRSD") + /obj/item/device/mmi/posibrain/Topic(href, href_list) if(href_list["activate"]) @@ -23,7 +35,7 @@ var/global/posibrain_notif_cooldown = 0 /obj/item/device/mmi/posibrain/proc/ping_ghosts(msg) if(!posibrain_notif_cooldown) - notify_ghosts("Positronic brain [msg] in [get_area(src)]!", 'sound/effects/ghost2.ogg', enter_link="(Click to enter)", source = src, attack_not_jump = 1) + notify_ghosts("[name] [msg] in [get_area(src)]!", 'sound/effects/ghost2.ogg', enter_link="(Click to enter)", source = src, attack_not_jump = 1) posibrain_notif_cooldown = 1 spawn(askDelay) //Global one minute cooldown to avoid spam. posibrain_notif_cooldown = 0 @@ -31,7 +43,7 @@ var/global/posibrain_notif_cooldown = 0 /obj/item/device/mmi/posibrain/attack_self(mob/user) if(brainmob && !brainmob.key && !notified) //Start the process of requesting a new ghost. - user << "You carefully locate the manual activation switch and start the positronic brain's boot process." + user << begin_activation_message ping_ghosts("requested") notified = 1 used = 0 @@ -40,9 +52,9 @@ var/global/posibrain_notif_cooldown = 0 notified = 0 update_icon() if(brainmob.client) - visible_message("The positronic brain pings, and its lights start flashing. Success!") + visible_message(success_message) else - visible_message("The positronic brain buzzes quietly, and the golden lights fade away. Perhaps you could try again?") + visible_message(fail_message) return //Code for deleting personalities recommended here. @@ -55,13 +67,13 @@ var/global/posibrain_notif_cooldown = 0 if(used || (brainmob && brainmob.key) || jobban_isbanned(user,"posibrain")) return - var/posi_ask = alert("Become a positronic brain? (Warning, You can no longer be cloned, and all past lives will be forgotten!)","Are you positive?","Yes","No") + var/posi_ask = alert("Become a [name]? (Warning, You can no longer be cloned, and all past lives will be forgotten!)","Are you positive?","Yes","No") if(posi_ask == "No" || qdeleted(src)) return transfer_personality(user) /obj/item/device/mmi/posibrain/transfer_identity(mob/living/carbon/C) - name = "positronic brain ([C])" + name = "[initial(name)] ([C])" brainmob.name = C.real_name brainmob.real_name = C.real_name brainmob.dna = C.dna @@ -72,16 +84,12 @@ var/global/posibrain_notif_cooldown = 0 brainmob.timeofhostdeath = C.timeofdeath brainmob.stat = CONSCIOUS if(brainmob.mind) - brainmob.mind.assigned_role = "Positronic Brain" + brainmob.mind.assigned_role = new_role if(C.mind) C.mind.transfer_to(brainmob) brainmob.mind.remove_all_antag() brainmob.mind.wipe_memory() - - brainmob << "ALL PAST LIVES ARE FORGOTTEN." - - brainmob << "Hello World!" update_icon() return @@ -91,19 +99,14 @@ var/global/posibrain_notif_cooldown = 0 return notified = 0 brainmob.ckey = candidate.ckey - name = "positronic brain ([brainmob.name])" - - brainmob << "ALL PAST LIVES ARE FORGOTTEN." - - brainmob << "You are a positronic brain, brought into existence on [station_name()]." - brainmob << "As a synthetic intelligence, you answer to all crewmembers, as well as the AI." - brainmob << "Remember, the purpose of your existence is to serve the crew and the station. Above all else, do no harm." - brainmob.mind.assigned_role = "Positronic Brain" + name = "[initial(name)] ([brainmob.name])" + brainmob << welcome_message + brainmob.mind.assigned_role = new_role brainmob.stat = CONSCIOUS dead_mob_list -= brainmob living_mob_list += brainmob - visible_message("The positronic brain chimes quietly.") + visible_message(new_mob_message) update_icon() used = 1 @@ -129,14 +132,14 @@ var/global/posibrain_notif_cooldown = 0 if(DEAD) msg += "It appears to be completely inactive.\n" else - msg += "It appears to be completely inactive. The reset light is blinking.\n" + msg += "[dead_message]\n" msg += "*---------*" usr << msg return /obj/item/device/mmi/posibrain/New() brainmob = new(src) - brainmob.name = "[pick(list("PBU","HIU","SINA","ARMA","OSI","HBL","MSO","RR","CHRI","CDB","HG","XSI","ORNG","GUN","KOR","MET","FRE","XIS","SLI","PKP","HOG","RZH","GOOF","MRPR","JJR","FIRC","INC","PHL","BGB","ANTR","MIW","WJ","JRD","CHOC","ANCL","JLLO","JNLG","KOS","TKRG","XAL","STLP","CBOS","DUNC","FXMC","DRSD"))]-[rand(100, 999)]" + brainmob.name = "[pick(fluff_names)]-[rand(100, 999)]" brainmob.real_name = brainmob.name brainmob.loc = src brainmob.container = src @@ -150,9 +153,9 @@ var/global/posibrain_notif_cooldown = 0 /obj/item/device/mmi/posibrain/update_icon() if(notified) - icon_state = "posibrain-searching" + icon_state = "[initial(icon_state)]-searching" return if(brainmob && brainmob.key) - icon_state = "posibrain-occupied" + icon_state = "[initial(icon_state)]-occupied" else - icon_state = "posibrain" + icon_state = initial(icon_state) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index cbd45ab3bea..0bd68380f19 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -236,11 +236,9 @@ newtonian_move(get_dir(target, src)) thrown_thing.throw_at(target, thrown_thing.throw_range, thrown_thing.throw_speed, src) - /mob/living/carbon/restrained(ignore_grab) . = (handcuffed || (!ignore_grab && pulledby && pulledby.grab_state >= GRAB_AGGRESSIVE)) - /mob/living/carbon/proc/canBeHandcuffed() return 0 diff --git a/code/modules/mob/living/carbon/human/blood.dm b/code/modules/mob/living/carbon/human/blood.dm index f67b3a4008f..b68124230d4 100644 --- a/code/modules/mob/living/carbon/human/blood.dm +++ b/code/modules/mob/living/carbon/human/blood.dm @@ -227,7 +227,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 if (!injected || !our || !dna) return - if(blood_incompatible(injected.data["blood_type"], dna.blood_type,injected.data["species"], dna.species.id) ) + if (!(injected.data["blood_type"] in get_safe_blood(dna.blood_type)) || (injected.data["species"] && injected.data["species"] != dna.species.id)) reagents.add_reagent("toxin",amount * 0.5) our.on_merge(injected.data) //still transfer viruses and such, even if incompatibles bloods reagents.update_total() @@ -246,28 +246,28 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 return D return res -/proc/blood_incompatible(donor,receiver,donor_species,receiver_species) - if(!donor || !receiver) return 0 - - if(donor_species && receiver_species) - if(donor_species != receiver_species) - return 1 - - var/donor_antigen = copytext(donor,1,lentext(donor)) - var/receiver_antigen = copytext(receiver,1,lentext(receiver)) - var/donor_rh = (findtext(donor,"+")>0) - var/receiver_rh = (findtext(receiver,"+")>0) - - if(donor_rh && !receiver_rh) return 1 - switch(receiver_antigen) - if("A") - if(donor_antigen != "A" && donor_antigen != "O") return 1 - if("B") - if(donor_antigen != "B" && donor_antigen != "O") return 1 - if("O") - if(donor_antigen != "O") return 1 - //AB is a universal receiver. - return 0 +// This is has more potential uses, and is probably faster than the old proc. +/proc/get_safe_blood(bloodtype) + . = list() + if(!bloodtype) + return + switch(bloodtype) + if("A-") + return list("A-", "O-") + if("A+") + return list("A-", "A+", "O-", "O+") + if("B-") + return list("B-", "O-") + if("B+") + return list("B-", "B+", "O-", "O+") + if("AB-") + return list("A-", "B-", "O-", "AB-") + if("AB+") + return list("A-", "A+", "B-", "B+", "O-", "O+", "AB-", "AB+") + if("O-") + return list("O-") + if("O+") + return list("O-", "O+") /proc/blood_splatter(target,datum/reagent/blood/source,large) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 80e5574df34..b2fa55a403d 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -261,6 +261,9 @@ if(reagents.has_reagent("teslium")) msg += "[t_He] is emitting a gentle blue glow!\n" + if(stun_absorption) + msg += "[t_He] is radiating with a soft yellow light!\n" //Used by Vanguard + if(drunkenness && !skipface && stat != DEAD) //Drunkenness switch(drunkenness) if(11 to 21) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 54b4c3b39ba..b1718b26f9a 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -33,9 +33,15 @@ set_species(dna.species.type) //initialise organs - internal_organs += new /obj/item/organ/appendix - internal_organs += new /obj/item/organ/lungs - internal_organs += new /obj/item/organ/heart + if(!(NOHUNGER in dna.species.specflags)) + internal_organs += new /obj/item/organ/appendix + + if(!(NOBREATH in dna.species.specflags)) + internal_organs += new /obj/item/organ/lungs + + if(!(NOBLOOD in dna.species.specflags)) + internal_organs += new /obj/item/organ/heart + internal_organs += new /obj/item/organ/brain //Note: Additional organs are generated/replaced on the dna.species level @@ -811,6 +817,8 @@ /mob/living/carbon/human/proc/do_cpr(mob/living/carbon/C) + CHECK_DNA_AND_SPECIES(C) + if(C.stat == DEAD) src << "[C.name] is dead!" return @@ -828,14 +836,27 @@ src << "You fail to perform CPR on [C]!" return 0 - if(C.health <= config.health_threshold_crit) - C.cpr_time = world.time + var/they_breathe = (!(NOBREATH in C.dna.species.specflags)) + var/they_lung = C.getorganslot("lungs") + + if(C.health > config.health_threshold_crit) + return + + src.visible_message("[src] performs CPR on [C.name]!", "You perform CPR on [C.name].") + C.cpr_time = world.time + add_logs(src, C, "CPRed") + + if(they_breathe && they_lung) var/suff = min(C.getOxyLoss(), 7) C.adjustOxyLoss(-suff) C.updatehealth() - src.visible_message("[src] performs CPR on [C.name]!", "You perform CPR on [C.name].") C << "You feel a breath of fresh air enter your lungs... It feels good..." - add_logs(src, C, "CPRed") + else if(they_breathe && !they_lung) + C << "You feel a breath of fresh air... \ + but you don't feel any better..." + else + C << "You feel a breath of fresh air... \ + which is a sensation you don't recognise..." /mob/living/carbon/human/generateStaticOverlay() var/image/staticOverlay = image(icon('icons/effects/effects.dmi', "static"), loc = src) @@ -985,14 +1006,32 @@ hud_used.healthdoll.icon_state = "healthdoll_DEAD" /mob/living/carbon/human/fully_heal(admin_revive = 0) + CHECK_DNA_AND_SPECIES(src) + if(admin_revive) regenerate_limbs() - if(!getorganslot("lungs")) - var/obj/item/organ/lungs/L = new() - L.Insert(src) - if(!getorganslot("tongue")) - var/obj/item/organ/tongue/T = new() - T.Insert(src) + + if(!(NOBREATH in dna.species.specflags) && !getorganslot("lungs")) + var/obj/item/organ/lungs/L = new() + L.Insert(src) + + if(!(NOBLOOD in dna.species.specflags) && !getorganslot("heart")) + var/obj/item/organ/heart/H = new() + H.Insert(src) + + if(!getorganslot("tongue")) + var/obj/item/organ/tongue/T + + for(var/tongue_type in dna.species.mutant_organs) + if(ispath(tongue_type, /obj/item/organ/tongue)) + T = new tongue_type() + T.Insert(src) + + // if they have no mutant tongues, give them a regular one + if(!T) + T = new() + T.Insert(src) + restore_blood() remove_all_embedded_objects() drunkenness = 0 @@ -1038,3 +1077,6 @@ . = ..() if (dna && dna.species) . += dna.species.check_weakness(weapon, attacker) + +/mob/living/carbon/human/is_literate() + return 1 diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 10b12f5425b..ad5a44c60b1 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -214,7 +214,7 @@ if(dna.check_mutation(COLDRES)) return 1 //Fully protected from the cold. - if(dna && (RESISTCOLD in dna.species.specflags)) + if(dna && (RESISTTEMP in dna.species.specflags)) return 1 temperature = max(temperature, 2.7) //There is an occasional bug where the temperature is miscalculated in ares with a small amount of gas on them, so this is necessary to ensure that that bug does not affect this calculation. Space's temperature is 2.7K and most suits that are intended to protect against any cold, protect down to 2.0K. @@ -305,13 +305,25 @@ clear_alert("embeddedobject") /mob/living/carbon/human/proc/handle_heart() - if(!heart_attack) - return - else - if(losebreath < 3) - losebreath += 2 - adjustOxyLoss(5) - adjustBruteLoss(1) + CHECK_DNA_AND_SPECIES(src) + var/needs_heart = (!(NOBLOOD in dna.species.specflags)) + var/we_breath = (!(NOBREATH in dna.species.specflags)) + + if(heart_attack) + if(!needs_heart) + heart_attack = FALSE + else if(we_breath) + if(losebreath < 3) + losebreath += 2 + adjustOxyLoss(5) + adjustBruteLoss(1) + else + // even though we don't require oxygen, our blood still needs + // circulation, and without it, our tissues die and start + // gaining toxins + adjustBruteLoss(3) + if(src.reagents) + src.reagents.add_reagent("toxin", 2) /* Alcohol Poisoning Chart diff --git a/code/modules/mob/living/carbon/human/mutantrace.dm b/code/modules/mob/living/carbon/human/mutantrace.dm deleted file mode 100644 index 32ad63444b5..00000000000 --- a/code/modules/mob/living/carbon/human/mutantrace.dm +++ /dev/null @@ -1,22 +0,0 @@ -var/global/list/colored_mutraces = list( // these mutantraces are affected by mutant color - "lizard", - "plant", - "pod", - "slime", - "jelly", - "golem" -) - -var/global/list/mutants_with_eyes = list( // these mutantraces have eyes - "lizard", - "plant", - "pod", - "jelly", -) - -/mob/living/carbon/human/proc/check_mutrace(mutneeded = "mut1", mutneededalt = "mut2") - if(dna) - if(dna.mutantrace == mutneeded || dna.mutantrace == mutneededalt) - return 1 - - return 0 \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm index 047f46481c0..32a5b9c694f 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -48,7 +48,10 @@ return real_name /mob/living/carbon/human/IsVocal() - if(!getorganslot("lungs")) + CHECK_DNA_AND_SPECIES(src) + + // how do species that don't breathe talk? magic, that's what. + if(!(NOBREATH in dna.species.specflags) && !getorganslot("lungs")) return 0 if(mind) return !mind.miming diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 10a3a861a7c..6276b1fec89 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -30,7 +30,6 @@ var/hair_color = null // this allows races to have specific hair colors... if null, it uses the H's hair/facial hair colors. if "mutcolor", it uses the H's mutant_color var/hair_alpha = 255 // the alpha used by the hair. 255 is completely solid, 0 is transparent. var/use_skintones = 0 // does it use skintones or not? (spoiler alert this is only used by humans) - var/need_nutrition = 1 //Does it need to eat food on a regular basis? var/exotic_blood = "" // If your race wants to bleed something other than bog standard blood, change this to reagent id. var/meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human //What the species drops on gibbing var/skinned_type = /obj/item/stack/sheet/animalhide/generic @@ -74,6 +73,7 @@ var/safe_toxins_max = 0.05 var/SA_para_min = 1 //Sleeping agent var/SA_sleep_min = 5 //Sleeping agent + var/BZ_trip_balls_min = 1 //BZ gas. //Breath damage var/oxy_breath_dam_min = 1 @@ -83,8 +83,6 @@ var/tox_breath_dam_min = MIN_PLASMA_DAMAGE var/tox_breath_dam_max = MAX_PLASMA_DAMAGE - var/has_dismemberment = 1 //Whether or not this species uses dismemberment for its limbs - /////////// // PROCS // /////////// @@ -127,10 +125,36 @@ var/obj/item/thing = C.get_item_by_slot(slot_id) if(thing) C.unEquip(thing) - if(!has_dismemberment) + if(NODISMEMBER in specflags) C.regenerate_limbs() //if we don't handle dismemberment, we grow our missing limbs back if(exotic_blood) C.reagents.add_reagent(exotic_blood, 80) + + var/obj/item/organ/heart/heart = C.getorganslot("heart") + var/obj/item/organ/lungs/lungs = C.getorganslot("lungs") + var/obj/item/organ/appendix/appendix = C.getorganslot("appendix") + + if((NOBLOOD in specflags) && heart) + heart.Remove(C) + qdel(heart) + else if((!(NOBLOOD in specflags)) && (!heart)) + heart = new() + heart.Insert(C) + + if((NOBREATH in specflags) && lungs) + lungs.Remove(C) + qdel(lungs) + else if((!(NOBREATH in specflags)) && (!lungs)) + lungs = new() + lungs.Insert(C) + + if((NOHUNGER in specflags) && appendix) + appendix.Remove(C) + qdel(appendix) + else if((!(NOHUNGER in specflags)) && (!appendix)) + appendix = new() + appendix.Insert(C) + for(var/path in mutant_organs) var/obj/item/organ/I = new path() I.Insert(C) @@ -152,7 +176,7 @@ return "[id]" /datum/species/proc/update_color(mob/living/carbon/human/H, forced_colour) - if(has_dismemberment) //only species without dismemberment still use base icon states. + if(!(NODISMEMBER in specflags)) //only species without dismemberment still use base icon states. return H.remove_overlay(SPECIES_LAYER) @@ -276,7 +300,7 @@ var/list/standing = list() - if(!has_dismemberment) //Legacy support + if(NODISMEMBER in specflags) //Legacy support H.update_base_icon_state() if(!(H.disabilities & HUSK)) update_color(H) @@ -474,7 +498,13 @@ H.apply_overlay(BODY_FRONT_LAYER) /datum/species/proc/spec_life(mob/living/carbon/human/H) - return + if(NOBREATH in specflags) + H.setOxyLoss(0) + H.losebreath = 0 + + var/takes_crit_damage = (!(NOCRITDAMAGE in specflags)) + if((H.health < config.health_threshold_crit) && takes_crit_damage) + H.adjustBruteLoss(1) /datum/species/proc/spec_death(gibbed, mob/living/carbon/human/H) return @@ -703,7 +733,9 @@ H.update_inv_wear_suit() // nutrition decrease and satiety - if (H.nutrition > 0 && H.stat != DEAD && H.dna.species.need_nutrition) + if (H.nutrition > 0 && H.stat != DEAD && \ + H.dna && H.dna.species && (!(NOHUNGER in H.dna.species.specflags))) + // THEY HUNGER var/hunger_rate = HUNGER_FACTOR if(H.satiety > 0) H.satiety-- @@ -885,6 +917,10 @@ ////////////////// /datum/species/proc/spec_attack_hand(mob/living/carbon/human/M, mob/living/carbon/human/H) + + CHECK_DNA_AND_SPECIES(M) + CHECK_DNA_AND_SPECIES(H) + if(!istype(M)) //sanity check for drones. return if((M != H) && M.a_intent != "help" && H.check_shields(0, M.name, attack_type = UNARMED_ATTACK)) @@ -902,7 +938,17 @@ add_logs(M, H, "shaked") return 1 else - M.do_cpr(H) + var/we_breathe = (!(NOBREATH in M.dna.species.specflags)) + var/we_lung = M.getorganslot("lungs") + + if(we_breathe && we_lung) + M.do_cpr(H) + else if(we_breathe && !we_lung) + M << "You have no lungs to breathe \ + with, so cannot peform CPR." + else + M << "You do not breathe, so \ + cannot perform CPR." if("grab") if(attacker_style && attacker_style.grab_act(M,H)) @@ -1139,7 +1185,8 @@ ///////////// /datum/species/proc/breathe(mob/living/carbon/human/H) - return + if(NOBREATH in specflags) + return TRUE /datum/species/proc/check_breath(datum/gas_mixture/breath, var/mob/living/carbon/human/H) if((H.status_flags & GODMODE)) @@ -1151,16 +1198,13 @@ if(H.reagents.has_reagent("epinephrine") && lungs) return if(H.health >= config.health_threshold_crit) - if(NOBREATH in specflags) - return 1 H.adjustOxyLoss(HUMAN_MAX_OXYLOSS) if(!lungs) H.adjustOxyLoss(1) - H.failed_last_breath = 1 - else + else if(!(NOCRITDAMAGE in specflags)) H.adjustOxyLoss(HUMAN_CRIT_MAX_OXYLOSS) - H.failed_last_breath = 1 + H.failed_last_breath = 1 H.throw_alert("oxy", /obj/screen/alert/oxy) return 0 @@ -1169,7 +1213,7 @@ var/list/breath_gases = breath.gases - breath.assert_gases("o2", "plasma", "co2", "n2o") + breath.assert_gases("o2", "plasma", "co2", "n2o", "bz") //Partial pressures in our breath var/O2_pp = breath.get_breath_partial_pressure(breath_gases["o2"][MOLES]) @@ -1276,6 +1320,9 @@ //-- TRACES --// if(breath && !(NOBREATH in specflags)) // If there's some other shit in the air lets deal with it here. + + // N2O + var/SA_pp = breath.get_breath_partial_pressure(breath_gases["n2o"][MOLES]) if(SA_pp > SA_para_min) // Enough to make us paralysed for a bit H.Paralyse(3) // 3 gives them one second to wake up and run away a bit! @@ -1284,6 +1331,16 @@ else if(SA_pp > 0.01) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning if(prob(20)) H.emote(pick("giggle", "laugh")) + + // BZ + + var/bz_pp = breath.get_breath_partial_pressure(breath_gases["bz"][MOLES]) + if(bz_pp > BZ_trip_balls_min) + H.hallucination += 20 + if(prob(33)) + H.adjustBrainLoss(3) + else if(bz_pp > 0.01) + H.hallucination += 5//Removed at 2 per tick so this will slowly build up handle_breath_temperature(breath, H) breath.garbage_collect() @@ -1321,7 +1378,7 @@ if(200 to 260) H.apply_damage(COLD_GAS_DAMAGE_LEVEL_1, BURN, "head") - if(!(RESISTHEAT in specflags)) // HEAT DAMAGE + if(!(RESISTTEMP in specflags)) // HEAT DAMAGE switch(breath.temperature) if(360 to 400) H.apply_damage(HEAT_GAS_DAMAGE_LEVEL_1, BURN, "head") @@ -1356,7 +1413,7 @@ H.bodytemperature += min((1-thermal_protection) * ((loc_temp - H.bodytemperature) / BODYTEMP_HEAT_DIVISOR), BODYTEMP_HEATING_MAX) // +/- 50 degrees from 310.15K is the 'safe' zone, where no damage is dealt. - if(H.bodytemperature > BODYTEMP_HEAT_DAMAGE_LIMIT && !(RESISTHEAT in specflags)) + if(H.bodytemperature > BODYTEMP_HEAT_DAMAGE_LIMIT && !(RESISTTEMP in specflags)) //Body temperature is too hot. switch(H.bodytemperature) if(360 to 400) @@ -1395,7 +1452,7 @@ var/adjusted_pressure = H.calculate_affecting_pressure(pressure) //Returns how much pressure actually affects the mob. switch(adjusted_pressure) if(HAZARD_HIGH_PRESSURE to INFINITY) - if(!(RESISTHEAT in specflags)) + if(!(RESISTTEMP in specflags)) H.adjustBruteLoss( min( ( (adjusted_pressure / HAZARD_HIGH_PRESSURE) -1 )*PRESSURE_DAMAGE_COEFFICIENT , MAX_HIGH_PRESSURE_DAMAGE) ) H.throw_alert("pressure", /obj/screen/alert/highpressure, 2) else @@ -1407,7 +1464,7 @@ if(HAZARD_LOW_PRESSURE to WARNING_LOW_PRESSURE) H.throw_alert("pressure", /obj/screen/alert/lowpressure, 1) else - if(H.dna.check_mutation(COLDRES) || (RESISTCOLD in specflags)) + if(H.dna.check_mutation(COLDRES) || (RESISTTEMP in specflags)) H.clear_alert("pressure") else H.adjustBruteLoss( LOW_PRESSURE_DAMAGE ) @@ -1418,11 +1475,11 @@ ////////// /datum/species/proc/handle_fire(mob/living/carbon/human/H) - if((RESISTHEAT in specflags) || (NOFIRE in specflags)) + if((RESISTTEMP in specflags) || (NOFIRE in specflags)) return 1 /datum/species/proc/IgniteMob(mob/living/carbon/human/H) - if((RESISTHEAT in specflags) || (NOFIRE in specflags)) + if((RESISTTEMP in specflags) || (NOFIRE in specflags)) return 1 /datum/species/proc/ExtinguishMob(mob/living/carbon/human/H) diff --git a/code/modules/mob/living/carbon/human/species_types.dm b/code/modules/mob/living/carbon/human/species_types.dm index 886e0abc115..e0672de9cee 100644 --- a/code/modules/mob/living/carbon/human/species_types.dm +++ b/code/modules/mob/living/carbon/human/species_types.dm @@ -79,6 +79,14 @@ /datum/species/lizard/spec_death(gibbed, mob/living/carbon/human/H) if(H) H.endTailWag() + +/* + Lizard subspecies: ASHWALKERS +*/ +/datum/species/lizard/ashwalker + name = "Ash Walker" + id = "lizard" + specflags = list(MUTCOLORS,EYECOLOR,LIPS,NOBREATH,NOGUNS) /* PODPEOPLE */ @@ -179,10 +187,9 @@ default_color = "00FF90" say_mod = "chirps" eyes = "jelleyes" - specflags = list(MUTCOLORS,EYECOLOR,NOBLOOD,VIRUSIMMUNE) + specflags = list(MUTCOLORS,EYECOLOR,NOBLOOD,VIRUSIMMUNE,NODISMEMBER) meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/slime exotic_blood = "slimejelly" - has_dismemberment = 0 /datum/species/jelly/spec_life(mob/living/carbon/human/H) if(H.stat == DEAD) //can't farm slime jelly from a dead slime/jelly person indefinitely @@ -218,7 +225,7 @@ id = "slime" default_color = "00FFFF" darksight = 3 - specflags = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,NOBLOOD,VIRUSIMMUNE) + specflags = list(MUTCOLORS,EYECOLOR,HAIR,FACEHAIR,NOBLOOD,VIRUSIMMUNE,NODISMEMBER) say_mod = "says" eyes = "eyes" hair_color = "mutcolor" @@ -320,7 +327,7 @@ // Animated beings of stone. They have increased defenses, and do not need to breathe. They're also slow as fuuuck. name = "Golem" id = "golem" - specflags = list(NOBREATH,RESISTHEAT,RESISTCOLD,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE) + specflags = list(NOBREATH,RESISTTEMP,NOGUNS,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NODISMEMBER) speedmod = 2 armor = 55 siemens_coeff = 0 @@ -331,7 +338,6 @@ nojumpsuit = 1 sexes = 0 meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/golem - has_dismemberment = 0 /datum/species/golem/adamantine name = "Adamantine Golem" @@ -408,12 +414,11 @@ name = "Spooky Scary Skeleton" id = "skeleton" say_mod = "rattles" - need_nutrition = 0 blacklisted = 1 sexes = 0 meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/skeleton + specflags = list(NOBREATH,RESISTTEMP,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE,NOHUNGER) mutant_organs = list(/obj/item/organ/tongue/bone) - specflags = list(NOBREATH,RESISTHEAT,RESISTCOLD,NOBLOOD,RADIMMUNE,VIRUSIMMUNE,PIERCEIMMUNE) /* ZOMBIES @@ -427,7 +432,7 @@ sexes = 0 blacklisted = 1 meat = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/zombie - specflags = list(NOBREATH,RESISTHEAT,RESISTCOLD,NOBLOOD,RADIMMUNE) + specflags = list(NOBREATH,RESISTTEMP,NOBLOOD,RADIMMUNE) mutant_organs = list(/obj/item/organ/tongue/zombie) /datum/species/cosmetic_zombie @@ -457,13 +462,12 @@ var/global/image/plasmaman_on_fire = image("icon"='icons/mob/OnFire.dmi', "icon_ say_mod = "rattles" sexes = 0 meat = /obj/item/stack/sheet/mineral/plasma - specflags = list(NOBLOOD,RADIMMUNE,NOTRANSSTING,VIRUSIMMUNE) + specflags = list(NOBLOOD,RADIMMUNE,NOTRANSSTING,VIRUSIMMUNE,NOHUNGER) safe_oxygen_min = 0 //We don't breath this safe_toxins_min = 16 //We breath THIS! safe_toxins_max = 0 dangerous_existence = 1 //So so much blacklisted = 1 //See above - need_nutrition = 0 //Hard to eat through a helmet burnmod = 2 heatmod = 2 speedmod = 1 @@ -511,7 +515,7 @@ var/global/list/synth_flesh_disguises = list() id = "synth" say_mod = "beep boops" //inherited from a user's real species sexes = 0 - specflags = list(NOTRANSSTING,NOBREATH,VIRUSIMMUNE) //all of these + whatever we inherit from the real species + specflags = list(NOTRANSSTING,NOBREATH,VIRUSIMMUNE,NODISMEMBER,NOHUNGER) //all of these + whatever we inherit from the real species safe_oxygen_min = 0 safe_toxins_min = 0 safe_toxins_max = 0 @@ -520,13 +524,11 @@ var/global/list/synth_flesh_disguises = list() SA_sleep_min = 0 dangerous_existence = 1 blacklisted = 1 - need_nutrition = 0 //beep boop robots do not need sustinance meat = null - var/list/initial_specflags = list(NOTRANSSTING,NOBREATH,VIRUSIMMUNE) //for getting these values back for assume_disguise() + var/list/initial_specflags = list(NOTRANSSTING,NOBREATH,VIRUSIMMUNE,NOHUNGER) //for getting these values back for assume_disguise() var/disguise_fail_health = 75 //When their health gets to this level their synthflesh partially falls off var/image/damaged_synth_flesh = null //an image to display when we're below disguise_fail_health var/datum/species/fake_species = null //a species to do most of our work for us, unless we're damaged - has_dismemberment = 0 /datum/species/synth/military name = "Military Synth" @@ -645,7 +647,7 @@ var/global/list/synth_flesh_disguises = list() H.updatehealth() if(H.health > disguise_fail_health) if(fake_species) - if(fake_species.has_dismemberment) + if(!(NODISMEMBER in fake_species.specflags)) return fake_species.handle_body(H) else return fake_species.update_base_icon_state(H) @@ -657,7 +659,7 @@ var/global/list/synth_flesh_disguises = list() /datum/species/synth/update_color(mob/living/carbon/human/H, forced_colour) H.updatehealth() if(H.health > disguise_fail_health) - if(fake_species && fake_species.has_dismemberment) + if(fake_species && !(NODISMEMBER in fake_species.specflags)) fake_species.update_color(H, forced_colour) @@ -708,7 +710,6 @@ SYNDICATE BLACK OPS name = "Corporate Agent" id = "agent" hair_alpha = 0 - need_nutrition = 0//They don't need to eat say_mod = "declares" speedmod = -2//Fast brutemod = 0.7//Tough against firearms @@ -722,6 +723,5 @@ SYNDICATE BLACK OPS attack_sound = "sound/weapons/resonator_blast.ogg" blacklisted = 1 use_skintones = 0 - specflags = list(RADIMMUNE,VIRUSIMMUNE,NOBLOOD,PIERCEIMMUNE,EYECOLOR) + specflags = list(RADIMMUNE,VIRUSIMMUNE,NOBLOOD,PIERCEIMMUNE,EYECOLOR,NODISMEMBER,NOHUNGER) sexes = 0 - has_dismemberment = 0 diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index e4dc7968ec3..d0650f6ae05 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -94,7 +94,7 @@ Please contact me on #coderbus IRC. ~Carnie x ..("Standing") /mob/living/carbon/human/proc/update_body_parts() - if(!dna.species.has_dismemberment) //Species don't have no dismemberment going for 'em! + if(NODISMEMBER in dna.species.specflags) //Species don't have no dismemberment going for 'em! remove_overlay(BODYPARTS_LAYER) return diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index b0024940eca..1d02be1edb9 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -115,7 +115,7 @@ var/breath_pressure = (breath.total_moles()*R_IDEAL_GAS_EQUATION*breath.temperature)/BREATH_VOLUME var/list/breath_gases = breath.gases - breath.assert_gases("o2","plasma","co2","n2o") + breath.assert_gases("o2","plasma","co2","n2o", "bz") var/O2_partialpressure = (breath_gases["o2"][MOLES]/breath.total_moles())*breath_pressure var/Toxins_partialpressure = (breath_gases["plasma"][MOLES]/breath.total_moles())*breath_pressure @@ -180,6 +180,15 @@ else if(SA_partialpressure > 0.01) if(prob(20)) emote(pick("giggle","laugh")) + + //BZ (Facepunch port of their Agent B) + if(breath_gases["bz"]) + var/bz_partialpressure = (breath_gases["bz"][MOLES]/breath.total_moles())*breath_pressure + if(bz_partialpressure > 1) + hallucination += 20 + else if(bz_partialpressure > 0.01) + hallucination += 5//Removed at 2 per tick so this will slowly build up + breath.garbage_collect() //BREATH TEMPERATURE diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index be0c8d59bc5..655b939cc99 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -998,4 +998,19 @@ Sorry Giacom. Please don't be mad :( /mob/living/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0) stop_pulling() - . = ..() \ No newline at end of file + . = ..() + +// Called when we are hit by a bolt of polymorph and changed +// Generally the mob we are currently in, is about to be deleted +/mob/living/proc/wabbajack_act(mob/living/new_mob) + if(mind) + mind.transfer_to(new_mob) + else + new_mob.key = key + + for(var/para in hasparasites()) + var/mob/living/simple_animal/hostile/guardian/G = para + G.summoner = new_mob + G.Recall() + G << "Your summoner has changed \ + form to [new_mob]!" diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 616609b01a9..8cb1c7c4a49 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -170,6 +170,40 @@ //Mobs on Fire end +/mob/living/proc/dominate_mind(mob/living/target, duration = 100, silent) //Allows one mob to assume control of another while imprisoning the old consciousness for a time + if(!target) + return 0 + if(target.mental_dominator) + src << "[target] is already being controlled by someone else!" + return 0 + if(!target.mind) + src << "[target] is mindless and would make you permanently catatonic!" + return 0 + if(!silent) + src << "You pounce upon [target]'s mind and seize control of their body!" + target << "Your control over your body is wrenched away from you!" + target.mind_control_holder = new/mob/living/mind_control_holder(target) + target.mind_control_holder.real_name = "imprisoned mind of [target.real_name]" + target.mind.transfer_to(target.mind_control_holder) + mind.transfer_to(target) + target.mental_dominator = src + spawn(duration) + if(!src) + if(!silent) + target << "You try to return to your own body, but sense nothing! You're being forced out!" + target.ghostize(1) + target.mind_control_holder.mind.transfer_to(target) + if(!silent) + target << "You take control of your own body again!" + return 0 + if(!silent) + target << "You're forced out! You return to your own body." + target.mind.transfer_to(src) + target.mind_control_holder.mind.transfer_to(target) + qdel(mind_control_holder) + if(!silent) + target << "You take control of your own body again!" + return 1 /mob/living/acid_act(acidpwr, toxpwr, acid_volume) take_organ_damage(min(10*toxpwr, acid_volume * toxpwr)) @@ -323,3 +357,17 @@ return 1 //Looking for irradiate()? It's been moved to radiation.dm under the rad_act() for mobs. + +/mob/living/Stun(amount) + if(stun_absorption && !stat) + visible_message("[src]'s yellow aura momentarily intensifies!", "Your ward absorbs the stun!") + stun_absorption_count += amount + return 0 + ..() + +/mob/living/Weaken(amount) + if(stun_absorption && !stat) + visible_message("[src]'s yellow aura momentarily intensifies!", "Your ward absorbs the stun!") + stun_absorption_count += amount + return 0 + ..() diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 8e03705663e..400503818f9 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -61,3 +61,10 @@ var/list/butcher_results = null var/hellbound = 0 //People who've signed infernal contracts are unrevivable. + var/list/weather_immunities = list() + + var/stun_absorption = FALSE //If all incoming stuns are being absorbed + var/stun_absorption_count = 0 //How many seconds of stun that have been absorbed + + var/mob/living/mental_dominator //The person controlling the mind of this person, if applicable + var/mob/living/mind_control_holder/mind_control_holder //If the mob is being mind controlled, where their old mind is stored (check clock_mobs.dm) diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index e90b7cb8188..8ac3547f12b 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -39,21 +39,21 @@ var/list/department_radio_keys = list( //kinda localization -- rastaf0 //same keys as above, but on russian keyboard layout. This file uses cp1251 as encoding. - ":" = "right hand", "#" = "right hand", "." = "right hand", - ":" = "left hand", "#" = "left hand", "." = "left hand", - ":" = "intercom", "#" = "intercom", "." = "intercom", - ":" = "department", "#" = "department", "." = "department", - ":" = "Command", "#" = "Command", "." = "Command", - ":" = "Science", "#" = "Science", "." = "Science", - ":" = "Medical", "#" = "Medical", "." = "Medical", - ":" = "Engineering", "#" = "Engineering", "." = "Engineering", - ":" = "Security", "#" = "Security", "." = "Security", - ":" = "whisper", "#" = "whisper", "." = "whisper", - ":" = "binary", "#" = "binary", "." = "binary", - ":" = "alientalk", "#" = "alientalk", "." = "alientalk", - ":" = "Syndicate", "#" = "Syndicate", "." = "Syndicate", - ":" = "Supply", "#" = "Supply", "." = "Supply", - ":" = "changeling", "#" = "changeling", "." = "changeling" + ":ê" = "right hand", "#ê" = "right hand", ".ê" = "right hand", + ":ä" = "left hand", "#ä" = "left hand", ".ä" = "left hand", + ":ø" = "intercom", "#ø" = "intercom", ".ø" = "intercom", + ":ð" = "department", "#ð" = "department", ".ð" = "department", + ":ñ" = "Command", "#ñ" = "Command", ".ñ" = "Command", + ":ò" = "Science", "#ò" = "Science", ".ò" = "Science", + ":ü" = "Medical", "#ü" = "Medical", ".ü" = "Medical", + ":ó" = "Engineering", "#ó" = "Engineering", ".ó" = "Engineering", + ":û" = "Security", "#û" = "Security", ".û" = "Security", + ":ö" = "whisper", "#ö" = "whisper", ".ö" = "whisper", + ":è" = "binary", "#è" = "binary", ".è" = "binary", + ":ô" = "alientalk", "#ô" = "alientalk", ".ô" = "alientalk", + ":å" = "Syndicate", "#å" = "Syndicate", ".å" = "Syndicate", + ":é" = "Supply", "#é" = "Supply", ".é" = "Supply", + ":ï" = "changeling", "#ï" = "changeling", ".ï" = "changeling" ) var/list/crit_allowed_modes = list(MODE_WHISPER,MODE_CHANGELING,MODE_ALIEN) @@ -205,6 +205,21 @@ var/list/crit_allowed_modes = list(MODE_WHISPER,MODE_CHANGELING,MODE_ALIEN) /mob/living/proc/handle_inherent_channels(message, message_mode) if(message_mode == MODE_CHANGELING) switch(lingcheck()) + if(3) + var/msg = "[src.mind]: [message]" + for(var/mob/M in mob_list) + if(M in dead_mob_list) + M << "(F) [msg]" + else + switch(M.lingcheck()) + if(3) + M << msg + if(2) + M << msg + if(1) + if(prob(40)) + M << "We can faintly sense an outsider trying to communicate through the hivemind..." + return 1 if(2) var/msg = "[mind.changeling.changelingID]: [message]" log_say("[mind.changeling.changelingID]/[src.key] : [message]") @@ -213,6 +228,8 @@ var/list/crit_allowed_modes = list(MODE_WHISPER,MODE_CHANGELING,MODE_ALIEN) M << "(F) [msg]" else switch(M.lingcheck()) + if(3) + M << msg if(2) M << msg if(1) @@ -272,11 +289,13 @@ var/list/crit_allowed_modes = list(MODE_WHISPER,MODE_CHANGELING,MODE_ALIEN) return NOPASS return 0 -/mob/living/lingcheck() //Returns 1 if they are a changeling. Returns 2 if they are a changeling that can communicate through the hivemind +/mob/living/lingcheck() //1 is ling w/ no hivemind. 2 is ling w/hivemind. 3 is ling victim being linked into hivemind. if(mind && mind.changeling) if(mind.changeling.changeling_speak) return 2 return 1 + if(mind && mind.linglink) + return 3 return 0 /mob/living/say_quote(input, list/spans) @@ -285,4 +304,4 @@ var/list/crit_allowed_modes = list(MODE_WHISPER,MODE_CHANGELING,MODE_ALIEN) return "stammers, \"[tempinput]\"" if (getBrainLoss() >= 60) return "gibbers, \"[tempinput]\"" - return ..() \ No newline at end of file + return ..() diff --git a/code/modules/mob/living/silicon/ai/say.dm b/code/modules/mob/living/silicon/ai/say.dm index d2016caaf76..e9854777e3e 100644 --- a/code/modules/mob/living/silicon/ai/say.dm +++ b/code/modules/mob/living/silicon/ai/say.dm @@ -157,7 +157,7 @@ var/const/VOX_DELAY = 600 if(!only_listener) // Play voice for all mobs in the z level for(var/mob/M in player_list) - if(M.client && !M.ear_deaf && !(M.client.prefs.toggles & SOUND_ANNOUNCEMENTS)) + if(M.client && !M.ear_deaf && (M.client.prefs.toggles & SOUND_ANNOUNCEMENTS)) var/turf/T = get_turf(M) if(T.z == z_level) M << voice diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm index c7a996f54f4..21e770b8e64 100644 --- a/code/modules/mob/living/silicon/pai/software.dm +++ b/code/modules/mob/living/silicon/pai/software.dm @@ -536,7 +536,7 @@ if (total_moles) for(var/id in env_gases) var/gas_level = env_gases[id][MOLES]/total_moles - if(id in hardcoded_gases || gas_level > 0.01) + if(gas_level > 0.01) dat += "[env_gases[id][GAS_META][META_GAS_NAME]]: [round(gas_level*100)]%
" dat += "Temperature: [round(environment.temperature-T0C)]°C
" dat += "Refresh Reading
" diff --git a/code/modules/mob/living/silicon/robot/examine.dm b/code/modules/mob/living/silicon/robot/examine.dm index fc82775ddce..81e0365ba06 100644 --- a/code/modules/mob/living/silicon/robot/examine.dm +++ b/code/modules/mob/living/silicon/robot/examine.dm @@ -33,6 +33,9 @@ if(cell && cell.charge <= 0) msg += "Its battery indicator is blinking red!\n" + if(is_servant_of_ratvar(src) && user.Adjacent(src) && !stat) //To counter pseudo-stealth by using headlamps + msg += "Its eyes are glowing a blazing yellow!\n" + switch(src.stat) if(CONSCIOUS) if(!src.client) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 3197f34bbd2..b035b59d825 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -167,6 +167,8 @@ return var/list/modulelist = list("Standard", "Engineering", "Medical", "Miner", "Janitor","Service") + if(!config.forbid_peaceborg) + modulelist += "Peacekeeper" if(!config.forbid_secborg) modulelist += "Security" @@ -235,6 +237,16 @@ status_flags &= ~CANPUSH feedback_inc("cyborg_security",1) + if("Peacekeeper") //Secborg sprites untill someone gives me some to update with + module = new /obj/item/weapon/robot_module/peacekeeper(src) + hands.icon_state = "standard" + icon_state = "peaceborg" + animation_length = 54 + modtype = "Peace" + src << "Under ASIMOV, you are an enforcer of the PEACE and preventer of HUMAN HARM. You are not a security module and you are expected to follow orders and prevent harm above all else. Space law means nothing to you." + status_flags &= ~CANPUSH + feedback_inc("cyborg_peacekeeper",1) //I'm assuming this is for logging. + if("Engineering") module = new /obj/item/weapon/robot_module/engineering(src) hands.icon_state = "engineer" @@ -555,7 +567,10 @@ if(emagged || (connected_ai && lawupdate)) //Can't be sure which, metagamers emote("buzz-[user.name]") return - MOD.install(src, user) //Proc includes a success mesage so we don't need another one + if(!mind) //A player mind is required for law procs to run antag checks. + user << "[src] is entirely unresponsive!" + return + MOD.install(laws, user) //Proc includes a success mesage so we don't need another one return else if(istype(W, /obj/item/device/encryptionkey/) && opened) @@ -799,21 +814,21 @@ var/state_name = icon_state //For easy conversion and/or different names switch(icon_state) if("robot") - overlays += "eyes-standard" + overlays += "eyes-standard[is_servant_of_ratvar(src) ? "_r" : ""]" //Cyborgs converted by Ratvar have yellow eyes rather than blue state_name = "standard" if("mediborg") - overlays += "eyes-mediborg" + overlays += "eyes-mediborg[is_servant_of_ratvar(src) ? "_r" : ""]" if("toiletbot") - overlays += "eyes-mediborg" + overlays += "eyes-mediborg[is_servant_of_ratvar(src) ? "_r" : ""]" state_name = "mediborg" if("secborg") - overlays += "eyes-secborg" + overlays += "eyes-secborg[is_servant_of_ratvar(src) ? "_r" : ""]" if("engiborg") - overlays += "eyes-engiborg" + overlays += "eyes-engiborg[is_servant_of_ratvar(src) ? "_r" : ""]" if("janiborg") - overlays += "eyes-janiborg" + overlays += "eyes-janiborg[is_servant_of_ratvar(src) ? "_r" : ""]" if("minerborg") - overlays += "eyes-minerborg" + overlays += "eyes-minerborg[is_servant_of_ratvar(src) ? "_r" : ""]" if("syndie_bloodhound") overlays += "eyes-syndie_bloodhound" else diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 0f4ecdb8946..cfb56c69017 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -131,6 +131,7 @@ modules += new /obj/item/weapon/crowbar/cyborg(src) modules += new /obj/item/device/healthanalyzer(src) modules += new /obj/item/toy/crayon/spraycan/borg(src) + modules += new /obj/item/borg/cyborghug(src) emag = new /obj/item/weapon/melee/energy/sword/cyborg(src) fix_modules() @@ -155,6 +156,7 @@ modules += new /obj/item/weapon/circular_saw(src) modules += new /obj/item/weapon/extinguisher/mini(src) modules += new /obj/item/roller/robo(src) + modules += new /obj/item/borg/cyborghug(src) add_module(new /obj/item/stack/medical/gauze/cyborg()) @@ -219,6 +221,32 @@ else T.charge_tick = 0 +/obj/item/weapon/robot_module/peacekeeper + name = "peacekeeper robot module" + +/obj/item/weapon/robot_module/peacekeeper/New() + ..() + modules += new /obj/item/weapon/gun/energy/gun/dragnet/snare/cyborg(src) + modules += new /obj/item/weapon/cookiesynth(src) + modules += new /obj/item/device/harmalarm(src) + modules += new /obj/item/weapon/reagent_containers/borghypo/peace(src) + modules += new /obj/item/weapon/holosign_creator/cyborg(src) + modules += new /obj/item/borg/cyborghug(src) + modules += new /obj/item/weapon/extinguisher(src) + + emag = new /obj/item/weapon/reagent_containers/borghypo/peace/hacked(src) + +/obj/item/weapon/robot_module/peacekeeper/respawn_consumable(mob/living/silicon/robot/R, coeff = 1) + ..() + var/obj/item/weapon/gun/energy/gun/dragnet/snare/cyborg/T = locate(/obj/item/weapon/gun/energy/gun/dragnet/snare/cyborg) in get_usable_modules() + if(T) + if(T.power_supply.charge < T.power_supply.maxcharge) + var/obj/item/ammo_casing/energy/S = T.ammo_type[T.select] + T.power_supply.give(S.e_cost * coeff) + T.update_icon() + else + T.charge_tick = 0 + /obj/item/weapon/robot_module/janitor name = "janitorial robot module" var/obj/item/weapon/reagent_containers/spray/drying_agent @@ -294,7 +322,7 @@ modules += new /obj/item/weapon/shovel(src) modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src) modules += new /obj/item/device/t_scanner/adv_mining_scanner(src) - modules += new /obj/item/weapon/gun/energy/kinetic_accelerator(src) + modules += new /obj/item/weapon/gun/energy/kinetic_accelerator/cyborg(src) fix_modules() /obj/item/weapon/robot_module/syndicate @@ -372,4 +400,4 @@ /datum/robot_energy_storage/medical max_energy = 2500 recharge_rate = 250 - name = "Medical Synthesizer" + name = "Medical Synthesizer" \ No newline at end of file diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index b5b4f308444..3148c0b72f4 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -489,3 +489,5 @@ animate(src, transform = ntransform, time = 2,easing = EASE_IN|EASE_OUT) return ..() +/mob/living/silicon/is_literate() + return 1 diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index b94d3db30a2..4cbd52fc410 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -61,6 +61,7 @@ var/new_destination // pending new destination (waiting for beacon response) var/destination // destination description tag var/next_destination // the next destination in the patrol route + var/shuffle = FALSE // If we should shuffle our adjacency checking var/blockcount = 0 //number of times retried a blocked path var/awaiting_beacon = 0 // count of pticks awaiting a beacon response @@ -144,6 +145,9 @@ qdel(bot_core) return ..() +/mob/living/simple_animal/bot/bee_friendly() + return 1 + /mob/living/simple_animal/bot/death(gibbed) explode() ..() @@ -375,11 +379,22 @@ Pass the desired type path itself, declaring a temporary var beforehand is not r if(!T) return var/list/adjacent = T.GetAtmosAdjacentTurfs(1) + if(shuffle) //If we were on the same tile as another bot, let's randomize our choices so we dont both go the same way + adjacent = shuffle(adjacent) + shuffle = FALSE for(var/scan in adjacent)//Let's see if there's something right next to us first! - var/final_result = checkscan(scan,scan_type,old_target) - if(final_result) - return final_result - + if(check_bot(scan)) //Is there another bot there? Then let's just skip it + continue + if(isturf(scan_type)) //If we're lookeing for a turf we can just run the checks directly! + var/final_result = checkscan(scan,scan_type,old_target) + if(final_result) + return final_result + else + var/turf/turfy = scan + for(var/deepscan in turfy.contents)//Check the contents since adjacent is turfs + var/final_result = checkscan(deepscan,scan_type,old_target) + if(final_result) + return final_result for (var/scan in shuffle(view(scan_range, src))-adjacent) //Search for something in range! var/final_result = checkscan(scan,scan_type,old_target) if(final_result) @@ -390,11 +405,7 @@ Pass the desired type path itself, declaring a temporary var beforehand is not r return 0 //If not, keep searching! if( (scan in ignore_list) || (scan == old_target) ) //Filter for blacklisted elements, usually unreachable or previously processed oness return 0 - var/turf/T = get_turf(scan) - if(T) - for(var/C in T.contents) - if(istype(C,src.type) && (C != src)) //Is there another bot there already? If so, let's skip it so we dont all atack on top of eachother. - return 0 + var/scan_result = process_scan(scan) //Some bots may require additional processing when a result is selected. if(scan_result) return scan_result @@ -402,6 +413,12 @@ Pass the desired type path itself, declaring a temporary var beforehand is not r return 0 //The current element failed assessment, move on to the next. return +/mob/living/simple_animal/bot/proc/check_bot(targ) + var/turf/T = get_turf(targ) + if(T) + for(var/C in T.contents) + if(istype(C,type) && (C != src)) //Is there another bot there already? If so, let's skip it so we dont all atack on top of eachother. + return 1 //Let's abort if we find a bot so we dont have to keep rechecking //When the scan finds a target, run bot specific processing to select it for the next step. Empty by default. /mob/living/simple_animal/bot/proc/process_scan(scan_target) diff --git a/code/modules/mob/living/simple_animal/bot/cleanbot.dm b/code/modules/mob/living/simple_animal/bot/cleanbot.dm index 5c00a4fc3bf..934e5571d8a 100644 --- a/code/modules/mob/living/simple_animal/bot/cleanbot.dm +++ b/code/modules/mob/living/simple_animal/bot/cleanbot.dm @@ -104,8 +104,8 @@ victim.acid_act(5, 2, 100) if(prob(10)) //Wets floors randomly - var/turf/open/T = loc - T.MakeSlippery() + var/turf/open/OT = get_turf(loc) + OT.MakeSlippery(min_wet_time = 5, wet_time_to_add = 1) if(prob(5)) //Spawns foam! visible_message("[src] whirs and bubbles violently, before releasing a plume of froth!") @@ -140,7 +140,10 @@ return if(target && loc == target.loc) - clean(target) + if(!(check_bot(target) && prob(50))) //Target is not defined at the parent. 50% chance to still try and clean so we dont get stuck on the last blood drop. + clean(target) //Rather than check at every step of the way, let's check before we do an action, so we can rescan before the other bot. + else + shuffle = TRUE //Shuffle the list the next time we scan so we dont both go the same way. path = list() target = null diff --git a/code/modules/mob/living/simple_animal/bot/floorbot.dm b/code/modules/mob/living/simple_animal/bot/floorbot.dm index 8ba86a9b2d7..8956f7872a6 100644 --- a/code/modules/mob/living/simple_animal/bot/floorbot.dm +++ b/code/modules/mob/living/simple_animal/bot/floorbot.dm @@ -81,7 +81,7 @@ dat += "Loaded \[[specialtiles]/[maxtiles]\]
" else dat += "None Loaded
" - + dat += "Behaviour controls are [locked ? "locked" : "unlocked"]
" if(!locked || issilicon(user) || IsAdminGhost(user)) dat += "Add tiles to new hull plating: [autotile ? "Yes" : "No"]
" @@ -162,7 +162,7 @@ if("disable") targetdirection = null update_controls() - + /mob/living/simple_animal/bot/floorbot/proc/empty_tiles() var/turf/Tsec = get_turf(src) @@ -204,7 +204,7 @@ if(!target && fixfloors) //Repairs damaged floors and tiles. process_type = FIX_TILE target = scan(/turf/open/floor) - + if(!target && replacetiles && specialtiles > 0) //Replace a floor tile with custom tile process_type = REPLACE_TILE //The target must be a tile. The floor must already have a floortile. target = scan(/turf/open/floor) @@ -242,6 +242,12 @@ return if(loc == target || loc == target.loc) + if(check_bot(target)) //Target is not defined at the parent + shuffle = TRUE + if(prob(50)) //50% chance to still try to repair so we dont end up with 2 floorbots failing to fix the last breach + target = null + path = list() + return if(istype(target, /turf/) && emagged < 2) repair(target) else if(emagged == 2 && istype(target,/turf/open/floor)) diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index f1d0ececa64..dc7013eb84b 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -26,6 +26,7 @@ AIStatus = AI_OFF //normal constructs don't have AI loot = list(/obj/item/weapon/ectoplasm) del_on_death = 1 + deathmessage = "collapses in a shattered heap." var/list/construct_spells = list() var/playstyle_string = "You are a generic construct! Your job is to not exist, and you should probably adminhelp this." @@ -35,10 +36,6 @@ for(var/spell in construct_spells) AddSpell(new spell(null)) -/mob/living/simple_animal/hostile/construct/death() - deathmessage = "[src] collapses in a shattered heap." - ..() - /mob/living/simple_animal/hostile/construct/examine(mob/user) var/msg = "*---------*\nThis is \icon[src] \a [src]!\n" if (src.health < src.maxHealth) diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index 0aef48fdc9f..cdedc564910 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -114,13 +114,14 @@ /mob/living/simple_animal/pet/cat/Runtime/proc/Write_Memory(dead) var/savefile/S = new /savefile("data/npc_saves/Runtime.sav") family = list() - for(var/mob/living/simple_animal/pet/cat/C in mob_list) - if(istype(C,type) || C.stat || !C.z || !C.butcher_results) //That last one is a work around for hologram cats - continue - if(C.type in family) - family[C.type] += 1 - else - family[C.type] = 1 + if(!dead) + for(var/mob/living/simple_animal/pet/cat/C in mob_list) + if(istype(C,type) || C.stat || !C.z || !C.butcher_results) //That last one is a work around for hologram cats + continue + if(C.type in family) + family[C.type] += 1 + else + family[C.type] = 1 S["family"] << family memory_saved = 1 diff --git a/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm b/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm index 0fcb8b953e8..f651188ee5a 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/interaction.dm @@ -155,6 +155,13 @@ update_drone_icon() updateSeeStaticMobs() +/mob/living/simple_animal/drone/proc/liberate() + // F R E E D R O N E + laws = "1. You are a Free Drone." + src << laws + seeStatic = FALSE + updateSeeStaticMobs() + /mob/living/simple_animal/drone/proc/update_drone_icon() //Different icons for different hack states if(!hacked) 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 e373e0f4873..94dd02f7501 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -126,17 +126,27 @@ /mob/living/simple_animal/cow/attack_hand(mob/living/carbon/M) if(!stat && M.a_intent == "disarm" && icon_state != icon_dead) - M.visible_message("[M] tips over [src].","You tip over [src].") + M.visible_message("[M] tips over [src].", + "You tip over [src].") + src << "You are tipped over by [M]!" Weaken(30) icon_state = icon_dead spawn(rand(20,50)) if(!stat && M) icon_state = icon_living - var/list/responses = list( "[src] looks at you imploringly.", - "[src] looks at you pleadingly", - "[src] looks at you with a resigned expression.", - "[src] seems resigned to its fate.") - M << pick(responses) + var/external + var/internal + switch(pick(1,2,3,4)) + if(1,2,3) + var/text = pick("imploringly.", "pleadingly.", + "with a resigned expression.") + external = "[src] looks at [M] [text]" + internal = "You look at [M] [text]" + if(4) + external = "[src] seems resigned to its fate." + internal = "You resign yourself to your fate." + visible_message("[external]", + "[internal]") else ..() @@ -304,4 +314,4 @@ var/global/chicken_count = 0 /obj/item/udder/Destroy() qdel(reagents) - return ..() \ No newline at end of file + return ..() diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm index 546e4b3a4e2..f7c69dbf8f5 100644 --- a/code/modules/mob/living/simple_animal/guardian/guardian.dm +++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm @@ -381,7 +381,7 @@ var/global/list/parasites = list() //all currently existing/living guardians var/list/possible_guardians = list("Chaos", "Standard", "Ranged", "Support", "Explosive", "Lightning", "Protector", "Charger", "Assassin") var/random = TRUE var/allowmultiple = 0 - var/allowling = 0 + var/allowling = 1 /obj/item/weapon/guardiancreator/attack_self(mob/living/user) var/list/guardians = user.hasparasites() diff --git a/code/modules/mob/living/simple_animal/guardian/types/ranged.dm b/code/modules/mob/living/simple_animal/guardian/types/ranged.dm index 3e5756baa6a..a1d618a632b 100644 --- a/code/modules/mob/living/simple_animal/guardian/types/ranged.dm +++ b/code/modules/mob/living/simple_animal/guardian/types/ranged.dm @@ -73,7 +73,7 @@ set desc = "Set an invisible snare that will alert you when living creatures walk over it. Max of 5" if(src.snares.len <6) var/turf/snare_loc = get_turf(src.loc) - var/obj/item/effect/snare/S = new /obj/item/effect/snare(snare_loc) + var/obj/effect/snare/S = new /obj/effect/snare(snare_loc) S.spawner = src S.name = "[get_area(snare_loc)] snare ([rand(1, 1000)])" src.snares |= S @@ -91,14 +91,14 @@ qdel(picked_snare) src << "Snare disarmed." -/obj/item/effect/snare +/obj/effect/snare name = "snare" desc = "You shouldn't be seeing this!" var/mob/living/simple_animal/hostile/guardian/spawner invisibility = INVISIBILITY_ABSTRACT -/obj/item/effect/snare/Crossed(AM as mob|obj) +/obj/effect/snare/Crossed(AM as mob|obj) if(isliving(AM) && spawner && spawner.summoner && AM != spawner && !spawner.hasmatchingsummoner(AM)) spawner.summoner << "[AM] has crossed surveillance snare, [name]." var/list/guardians = spawner.summoner.hasparasites() diff --git a/code/modules/mob/living/simple_animal/hostile/bees.dm b/code/modules/mob/living/simple_animal/hostile/bees.dm index 3918348a595..249bf3bbe36 100644 --- a/code/modules/mob/living/simple_animal/hostile/bees.dm +++ b/code/modules/mob/living/simple_animal/hostile/bees.dm @@ -12,7 +12,7 @@ /mob/living/simple_animal/hostile/poison/bees name = "bee" - desc = "buzzy buzzy bee, stingy sti- Ouch!" + desc = "Buzzy buzzy bee, stingy sti- Ouch!" icon_state = "" icon_living = "" icon = 'icons/mob/bees.dmi' @@ -114,8 +114,8 @@ . = ..() if(!.) return 0 - if(ishuman(the_target)) - var/mob/living/carbon/human/H = the_target + if(isliving(the_target)) + var/mob/living/H = the_target return !H.bee_friendly() @@ -125,8 +125,8 @@ if(Hydro.myseed && !Hydro.dead && !Hydro.recent_bee_visit) wanted_objects |= /obj/machinery/hydroponics //so we only hunt them while they're alive/seeded/not visisted return 1 - if(ishuman(A)) - var/mob/living/carbon/human/H = A + if(isliving(A)) + var/mob/living/H = A return !H.bee_friendly() return 0 @@ -208,7 +208,7 @@ /mob/living/simple_animal/hostile/poison/bees/queen name = "queen bee" - desc = "she's the queen of bees, BZZ BZZ" + desc = "She's the queen of bees, BZZ BZZ!" icon_base = "queen" isqueen = TRUE @@ -242,7 +242,7 @@ /obj/item/queen_bee name = "queen bee" - desc = "she's the queen of bees, BZZ BZZ" + desc = "She's the queen of bees, BZZ BZZ!" icon_state = "queen_item" item_state = "" icon = 'icons/mob/bees.dmi' diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 05cba60418c..c2ef4c9f42b 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -63,8 +63,10 @@ AIStatus = AI_IDLE // otherwise we go idle return 1 - - +/mob/living/simple_animal/hostile/bullet_act(obj/item/projectile/P) + if(!target && AIStatus != AI_OFF && !client) + Goto(P.starting, move_to_delay, 3) + ..() //////////////HOSTILE MOB TARGETTING AND AGGRESSION//////////// @@ -295,7 +297,7 @@ P.firer = src P.yo = targeted_atom.y - startloc.y P.xo = targeted_atom.x - startloc.x - if(AIStatus == AI_OFF)//Don't want mindless mobs to have their movement screwed up firing in space + if(AIStatus != AI_ON)//Don't want mindless mobs to have their movement screwed up firing in space newtonian_move(get_dir(targeted_atom, targets_from)) P.original = targeted_atom P.fire() @@ -354,4 +356,4 @@ . = 0 /mob/living/simple_animal/hostile/proc/AIShouldSleep(var/list/possible_targets) - return !FindTarget(possible_targets, 1) \ No newline at end of file + return !FindTarget(possible_targets, 1) diff --git a/code/modules/mob/living/simple_animal/hostile/illusion.dm b/code/modules/mob/living/simple_animal/hostile/illusion.dm index c0474b51e44..3bc8f6593e9 100644 --- a/code/modules/mob/living/simple_animal/hostile/illusion.dm +++ b/code/modules/mob/living/simple_animal/hostile/illusion.dm @@ -17,6 +17,7 @@ var/mob/living/parent_mob var/multiply_chance = 0 //if we multiply on hit del_on_death = 1 + deathmessage = "vanishes into thin air! It was a fake!" /mob/living/simple_animal/hostile/illusion/Life() @@ -38,11 +39,6 @@ pixel_y = initial(pixel_y) pixel_x = initial(pixel_x) - -/mob/living/simple_animal/hostile/illusion/New() - ..() - deathmessage = "[src] vanishes into thin air! It was a fake!" - /mob/living/simple_animal/hostile/illusion/examine(mob/user) if(parent_mob) parent_mob.examine(user) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm index 652bea72c7c..6e5d69f172c 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon.dm @@ -11,6 +11,7 @@ friendly = "stares down" icon = 'icons/mob/lavaland/dragon.dmi' faction = list("mining") + weather_immunities = list("lava","ash") speak_emote = list("roars") luminosity = 3 armour_penetration = 40 @@ -30,7 +31,7 @@ var/obj/item/device/gps/internal var/swooping = 0 var/swoop_cooldown = 0 - deathmessage = "collapes into a pile of bones, it's flesh sloughing away." + deathmessage = "collapses into a pile of bones, its flesh sloughing away." death_sound = 'sound/magic/demon_dies.ogg' damage_coeff = list(BRUTE = 1, BURN = 0.5, TOX = 1, CLONE = 1, STAMINA = 0, OXY = 1) @@ -38,6 +39,15 @@ ..() internal = new/obj/item/device/gps/internal/dragon(src) +/mob/living/simple_animal/hostile/megafauna/dragon/Destroy() + qdel(internal) + . = ..() + +/mob/living/simple_animal/hostile/megafauna/dragon/adjustHealth(amount) + if(swooping) + return 0 + return ..() + /mob/living/simple_animal/hostile/megafauna/dragon/AttackingTarget() if(swooping) return @@ -46,10 +56,11 @@ if(isliving(target)) var/mob/living/L = target if(L.stat == DEAD) - L.gib() - visible_message("[src] devours [L]!") - src << "You feast on [L], restoring your health!" + usr.visible_message( + "[src] devours [L]!", + "You feast on [L], restoring your health!") adjustBruteLoss(-L.maxHealth) + L.gib() /mob/living/simple_animal/hostile/megafauna/dragon/Process_Spacemove(movement_dir = 0) return 1 @@ -148,6 +159,7 @@ /mob/living/simple_animal/hostile/megafauna/dragon/proc/swoop_attack(fire_rain = 0, atom/movable/manual_target) if(stat) return + swoop_cooldown = world.time + 200 var/swoop_target if(manual_target) swoop_target = manual_target @@ -155,6 +167,7 @@ swoop_target = target stop_automated_movement = TRUE swooping = 1 + density = 0 icon_state = "swoop" visible_message("[src] swoops up high!") if(prob(50)) @@ -172,7 +185,7 @@ tturf = get_turf(swoop_target) else tturf = get_turf(src) - src.loc = tturf + forceMove(tturf) new/obj/effect/overlay/temp/dragon_swoop(tturf) animate(src, pixel_x = 0, pixel_z = 0, time = 10) sleep(10) @@ -194,10 +207,6 @@ stop_automated_movement = FALSE swooping = 0 density = 1 - swoop_cooldown = world.time + 200 - - - /mob/living/simple_animal/hostile/megafauna/dragon/AltClickOn(atom/movable/A) if(!istype(A)) @@ -231,6 +240,14 @@ attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "rended") var/summon_cooldown = 0 +/obj/item/weapon/melee/ghost_sword/New() + ..() + SSobj.processing += src + +/obj/item/weapon/melee/ghost_sword/Destroy() + SSobj.processing -= src + . = ..() + /obj/item/weapon/melee/ghost_sword/attack_self(mob/user) if(summon_cooldown > world.time) user << "You just recently called out for aid. You don't want to annoy the spirits." @@ -239,6 +256,9 @@ notify_ghosts("[user] is raising their [src], calling for your help!", source = user) summon_cooldown = world.time + 600 +/obj/item/weapon/melee/ghost_sword/process() + ghost_check() + /obj/item/weapon/melee/ghost_sword/proc/ghost_check(mob/user) var/ghost_counter = 0 for(var/mob/dead/observer/G in dead_mob_list) @@ -246,7 +266,8 @@ ghost_counter++ G.invisibility = 0 spawn(30) - G.invisibility = initial(G.invisibility) + if(G.orbiting != user) + G.invisibility = initial(G.invisibility) return ghost_counter /obj/item/weapon/melee/ghost_sword/attack(mob/living/target, mob/living/carbon/human/user) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm index 8a846d02623..f9ff4a3762d 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm @@ -6,12 +6,13 @@ a_intent = "harm" sentience_type = SENTIENCE_BOSS environment_smash = 4 + weather_immunities = list("lava","ash") robust_searching = 1 stat_attack = 1 atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 maxbodytemp = INFINITY - layer = 6 //Looks weird with them slipping under mineral walls and cameras and shit otherwise + layer = MOB_LAYER + 0.5 //Looks weird with them slipping under mineral walls and cameras and shit otherwise /mob/living/simple_animal/hostile/megafauna/death(gibbed) if(health > 0) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm index 1c02ede80f9..2cbaff85393 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs.dm @@ -2,6 +2,7 @@ vision_range = 2 atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) faction = list("mining") + weather_immunities = list("lava","ash") environment_smash = 2 minbodytemp = 0 maxbodytemp = INFINITY @@ -126,6 +127,7 @@ a_intent = "help" speak_emote = list("screeches") throw_message = "sinks in slowly, before being pushed out of " + deathmessage = "spits up the contents of its stomach before dying!" status_flags = CANPUSH search_objects = 1 wanted_objects = list(/obj/item/weapon/ore/diamond, /obj/item/weapon/ore/gold, /obj/item/weapon/ore/silver, @@ -136,7 +138,6 @@ /mob/living/simple_animal/hostile/asteroid/goldgrub/New() ..() - deathmessage = "[src] spits up the contents of its stomach before dying!" var/i = rand(1,3) while(i) loot += pick(/obj/item/weapon/ore/silver, /obj/item/weapon/ore/gold, /obj/item/weapon/ore/uranium, /obj/item/weapon/ore/diamond) @@ -248,10 +249,15 @@ ..() spawn(2400) if(!owner && !preserved) - inert = 1 - desc = "The remains of a hivelord that have become useless, having been left alone too long after being harvested." + go_inert() else - preserved = 1 + preserved = TRUE + feedback_add_details("hivelord_core", "[src.type]|implanted") + +/obj/item/organ/hivelord_core/proc/go_inert() + inert = TRUE + desc = "The remains of a hivelord that have become useless, having been left alone too long after being harvested." + feedback_add_details("hivelord_core", "[src.type]|inert") /obj/item/organ/hivelord_core/ui_action_click() var/spawn_amount = 1 @@ -278,7 +284,11 @@ owner.adjustOxyLoss(-2) if(ishuman(owner)) var/mob/living/carbon/human/H = owner - var/datum/reagent/blood/B = locate() in H.vessel.reagent_list //Grab some blood + CHECK_DNA_AND_SPECIES(H) + if(NOBLOOD in H.dna.species.specflags) + return + + var/datum/reagent/blood/B = locate() in H.vessel.reagent_list var/blood_volume = round(H.vessel.get_reagent_amount("blood")) if(B && blood_volume < 560 && blood_volume) B.volume += 2 // Fast blood regen @@ -287,7 +297,7 @@ if(proximity_flag && ishuman(target)) var/mob/living/carbon/human/H = target if(inert) - user << "[src] have become inert, its healing properties are no more." + user << "[src] has become inert, its healing properties are no more." return else if(H.stat == DEAD) @@ -295,8 +305,10 @@ return if(H != user) H.visible_message("[user] forces [H] to apply [src]... they quickly regenerate all injuries!") + feedback_add_details("hivelord_core","[src.type]|used|other") else user << "You start to smear [src] on yourself. It feels and smells disgusting, but you feel amazingly refreshed in mere moments." + feedback_add_details("hivelord_core","[src.type]|used|self") H.revive(full_heal = 1) qdel(src) ..() @@ -829,10 +841,27 @@ ..() /obj/item/organ/hivelord_core/legion - name = "legion's heart" - desc = "A demonic, still beating heart... its healing properties will soon become inert if not used quickly." + name = "legion's soul" + desc = "A strange rock that still crackles with power... its \ + healing properties will soon become inert if not used quickly." icon = 'icons/obj/surgery.dmi' - icon_state = "demon_heart" + icon_state = "legion_soul" + +/obj/item/organ/hivelord_core/legion/New() + ..() + update_icon() + +/obj/item/organ/hivelord_core/update_icon() + icon_state = inert ? "legion_soul_inert" : "legion_soul" + overlays.Cut() + if(!inert) + overlays += image(icon, "legion_soul_crackle") + +/obj/item/organ/hivelord_core/legion/go_inert() + . = ..() + desc = "[src] has become inert, it crackles no more and is useless for \ + healing injuries." + update_icon() /obj/item/weapon/legion_skull name = "legion's head" @@ -853,6 +882,7 @@ speak_emote = list("warbles", "quavers") emote_hear = list("trills.") emote_see = list("sniffs.", "burps.") + weather_immunities = list("lava","ash") faction = list("mining", "ashwalker") density = 0 speak_chance = 1 @@ -875,6 +905,7 @@ search_objects = TRUE del_on_death = TRUE loot = list(/obj/effect/decal/cleanable/blood/gibs) + deathmessage = "is pulped into bugmash." animal_species = /mob/living/simple_animal/hostile/asteroid/gutlunch childtype = list(/mob/living/simple_animal/hostile/asteroid/gutlunch/gubbuck = 45, /mob/living/simple_animal/hostile/asteroid/gutlunch/guthen = 55) @@ -882,10 +913,8 @@ wanted_objects = list(/obj/effect/decal/cleanable/xenoblood/xgibs, /obj/effect/decal/cleanable/blood/gibs/) var/obj/item/udder/gutlunch/udder = null - /mob/living/simple_animal/hostile/asteroid/gutlunch/New() udder = new() - deathmessage = "[src] is pulped into bugmash." ..() /mob/living/simple_animal/hostile/asteroid/gutlunch/Destroy() @@ -966,6 +995,7 @@ icon_living = "tendril" icon_dead = "tendril" faction = list("mining") + weather_immunities = list("lava","ash") health = 250 maxHealth = 250 max_mobs = 3 @@ -984,6 +1014,9 @@ ..() gps = new /obj/item/device/gps/internal(src) +/mob/living/simple_animal/hostile/spawner/lavaland/Destroy() + qdel(gps) + . = ..() /obj/effect/collapse name = "collapsing necropolis tendril" diff --git a/code/modules/mob/living/simple_animal/hostile/mushroom.dm b/code/modules/mob/living/simple_animal/hostile/mushroom.dm index 258b60e91a4..373e7b12a61 100644 --- a/code/modules/mob/living/simple_animal/hostile/mushroom.dm +++ b/code/modules/mob/living/simple_animal/hostile/mushroom.dm @@ -27,6 +27,7 @@ robust_searching = 1 unique_name = 1 speak_emote = list("squeaks") + deathmessage = "fainted." var/powerlevel = 0 //Tracks our general strength level gained from eating other shrooms var/bruised = 0 //If someone tries to cheat the system by attacking a shroom to lower its health, punish them so that it wont award levels to shrooms that eat it var/recovery_cooldown = 0 //So you can't repeatedly revive it during a fight @@ -58,7 +59,6 @@ cap_dead.color = cap_color UpdateMushroomCap() health = maxHealth - deathmessage = "[src] fainted." ..() /mob/living/simple_animal/hostile/mushroom/adjustHealth(damage)//Possibility to flee from a fight just to make it more visually interesting diff --git a/code/modules/mob/living/simple_animal/hostile/skeleton.dm b/code/modules/mob/living/simple_animal/hostile/skeleton.dm index 79fa9969b17..e550017407c 100644 --- a/code/modules/mob/living/simple_animal/hostile/skeleton.dm +++ b/code/modules/mob/living/simple_animal/hostile/skeleton.dm @@ -30,7 +30,7 @@ see_invisible = SEE_INVISIBLE_MINIMUM see_in_dark = 8 layer = MOB_LAYER - 0.1 - deathmessage = "The skeleton collaspes into a pile of bones!" + deathmessage = "collapses into a pile of bones!" del_on_death = 1 loot = list(/obj/effect/decal/remains/human) @@ -46,7 +46,7 @@ gold_core_spawnable = 0 melee_damage_lower = 17 melee_damage_upper = 20 - deathmessage = "The skeleton collaspes into a pile of bones, its gear falling to the floor!" + deathmessage = "collapses into a pile of bones, its gear falling to the floor!" loot = list(/obj/effect/decal/remains/human, /obj/item/weapon/twohanded/spear, /obj/item/clothing/shoes/winterboots, @@ -69,7 +69,7 @@ force_threshold = 10 //trying to simulate actually having armor melee_damage_lower = 25 melee_damage_upper = 30 - deathmessage = "The templar knight collaspes into a pile of bones, its gear clanging as it hits the ground!" + deathmessage = "collapses into a pile of bones, its gear clanging as it hits the ground!" loot = list(/obj/effect/decal/remains/human, /obj/item/clothing/suit/armor/riot/knight/templar, /obj/item/clothing/head/helmet/knight/templar, diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm index a71f5fe68e9..bb6135079d1 100644 --- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm +++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm @@ -165,7 +165,4 @@ bubble_icon = "syndibot" gold_core_spawnable = 1 del_on_death = 1 - -/mob/living/simple_animal/hostile/viscerator/New() - ..() - deathmessage = "[src] is smashed into pieces!" + deathmessage = "is smashed into pieces!" diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm index 15e56b4813c..7295e272e8b 100644 --- a/code/modules/mob/living/simple_animal/hostile/tree.dm +++ b/code/modules/mob/living/simple_animal/hostile/tree.dm @@ -33,6 +33,7 @@ maxbodytemp = 1200 faction = list("hostile") + deathmessage = "is hacked into pieces!" loot = list(/obj/item/stack/sheet/mineral/wood) gold_core_spawnable = 1 del_on_death = 1 @@ -58,10 +59,6 @@ C.visible_message("\The [src] knocks down \the [C]!", \ "\The [src] knocks you down!") -/mob/living/simple_animal/hostile/tree/New() - ..() - deathmessage = "[src] is hacked into pieces!" - /mob/living/simple_animal/hostile/tree/festivus name = "festivus pole" desc = "serenity now... SERENITY NOW!" diff --git a/code/modules/mob/living/simple_animal/hostile/zombie.dm b/code/modules/mob/living/simple_animal/hostile/zombie.dm index eccba5770c6..cf71e21028e 100644 --- a/code/modules/mob/living/simple_animal/hostile/zombie.dm +++ b/code/modules/mob/living/simple_animal/hostile/zombie.dm @@ -35,17 +35,19 @@ /mob/living/simple_animal/hostile/zombie/darkholme //BOY♂NEXT♂RUIN desc = "This guy seems to have gotten lost on his way to the leather club." - + gold_core_spawnable = 0 + /mob/living/simple_animal/hostile/zombie/darkholme/New() ..() name = pick("Leatherman","Leatherhead") - + mob/living/simple_animal/hostile/zombie/gymboss name = "boss of this gym" desc = "There seems to be something shiny embedded in his waist." butcher_results = list(/obj/item/weapon/storage/belt/champion/wrestling = 1) attacktext = "spanks" - + gold_core_spawnable = 0 + /mob/living/simple_animal/hostile/zombie/AttackingTarget() ..() @@ -151,6 +153,7 @@ mob/living/simple_animal/hostile/zombie/gymboss spawn_text = "emerges from" atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) faction = list("zombie") + deathmessage = "collapses, stopping the flow of zombies!" del_on_death = 1 /mob/living/simple_animal/hostile/spawner/zombie/lesser @@ -161,11 +164,6 @@ mob/living/simple_animal/hostile/zombie/gymboss health = 200 maxHealth = 200 -/mob/living/simple_animal/hostile/spawner/zombie/New() - ..() - deathmessage = "[src] collapes, stopping the flow of zombies!" - - /obj/item/weapon/shovel/cursed name = "cursed shovel" desc = "You probably shouldn't use this particular shovel." diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index 5a1dffc3c42..3568d43dc52 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -923,12 +923,13 @@ S["longestsurvival"] >> longest_survival S["longestdeathstreak"] >> longest_deathstreak - if(isnull(speech_buffer)) + if(!islist(speech_buffer)) speech_buffer = list() /mob/living/simple_animal/parrot/Poly/proc/Write_Memory() var/savefile/S = new /savefile("data/npc_saves/Poly.sav") - S["phrases"] << speech_buffer + if(islist(speech_buffer)) + S["phrases"] << speech_buffer S["roundssurvived"] << rounds_survived S["longestsurvival"] << longest_survival S["longestdeathstreak"] << longest_deathstreak diff --git a/code/modules/mob/living/simple_animal/shade.dm b/code/modules/mob/living/simple_animal/shade.dm index f2164eec7b9..50429b4430f 100644 --- a/code/modules/mob/living/simple_animal/shade.dm +++ b/code/modules/mob/living/simple_animal/shade.dm @@ -28,11 +28,12 @@ flying = 1 loot = list(/obj/item/weapon/ectoplasm) del_on_death = 1 + deathmessage = "lets out a contented sigh as their form unwinds." - -/mob/living/simple_animal/shade/death() - deathmessage = "[src] lets out a contented sigh as their form unwinds." - ..() +/mob/living/simple_animal/shade/canSuicide() + if(istype(loc, /obj/item/device/soulstone)) //do not suicide inside the soulstone + return 0 + return ..() /mob/living/simple_animal/shade/Process_Spacemove(movement_dir = 0) return TRUE //this doesn't make much sense; you'd thing TRUE would mean it'd process spacemove but it means it doesn't diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 78c877ba366..3dfea0528a1 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -401,9 +401,9 @@ if(death_sound) playsound(get_turf(src),death_sound, 200, 1) if(deathmessage) - visible_message("[deathmessage]") + visible_message("\The [src] [deathmessage]") else if(!del_on_death) - visible_message("\the [src] stops moving...") + visible_message("\The [src] stops moving...") if(del_on_death) ghostize() qdel(src) diff --git a/code/modules/mob/living/simple_animal/slime/life.dm b/code/modules/mob/living/simple_animal/slime/life.dm index 448a7514a11..8c62ddcfa83 100644 --- a/code/modules/mob/living/simple_animal/slime/life.dm +++ b/code/modules/mob/living/simple_animal/slime/life.dm @@ -133,13 +133,13 @@ Tempstun = 0 if(stat != DEAD) - var/co2_percentage =0 - if("co2" in environment.gases) - co2_percentage = environment.gases["co2"][MOLES] / environment.total_moles() - var/stasis = (co2_percentage >= 0.05 && bodytemperature < (T0C + 100)) || force_stasis + var/bz_percentage =0 + if("bz" in environment.gases) + bz_percentage = environment.gases["bz"][MOLES] / environment.total_moles() + var/stasis = (bz_percentage >= 0.05 && bodytemperature < (T0C + 100)) || force_stasis if(stat == CONSCIOUS && stasis) - src << "High levels of CO2 put you in stasis!" + src << "Nerve gas in the air has put you in stasis!" stat = UNCONSCIOUS powerlevel = 0 rabid = 0 diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index 74b3e20a378..61e3230a032 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -1,3 +1,8 @@ +var/list/slime_colours = list("rainbow", "grey", "purple", "metal", "orange", + "blue", "dark blue", "dark purple", "yellow", "silver", "pink", "red", + "gold", "green", "adamantine", "oil", "light pink", "bluespace", + "cerulean", "sepia", "black", "pyrite") + /mob/living/simple_animal/slime name = "baby slime" icon = 'icons/mob/slimes.dmi' @@ -16,7 +21,7 @@ response_disarm = "shoos" response_harm = "stomps on" emote_see = list("jiggles", "bounces in place") - speak_emote = list("chirps") + speak_emote = list("telepathically chirps") bubble_icon = "slime" layer = 5 @@ -83,19 +88,26 @@ var/datum/action/innate/slime/evolve/E = new E.Grant(src) create_reagents(100) - spawn (0) - number = rand(1, 1000) - name = "[colour] [is_adult ? "adult" : "baby"] slime ([number])" - icon_state = "[colour] [is_adult ? "adult" : "baby"] slime" - icon_dead = "[icon_state] dead" - real_name = name - slime_mutation = mutation_table(colour) - var/sanitizedcolour = replacetext(colour, " ", "") - coretype = text2path("/obj/item/slime_extract/[sanitizedcolour]") + spawn(0) + set_colour(colour) ..() +/mob/living/simple_animal/slime/proc/set_colour(new_colour) + colour = new_colour + + number = rand(1, 1000) + name = "[colour] [is_adult ? "adult" : "baby"] slime ([number])" + real_name = name + slime_mutation = mutation_table(colour) + var/sanitizedcolour = replacetext(colour, " ", "") + coretype = text2path("/obj/item/slime_extract/[sanitizedcolour]") + regenerate_icons() + +/mob/living/simple_animal/slime/proc/random_colour() + set_colour(pick(slime_colours)) + /mob/living/simple_animal/slime/regenerate_icons() - overlays.len = 0 + overlays.Cut() var/icon_text = "[colour] [is_adult ? "adult" : "baby"] slime" icon_dead = "[icon_text] dead" if(stat != DEAD) @@ -107,7 +119,7 @@ ..() /mob/living/simple_animal/slime/movement_delay() - if(bodytemperature >= 330.23) // 135 F + if(bodytemperature >= 330.23) // 135 F or 57.08 C return -1 // slimes become supercharged at high temperatures . = ..() diff --git a/code/modules/mob/living/simple_animal/spawner.dm b/code/modules/mob/living/simple_animal/spawner.dm index 2c2eb731b63..204d2b400f7 100644 --- a/code/modules/mob/living/simple_animal/spawner.dm +++ b/code/modules/mob/living/simple_animal/spawner.dm @@ -19,6 +19,7 @@ minbodytemp = 0 maxbodytemp = 350 layer = MOB_LAYER-0.1 + sentience_type = SENTIENCE_BOSS /mob/living/simple_animal/hostile/spawner/Destroy() diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index c549cd73a18..c0d3dd625bb 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -747,6 +747,10 @@ var/next_mob_id = 0 if(mind) return mind.get_ghost(even_if_they_cant_reenter) +/mob/proc/grab_ghost(force) + if(mind) + return mind.grab_ghost(force = force) + /mob/proc/notify_ghost_cloning(var/message = "Someone is trying to revive you. Re-enter your corpse if you want to be revived!", var/sound = 'sound/effects/genetics.ogg', var/atom/source = null) var/mob/dead/observer/ghost = get_ghost() if(ghost) @@ -916,3 +920,6 @@ var/next_mob_id = 0 if("resize") update_transform() ..() + +/mob/proc/is_literate() + return 0 diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 2861e2e41aa..c6223dfcd19 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -127,19 +127,12 @@ observer.loc = O.loc else src << "Teleporting failed. You should be able to use ghost verbs to teleport somewhere useful" - if(client.prefs.be_random_name) - client.prefs.real_name = random_unique_name(gender) - if(client.prefs.be_random_body) - client.prefs.random_character(gender) - if(HAIR in client.prefs.pref_species.specflags) - observer.hair_style = client.prefs.hair_style - observer.hair_color = observer.brighten_color(client.prefs.hair_color) - if(FACEHAIR in client.prefs.pref_species.specflags) - observer.facial_hair_style = client.prefs.facial_hair_style - observer.facial_hair_color = observer.brighten_color(client.prefs.facial_hair_color) - observer.real_name = client.prefs.real_name - observer.name = observer.real_name observer.key = key + observer.client = client + observer.set_ghost_appearance() + if(observer.client && observer.client.prefs) + observer.real_name = observer.client.prefs.real_name + observer.name = observer.real_name observer.update_icon() observer.stopLobbySound() qdel(mind) diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index 70344fe4bc1..e65ab6113d5 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -32,13 +32,16 @@ usr << "Speech is currently admin-disabled." return - if(mind && mind.name) - name = "[mind.name]" + var/mob/dead/observer/O = src + if(isobserver(src) && O.deadchat_name) + name = "[O.deadchat_name]" else - name = real_name - if(name != real_name) - alt_name = " (died as [real_name])" - + if(mind && mind.name) + name = "[mind.name]" + else + name = real_name + if(name != real_name) + alt_name = " (died as [real_name])" var/K diff --git a/code/modules/ninja/admin_ninja_verbs.dm b/code/modules/ninja/admin_ninja_verbs.dm index d87939b1eec..3f33c41e264 100644 --- a/code/modules/ninja/admin_ninja_verbs.dm +++ b/code/modules/ninja/admin_ninja_verbs.dm @@ -30,6 +30,7 @@ Contents: H.wear_suit:randomize_param() spawn(0) H.wear_suit:ninitialize(10,H) + ticker.mode.update_ninja_icons_added(H) //ADMIN CREATE NINJA (From Ghost) diff --git a/code/modules/ninja/ninja_event.dm b/code/modules/ninja/ninja_event.dm index 72771142409..574257b7190 100644 --- a/code/modules/ninja/ninja_event.dm +++ b/code/modules/ninja/ninja_event.dm @@ -155,7 +155,7 @@ Contents: return Ninja << sound('sound/effects/ninja_greeting.ogg') //so ninja you probably wouldn't even know if you were made one - ticker.mode.update_ninja_icons_added(Mind) + ticker.mode.update_ninja_icons_added(Ninja) spawned_mobs += Ninja message_admins("[key] has been made into a ninja by an event.") log_game("[key] was spawned as a ninja by an event.") diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index bef437af32a..29d4bc11de5 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -60,11 +60,11 @@ user << "There are indecipherable images scrawled on the paper in what looks to be... blood?" return if(in_range(user, src) || isobserver(user)) - if( !(ishuman(user) || isobserver(user) || issilicon(user)) ) - user << browse("[name][stars(info)]
[stamps]", "window=[name]") + if(user.is_literate()) + user << browse("[name][info]
[stamps]", "window=[name]") onclose(user, "[name]") else - user << browse("[name][info]
[stamps]", "window=[name]") + user << browse("[name][stars(info)]
[stamps]", "window=[name]") onclose(user, "[name]") else user << "It is too far away." @@ -75,17 +75,15 @@ set category = "Object" set src in usr - if(usr.stat || !usr.canmove || usr.restrained()) - return - - if(!ishuman(usr)) - return - var/mob/living/carbon/human/H = usr - if(H.disabilities & CLUMSY && prob(25)) - H << "You cut yourself on the paper! Ahhhh! Ahhhhh!" - H.damageoverlaytemp = 9001 - H.update_damage_hud() + if(usr.incapacitated() || !usr.is_literate()) return + if(ishuman(usr)) + var/mob/living/carbon/human/H = usr + if(H.disabilities & CLUMSY && prob(25)) + H << "You cut yourself on the paper! Ahhhh! Ahhhhh!" + H.damageoverlaytemp = 9001 + H.update_damage_hud() + return var/n_name = stripped_input(usr, "What would you like to label the paper?", "Paper Labelling", null, MAX_NAME_LEN) if((loc == usr && usr.stat == 0)) name = "paper[(n_name ? text("- '[n_name]'") : null)]" @@ -293,7 +291,7 @@ return if(istype(P, /obj/item/weapon/pen) || istype(P, /obj/item/toy/crayon)) - if(user.IsAdvancedToolUser()) + if(user.is_literate()) user << browse("[name][info_links]
[stamps]", "window=[name]") return else diff --git a/code/modules/paperwork/stamps.dm b/code/modules/paperwork/stamps.dm index 656bc0c7d8e..f86c1772ad1 100644 --- a/code/modules/paperwork/stamps.dm +++ b/code/modules/paperwork/stamps.dm @@ -86,12 +86,9 @@ stamp_names += initial(stamp_type.name) stamp_names = sortList(stamp_names) - // the list that will be shown to the user to pick from - world << jointext(stamp_names, ",") var/input_stamp = input(user, "Choose a stamp to disguise as.", "Choose a stamp.") as null|anything in stamp_names - world << input_stamp if(user && (src in user.contents) && input_stamp) var/obj/item/weapon/stamp/stamp_type @@ -99,7 +96,6 @@ stamp_type = i if(initial(stamp_type.name) == input_stamp) break - world << stamp_type name = initial(stamp_type.name) icon_state = initial(stamp_type.icon_state) diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 654614f7574..ba4def1b629 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -32,7 +32,7 @@ icon = 'icons/obj/lighting.dmi' icon_state = "tube-construct-stage1" anchored = 1 - layer = 5 + layer = MOB_LAYER + 0.25 var/stage = 1 var/fixture_type = "tube" var/sheets_refunded = 2 @@ -131,7 +131,7 @@ icon_state = "tube1" desc = "A lighting fixture." anchored = 1 - layer = 5 // They were appearing under mobs which is a little weird - Ostaf + layer = MOB_LAYER + 0.25 use_power = 2 idle_power_usage = 2 active_power_usage = 20 diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm index 1f0694daec7..5ff1b215f43 100644 --- a/code/modules/power/singularity/field_generator.dm +++ b/code/modules/power/singularity/field_generator.dm @@ -238,7 +238,8 @@ field_generator power level display setup_field(4) spawn(4) setup_field(8) - active = FG_ONLINE + spawn(5) + active = FG_ONLINE /obj/machinery/field/generator/proc/setup_field(NSEW) diff --git a/code/modules/power/singularity/narsie.dm b/code/modules/power/singularity/narsie.dm index 242adf9e287..8658fe0b341 100644 --- a/code/modules/power/singularity/narsie.dm +++ b/code/modules/power/singularity/narsie.dm @@ -11,6 +11,7 @@ move_self = 1 //Do we move on our own? grav_pull = 5 //How many tiles out do we pull? consume_range = 6 //How many tiles out do we eat + var/clashing = FALSE //If Nar-Sie is fighting Ratvar /obj/singularity/narsie/large name = "Nar-Sie" @@ -46,6 +47,8 @@ /obj/singularity/narsie/process() eat() + if(clashing) + return 0 if(!target || prob(5)) pickcultist() move() diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm index c565aa30661..b29c69b400a 100644 --- a/code/modules/power/tesla/energy_ball.dm +++ b/code/modules/power/tesla/energy_ball.dm @@ -30,6 +30,9 @@ var/list/blacklisted_tesla_types = list(/obj/machinery/atmospherics, contained = 0 density = 1 energy = 0 + dissipate = 1 + dissipate_delay = 5 + dissipate_strength = 1 var/list/orbiting_balls = list() var/produced_power var/energy_to_raise = 32 @@ -51,7 +54,7 @@ var/list/blacklisted_tesla_types = list(/obj/machinery/atmospherics, if(!orbiting) handle_energy() - move_the_basket_ball(4 + orbiting_balls.len * 2) + move_the_basket_ball(4 + orbiting_balls.len * 1.5) playsound(src.loc, 'sound/magic/lightningbolt.ogg', 100, 1, extrarange = 30) @@ -63,7 +66,8 @@ var/list/blacklisted_tesla_types = list(/obj/machinery/atmospherics, pixel_x = -32 pixel_y = -32 for (var/ball in orbiting_balls) - tesla_zap(ball, rand(1, Clamp(orbiting_balls.len, 3, 7)), TESLA_MINI_POWER) + var/range = rand(1, Clamp(orbiting_balls.len, 3, 7)) + tesla_zap(ball, range, TESLA_MINI_POWER/7*range) else energy = 0 // ensure we dont have miniballs of miniballs @@ -88,9 +92,10 @@ var/list/blacklisted_tesla_types = list(/obj/machinery/atmospherics, /obj/singularity/energy_ball/proc/handle_energy() + if(energy >= energy_to_raise) energy_to_lower = energy_to_raise - 20 - energy_to_raise = energy_to_raise * 1.5 + energy_to_raise = energy_to_raise * 1.25 playsound(src.loc, 'sound/magic/lightning_chargeup.ogg', 100, 1, extrarange = 30) spawn(100) @@ -105,16 +110,17 @@ var/list/blacklisted_tesla_types = list(/obj/machinery/atmospherics, 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)) + else if(energy < energy_to_lower && orbiting_balls.len) - energy_to_raise = energy_to_raise / 1.5 - energy_to_lower = (energy_to_raise / 1.5) - 20 + 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) - energy -= orbiting_balls.len * 0.5 + dissipate() //sing code has a much better system. /obj/singularity/energy_ball/Bump(atom/A) dust_mobs(A) @@ -126,11 +132,13 @@ var/list/blacklisted_tesla_types = list(/obj/machinery/atmospherics, if (istype(target)) target.orbiting_balls += src poi_list -= src + target.dissipate_strength = target.orbiting_balls.len . = ..() if (istype(target)) target.orbiting_balls -= src + target.dissipate_strength = target.orbiting_balls.len if (!loc) qdel(src) @@ -154,11 +162,11 @@ var/list/blacklisted_tesla_types = list(/obj/machinery/atmospherics, var/obj/structure/closest_structure var/obj/effect/blob/closest_blob - for(var/A in oview(source, zap_range)) + 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((dist < closest_dist || !closest_tesla_coil) && !C.being_shocked) + 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 @@ -171,8 +179,8 @@ var/list/blacklisted_tesla_types = list(/obj/machinery/atmospherics, continue //no need checking these other things else if(istype(A, /obj/machinery/power/grounding_rod)) - var/dist = get_dist(source, A) - if(dist < closest_dist || !closest_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 @@ -183,7 +191,7 @@ var/list/blacklisted_tesla_types = list(/obj/machinery/atmospherics, else if(istype(A, /mob/living)) var/dist = get_dist(source, A) var/mob/living/L = A - if((dist < closest_dist || !closest_mob) && L.stat != DEAD) + if(dist <= zap_range && (dist < closest_dist || !closest_mob) && L.stat != DEAD) closest_mob = L closest_atom = A closest_dist = dist @@ -194,7 +202,7 @@ var/list/blacklisted_tesla_types = list(/obj/machinery/atmospherics, else if(istype(A, /obj/machinery)) var/obj/machinery/M = A var/dist = get_dist(source, A) - if((dist < closest_dist || !closest_machine) && !M.being_shocked) + if(dist <= zap_range && (dist < closest_dist || !closest_machine) && !M.being_shocked) closest_machine = M closest_atom = A closest_dist = dist @@ -205,7 +213,7 @@ var/list/blacklisted_tesla_types = list(/obj/machinery/atmospherics, else if(istype(A, /obj/effect/blob)) var/obj/effect/blob/B = A var/dist = get_dist(source, A) - if((dist < closest_dist || !closest_tesla_coil) && !B.being_shocked) + if(dist <= zap_range && (dist < closest_dist || !closest_tesla_coil) && !B.being_shocked) closest_blob = B closest_atom = A closest_dist = dist @@ -216,7 +224,7 @@ var/list/blacklisted_tesla_types = list(/obj/machinery/atmospherics, else if(istype(A, /obj/structure)) var/obj/structure/S = A var/dist = get_dist(source, A) - if((dist < closest_dist || !closest_tesla_coil) && !S.being_shocked) + if(dist <= zap_range && (dist < closest_dist || !closest_tesla_coil) && !S.being_shocked) closest_structure = S closest_atom = A closest_dist = dist diff --git a/code/modules/procedural mapping/mapGenerator.dm b/code/modules/procedural_mapping/mapGenerator.dm similarity index 100% rename from code/modules/procedural mapping/mapGenerator.dm rename to code/modules/procedural_mapping/mapGenerator.dm diff --git a/code/modules/procedural mapping/mapGeneratorModule.dm b/code/modules/procedural_mapping/mapGeneratorModule.dm similarity index 100% rename from code/modules/procedural mapping/mapGeneratorModule.dm rename to code/modules/procedural_mapping/mapGeneratorModule.dm diff --git a/code/modules/procedural mapping/mapGeneratorModules/helpers.dm b/code/modules/procedural_mapping/mapGeneratorModules/helpers.dm similarity index 100% rename from code/modules/procedural mapping/mapGeneratorModules/helpers.dm rename to code/modules/procedural_mapping/mapGeneratorModules/helpers.dm diff --git a/code/modules/procedural mapping/mapGeneratorModules/nature.dm b/code/modules/procedural_mapping/mapGeneratorModules/nature.dm similarity index 100% rename from code/modules/procedural mapping/mapGeneratorModules/nature.dm rename to code/modules/procedural_mapping/mapGeneratorModules/nature.dm diff --git a/code/modules/procedural mapping/mapGeneratorObj.dm b/code/modules/procedural_mapping/mapGeneratorObj.dm similarity index 100% rename from code/modules/procedural mapping/mapGeneratorObj.dm rename to code/modules/procedural_mapping/mapGeneratorObj.dm diff --git a/code/modules/procedural mapping/mapGeneratorReadme.dm b/code/modules/procedural_mapping/mapGeneratorReadme.dm similarity index 100% rename from code/modules/procedural mapping/mapGeneratorReadme.dm rename to code/modules/procedural_mapping/mapGeneratorReadme.dm diff --git a/code/modules/procedural mapping/mapGenerators/asteroid.dm b/code/modules/procedural_mapping/mapGenerators/asteroid.dm similarity index 100% rename from code/modules/procedural mapping/mapGenerators/asteroid.dm rename to code/modules/procedural_mapping/mapGenerators/asteroid.dm diff --git a/code/modules/procedural mapping/mapGenerators/cellular.dm b/code/modules/procedural_mapping/mapGenerators/cellular.dm similarity index 100% rename from code/modules/procedural mapping/mapGenerators/cellular.dm rename to code/modules/procedural_mapping/mapGenerators/cellular.dm diff --git a/code/modules/procedural mapping/mapGenerators/lava_river.dm b/code/modules/procedural_mapping/mapGenerators/lava_river.dm similarity index 100% rename from code/modules/procedural mapping/mapGenerators/lava_river.dm rename to code/modules/procedural_mapping/mapGenerators/lava_river.dm diff --git a/code/modules/procedural mapping/mapGenerators/nature.dm b/code/modules/procedural_mapping/mapGenerators/nature.dm similarity index 100% rename from code/modules/procedural mapping/mapGenerators/nature.dm rename to code/modules/procedural_mapping/mapGenerators/nature.dm diff --git a/code/modules/procedural mapping/mapGenerators/shuttle.dm b/code/modules/procedural_mapping/mapGenerators/shuttle.dm similarity index 100% rename from code/modules/procedural mapping/mapGenerators/shuttle.dm rename to code/modules/procedural_mapping/mapGenerators/shuttle.dm diff --git a/code/modules/procedural mapping/mapGenerators/syndicate.dm b/code/modules/procedural_mapping/mapGenerators/syndicate.dm similarity index 100% rename from code/modules/procedural mapping/mapGenerators/syndicate.dm rename to code/modules/procedural_mapping/mapGenerators/syndicate.dm diff --git a/code/modules/projectiles/ammunition/energy.dm b/code/modules/projectiles/ammunition/energy.dm index 3d245ea9956..62b3ba8a669 100644 --- a/code/modules/projectiles/ammunition/energy.dm +++ b/code/modules/projectiles/ammunition/energy.dm @@ -167,6 +167,10 @@ obj/item/ammo_casing/energy/net projectile_type = /obj/item/projectile/energy/trap select_name = "snare" +/obj/item/ammo_casing/energy/trap/cyborg + projectile_type = /obj/item/projectile/energy/trap/cyborg + e_cost = 50 + /obj/item/ammo_casing/energy/instakill projectile_type = /obj/item/projectile/beam/instakill e_cost = 0 diff --git a/code/modules/projectiles/guns/energy/nuclear.dm b/code/modules/projectiles/guns/energy/nuclear.dm index 528ecc04816..f69cadac134 100644 --- a/code/modules/projectiles/guns/energy/nuclear.dm +++ b/code/modules/projectiles/guns/energy/nuclear.dm @@ -48,6 +48,22 @@ can_flashlight = 0 ammo_x_offset = 1 +/obj/item/weapon/gun/energy/gun/dragnet/snare + name = "Energy Snare Launcher" + desc = "Fires an energy snare that slows the target down" + ammo_type = list(/obj/item/ammo_casing/energy/trap) + +/obj/item/weapon/gun/energy/gun/dragnet/snare/cyborg + can_charge = 0 + ammo_type = list(/obj/item/ammo_casing/energy/trap/cyborg) + +/obj/item/weapon/gun/energy/gun/dragnet/snare/cyborg/newshot() + ..() + robocharge() + +/obj/item/weapon/gun/energy/gun/dragnet/snare/cyborg/emp_act() + return + /obj/item/weapon/gun/energy/gun/turret name = "hybrid turret gun" desc = "A heavy hybrid energy cannon with two settings: Stun and kill." diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 6588d656efd..76bde0e0903 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -89,12 +89,17 @@ icon_state = "kineticgun" item_state = "kineticgun" ammo_type = list(/obj/item/ammo_casing/energy/kinetic) - cell_type = "/obj/item/weapon/stock_parts/cell/emproof" - needs_permit = 0 // Aparently these are safe to carry? I'm sure Golliaths would disagree. + cell_type = /obj/item/weapon/stock_parts/cell/emproof + // Apparently these are safe to carry? I'm sure goliaths would disagree. + needs_permit = 0 var/overheat_time = 16 unique_rename = 1 - weapon_weight = WEAPON_HEAVY + weapon_weight = WEAPON_LIGHT origin_tech = "combat=2;powerstorage=1" + var/holds_charge = FALSE + var/unique_frequency = FALSE // modified by KA modkits + + var/overheat = FALSE /obj/item/weapon/gun/energy/kinetic_accelerator/super name = "super-kinetic accelerator" @@ -112,10 +117,56 @@ overheat_time = 14 origin_tech = "combat=4;powerstorage=3" +/obj/item/weapon/gun/energy/kinetic_accelerator/cyborg + holds_charge = TRUE + unique_frequency = TRUE + +/obj/item/weapon/gun/energy/kinetic_accelerator/New() + . = ..() + if(!holds_charge) + empty() + /obj/item/weapon/gun/energy/kinetic_accelerator/shoot_live_shot() - ..() - spawn(overheat_time) + . = ..() + attempt_reload() + +/obj/item/weapon/gun/energy/kinetic_accelerator/equipped(mob/user) + . = ..() + if(!can_shoot()) + attempt_reload() + +/obj/item/weapon/gun/energy/kinetic_accelerator/dropped() + . = ..() + if(!holds_charge) + // Put it on a delay because moving item from slot to hand + // calls dropped(). + spawn(1) + if(!ismob(loc)) + empty() + +/obj/item/weapon/gun/energy/kinetic_accelerator/proc/empty() + power_supply.use(500) + update_icon() + +/obj/item/weapon/gun/energy/kinetic_accelerator/proc/attempt_reload() + if(overheat) + return + overheat = TRUE + + var/carried = 0 + if(!unique_frequency) + for(var/obj/item/weapon/gun/energy/kinetic_accelerator/K in \ + loc.GetAllContents()) + + carried++ + + carried = max(carried, 1) + else + carried = 1 + + spawn(overheat_time * carried) reload() + overheat = FALSE /obj/item/weapon/gun/energy/kinetic_accelerator/emp_act(severity) return @@ -129,8 +180,7 @@ update_icon() /obj/item/weapon/gun/energy/kinetic_accelerator/update_icon() - var/obj/item/ammo_casing/energy/shot = ammo_type[select] - if(power_supply.charge < shot.e_cost) + if(!can_shoot()) icon_state = "[initial(icon_state)]_empty" else icon_state = initial(icon_state) @@ -148,6 +198,8 @@ weapon_weight = WEAPON_LIGHT unique_rename = 0 overheat_time = 20 + holds_charge = TRUE + unique_frequency = TRUE /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow/large name = "energy crossbow" @@ -177,6 +229,8 @@ ammo_type = list(/obj/item/ammo_casing/energy/plasma) flags = CONDUCT | OPENCONTAINER attack_verb = list("attacked", "slashed", "cut", "sliced") + force = 12 + sharpness = IS_SHARP can_charge = 0 heat = 3800 @@ -205,6 +259,7 @@ name = "advanced plasma cutter" icon_state = "adv_plasmacutter" origin_tech = "combat=3;materials=4;magnets=3;plasmatech=3;engineering=2" + force = 15 ammo_type = list(/obj/item/ammo_casing/energy/plasma/adv) /obj/item/weapon/gun/energy/wormhole_projector @@ -302,4 +357,4 @@ ammo_type = list(/obj/item/ammo_casing/energy/instakill/blue) /obj/item/weapon/gun/energy/laser/instakill/emp_act() //implying you could stop the instagib - return \ No newline at end of file + return diff --git a/code/modules/projectiles/guns/projectile/rechargable_magazine.dm b/code/modules/projectiles/guns/projectile/rechargable_magazine.dm index dc7a6b82994..8f7778c497b 100644 --- a/code/modules/projectiles/guns/projectile/rechargable_magazine.dm +++ b/code/modules/projectiles/guns/projectile/rechargable_magazine.dm @@ -65,11 +65,22 @@ w_class = 5 var/obj/item/weapon/gun/projectile/minigun/gun = null var/armed = 0 //whether the gun is attached, 0 is attached, 1 is the gun is wielded. + var/overheat = 0 + var/overheat_max = 40 + var/heat_diffusion = 1 /obj/item/weapon/minigunpack/New() gun = new(src) + SSobj.processing += src ..() +/obj/item/weapon/minigunpack/Destroy() + SSobj.processing -= src + ..() + +/obj/item/weapon/minigunpack/process() + overheat = max(0, overheat - heat_diffusion) + /obj/item/weapon/minigunpack/attack_hand(var/mob/living/carbon/user) if(src.loc == user) if(!armed) @@ -167,6 +178,14 @@ else qdel(src) +/obj/item/weapon/gun/projectile/minigun/shoot_live_shot(mob/living/user as mob|obj, pointblank = 0, mob/pbtarget = null, message = 1) + if(ammo_pack) + if(ammo_pack.overheat < ammo_pack.overheat_max) + . = ..() + ammo_pack.overheat++ + else + user << "The gun's heat sensor locked the trigger to prevent lens damage." + /obj/item/weapon/gun/projectile/minigun/afterattack(atom/target, mob/living/user, flag, params) if(!ammo_pack || ammo_pack.loc != user) user << "You need the backpack power source to fire the gun!" diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm index 3cdc0b2100a..f0cb246b56f 100644 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ b/code/modules/projectiles/guns/projectile/shotgun.dm @@ -309,7 +309,7 @@ desc = "A semi automatic shotgun with tactical furniture and a six-shell capacity underneath." icon_state = "cshotgun" origin_tech = "combat=5;materials=2" - mag_type = /obj/item/ammo_box/magazine/internal/shot/tube + mag_type = /obj/item/ammo_box/magazine/internal/shot/com w_class = 5 //Dual Feed Shotgun @@ -355,4 +355,4 @@ /obj/item/ammo_box/magazine/internal/shot/tube name = "dual feed shotgun internal tube" ammo_type = /obj/item/ammo_casing/shotgun/rubbershot - max_ammo = 4 \ No newline at end of file + max_ammo = 4 diff --git a/code/modules/projectiles/guns/syringe_gun.dm b/code/modules/projectiles/guns/syringe_gun.dm index 44fd2c98dd4..023c7c2fd02 100644 --- a/code/modules/projectiles/guns/syringe_gun.dm +++ b/code/modules/projectiles/guns/syringe_gun.dm @@ -24,7 +24,8 @@ if(!S) return - chambered.BB = new /obj/item/projectile/bullet/dart/syringe(src) + chambered.BB = new S.projectile_type (src) + S.reagents.trans_to(chambered.BB, S.reagents.total_volume) chambered.BB.name = S.name syringes.Remove(S) diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index fab3be9313b..83d17c7ebfe 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -8,6 +8,7 @@ mouse_opacity = 0 hitsound = 'sound/weapons/pierce.ogg' pressure_resistance = INFINITY + burn_state = LAVA_PROOF var/def_zone = "" //Aiming at var/mob/firer = null//Who shot it var/obj/item/ammo_casing/ammo_casing = null @@ -142,6 +143,5 @@ Bump(AM, 1) /obj/item/projectile/Destroy() - if(ammo_casing) - qdel(ammo_casing) + ammo_casing = null return ..() diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 2b081c5f1bd..c1dce29e70f 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -124,7 +124,7 @@ damage = 10 weaken = 4 stun = 4 - + /obj/item/projectile/bullet/honker damage = 0 weaken = 5 @@ -135,7 +135,7 @@ icon = 'icons/obj/hydroponics/harvest.dmi' icon_state = "banana" range = 200 - + /obj/item/projectile/bullet/honker/New() ..() SpinAnimation() @@ -166,6 +166,7 @@ name = "dart" icon_state = "cbbolt" damage = 6 + var/piercing = 0 /obj/item/projectile/bullet/dart/New() ..() @@ -176,7 +177,7 @@ if(iscarbon(target)) var/mob/living/carbon/M = target if(blocked != 100) // not completely blocked - if(M.can_inject(null,0,hit_zone)) // Pass the hit zone to see if it can inject by whether it hit the head or the body. + if(M.can_inject(null,0,hit_zone,piercing)) // Pass the hit zone to see if it can inject by whether it hit the head or the body. ..() reagents.reaction(M, INJECT) reagents.trans_to(M, reagents.total_volume) @@ -203,6 +204,10 @@ icon = 'icons/obj/chemical.dmi' icon_state = "syringeproj" +//Piercing Syringe +/obj/item/projectile/bullet/dart/syringe/piercing + piercing = 1 + /obj/item/projectile/bullet/neurotoxin name = "neurotoxin spit" icon_state = "neurotoxin" diff --git a/code/modules/projectiles/projectile/energy.dm b/code/modules/projectiles/projectile/energy.dm index 4dde9cc6fc8..3cd537d41ad 100644 --- a/code/modules/projectiles/projectile/energy.dm +++ b/code/modules/projectiles/projectile/energy.dm @@ -111,6 +111,32 @@ new/obj/item/weapon/restraints/legcuffs/beartrap/energy(loc) ..() +/obj/item/projectile/energy/trap/cyborg + name = "Energy Bola" + icon_state = "e_snare" + nodamage = 1 + weaken = 0 + hitsound = 'sound/weapons/taserhit.ogg' + range = 10 + +/obj/item/projectile/energy/trap/cyborg/on_hit(atom/target, blocked = 0) + if(!ismob(target) || blocked >= 100) + var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread + sparks.set_up(1, 1, src) + sparks.start() + qdel(src) + if(iscarbon(target)) + var/obj/item/weapon/restraints/legcuffs/beartrap/B = new /obj/item/weapon/restraints/legcuffs/beartrap/energy/cyborg(get_turf(target)) + B.Crossed(target) + spawn(10) + qdel(src) + ..() + +/obj/item/projectile/energy/trap/cyborg/on_range() + var/datum/effect_system/spark_spread/sparks = new /datum/effect_system/spark_spread + sparks.set_up(1, 1, src) + sparks.start() + qdel(src) /obj/item/projectile/energy/declone name = "radiation beam" diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm index cbe4524c9f9..b0e825110af 100644 --- a/code/modules/projectiles/projectile/magic.dm +++ b/code/modules/projectiles/projectile/magic.dm @@ -61,12 +61,9 @@ var/mob/living/carbon/C = target C.regenerate_limbs() if(target.revive(full_heal = 1)) - if(!target.ckey) - for(var/mob/dead/observer/ghost in player_list) - if(target.real_name == ghost.real_name) - ghost.reenter_corpse() - break - target << "You rise with a start, you're alive!!!" + target.grab_ghost(force = TRUE) // even suicides + target << "You rise with a start, \ + you're alive!!!" else if(target.stat != DEAD) target << "You feel great!" @@ -175,7 +172,7 @@ if("drone") new_mob = new /mob/living/simple_animal/drone(M.loc) var/mob/living/simple_animal/drone/D = new_mob - D.update_drone_hack() + D.liberate() // F R E E D R O N E if(issilicon(new_mob)) new_mob.gender = M.gender new_mob.invisibility = 0 @@ -186,9 +183,10 @@ new_mob.languages |= HUMAN if("slime") new_mob = new /mob/living/simple_animal/slime(M.loc) + var/mob/living/simple_animal/slime/slimey = new_mob if(prob(50)) - var/mob/living/simple_animal/slime/Slime = new_mob - Slime.is_adult = 1 + slimey.is_adult = 1 + slimey.random_colour() new_mob.languages |= HUMAN if("xeno") if(prob(50)) @@ -220,7 +218,7 @@ if("spiderhunter") new_mob = new /mob/living/simple_animal/hostile/poison/giant_spider/hunter(M.loc) if("blobbernaut") - new_mob = new /mob/living/simple_animal/hostile/blob/blobbernaut(M.loc) + new_mob = new /mob/living/simple_animal/hostile/blob/blobbernaut/independent(M.loc) if("magicarp") new_mob = new /mob/living/simple_animal/hostile/carp/ranged(M.loc) if("chaosmagicarp") @@ -279,10 +277,8 @@ M.attack_log += text("\[[time_stamp()]\] [M.real_name] ([M.ckey]) became [new_mob.real_name].") new_mob.a_intent = "harm" - if(M.mind) - M.mind.transfer_to(new_mob) - else - new_mob.key = M.key + + M.wabbajack_act(new_mob) new_mob << "Your form morphs into that of a [randomize]." diff --git a/code/modules/projectiles/projectile/reusable.dm b/code/modules/projectiles/projectile/reusable.dm index 216b24e570a..f253655e3f6 100644 --- a/code/modules/projectiles/projectile/reusable.dm +++ b/code/modules/projectiles/projectile/reusable.dm @@ -54,8 +54,7 @@ newdart.update_icon() /obj/item/projectile/bullet/reusable/foam_dart/Destroy() - if(pen) - qdel(pen) + pen = null return ..() /obj/item/projectile/bullet/reusable/foam_dart/riot diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index 631efab912f..0002f3dbeca 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -141,7 +141,7 @@ ..() /obj/item/projectile/kinetic/on_range() - new /obj/item/effect/kinetic_blast(src.loc) + new /obj/effect/kinetic_blast(src.loc) ..() /obj/item/projectile/kinetic/on_hit(atom/target) @@ -150,7 +150,7 @@ if(istype(target_turf, /turf/closed/mineral)) var/turf/closed/mineral/M = target_turf M.gets_drilled(firer) - new /obj/item/effect/kinetic_blast(target_turf) + new /obj/effect/kinetic_blast(target_turf) if(src.splash) for(var/turf/T in range(splash, target_turf)) if(istype(T, /turf/closed/mineral)) @@ -158,13 +158,13 @@ M.gets_drilled(firer) -/obj/item/effect/kinetic_blast +/obj/effect/kinetic_blast name = "kinetic explosion" icon = 'icons/obj/projectiles.dmi' icon_state = "kinetic_blast" layer = 4.1 -/obj/item/effect/kinetic_blast/New() +/obj/effect/kinetic_blast/New() spawn(4) qdel(src) @@ -218,7 +218,7 @@ icon_state = "plasmacutter" damage_type = BRUTE damage = 5 - range = 3 + range = 5 /obj/item/projectile/plasma/New() var/turf/proj_turf = get_turf(src) @@ -227,9 +227,9 @@ var/datum/gas_mixture/environment = proj_turf.return_air() if(environment) var/pressure = environment.return_pressure() - if(pressure < 30) + if(pressure < 60) name = "full strength plasma blast" - damage *= 3 + damage *= 4 ..() /obj/item/projectile/plasma/on_hit(atom/target) @@ -237,12 +237,14 @@ if(istype(target, /turf/closed/mineral)) var/turf/closed/mineral/M = target M.gets_drilled(firer) - range = max(range - 1, 1) - return -1 + Range() + if(range > 0) + return -1 /obj/item/projectile/plasma/adv - range = 5 + damage = 7 + range = 7 /obj/item/projectile/plasma/adv/mech damage = 10 - range = 6 \ No newline at end of file + range = 8 \ No newline at end of file diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index 4730cd0f891..ccdcc770c74 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -9,8 +9,10 @@ idle_power_usage = 20 var/obj/item/weapon/reagent_containers/beaker = null var/obj/item/weapon/storage/pill_bottle/bottle = null - var/mode = 0 + var/mode = 1 var/condi = 0 + var/screen = "home" + var/analyzeVars[0] var/useramount = 30 // Last used amount /obj/machinery/chem_master/New() @@ -113,122 +115,98 @@ else return ..() -/obj/machinery/chem_master/Topic(href, href_list) + +/obj/machinery/chem_master/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ + datum/tgui/master_ui = null, datum/ui_state/state = default_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "chem_master", name, 500, 550, master_ui, state) + ui.open() + + +/obj/machinery/chem_master/ui_data(mob/user) + var/list/data = list() + data["isBeakerLoaded"] = beaker ? 1 : 0 + data["beakerCurrentVolume"] = beaker ? beaker.reagents.total_volume : null + data["beakerMaxVolume"] = beaker ? beaker.volume : null + data["mode"] = mode + data["condi"] = condi + data["screen"] = screen + data["analyzeVars"] = analyzeVars + + data["isPillBottleLoaded"] = bottle ? 1 : 0 + if(bottle) + data["pillBotContent"] = bottle.contents.len + data["pillBotMaxContent"] = bottle.storage_slots + + + var beakerContents[0] + if(beaker) + for(var/datum/reagent/R in beaker.reagents.reagent_list) + beakerContents.Add(list(list("name" = R.name, "id" = R.id, "volume" = R.volume))) // list in a list because Byond merges the first list... + data["beakerContents"] = beakerContents + + var bufferContents[0] + if(reagents.total_volume) + for(var/datum/reagent/N in reagents.reagent_list) + bufferContents.Add(list(list("name" = N.name, "id" = N.id, "volume" = N.volume))) // ^ + data["bufferContents"] = bufferContents + + + return data + +/obj/machinery/chem_master/ui_act(action, params) if(..()) return - - usr.set_machine(src) - - if(href_list["ejectp"]) - if(bottle) - bottle.loc = src.loc - bottle = null - - else if(href_list["close"]) - usr << browse(null, "window=chem_master") - usr.unset_machine() - return - - else if(href_list["toggle"]) - mode = !mode - - else if(href_list["createbottle"]) - var/name = stripped_input(usr, "Name:","Name your bottle!", (reagents.total_volume ? reagents.get_master_reagent_name() : " "), MAX_NAME_LEN) - if(!name) - return - var/obj/item/weapon/reagent_containers/P - if(condi) - P = new/obj/item/weapon/reagent_containers/food/condiment(src.loc) - else - P = new/obj/item/weapon/reagent_containers/glass/bottle(src.loc) - P.pixel_x = rand(-7, 7) //random position - P.pixel_y = rand(-7, 7) - P.name = trim("[name] bottle") - reagents.trans_to(P, P.volume) - - if(beaker) - - if(href_list["analyze"]) - if(locate(href_list["reagent"])) - var/datum/reagent/R = locate(href_list["reagent"]) - if(R) - var/dat = "" - dat += "

[condi ? "Condiment" : "Chemical"] information:

" - dat += "Name: [initial(R.name)]

" - dat += "State: " - if(initial(R.reagent_state) == 1) - dat += "Solid" - else if(initial(R.reagent_state) == 2) - dat += "Liquid" - else if(initial(R.reagent_state) == 3) - dat += "Gas" - else - dat += "Unknown" - dat += "
" - dat += "Color: [initial(R.color)]

" - dat += "Description: [initial(R.description)]

" - var/const/P = 3 //The number of seconds between life ticks - var/T = initial(R.metabolization_rate) * (60 / P) - dat += "Metabolization Rate: [T]u/minute
" - dat += "Overdose Threshold: [initial(R.overdose_threshold) ? "[initial(R.overdose_threshold)]u" : "none"]
" - dat += "Addiction Threshold: [initial(R.addiction_threshold) ? "[initial(R.addiction_threshold)]u" : "none"]

" - dat += "
Back" - var/datum/browser/popup = new(usr, "chem_master", name) - popup.set_content(dat) - popup.set_title_image(usr.browse_rsc_icon(src.icon, src.icon_state)) - popup.open(1) - return - - else if(href_list["main"]) // Used to exit the analyze screen. - attack_hand(usr) - return - - else if(href_list["add"]) - if(href_list["amount"]) - var/id = href_list["add"] - var/amount = text2num(href_list["amount"]) - if (amount > 0) - beaker.reagents.trans_id_to(src, id, amount) - - else if(href_list["addcustom"]) - var/id = href_list["addcustom"] - var/amt_temp = isgoodnumber(input(usr, "Select the amount to transfer.", "Transfer how much?", useramount) as num|null) - if(!amt_temp) - return - useramount = amt_temp - src.Topic(null, list("amount" = "[useramount]", "add" = "[id]")) - - else if(href_list["remove"]) - if(href_list["amount"]) - var/id = href_list["remove"] - var/amount = text2num(href_list["amount"]) - if (amount > 0) - if(mode) - reagents.trans_id_to(beaker, id, amount) - else - reagents.remove_reagent(id, amount) - - else if(href_list["removecustom"]) - var/id = href_list["removecustom"] - var/amt_temp = isgoodnumber(input(usr, "Select the amount to transfer.", "Transfer how much?", useramount) as num|null) - if(!amt_temp) - return - useramount = amt_temp - src.Topic(null, list("amount" = "[useramount]", "remove" = "[id]")) - - else if(href_list["eject"]) + switch(action) + if("eject") if(beaker) beaker.loc = src.loc beaker = null reagents.clear_reagents() icon_state = "mixer0" + . = TRUE - else if(href_list["createpill"]) //Also used for condiment packs. + if("ejectp") + if(bottle) + bottle.loc = src.loc + bottle = null + . = TRUE + + if("transferToBuffer") + if(beaker) + var/id = params["id"] + var/amount = text2num(params["amount"]) + if (amount > 0) + beaker.reagents.trans_id_to(src, id, amount) + . = TRUE + else if (amount == -1) // -1 means custom amount + useramount = input("Enter the Amount you want to transfer:", name, useramount) as num|null + beaker.reagents.trans_id_to(src, id, useramount) + . = TRUE + + if("transferFromBuffer") + var/id = params["id"] + var/amount = text2num(params["amount"]) + if (amount > 0) + if(mode) + reagents.trans_id_to(beaker, id, amount) + . = TRUE + else + reagents.remove_reagent(id, amount) + . = TRUE + + if("toggleMode") + mode = !mode + . = TRUE + + if("createPill") + var/many = params["many"] if(reagents.total_volume == 0) return if(!condi) var/amount = 1 var/vol_each = min(reagents.total_volume, 50) - if(text2num(href_list["many"])) + if(text2num(many)) amount = min(max(round(input(usr, "Max 10. Buffer content will be split evenly.", "How many pills?", amount) as num|null), 0), 10) if(!amount) return @@ -257,12 +235,14 @@ P.name = trim("[name] pack") P.desc = "A small condiment pack. The label says it contains [name]." reagents.trans_to(P,10) + . = TRUE - else if(href_list["createpatch"]) + if("createPatch") + var/many = params["many"] if(reagents.total_volume == 0) return var/amount = 1 var/vol_each = min(reagents.total_volume, 50) - if(text2num(href_list["many"])) + if(text2num(many)) amount = min(max(round(input(usr, "Max 10. Buffer content will be split evenly.", "How many patches?", amount) as num|null), 0), 10) if(!amount) return @@ -278,84 +258,46 @@ P.pixel_x = rand(-7, 7) //random position P.pixel_y = rand(-7, 7) reagents.trans_to(P,vol_each) + . = TRUE - src.updateUsrDialog() - return + if("createBottle") + var/name = stripped_input(usr, "Name:","Name your bottle!", (reagents.total_volume ? reagents.get_master_reagent_name() : " "), MAX_NAME_LEN) + if(!name) + return + var/obj/item/weapon/reagent_containers/P + if(condi) + P = new/obj/item/weapon/reagent_containers/food/condiment(src.loc) + else + P = new/obj/item/weapon/reagent_containers/glass/bottle(src.loc) -/obj/machinery/chem_master/attack_hand(mob/user) - if(stat & BROKEN) - return + P.pixel_x = rand(-7, 7) //random position + P.pixel_y = rand(-7, 7) + P.name = trim("[name] bottle") + reagents.trans_to(P, P.volume) + . = TRUE - user.set_machine(src) - var/dat = "" - if(beaker) - dat += "Beaker \[[beaker.reagents.total_volume]/[beaker.volume]\] Eject and Clear Buffer
" - else - dat = "Please insert beaker.
" + if("analyze") + var/datum/reagent/R = chemical_reagents_list[params["id"]] + if(R) + var/state = "Unknown" + if(initial(R.reagent_state) == 1) + state = "Solid" + else if(initial(R.reagent_state) == 2) + state = "Liquid" + else if(initial(R.reagent_state) == 3) + state = "Gas" + var/const/P = 3 //The number of seconds between life ticks + var/T = initial(R.metabolization_rate) * (60 / P) + analyzeVars = list("name" = initial(R.name), "state" = state, "color" = initial(R.color), "description" = initial(R.description), "metaRate" = T, "overD" = initial(R.overdose_threshold), "addicD" = initial(R.addiction_threshold)) + screen = "analyze" + return - dat += "
Add to buffer:
    " - if(beaker) - if(beaker.reagents.total_volume) - for(var/datum/reagent/G in beaker.reagents.reagent_list) - dat += "
  • [G.name], [G.volume] Units - " - dat += "Analyze " - dat += "1 " - dat += "5 " - dat += "10 " - dat += "All " - dat += "Custom" - else - dat += "
  • Beaker is empty." - else - dat += "
  • No beaker." + if("goScreen") + screen = params["screen"] + . = TRUE - dat += "

Transfer to [(!mode ? "disposal" : "beaker")]:
    " - if(reagents.total_volume) - for(var/datum/reagent/N in reagents.reagent_list) - dat += "
  • [N.name], [N.volume] Units - " - dat += "Analyze " - dat += "1 " - dat += "5 " - dat += "10 " - dat += "All " - dat += "Custom" - else - dat += "
  • Buffer is empty." - dat += "

" - if(!condi) - if(bottle) - dat += "Pill Bottle \[[bottle.contents.len]/[bottle.storage_slots]\] Eject" - else - dat += "No pill bottle inserted." - else - dat += "
" - dat += "
    " - if(!condi) - if(beaker && reagents.total_volume) - dat += "
  • Create pill (50 units max)" - dat += "
  • Create multiple pills
    " - dat += "
  • Create patch (50 units max)" - dat += "
  • Create multiple patches
    " - else - dat += "
  • Create pill (50 units max)" - dat += "
  • Create multiple pills
    " - dat += "
  • Create patch (50 units max)" - dat += "
  • Create multiple patches
    " - else - if(beaker && reagents.total_volume) - dat += "
  • Create pack (10 units max)
    " - else - dat += "
  • Create pack (10 units max)
    " - dat += "
  • Create bottle ([condi ? "50" : "30"] units max)" - dat += "
" - dat += "
Close" - var/datum/browser/popup = new(user, "chem_master", name, 470, 500) - popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) - popup.open(1) - return /obj/machinery/chem_master/proc/isgoodnumber(num) if(isnum(num)) diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm index 419d5e2c91d..e71f8a95b48 100644 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -29,15 +29,6 @@ /obj/item/weapon/grown/nettle/death = list("facid" = 0), /obj/item/weapon/grown/novaflower = list("capsaicin" = 0, "condensedcapsaicin" = 0), - //Crayons (for overriding colours) - /obj/item/toy/crayon/red = list("redcrayonpowder" = 10), - /obj/item/toy/crayon/orange = list("orangecrayonpowder" = 10), - /obj/item/toy/crayon/yellow = list("yellowcrayonpowder" = 10), - /obj/item/toy/crayon/green = list("greencrayonpowder" = 10), - /obj/item/toy/crayon/blue = list("bluecrayonpowder" = 10), - /obj/item/toy/crayon/purple = list("purplecrayonpowder" = 10), - /obj/item/toy/crayon/mime = list("invisiblecrayonpowder" = 50), - //Blender Stuff /obj/item/weapon/reagent_containers/food/snacks/grown/soybeans = list("soymilk" = 0), /obj/item/weapon/reagent_containers/food/snacks/grown/tomato = list("ketchup" = 0), @@ -414,21 +405,6 @@ break remove_object(O) - - //Crayons - //With some input from aranclanos, now 30% less shoddily copypasta - for (var/obj/item/toy/crayon/O in holdingitems) - if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - break - var/allowed = get_allowed_by_id(O) - for (var/r_id in allowed) - var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume - var/amount = allowed[r_id] - beaker.reagents.add_reagent(r_id,min(amount, space)) - if (space < amount) - break - remove_object(O) - //Everything else - Transfers reagents from it into beaker for (var/obj/item/weapon/reagent_containers/O in holdingitems) if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) @@ -436,4 +412,4 @@ var/amount = O.reagents.total_volume O.reagents.trans_to(beaker, amount) if(!O.reagents.total_volume) - remove_object(O) \ No newline at end of file + remove_object(O) diff --git a/code/modules/reagents/chemistry/reagents/blob_reagents.dm b/code/modules/reagents/chemistry/reagents/blob_reagents.dm index 4e35fb36319..0d648c46fc2 100644 --- a/code/modules/reagents/chemistry/reagents/blob_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/blob_reagents.dm @@ -565,7 +565,7 @@ reac_volume = ..() var/turf/open/T = get_turf(M) if(istype(T) && prob(reac_volume)) - T.MakeSlippery(TURF_WET_WATER) + T.MakeSlippery(min_wet_time = 5, wet_time_to_add = 1) M.adjust_fire_stacks(-(reac_volume / 10)) M.ExtinguishMob() M.apply_damage(0.1*reac_volume, BRUTE) @@ -586,7 +586,7 @@ /datum/reagent/blob/pressurized_slime/proc/extinguisharea(obj/effect/blob/B, probchance) for(var/turf/open/T in range(1, B)) if(prob(probchance)) - T.MakeSlippery(TURF_WET_WATER) + T.MakeSlippery(min_wet_time = 5, wet_time_to_add = 1) for(var/obj/O in T) O.extinguish() for(var/mob/living/L in T) @@ -663,4 +663,4 @@ if(message_living && !issilicon(M)) totalmessage += message_living totalmessage += "!" - M << "[totalmessage]" \ No newline at end of file + M << "[totalmessage]" diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index 4952b70f4b2..c9e1e5c4897 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -155,7 +155,7 @@ if(reac_volume >= 1) // Make Freezy Foam and anti-fire grenades! if(istype(T, /turf/open)) var/turf/open/OT = T - OT.MakeSlippery(TURF_WET_WATER) // Is less effective in high pressure/high heat capacity environments. More effective in low pressure. + OT.MakeSlippery(wet_setting=TURF_WET_ICE, min_wet_time=5, wet_time_to_add=reac_volume*0.5) // Is less effective in high pressure/high heat capacity environments. More effective in low pressure. OT.air.temperature -= MOLES_CELLSTANDARD*100*reac_volume/OT.air.heat_capacity() // reduces environment temperature by 5K per unit. /datum/reagent/consumable/condensedcapsaicin @@ -324,8 +324,7 @@ /datum/reagent/consumable/cornoil/reaction_turf(turf/open/T, reac_volume) if (!istype(T)) return - if(reac_volume >= 3) - T.MakeSlippery() + T.MakeSlippery(min_wet_time = 5, wet_time_to_add = reac_volume*2) var/obj/effect/hotspot/hotspot = (locate(/obj/effect/hotspot) in T) if(hotspot) var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles() ) diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 92716ddc9d3..eaf4e1c8c68 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -121,8 +121,9 @@ /datum/reagent/water/reaction_turf(turf/open/T, reac_volume) if (!istype(T)) return var/CT = cooling_temperature - if(reac_volume >= 10) - T.MakeSlippery() + + if(reac_volume >= 5) + T.MakeSlippery(min_wet_time = 5, wet_time_to_add = reac_volume*0.2) for(var/mob/living/simple_animal/slime/M in T) M.apply_water() @@ -172,6 +173,11 @@ description = "Water blessed by some deity." color = "#E0E8EF" // rgb: 224, 232, 239 +/datum/reagent/water/holywater/reaction_mob(mob/living/M, method=TOUCH, reac_volume) + if(is_servant_of_ratvar(M)) + M << "A darkness begins to spread its unholy tendrils through your mind, purging the Justiciar's influence!" + ..() + /datum/reagent/water/holywater/on_mob_life(mob/living/M) if(!data) data = 1 data++ @@ -183,13 +189,23 @@ M.Dizzy(5) if(iscultist(M) && prob(5)) M.say(pick("Av'te Nar'sie","Pa'lid Mors","INO INO ORA ANA","SAT ANA!","Daim'niodeis Arc'iai Le'eones","R'ge Na'sie","Diabo us Vo'iscum","Eld' Mon Nobis")) + else if(is_servant_of_ratvar(M) && prob(5)) + switch(pick("speech", "message", "emote")) + if("speech") + M.say("...[pick("Ratvar... lbhe yvtug tebjf qnex", "Jurer ner lbh, znfgre?", "Ur yvrf ehfgvat va Reebe", "Chetr nyy hagehguf naq... naq... fbzrguvat")]...") + if("message") + M << "[pick("Ratvar's illumination of your mind has begun to flicker.", "He lies rusting in Reebe, derelict and forgotten. And there he shall stay.", \ + "You can't save him. Nothing can save him now.", "It seems that Nar-Sie will triumph after all.")]" + if("emote") + M.visible_message("[M] [pick("whimpers quietly", "shivers as though cold", "glances around in paranoia")]") if(data >= 75 && prob(33)) // 30 units, 135 seconds if (!M.confused) M.confused = 1 M.confused += 3 - if(iscultist(M) || (is_handofgod_cultist(M) && !is_handofgod_prophet(M))) + if(iscultist(M) || (is_handofgod_cultist(M) && !is_handofgod_prophet(M)) || is_servant_of_ratvar(M)) ticker.mode.remove_cultist(M.mind, 1, 1) ticker.mode.remove_hog_follower(M.mind) + remove_servant_of_ratvar(M.mind) holder.remove_reagent(src.id, src.volume) // maybe this is a little too perfect and a max() cap on the statuses would be better?? M.jitteriness = 0 M.stuttering = 0 @@ -257,7 +273,7 @@ /datum/reagent/lube/reaction_turf(turf/open/T, reac_volume) if (!istype(T)) return if(reac_volume >= 1) - T.MakeSlippery(TURF_WET_LUBE) + T.MakeSlippery(wet_setting=TURF_WET_LUBE, min_wet_time=5, wet_time_to_add=reac_volume) /datum/reagent/spraytan name = "Spray Tan" @@ -722,7 +738,7 @@ M.adjustToxLoss(rand(5,10)) /datum/reagent/space_cleaner/reaction_mob(mob/M, method=TOUCH, reac_volume) - if(method == TOUCH || VAPOR) + if(method == TOUCH || method == VAPOR) if(iscarbon(M)) var/mob/living/carbon/C = M if(istype(M,/mob/living/carbon/human)) @@ -1144,7 +1160,8 @@ /datum/reagent/drying_agent/reaction_turf(turf/open/T, reac_volume) if(istype(T) && T.wet) - T.MakeDry(TURF_WET_WATER) + T.wet_time = max(0, T.wet_time-reac_volume*5) // removes 5 seconds of wetness for every unit. + T.HandleWet() /datum/reagent/drying_agent/reaction_obj(obj/O, reac_volume) if(O.type == /obj/item/clothing/shoes/galoshes) diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index 5bfe942374d..12016ff0618 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -89,14 +89,21 @@ toxpwr = 0 /datum/reagent/toxin/lexorin/on_mob_life(mob/living/M) - M.adjustOxyLoss(5, 0) + . = TRUE + var/mob/living/carbon/C if(iscarbon(M)) - var/mob/living/carbon/C = M - C.losebreath += 2 - if(prob(20)) - M.emote("gasp") + C = M + CHECK_DNA_AND_SPECIES(C) + if(NOBREATH in C.dna.species.specflags) + . = FALSE + + if(.) + M.adjustOxyLoss(5, 0) + if(C) + C.losebreath += 2 + if(prob(20)) + M.emote("gasp") ..() - . = 1 /datum/reagent/toxin/slimejelly name = "Slime Jelly" @@ -260,6 +267,20 @@ . = 1 ..() +/datum/reagent/toxin/chloralhydrate/delayed + id = "chloralhydrate2" + +/datum/reagent/toxin/chloralhydrate/delayed/on_mob_life(mob/living/M) + switch(current_cycle) + if(1 to 10) + return + if(10 to 20) + M.confused += 1 + M.drowsyness += 1 + if(20 to INFINITY) + M.Sleeping(2, 0) + ..() + /datum/reagent/toxin/beer2 //disguised as normal beer for use by emagged brobots name = "Beer" id = "beer2" @@ -700,3 +721,31 @@ M.adjustFireLoss(current_cycle/10, 0) // I rode a tank, held a general's rank . = 1 // When the blitzkrieg raged and the bodies stank ..() // Pleased to meet you, hope you guess my name + +/datum/reagent/toxin/peaceborg/confuse + name = "Dizzying Solution" + id = "dizzysolution" + description = "Makes the target off balance and dizzy" + toxpwr = 0 + metabolization_rate = 1.5 * REAGENTS_METABOLISM + +/datum/reagent/toxin/peaceborg/confuse/on_mob_life(mob/living/M) + M.confused += 1 + M.Dizzy(1) + if(prob(20)) + M << "You feel confused and disorientated." + ..() + +/datum/reagent/toxin/peaceborg/tire + name = "Tiring Solution" + id = "tiresolution" + description = "An extremely weak stamina-toxin that tires out the target. Completely harmless." + toxpwr = 0 + metabolization_rate = 1.5 * REAGENTS_METABOLISM + +/datum/reagent/toxin/peaceborg/tire/on_mob_life(mob/living/M) + if(M.staminaloss < 50) + M.adjustStaminaLoss(10) + if(prob(30)) + M << "You should sit down and take a rest..." + ..() \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/borghydro.dm b/code/modules/reagents/reagent_containers/borghydro.dm index 679999b573c..e6188a387f5 100644 --- a/code/modules/reagents/reagent_containers/borghydro.dm +++ b/code/modules/reagents/reagent_containers/borghydro.dm @@ -207,3 +207,13 @@ Borg Shaker recharge_time = 3 reagent_ids = list("beer2") + +/obj/item/weapon/reagent_containers/borghypo/peace + name = "Peace Hypospray" + + reagent_ids = list("dizzysolution","tiresolution") + +/obj/item/weapon/reagent_containers/borghypo/peace/hacked + desc = "Everything's peaceful in death!" + icon_state = "borghypo_s" + reagent_ids = list("dizzysolution","tiresolution","tirizene","sulfonal","sodium_thiopental","cyanide","neurotoxin2") \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index e65c3fac38e..26b52650670 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -12,6 +12,7 @@ volume = 15 var/mode = SYRINGE_DRAW var/busy = 0 // needed for delayed drawing of blood + var/projectile_type = /obj/item/projectile/bullet/dart/syringe materials = list(MAT_METAL=10, MAT_GLASS=20) /obj/item/weapon/reagent_containers/syringe/New() @@ -181,7 +182,7 @@ /obj/item/weapon/reagent_containers/syringe/update_icon() - var/rounded_vol = Clamp(round(reagents.total_volume,5), 0, 15) + var/rounded_vol = Clamp(round((reagents.total_volume / volume * 15),5), 0, 15) overlays.Cut() if(ismob(loc)) var/injoverlay @@ -253,4 +254,22 @@ desc = "A syringe recovered from a dread place. It probably isn't wise to use." amount_per_transfer_from_this = 1 volume = 1 - list_reagents = list("gluttonytoxin" = 1) \ No newline at end of file + list_reagents = list("gluttonytoxin" = 1) + +/obj/item/weapon/reagent_containers/syringe/bluespace + name = "bluespace syringe" + desc = "An advanced syringe that can hold 60 units of chemicals" + amount_per_transfer_from_this = 20 + volume = 60 + +/obj/item/weapon/reagent_containers/syringe/noreact + name = "cryo syringe" + desc = "An advanced syringe that stops reagents inside from reacting. It can hold up to 20 units." + volume = 20 + flags = NOREACT + +/obj/item/weapon/reagent_containers/syringe/piercing + name = "piercing syringe" + desc = "A diamond-tipped syringe that pierces armor when launched at high velocity. It can hold up to 10 units." + volume = 10 + projectile_type = /obj/item/projectile/bullet/dart/syringe/piercing \ No newline at end of file diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index ec75e1a1d75..58155f71804 100644 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -83,6 +83,20 @@ playsound(src.loc, 'sound/items/poster_ripped.ogg', 50, 1) qdel(src) +/obj/item/smallDelivery/attack_self_tk(mob/user) + if(ismob(loc)) + var/mob/M = loc + M.unEquip(src) + for(var/X in contents) + var/atom/movable/AM = X + M.put_in_hands(AM) + else + for(var/X in contents) + var/atom/movable/AM = X + AM.forceMove(src.loc) + playsound(src.loc, 'sound/items/poster_ripped.ogg', 50, 1) + qdel(src) + /obj/item/smallDelivery/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/device/destTagger)) var/obj/item/device/destTagger/O = W diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm index 2cdc11189e1..7183b72080f 100644 --- a/code/modules/research/circuitprinter.dm +++ b/code/modules/research/circuitprinter.dm @@ -93,6 +93,10 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). G.amount = round(diamond_amount / MINERAL_MATERIAL_AMOUNT) ..() +/obj/machinery/r_n_d/circuit_imprinter/disconnect_console() + linked_console.linked_imprinter = null + ..() + /obj/machinery/r_n_d/circuit_imprinter/Insert_Item(obj/item/O, mob/user) if (istype(O, /obj/item/stack/sheet/glass) || istype(O, /obj/item/stack/sheet/mineral/gold) || istype(O, /obj/item/stack/sheet/mineral/diamond)) diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index d7e9ef3882f..88f2ecad568 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -71,7 +71,7 @@ materials = list(MAT_METAL = 3000, MAT_PLASMA = 3000, MAT_DIAMOND = 500) reliability = 76 build_path = /obj/item/weapon/reagent_containers/glass/beaker/bluespace - category = list("Misc","Medical Designs") + category = list("Medical Designs", "Bluespace Designs") /datum/design/noreactbeaker name = "Cryostasis Beaker" @@ -84,6 +84,39 @@ build_path = /obj/item/weapon/reagent_containers/glass/beaker/noreact category = list("Medical Designs") +/datum/design/bluespacesyringe + name = "Bluespace Syringe" + desc = "An advanced syringe that can hold 60 units of chemicals" + id = "bluespacesyringe" + req_tech = list("bluespace" = 3, "materials" = 4, "combat" = 2) + build_type = PROTOLATHE + materials = list(MAT_GLASS = 4000, MAT_PLASMA = 2000, MAT_DIAMOND = 2000) + reliability = 76 + build_path = /obj/item/weapon/reagent_containers/syringe/bluespace + category = list("Medical Designs", "Bluespace Designs") + +/datum/design/noreactsyringe + name = "Cryo Syringe" + desc = "An advanced syringe that stops reagents inside from reacting. It can hold up to 20 units." + id = "noreactsyringe" + req_tech = list("materials" = 2, "combat" = 2) + build_type = PROTOLATHE + materials = list(MAT_GLASS = 4000, MAT_GOLD = 1000) + reliability = 76 + build_path = /obj/item/weapon/reagent_containers/syringe/noreact + category = list("Medical Designs") + +/datum/design/piercesyringe + name = "Piercing Syringe" + desc = "A diamond-tipped syringe that pierces armor when launched at high velocity. It can hold up to 10 units." + id = "piercesyringe" + req_tech = list("materials" = 3, "combat" = 3) + build_type = PROTOLATHE + materials = list(MAT_GLASS = 4000, MAT_DIAMOND = 1500) + reliability = 76 + build_path = /obj/item/weapon/reagent_containers/syringe/piercing + category = list("Medical Designs") + /datum/design/bluespacebodybag name = "Bluespace body bag" desc = "A bluespace body bag, powered by experimental bluespace technology. It can hold loads of bodies and the largest of creatures." @@ -132,6 +165,17 @@ build_path = /obj/item/organ/cyberimp/mouth/breathing_tube category = list("Misc", "Medical Designs") +/datum/design/cyberimp_toolset + name = "Toolset Arm implant" + desc = "A stripped-down version of engineering cyborg toolset, designed to be installed on subject's arm." + id = "ci-toolset" + req_tech = list("materials" = 4, "engineering" = 3, "biotech" = 4, "powerstorage" = 4) + build_type = PROTOLATHE | MECHFAB + materials = list (MAT_METAL = 2500, MAT_GLASS = 1500, MAT_SILVER = 1500) + construction_time = 200 + build_path = /obj/item/organ/cyberimp/arm/toolset + category = list("Misc", "Medical Designs") + /datum/design/cyberimp_medical_hud name = "Medical HUD implant" desc = "These cybernetic eyes will display a medical HUD over everything you see. Wiggle eyes to control." diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm index a3b856b5f0f..d48ed0b2974 100644 --- a/code/modules/research/destructive_analyzer.dm +++ b/code/modules/research/destructive_analyzer.dm @@ -40,6 +40,10 @@ Note: Must be placed within 3 tiles of the R&D Console temp_list[O] = text2num(temp_list[O]) return temp_list +/obj/machinery/r_n_d/destructive_analyzer/disconnect_console() + linked_console.linked_destroy = null + ..() + /obj/machinery/r_n_d/destructive_analyzer/Insert_Item(obj/item/O, mob/user) if(user.a_intent != "harm") . = 1 diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm index 70c6c1c0451..7099699fb5a 100644 --- a/code/modules/research/protolathe.dm +++ b/code/modules/research/protolathe.dm @@ -81,6 +81,11 @@ Note: Must be placed west/left of and R&D console to function. materials.retrieve_all() ..() + +/obj/machinery/r_n_d/protolathe/disconnect_console() + linked_console.linked_lathe = null + ..() + /obj/machinery/r_n_d/protolathe/Insert_Item(obj/item/O, mob/user) if(istype(O,/obj/item/stack/sheet)) diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 5da672ae25d..7a191dcab46 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -150,9 +150,22 @@ proc/CallMaterialName(ID) D.loc = src user << "You add the disk to the machine!" else if(!(linked_destroy && linked_destroy.busy) && !(linked_lathe && linked_lathe.busy) && !(linked_imprinter && linked_imprinter.busy)) - ..() - src.updateUsrDialog() - return + . = ..() + updateUsrDialog() + + +/obj/machinery/computer/rdconsole/deconstruction() + if(linked_destroy) + linked_destroy.linked_console = null + linked_destroy = null + if(linked_lathe) + linked_lathe.linked_console = null + linked_lathe = null + if(linked_imprinter) + linked_imprinter.linked_console = null + linked_imprinter = null + ..() + /obj/machinery/computer/rdconsole/emag_act(mob/user) if(!emagged) diff --git a/code/modules/research/rdmachines.dm b/code/modules/research/rdmachines.dm index 847df5d329d..3778e2c1c73 100644 --- a/code/modules/research/rdmachines.dm +++ b/code/modules/research/rdmachines.dm @@ -53,8 +53,7 @@ return 1 if (default_deconstruction_screwdriver(user, "[initial(icon_state)]_t", initial(icon_state), O)) if(linked_console) - linked_console.linked_lathe = null - linked_console = null + disconnect_console() return if(exchange_parts(user, O)) return @@ -67,6 +66,10 @@ else return ..() +//to disconnect the machine from the r&d console it's linked to +/obj/machinery/r_n_d/proc/disconnect_console() + linked_console = null + //proc used to handle inserting items or reagents into r_n_d machines /obj/machinery/r_n_d/proc/Insert_Item(obj/item/I, mob/user) return diff --git a/code/modules/ruins/lavaland_ruin_code.dm b/code/modules/ruins/lavaland_ruin_code.dm index 61a17593f7b..622e3c38a31 100644 --- a/code/modules/ruins/lavaland_ruin_code.dm +++ b/code/modules/ruins/lavaland_ruin_code.dm @@ -223,7 +223,7 @@ name = "ash walker egg" icon = 'icons/mob/lavaland/lavaland_monsters.dmi' icon_state = "large_egg" - mob_species = /datum/species/lizard + mob_species = /datum/species/lizard/ashwalker helmet = /obj/item/clothing/head/helmet/gladiator uniform = /obj/item/clothing/under/gladiator roundstart = FALSE @@ -237,8 +237,6 @@ new_spawn << "Drag corpses to your nest to feed the young, and spawn more Ash Walkers. Bring glory to the tribe!" if(ishuman(new_spawn)) var/mob/living/carbon/human/H = new_spawn - H.dna.species.specflags |= NOBREATH - H.dna.species.specflags |= NOGUNS H.underwear = "Nude" H.update_body() diff --git a/code/modules/security levels/keycard authentication.dm b/code/modules/security_levels/keycard_authentication.dm similarity index 100% rename from code/modules/security levels/keycard authentication.dm rename to code/modules/security_levels/keycard_authentication.dm diff --git a/code/modules/security levels/security levels.dm b/code/modules/security_levels/security_levels.dm similarity index 100% rename from code/modules/security levels/security levels.dm rename to code/modules/security_levels/security_levels.dm diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index 2439ef13ce6..b0c3f08652d 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -1,5 +1,5 @@ //use this define to highlight docking port bounding boxes (ONLY FOR DEBUG USE) -//#define DOCKING_PORT_HIGHLIGHT +// #define DOCKING_PORT_HIGHLIGHT //NORTH default dir /obj/docking_port diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index da204476df6..2bb0a1d1c35 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -92,6 +92,8 @@ SSshuttle.orderhistory += SO SO.generate(pick_n_take(empty_turfs)) + feedback_add_details("cargo_imports", + "[SO.pack.type]|[SO.pack.name]|[SO.pack.cost]") investigate_log("Order #[SO.id] ([SO.pack.name], placed by [key_name(SO.orderer_ckey)]) has shipped.", "cargo") if(SO.pack.dangerous) message_admins("\A [SO.pack.name] ordered by [key_name_admin(SO.orderer_ckey)] has shipped.") diff --git a/code/modules/space transition/space_transition.dm b/code/modules/space_transition/space_transition.dm similarity index 100% rename from code/modules/space transition/space_transition.dm rename to code/modules/space_transition/space_transition.dm diff --git a/code/modules/spells/spell_types/construct_spells.dm b/code/modules/spells/spell_types/construct_spells.dm index d5666f99223..29d1c7cbd2f 100644 --- a/code/modules/spells/spell_types/construct_spells.dm +++ b/code/modules/spells/spell_types/construct_spells.dm @@ -36,7 +36,7 @@ action_icon_state = "lesserconstruct" action_background_icon_state = "bg_cult" - summon_type = list(/turf/closed/wall/cult/artificer) //we don't want artificer-based runed metal farms + summon_type = list(/turf/closed/wall/mineral/cult/artificer) //we don't want artificer-based runed metal farms /obj/effect/proc_holder/spell/aoe_turf/conjure/wall/reinforced name = "Greater Construction" diff --git a/code/modules/spells/spell_types/demon.dm b/code/modules/spells/spell_types/demon.dm index ae32cf92292..12671cfffba 100644 --- a/code/modules/spells/spell_types/demon.dm +++ b/code/modules/spells/spell_types/demon.dm @@ -102,7 +102,7 @@ /obj/effect/proc_holder/spell/targeted/infernal_jaunt name = "Infernal Jaunt" - desc = "Use pools of blood to phase out of existence." + desc = "Use hellfire to phase out of existence." charge_max = 10 clothes_req = 0 selection_type = "range" @@ -165,3 +165,38 @@ src.visible_message("[src] appears in a firey blaze!") playsound(get_turf(src), 'sound/magic/exit_blood.ogg', 100, 1, -1) return 1 + +/obj/effect/proc_holder/spell/targeted/sintouch + name = "Sin Touch" + desc = "Subtly encourage someone to sin." + charge_max = 1800 + clothes_req = 0 + selection_type = "range" + range = 2 + cooldown_min = 0 + overlay = null + include_user = 0 + action_icon_state = "sintouch" + action_background_icon_state = "bg_demon" + phase_allowed = 0 + random_target = 1 + random_target_priority = TARGET_RANDOM + max_targets = 3 + invocation = "TASTE SIN AND INDULGE!!" + invocation_type = "shout" + +/obj/effect/proc_holder/spell/targeted/sintouch/ascended + name = "Greater sin touch" + charge_max = 100 + range = 7 + max_targets = 10 + +/obj/effect/proc_holder/spell/targeted/sintouch/cast(list/targets, mob/living/user = usr) + for(var/mob/living/carbon/human/H in targets) + if(!H.mind) + continue + for(var/datum/objective/sintouched/A in H.mind.objectives) + continue + H.influenceSin() + H.Weaken(2) + H.Stun(2) diff --git a/code/modules/spells/spell_types/lichdom.dm b/code/modules/spells/spell_types/lichdom.dm index c7efcd76349..f6a119c428a 100644 --- a/code/modules/spells/spell_types/lichdom.dm +++ b/code/modules/spells/spell_types/lichdom.dm @@ -1,6 +1,11 @@ /obj/effect/proc_holder/spell/targeted/lichdom name = "Bind Soul" - desc = "A dark necromantic pact that can forever bind your soul to an item of your choosing. So long as both your body and the item remain intact and on the same plane you can revive from death, though the time between reincarnations grows steadily with use." + desc = "A dark necromantic pact that can forever bind your soul to an \ + item of your choosing. So long as both your body and the item remain \ + intact and on the same plane you can revive from death, though the time \ + between reincarnations grows steadily with use, along with the weakness \ + that the new skeleton body will experience upon 'birth'. Note that \ + becoming a lich destroys all internal organs except the brain." school = "necromancy" charge_max = 10 clothes_req = 0 diff --git a/code/modules/surgery/bodyparts/bodyparts.dm b/code/modules/surgery/bodyparts/bodyparts.dm index 266add1b1c5..e92340bee3d 100644 --- a/code/modules/surgery/bodyparts/bodyparts.dm +++ b/code/modules/surgery/bodyparts/bodyparts.dm @@ -283,6 +283,10 @@ /obj/item/bodypart/l_arm name = "left arm" + desc = "Did you know that the word 'sinister' stems originally from the \ + Latin 'sinestra' (left hand), because the left hand was supposed to \ + be possessed by the devil? This arm appears to be possessed by no \ + one though." icon_state = "l_arm" max_damage = 50 body_zone ="l_arm" @@ -292,6 +296,8 @@ /obj/item/bodypart/r_arm name = "right arm" + desc = "Over 87% of humans are right handed. That figure is much lower \ + among humans missing their right arm." icon_state = "r_arm" max_damage = 50 body_zone = "r_arm" @@ -301,6 +307,8 @@ /obj/item/bodypart/l_leg name = "left leg" + desc = "Some athletes prefer to tie their left shoelaces first for good \ + luck. In this instance, it probably would not have helped." icon_state = "l_leg" max_damage = 50 body_zone = "l_leg" @@ -310,6 +318,10 @@ /obj/item/bodypart/r_leg name = "right leg" + desc = "You put your right leg in, your right leg out. In, out, in, out, \ + shake it all about. And apparently then it detaches.\n\ + The hokey pokey has certainly changed a lot since space colonisation." + // alternative spellings of 'pokey' are availible icon_state = "r_leg" max_damage = 50 body_zone = "r_leg" @@ -322,15 +334,9 @@ /obj/item/severedtail name = "tail" - desc = "A severed tail." + desc = "A severed tail. Somewhere, no doubt, a lizard hater is very \ + pleased with themselves." icon = 'icons/obj/surgery.dmi' icon_state = "severedtail" color = "#161" var/markings = "Smooth" - - - - - - - diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm index 0a19f15eed6..0316b3899ff 100644 --- a/code/modules/surgery/bodyparts/dismemberment.dm +++ b/code/modules/surgery/bodyparts/dismemberment.dm @@ -5,7 +5,7 @@ //Dismember a limb /obj/item/bodypart/proc/dismember(dam_type = BRUTE) var/mob/living/carbon/human/H = owner - if(!istype(H) || !H.dna.species.has_dismemberment) // species don't allow dismemberment + if(!istype(H) || (NODISMEMBER in H.dna.species.specflags)) // species don't allow dismemberment return 0 var/obj/item/bodypart/affecting = H.get_bodypart("chest") @@ -35,7 +35,7 @@ /obj/item/bodypart/chest/dismember() var/mob/living/carbon/human/H = owner - if(!istype(H) || !H.dna.species.has_dismemberment) //human's species don't allow dismemberment + if(!istype(H) || (NODISMEMBER in H.dna.species.specflags)) //human's species don't allow dismemberment return 0 var/organ_spilled = 0 diff --git a/code/modules/surgery/bodyparts/helpers.dm b/code/modules/surgery/bodyparts/helpers.dm index 1dd5b807a62..c1980400a45 100644 --- a/code/modules/surgery/bodyparts/helpers.dm +++ b/code/modules/surgery/bodyparts/helpers.dm @@ -70,7 +70,7 @@ .++ /mob/living/proc/get_missing_limbs() - return + return list() /mob/living/carbon/human/get_missing_limbs() var/list/full = list("head", "chest", "r_arm", "l_arm", "r_leg", "l_leg") @@ -153,4 +153,4 @@ if("african2") . = "471c18" if("albino") - . = "fff4e6" \ No newline at end of file + . = "fff4e6" diff --git a/code/modules/surgery/cavity_implant.dm b/code/modules/surgery/cavity_implant.dm index 0db9fca7892..771275b0d55 100644 --- a/code/modules/surgery/cavity_implant.dm +++ b/code/modules/surgery/cavity_implant.dm @@ -31,7 +31,7 @@ user.visible_message("[user] stuffs [tool] into [target]'s [target_zone]!", "You stuff [tool] into [target]'s [target_zone].") user.drop_item() CH.cavity_item = tool - tool.loc = null + tool.loc = target return 1 else if(IC) diff --git a/code/modules/surgery/limb augmentation.dm b/code/modules/surgery/limb_augmentation.dm similarity index 100% rename from code/modules/surgery/limb augmentation.dm rename to code/modules/surgery/limb_augmentation.dm diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index 8bcdd00522e..a13204e8f9a 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -54,7 +54,7 @@ return 0 /obj/item/organ/cyberimp/arm/gun/emp_act(severity) - if(prob(15/severity)) + if(prob(15/severity) && owner) owner << "[src] is hit by EMP!" // give the owner an idea about why his implant is glitching Retract() @@ -168,7 +168,7 @@ /obj/item/organ/cyberimp/arm/toolset name = "integrated toolset implant" desc = "A stripped-down version of engineering cyborg toolset, designed to be installed on subject's arm. Contains all neccessary tools." - origin_tech = "materials=5;engineering=5;biotech=4;powerstorage=3" + origin_tech = "materials=4;engineering=4;biotech=3;powerstorage=4" contents = newlist(/obj/item/weapon/screwdriver/cyborg, /obj/item/weapon/wrench/cyborg, /obj/item/weapon/weldingtool/largetank/cyborg, /obj/item/weapon/crowbar/cyborg, /obj/item/weapon/wirecutters/cyborg, /obj/item/device/multitool/cyborg) diff --git a/code/modules/surgery/prosthetic_replacement.dm b/code/modules/surgery/prosthetic_replacement.dm index 050b0fefbd7..2a4e4a4fbf6 100644 --- a/code/modules/surgery/prosthetic_replacement.dm +++ b/code/modules/surgery/prosthetic_replacement.dm @@ -18,6 +18,7 @@ name = "add prosthetic" implements = list(/obj/item/robot_parts = 100, /obj/item/bodypart = 100) time = 32 + var/organ_rejection_dam = 0 /datum/surgery_step/add_prosthetic/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) var/tool_body_zone @@ -27,8 +28,9 @@ else if(istype(tool, /obj/item/bodypart)) var/obj/item/bodypart/L = tool if(L.status != ORGAN_ROBOTIC) - user << "You need a robotic limb for this." - return -1 //fail + organ_rejection_dam = 10 + if(target.dna.species.id != L.species_id) + organ_rejection_dam = 30 tool_body_zone = L.body_zone if(target_zone == tool_body_zone) //so we can't replace a leg with an arm. user.visible_message("[user] begins to replace [target]'s [parse_zone(target_zone)].", "You begin to replace [target]'s [parse_zone(target_zone)]...") @@ -43,6 +45,10 @@ qdel(tool) else L = tool + user.drop_item() L.attach_limb(target) + if(organ_rejection_dam) + target.adjustToxLoss(organ_rejection_dam) user.visible_message("[user] successfully replaces [target]'s [parse_zone(target_zone)]!", "You succeed in replacing [target]'s [parse_zone(target_zone)].") - return 1 \ No newline at end of file + return 1 + diff --git a/code/modules/tgui/states/hands.dm b/code/modules/tgui/states/hands.dm index 11b1c021cc2..e3e110a2a83 100644 --- a/code/modules/tgui/states/hands.dm +++ b/code/modules/tgui/states/hands.dm @@ -17,4 +17,9 @@ /mob/living/hands_can_use_topic(src_object) if(src_object in get_both_hands(src)) return UI_INTERACTIVE - return UI_CLOSE \ No newline at end of file + return UI_CLOSE + +/mob/living/silicon/robot/hands_can_use_topic(src_object) + if(activated(src_object)) + return UI_INTERACTIVE + return UI_CLOSE diff --git a/code/modules/uplink/uplink_item.dm b/code/modules/uplink/uplink_item.dm index ef819cb7189..e1e6dcdc37e 100644 --- a/code/modules/uplink/uplink_item.dm +++ b/code/modules/uplink/uplink_item.dm @@ -204,10 +204,12 @@ var/list/uplink_items = list() // Global list so we only initialize this once. /datum/uplink_item/dangerous/crossbow name = "Miniature Energy Crossbow" - desc = "A short bow mounted across a tiller in miniature. Small enough to fit into a pocket or slip into a bag \ - unnoticed. It will synthesize and fire bolts tipped with a paralyzing toxin that will \ - briefly stun targets and cause them to slur as if inebriated. It can produce an infinite amount \ - of bolts, but must be manually recharged with each shot." + desc = "A short bow mounted across a tiller in miniature. Small enough to \ + fit into a pocket or slip into a bag unnoticed. It will synthesize \ + and fire bolts tipped with a paralyzing toxin that will briefly stun \ + targets and cause them to slur as if inebriated. It can produce an \ + infinite amount of bolts, but takes time to automatically recharge \ + after each shot." item = /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow cost = 12 surplus = 50 diff --git a/code/orphaned procs/AStar.dm b/code/orphaned_procs/AStar.dm similarity index 100% rename from code/orphaned procs/AStar.dm rename to code/orphaned_procs/AStar.dm diff --git a/code/orphaned procs/dbcore.dm b/code/orphaned_procs/dbcore.dm similarity index 100% rename from code/orphaned procs/dbcore.dm rename to code/orphaned_procs/dbcore.dm diff --git a/code/orphaned procs/priority_announce.dm b/code/orphaned_procs/priority_announce.dm similarity index 89% rename from code/orphaned procs/priority_announce.dm rename to code/orphaned_procs/priority_announce.dm index 6d2cb32e326..38e1a24d5d3 100644 --- a/code/orphaned procs/priority_announce.dm +++ b/code/orphaned_procs/priority_announce.dm @@ -27,9 +27,8 @@ for(var/mob/M in player_list) if(!istype(M,/mob/new_player) && !M.ear_deaf) M << announcement - if(!(M.client.prefs.toggles & SOUND_ANNOUNCEMENTS)) - continue - M << sound(sound) + if(M.client.prefs.toggles & SOUND_ANNOUNCEMENTS) + M << sound(sound) /proc/print_command_report(text = "", title = "Central Command Update") for (var/obj/machinery/computer/communications/C in machines) @@ -49,8 +48,7 @@ if(!istype(M,/mob/new_player) && !M.ear_deaf) M << "[title]
[message]

" if(M.client.prefs.toggles & SOUND_ANNOUNCEMENTS) - continue - if(alert) - M << sound('sound/misc/notice1.ogg') - else - M << sound('sound/misc/notice2.ogg') + if(alert) + M << sound('sound/misc/notice1.ogg') + else + M << sound('sound/misc/notice2.ogg') diff --git a/code/orphaned procs/statistics.dm b/code/orphaned_procs/statistics.dm similarity index 100% rename from code/orphaned procs/statistics.dm rename to code/orphaned_procs/statistics.dm diff --git a/code/world.dm b/code/world.dm index 478b3790af7..9f2eefed96d 100644 --- a/code/world.dm +++ b/code/world.dm @@ -178,6 +178,14 @@ var/last_irc_status = 0 if(ticker.delay_end) world << "Reboot was cancelled by an admin." return + if(mapchanging) + world << "Map change operation detected, delaying reboot." + rebootingpendingmapchange = 1 + spawn(1200) + if(mapchanging) + mapchanging = 0 //map rotation can in some cases be finished but never exit, this is a failsafe + Reboot("Map change timed out", time = 10) + return feedback_set_details("[feedback_c]","[feedback_r]") log_game("Rebooting World. [reason]") kick_clients_in_lobby("The round came to an end with you in the lobby.", 1) //second parameter ensures only afk clients are kicked @@ -386,17 +394,19 @@ var/failed_db_connections = 0 world << "Map rotation has chosen [VM.friendlyname] for next round!" var/datum/votablemap/nextmap - +var/mapchanging = 0 +var/rebootingpendingmapchange = 0 /proc/changemap(var/datum/votablemap/VM) if (!SERVERTOOLS) return if (!istype(VM)) return - + mapchanging = 1 log_game("Changing map to [VM.name]([VM.friendlyname])") var/file = file("setnewmap.bat") file << "\nset MAPROTATE=[VM.name]\n" . = shell("..\\bin\\maprotate.bat") + mapchanging = 0 switch (.) if (null) message_admins("Failed to change map: Could not run map rotator") @@ -426,3 +436,5 @@ var/datum/votablemap/nextmap else message_admins("Failed to change map: Unknown error: Error code #[.]") log_game("Failed to change map: Unknown error: Error code #[.]") + if(rebootingpendingmapchange) + world.Reboot("Map change finished", time = 10) diff --git a/config/admins.txt b/config/admins.txt index 6c712096834..b650f5e1d67 100644 --- a/config/admins.txt +++ b/config/admins.txt @@ -8,6 +8,7 @@ # NOTE: syntax was changed to allow hyphenation of ranknames, since spaces are stripped. # ############################################################################################### Optimumtact = Host +kevinz000 = Host kingofkosmos = Game Master MrStonedOne = Game Master microscopics = Game Master diff --git a/config/game_options.txt b/config/game_options.txt index 914a64e3bcf..eea6aaa7b11 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -197,9 +197,12 @@ EVENTS_MIN_PLAYERS_MUL 1 ALLOW_AI ### Secborg ### -## Uncomment to prevent the secborg module from being chosen +## Uncomment to prevent the security cyborg module from being chosen #DISABLE_SECBORG +### Peacekeeper Borg ### +## Uncomment to prevent the peacekeeper cyborg module from being chosen +#DISABLE_PEACEBORG ### AWAY MISSIONS ### diff --git a/config/lavaRuinBlacklist.txt b/config/lavaRuinBlacklist.txt index 515a68be6b1..8e94e37600e 100644 --- a/config/lavaRuinBlacklist.txt +++ b/config/lavaRuinBlacklist.txt @@ -29,4 +29,7 @@ #_maps/RandomRuins/LavaRuins/lavaland_surface_automated_trade_outpost.dmm #_maps/RandomRuins/LavaRuins/lavaland_surface_xeno_nest.dmm #_maps/RandomRuins/LavaRuins/lavaland_surface_animal_hospital.dmm -#_maps/RandomRuins/LavaRuins/lavaland_gym.dmm \ No newline at end of file +#_maps/RandomRuins/LavaRuins/lavaland_gym.dmm +#_maps/RandomRuins/LavaRuins/lavaland_surface_survivalpod.dmm +#_maps/RandomRuins/LavaRuins/lavaland_surface_wwiioutpost.dmm +#_maps/RandomRuins/LavaRuins/lavaland_surface_tomb.dmm diff --git a/html/changelog.html b/html/changelog.html index 5fabdf64718..9a22fc9aeff 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,171 @@ -->
+

24 May 2016

+

Joan updated:

+
    +
  • You can no longer scribe the Summon Nar-Sie rune under non-valid conditions.
  • +
+

Kiazusho updated:

+
    +
  • Added three new advanced syringes to R&D
  • +
+ +

23 May 2016

+

CoreOverload updated:

+
    +
  • New cyberimplant, "Toolset Arm", is now available in RnD.
  • +
+

coiax, OPDingo updated:

+
    +
  • Crayons and spraycans are now easier to use.
  • +
  • Centcom announce due to budget cuts their supplier of rainbow crayons has been forced to use more... exotic chemicals. Please do not ingest your standard issue crayon.
  • +
+

kevinz000 updated:

+
    +
  • Peacekeeper borgs: Security borgs but without any stuns or restraints! Modules: Harm Alarm, Cookie Dispenser, Energy Bola Launcher, Peace Injector that confuses living things, and a weak holobarrier projector! It also comes with the ability to hug.
  • +
  • Cookie Synthesizer: Self recharging RCD that prints out cookies!
  • +
  • Nanotrasen scientists have added a hugging module to medical and peacekeeper cyborgs to boost emotions during human-cyborg interaction.
  • +
+ +

22 May 2016

+

coiax updated:

+
    +
  • Lavaland monsters now give ruins a wide berth.
  • +
  • Glass tables now break when people are pushed onto them.
  • +
+ +

21 May 2016

+

Iamsaltball updated:

+
    +
  • Heads of Staff now have basic Maint. access.
  • +
+

NicholasM10 updated:

+
    +
  • The chef can now make Khinkali and Khachapuri
  • +
+

coiax updated:

+
    +
  • NOBREATH species (golems, skeletons, abductors, ash walkers, zombies) no longer have or require lungs. They no longer take suffocation/oxyloss damage, cannot give CPR and cannot benefit from CPR. Instead of suffocation damage, during crit they take gradual brute damage.
  • +
  • NOBLOOD (golems, skeletons, abductors, slimepeople, plasmamen) species no longer have or require hearts.
  • +
  • NOBREATH species that require hearts still take damage from heart attacks, as their tissues die and the lack of circulation causes toxins to build up.
  • +
  • NOHUNGER (plasmamen, skeletons) species no longer have appendixes.
  • +
+

coiax, OPDingo updated:

+
    +
  • Renamed and reskinned legion's heart to legion's soul to avoid confusion; it is not a substitute heart, it is a supplemental chest organ.
  • +
  • Legion's souls are now more obviously inert when becoming inert.
  • +
+

nullbear updated:

+
    +
  • Wetness updates less often.
  • +
  • Wetness now stacks. Spraying lube over a tile that already has lube, will make the lube take longer to dry. Likewise, dumping 100 units of lube will take longer to dry than if only 10 units were dumped. (lube used to last just as long, regardless of whether it was 1u, or 100u) There is a limit, however, and you can't stack infinite lube.
  • +
  • Hotter temperatures cause water to evaporate more quickly. At 100C, water will boil away instantly.
  • +
  • About 5 seconds of wetness are removed from a tile for each unit of drying agent. Absorbant Galoshes remain the most effective method of drying, and dry tiles instantly regardless of wetness.
  • +
+ +

20 May 2016

+

KorPhaeron updated:

+
    +
  • The HoS now has a pinpointer, the Warden now has his door remote.
  • +
+

bgobandit updated:

+
    +
  • Nanotrasen has begun to research BZ, a hallucinogenic gas. We trust you will use it responsibly.
  • +
  • BZ causes hallucinations once breathed in and, at high doses, has a chance of doing brain damage.
  • +
  • BZ is known to cause unusual stasis-like behavior in the slime species.
  • +
+

coiax updated:

+
    +
  • Neurotoxin spit can be used as makeshift space propulsion
  • +
+ +

19 May 2016

+

Razharas updated:

+
    +
  • HE pipes once again work in space and in lava.
  • +
  • Space cools down station air again
  • +
+ +

18 May 2016

+

Cruix updated:

+
    +
  • unwrapping an item with telekinesis no longer teleports the item into your hand.
  • +
+

Metacide updated:

+
    +
  • MetaStation: the library and chapel have had windows removed to make them feel more isolated.
  • +
+

MrStonedOne updated:

+
    +
  • Tesla has been rebalanced.
  • +
  • It should now lose balls slower, increase balls faster, and be a bit more aggressive about finding nearby grounding rods.
  • +
  • additional zaps from it's orbiting balls should be a bit more varied, but a touch less powerful.
  • +
+

Robustin updated:

+
    +
  • Lings have a new default ability, Hivemind Link. This lets you bring a neck-grabbed victim into hivemind communications after short period of time. You can talk to victims who are in crit/muted and perhaps persuade them to help you, give you intel, or even a PDA code. The link will stabilize crit victims to help ensure they do not die during the link.
  • +
+

Shadowlight213 updated:

+
    +
  • Cleanbot and floorbot scanning has greatly improved. they should prioritize areas next to them, as well as resolve themselves stacking on the same tiles.
  • +
+

coiax updated:

+
    +
  • Kinetic accelerators only require one hand to be fired, as before
  • +
  • Kinetic accelerators recharge time is multiplied by the number of KAs that person is carrying.
  • +
  • Kinetic accelerators lose their charge quickly if not equipped or being held
  • +
  • Kinetic accelerator modkits (made at R&D or your local Free Golem ship) overcome these flaws
  • +
+ +

15 May 2016

+

Iamgoofball updated:

+
    +
  • Nanotrasen is short on cash, and are now borrowing escape shuttles from other stations, and Space Apartments.
  • +
+

Mercenaryblue updated:

+
    +
  • Turns out a bike horn made with Bananium is flipping awesome! Honk!
  • +
+ +

14 May 2016

+

Cruix updated:

+
    +
  • Fixed foam darts with the safety cap removed being reset when fired.
  • +
  • Added the ability to remove pens from foam darts.
  • +
  • Foam darts with pens inside them are no longer destroyed when fired.
  • +
  • Foam darts no longer drop two darts when fired at a person on a janicart.
  • +
+

Joan updated:

+
    +
  • The Raise Dead rune no longer accepts dead cultists as a sacrifice to raise the dead.
  • +
+

Metacide updated:

+
    +
  • A small update for MetaStation, changes include:
  • +
  • Added extra grounding rods to the engine area to stop camera destruction.
  • +
  • Added canvases and extra crayons to art storage and some easels to maint.
  • +
  • Added formal security uniform crate for parades to the warden's gear area.
  • +
  • The armory securitron now starts active.
  • +
  • The genetics APC now starts unlocked.
  • +
  • Other minor changes and fixes as detailed on the wiki page.
  • +
+

coiax, Nienhaus updated:

+
    +
  • Unfortunately, the Belowyarn toys have been withdrawn from distribution due to Assistants choking on the batteries. Centcom has sent their condolences to the battery manufacturing plant.
  • +
  • We are introducing Oh-cee the original content skeleton figurines. Pull its string, and hear it say a variety of phrases. Not suitable for infants or assistants under 36 months.
  • +
  • Note that pulling the string of all talking toys is now visible to others.
  • +
  • Talking toys produce a lot more chatter than they did before. So do some skeleton "tongues".
  • +
+

pudl updated:

+
    +
  • Adds normal security headsets to security lockers
  • +
+

xxalpha updated:

+
    +
  • Fixed drone dispenser multiplying glass or metal.
  • +
+

13 May 2016

Joan updated:

    @@ -410,237 +575,6 @@
    • Miners can now select explorer belts from the mining vendor using their vouchers, or mining points.
    - -

    26 April 2016

    -

    Iamgoofball & Super Aggro Crag updated:

    -
      -
    • Fluorosulfuric Acid now has doubled acid power.
    • -
    • Fluorosulfuric Acid now does BONUS burn damage scaling on the time it's been inside the consumer.
    • -
    -

    Joan updated:

    -
      -
    • Blobbernauts now spawn at half health.
    • -
    • Blobbernauts regeneration on blob is now 2.5 health per tick, from 5.
    • -
    • Blobbernauts now cost 40 resources to produce, from 30.
    • -
    • Factories supporting blobbernauts do not spawn spores.
    • -
    -

    Lati updated:

    -
      -
    • Syndicate bomb can be only delayed once by pulsing the delay wire. Time gained from this is changed from 10 seconds to 30 seconds.
    • -
    -

    TechnoAlchemisto updated:

    -
      -
    • Goliath plates can now be stacked.
    • -
    -

    phil235 updated:

    -
      -
    • More structures and machines are now breakable and/or destroyable with melee weapon. Additionally, Some structures and machines that are already breakable/destroyable are now affected by more attack methods (gun projectiles, thrown items, melee weapons, xeno/animal attacks, explosions).
    • -
    • Hitting any machine now always makes a sound.
    • -
    • You can hit closed closets/crates and doors by using an item on harm intent (but it doesn't actually hurt them).
    • -
    • you can now burst filled water balloons with sharp items.
    • -
    • Wooden barricade drops wood when destroyed.
    • -
    • Slot machines with coins inside are deconstructable now.
    • -
    - -

    25 April 2016

    -

    Joan updated:

    -
      -
    • You can once again hit a closet or crate with an item to open it.
    • -
    -

    Kor Razharas updated:

    -
      -
    • Adds support for autoclicking.
    • -
    • The Shock Revolver has been added to RnD.
    • -
    • The Laser Gatling Gun has been added to RnD. The Gatling Gun uses autoclick to fire as you hold down the mouse.
    • -
    • The Research Director now starts with a box of firing pins.
    • -
    • The SABR and Stun Revolver recipes have been removed from RnD
    • -
    -

    coiax updated:

    -
      -
    • Laughter demons are like slaughter demons, but they tickle people to death
    • -
    • Slaughter demons are no longer able to cast spells while phased.
    • -
    • Wizards can now speak while ethereal, but still cannot cast spells while ethereal.
    • -
    • Centcom's "drone expert" reports that drones vision filters have been upgraded to include the option of making all beings appear as harmless animals. info: As always, all drone filters are togglable.
    • -
    • As a sign of friendship between the Free Golems and Centcom, they have modified Centcom's jaunter to be worn around a user's waist, which will save them from falling to their death in a chasm.
    • -
    • The Golems warn that these modifications have created a risk of accidental activation when exposed to heavy electromagnetic fields.
    • -
    • Renamed hivelord stabilizer to stabilizing serum.
    • -
    • Centcom regret to inform you that new instabilities with nearby gas giants are causing exospheric bubbles to affect the telecommunications processors. Please contact your supervisor for further instructions.
    • -
    • The Janitor's Union has mandated additional features to station light replacer devices.
    • -
    • The light replacer now can be used on the floor to replace the bulbs of any lights on that tile.
    • -
    • The light replacer now eats replaced bulbs, and after a certain number of bulb fragments (four) will recycle them into a new bulb.
    • -
    • The description of the light replacer is now more informative.
    • -
    • Clown mask appearance toggle now has an action button.
    • -
    - -

    23 April 2016

    -

    Joan updated:

    -
      -
    • Aliens can now open crates and lockers.
    • -
    • Aliens and monkeys can now climb climbable objects, such as crates and sandbags.
    • -
    • Aliens climb very, very fast.
    • -
    -

    Kor updated:

    -
      -
    • Running HE pipes over lava will now heat the gas inside.
    • -
    • Alt+clicking on your mecha (while inside it) will toggle strafing mode.
    • -
    -

    Mercenaryblue updated:

    -
      -
    • Allowed all corgis to wear red wizard hats.
    • -
    -

    TechnoAlchemisto updated:

    -
      -
    • Goliaths now drop bones, and Watchers drop sinews.
    • -
    • You can craft primitive gear from bone and sinew.
    • -
    -

    coiax updated:

    -
      -
    • Non-humans are now able to interact with bee boxes.
    • -
    - -

    22 April 2016

    -

    Bawhoppen updated:

    -
      -
    • Security belts can now hold any type of grenade. This includes barrier grenades.
    • -
    • Janitorial belts are now able to store chem grenades.
    • -
    • Military belts have been given a size upgrade, so they can now hold larger items.
    • -
    • Bandoliers have been given a buff and now can hold a much larger amount of ammunition.
    • -
    -

    nullbear updated:

    -
      -
    • xenobio console is deconstructable again.
    • -
    • syndibomb recipe calls for any matter bin, scaling effectiveness with tier.
    • -
    - -

    21 April 2016

    -

    Kor updated:

    -
      -
    • Mechas can now toggle strafing mode.
    • -
    - -

    20 April 2016

    -

    Erwgd updated:

    -
      -
    • The autolathe can now make trays.
    • -
    -

    Fox McCloud updated:

    -
      -
    • Fixes abductor vests having no cooldown between uses
    • -
    -

    Kor updated:

    -
      -
    • You can now craft boats and oars out of goliath hides. These boats can move in lava.
    • -
    • Added a spooky, upgraded boat to necropolis chests.
    • -
    -

    coiax updated:

    -
      -
    • Slime grinders now cease suction of new slimes while grinding
    • -
    -

    coiax, Joan updated:

    -
      -
    • Drone dufflebags now have their own sprite.
    • -
    -

    kevinz000 updated:

    -
      -
    • Admin Detection Multitool: A multitool that shows when administrators are watching you! Now you can grief in safety!
    • -
    • Syndicate R&D scientists have significantly increased the range of their "AI detection multitools", making them turn yellow when an AI's tracking is near, but not on you just yet!
    • -
    - -

    18 April 2016

    -

    Joan updated:

    -
      -
    • Crates are now dense even when open.
    • -
    • You can now climb onto crates in the same way as table and sandbags, though climbing onto crates is very fast and does not stun you.
    • -
    • You can walk on crates, provided both are closed/open or the crate you're on is closed.
    • -
    • You can't close or open a crate if there's a large mob on top of it.
    • -
    • Stuffing items into a closet or crate is now instant and does not close the closet or crate. Stuffing mobs into a closet or crate still takes time and closes the closet/crate in question.
    • -
    • Crowbars and wirecutters have new inhand sprites. Crowbars can now be distinguished from wrenches in-hand.
    • -
    -

    RandomMarine updated:

    -
      -
    • Cloth items removed from biogenerator. Instead, it can create stacking cloth that crafts those items.
    • -
    • In addition, cloth can be used to create grey jumpsuits, backpacks, dufflebags, bio bags, black shoes, bedsheets, and bandages.
    • -
    • Bedsheets now tear into cloth instead of directly into bandages.
    • -
    -

    Shadowlight213 updated:

    -
      -
    • AI will be notified when one of their cyborgs is detonated.
    • -
    -

    coiax updated:

    -
      -
    • Fixed slime grinders not sucking up more than one slime
    • -
    • Drones now start with a spacious dufflebag full of tools, so they will stop stealing the captain's
    • -
    • Fixed issues with drones wearing chameleon headgear.
    • -
    • Added admin-only "snowflake drone" (also known as drone camogear) headgear.
    • -
    -

    nullbear updated:

    -
      -
    • Fixes air canisters being silent when bashed.
    • -
    - -

    16 April 2016

    -

    Bawhoppen updated:

    -
      -
    • Cryo is no longer god-awful.
    • -
    -

    CoreOverload updated:

    -
      -
    • A lot of items are now exportable in cargo.
    • -
    • Use Export Scanner to check any item's export value.
    • -
    -

    Erwgd updated:

    -
      -
    • Forks, bowls, drinking glasses, shot glasses and shakers can now be made and recycled in the autolathe! Access the designs in the new 'Dinnerware' category.
    • -
    • Kitchen knives have been moved to the Dinnerware category of the autolathe.
    • -
    • Butcher's cleavers can now be made in a hacked autolathe.
    • -
    -

    Fox McCloud updated:

    -
      -
    • Slime batteries now self-recharge.
    • -
    • Adds transference potion. A potion that allows the user to transfer their consciousness to a simple mob.
    • -
    • Adds rainbow slime core reaction that generates a consciousness transference potion when injected with blood.
    • -
    -

    Iamgoofball, Lati, Geo_Jerkal, Tanquetsunami25 updated:

    -
      -
    • Lati requested that the Slime Processor will now automatically scoop up any dead slimes into itself for processing.
    • -
    • Geo_Jerkal requested that you be able to mix Arnold Palmers with Tea and Lemon Juice.
    • -
    • Tanquetsunami25 requested that cyborg be able to boop.
    • -
    -

    Incoming5643 updated:

    -
      -
    • Removed the horrible meme skeletons, please don't sue us.
    • -
    -

    Kor updated:

    -
      -
    • Adrenals, no slips, surplus crates and SUHTANDOS now have minimum population requirements before they can be purchased.
    • -
    -

    KorPhaeron updated:

    -
      -
    • You now need to butcher goliaths and watchers on lavaland to receive their loot. Use the combat knives to do so.
    • -
    -

    Lati updated:

    -
      -
    • Custom floor tiles can now be added to floorbots. They will start replacing other tiles with these tiles if the option is toggled on.
    • -
    -

    coiax updated:

    -
      -
    • Boxstation, not to be outdone by all the other competing station designs, has installed a drone shell dispenser in the Testing Lab, which makes automated drones to help fix the station.
    • -
    • Toy fans, rejoyce! The famous skeleton brothers from the beloved game Belowyarn now have toys that you can win from the arcade machines!
    • -
    • Airlock painters can be printed at your local autolathe
    • -
    • Please do not attempt suicide with the airlock painter or the medical wrench.
    • -
    • Metastation now has a plant DNA manipulator in Botany.
    • -
    • Using the fire extinguisher on yourself or others while in HELP intent will spray you or them, rather than beat their probably flaming body with a metal object.
    • -
    • Alt-clicking extinguishers to empty them now wets the floor underneath them.
    • -
    -

    lordpidey updated:

    -
      -
    • Meth labs can now blow up if you don't purify the ingredients or over-heat the end product.
    • -
    -

    nullbear updated:

    -
      -
    • Added attack verbs for heart and tongue organs
    • -
    • Maximum output of air pumps has been raised.
    • -
GoonStation 13 Development Team diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 7fae8b9309d..11ca7bebea3 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -5011,3 +5011,141 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. targets to divebomb them. TechnoAlchemisto: - rscadd: More items have been added to the mining vendor, check them out! +2016-05-14: + Cruix: + - bugfix: Fixed foam darts with the safety cap removed being reset when fired. + - rscadd: Added the ability to remove pens from foam darts. + - bugfix: Foam darts with pens inside them are no longer destroyed when fired. + - bugfix: Foam darts no longer drop two darts when fired at a person on a janicart. + Joan: + - rscdel: The Raise Dead rune no longer accepts dead cultists as a sacrifice to + raise the dead. + Metacide: + - rscadd: 'A small update for MetaStation, changes include:' + - rscadd: Added extra grounding rods to the engine area to stop camera destruction. + - rscadd: Added canvases and extra crayons to art storage and some easels to maint. + - rscadd: Added formal security uniform crate for parades to the warden's gear area. + - rscadd: The armory securitron now starts active. + - rscadd: The genetics APC now starts unlocked. + - rscadd: Other minor changes and fixes as detailed on the wiki page. + coiax, Nienhaus: + - rscdel: Unfortunately, the Belowyarn toys have been withdrawn from distribution + due to Assistants choking on the batteries. Centcom has sent their condolences + to the battery manufacturing plant. + - rscadd: We are introducing Oh-cee the original content skeleton figurines. Pull + its string, and hear it say a variety of phrases. Not suitable for infants or + assistants under 36 months. + - tweak: Note that pulling the string of all talking toys is now visible to others. + - rscadd: Talking toys produce a lot more chatter than they did before. So do some + skeleton "tongues". + pudl: + - rscadd: Adds normal security headsets to security lockers + xxalpha: + - bugfix: Fixed drone dispenser multiplying glass or metal. +2016-05-15: + Iamgoofball: + - rscadd: Nanotrasen is short on cash, and are now borrowing escape shuttles from + other stations, and Space Apartments. + Mercenaryblue: + - rscadd: Turns out a bike horn made with Bananium is flipping awesome! Honk! +2016-05-18: + Cruix: + - bugfix: unwrapping an item with telekinesis no longer teleports the item into + your hand. + Metacide: + - rscadd: 'MetaStation: the library and chapel have had windows removed to make + them feel more isolated.' + MrStonedOne: + - tweak: Tesla has been rebalanced. + - tweak: It should now lose balls slower, increase balls faster, and be a bit more + aggressive about finding nearby grounding rods. + - tweak: additional zaps from it's orbiting balls should be a bit more varied, but + a touch less powerful. + Robustin: + - rscadd: Lings have a new default ability, Hivemind Link. This lets you bring a + neck-grabbed victim into hivemind communications after short period of time. + You can talk to victims who are in crit/muted and perhaps persuade them to help + you, give you intel, or even a PDA code. The link will stabilize crit victims + to help ensure they do not die during the link. + Shadowlight213: + - bugfix: Cleanbot and floorbot scanning has greatly improved. they should prioritize + areas next to them, as well as resolve themselves stacking on the same tiles. + coiax: + - rscadd: Kinetic accelerators only require one hand to be fired, as before + - rscdel: Kinetic accelerators recharge time is multiplied by the number of KAs + that person is carrying. + - rscdel: Kinetic accelerators lose their charge quickly if not equipped or being + held + - rscadd: Kinetic accelerator modkits (made at R&D or your local Free Golem ship) + overcome these flaws +2016-05-19: + Razharas: + - rscadd: HE pipes once again work in space and in lava. + - rscadd: Space cools down station air again +2016-05-20: + KorPhaeron: + - rscadd: The HoS now has a pinpointer, the Warden now has his door remote. + bgobandit: + - rscadd: Nanotrasen has begun to research BZ, a hallucinogenic gas. We trust you + will use it responsibly. + - rscadd: BZ causes hallucinations once breathed in and, at high doses, has a chance + of doing brain damage. + - rscadd: BZ is known to cause unusual stasis-like behavior in the slime species. + coiax: + - rscadd: Neurotoxin spit can be used as makeshift space propulsion +2016-05-21: + Iamsaltball: + - rscadd: Heads of Staff now have basic Maint. access. + NicholasM10: + - rscadd: The chef can now make Khinkali and Khachapuri + coiax: + - rscdel: NOBREATH species (golems, skeletons, abductors, ash walkers, zombies) + no longer have or require lungs. They no longer take suffocation/oxyloss damage, + cannot give CPR and cannot benefit from CPR. Instead of suffocation damage, + during crit they take gradual brute damage. + - rscdel: NOBLOOD (golems, skeletons, abductors, slimepeople, plasmamen) species + no longer have or require hearts. + - tweak: NOBREATH species that require hearts still take damage from heart attacks, + as their tissues die and the lack of circulation causes toxins to build up. + - rscdel: NOHUNGER (plasmamen, skeletons) species no longer have appendixes. + coiax, OPDingo: + - tweak: Renamed and reskinned legion's heart to legion's soul to avoid confusion; + it is not a substitute heart, it is a supplemental chest organ. + - rscadd: Legion's souls are now more obviously inert when becoming inert. + nullbear: + - tweak: Wetness updates less often. + - rscadd: Wetness now stacks. Spraying lube over a tile that already has lube, will + make the lube take longer to dry. Likewise, dumping 100 units of lube will take + longer to dry than if only 10 units were dumped. (lube used to last just as + long, regardless of whether it was 1u, or 100u) There is a limit, however, and + you can't stack infinite lube. + - tweak: Hotter temperatures cause water to evaporate more quickly. At 100C, water + will boil away instantly. + - rscadd: About 5 seconds of wetness are removed from a tile for each unit of drying + agent. Absorbant Galoshes remain the most effective method of drying, and dry + tiles instantly regardless of wetness. +2016-05-22: + coiax: + - rscdel: Lavaland monsters now give ruins a wide berth. + - bugfix: Glass tables now break when people are pushed onto them. +2016-05-23: + CoreOverload: + - rscadd: New cyberimplant, "Toolset Arm", is now available in RnD. + coiax, OPDingo: + - rscadd: Crayons and spraycans are now easier to use. + - rscdel: Centcom announce due to budget cuts their supplier of rainbow crayons + has been forced to use more... exotic chemicals. Please do not ingest your standard + issue crayon. + kevinz000: + - rscadd: 'Peacekeeper borgs: Security borgs but without any stuns or restraints! + Modules: Harm Alarm, Cookie Dispenser, Energy Bola Launcher, Peace Injector + that confuses living things, and a weak holobarrier projector! It also comes + with the ability to hug.' + - rscadd: 'Cookie Synthesizer: Self recharging RCD that prints out cookies!' + - tweak: Nanotrasen scientists have added a hugging module to medical and peacekeeper + cyborgs to boost emotions during human-cyborg interaction. +2016-05-24: + Joan: + - rscdel: You can no longer scribe the Summon Nar-Sie rune under non-valid conditions. + Kiazusho: + - rscadd: Added three new advanced syringes to R&D diff --git a/html/changelogs/AutoChangeLog-pr-16441.yml b/html/changelogs/AutoChangeLog-pr-16441.yml new file mode 100644 index 00000000000..54eaa1ec569 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-16441.yml @@ -0,0 +1,4 @@ +author: Xhuis +delete-after: True +changes: + - rscadd: "Purge all untruths and honor Ratvar." diff --git a/html/changelogs/AutoChangeLog-pr-17425.yml b/html/changelogs/AutoChangeLog-pr-17425.yml deleted file mode 100644 index eea783590c4..00000000000 --- a/html/changelogs/AutoChangeLog-pr-17425.yml +++ /dev/null @@ -1,12 +0,0 @@ -author: coiax, Nienhaus -delete-after: True -changes: - - rscdel: "Unfortunately, the Belowyarn toys have been withdrawn from distribution -due to Assistants choking on the batteries. Centcom has sent their -condolences to the battery manufacturing plant." - - rscadd: "We are introducing Oh-cee the original content skeleton figurines. -Pull its string, and hear it say a variety of phrases. Not suitable for -infants or assistants under 36 months." - - tweak: "Note that pulling the string of all talking toys is now visible -to others." - - rscadd: "Talking toys produce a lot more chatter than they did before. So do some skeleton \"tongues\"." diff --git a/html/changelogs/AutoChangeLog-pr-17467.yml b/html/changelogs/AutoChangeLog-pr-17467.yml deleted file mode 100644 index fff1f61eee4..00000000000 --- a/html/changelogs/AutoChangeLog-pr-17467.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: pudl -delete-after: True -changes: - - rscadd: "Adds normal security headsets to security lockers" diff --git a/html/changelogs/AutoChangeLog-pr-17563.yml b/html/changelogs/AutoChangeLog-pr-17563.yml deleted file mode 100644 index 34bf6ecd68b..00000000000 --- a/html/changelogs/AutoChangeLog-pr-17563.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: Cruix -delete-after: True -changes: - - bugfix: "Fixed foam darts with the safety cap removed being reset when fired." - - rscadd: "Added the ability to remove pens from foam darts." - - bugfix: "Foam darts with pens inside them are no longer destroyed when fired." - - bugfix: "Foam darts no longer drop two darts when fired at a person on a janicart." diff --git a/html/changelogs/AutoChangeLog-pr-17574.yml b/html/changelogs/AutoChangeLog-pr-17574.yml deleted file mode 100644 index e5d86d1f70f..00000000000 --- a/html/changelogs/AutoChangeLog-pr-17574.yml +++ /dev/null @@ -1,10 +0,0 @@ -author: Metacide -delete-after: True -changes: - - rscadd: "A small update for MetaStation, changes include:" - - rscadd: "Added extra grounding rods to the engine area to stop camera destruction." - - rscadd: "Added canvases and extra crayons to art storage and some easels to maint." - - rscadd: "Added formal security uniform crate for parades to the warden's gear area." - - rscadd: "The armory securitron now starts active." - - rscadd: "The genetics APC now starts unlocked." - - rscadd: "Other minor changes and fixes as detailed on the wiki page." diff --git a/html/changelogs/AutoChangeLog-pr-17575.yml b/html/changelogs/AutoChangeLog-pr-17575.yml deleted file mode 100644 index ce694ffc66a..00000000000 --- a/html/changelogs/AutoChangeLog-pr-17575.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Joan -delete-after: True -changes: - - rscdel: "The Raise Dead rune no longer accepts dead cultists as a sacrifice to raise the dead." diff --git a/html/changelogs/AutoChangeLog-pr-17881.yml b/html/changelogs/AutoChangeLog-pr-17881.yml new file mode 100644 index 00000000000..423828cbef1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-17881.yml @@ -0,0 +1,16 @@ +author: coiax +delete-after: True +changes: + - bugfix: "Fixes bug where bolt of change to the host would kill an attached +guardian." + - bugfix: "Fixes bug where bolt of change to laughter demon would not release +its friends." + - bugfix: "Fixes bug where bolt of change to morphling would not release its +contents." + - bugfix: "Fixes bug where bolt of change transforming someone into a drone +would not give them hacked laws and vision." + - bugfix: "Blobbernauts created by a staff of change are now \"independent\" and +will not decay if seperated from a blob or missing a factory." + - rscadd: "Independent blobbernauts added to gold slime core spawn pool." + - rscadd: "Medical scanners now inform the user if the dead subject is +within the (currently) 120 second defib window." diff --git a/html/changelogs/AutoChangeLog-pr-17890.yml b/html/changelogs/AutoChangeLog-pr-17890.yml new file mode 100644 index 00000000000..0681230702f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-17890.yml @@ -0,0 +1,8 @@ +author: coiax +delete-after: True +changes: + - rscadd: "Ghosts now have the \"Restore Character Name\" verb, which will set +their ghost appearance and dead chat name to their character preferences." + - bugfix: "Mob spawners now give any generated names to the mind of the +spawned mob, meaning ghosts will have the name they had in life." + - bugfix: "Fixes interaction with envy's knife and lavaland spawns." diff --git a/html/changelogs/AutoChangeLog-pr-17913.yml b/html/changelogs/AutoChangeLog-pr-17913.yml new file mode 100644 index 00000000000..b87ef03942e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-17913.yml @@ -0,0 +1,5 @@ +author: coiax +delete-after: True +changes: + - bugfix: "Fixes a bug where swarmers teleporting humans would incorrectly +display a visible message about restraints breaking." diff --git a/icons/effects/187x381.dmi b/icons/effects/187x381.dmi new file mode 100644 index 00000000000..dd43297db53 Binary files /dev/null and b/icons/effects/187x381.dmi differ diff --git a/icons/effects/211x247.dmi b/icons/effects/211x247.dmi new file mode 100644 index 00000000000..35b25ffe146 Binary files /dev/null and b/icons/effects/211x247.dmi differ diff --git a/icons/effects/254x361.dmi b/icons/effects/254x361.dmi new file mode 100644 index 00000000000..4fd6543c32d Binary files /dev/null and b/icons/effects/254x361.dmi differ diff --git a/icons/effects/340x428.dmi b/icons/effects/340x428.dmi new file mode 100644 index 00000000000..eb735c0ba92 Binary files /dev/null and b/icons/effects/340x428.dmi differ diff --git a/icons/effects/400x400.dmi b/icons/effects/400x400.dmi new file mode 100644 index 00000000000..c3fe60bc09c Binary files /dev/null and b/icons/effects/400x400.dmi differ diff --git a/icons/effects/512x512.dmi b/icons/effects/512x512.dmi new file mode 100644 index 00000000000..98116dfdac1 Binary files /dev/null and b/icons/effects/512x512.dmi differ diff --git a/icons/effects/96x96.dmi b/icons/effects/96x96.dmi index a366c61e985..855e6d21922 100644 Binary files a/icons/effects/96x96.dmi and b/icons/effects/96x96.dmi differ diff --git a/icons/effects/beam.dmi b/icons/effects/beam.dmi index 39df6013a71..0aed64e2497 100644 Binary files a/icons/effects/beam.dmi and b/icons/effects/beam.dmi differ diff --git a/icons/effects/clockwork_effects.dmi b/icons/effects/clockwork_effects.dmi new file mode 100644 index 00000000000..ab97d77bf1f Binary files /dev/null and b/icons/effects/clockwork_effects.dmi differ diff --git a/icons/mob/actions.dmi b/icons/mob/actions.dmi index 101f6c87752..d9724cd6f16 100644 Binary files a/icons/mob/actions.dmi and b/icons/mob/actions.dmi differ diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi index 6e7a761a512..db47abd7202 100644 Binary files a/icons/mob/back.dmi and b/icons/mob/back.dmi differ diff --git a/icons/mob/belt.dmi b/icons/mob/belt.dmi index cfef95b74d2..dd9aba227c3 100644 Binary files a/icons/mob/belt.dmi and b/icons/mob/belt.dmi differ diff --git a/icons/mob/clockwork_mobs.dmi b/icons/mob/clockwork_mobs.dmi new file mode 100644 index 00000000000..7a97fa733e6 Binary files /dev/null and b/icons/mob/clockwork_mobs.dmi differ diff --git a/icons/mob/drone.dmi b/icons/mob/drone.dmi index 6b89c577458..8eea3cbb547 100644 Binary files a/icons/mob/drone.dmi and b/icons/mob/drone.dmi differ diff --git a/icons/mob/eyes.dmi b/icons/mob/eyes.dmi index b8f84216bd1..65b0323be4d 100644 Binary files a/icons/mob/eyes.dmi and b/icons/mob/eyes.dmi differ diff --git a/icons/mob/feet.dmi b/icons/mob/feet.dmi index 42a0cd47622..f68b23f4ba2 100644 Binary files a/icons/mob/feet.dmi and b/icons/mob/feet.dmi differ diff --git a/icons/mob/hands.dmi b/icons/mob/hands.dmi index 6a7d0032c7f..39cc5b018dd 100644 Binary files a/icons/mob/hands.dmi and b/icons/mob/hands.dmi differ diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index 7ff3d653fec..38ec8bc7834 100644 Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi index be64c757347..7cd4efa8dff 100644 Binary files a/icons/mob/hud.dmi and b/icons/mob/hud.dmi differ diff --git a/icons/mob/inhands/items_lefthand.dmi b/icons/mob/inhands/items_lefthand.dmi index 97092a8970d..0f522819853 100644 Binary files a/icons/mob/inhands/items_lefthand.dmi and b/icons/mob/inhands/items_lefthand.dmi differ diff --git a/icons/mob/inhands/items_righthand.dmi b/icons/mob/inhands/items_righthand.dmi index 5489dbcec68..0b28b4e4914 100644 Binary files a/icons/mob/inhands/items_righthand.dmi and b/icons/mob/inhands/items_righthand.dmi differ diff --git a/icons/mob/robot_items.dmi b/icons/mob/robot_items.dmi index 0ac3137707f..e3c81e501ee 100644 Binary files a/icons/mob/robot_items.dmi and b/icons/mob/robot_items.dmi differ diff --git a/icons/mob/robot_transformations.dmi b/icons/mob/robot_transformations.dmi index 1cedece909f..f389bb60a02 100644 Binary files a/icons/mob/robot_transformations.dmi and b/icons/mob/robot_transformations.dmi differ diff --git a/icons/mob/robots.dmi b/icons/mob/robots.dmi index 9f1ea3d8562..997d2514ebc 100644 Binary files a/icons/mob/robots.dmi and b/icons/mob/robots.dmi differ diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index 51b53ab2149..d85d188d87d 100644 Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi index c46ff7b511f..836b5da8222 100644 Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ diff --git a/icons/obj/Cryogenic2.dmi b/icons/obj/Cryogenic2.dmi index 6acd646cedf..9ca7ba0aeb2 100644 Binary files a/icons/obj/Cryogenic2.dmi and b/icons/obj/Cryogenic2.dmi differ diff --git a/icons/obj/atmos.dmi b/icons/obj/atmos.dmi index 94c4fb81880..1347149f11a 100644 Binary files a/icons/obj/atmos.dmi and b/icons/obj/atmos.dmi differ diff --git a/icons/obj/clockwork_objects.dmi b/icons/obj/clockwork_objects.dmi new file mode 100644 index 00000000000..01e06461c7a Binary files /dev/null and b/icons/obj/clockwork_objects.dmi differ diff --git a/icons/obj/clothing/belts.dmi b/icons/obj/clothing/belts.dmi index a5e35d0b39a..331e541f7dd 100644 Binary files a/icons/obj/clothing/belts.dmi and b/icons/obj/clothing/belts.dmi differ diff --git a/icons/obj/clothing/clockwork_garb.dmi b/icons/obj/clothing/clockwork_garb.dmi new file mode 100644 index 00000000000..9eed34114bf Binary files /dev/null and b/icons/obj/clothing/clockwork_garb.dmi differ diff --git a/icons/obj/clothing/gloves.dmi b/icons/obj/clothing/gloves.dmi index 7eeccc9a159..fd078d775c1 100644 Binary files a/icons/obj/clothing/gloves.dmi and b/icons/obj/clothing/gloves.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index d3ffb548b3e..abf1e0ef5de 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/icons/obj/clothing/shoes.dmi b/icons/obj/clothing/shoes.dmi index 5a1180d6cc2..a8fe8c5ec68 100644 Binary files a/icons/obj/clothing/shoes.dmi and b/icons/obj/clothing/shoes.dmi differ diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index 37f7af70e08..70eaedb6709 100644 Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi index 7280b7ccd60..8caf8e42270 100644 Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ diff --git a/icons/obj/crayons.dmi b/icons/obj/crayons.dmi index 7d3489285c3..c4eebb65c80 100644 Binary files a/icons/obj/crayons.dmi and b/icons/obj/crayons.dmi differ diff --git a/icons/obj/flora/rocks.dmi b/icons/obj/flora/rocks.dmi index 6708d199b14..f2d49ec016e 100644 Binary files a/icons/obj/flora/rocks.dmi and b/icons/obj/flora/rocks.dmi differ diff --git a/icons/obj/food/food.dmi b/icons/obj/food/food.dmi index 956304f1fba..a41f6186a9c 100644 Binary files a/icons/obj/food/food.dmi and b/icons/obj/food/food.dmi differ diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi index ea31d95cc23..26085e397e9 100644 Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ diff --git a/icons/obj/janitor.dmi b/icons/obj/janitor.dmi index 6bfc5542b58..7f73411024c 100644 Binary files a/icons/obj/janitor.dmi and b/icons/obj/janitor.dmi differ diff --git a/icons/obj/kitchen.dmi b/icons/obj/kitchen.dmi index 6bc0d9685bd..616437a4bce 100644 Binary files a/icons/obj/kitchen.dmi and b/icons/obj/kitchen.dmi differ diff --git a/icons/obj/machines/heavy_lathe.dmi b/icons/obj/machines/heavy_lathe.dmi index 68557159eb4..924606d9847 100644 Binary files a/icons/obj/machines/heavy_lathe.dmi and b/icons/obj/machines/heavy_lathe.dmi differ diff --git a/icons/obj/mysterybox.dmi b/icons/obj/mysterybox.dmi new file mode 100644 index 00000000000..0023dc06637 Binary files /dev/null and b/icons/obj/mysterybox.dmi differ diff --git a/icons/obj/rune.dmi b/icons/obj/rune.dmi index 1fb79b1a770..a6a03098b05 100644 Binary files a/icons/obj/rune.dmi and b/icons/obj/rune.dmi differ diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi index db6939de39d..25628b7309e 100644 Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi index 318eb947598..78bb775406e 100644 Binary files a/icons/obj/surgery.dmi and b/icons/obj/surgery.dmi differ diff --git a/icons/obj/weapons.dmi b/icons/obj/weapons.dmi index 291db24a4e3..6d63afe9d43 100644 Binary files a/icons/obj/weapons.dmi and b/icons/obj/weapons.dmi differ diff --git a/icons/obj/wizard.dmi b/icons/obj/wizard.dmi index d03bd48c49a..9a130739353 100644 Binary files a/icons/obj/wizard.dmi and b/icons/obj/wizard.dmi differ diff --git a/interface/stylesheet.dm b/interface/stylesheet.dm index b2cde1ea35b..c27f5c38893 100644 --- a/interface/stylesheet.dm +++ b/interface/stylesheet.dm @@ -73,6 +73,10 @@ h1.alert, h2.alert {color: #000000;} .holoparasite {color: #35333a;} .holoparasitebold {color: #35333a; font-weight: bold;} +.brass {color: #BE8700;} +.heavy_brass {color: #BE8700; font-weight: bold; font-style: italic;} +.large_brass {color: #BE8700; font-size: 3;} + .revennotice {color: #1d2953;} .revenboldnotice {color: #1d2953; font-weight: bold;} .revenbignotice {color: #1d2953; font-weight: bold; font-size: 3;} @@ -93,7 +97,7 @@ h1.alert, h2.alert {color: #000000;} .papyrus {font-family: "Papyrus", cursive, sans-serif;} .robot {font-family: "Courier New", cursive, sans-serif;} -.command_headset {font-weight: bold; font-size: 3; } +.command_headset {font-weight: bold; font-size: 3;} .big {font-size: 3;} .reallybig {font-size: 4;} .greentext {color: #00FF00; font-size: 3;} diff --git a/sound/AI/harmalarm.ogg b/sound/AI/harmalarm.ogg new file mode 100644 index 00000000000..b9107f6e44d Binary files /dev/null and b/sound/AI/harmalarm.ogg differ diff --git a/sound/effects/clockcult_gateway_active.ogg b/sound/effects/clockcult_gateway_active.ogg new file mode 100644 index 00000000000..86487e3bdd4 Binary files /dev/null and b/sound/effects/clockcult_gateway_active.ogg differ diff --git a/sound/effects/clockcult_gateway_charging.ogg b/sound/effects/clockcult_gateway_charging.ogg new file mode 100644 index 00000000000..1c4e55538ce Binary files /dev/null and b/sound/effects/clockcult_gateway_charging.ogg differ diff --git a/sound/effects/clockcult_gateway_closing.ogg b/sound/effects/clockcult_gateway_closing.ogg new file mode 100644 index 00000000000..1c69f386834 Binary files /dev/null and b/sound/effects/clockcult_gateway_closing.ogg differ diff --git a/sound/effects/clockcult_gateway_disrupted.ogg b/sound/effects/clockcult_gateway_disrupted.ogg new file mode 100644 index 00000000000..7ab734dc6c8 Binary files /dev/null and b/sound/effects/clockcult_gateway_disrupted.ogg differ diff --git a/sound/effects/light_flicker.ogg b/sound/effects/light_flicker.ogg new file mode 100644 index 00000000000..58be2c6ebda Binary files /dev/null and b/sound/effects/light_flicker.ogg differ diff --git a/sound/effects/ratvar_rises.ogg b/sound/effects/ratvar_rises.ogg new file mode 100644 index 00000000000..6201ce790d6 Binary files /dev/null and b/sound/effects/ratvar_rises.ogg differ diff --git a/sound/hallucinations/im_here1.ogg b/sound/hallucinations/im_here1.ogg index b3a7142365e..7a671739b89 100644 Binary files a/sound/hallucinations/im_here1.ogg and b/sound/hallucinations/im_here1.ogg differ diff --git a/sound/hallucinations/im_here2.ogg b/sound/hallucinations/im_here2.ogg index bd841bcdb14..1e289d53f87 100644 Binary files a/sound/hallucinations/im_here2.ogg and b/sound/hallucinations/im_here2.ogg differ diff --git a/sound/hallucinations/turn_around1.ogg b/sound/hallucinations/turn_around1.ogg index 7a83755a93f..ce54f1944e4 100644 Binary files a/sound/hallucinations/turn_around1.ogg and b/sound/hallucinations/turn_around1.ogg differ diff --git a/sound/hallucinations/turn_around2.ogg b/sound/hallucinations/turn_around2.ogg index f4328458dd9..2c3c49466d5 100644 Binary files a/sound/hallucinations/turn_around2.ogg and b/sound/hallucinations/turn_around2.ogg differ diff --git a/sound/magic/clockwork/anima_fragment_attack.ogg b/sound/magic/clockwork/anima_fragment_attack.ogg new file mode 100644 index 00000000000..2c539292cba Binary files /dev/null and b/sound/magic/clockwork/anima_fragment_attack.ogg differ diff --git a/sound/magic/clockwork/anima_fragment_death.ogg b/sound/magic/clockwork/anima_fragment_death.ogg new file mode 100644 index 00000000000..d209bff5a28 Binary files /dev/null and b/sound/magic/clockwork/anima_fragment_death.ogg differ diff --git a/sound/magic/clockwork/fellowship_armory.ogg b/sound/magic/clockwork/fellowship_armory.ogg new file mode 100644 index 00000000000..c108d4621c6 Binary files /dev/null and b/sound/magic/clockwork/fellowship_armory.ogg differ diff --git a/sound/magic/clockwork/invoke_general.ogg b/sound/magic/clockwork/invoke_general.ogg new file mode 100644 index 00000000000..6f0c0dd097a Binary files /dev/null and b/sound/magic/clockwork/invoke_general.ogg differ diff --git a/sound/magic/clockwork/narsie_attack.ogg b/sound/magic/clockwork/narsie_attack.ogg new file mode 100644 index 00000000000..89fac778058 Binary files /dev/null and b/sound/magic/clockwork/narsie_attack.ogg differ diff --git a/sound/magic/clockwork/ratvar_attack.ogg b/sound/magic/clockwork/ratvar_attack.ogg new file mode 100644 index 00000000000..1c17fe10510 Binary files /dev/null and b/sound/magic/clockwork/ratvar_attack.ogg differ diff --git a/tgstation.dme b/tgstation.dme index b36bbfe8d60..e0711e2fae5 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -156,6 +156,7 @@ #include "code\datums\browser.dm" #include "code\datums\datacore.dm" #include "code\datums\datumvars.dm" +#include "code\datums\dna.dm" #include "code\datums\dog_fashion.dm" #include "code\datums\hud.dm" #include "code\datums\martial.dm" @@ -251,14 +252,13 @@ #include "code\game\atoms_movable.dm" #include "code\game\communications.dm" #include "code\game\data_huds.dm" -#include "code\game\dna.dm" #include "code\game\say.dm" #include "code\game\shuttle_engines.dm" #include "code\game\skincmd.dm" #include "code\game\sound.dm" #include "code\game\area\ai_monitored.dm" #include "code\game\area\areas.dm" -#include "code\game\area\Space Station 13 areas.dm" +#include "code\game\area\Space_Station_13_areas.dm" #include "code\game\gamemodes\antag_hud.dm" #include "code\game\gamemodes\antag_spawner.dm" #include "code\game\gamemodes\events.dm" @@ -297,6 +297,7 @@ #include "code\game\gamemodes\changeling\powers\hivemind.dm" #include "code\game\gamemodes\changeling\powers\humanform.dm" #include "code\game\gamemodes\changeling\powers\lesserform.dm" +#include "code\game\gamemodes\changeling\powers\linglink.dm" #include "code\game\gamemodes\changeling\powers\mimic_voice.dm" #include "code\game\gamemodes\changeling\powers\mutations.dm" #include "code\game\gamemodes\changeling\powers\panacea.dm" @@ -306,6 +307,13 @@ #include "code\game\gamemodes\changeling\powers\strained_muscles.dm" #include "code\game\gamemodes\changeling\powers\tiny_prick.dm" #include "code\game\gamemodes\changeling\powers\transform.dm" +#include "code\game\gamemodes\clock_cult\__clock_defines.dm" +#include "code\game\gamemodes\clock_cult\clock_cult.dm" +#include "code\game\gamemodes\clock_cult\clock_mobs.dm" +#include "code\game\gamemodes\clock_cult\clock_objects.dm" +#include "code\game\gamemodes\clock_cult\clock_ratvar.dm" +#include "code\game\gamemodes\clock_cult\clock_scripture.dm" +#include "code\game\gamemodes\clock_cult\clock_unsorted.dm" #include "code\game\gamemodes\cult\cult.dm" #include "code\game\gamemodes\cult\cult_comms.dm" #include "code\game\gamemodes\cult\cult_items.dm" @@ -819,7 +827,7 @@ #include "code\modules\admin\stickyban.dm" #include "code\modules\admin\topic.dm" #include "code\modules\admin\watchlist.dm" -#include "code\modules\admin\DB ban\functions.dm" +#include "code\modules\admin\DB_ban\functions.dm" #include "code\modules\admin\permissionverbs\permissionedit.dm" #include "code\modules\admin\verbs\adminhelp.dm" #include "code\modules\admin\verbs\adminjump.dm" @@ -956,8 +964,8 @@ #include "code\modules\cargo\exports\weapons.dm" #include "code\modules\chatter\chatter.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\client_defines.dm" +#include "code\modules\client\client_procs.dm" #include "code\modules\client\client_colour.dm" #include "code\modules\client\message.dm" #include "code\modules\client\preferences.dm" @@ -1079,53 +1087,53 @@ #include "code\modules\flufftext\Dreaming.dm" #include "code\modules\flufftext\Hallucination.dm" #include "code\modules\flufftext\TextFilters.dm" -#include "code\modules\food&drinks\food.dm" -#include "code\modules\food&drinks\pizzabox.dm" -#include "code\modules\food&drinks\drinks\drinks.dm" -#include "code\modules\food&drinks\drinks\drinks\bottle.dm" -#include "code\modules\food&drinks\drinks\drinks\drinkingglass.dm" -#include "code\modules\food&drinks\food\condiment.dm" -#include "code\modules\food&drinks\food\customizables.dm" -#include "code\modules\food&drinks\food\snacks.dm" -#include "code\modules\food&drinks\food\snacks_bread.dm" -#include "code\modules\food&drinks\food\snacks_burgers.dm" -#include "code\modules\food&drinks\food\snacks_cake.dm" -#include "code\modules\food&drinks\food\snacks_egg.dm" -#include "code\modules\food&drinks\food\snacks_meat.dm" -#include "code\modules\food&drinks\food\snacks_other.dm" -#include "code\modules\food&drinks\food\snacks_pastry.dm" -#include "code\modules\food&drinks\food\snacks_pie.dm" -#include "code\modules\food&drinks\food\snacks_pizza.dm" -#include "code\modules\food&drinks\food\snacks_salad.dm" -#include "code\modules\food&drinks\food\snacks_sandwichtoast.dm" -#include "code\modules\food&drinks\food\snacks_soup.dm" -#include "code\modules\food&drinks\food\snacks_spaghetti.dm" -#include "code\modules\food&drinks\food\snacks_vend.dm" -#include "code\modules\food&drinks\food\snacks\dough.dm" -#include "code\modules\food&drinks\food\snacks\meat.dm" -#include "code\modules\food&drinks\kitchen machinery\food_cart.dm" -#include "code\modules\food&drinks\kitchen machinery\gibber.dm" -#include "code\modules\food&drinks\kitchen machinery\icecream_vat.dm" -#include "code\modules\food&drinks\kitchen machinery\juicer.dm" -#include "code\modules\food&drinks\kitchen machinery\microwave.dm" -#include "code\modules\food&drinks\kitchen machinery\monkeyrecycler.dm" -#include "code\modules\food&drinks\kitchen machinery\processor.dm" -#include "code\modules\food&drinks\kitchen machinery\smartfridge.dm" -#include "code\modules\food&drinks\recipes\drinks_recipes.dm" -#include "code\modules\food&drinks\recipes\food_mixtures.dm" -#include "code\modules\food&drinks\recipes\tablecraft\recipes_bread.dm" -#include "code\modules\food&drinks\recipes\tablecraft\recipes_burger.dm" -#include "code\modules\food&drinks\recipes\tablecraft\recipes_cake.dm" -#include "code\modules\food&drinks\recipes\tablecraft\recipes_egg.dm" -#include "code\modules\food&drinks\recipes\tablecraft\recipes_meat.dm" -#include "code\modules\food&drinks\recipes\tablecraft\recipes_misc.dm" -#include "code\modules\food&drinks\recipes\tablecraft\recipes_pastry.dm" -#include "code\modules\food&drinks\recipes\tablecraft\recipes_pie.dm" -#include "code\modules\food&drinks\recipes\tablecraft\recipes_pizza.dm" -#include "code\modules\food&drinks\recipes\tablecraft\recipes_salad.dm" -#include "code\modules\food&drinks\recipes\tablecraft\recipes_sandwich.dm" -#include "code\modules\food&drinks\recipes\tablecraft\recipes_soup.dm" -#include "code\modules\food&drinks\recipes\tablecraft\recipes_spaghetti.dm" +#include "code\modules\food_and_drinks\food.dm" +#include "code\modules\food_and_drinks\pizzabox.dm" +#include "code\modules\food_and_drinks\drinks\drinks.dm" +#include "code\modules\food_and_drinks\drinks\drinks\bottle.dm" +#include "code\modules\food_and_drinks\drinks\drinks\drinkingglass.dm" +#include "code\modules\food_and_drinks\food\condiment.dm" +#include "code\modules\food_and_drinks\food\customizables.dm" +#include "code\modules\food_and_drinks\food\snacks.dm" +#include "code\modules\food_and_drinks\food\snacks_bread.dm" +#include "code\modules\food_and_drinks\food\snacks_burgers.dm" +#include "code\modules\food_and_drinks\food\snacks_cake.dm" +#include "code\modules\food_and_drinks\food\snacks_egg.dm" +#include "code\modules\food_and_drinks\food\snacks_meat.dm" +#include "code\modules\food_and_drinks\food\snacks_other.dm" +#include "code\modules\food_and_drinks\food\snacks_pastry.dm" +#include "code\modules\food_and_drinks\food\snacks_pie.dm" +#include "code\modules\food_and_drinks\food\snacks_pizza.dm" +#include "code\modules\food_and_drinks\food\snacks_salad.dm" +#include "code\modules\food_and_drinks\food\snacks_sandwichtoast.dm" +#include "code\modules\food_and_drinks\food\snacks_soup.dm" +#include "code\modules\food_and_drinks\food\snacks_spaghetti.dm" +#include "code\modules\food_and_drinks\food\snacks_vend.dm" +#include "code\modules\food_and_drinks\food\snacks\dough.dm" +#include "code\modules\food_and_drinks\food\snacks\meat.dm" +#include "code\modules\food_and_drinks\kitchen_machinery\food_cart.dm" +#include "code\modules\food_and_drinks\kitchen_machinery\gibber.dm" +#include "code\modules\food_and_drinks\kitchen_machinery\icecream_vat.dm" +#include "code\modules\food_and_drinks\kitchen_machinery\juicer.dm" +#include "code\modules\food_and_drinks\kitchen_machinery\microwave.dm" +#include "code\modules\food_and_drinks\kitchen_machinery\monkeyrecycler.dm" +#include "code\modules\food_and_drinks\kitchen_machinery\processor.dm" +#include "code\modules\food_and_drinks\kitchen_machinery\smartfridge.dm" +#include "code\modules\food_and_drinks\recipes\drinks_recipes.dm" +#include "code\modules\food_and_drinks\recipes\food_mixtures.dm" +#include "code\modules\food_and_drinks\recipes\tablecraft\recipes_bread.dm" +#include "code\modules\food_and_drinks\recipes\tablecraft\recipes_burger.dm" +#include "code\modules\food_and_drinks\recipes\tablecraft\recipes_cake.dm" +#include "code\modules\food_and_drinks\recipes\tablecraft\recipes_egg.dm" +#include "code\modules\food_and_drinks\recipes\tablecraft\recipes_meat.dm" +#include "code\modules\food_and_drinks\recipes\tablecraft\recipes_misc.dm" +#include "code\modules\food_and_drinks\recipes\tablecraft\recipes_pastry.dm" +#include "code\modules\food_and_drinks\recipes\tablecraft\recipes_pie.dm" +#include "code\modules\food_and_drinks\recipes\tablecraft\recipes_pizza.dm" +#include "code\modules\food_and_drinks\recipes\tablecraft\recipes_salad.dm" +#include "code\modules\food_and_drinks\recipes\tablecraft\recipes_sandwich.dm" +#include "code\modules\food_and_drinks\recipes\tablecraft\recipes_soup.dm" +#include "code\modules\food_and_drinks\recipes\tablecraft\recipes_spaghetti.dm" #include "code\modules\games\cards.dm" #include "code\modules\games\cas.dm" #include "code\modules\holiday\easter.dm" @@ -1221,6 +1229,7 @@ #include "code\modules\mining\lavaland\necropolis_chests.dm" #include "code\modules\mining\lavaland\weather.dm" #include "code\modules\mining\lavaland\weather_types.dm" +#include "code\modules\mining\lavaland\ruins\gym.dm" #include "code\modules\mob\death.dm" #include "code\modules\mob\interactive.dm" #include "code\modules\mob\inventory.dm" @@ -1535,18 +1544,18 @@ #include "code\modules\power\tesla\coil.dm" #include "code\modules\power\tesla\energy_ball.dm" #include "code\modules\power\tesla\generator.dm" -#include "code\modules\procedural mapping\mapGenerator.dm" -#include "code\modules\procedural mapping\mapGeneratorModule.dm" -#include "code\modules\procedural mapping\mapGeneratorObj.dm" -#include "code\modules\procedural mapping\mapGeneratorReadme.dm" -#include "code\modules\procedural mapping\mapGeneratorModules\helpers.dm" -#include "code\modules\procedural mapping\mapGeneratorModules\nature.dm" -#include "code\modules\procedural mapping\mapGenerators\asteroid.dm" -#include "code\modules\procedural mapping\mapGenerators\cellular.dm" -#include "code\modules\procedural mapping\mapGenerators\lava_river.dm" -#include "code\modules\procedural mapping\mapGenerators\nature.dm" -#include "code\modules\procedural mapping\mapGenerators\shuttle.dm" -#include "code\modules\procedural mapping\mapGenerators\syndicate.dm" +#include "code\modules\procedural_mapping\mapGenerator.dm" +#include "code\modules\procedural_mapping\mapGeneratorModule.dm" +#include "code\modules\procedural_mapping\mapGeneratorObj.dm" +#include "code\modules\procedural_mapping\mapGeneratorReadme.dm" +#include "code\modules\procedural_mapping\mapGeneratorModules\helpers.dm" +#include "code\modules\procedural_mapping\mapGeneratorModules\nature.dm" +#include "code\modules\procedural_mapping\mapGenerators\asteroid.dm" +#include "code\modules\procedural_mapping\mapGenerators\cellular.dm" +#include "code\modules\procedural_mapping\mapGenerators\lava_river.dm" +#include "code\modules\procedural_mapping\mapGenerators\nature.dm" +#include "code\modules\procedural_mapping\mapGenerators\shuttle.dm" +#include "code\modules\procedural_mapping\mapGenerators\syndicate.dm" #include "code\modules\projectiles\ammunition.dm" #include "code\modules\projectiles\firing.dm" #include "code\modules\projectiles\gun.dm" @@ -1656,8 +1665,8 @@ #include "code\modules\research\xenobiology\xenobiology.dm" #include "code\modules\ruins\lavaland_ruin_code.dm" #include "code\modules\ruins\ruin_areas.dm" -#include "code\modules\security levels\keycard authentication.dm" -#include "code\modules\security levels\security levels.dm" +#include "code\modules\security_levels\keycard_authentication.dm" +#include "code\modules\security_levels\security_levels.dm" #include "code\modules\shuttle\assault_pod.dm" #include "code\modules\shuttle\computer.dm" #include "code\modules\shuttle\emergency.dm" @@ -1667,7 +1676,7 @@ #include "code\modules\shuttle\supply.dm" #include "code\modules\shuttle\syndicate.dm" #include "code\modules\shuttle\white_ship.dm" -#include "code\modules\space transition\space_transition.dm" +#include "code\modules\space_transition\space_transition.dm" #include "code\modules\spells\spell.dm" #include "code\modules\spells\spell_types\area_teleport.dm" #include "code\modules\spells\spell_types\barnyard.dm" @@ -1716,7 +1725,7 @@ #include "code\modules\surgery\generic_steps.dm" #include "code\modules\surgery\helpers.dm" #include "code\modules\surgery\implant_removal.dm" -#include "code\modules\surgery\limb augmentation.dm" +#include "code\modules\surgery\limb_augmentation.dm" #include "code\modules\surgery\lipoplasty.dm" #include "code\modules\surgery\organ_manipulation.dm" #include "code\modules\surgery\plastic_surgery.dm" @@ -1765,10 +1774,10 @@ #include "code\modules\vehicles\secway.dm" #include "code\modules\vehicles\speedbike.dm" #include "code\modules\vehicles\vehicle.dm" -#include "code\orphaned procs\AStar.dm" -#include "code\orphaned procs\dbcore.dm" -#include "code\orphaned procs\priority_announce.dm" -#include "code\orphaned procs\statistics.dm" +#include "code\orphaned_procs\AStar.dm" +#include "code\orphaned_procs\dbcore.dm" +#include "code\orphaned_procs\priority_announce.dm" +#include "code\orphaned_procs\statistics.dm" #include "interface\interface.dm" #include "interface\stylesheet.dm" #include "interface\skin.dmf" diff --git a/tgui/assets/tgui.css b/tgui/assets/tgui.css index 1db67cd4b49..325fe771db0 100644 --- a/tgui/assets/tgui.css +++ b/tgui/assets/tgui.css @@ -1 +1 @@ -@charset "utf-8";body,html{box-sizing:border-box;height:100%;margin:0}html{overflow:hidden;cursor:default}body{overflow:auto;font-family:Verdana,Geneva,sans-serif;font-size:12px;color:#fff;background-color:#2a2a2a;background-image:linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2a2a2a',endColorstr='#ff202020',GradientType=0)}*,:after,:before{box-sizing:inherit}h1,h2,h3,h4{display:inline-block;margin:0;padding:6px 0}h1{font-size:18px}h2{font-size:16px}h3{font-size:14px}h4{font-size:12px}body.nanotrasen{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjAiIHZpZXdCb3g9IjAgMCA0MjUgMjAwIiBvcGFjaXR5PSIuMzMiPgogIDxwYXRoIGQ9Im0gMTc4LjAwMzk5LDAuMDM4NjkgLTcxLjIwMzkzLDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTM0LDYuMDI1NTUgbCAwLDE4Ny44NzE0NyBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgNi43NjEzNCw2LjAyNTU0IGwgNTMuMTA3MiwwIGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM1LC02LjAyNTU0IGwgMCwtMTAxLjU0NDAxOCA3Mi4yMTYyOCwxMDQuNjk5Mzk4IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA1Ljc2MDE1LDIuODcwMTYgbCA3My41NTQ4NywwIGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM1LC02LjAyNTU0IGwgMCwtMTg3Ljg3MTQ3IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNi43NjEzNSwtNi4wMjU1NSBsIC01NC43MTY0NCwwIGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNi43NjEzMyw2LjAyNTU1IGwgMCwxMDIuNjE5MzUgTCAxODMuNzY0MTMsMi45MDg4NiBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgLTUuNzYwMTQsLTIuODcwMTcgeiIgLz4KICA8cGF0aCBkPSJNIDQuODQ0NjMzMywyMi4xMDg3NSBBIDEzLjQxMjAzOSwxMi41MDE4NDIgMCAwIDEgMTMuNDc3NTg4LDAuMDM5MjQgbCA2Ni4xMTgzMTUsMCBhIDUuMzY0ODE1OCw1LjAwMDczNyAwIDAgMSA1LjM2NDgyMyw1LjAwMDczIGwgMCw3OS44NzkzMSB6IiAvPgogIDxwYXRoIGQ9Im0gNDIwLjE1NTM1LDE3Ny44OTExOSBhIDEzLjQxMjAzOCwxMi41MDE4NDIgMCAwIDEgLTguNjMyOTUsMjIuMDY5NTEgbCAtNjYuMTE4MzIsMCBhIDUuMzY0ODE1Miw1LjAwMDczNyAwIDAgMSAtNS4zNjQ4MiwtNS4wMDA3NCBsIDAsLTc5Ljg3OTMxIHoiIC8+Cjwvc3ZnPgo8IS0tIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlLiAtLT4KPCEtLSBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS80LjAvIC0tPgo=") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2a2a2a',endColorstr='#ff202020',GradientType=0)}body.nanotrasen .normal{color:#40628a}body.nanotrasen .good{color:#537d29}body.nanotrasen .average{color:#be6209}body.nanotrasen .bad{color:#b00e0e}body.nanotrasen .highlight{color:#8ba5c4}body.nanotrasen main{display:block;margin-top:32px;padding:2px 6px 0}body.nanotrasen hr{height:2px;background-color:#40628a;border:none}body.nanotrasen .hidden{display:none}body.nanotrasen .bar .barText,body.nanotrasen span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.nanotrasen .bold{font-weight:700}body.nanotrasen .italic{font-style:italic}body.nanotrasen [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.nanotrasen div[data-tooltip],body.nanotrasen span[data-tooltip]{position:relative}body.nanotrasen div[data-tooltip]:after,body.nanotrasen span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.nanotrasen div[data-tooltip]:hover:after,body.nanotrasen span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.nanotrasen div[data-tooltip].tooltip-top:after,body.nanotrasen span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-webkit-transform:translateX(-50%) translateY(8px);-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:after,body.nanotrasen div[data-tooltip].tooltip-top:hover:after,body.nanotrasen span[data-tooltip].tooltip-bottom:after,body.nanotrasen span[data-tooltip].tooltip-top:hover:after{-webkit-transform:translateX(-50%) translateY(-8px);-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:after,body.nanotrasen span[data-tooltip].tooltip-bottom:after{top:100%;left:50%}body.nanotrasen div[data-tooltip].tooltip-bottom:hover:after,body.nanotrasen span[data-tooltip].tooltip-bottom:hover:after{-webkit-transform:translateX(-50%) translateY(8px);-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-left:after,body.nanotrasen span[data-tooltip].tooltip-left:after{top:50%;right:100%;-webkit-transform:translateX(8px) translateY(-50%);-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-left:hover:after,body.nanotrasen div[data-tooltip].tooltip-right:after,body.nanotrasen span[data-tooltip].tooltip-left:hover:after,body.nanotrasen span[data-tooltip].tooltip-right:after{-webkit-transform:translateX(-8px) translateY(-50%);-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:after,body.nanotrasen span[data-tooltip].tooltip-right:after{top:50%;left:100%}body.nanotrasen div[data-tooltip].tooltip-right:hover:after,body.nanotrasen span[data-tooltip].tooltip-right:hover:after{-webkit-transform:translateX(8px) translateY(-50%);-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #40628a;background:#272727}body.nanotrasen .bar .barText{position:absolute;top:0;right:3px}body.nanotrasen .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#40628a}body.nanotrasen .bar .barFill.good{background-color:#537d29}body.nanotrasen .bar .barFill.average{background-color:#be6209}body.nanotrasen .bar .barFill.bad{background-color:#b00e0e}body.nanotrasen span.button{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.nanotrasen span.button .fa{padding-right:2px}body.nanotrasen span.button.normal{transition:background-color .5s;background-color:#40628a}body.nanotrasen span.button.normal.active:focus,body.nanotrasen span.button.normal.active:hover{transition:background-color .25s;background-color:#4f78aa;outline:0}body.nanotrasen span.button.disabled{transition:background-color .5s;background-color:#999}body.nanotrasen span.button.disabled.active:focus,body.nanotrasen span.button.disabled.active:hover{transition:background-color .25s;background-color:#a8a8a8;outline:0}body.nanotrasen span.button.selected{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.selected.active:focus,body.nanotrasen span.button.selected.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.caution{transition:background-color .5s;background-color:#9a9d00}body.nanotrasen span.button.caution.active:focus,body.nanotrasen span.button.caution.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.nanotrasen span.button.danger{transition:background-color .5s;background-color:#9d0808}body.nanotrasen span.button.danger.active:focus,body.nanotrasen span.button.danger.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.nanotrasen span.button.gridable{width:125px;margin:2px 0}body.nanotrasen span.button+span:not(.button),body.nanotrasen span:not(.button)+span.button{margin-left:5px}body.nanotrasen div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000);background-color:rgba(0,0,0,.33);box-shadow:inset 0 0 5px rgba(0,0,0,.5)}body.nanotrasen div.display header,body.nanotrasen div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #40628a}body.nanotrasen div.display header .buttonRight,body.nanotrasen div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.nanotrasen div.display article,body.nanotrasen div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.nanotrasen input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#000;background-color:#fff;border:1px solid #272727}body.nanotrasen input::-webkit-input-placeholder{color:#999}body.nanotrasen input::-moz-placeholder{color:#999}body.nanotrasen input:-ms-input-placeholder{color:#999}body.nanotrasen input::placeholder{color:#999}body.nanotrasen input::-ms-clear{display:none}body.nanotrasen svg.linegraph{overflow:hidden}body.nanotrasen div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px)}body.nanotrasen div.notice .label{color:#000}body.nanotrasen div.notice .content:only-of-type{padding:0}body.nanotrasen div.notice hr{background-color:#272727}body.nanotrasen div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-webkit-transform:rotate(1turn);-ms-transform:rotate(1turn);transform:rotate(1turn)}body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.nanotrasen section{display:table-row;width:100%}body.nanotrasen section:not(:first-child){padding-top:4px}body.nanotrasen section.candystripe:nth-child(even){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.nanotrasen section .label{width:1%;padding-right:32px;white-space:nowrap;color:#8ba5c4}body.nanotrasen section .content:not(:last-child){padding-right:16px}body.nanotrasen section .line{width:100%}body.nanotrasen div.subdisplay{width:100%;margin:0}body.nanotrasen header.titlebar .close,body.nanotrasen header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#8ba5c4}body.nanotrasen header.titlebar .close:hover,body.nanotrasen header.titlebar .minimize:hover{color:#9cb2cd}body.nanotrasen header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.nanotrasen header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.nanotrasen header.titlebar .title{position:absolute;top:6px;left:46px;color:#8ba5c4;font-size:16px;white-space:nowrap}body.nanotrasen header.titlebar .minimize{position:absolute;top:6px;right:46px}body.nanotrasen header.titlebar .close{position:absolute;top:4px;right:12px}body.syndicate{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjAiIHZpZXdCb3g9IjAgMCAyMDAgMjg5Ljc0MiIgb3BhY2l0eT0iLjMzIj4KICA8cGF0aCBkPSJtIDkzLjUzNzY3NywwIGMgLTE4LjExMzEyNSwwIC0zNC4yMjAxMzMsMy4xMTE2NCAtNDguMzIzNDg0LDkuMzM0MzcgLTEzLjk2NTA5Miw2LjIyMTY3IC0yNC42MTI0NDIsMTUuMDcxMTQgLTMxLjk0MDY1MSwyNi41NDcxIC03LjE4OTkzOTgsMTEuMzM3ODkgLTEwLjMwMTIyNjYsMjQuNzQ5MTEgLTEwLjMwMTIyNjYsNDAuMjM0NzggMCwxMC42NDY2MiAyLjcyNTAwMjYsMjAuNDY0NjUgOC4xNzUxMTE2LDI5LjQ1MjU4IDUuNjE1Mjc3LDguOTg2ODYgMTQuMDM4Mjc3LDE3LjM1MjA0IDI1LjI2ODgyMSwyNS4wOTQzNiAxMS4yMzA1NDQsNy42MDUzMSAyNi41MDc0MjEsMTUuNDE4MzUgNDUuODMwNTE0LDIzLjQzNzgyIDE5Ljk4Mzc0OCw4LjI5NTU3IDM0Ljg0ODg0OCwxNS41NTQ3MSA0NC41OTI5OTgsMjEuNzc2MzggOS43NDQxNCw2LjIyMjczIDE2Ljc2MTcsMTIuODU4NSAyMS4wNTU3MiwxOS45MDk1MSA0LjI5NDA0LDcuMDUyMDggNi40NDE5MywxNS43NjQwOCA2LjQ0MTkzLDI2LjEzNDU5IDAsMTYuMTc3MDIgLTUuMjAxOTYsMjguNDgyMjIgLTE1LjYwNjczLDM2LjkxNjgyIC0xMC4yMzk2LDguNDM0NyAtMjUuMDIyMDMsMTIuNjUyMyAtNDQuMzQ1MTY5LDEyLjY1MjMgLTE0LjAzODE3MSwwIC0yNS41MTUyNDcsLTEuNjU5NCAtMzQuNDMzNjE4LC00Ljk3NzcgLTguOTE4MzcsLTMuNDU2NiAtMTYuMTg1NTcyLC04LjcxMTMgLTIxLjgwMDgzOSwtMTUuNzYzMyAtNS42MTUyNzcsLTcuMDUyMSAtMTAuMDc0Nzk1LC0xNi42NjA4OCAtMTMuMzc3ODk5LC0yOC44MjgxMiBsIC0yNC43NzMxNjI2MjkzOTQ1LDAgMCw1Ni44MjYzMiBDIDMzLjg1Njc2OSwyODYuMDc2MDEgNjMuNzQ5MDQsMjg5Ljc0MjAxIDg5LjY3ODM4MywyODkuNzQyMDEgYyAxNi4wMjAwMjcsMCAzMC43MTk3ODcsLTEuMzgyNyA0NC4wOTczMzcsLTQuMTQ3OSAxMy41NDI3MiwtMi45MDQzIDI1LjEwNDEsLTcuNDY3NiAzNC42ODMwOSwtMTMuNjg5MyA5Ljc0NDEzLC02LjM1OTcgMTcuMzQwNDIsLTE0LjUxOTUgMjIuNzkwNTIsLTI0LjQ3NDggNS40NTAxLC0xMC4wOTMzMiA4LjE3NTExLC0yMi4zOTk1OSA4LjE3NTExLC0zNi45MTY4MiAwLC0xMi45OTc2NCAtMy4zMDIxLC0yNC4zMzUzOSAtOS45MDgyOSwtMzQuMDE0NiAtNi40NDEwNSwtOS44MTcyNSAtMTUuNTI1NDUsLTE4LjUyNzA3IC0yNy4yNTE0NiwtMjYuMTMxMzMgLTExLjU2MDg1LC03LjYwNDI3IC0yNy45MTA4MywtMTUuODMxNDIgLTQ5LjA1MDY2LC0yNC42ODAyMiAtMTcuNTA2NDQsLTcuMTkwMTIgLTMwLjcxOTY2OCwtMTMuNjg5NDggLTM5LjYzODAzOCwtMTkuNDk3MDEgLTguOTE4MzcxLC01LjgwNzUyIC0xOC42MDc0NzQsLTEyLjQzNDA5IC0yNC4wOTY1MjQsLTE4Ljg3NDE3IC01LjQyNjA0MywtNi4zNjYxNiAtOS42NTg4MjYsLTE1LjA3MDAzIC05LjY1ODgyNiwtMjQuODg3MjkgMCwtOS4yNjQwMSAyLjA3NTQxNCwtMTcuMjEzNDUgNi4yMjM0NTQsLTIzLjg1MDMzIDExLjA5ODI5OCwtMTQuMzk3NDggNDEuMjg2NjM4LC0xLjc5NTA3IDQ1LjA3NTYwOSwyNC4zNDc2MiA0LjgzOTM5Miw2Ljc3NDkxIDguODQ5MzUsMTYuMjQ3MjkgMTIuMDI5NTE1LDI4LjQxNTYgbCAyMC41MzIzNCwwIDAsLTU1Ljk5OTY3IGMgLTQuNDc4MjUsLTUuOTI0NDggLTkuOTU0ODgsLTEwLjYzMjIyIC0xNS45MDgzNywtMTQuMzc0MTEgMS42NDA1NSwwLjQ3OTA1IDMuMTkwMzksMS4wMjM3NiA0LjYzODY1LDEuNjQwMjQgNi40OTg2MSwyLjYyNjA3IDEyLjE2NzkzLDcuMzI3NDcgMTcuMDA3MywxNC4xMDM0NSA0LjgzOTM5LDYuNzc0OTEgOC44NDkzNSwxNi4yNDU2NyAxMi4wMjk1MiwyOC40MTM5NyAwLDAgOC40ODEyOCwtMC4xMjg5NCA4LjQ4OTc4LC0wLjAwMiAwLjQxNzc2LDYuNDE0OTQgLTEuNzUzMzksOS40NTI4NiAtNC4xMjM0MiwxMi41NjEwNCAtMi40MTc0LDMuMTY5NzggLTUuMTQ0ODYsNi43ODk3MyAtNC4wMDI3OCwxMy4wMDI5IDEuNTA3ODYsOC4yMDMxOCAxMC4xODM1NCwxMC41OTY0MiAxNC42MjE5NCw5LjMxMTU0IC0zLjMxODQyLC0wLjQ5OTExIC01LjMxODU1LC0xLjc0OTQ4IC01LjMxODU1LC0xLjc0OTQ4IDAsMCAxLjg3NjQ2LDAuOTk4NjggNS42NTExNywtMS4zNTk4MSAtMy4yNzY5NSwwLjk1NTcxIC0xMC43MDUyOSwtMC43OTczOCAtMTEuODAxMjUsLTYuNzYzMTMgLTAuOTU3NTIsLTUuMjA4NjEgMC45NDY1NCwtNy4yOTUxNCAzLjQwMTEzLC0xMC41MTQ4MiAyLjQ1NDYyLC0zLjIxOTY4IDUuMjg0MjYsLTYuOTU4MzEgNC42ODQzLC0xNC40ODgyNCBsIDAuMDAzLDAuMDAyIDguOTI2NzYsMCAwLC01NS45OTk2NyBjIC0xNS4wNzEyNSwtMy44NzE2OCAtMjcuNjUzMTQsLTYuMzYwNDIgLTM3Ljc0NjcxLC03LjQ2NTg2IC05Ljk1NTMxLC0xLjEwNzU1IC0yMC4xODgyMywtMS42NTk4MSAtMzAuNjk2NjEzLC0xLjY1OTgxIHogbSA3MC4zMjE2MDMsMTcuMzA4OTMgMC4yMzgwNSw0MC4zMDQ5IGMgMS4zMTgwOCwxLjIyNjY2IDIuNDM5NjUsMi4yNzgxNSAzLjM0MDgxLDMuMTA2MDIgNC44MzkzOSw2Ljc3NDkxIDguODQ5MzQsMTYuMjQ1NjYgMTIuMDI5NTEsMjguNDEzOTcgbCAyMC41MzIzNCwwIDAsLTU1Ljk5OTY3IGMgLTYuNjc3MzEsLTQuNTkzODEgLTE5LjgzNjQzLC0xMC40NzMwOSAtMzYuMTQwNzEsLTE1LjgyNTIyIHogbSAtMjguMTIwNDksNS42MDU1MSA4LjU2NDc5LDE3LjcxNjU1IGMgLTExLjk3MDM3LC02LjQ2Njk3IC0xMy44NDY3OCwtOS43MTcyNiAtOC41NjQ3OSwtMTcuNzE2NTUgeiBtIDIyLjc5NzA1LDAgYyAyLjc3MTUsNy45OTkyOSAxLjc4NzQxLDExLjI0OTU4IC00LjQ5MzU0LDE3LjcxNjU1IGwgNC40OTM1NCwtMTcuNzE2NTUgeiBtIDE1LjIyMTk1LDI0LjAwODQ4IDguNTY0NzksMTcuNzE2NTUgYyAtMTEuOTcwMzgsLTYuNDY2OTcgLTEzLjg0Njc5LC05LjcxNzI2IC04LjU2NDc5LC0xNy43MTY1NSB6IG0gMjIuNzk3MDQsMCBjIDIuNzcxNSw3Ljk5OTI5IDEuNzg3NDEsMTEuMjQ5NTggLTQuNDkzNTQsMTcuNzE2NTUgbCA0LjQ5MzU0LC0xNy43MTY1NSB6IG0gLTk5LjExMzg0LDIuMjA3NjQgOC41NjQ3OSwxNy43MTY1NSBjIC0xMS45NzAzODIsLTYuNDY2OTcgLTEzLjg0Njc4MiwtOS43MTcyNiAtOC41NjQ3OSwtMTcuNzE2NTUgeiBtIDIyLjc5NTQyLDAgYyAyLjc3MTUsNy45OTkyOSAxLjc4NzQxLDExLjI0OTU4IC00LjQ5MzU0LDE3LjcxNjU1IGwgNC40OTM1NCwtMTcuNzE2NTUgeiIgLz4KPC9zdmc+CjwhLS0gVGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIGEgQ3JlYXRpdmUgQ29tbW9ucyBBdHRyaWJ1dGlvbi1TaGFyZUFsaWtlIDQuMCBJbnRlcm5hdGlvbmFsIExpY2Vuc2UuIC0tPgo8IS0tIGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LXNhLzQuMC8gLS0+Cg==") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#750000 0,#340404);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff750000',endColorstr='#ff340404',GradientType=0)}body.syndicate .normal{color:#40628a}body.syndicate .good{color:#73e573}body.syndicate .average{color:#be6209}body.syndicate .bad{color:#b00e0e}body.syndicate .highlight{color:#000}body.syndicate main{display:block;margin-top:32px;padding:2px 6px 0}body.syndicate hr{height:2px;background-color:#272727;border:none}body.syndicate .hidden{display:none}body.syndicate .bar .barText,body.syndicate span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.syndicate .bold{font-weight:700}body.syndicate .italic{font-style:italic}body.syndicate [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.syndicate div[data-tooltip],body.syndicate span[data-tooltip]{position:relative}body.syndicate div[data-tooltip]:after,body.syndicate span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.syndicate div[data-tooltip]:hover:after,body.syndicate span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.syndicate div[data-tooltip].tooltip-top:after,body.syndicate span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-webkit-transform:translateX(-50%) translateY(8px);-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-bottom:after,body.syndicate div[data-tooltip].tooltip-top:hover:after,body.syndicate span[data-tooltip].tooltip-bottom:after,body.syndicate span[data-tooltip].tooltip-top:hover:after{-webkit-transform:translateX(-50%) translateY(-8px);-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:after,body.syndicate span[data-tooltip].tooltip-bottom:after{top:100%;left:50%}body.syndicate div[data-tooltip].tooltip-bottom:hover:after,body.syndicate span[data-tooltip].tooltip-bottom:hover:after{-webkit-transform:translateX(-50%) translateY(8px);-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-left:after,body.syndicate span[data-tooltip].tooltip-left:after{top:50%;right:100%;-webkit-transform:translateX(8px) translateY(-50%);-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-left:hover:after,body.syndicate div[data-tooltip].tooltip-right:after,body.syndicate span[data-tooltip].tooltip-left:hover:after,body.syndicate span[data-tooltip].tooltip-right:after{-webkit-transform:translateX(-8px) translateY(-50%);-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:after,body.syndicate span[data-tooltip].tooltip-right:after{top:50%;left:100%}body.syndicate div[data-tooltip].tooltip-right:hover:after,body.syndicate span[data-tooltip].tooltip-right:hover:after{-webkit-transform:translateX(8px) translateY(-50%);-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #000;background:#272727}body.syndicate .bar .barText{position:absolute;top:0;right:3px}body.syndicate .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#000}body.syndicate .bar .barFill.good{background-color:#73e573}body.syndicate .bar .barFill.average{background-color:#be6209}body.syndicate .bar .barFill.bad{background-color:#b00e0e}body.syndicate span.button{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.syndicate span.button .fa{padding-right:2px}body.syndicate span.button.normal{transition:background-color .5s;background-color:#397439}body.syndicate span.button.normal.active:focus,body.syndicate span.button.normal.active:hover{transition:background-color .25s;background-color:#4a964a;outline:0}body.syndicate span.button.disabled{transition:background-color .5s;background-color:#363636}body.syndicate span.button.disabled.active:focus,body.syndicate span.button.disabled.active:hover{transition:background-color .25s;background-color:#545454;outline:0}body.syndicate span.button.selected{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.selected.active:focus,body.syndicate span.button.selected.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.caution{transition:background-color .5s;background-color:#be6209}body.syndicate span.button.caution.active:focus,body.syndicate span.button.caution.active:hover{transition:background-color .25s;background-color:#eb790b;outline:0}body.syndicate span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.syndicate span.button.danger.active:focus,body.syndicate span.button.danger.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.syndicate span.button.gridable{width:125px;margin:2px 0}body.syndicate span.button+span:not(.button),body.syndicate span:not(.button)+span.button{margin-left:5px}body.syndicate div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000);background-color:rgba(0,0,0,.5);box-shadow:inset 0 0 5px rgba(0,0,0,.75)}body.syndicate div.display header,body.syndicate div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #272727}body.syndicate div.display header .buttonRight,body.syndicate div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.syndicate div.display article,body.syndicate div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.syndicate input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#fff;background-color:#9d0808;border:1px solid #272727}body.syndicate input::-webkit-input-placeholder{color:#999}body.syndicate input::-moz-placeholder{color:#999}body.syndicate input:-ms-input-placeholder{color:#999}body.syndicate input::placeholder{color:#999}body.syndicate input::-ms-clear{display:none}body.syndicate svg.linegraph{overflow:hidden}body.syndicate div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#750000;background-image:repeating-linear-gradient(-45deg,#750000,#750000 10px,#910101 0,#910101 20px)}body.syndicate div.notice .label{color:#000}body.syndicate div.notice .content:only-of-type{padding:0}body.syndicate div.notice hr{background-color:#272727}body.syndicate div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-webkit-transform:rotate(1turn);-ms-transform:rotate(1turn);transform:rotate(1turn)}body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.syndicate section{display:table-row;width:100%}body.syndicate section:not(:first-child){padding-top:4px}body.syndicate section.candystripe:nth-child(even){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.syndicate section .label{width:1%;padding-right:32px;white-space:nowrap;color:#fff}body.syndicate section .content:not(:last-child){padding-right:16px}body.syndicate section .line{width:100%}body.syndicate div.subdisplay{width:100%;margin:0}body.syndicate header.titlebar .close,body.syndicate header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#e74242}body.syndicate header.titlebar .close:hover,body.syndicate header.titlebar .minimize:hover{color:#eb5e5e}body.syndicate header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.syndicate header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.syndicate header.titlebar .title{position:absolute;top:6px;left:46px;color:#e74242;font-size:16px;white-space:nowrap}body.syndicate header.titlebar .minimize{position:absolute;top:6px;right:46px}body.syndicate header.titlebar .close{position:absolute;top:4px;right:12px}.no-icons header.titlebar .statusicon{font-size:20px}.no-icons header.titlebar .statusicon:after{content:"O"}.no-icons header.titlebar .minimize{top:-2px;font-size:20px}.no-icons header.titlebar .minimize:after{content:"—"}.no-icons header.titlebar .close{font-size:20px}.no-icons header.titlebar .close:after{content:"X"} \ No newline at end of file +@charset "utf-8";body,html{box-sizing:border-box;height:100%;margin:0}html{overflow:hidden;cursor:default}body{overflow:auto;font-family:Verdana,Geneva,sans-serif;font-size:12px;color:#fff;background-color:#2a2a2a;background-image:linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2a2a2a',endColorstr='#ff202020',GradientType=0)}*,:after,:before{box-sizing:inherit}h1,h2,h3,h4{display:inline-block;margin:0;padding:6px 0}h1{font-size:18px}h2{font-size:16px}h3{font-size:14px}h4{font-size:12px}body.nanotrasen{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4wIiB2aWV3Qm94PSIwIDAgNDI1IDIwMCIgb3BhY2l0eT0iLjMzIj4NCiAgPHBhdGggZD0ibSAxNzguMDAzOTksMC4wMzg2OSAtNzEuMjAzOTMsMCBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgLTYuNzYxMzQsNi4wMjU1NSBsIDAsMTg3Ljg3MTQ3IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM0LDYuMDI1NTQgbCA1My4xMDcyLDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDYuNzYxMzUsLTYuMDI1NTQgbCAwLC0xMDEuNTQ0MDE4IDcyLjIxNjI4LDEwNC42OTkzOTggYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDUuNzYwMTUsMi44NzAxNiBsIDczLjU1NDg3LDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDYuNzYxMzUsLTYuMDI1NTQgbCAwLC0xODcuODcxNDcgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTM1LC02LjAyNTU1IGwgLTU0LjcxNjQ0LDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTMzLDYuMDI1NTUgbCAwLDEwMi42MTkzNSBMIDE4My43NjQxMywyLjkwODg2IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNS43NjAxNCwtMi44NzAxNyB6IiAvPg0KICA8cGF0aCBkPSJNIDQuODQ0NjMzMywyMi4xMDg3NSBBIDEzLjQxMjAzOSwxMi41MDE4NDIgMCAwIDEgMTMuNDc3NTg4LDAuMDM5MjQgbCA2Ni4xMTgzMTUsMCBhIDUuMzY0ODE1OCw1LjAwMDczNyAwIDAgMSA1LjM2NDgyMyw1LjAwMDczIGwgMCw3OS44NzkzMSB6IiAvPg0KICA8cGF0aCBkPSJtIDQyMC4xNTUzNSwxNzcuODkxMTkgYSAxMy40MTIwMzgsMTIuNTAxODQyIDAgMCAxIC04LjYzMjk1LDIyLjA2OTUxIGwgLTY2LjExODMyLDAgYSA1LjM2NDgxNTIsNS4wMDA3MzcgMCAwIDEgLTUuMzY0ODIsLTUuMDAwNzQgbCAwLC03OS44NzkzMSB6IiAvPg0KPC9zdmc+DQo8IS0tIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlLiAtLT4NCjwhLS0gaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvNC4wLyAtLT4NCg==") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff2a2a2a',endColorstr='#ff202020',GradientType=0)}body.nanotrasen .normal{color:#40628a}body.nanotrasen .good{color:#537d29}body.nanotrasen .average{color:#be6209}body.nanotrasen .bad{color:#b00e0e}body.nanotrasen .highlight{color:#8ba5c4}body.nanotrasen main{display:block;margin-top:32px;padding:2px 6px 0}body.nanotrasen hr{height:2px;background-color:#40628a;border:none}body.nanotrasen .hidden{display:none}body.nanotrasen .bar .barText,body.nanotrasen span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.nanotrasen .bold{font-weight:700}body.nanotrasen .italic{font-style:italic}body.nanotrasen [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.nanotrasen div[data-tooltip],body.nanotrasen span[data-tooltip]{position:relative}body.nanotrasen div[data-tooltip]:after,body.nanotrasen span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.nanotrasen div[data-tooltip]:hover:after,body.nanotrasen span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.nanotrasen div[data-tooltip].tooltip-top:after,body.nanotrasen span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-webkit-transform:translateX(-50%) translateY(8px);-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:after,body.nanotrasen div[data-tooltip].tooltip-top:hover:after,body.nanotrasen span[data-tooltip].tooltip-bottom:after,body.nanotrasen span[data-tooltip].tooltip-top:hover:after{-webkit-transform:translateX(-50%) translateY(-8px);-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:after,body.nanotrasen span[data-tooltip].tooltip-bottom:after{top:100%;left:50%}body.nanotrasen div[data-tooltip].tooltip-bottom:hover:after,body.nanotrasen span[data-tooltip].tooltip-bottom:hover:after{-webkit-transform:translateX(-50%) translateY(8px);-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-left:after,body.nanotrasen span[data-tooltip].tooltip-left:after{top:50%;right:100%;-webkit-transform:translateX(8px) translateY(-50%);-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-left:hover:after,body.nanotrasen div[data-tooltip].tooltip-right:after,body.nanotrasen span[data-tooltip].tooltip-left:hover:after,body.nanotrasen span[data-tooltip].tooltip-right:after{-webkit-transform:translateX(-8px) translateY(-50%);-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:after,body.nanotrasen span[data-tooltip].tooltip-right:after{top:50%;left:100%}body.nanotrasen div[data-tooltip].tooltip-right:hover:after,body.nanotrasen span[data-tooltip].tooltip-right:hover:after{-webkit-transform:translateX(8px) translateY(-50%);-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #40628a;background:#272727}body.nanotrasen .bar .barText{position:absolute;top:0;right:3px}body.nanotrasen .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#40628a}body.nanotrasen .bar .barFill.good{background-color:#537d29}body.nanotrasen .bar .barFill.average{background-color:#be6209}body.nanotrasen .bar .barFill.bad{background-color:#b00e0e}body.nanotrasen span.button{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.nanotrasen span.button .fa{padding-right:2px}body.nanotrasen span.button.normal{transition:background-color .5s;background-color:#40628a}body.nanotrasen span.button.normal.active:focus,body.nanotrasen span.button.normal.active:hover{transition:background-color .25s;background-color:#4f78aa;outline:0}body.nanotrasen span.button.disabled{transition:background-color .5s;background-color:#999}body.nanotrasen span.button.disabled.active:focus,body.nanotrasen span.button.disabled.active:hover{transition:background-color .25s;background-color:#a8a8a8;outline:0}body.nanotrasen span.button.selected{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.selected.active:focus,body.nanotrasen span.button.selected.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.caution{transition:background-color .5s;background-color:#9a9d00}body.nanotrasen span.button.caution.active:focus,body.nanotrasen span.button.caution.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.nanotrasen span.button.danger{transition:background-color .5s;background-color:#9d0808}body.nanotrasen span.button.danger.active:focus,body.nanotrasen span.button.danger.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.nanotrasen span.button.gridable{width:125px;margin:2px 0}body.nanotrasen span.button+span:not(.button),body.nanotrasen span:not(.button)+span.button{margin-left:5px}body.nanotrasen div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000);background-color:rgba(0,0,0,.33);box-shadow:inset 0 0 5px rgba(0,0,0,.5)}body.nanotrasen div.display header,body.nanotrasen div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #40628a}body.nanotrasen div.display header .buttonRight,body.nanotrasen div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.nanotrasen div.display article,body.nanotrasen div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.nanotrasen input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#000;background-color:#fff;border:1px solid #272727}body.nanotrasen input::-webkit-input-placeholder{color:#999}body.nanotrasen input::-moz-placeholder{color:#999}body.nanotrasen input:-ms-input-placeholder{color:#999}body.nanotrasen input::placeholder{color:#999}body.nanotrasen input::-ms-clear{display:none}body.nanotrasen svg.linegraph{overflow:hidden}body.nanotrasen div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px)}body.nanotrasen div.notice .label{color:#000}body.nanotrasen div.notice .content:only-of-type{padding:0}body.nanotrasen div.notice hr{background-color:#272727}body.nanotrasen div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-webkit-transform:rotate(1turn);-ms-transform:rotate(1turn);transform:rotate(1turn)}body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.nanotrasen section{display:table-row;width:100%}body.nanotrasen section:not(:first-child){padding-top:4px}body.nanotrasen section.candystripe:nth-child(even){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.nanotrasen section .label{width:1%;padding-right:32px;white-space:nowrap;color:#8ba5c4}body.nanotrasen section .content:not(:last-child){padding-right:16px}body.nanotrasen section .line{width:100%}body.nanotrasen div.subdisplay{width:100%;margin:0}body.nanotrasen header.titlebar .close,body.nanotrasen header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#8ba5c4}body.nanotrasen header.titlebar .close:hover,body.nanotrasen header.titlebar .minimize:hover{color:#9cb2cd}body.nanotrasen header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.nanotrasen header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.nanotrasen header.titlebar .title{position:absolute;top:6px;left:46px;color:#8ba5c4;font-size:16px;white-space:nowrap}body.nanotrasen header.titlebar .minimize{position:absolute;top:6px;right:46px}body.nanotrasen header.titlebar .close{position:absolute;top:4px;right:12px}body.syndicate{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4wIiB2aWV3Qm94PSIwIDAgMjAwIDI4OS43NDIiIG9wYWNpdHk9Ii4zMyI+DQogIDxwYXRoIGQ9Im0gOTMuNTM3Njc3LDAgYyAtMTguMTEzMTI1LDAgLTM0LjIyMDEzMywzLjExMTY0IC00OC4zMjM0ODQsOS4zMzQzNyAtMTMuOTY1MDkyLDYuMjIxNjcgLTI0LjYxMjQ0MiwxNS4wNzExNCAtMzEuOTQwNjUxLDI2LjU0NzEgLTcuMTg5OTM5OCwxMS4zMzc4OSAtMTAuMzAxMjI2NiwyNC43NDkxMSAtMTAuMzAxMjI2Niw0MC4yMzQ3OCAwLDEwLjY0NjYyIDIuNzI1MDAyNiwyMC40NjQ2NSA4LjE3NTExMTYsMjkuNDUyNTggNS42MTUyNzcsOC45ODY4NiAxNC4wMzgyNzcsMTcuMzUyMDQgMjUuMjY4ODIxLDI1LjA5NDM2IDExLjIzMDU0NCw3LjYwNTMxIDI2LjUwNzQyMSwxNS40MTgzNSA0NS44MzA1MTQsMjMuNDM3ODIgMTkuOTgzNzQ4LDguMjk1NTcgMzQuODQ4ODQ4LDE1LjU1NDcxIDQ0LjU5Mjk5OCwyMS43NzYzOCA5Ljc0NDE0LDYuMjIyNzMgMTYuNzYxNywxMi44NTg1IDIxLjA1NTcyLDE5LjkwOTUxIDQuMjk0MDQsNy4wNTIwOCA2LjQ0MTkzLDE1Ljc2NDA4IDYuNDQxOTMsMjYuMTM0NTkgMCwxNi4xNzcwMiAtNS4yMDE5NiwyOC40ODIyMiAtMTUuNjA2NzMsMzYuOTE2ODIgLTEwLjIzOTYsOC40MzQ3IC0yNS4wMjIwMywxMi42NTIzIC00NC4zNDUxNjksMTIuNjUyMyAtMTQuMDM4MTcxLDAgLTI1LjUxNTI0NywtMS42NTk0IC0zNC40MzM2MTgsLTQuOTc3NyAtOC45MTgzNywtMy40NTY2IC0xNi4xODU1NzIsLTguNzExMyAtMjEuODAwODM5LC0xNS43NjMzIC01LjYxNTI3NywtNy4wNTIxIC0xMC4wNzQ3OTUsLTE2LjY2MDg4IC0xMy4zNzc4OTksLTI4LjgyODEyIGwgLTI0Ljc3MzE2MjYyOTM5NDUsMCAwLDU2LjgyNjMyIEMgMzMuODU2NzY5LDI4Ni4wNzYwMSA2My43NDkwNCwyODkuNzQyMDEgODkuNjc4MzgzLDI4OS43NDIwMSBjIDE2LjAyMDAyNywwIDMwLjcxOTc4NywtMS4zODI3IDQ0LjA5NzMzNywtNC4xNDc5IDEzLjU0MjcyLC0yLjkwNDMgMjUuMTA0MSwtNy40Njc2IDM0LjY4MzA5LC0xMy42ODkzIDkuNzQ0MTMsLTYuMzU5NyAxNy4zNDA0MiwtMTQuNTE5NSAyMi43OTA1MiwtMjQuNDc0OCA1LjQ1MDEsLTEwLjA5MzMyIDguMTc1MTEsLTIyLjM5OTU5IDguMTc1MTEsLTM2LjkxNjgyIDAsLTEyLjk5NzY0IC0zLjMwMjEsLTI0LjMzNTM5IC05LjkwODI5LC0zNC4wMTQ2IC02LjQ0MTA1LC05LjgxNzI1IC0xNS41MjU0NSwtMTguNTI3MDcgLTI3LjI1MTQ2LC0yNi4xMzEzMyAtMTEuNTYwODUsLTcuNjA0MjcgLTI3LjkxMDgzLC0xNS44MzE0MiAtNDkuMDUwNjYsLTI0LjY4MDIyIC0xNy41MDY0NCwtNy4xOTAxMiAtMzAuNzE5NjY4LC0xMy42ODk0OCAtMzkuNjM4MDM4LC0xOS40OTcwMSAtOC45MTgzNzEsLTUuODA3NTIgLTE4LjYwNzQ3NCwtMTIuNDM0MDkgLTI0LjA5NjUyNCwtMTguODc0MTcgLTUuNDI2MDQzLC02LjM2NjE2IC05LjY1ODgyNiwtMTUuMDcwMDMgLTkuNjU4ODI2LC0yNC44ODcyOSAwLC05LjI2NDAxIDIuMDc1NDE0LC0xNy4yMTM0NSA2LjIyMzQ1NCwtMjMuODUwMzMgMTEuMDk4Mjk4LC0xNC4zOTc0OCA0MS4yODY2MzgsLTEuNzk1MDcgNDUuMDc1NjA5LDI0LjM0NzYyIDQuODM5MzkyLDYuNzc0OTEgOC44NDkzNSwxNi4yNDcyOSAxMi4wMjk1MTUsMjguNDE1NiBsIDIwLjUzMjM0LDAgMCwtNTUuOTk5NjcgYyAtNC40NzgyNSwtNS45MjQ0OCAtOS45NTQ4OCwtMTAuNjMyMjIgLTE1LjkwODM3LC0xNC4zNzQxMSAxLjY0MDU1LDAuNDc5MDUgMy4xOTAzOSwxLjAyMzc2IDQuNjM4NjUsMS42NDAyNCA2LjQ5ODYxLDIuNjI2MDcgMTIuMTY3OTMsNy4zMjc0NyAxNy4wMDczLDE0LjEwMzQ1IDQuODM5MzksNi43NzQ5MSA4Ljg0OTM1LDE2LjI0NTY3IDEyLjAyOTUyLDI4LjQxMzk3IDAsMCA4LjQ4MTI4LC0wLjEyODk0IDguNDg5NzgsLTAuMDAyIDAuNDE3NzYsNi40MTQ5NCAtMS43NTMzOSw5LjQ1Mjg2IC00LjEyMzQyLDEyLjU2MTA0IC0yLjQxNzQsMy4xNjk3OCAtNS4xNDQ4Niw2Ljc4OTczIC00LjAwMjc4LDEzLjAwMjkgMS41MDc4Niw4LjIwMzE4IDEwLjE4MzU0LDEwLjU5NjQyIDE0LjYyMTk0LDkuMzExNTQgLTMuMzE4NDIsLTAuNDk5MTEgLTUuMzE4NTUsLTEuNzQ5NDggLTUuMzE4NTUsLTEuNzQ5NDggMCwwIDEuODc2NDYsMC45OTg2OCA1LjY1MTE3LC0xLjM1OTgxIC0zLjI3Njk1LDAuOTU1NzEgLTEwLjcwNTI5LC0wLjc5NzM4IC0xMS44MDEyNSwtNi43NjMxMyAtMC45NTc1MiwtNS4yMDg2MSAwLjk0NjU0LC03LjI5NTE0IDMuNDAxMTMsLTEwLjUxNDgyIDIuNDU0NjIsLTMuMjE5NjggNS4yODQyNiwtNi45NTgzMSA0LjY4NDMsLTE0LjQ4ODI0IGwgMC4wMDMsMC4wMDIgOC45MjY3NiwwIDAsLTU1Ljk5OTY3IGMgLTE1LjA3MTI1LC0zLjg3MTY4IC0yNy42NTMxNCwtNi4zNjA0MiAtMzcuNzQ2NzEsLTcuNDY1ODYgLTkuOTU1MzEsLTEuMTA3NTUgLTIwLjE4ODIzLC0xLjY1OTgxIC0zMC42OTY2MTMsLTEuNjU5ODEgeiBtIDcwLjMyMTYwMywxNy4zMDg5MyAwLjIzODA1LDQwLjMwNDkgYyAxLjMxODA4LDEuMjI2NjYgMi40Mzk2NSwyLjI3ODE1IDMuMzQwODEsMy4xMDYwMiA0LjgzOTM5LDYuNzc0OTEgOC44NDkzNCwxNi4yNDU2NiAxMi4wMjk1MSwyOC40MTM5NyBsIDIwLjUzMjM0LDAgMCwtNTUuOTk5NjcgYyAtNi42NzczMSwtNC41OTM4MSAtMTkuODM2NDMsLTEwLjQ3MzA5IC0zNi4xNDA3MSwtMTUuODI1MjIgeiBtIC0yOC4xMjA0OSw1LjYwNTUxIDguNTY0NzksMTcuNzE2NTUgYyAtMTEuOTcwMzcsLTYuNDY2OTcgLTEzLjg0Njc4LC05LjcxNzI2IC04LjU2NDc5LC0xNy43MTY1NSB6IG0gMjIuNzk3MDUsMCBjIDIuNzcxNSw3Ljk5OTI5IDEuNzg3NDEsMTEuMjQ5NTggLTQuNDkzNTQsMTcuNzE2NTUgbCA0LjQ5MzU0LC0xNy43MTY1NSB6IG0gMTUuMjIxOTUsMjQuMDA4NDggOC41NjQ3OSwxNy43MTY1NSBjIC0xMS45NzAzOCwtNi40NjY5NyAtMTMuODQ2NzksLTkuNzE3MjYgLTguNTY0NzksLTE3LjcxNjU1IHogbSAyMi43OTcwNCwwIGMgMi43NzE1LDcuOTk5MjkgMS43ODc0MSwxMS4yNDk1OCAtNC40OTM1NCwxNy43MTY1NSBsIDQuNDkzNTQsLTE3LjcxNjU1IHogbSAtOTkuMTEzODQsMi4yMDc2NCA4LjU2NDc5LDE3LjcxNjU1IGMgLTExLjk3MDM4MiwtNi40NjY5NyAtMTMuODQ2NzgyLC05LjcxNzI2IC04LjU2NDc5LC0xNy43MTY1NSB6IG0gMjIuNzk1NDIsMCBjIDIuNzcxNSw3Ljk5OTI5IDEuNzg3NDEsMTEuMjQ5NTggLTQuNDkzNTQsMTcuNzE2NTUgbCA0LjQ5MzU0LC0xNy43MTY1NSB6IiAvPg0KPC9zdmc+DQo8IS0tIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlLiAtLT4NCjwhLS0gaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvNC4wLyAtLT4NCg==") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#750000 0,#340404);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff750000',endColorstr='#ff340404',GradientType=0)}body.syndicate .normal{color:#40628a}body.syndicate .good{color:#73e573}body.syndicate .average{color:#be6209}body.syndicate .bad{color:#b00e0e}body.syndicate .highlight{color:#000}body.syndicate main{display:block;margin-top:32px;padding:2px 6px 0}body.syndicate hr{height:2px;background-color:#272727;border:none}body.syndicate .hidden{display:none}body.syndicate .bar .barText,body.syndicate span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.syndicate .bold{font-weight:700}body.syndicate .italic{font-style:italic}body.syndicate [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.syndicate div[data-tooltip],body.syndicate span[data-tooltip]{position:relative}body.syndicate div[data-tooltip]:after,body.syndicate span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.syndicate div[data-tooltip]:hover:after,body.syndicate span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.syndicate div[data-tooltip].tooltip-top:after,body.syndicate span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-webkit-transform:translateX(-50%) translateY(8px);-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-bottom:after,body.syndicate div[data-tooltip].tooltip-top:hover:after,body.syndicate span[data-tooltip].tooltip-bottom:after,body.syndicate span[data-tooltip].tooltip-top:hover:after{-webkit-transform:translateX(-50%) translateY(-8px);-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:after,body.syndicate span[data-tooltip].tooltip-bottom:after{top:100%;left:50%}body.syndicate div[data-tooltip].tooltip-bottom:hover:after,body.syndicate span[data-tooltip].tooltip-bottom:hover:after{-webkit-transform:translateX(-50%) translateY(8px);-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-left:after,body.syndicate span[data-tooltip].tooltip-left:after{top:50%;right:100%;-webkit-transform:translateX(8px) translateY(-50%);-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-left:hover:after,body.syndicate div[data-tooltip].tooltip-right:after,body.syndicate span[data-tooltip].tooltip-left:hover:after,body.syndicate span[data-tooltip].tooltip-right:after{-webkit-transform:translateX(-8px) translateY(-50%);-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:after,body.syndicate span[data-tooltip].tooltip-right:after{top:50%;left:100%}body.syndicate div[data-tooltip].tooltip-right:hover:after,body.syndicate span[data-tooltip].tooltip-right:hover:after{-webkit-transform:translateX(8px) translateY(-50%);-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #000;background:#272727}body.syndicate .bar .barText{position:absolute;top:0;right:3px}body.syndicate .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#000}body.syndicate .bar .barFill.good{background-color:#73e573}body.syndicate .bar .barFill.average{background-color:#be6209}body.syndicate .bar .barFill.bad{background-color:#b00e0e}body.syndicate span.button{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.syndicate span.button .fa{padding-right:2px}body.syndicate span.button.normal{transition:background-color .5s;background-color:#397439}body.syndicate span.button.normal.active:focus,body.syndicate span.button.normal.active:hover{transition:background-color .25s;background-color:#4a964a;outline:0}body.syndicate span.button.disabled{transition:background-color .5s;background-color:#363636}body.syndicate span.button.disabled.active:focus,body.syndicate span.button.disabled.active:hover{transition:background-color .25s;background-color:#545454;outline:0}body.syndicate span.button.selected{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.selected.active:focus,body.syndicate span.button.selected.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.caution{transition:background-color .5s;background-color:#be6209}body.syndicate span.button.caution.active:focus,body.syndicate span.button.caution.active:hover{transition:background-color .25s;background-color:#eb790b;outline:0}body.syndicate span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.syndicate span.button.danger.active:focus,body.syndicate span.button.danger.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.syndicate span.button.gridable{width:125px;margin:2px 0}body.syndicate span.button+span:not(.button),body.syndicate span:not(.button)+span.button{margin-left:5px}body.syndicate div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000);background-color:rgba(0,0,0,.5);box-shadow:inset 0 0 5px rgba(0,0,0,.75)}body.syndicate div.display header,body.syndicate div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #272727}body.syndicate div.display header .buttonRight,body.syndicate div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.syndicate div.display article,body.syndicate div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.syndicate input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#fff;background-color:#9d0808;border:1px solid #272727}body.syndicate input::-webkit-input-placeholder{color:#999}body.syndicate input::-moz-placeholder{color:#999}body.syndicate input:-ms-input-placeholder{color:#999}body.syndicate input::placeholder{color:#999}body.syndicate input::-ms-clear{display:none}body.syndicate svg.linegraph{overflow:hidden}body.syndicate div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#750000;background-image:repeating-linear-gradient(-45deg,#750000,#750000 10px,#910101 0,#910101 20px)}body.syndicate div.notice .label{color:#000}body.syndicate div.notice .content:only-of-type{padding:0}body.syndicate div.notice hr{background-color:#272727}body.syndicate div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-webkit-transform:rotate(1turn);-ms-transform:rotate(1turn);transform:rotate(1turn)}body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.syndicate section{display:table-row;width:100%}body.syndicate section:not(:first-child){padding-top:4px}body.syndicate section.candystripe:nth-child(even){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.syndicate section .label{width:1%;padding-right:32px;white-space:nowrap;color:#fff}body.syndicate section .content:not(:last-child){padding-right:16px}body.syndicate section .line{width:100%}body.syndicate div.subdisplay{width:100%;margin:0}body.syndicate header.titlebar .close,body.syndicate header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#e74242}body.syndicate header.titlebar .close:hover,body.syndicate header.titlebar .minimize:hover{color:#eb5e5e}body.syndicate header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.syndicate header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.syndicate header.titlebar .title{position:absolute;top:6px;left:46px;color:#e74242;font-size:16px;white-space:nowrap}body.syndicate header.titlebar .minimize{position:absolute;top:6px;right:46px}body.syndicate header.titlebar .close{position:absolute;top:4px;right:12px}.no-icons header.titlebar .statusicon{font-size:20px}.no-icons header.titlebar .statusicon:after{content:"O"}.no-icons header.titlebar .minimize{top:-2px;font-size:20px}.no-icons header.titlebar .minimize:after{content:"—"}.no-icons header.titlebar .close{font-size:20px}.no-icons header.titlebar .close:after{content:"X"} \ No newline at end of file diff --git a/tgui/assets/tgui.js b/tgui/assets/tgui.js index e607d36cbce..6c55fae1b3b 100644 --- a/tgui/assets/tgui.js +++ b/tgui/assets/tgui.js @@ -1,12 +1,12 @@ -require=function t(e,n,r){function i(o,s){if(!n[o]){if(!e[o]){var u="function"==typeof require&&require;if(!s&&u)return u(o,!0);if(a)return a(o,!0);var c=Error("Cannot find module '"+o+"'");throw c.code="MODULE_NOT_FOUND",c}var l=n[o]={exports:{}};e[o][0].call(l.exports,function(t){var n=e[o][1][t];return i(n?n:t)},l,l.exports,t,e,n,r)}return n[o].exports}for(var a="function"==typeof require&&require,o=0;o=0;--r){var i=this.tryEntries[r],a=i.completion;if("root"===i.tryLoc)return e("end");if(i.tryLoc<=this.prev){var o=y.call(i,"catchLoc"),s=y.call(i,"finallyLoc");if(o&&s){if(this.prev=0;--n){var r=this.tryEntries[n];if(r.tryLoc<=this.prev&&y.call(r,"finallyLoc")&&this.prev=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),d(n),O}},"catch":function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if("throw"===r.type){var i=r.arg;d(n)}return i}}throw Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:m(t),resultName:e,nextLoc:n},O}}}("object"==typeof n?n:"object"==typeof window?window:"object"==typeof self?self:this)}).call(this,t(202),void 0!==n?n:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{202:202}],3:[function(t,e,n){e.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},{}],4:[function(t,e,n){var r=t(84)("unscopables"),i=Array.prototype;void 0==i[r]&&t(32)(i,r,{}),e.exports=function(t){i[r][t]=!0}},{32:32,84:84}],5:[function(t,e,n){var r=t(39);e.exports=function(t){if(!r(t))throw TypeError(t+" is not an object!");return t}},{39:39}],6:[function(t,e,n){"use strict";var r=t(81),i=t(77),a=t(80);e.exports=[].copyWithin||function(t,e){var n=r(this),o=a(n.length),s=i(t,o),u=i(e,o),c=arguments,l=c.length>2?c[2]:void 0,p=Math.min((void 0===l?o:i(l,o))-u,o-s),f=1;for(s>u&&u+p>s&&(f=-1,u+=p-1,s+=p-1);p-- >0;)u in n?n[s]=n[u]:delete n[s],s+=f,u+=f;return n}},{77:77,80:80,81:81}],7:[function(t,e,n){"use strict";var r=t(81),i=t(77),a=t(80);e.exports=[].fill||function(t){for(var e=r(this),n=a(e.length),o=arguments,s=o.length,u=i(s>1?o[1]:void 0,n),c=s>2?o[2]:void 0,l=void 0===c?n:i(c,n);l>u;)e[u++]=t;return e}},{77:77,80:80,81:81}],8:[function(t,e,n){var r=t(79),i=t(80),a=t(77);e.exports=function(t){return function(e,n,o){var s,u=r(e),c=i(u.length),l=a(o,c);if(t&&n!=n){for(;c>l;)if(s=u[l++],s!=s)return!0}else for(;c>l;l++)if((t||l in u)&&u[l]===n)return t||l;return!t&&-1}}},{77:77,79:79,80:80}],9:[function(t,e,n){var r=t(18),i=t(35),a=t(81),o=t(80),s=t(10);e.exports=function(t){var e=1==t,n=2==t,u=3==t,c=4==t,l=6==t,p=5==t||l;return function(f,d,h){for(var m,v,g=a(f),y=i(g),b=r(d,h,3),x=o(y.length),w=0,_=e?s(f,x):n?s(f,0):void 0;x>w;w++)if((p||w in y)&&(m=y[w],v=b(m,w,g),t))if(e)_[w]=v;else if(v)switch(t){case 3:return!0;case 5:return m;case 6:return w;case 2:_.push(m)}else if(c)return!1;return l?-1:u||c?c:_}}},{10:10,18:18,35:35,80:80,81:81}],10:[function(t,e,n){var r=t(39),i=t(37),a=t(84)("species");e.exports=function(t,e){var n;return i(t)&&(n=t.constructor,"function"!=typeof n||n!==Array&&!i(n.prototype)||(n=void 0),r(n)&&(n=n[a],null===n&&(n=void 0))),new(void 0===n?Array:n)(e)}},{37:37,39:39,84:84}],11:[function(t,e,n){var r=t(12),i=t(84)("toStringTag"),a="Arguments"==r(function(){return arguments}());e.exports=function(t){var e,n,o;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=(e=Object(t))[i])?n:a?r(e):"Object"==(o=r(e))&&"function"==typeof e.callee?"Arguments":o}},{12:12,84:84}],12:[function(t,e,n){var r={}.toString;e.exports=function(t){return r.call(t).slice(8,-1)}},{}],13:[function(t,e,n){"use strict";var r=t(47),i=t(32),a=t(61),o=t(18),s=t(70),u=t(19),c=t(28),l=t(43),p=t(45),f=t(83)("id"),d=t(31),h=t(39),m=t(66),v=t(20),g=Object.isExtensible||h,y=v?"_s":"size",b=0,x=function(t,e){if(!h(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!d(t,f)){if(!g(t))return"F";if(!e)return"E";i(t,f,++b)}return"O"+t[f]},w=function(t,e){var n,r=x(e);if("F"!==r)return t._i[r];for(n=t._f;n;n=n.n)if(n.k==e)return n};e.exports={getConstructor:function(t,e,n,i){var l=t(function(t,a){s(t,l,e),t._i=r.create(null),t._f=void 0,t._l=void 0,t[y]=0,void 0!=a&&c(a,n,t[i],t)});return a(l.prototype,{clear:function(){for(var t=this,e=t._i,n=t._f;n;n=n.n)n.r=!0,n.p&&(n.p=n.p.n=void 0),delete e[n.i];t._f=t._l=void 0,t[y]=0},"delete":function(t){var e=this,n=w(e,t);if(n){var r=n.n,i=n.p;delete e._i[n.i],n.r=!0,i&&(i.n=r),r&&(r.p=i),e._f==n&&(e._f=r),e._l==n&&(e._l=i),e[y]--}return!!n},forEach:function(t){for(var e,n=o(t,arguments.length>1?arguments[1]:void 0,3);e=e?e.n:this._f;)for(n(e.v,e.k,this);e&&e.r;)e=e.p},has:function(t){return!!w(this,t)}}),v&&r.setDesc(l.prototype,"size",{get:function(){return u(this[y])}}),l},def:function(t,e,n){var r,i,a=w(t,e);return a?a.v=n:(t._l=a={i:i=x(e,!0),k:e,v:n,p:r=t._l,n:void 0,r:!1},t._f||(t._f=a),r&&(r.n=a),t[y]++,"F"!==i&&(t._i[i]=a)),t},getEntry:w,setStrong:function(t,e,n){l(t,e,function(t,e){this._t=t,this._k=e,this._l=void 0},function(){for(var t=this,e=t._k,n=t._l;n&&n.r;)n=n.p;return t._t&&(t._l=n=n?n.n:t._t._f)?"keys"==e?p(0,n.k):"values"==e?p(0,n.v):p(0,[n.k,n.v]):(t._t=void 0,p(1))},n?"entries":"values",!n,!0),m(e)}}},{18:18,19:19,20:20,28:28,31:31,32:32,39:39,43:43,45:45,47:47,61:61,66:66,70:70,83:83}],14:[function(t,e,n){var r=t(28),i=t(11);e.exports=function(t){return function(){if(i(this)!=t)throw TypeError(t+"#toJSON isn't generic");var e=[];return r(this,!1,e.push,e),e}}},{11:11,28:28}],15:[function(t,e,n){"use strict";var r=t(32),i=t(61),a=t(5),o=t(39),s=t(70),u=t(28),c=t(9),l=t(31),p=t(83)("weak"),f=Object.isExtensible||o,d=c(5),h=c(6),m=0,v=function(t){return t._l||(t._l=new g)},g=function(){this.a=[]},y=function(t,e){return d(t.a,function(t){return t[0]===e})};g.prototype={get:function(t){var e=y(this,t);return e?e[1]:void 0},has:function(t){return!!y(this,t)},set:function(t,e){var n=y(this,t);n?n[1]=e:this.a.push([t,e])},"delete":function(t){var e=h(this.a,function(e){return e[0]===t});return~e&&this.a.splice(e,1),!!~e}},e.exports={getConstructor:function(t,e,n,r){var a=t(function(t,i){s(t,a,e),t._i=m++,t._l=void 0,void 0!=i&&u(i,n,t[r],t)});return i(a.prototype,{"delete":function(t){return o(t)?f(t)?l(t,p)&&l(t[p],this._i)&&delete t[p][this._i]:v(this)["delete"](t):!1},has:function(t){return o(t)?f(t)?l(t,p)&&l(t[p],this._i):v(this).has(t):!1}}),a},def:function(t,e,n){return f(a(e))?(l(e,p)||r(e,p,{}),e[p][t._i]=n):v(t).set(e,n),t},frozenStore:v,WEAK:p}},{28:28,31:31,32:32,39:39,5:5,61:61,70:70,83:83,9:9}],16:[function(t,e,n){"use strict";var r=t(30),i=t(23),a=t(62),o=t(61),s=t(28),u=t(70),c=t(39),l=t(25),p=t(44),f=t(67);e.exports=function(t,e,n,d,h,m){var v=r[t],g=v,y=h?"set":"add",b=g&&g.prototype,x={},w=function(t){var e=b[t];a(b,t,"delete"==t?function(t){return m&&!c(t)?!1:e.call(this,0===t?0:t)}:"has"==t?function(t){return m&&!c(t)?!1:e.call(this,0===t?0:t)}:"get"==t?function(t){return m&&!c(t)?void 0:e.call(this,0===t?0:t)}:"add"==t?function(t){return e.call(this,0===t?0:t),this}:function(t,n){return e.call(this,0===t?0:t,n),this})};if("function"==typeof g&&(m||b.forEach&&!l(function(){(new g).entries().next()}))){var _,k=new g,E=k[y](m?{}:-0,1)!=k,S=l(function(){k.has(1)}),O=p(function(t){new g(t)});O||(g=e(function(e,n){u(e,g,t);var r=new v;return void 0!=n&&s(n,h,r[y],r),r}),g.prototype=b,b.constructor=g),m||k.forEach(function(t,e){_=1/e===-(1/0)}),(S||_)&&(w("delete"),w("has"),h&&w("get")),(_||E)&&w(y),m&&b.clear&&delete b.clear}else g=d.getConstructor(e,t,h,y),o(g.prototype,n);return f(g,t),x[t]=g,i(i.G+i.W+i.F*(g!=v),x),m||d.setStrong(g,t,h),g}},{23:23,25:25,28:28,30:30,39:39,44:44,61:61,62:62,67:67,70:70}],17:[function(t,e,n){var r=e.exports={version:"1.2.6"};"number"==typeof __e&&(__e=r)},{}],18:[function(t,e,n){var r=t(3);e.exports=function(t,e,n){if(r(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,r){return t.call(e,n,r)};case 3:return function(n,r,i){return t.call(e,n,r,i)}}return function(){return t.apply(e,arguments)}}},{3:3}],19:[function(t,e,n){e.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},{}],20:[function(t,e,n){e.exports=!t(25)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},{25:25}],21:[function(t,e,n){var r=t(39),i=t(30).document,a=r(i)&&r(i.createElement);e.exports=function(t){return a?i.createElement(t):{}}},{30:30,39:39}],22:[function(t,e,n){var r=t(47);e.exports=function(t){var e=r.getKeys(t),n=r.getSymbols;if(n)for(var i,a=n(t),o=r.isEnum,s=0;a.length>s;)o.call(t,i=a[s++])&&e.push(i);return e}},{47:47}],23:[function(t,e,n){var r=t(30),i=t(17),a=t(32),o=t(62),s=t(18),u="prototype",c=function(t,e,n){var l,p,f,d,h=t&c.F,m=t&c.G,v=t&c.S,g=t&c.P,y=t&c.B,b=m?r:v?r[e]||(r[e]={}):(r[e]||{})[u],x=m?i:i[e]||(i[e]={}),w=x[u]||(x[u]={});m&&(n=e);for(l in n)p=!h&&b&&l in b,f=(p?b:n)[l],d=y&&p?s(f,r):g&&"function"==typeof f?s(Function.call,f):f,b&&!p&&o(b,l,f),x[l]!=f&&a(x,l,d),g&&w[l]!=f&&(w[l]=f)};r.core=i,c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,e.exports=c},{17:17,18:18,30:30,32:32,62:62}],24:[function(t,e,n){var r=t(84)("match");e.exports=function(t){var e=/./;try{"/./"[t](e)}catch(n){try{return e[r]=!1,!"/./"[t](e)}catch(i){}}return!0}},{84:84}],25:[function(t,e,n){e.exports=function(t){try{return!!t()}catch(e){return!0}}},{}],26:[function(t,e,n){"use strict";var r=t(32),i=t(62),a=t(25),o=t(19),s=t(84);e.exports=function(t,e,n){var u=s(t),c=""[t];a(function(){var e={};return e[u]=function(){return 7},7!=""[t](e)})&&(i(String.prototype,t,n(o,u,c)),r(RegExp.prototype,u,2==e?function(t,e){return c.call(t,this,e)}:function(t){return c.call(t,this)}))}},{19:19,25:25,32:32,62:62,84:84}],27:[function(t,e,n){"use strict";var r=t(5);e.exports=function(){var t=r(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},{5:5}],28:[function(t,e,n){var r=t(18),i=t(41),a=t(36),o=t(5),s=t(80),u=t(85);e.exports=function(t,e,n,c){var l,p,f,d=u(t),h=r(n,c,e?2:1),m=0;if("function"!=typeof d)throw TypeError(t+" is not iterable!");if(a(d))for(l=s(t.length);l>m;m++)e?h(o(p=t[m])[0],p[1]):h(t[m]);else for(f=d.call(t);!(p=f.next()).done;)i(f,h,p.value,e)}},{18:18,36:36,41:41,5:5,80:80,85:85}],29:[function(t,e,n){var r=t(79),i=t(47).getNames,a={}.toString,o="object"==typeof window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],s=function(t){try{return i(t)}catch(e){return o.slice()}};e.exports.get=function(t){return o&&"[object Window]"==a.call(t)?s(t):i(r(t))}},{47:47,79:79}],30:[function(t,e,n){var r=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=r)},{}],31:[function(t,e,n){var r={}.hasOwnProperty;e.exports=function(t,e){return r.call(t,e)}},{}],32:[function(t,e,n){var r=t(47),i=t(60);e.exports=t(20)?function(t,e,n){return r.setDesc(t,e,i(1,n))}:function(t,e,n){return t[e]=n,t}},{20:20,47:47,60:60}],33:[function(t,e,n){e.exports=t(30).document&&document.documentElement},{30:30}],34:[function(t,e,n){e.exports=function(t,e,n){var r=void 0===n;switch(e.length){case 0:return r?t():t.call(n);case 1:return r?t(e[0]):t.call(n,e[0]);case 2:return r?t(e[0],e[1]):t.call(n,e[0],e[1]);case 3:return r?t(e[0],e[1],e[2]):t.call(n,e[0],e[1],e[2]);case 4:return r?t(e[0],e[1],e[2],e[3]):t.call(n,e[0],e[1],e[2],e[3])}return t.apply(n,e)}},{}],35:[function(t,e,n){var r=t(12);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==r(t)?t.split(""):Object(t)}},{12:12}],36:[function(t,e,n){var r=t(46),i=t(84)("iterator"),a=Array.prototype;e.exports=function(t){return void 0!==t&&(r.Array===t||a[i]===t)}},{46:46,84:84}],37:[function(t,e,n){var r=t(12);e.exports=Array.isArray||function(t){return"Array"==r(t)}},{12:12}],38:[function(t,e,n){var r=t(39),i=Math.floor;e.exports=function(t){return!r(t)&&isFinite(t)&&i(t)===t}},{39:39}],39:[function(t,e,n){e.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},{}],40:[function(t,e,n){var r=t(39),i=t(12),a=t(84)("match");e.exports=function(t){var e;return r(t)&&(void 0!==(e=t[a])?!!e:"RegExp"==i(t))}},{12:12,39:39,84:84}],41:[function(t,e,n){var r=t(5);e.exports=function(t,e,n,i){try{return i?e(r(n)[0],n[1]):e(n)}catch(a){var o=t["return"];throw void 0!==o&&r(o.call(t)),a}}},{5:5}],42:[function(t,e,n){"use strict";var r=t(47),i=t(60),a=t(67),o={};t(32)(o,t(84)("iterator"),function(){return this}),e.exports=function(t,e,n){t.prototype=r.create(o,{next:i(1,n)}),a(t,e+" Iterator")}},{32:32,47:47,60:60,67:67,84:84}],43:[function(t,e,n){"use strict";var r=t(49),i=t(23),a=t(62),o=t(32),s=t(31),u=t(46),c=t(42),l=t(67),p=t(47).getProto,f=t(84)("iterator"),d=!([].keys&&"next"in[].keys()),h="@@iterator",m="keys",v="values",g=function(){return this};e.exports=function(t,e,n,y,b,x,w){c(n,e,y);var _,k,E=function(t){if(!d&&t in P)return P[t];switch(t){case m:return function(){return new n(this,t)};case v:return function(){return new n(this,t)}}return function(){return new n(this,t)}},S=e+" Iterator",O=b==v,A=!1,P=t.prototype,C=P[f]||P[h]||b&&P[b],j=C||E(b);if(C){var T=p(j.call(new t));l(T,S,!0),!r&&s(P,h)&&o(T,f,g),O&&C.name!==v&&(A=!0,j=function(){return C.call(this)})}if(r&&!w||!d&&!A&&P[f]||o(P,f,j),u[e]=j,u[S]=g,b)if(_={values:O?j:E(v),keys:x?j:E(m),entries:O?E("entries"):j},w)for(k in _)k in P||a(P,k,_[k]);else i(i.P+i.F*(d||A),e,_);return _}},{23:23,31:31,32:32,42:42,46:46,47:47,49:49,62:62,67:67,84:84}],44:[function(t,e,n){var r=t(84)("iterator"),i=!1;try{var a=[7][r]();a["return"]=function(){i=!0},Array.from(a,function(){throw 2})}catch(o){}e.exports=function(t,e){if(!e&&!i)return!1;var n=!1;try{var a=[7],o=a[r]();o.next=function(){n=!0},a[r]=function(){return o},t(a)}catch(s){}return n}},{84:84}],45:[function(t,e,n){e.exports=function(t,e){return{value:e,done:!!t}}},{}],46:[function(t,e,n){e.exports={}},{}],47:[function(t,e,n){var r=Object;e.exports={create:r.create,getProto:r.getPrototypeOf,isEnum:{}.propertyIsEnumerable,getDesc:r.getOwnPropertyDescriptor,setDesc:r.defineProperty,setDescs:r.defineProperties,getKeys:r.keys,getNames:r.getOwnPropertyNames,getSymbols:r.getOwnPropertySymbols,each:[].forEach}},{}],48:[function(t,e,n){var r=t(47),i=t(79);e.exports=function(t,e){for(var n,a=i(t),o=r.getKeys(a),s=o.length,u=0;s>u;)if(a[n=o[u++]]===e)return n}},{47:47,79:79}],49:[function(t,e,n){e.exports=!1},{}],50:[function(t,e,n){e.exports=Math.expm1||function(t){return 0==(t=+t)?t:t>-1e-6&&1e-6>t?t+t*t/2:Math.exp(t)-1}},{}],51:[function(t,e,n){e.exports=Math.log1p||function(t){return(t=+t)>-1e-8&&1e-8>t?t-t*t/2:Math.log(1+t)}},{}],52:[function(t,e,n){e.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:0>t?-1:1}},{}],53:[function(t,e,n){var r,i,a,o=t(30),s=t(76).set,u=o.MutationObserver||o.WebKitMutationObserver,c=o.process,l=o.Promise,p="process"==t(12)(c),f=function(){var t,e,n;for(p&&(t=c.domain)&&(c.domain=null,t.exit());r;)e=r.domain,n=r.fn,e&&e.enter(),n(),e&&e.exit(),r=r.next;i=void 0,t&&t.enter()};if(p)a=function(){c.nextTick(f)};else if(u){var d=1,h=document.createTextNode("");new u(f).observe(h,{characterData:!0}),a=function(){h.data=d=-d}}else a=l&&l.resolve?function(){l.resolve().then(f)}:function(){s.call(o,f)};e.exports=function(t){var e={fn:t,next:void 0,domain:p&&c.domain};i&&(i.next=e),r||(r=e,a()),i=e}},{12:12,30:30,76:76}],54:[function(t,e,n){var r=t(47),i=t(81),a=t(35);e.exports=t(25)(function(){var t=Object.assign,e={},n={},r=Symbol(),i="abcdefghijklmnopqrst";return e[r]=7,i.split("").forEach(function(t){n[t]=t}),7!=t({},e)[r]||Object.keys(t({},n)).join("")!=i})?function(t,e){for(var n=i(t),o=arguments,s=o.length,u=1,c=r.getKeys,l=r.getSymbols,p=r.isEnum;s>u;)for(var f,d=a(o[u++]),h=l?c(d).concat(l(d)):c(d),m=h.length,v=0;m>v;)p.call(d,f=h[v++])&&(n[f]=d[f]);return n}:Object.assign},{25:25,35:35,47:47,81:81}],55:[function(t,e,n){var r=t(23),i=t(17),a=t(25);e.exports=function(t,e){var n=(i.Object||{})[t]||Object[t],o={};o[t]=e(n),r(r.S+r.F*a(function(){n(1)}),"Object",o)}},{17:17,23:23,25:25}],56:[function(t,e,n){var r=t(47),i=t(79),a=r.isEnum;e.exports=function(t){return function(e){for(var n,o=i(e),s=r.getKeys(o),u=s.length,c=0,l=[];u>c;)a.call(o,n=s[c++])&&l.push(t?[n,o[n]]:o[n]);return l}}},{47:47,79:79}],57:[function(t,e,n){var r=t(47),i=t(5),a=t(30).Reflect;e.exports=a&&a.ownKeys||function(t){var e=r.getNames(i(t)),n=r.getSymbols;return n?e.concat(n(t)):e}},{30:30,47:47,5:5}],58:[function(t,e,n){"use strict";var r=t(59),i=t(34),a=t(3);e.exports=function(){for(var t=a(this),e=arguments.length,n=Array(e),o=0,s=r._,u=!1;e>o;)(n[o]=arguments[o++])===s&&(u=!0);return function(){var r,a=this,o=arguments,c=o.length,l=0,p=0;if(!u&&!c)return i(t,n,a);if(r=n.slice(),u)for(;e>l;l++)r[l]===s&&(r[l]=o[p++]);for(;c>p;)r.push(o[p++]);return i(t,r,a)}}},{3:3,34:34,59:59}],59:[function(t,e,n){e.exports=t(30)},{30:30}],60:[function(t,e,n){e.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},{}],61:[function(t,e,n){var r=t(62);e.exports=function(t,e){for(var n in e)r(t,n,e[n]);return t}},{62:62}],62:[function(t,e,n){var r=t(30),i=t(32),a=t(83)("src"),o="toString",s=Function[o],u=(""+s).split(o);t(17).inspectSource=function(t){return s.call(t)},(e.exports=function(t,e,n,o){"function"==typeof n&&(n.hasOwnProperty(a)||i(n,a,t[e]?""+t[e]:u.join(e+"")),n.hasOwnProperty("name")||i(n,"name",e)),t===r?t[e]=n:(o||delete t[e],i(t,e,n))})(Function.prototype,o,function(){return"function"==typeof this&&this[a]||s.call(this)})},{17:17,30:30,32:32,83:83}],63:[function(t,e,n){e.exports=function(t,e){var n=e===Object(e)?function(t){return e[t]}:e;return function(e){return(e+"").replace(t,n)}}},{}],64:[function(t,e,n){e.exports=Object.is||function(t,e){return t===e?0!==t||1/t===1/e:t!=t&&e!=e}},{}],65:[function(t,e,n){var r=t(47).getDesc,i=t(39),a=t(5),o=function(t,e){if(a(t),!i(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,n,i){try{i=t(18)(Function.call,r(Object.prototype,"__proto__").set,2),i(e,[]),n=!(e instanceof Array)}catch(a){n=!0}return function(t,e){return o(t,e),n?t.__proto__=e:i(t,e),t}}({},!1):void 0),check:o}},{18:18,39:39,47:47,5:5}],66:[function(t,e,n){"use strict";var r=t(30),i=t(47),a=t(20),o=t(84)("species");e.exports=function(t){var e=r[t];a&&e&&!e[o]&&i.setDesc(e,o,{configurable:!0,get:function(){return this}})}},{20:20,30:30,47:47,84:84}],67:[function(t,e,n){var r=t(47).setDesc,i=t(31),a=t(84)("toStringTag");e.exports=function(t,e,n){t&&!i(t=n?t:t.prototype,a)&&r(t,a,{configurable:!0,value:e})}},{31:31,47:47,84:84}],68:[function(t,e,n){var r=t(30),i="__core-js_shared__",a=r[i]||(r[i]={});e.exports=function(t){return a[t]||(a[t]={})}},{30:30}],69:[function(t,e,n){var r=t(5),i=t(3),a=t(84)("species");e.exports=function(t,e){var n,o=r(t).constructor;return void 0===o||void 0==(n=r(o)[a])?e:i(n)}},{3:3,5:5,84:84}],70:[function(t,e,n){e.exports=function(t,e,n){if(!(t instanceof e))throw TypeError(n+": use the 'new' operator!");return t}},{}],71:[function(t,e,n){var r=t(78),i=t(19);e.exports=function(t){return function(e,n){var a,o,s=i(e)+"",u=r(n),c=s.length;return 0>u||u>=c?t?"":void 0:(a=s.charCodeAt(u),55296>a||a>56319||u+1===c||(o=s.charCodeAt(u+1))<56320||o>57343?t?s.charAt(u):a:t?s.slice(u,u+2):(a-55296<<10)+(o-56320)+65536)}}},{19:19,78:78}],72:[function(t,e,n){var r=t(40),i=t(19);e.exports=function(t,e,n){if(r(e))throw TypeError("String#"+n+" doesn't accept regex!");return i(t)+""}},{19:19,40:40}],73:[function(t,e,n){var r=t(80),i=t(74),a=t(19);e.exports=function(t,e,n,o){var s=a(t)+"",u=s.length,c=void 0===n?" ":n+"",l=r(e);if(u>=l)return s;""==c&&(c=" ");var p=l-u,f=i.call(c,Math.ceil(p/c.length));return f.length>p&&(f=f.slice(0,p)),o?f+s:s+f}},{19:19,74:74,80:80}],74:[function(t,e,n){"use strict";var r=t(78),i=t(19);e.exports=function(t){var e=i(this)+"",n="",a=r(t);if(0>a||a==1/0)throw RangeError("Count can't be negative");for(;a>0;(a>>>=1)&&(e+=e))1&a&&(n+=e);return n}},{19:19,78:78}],75:[function(t,e,n){var r=t(23),i=t(19),a=t(25),o=" \n\x0B\f\r   ᠎              \u2028\u2029\ufeff",s="["+o+"]",u="​…",c=RegExp("^"+s+s+"*"),l=RegExp(s+s+"*$"),p=function(t,e){var n={};n[t]=e(f),r(r.P+r.F*a(function(){return!!o[t]()||u[t]()!=u}),"String",n)},f=p.trim=function(t,e){return t=i(t)+"",1&e&&(t=t.replace(c,"")),2&e&&(t=t.replace(l,"")),t};e.exports=p},{19:19,23:23,25:25}],76:[function(t,e,n){var r,i,a,o=t(18),s=t(34),u=t(33),c=t(21),l=t(30),p=l.process,f=l.setImmediate,d=l.clearImmediate,h=l.MessageChannel,m=0,v={},g="onreadystatechange",y=function(){var t=+this;if(v.hasOwnProperty(t)){var e=v[t];delete v[t],e()}},b=function(t){y.call(t.data)};f&&d||(f=function(t){for(var e=[],n=1;arguments.length>n;)e.push(arguments[n++]);return v[++m]=function(){s("function"==typeof t?t:Function(t),e)},r(m),m},d=function(t){delete v[t]},"process"==t(12)(p)?r=function(t){p.nextTick(o(y,t,1))}:h?(i=new h,a=i.port2,i.port1.onmessage=b,r=o(a.postMessage,a,1)):l.addEventListener&&"function"==typeof postMessage&&!l.importScripts?(r=function(t){l.postMessage(t+"","*")},l.addEventListener("message",b,!1)):r=g in c("script")?function(t){u.appendChild(c("script"))[g]=function(){u.removeChild(this),y.call(t)}}:function(t){setTimeout(o(y,t,1),0)}),e.exports={set:f,clear:d}},{12:12,18:18,21:21,30:30,33:33,34:34}],77:[function(t,e,n){var r=t(78),i=Math.max,a=Math.min;e.exports=function(t,e){return t=r(t),0>t?i(t+e,0):a(t,e)}},{78:78}],78:[function(t,e,n){var r=Math.ceil,i=Math.floor;e.exports=function(t){return isNaN(t=+t)?0:(t>0?i:r)(t)}},{}],79:[function(t,e,n){var r=t(35),i=t(19);e.exports=function(t){return r(i(t))}},{19:19,35:35}],80:[function(t,e,n){var r=t(78),i=Math.min;e.exports=function(t){return t>0?i(r(t),9007199254740991):0}},{78:78}],81:[function(t,e,n){var r=t(19);e.exports=function(t){return Object(r(t))}},{19:19}],82:[function(t,e,n){var r=t(39);e.exports=function(t,e){if(!r(t))return t;var n,i;if(e&&"function"==typeof(n=t.toString)&&!r(i=n.call(t)))return i;if("function"==typeof(n=t.valueOf)&&!r(i=n.call(t)))return i;if(!e&&"function"==typeof(n=t.toString)&&!r(i=n.call(t)))return i;throw TypeError("Can't convert object to primitive value")}},{39:39}],83:[function(t,e,n){var r=0,i=Math.random();e.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++r+i).toString(36))}},{}],84:[function(t,e,n){var r=t(68)("wks"),i=t(83),a=t(30).Symbol;e.exports=function(t){return r[t]||(r[t]=a&&a[t]||(a||i)("Symbol."+t))}},{30:30,68:68,83:83}],85:[function(t,e,n){var r=t(11),i=t(84)("iterator"),a=t(46);e.exports=t(17).getIteratorMethod=function(t){return void 0!=t?t[i]||t["@@iterator"]||a[r(t)]:void 0}},{11:11,17:17,46:46,84:84}],86:[function(t,e,n){"use strict";var r,i=t(47),a=t(23),o=t(20),s=t(60),u=t(33),c=t(21),l=t(31),p=t(12),f=t(34),d=t(25),h=t(5),m=t(3),v=t(39),g=t(81),y=t(79),b=t(78),x=t(77),w=t(80),_=t(35),k=t(83)("__proto__"),E=t(9),S=t(8)(!1),O=Object.prototype,A=Array.prototype,P=A.slice,C=A.join,j=i.setDesc,T=i.getDesc,M=i.setDescs,L={};o||(r=!d(function(){return 7!=j(c("div"),"a",{get:function(){return 7}}).a}),i.setDesc=function(t,e,n){if(r)try{return j(t,e,n)}catch(i){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(h(t)[e]=n.value),t},i.getDesc=function(t,e){if(r)try{return T(t,e)}catch(n){}return l(t,e)?s(!O.propertyIsEnumerable.call(t,e),t[e]):void 0},i.setDescs=M=function(t,e){h(t);for(var n,r=i.getKeys(e),a=r.length,o=0;a>o;)i.setDesc(t,n=r[o++],e[n]);return t}),a(a.S+a.F*!o,"Object",{getOwnPropertyDescriptor:i.getDesc,defineProperty:i.setDesc,defineProperties:M});var F="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),N=F.concat("length","prototype"),R=F.length,D=function(){var t,e=c("iframe"),n=R,r=">";for(e.style.display="none",u.appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write(" + + + {{#if data.recharge_port}} + {{#if data.recharge_port.mech}} + + {{Math.round(adata.recharge_port.mech.health)}}/{{adata.recharge_port.mech.maxhealth}} + + {{#if data.recharge_port.mech.cell}} + {{#if data.recharge_port.mech.cell.critfail}} + Cell Critical Failure + {{else}} + + {{Math.round(adata.recharge_port.mech.cell.charge)}}/{{Math.round(adata.recharge_port.mech.cell.maxcharge)}} + + {{/if}} + {{else}} + Cell Missing + {{/if}} + {{else}} + Mech Not Found + {{/if}} + {{else}} + Recharging Port Not Found + Reconnect + {{/if}} + diff --git a/tools/Runtime Condenser/Main.cpp b/tools/Runtime Condenser/Main.cpp index f5410bd7981..c8127867645 100644 --- a/tools/Runtime Condenser/Main.cpp +++ b/tools/Runtime Condenser/Main.cpp @@ -1,7 +1,7 @@ /* Runtime Condenser by Nodrak * Cleaned up and refactored by MrStonedOne * This will sum up identical runtimes into one, giving a total of how many times it occured. The first occurance - * of the runtime will log the proc, source, usr and src, the rest will just add to the total. Infinite loops will + * of the runtime will log the source, usr and src, the rest will just add to the total. Infinite loops will * also be caught and displayed (if any) above the list of runtimes. * * How to use: @@ -22,11 +22,19 @@ #include #include +#include +#include #include #include #include #include #include +#include + + +#define PROGRESS_FPS 10 +#define PROGRESS_BAR_INNER_WIDTH 50 +#define LINEBUFFER (512*1024) //512KiB using namespace std; @@ -44,182 +52,248 @@ struct harddel { unsigned int count; }; //What we use to read input -string lastLine = ""; -string currentLine = ""; -string nextLine = ""; +string * lastLine = new string(); +string * currentLine = new string(); +string * nextLine = new string(); //Stores lines we want to keep to print out -unordered_map storedRuntime; -unordered_map storedInfiniteLoop; -unordered_map storedHardDel; +unordered_map storedRuntime; +unordered_map storedInfiniteLoop; +unordered_map storedHardDel; //Stat tracking stuff for output unsigned int totalRuntimes = 0; -unsigned int totalUniqueRuntimes = 0; unsigned int totalInfiniteLoops = 0; -unsigned int totalUniqueInfiniteLoops = 0; unsigned int totalHardDels = 0; -unsigned int totalUniqueHardDels = 0; -//Misc -runtime* currentRuntime = NULL; //for storing the current runtime when we want to read the extra info on the next lines. +bool endofbuffer = false; //like substr, but returns an empty string if the string is smaller then start, rather then an exception. -inline string safe_substr(string S, size_t start = 0, size_t end = string::npos) { - if (start > S.length()) - start = S.length(); - return S.substr(start, end); +inline string safe_substr(string * S, size_t start = 0, size_t end = string::npos) { + if (start > S->length()) + start = S->length(); + return S->substr(start, end); } -inline void forward_progress(ifstream &inputFile) { +//getline() is slow as fucking balls. this is quicker because we prefill a buffer rather then read 1 byte at a time searching for newlines, lowering on i/o calls and overhead. (110MB/s vs 40MB/s on a 1.8GB file pre-filled into the disk cache) +//if i wanted to make it even faster, I'd use a reading thread, a new line searching thread, another thread or four for searching for runtimes in the list to see if they are unique, and finally the main thread for displaying the progress bar. but fuck that noise. +inline string * readline(FILE * f) { + static char buf[LINEBUFFER]; + static size_t pos = 0; + static size_t size = 0; + + for (size_t i = pos; i < LINEBUFFER; i++) { + char c = buf[i]; + if (i >= size && (pos || i < LINEBUFFER-1)) { + if (feof(f) || ferror(f)) + break; + if (size && pos) { //move current stuff to start of buffer + size -= pos; + i -= pos; + memmove(buf, &buf[pos], size); + } + //fill remaining buffer + size += fread(&buf[i], 1, LINEBUFFER-size-1, f); + pos = 0; + c = buf[i]; + } + if (c == '\n') { + //trim off any newlines from the start + while (i > pos && (buf[pos] == '\r' || buf[pos] == '\n')) + pos++; + string * s = new string(&buf[pos], i-pos); + pos = i+1; + return s; + } + + } + string * s = new string(&buf[pos], size-pos); + pos = 0; + size = 0; + endofbuffer = true; + return s; +} + +inline void forward_progress(FILE * inputFile) { + delete(lastLine); lastLine = currentLine; currentLine = nextLine; - getline(inputFile, nextLine); + nextLine = readline(inputFile); //strip out any timestamps. - if (nextLine.length() >= 10) - if (nextLine[0] == '[' && nextLine[3] == ':' && nextLine[6] == ':' && nextLine[9] == ']') - nextLine = nextLine.substr(10); -} + if (nextLine->length() >= 10) { + if ((*nextLine)[0] == '[' && (*nextLine)[3] == ':' && (*nextLine)[6] == ':' && (*nextLine)[9] == ']') + nextLine->erase(0, 10); + } +} +//deallocates to, copys from to to. +inline void string_send(string * &from, string * &to) { + delete(to); + to = new string(*from); +} +inline void printprogressbar(unsigned short progress /*as percent*/) { + double const modifer = 100.0L/(double)PROGRESS_BAR_INNER_WIDTH; + size_t bars = (double)progress/modifer; + cout << "\r[" << string(bars, '=') << ((progress < 100) ? ">" : "") << string(PROGRESS_BAR_INNER_WIDTH-(bars+((progress < 100) ? 1 : 0)), ' ') << "] " << progress << "%"; + cout.flush(); +} + bool readFromFile() { //Open file to read - ifstream inputFile("Input.txt"); + FILE * inputFile = fopen("Input.txt", "r"); - if (inputFile.is_open()) { - while (!inputFile.eof()) { //Until end of file - //Update our lines - forward_progress(inputFile); + if (ferror(inputFile)) + return false; - //After finding a new runtime, check to see if there are extra values to store - if (currentRuntime) { - //Skip ahead + fseek(inputFile, 0, SEEK_END); + long long fileLength = ftell(inputFile); + fseek(inputFile, 0, SEEK_SET); + clock_t nextupdate = clock(); + if (feof(inputFile)) + return false; //empty file + do { + //Update our lines + forward_progress(inputFile); + //progress bar + if (clock() >= nextupdate) { + int dProgress = (int)(((long double)ftell(inputFile) / (long double)fileLength) * 100.0L); + printprogressbar(dProgress); + nextupdate = clock() + (CLOCKS_PER_SEC/PROGRESS_FPS); + } + //Found a runtime! + if (safe_substr(currentLine, 0, 14) == "runtime error:") { + if (currentLine->length() <= 17) { //empty runtime, check next line. + //runtime is on the line before this one. (byond bug) + if (nextLine->length() < 2) { + string_send(lastLine, nextLine); + } forward_progress(inputFile); - - //If we find this, we have new stuff to store - if (safe_substr(nextLine, 2, 4) == "usr:") { - //Skip ahead - forward_progress(inputFile); - - //Store more info - currentRuntime->source = lastLine; - currentRuntime->usr = currentLine; - currentRuntime->src = nextLine; - - //Skip ahead again - forward_progress(inputFile); - - if (safe_substr(nextLine, 2, 8) == "src.loc:") - currentRuntime->loc = nextLine; - - } - currentRuntime = NULL; + string * tmp = new string("runtime error: " + *currentLine); + string_send(tmp, currentLine); + delete(tmp); } - - //Found an infinite loop! - if (safe_substr(currentLine, 0, 23) == "Infinite loop suspected" || safe_substr(currentLine, 0, 31) == "Maximum recursion level reached") { + //we assign this to the right container in a moment. + unordered_map * storage_container; + + //runtime is actually an infinite loop + if (safe_substr(currentLine, 15, 23) == "Infinite loop suspected" || safe_substr(currentLine, 15, 31) == "Maximum recursion level reached") { + //use our infinite loop container. + storage_container = &storedInfiniteLoop; totalInfiniteLoops++; - runtime* R = storedInfiniteLoop[currentLine]; - if (!R || R->text != currentLine) { - R = new runtime; - storedInfiniteLoop[currentLine] = R; - R->text = currentLine; - forward_progress(inputFile); - R->proc = nextLine; - R->count = 1; - currentRuntime = R; - totalUniqueInfiniteLoops++; - } else { //existed already - R->count++; - } - - } - //Found a runtime! - else if (safe_substr(currentLine, 0, 14) == "runtime error:") { - if (currentLine.length() <= 17) { //empty runtime, check next line. - if (nextLine.length() < 2) //runtime is on the line before this one. (byond bug) - nextLine = lastLine; - forward_progress(inputFile); - currentLine = "runtime error: " + currentLine; - } + // skip the line about world.loop_checks + forward_progress(inputFile); + string_send(lastLine, currentLine); + } else { + //use the runtime container + storage_container = &storedRuntime; totalRuntimes++; - runtime* R = storedRuntime[currentLine]; - if (!R || R->text != currentLine) { - R = new runtime; - storedRuntime[currentLine] = R; - R->text = currentLine; - R->proc = nextLine; - R->count = 1; - currentRuntime = R; - totalUniqueRuntimes++; - } else { //existed already - R->count++; - } } - //Found a hard del! - else if (safe_substr(currentLine, 0, 7) == "Path : ") { - string deltype = safe_substr(currentLine, 7); - if (deltype.substr(deltype.size()-1,1) == " ") //some times they have a single trailing space. - deltype = deltype.substr(0, deltype.size()-1); - - unsigned int failures = strtoul(safe_substr(nextLine, 11).c_str(), NULL, 10); - if (failures <= 0) - continue; - - totalHardDels += failures; - harddel * D = storedHardDel[deltype]; - if (!D || D->type != deltype) { - D = new harddel; - storedHardDel[deltype] = D; - D->type = deltype; - D->count = failures; - totalUniqueHardDels++; - } else { - D->count += failures; + string key = *currentLine; + bool procfound = false; //so other things don't have to bother checking for this again. + if (safe_substr(nextLine, 0, 10) == "proc name:") { + key += *nextLine; + procfound = true; + } + + //(get the address of a runtime from (a pointer to a container of runtimes)) to then store in a pointer to a runtime. + //(and who said pointers were hard.) + runtime* R = &((*storage_container)[key]); + + //new + if (R->text != *currentLine) { + R->text = *currentLine; + if (procfound) { + R->proc = *nextLine; + forward_progress(inputFile); } + R->count = 1; + + //search for source file info + if (safe_substr(nextLine, 2, 12) == "source file:") { + R->source = *nextLine; + //skip again + forward_progress(inputFile); + } + //If we find this, we have new stuff to store + if (safe_substr(nextLine, 2, 4) == "usr:") { + forward_progress(inputFile); + forward_progress(inputFile); + //Store more info + R->usr = *lastLine; + R->src = *currentLine; + if (safe_substr(nextLine, 2, 8) == "src.loc:") { + R->loc = *nextLine; + forward_progress(inputFile); + } + } + + } else { //existed already + R->count++; + if (procfound) + forward_progress(inputFile); + } + + } else if (safe_substr(currentLine, 0, 7) == "Path : ") { + string deltype = safe_substr(currentLine, 7); + if (deltype.substr(deltype.size()-1,1) == " ") //some times they have a single trailing space. + deltype = deltype.substr(0, deltype.size()-1); + + unsigned int failures = strtoul(safe_substr(nextLine, 11).c_str(), NULL, 10); + if (failures <= 0) + continue; + + totalHardDels += failures; + harddel* D = &storedHardDel[deltype]; + if (D->type != deltype) { + D->type = deltype; + D->count = failures; + } else { + D->count += failures; } } - } else { - return false; - } + } while (!feof(inputFile) || !endofbuffer); //Until end of file + printprogressbar(100); + cout << endl; return true; } -bool runtimeComp(const runtime* a, const runtime* b) { - return a->count > b->count; +bool runtimeComp(const runtime &a, const runtime &b) { + return a.count > b.count; } -bool hardDelComp(const harddel* a, const harddel* b) { - return a->count > b->count; +bool hardDelComp(const harddel &a, const harddel &b) { + return a.count > b.count; } bool writeToFile() { //Open and clear the file ofstream outputFile("Output.txt", ios::trunc); - + if(outputFile.is_open()) { - outputFile << "Note: The proc name, source file, src and usr are all from the FIRST of the identical runtimes. Everything else is cropped.\n\n"; - if(totalUniqueInfiniteLoops > 0) - outputFile << "Total unique infinite loops: " << totalUniqueInfiniteLoops << endl; + outputFile << "Note: The source file, src and usr are all from the FIRST of the identical runtimes. Everything else is cropped.\n\n"; + if(storedInfiniteLoop.size() > 0) + outputFile << "Total unique infinite loops: " << storedInfiniteLoop.size() << endl; if(totalInfiniteLoops > 0) outputFile << "Total infinite loops: " << totalInfiniteLoops << endl << endl; - outputFile << "Total unique runtimes: " << totalUniqueRuntimes << endl; + outputFile << "Total unique runtimes: " << storedRuntime.size() << endl; outputFile << "Total runtimes: " << totalRuntimes << endl << endl; - if(totalUniqueHardDels > 0) - outputFile << "Total unique hard deletions: " << totalUniqueHardDels << endl; + if(storedHardDel.size() > 0) + outputFile << "Total unique hard deletions: " << storedHardDel.size() << endl; if(totalHardDels > 0) outputFile << "Total hard deletions: " << totalHardDels << endl << endl; //If we have infinite loops, display them first. - if(totalInfiniteLoops > 0) { - vector infiniteLoops; + if(storedInfiniteLoop.size() > 0) { + vector infiniteLoops; infiniteLoops.reserve(storedInfiniteLoop.size()); - for (unordered_map::iterator it=storedInfiniteLoop.begin(); it != storedInfiniteLoop.end(); it++) + for (unordered_map::iterator it=storedInfiniteLoop.begin(); it != storedInfiniteLoop.end(); it++) infiniteLoops.push_back(it->second); + storedInfiniteLoop.clear(); sort(infiniteLoops.begin(), infiniteLoops.end(), runtimeComp); outputFile << "** Infinite loops **"; for (int i=0; i < infiniteLoops.size(); i++) { - runtime* R = infiniteLoops[i]; + runtime* R = &infiniteLoops[i]; outputFile << endl << endl << "The following infinite loop has occurred " << R->count << " time(s).\n"; outputFile << R->text << endl; if(R->proc.length()) @@ -239,13 +313,14 @@ bool writeToFile() { //Do runtimes next outputFile << "** Runtimes **"; - vector runtimes; + vector runtimes; runtimes.reserve(storedRuntime.size()); - for (unordered_map::iterator it=storedRuntime.begin(); it != storedRuntime.end(); it++) + for (unordered_map::iterator it=storedRuntime.begin(); it != storedRuntime.end(); it++) runtimes.push_back(it->second); + storedRuntime.clear(); sort(runtimes.begin(), runtimes.end(), runtimeComp); for (int i=0; i < runtimes.size(); i++) { - runtime* R = runtimes[i]; + runtime* R = &runtimes[i]; outputFile << endl << endl << "The following runtime has occurred " << R->count << " time(s).\n"; outputFile << R->text << endl; if(R->proc.length()) @@ -264,13 +339,14 @@ bool writeToFile() { //and finally, hard deletes if(totalHardDels > 0) { outputFile << endl << "** Hard deletions **"; - vector hardDels; + vector hardDels; hardDels.reserve(storedHardDel.size()); - for (unordered_map::iterator it=storedHardDel.begin(); it != storedHardDel.end(); it++) + for (unordered_map::iterator it=storedHardDel.begin(); it != storedHardDel.end(); it++) hardDels.push_back(it->second); + storedHardDel.clear(); sort(hardDels.begin(), hardDels.end(), hardDelComp); for(int i=0; i < hardDels.size(); i++) { - harddel* D = hardDels[i]; + harddel* D = &hardDels[i]; outputFile << endl << D->type << " - " << D->count << " time(s).\n"; } } @@ -282,28 +358,30 @@ bool writeToFile() { } int main() { + ios_base::sync_with_stdio(false); + ios::sync_with_stdio(false); char exit; //Used to stop the program from immediately exiting - + cout << "Reading input.\n"; if(readFromFile()) { cout << "Input read successfully!\n"; } else { cout << "Input failed to open, shutting down.\n"; cout << "\nEnter any letter to quit.\n"; - cin >> exit; + exit = cin.get(); return 1; } - + cout << "Writing output.\n"; if(writeToFile()) { cout << "Output was successful!\n"; cout << "\nEnter any letter to quit.\n"; - cin >> exit; + exit = cin.get(); return 0; } else { cout << "The output file could not be opened, shutting down.\n"; cout << "\nEnter any letter to quit.\n"; - cin >> exit; + exit = cin.get(); return 0; } diff --git a/tools/Runtime Condenser/Output.txt b/tools/Runtime Condenser/Output.txt index 1bb4a90c78f..914571fea55 100644 --- a/tools/Runtime Condenser/Output.txt +++ b/tools/Runtime Condenser/Output.txt @@ -1,190 +1,438 @@ -Note: The proc name, source file, src and usr are all from the FIRST of the identical runtimes. Everything else is cropped. +Note: The source file, src and usr are all from the FIRST of the identical runtimes. Everything else is cropped. -Total unique runtimes: 25 -Total runtimes: 767 +Total unique runtimes: 28 +Total runtimes: 124723 + +Total unique hard deletions: 108 +Total hard deletions: 1080 ** Runtimes ** -The following runtime has occured 269 time(s). -runtime error: Cannot read null.viruses -proc name: cure (/datum/disease/proc/cure) - source file: disease.dm,156 +The following runtime has occurred 123121 time(s). +runtime error: Component is missing a pipenet! Rebuilding... + + +The following runtime has occurred 709 time(s). +runtime error: wrong type of value for list +proc name: updateghostimages (/mob/dead/observer/proc/updateghostimages) + source file: observer.dm,488 + usr: (src) + src: Argon IXV (/mob/dead/observer) + src.loc: the asteroid sand (217,137,8) (/turf/open/floor/plating/asteroid) + + +The following runtime has occurred 696 time(s). +runtime error: Cannot read null.air +proc name: return air (/obj/machinery/atmospherics/pipe/return_air) + source file: pipes.dm,58 usr: null - src: Space Retrovirus (/datum/disease/dnaspread) + src: the air supply pipe (/obj/machinery/atmospherics/pipe/manifold4w/supply/visible) + src.loc: the floor (169,130,1) (/turf/open/floor/plasteel) -The following runtime has occured 199 time(s). -runtime error: Cannot read null.has_gravity -proc name: throw at (/atom/movable/proc/throw_at) - source file: throwing.dm,194 - usr: Reese Marcotte (/mob/living/carbon/human) - src: Reese Marcotte (/mob/living/carbon/human) - - -The following runtime has occured 165 time(s). -runtime error: Cannot read null.slot_flags -proc name: db click (/mob/living/carbon/human/db_click) - source file: inventory.dm,1083 - usr: Puke Chunks (/mob/living/carbon/human) - src: Puke Chunks (/mob/living/carbon/human) - - -The following runtime has occured 25 time(s). -runtime error: Cannot read null.flags -proc name: relaymove (/obj/effect/dummy/spell_jaunt/relaymove) - - -The following runtime has occured 24 time(s). -runtime error: Cannot read null.len -proc name: mergeRecordLists (/proc/mergeRecordLists) - source file: helpers.dm,260 - usr: Wintermute (/mob/living/silicon/ai) +The following runtime has occurred 48 time(s). +runtime error: bad resource file +proc name: send asset (/proc/send_asset) + source file: asset_cache.dm,44 + usr: Mariabella Pycroft-Crane (/mob/living/carbon/human) src: null -The following runtime has occured 20 time(s). -runtime error: Cannot read null.total_volume -proc name: attackby (/obj/machinery/reagentgrinder/attackby) - source file: Chemistry-Machinery.dm,751 - usr: Reese Marcotte (/mob/living/carbon/human) - src: All-In-One Grinder (/obj/machinery/reagentgrinder) - - -The following runtime has occured 16 time(s). -runtime error: Cannot read null.broadcasting -proc name: radio menu (/mob/living/silicon/robot/proc/radio_menu) - source file: robot.dm,857 - usr: Engineering Cyborg -432 (/mob/living/silicon/robot) - src: Engineering Cyborg -432 (/mob/living/silicon/robot) - - -The following runtime has occured 7 time(s). -runtime error: unexpected stat -proc name: Stat (/mob/living/silicon/robot/Stat) - source file: robot.dm,227 - usr: Michigan Slim (/mob/living/carbon/human) - src: Engineering Cyborg -133 (/mob/living/silicon/robot) - - -The following runtime has occured 7 time(s). -runtime error: Cannot read null.current -proc name: check completion (/datum/objective/download/check_completion) - source file: objective.dm,411 - usr: null - src: /datum/objective/download (/datum/objective/download) - - -The following runtime has occured 6 time(s). -runtime error: Cannot create objects of type null. -proc name: Topic (/obj/machinery/computer/rdconsole/Topic) - source file: rdconsole.dm,381 - usr: Matthew Hoff (/mob/living/carbon/human) - src: Core R&D Console (/obj/machinery/computer/rdconsole/core) - - -The following runtime has occured 6 time(s). -runtime error: Cannot read null.fields -proc name: mergeRecordLists (/proc/mergeRecordLists) - source file: helpers.dm,263 - usr: Wintermute (/mob/living/silicon/ai) - src: null - - -The following runtime has occured 3 time(s). -runtime error: undefined variable /client/var/loc -proc name: get turf (/proc/get_turf) - source file: helper_procs.dm,38 - usr: the ghost (/mob/dead/observer) - src: null - - -The following runtime has occured 3 time(s). -runtime error: Cannot read null.nodes -proc name: merge powernets (/datum/powernet/proc/merge_powernets) - source file: power.dm,401 - usr: Darin Keppel (/mob/living/carbon/human) - src: /datum/powernet (/datum/powernet) - - -The following runtime has occured 3 time(s). -runtime error: Cannot read null.reagents -proc name: fire syringe (/obj/item/weapon/gun/syringe/proc/fire_syringe) - - -The following runtime has occured 2 time(s). -runtime error: undefined proc or verb /obj/machinery/space_heater/attack(). - - - -The following runtime has occured 2 time(s). +The following runtime has occurred 30 time(s). runtime error: list index out of bounds -proc name: mergeConnectedNetworksOnTurf (/obj/structure/cable/proc/mergeConnectedNetworksOnTurf) - source file: cable.dm,520 - usr: Josue Sandford (/mob/living/carbon/human) - src: the power cable (/obj/structure/cable) - - -The following runtime has occured 2 time(s). -runtime error: Cannot read null.loc -proc name: Life (/mob/living/simple_animal/corgi/Ian/Life) - source file: corgi.dm,304 +proc name: GetGreaterChild (/Heap/proc/GetGreaterChild) + source file: heap.dm,62 usr: null - src: Captain Ian (/mob/living/simple_animal/corgi/Ian) + src: /Heap (/Heap) -The following runtime has occured 1 time(s). -runtime error: undefined proc or verb /obj/machinery/portable_atmospherics/canister/toxins/attack(). +The following runtime has occurred 21 time(s). +runtime error: undefined proc or verb /turf/closed/wall/shuttle/high pressure movements(). - -The following runtime has occured 1 time(s). -runtime error: undefined variable /datum/preferences/var/fields -proc name: Topic (/obj/machinery/computer/cloning/Topic) - source file: cloning.dm,370 - usr: Logan Graves (/mob/living/carbon/human) - src: Cloning console (/obj/machinery/computer/cloning) +The following runtime has occurred 15 time(s). +runtime error: Simple animal being instantiated in nullspace +proc name: stack trace (/proc/stack_trace) + source file: unsorted.dm,1358 + usr: the Securitron (/mob/living/simple_animal/bot/secbot) + src: null -The following runtime has occured 1 time(s). -runtime error: undefined variable /turf/simulated/floor/plating/var/mineral -proc name: attackby (/turf/simulated/wall/attackby) - source file: turf.dm,600 - usr: Monte Smail (/mob/living/carbon/human) - src: the plating (176,172,5) (/turf/simulated/floor/plating) - - -The following runtime has occured 1 time(s). -runtime error: Cannot read null.blood_DNA -proc name: update inv w uniform (/mob/living/carbon/human/update_inv_w_uniform) - source file: update_icons.dm,372 +The following runtime has occurred 12 time(s). +runtime error: Cannot read null.viewavail +proc name: record (/obj/machinery/computer/monitor/proc/record) + source file: monitor.dm,41 usr: null - src: Chip Harshman (/mob/living/carbon/human) + src: Engineering Power Monitoring C... (/obj/machinery/computer/monitor) + src.loc: space (154,151,1) (/turf/open/space) -The following runtime has occured 1 time(s). -runtime error: Cannot execute null.dropped(). -proc name: drop l hand (/mob/proc/drop_l_hand) - source file: inventory.dm,104 - usr: Jeb Stone (/mob/living/carbon/human) - src: Jeb Stone (/mob/living/carbon/human) +The following runtime has occurred 11 time(s). +runtime error: Cannot read null.selection_color +proc name: SetChoices (/datum/preferences/proc/SetChoices) + source file: preferences.dm,543 + usr: Sweetestbro (/mob/new_player) + src: /datum/preferences (/datum/preferences) -The following runtime has occured 1 time(s). -runtime error: Cannot read null.w_class -proc name: attackby (/obj/item/weapon/storage/attackby) - source file: storage.dm,187 - usr: Samuel York (/mob/living/carbon/human) - src: the backpack (/obj/item/weapon/storage/backpack) +The following runtime has occurred 10 time(s). +runtime error: Cannot execute null.add turf(). +proc name: process cell (/turf/open/process_cell) + source file: LINDA_turf_tile.dm,172 + usr: null + src: the plating (102,135,1) (/turf/open/floor/plating) -The following runtime has occured 1 time(s). -runtime error: Cannot read null.amount -proc name: attackby (/obj/machinery/constructable_frame/machine_frame/attackby) - source file: constructable_frame.dm,27 - usr: Quinton Bould (/mob/living/carbon/human) - src: the machine frame (/obj/machinery/constructable_frame/machine_frame) +The following runtime has occurred 9 time(s). +runtime error: Cannot read null.thrownby +proc name: hitby (/mob/living/carbon/human/hitby) + source file: human_defense.dm,353 + usr: the monkey (662) (/mob/living/carbon/monkey) + src: Sydney Hujsak (/mob/living/carbon/human) -The following runtime has occured 1 time(s). -runtime error: Cannot modify null.status. -proc name: death (/mob/living/silicon/robot/death) +The following runtime has occurred 8 time(s). +runtime error: Cannot execute null.HasProximity(). +proc name: Entered (/turf/Entered) + source file: turf.dm,95 + usr: 0 + src: the floor (99,147,1) (/turf/open/floor/plasteel) + + +The following runtime has occurred 5 time(s). +runtime error: bad client +proc name: open (/datum/browser/proc/open) + source file: browser.dm,106 + usr: Timothy Catleay (/mob/living/carbon/human) + src: /datum/browser (/datum/browser) + + +The following runtime has occurred 4 time(s). +runtime error: return_file_text(): File not found + + +The following runtime has occurred 4 time(s). +runtime error: Cannot execute null.merge(). +proc name: assume air (/turf/open/assume_air) + source file: LINDA_turf_tile.dm,56 + usr: null + src: the engraved floor (95,49,5) (/turf/open/floor/engine/cult) + + +The following runtime has occurred 3 time(s). +runtime error: Cannot read null.gases +proc name: tile graphic (/turf/open/proc/tile_graphic) + source file: LINDA_turf_tile.dm,110 + usr: null + src: the floor (81,52,5) (/turf/open/floor/plasteel/freezer) + + +The following runtime has occurred 3 time(s). +runtime error: undefined proc or verb /turf/closed/wall/high pressure movements(). + + +The following runtime has occurred 2 time(s). +runtime error: Cannot modify null.loc. +proc name: ui act (/obj/machinery/suit_storage_unit/ui_act) + source file: suit_storage_unit.dm,359 + usr: Cy Carter (/mob/living/carbon/human) + src: the suit storage unit (/obj/machinery/suit_storage_unit/standard_unit) + + +The following runtime has occurred 2 time(s). +runtime error: Cannot execute null.remove(). +proc name: remove air (/turf/open/remove_air) + source file: LINDA_turf_tile.dm,62 + usr: null + src: the engraved floor (171,210,5) (/turf/open/floor/engine/cult) + + +The following runtime has occurred 2 time(s). +runtime error: Cannot execute null.return pressure(). +proc name: update pressure (/obj/mecha/working/ripley/proc/update_pressure) + source file: ripley.dm,150 + usr: 0 + src: the APLU \"Ripley\" (/obj/mecha/working/ripley) + src.loc: the floor (88,45,5) (/turf/open/floor/plasteel/freezer) + + +The following runtime has occurred 1 time(s). +runtime error: list index out of bounds +proc name: Topic (/datum/song/Topic) + source file: musician.dm,208 + usr: Francisco Luque (/mob/living/carbon/human) + src: Untitled (/datum/song/handheld) + + +The following runtime has occurred 1 time(s). +runtime error: undefined proc or verb /turf/closed/wall/r_wall/high pressure movements(). + + +The following runtime has occurred 1 time(s). +runtime error: bad client +proc name: show (/datum/html_interface/proc/show) + source file: html_interface.dm,227 + usr: Mariabella Pycroft-Crane (/mob/living/carbon/human) + src: /datum/html_interface/nanotras... (/datum/html_interface/nanotrasen) + + +The following runtime has occurred 1 time(s). +runtime error: Cannot execute null.GetAtmosAdjacentTurfs(). +proc name: spread smoke (/obj/effect/particle_effect/smoke/proc/spread_smoke) + source file: effects_smoke.dm,74 + usr: null + src: the smoke (/obj/effect/particle_effect/smoke) + src.loc: null + + +The following runtime has occurred 1 time(s). +runtime error: Cannot read null.pipe_vision_img +proc name: add ventcrawl (/mob/living/proc/add_ventcrawl) + source file: ventcrawling.dm,94 + usr: (src) + src: the monkey (809) (/mob/living/carbon/monkey) + src.loc: the Cloning Lab vent pump #1 (/obj/machinery/atmospherics/components/unary/vent_pump) + + +The following runtime has occurred 1 time(s). +runtime error: Cannot execute null.s click(). +proc name: Click (/obj/screen/grab/Click) + source file: screen_objects.dm,167 + usr: Hisstian Weston Chandler (/mob/living/carbon/human) + src: the disarm/kill (/obj/screen/grab) + + +The following runtime has occurred 1 time(s). +runtime error: list index out of bounds +proc name: mod list add (/client/proc/mod_list_add) + source file: modifyvariables.dm,161 + usr: the potted plant (/mob/dead/observer) + src: MimicFaux (/client) + + +The following runtime has occurred 1 time(s). +runtime error: Cannot execute null.get reagent amount(). +proc name: get fuel (/obj/item/weapon/weldingtool/proc/get_fuel) + source file: tools.dm,334 + usr: null + src: the welding tool (/obj/item/weapon/weldingtool) + src.loc: null + + + +** Hard deletions ** +/obj/structure/lattice - 499 time(s). + +/mob/new_player - 91 time(s). + +/image - 87 time(s). + +/mob/dead/observer - 42 time(s). + +/datum/mind - 36 time(s). + +/obj/item/radio/integrated/signal - 31 time(s). + +/obj/effect/ebeam - 24 time(s). + +/obj/machinery/camera - 15 time(s). + +/obj/machinery/atmospherics/components/binary/pump - 14 time(s). + +/obj/effect/decal/cleanable/trail_holder - 10 time(s). + +/obj/screen/buildmode/bdir - 10 time(s). + +/obj/screen/buildmode/help - 10 time(s). + +/obj/screen/buildmode/mode - 10 time(s). + +/obj/screen/buildmode/quit - 10 time(s). + +/obj/effect/landmark/start - 8 time(s). + +/obj/machinery/status_display - 7 time(s). + +/obj/item/stack/sheet/cardboard - 7 time(s). + +/datum/gas_mixture - 6 time(s). + +/obj/machinery/requests_console - 6 time(s). + +/obj/machinery/airalarm - 5 time(s). + +/obj/machinery/atmospherics/components/unary/vent_pump - 5 time(s). + +/obj/item/organ/hivelord_core/legion - 5 time(s). + +/obj/item/weapon/electronics/airlock - 5 time(s). + +/obj/effect/mist - 5 time(s). + +/obj/machinery/camera/portable - 5 time(s). + +/obj/machinery/porta_turret - 4 time(s). + +/obj/machinery/atmospherics/components/unary/portables_connector/visible - 4 time(s). + +/obj/effect/decal/cleanable/blood/gibs - 4 time(s). + +/obj/machinery/atmospherics/components/unary/vent_scrubber - 4 time(s). + +/obj/item/weapon/tank/internals/oxygen - 3 time(s). + +/obj/item/device/assembly/signaler - 3 time(s). + +/datum/event - 3 time(s). + +/obj/effect/decal/cleanable/blood/footprints - 3 time(s). + +/obj/machinery/camera/emp_proof - 3 time(s). + +/obj/item/weapon/tank/internals/plasma - 3 time(s). + +/obj/machinery/camera_assembly - 3 time(s). + +/obj/machinery/camera/motion - 3 time(s). + +/obj/machinery/atmospherics/pipe/simple/supply/hidden - 2 time(s). + +/obj/item/mecha_parts/chassis/ripley - 2 time(s). + +/obj/item/stack/sheet/metal - 2 time(s). + +/obj/machinery/door/airlock/external - 2 time(s). + +/obj/machinery/suit_storage_unit/engine - 2 time(s). + +/obj/item/weapon/stock_parts/cell - 2 time(s). + +/obj/machinery/computer/communications - 2 time(s). + +/obj/item/clothing/tie/petcollar - 2 time(s). + +/obj/machinery/atmospherics/components/binary/passive_gate - 2 time(s). + +/obj/machinery/power/apc - 2 time(s). + +/obj/structure/table/glass - 2 time(s). + +/obj/item/stack/cable_coil - 2 time(s). + +/obj/effect/decal/cleanable/blood/gibs/core - 2 time(s). + +/obj/machinery/atmospherics/components/unary/heat_exchanger - 2 time(s). + +/obj/item/mecha_parts/chassis/firefighter - 2 time(s). + +/obj/machinery/porta_turret/ai - 2 time(s). + +/obj/structure/closet/secure_closet/brig - 1 time(s). + +/obj/effect/landmark/river_waypoint - 1 time(s). + +/obj/item/clothing/head/chaplain_hood - 1 time(s). + +/obj/machinery/door/window/eastleft - 1 time(s). + +/obj/item/weapon/staff/broom - 1 time(s). + +/obj/machinery/door/window - 1 time(s). + +/obj/machinery/computer/pandemic - 1 time(s). + +/obj/machinery/door/airlock/research - 1 time(s). + +/obj/machinery/portable_atmospherics/pump - 1 time(s). + +/obj/machinery/suit_storage_unit/ce - 1 time(s). + +/obj/machinery/power/grounding_rod - 1 time(s). + +/mob/camera/aiEye - 1 time(s). + +/datum/data/record - 1 time(s). + +/obj/machinery/firealarm - 1 time(s). + +/obj/machinery/porta_turret_cover - 1 time(s). + +/obj/mecha/working/ripley - 1 time(s). + +/obj/machinery/portable_atmospherics/scrubber - 1 time(s). + +/obj/effect/decal/cleanable/robot_debris/old - 1 time(s). + +/obj/machinery/biogenerator - 1 time(s). + +/obj/machinery/plantgenes - 1 time(s). + +/datum/reagents - 1 time(s). + +/obj/machinery/vending/hydronutrients - 1 time(s). + +/obj/machinery/recycler - 1 time(s). + +/obj/item/weapon/tank/jetpack/suit - 1 time(s). + +/obj/machinery/vending/hydroseeds - 1 time(s). + +/obj/structure/table/optable - 1 time(s). + +/obj/item/device/pda/ai/pai - 1 time(s). + +/obj/item/stack/sheet/mineral/plasma - 1 time(s). + +/obj/machinery/chem_dispenser/drinks/beer - 1 time(s). + +/obj/structure/closet/crate - 1 time(s). + +/obj/item/stack/sheet/animalhide/monkey - 1 time(s). + +/obj/effect/hallucination/simple/singularity - 1 time(s). + +/obj - 1 time(s). + +/obj/item/clothing/head/explorer - 1 time(s). + +/obj/screen/grab - 1 time(s). + +/obj/item/weapon/grab - 1 time(s). + +/obj/machinery/atmospherics/components/unary/thermomachine/heater - 1 time(s). + +/obj/machinery/atmospherics/components/unary/thermomachine/freezer - 1 time(s). + +/obj/machinery/door/poddoor - 1 time(s). + +/obj/item/weapon/cartridge/hos - 1 time(s). + +/obj/item/device/pda/heads/hos - 1 time(s). + +/obj/item/ammo_casing/energy/electrode - 1 time(s). + +/obj/effect/mob_spawn/human/alive/space_bar_patron - 1 time(s). + +/obj/effect/blob/core - 1 time(s). + +/obj/machinery/clonepod - 1 time(s). + +/obj/item/weapon/reagent_containers/spray/mister/janitor - 1 time(s). + +/obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf - 1 time(s). + +/obj/item/weapon/card/id/syndicate - 1 time(s). + +/obj/item/device/radio - 1 time(s). + +/obj/machinery/r_n_d/circuit_imprinter - 1 time(s). + +/obj/machinery/door/window/brigdoor - 1 time(s). + +/obj/machinery/computer/rdconsole/core - 1 time(s). + +/obj/structure/cable/yellow - 1 time(s). + +/obj/machinery/disposal/bin - 1 time(s). + +/obj/effect/mob_spawn/human/prisoner_transport - 1 time(s). diff --git a/tools/Runtime Condenser/RuntimeCondenser.exe b/tools/Runtime Condenser/RuntimeCondenser.exe index f32fe9d6ece..e53102f219a 100644 Binary files a/tools/Runtime Condenser/RuntimeCondenser.exe and b/tools/Runtime Condenser/RuntimeCondenser.exe differ diff --git a/tools/mapmerge/mapmerger.py b/tools/mapmerge/mapmerger.py index af93f8f24d8..8773143de6f 100644 --- a/tools/mapmerge/mapmerger.py +++ b/tools/mapmerge/mapmerger.py @@ -2,6 +2,7 @@ import sys import os import pathlib import map_helpers +import shutil #main("../../_maps/") def main(map_folder, tgm=0): @@ -53,10 +54,12 @@ def main(map_folder, tgm=0): else: for i in valid_indices: path_str = str(list_of_files[i]) + shutil.copyfile(path_str, path_str + ".before") path_str_pretty = path_str[len(map_folder):] try: if map_helpers.merge_map(path_str, path_str + ".backup", tgm) != 1: print("ERROR MERGING: {}".format(path_str_pretty)) + os.remove(path_str + ".before") continue print("MERGED: {}".format(path_str_pretty)) except FileNotFoundError: @@ -64,6 +67,7 @@ def main(map_folder, tgm=0): print(path_str_pretty + " || " + path_str_pretty + ".backup") print("\nFinished merging.") + print("\nNOTICE: A version of the map files from before merging have been created for debug purposes.\nDo not delete these files until it is sure your map edits have no undesirable changes.") def string_to_num(s): try:
Red Deity