diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm
index 6b2ea7b2792..5c2aea57011 100644
--- a/_maps/map_files/cyberiad/cyberiad.dmm
+++ b/_maps/map_files/cyberiad/cyberiad.dmm
@@ -979,7 +979,7 @@
"asQ" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/lobby)
"asR" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor,/area/security/prison/cell_block/C)
"asS" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/turf/simulated/floor,/area/security/prison/cell_block/C)
-"asT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor,/area/security/prison/cell_block/C)
+"asT" = (/obj/structure/stool/bed/chair/wood/wings{tag = "icon-wooden_chair_wings (EAST)"; icon_state = "wooden_chair_wings"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/abandonedbar)
"asU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/security/prison/cell_block/C)
"asV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall,/area/security/prison/cell_block/C)
"asW" = (/obj/machinery/newscaster{pixel_x = -28; pixel_y = 1},/obj/structure/table/woodentable,/obj/machinery/light/small/lamp/green{on = 0; pixel_x = -3; pixel_y = 8},/obj/item/weapon/reagent_containers/food/drinks/flask/detflask,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{level = 1},/turf/simulated/floor{icon_state = "grimy"},/area/security/detectives_office)
@@ -1365,8 +1365,8 @@
"aAm" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/machinery/light{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/stool/bed/chair/sofa,/turf/simulated/floor{icon_state = "neutral"; dir = 1},/area/crew_quarters/fitness)
"aAn" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/sign/barber{pixel_y = 30},/obj/structure/stool/bed/chair/sofa/left,/turf/simulated/floor{icon_state = "neutral"; dir = 1},/area/crew_quarters/fitness)
"aAo" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{icon_state = "neutral"; dir = 1},/area/crew_quarters/fitness)
-"aAp" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/space)
-"aAq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/space)
+"aAp" = (/obj/structure/table/woodentable,/obj/item/toy/cards/deck/black,/turf/simulated/floor/wood,/area/maintenance/abandonedbar)
+"aAq" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8; initialize_directions = 11; level = 1},/turf/simulated/floor,/area/security/prison/cell_block/C)
"aAr" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"aAs" = (/obj/effect/decal/cleanable/fungus,/turf/simulated/wall,/area/maintenance/fsmaint2)
"aAt" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 8; name = "Fore Starboard Solar APC"; pixel_x = -25; pixel_y = 3},/turf/simulated/floor/plating,/area/solar/auxstarboard)
@@ -1522,7 +1522,7 @@
"aDn" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor,/area/crew_quarters/fitness)
"aDo" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
"aDp" = (/turf/simulated/wall,/area/maintenance/abandonedbar)
-"aDq" = (/obj/structure/lattice,/turf/space,/area/maintenance/abandonedbar)
+"aDq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/abandonedbar)
"aDr" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/abandonedbar)
"aDs" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/abandonedbar)
"aDt" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_1_berth_hatch"; locked = 1; name = "Escape Pod"; req_access_txt = "13"},/turf/simulated/floor/plating,/area/hallway/secondary/entry)
@@ -1572,8 +1572,8 @@
"aEl" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
"aEm" = (/obj/structure/table,/obj/item/weapon/paper/holodeck,/turf/simulated/floor,/area/crew_quarters/fitness)
"aEn" = (/turf/simulated/floor/plating/airless,/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "solar_chapel_airlock"; name = "exterior access button"; pixel_x = -25; pixel_y = -25; req_access_txt = "10;13"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk1"; icon_state = "catwalk1"},/area/solar/auxstarboard)
-"aEo" = (/turf/space,/area/maintenance/abandonedbar)
-"aEp" = (/obj/structure/table/woodentable,/obj/item/toy/cards/deck/black,/turf/simulated/floor/wood,/area/space)
+"aEo" = (/obj/structure/table/woodentable,/obj/structure/mirror{pixel_x = -28},/obj/item/weapon/storage/pill_bottle/random_drug_bottle,/turf/simulated/floor{dir = 10; icon_state = "purple"},/area/maintenance/abandonedbar)
+"aEp" = (/obj/item/weapon/stool,/turf/simulated/floor/plating{dir = 10; icon_regular_floor = "purplecorner"},/area/maintenance/abandonedbar)
"aEq" = (/obj/structure/stool/bed/chair/wood/wings{tag = "icon-wooden_chair_wings (WEST)"; icon_state = "wooden_chair_wings"; dir = 8},/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken"},/area/maintenance/abandonedbar)
"aEr" = (/turf/simulated/floor/wood,/area/maintenance/abandonedbar)
"aEs" = (/obj/item/stack/tile/wood,/turf/simulated/floor/plating,/area/maintenance/abandonedbar)
@@ -1628,8 +1628,8 @@
"aFp" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor,/area/crew_quarters/fitness)
"aFq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
"aFr" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "solar_chapel_outer"; locked = 1; name = "Engineering External Access"; req_access = null; req_access_txt = "10;13"},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
-"aFs" = (/obj/structure/stool/bed/chair/wood/wings{tag = "icon-wooden_chair_wings (EAST)"; icon_state = "wooden_chair_wings"; dir = 4},/turf/simulated/floor/plating,/area/space)
-"aFt" = (/obj/structure/stool/bed/chair/wood/wings{tag = "icon-wooden_chair_wings (WEST)"; icon_state = "wooden_chair_wings"; dir = 8},/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken"},/area/space)
+"aFs" = (/obj/structure/table/woodentable,/obj/item/weapon/lipstick/random,/obj/structure/sign/poster{pixel_x = -32},/turf/simulated/floor/plating,/area/maintenance/abandonedbar)
+"aFt" = (/turf/simulated/floor{dir = 4; icon_state = "whitecorner"},/area/maintenance/abandonedbar)
"aFu" = (/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken"},/area/maintenance/abandonedbar)
"aFv" = (/obj/item/trash/liquidfood,/turf/simulated/floor/wood,/area/maintenance/abandonedbar)
"aFw" = (/obj/structure/sink/kitchen{pixel_y = 25},/obj/machinery/light_construct/small{dir = 4},/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken"},/area/maintenance/abandonedbar)
@@ -1696,9 +1696,9 @@
"aGF" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
"aGG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
"aGH" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "solar_chapel_sensor"; pixel_x = 25; pixel_y = 12},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2; frequency = 1379; id_tag = "solar_chapel_pump"},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379; id_tag = "solar_chapel_airlock"; pixel_x = 25; req_access_txt = "13"; tag_airpump = "solar_chapel_pump"; tag_chamber_sensor = "solar_chapel_sensor"; tag_exterior_door = "solar_chapel_outer"; tag_interior_door = "solar_chapel_inner"},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
-"aGI" = (/obj/machinery/light_construct/small{dir = 8},/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken"},/area/space)
-"aGJ" = (/obj/machinery/vending/autodrobe,/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
-"aGK" = (/obj/item/weapon/shard,/obj/item/stack/rods,/obj/item/weapon/airlock_electronics,/turf/simulated/floor/plating{dir = 9; icon_regular_floor = "escape"},/area/space)
+"aGI" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plating{dir = 10; icon_regular_floor = "escape"},/area/maintenance/abandonedbar)
+"aGJ" = (/obj/machinery/light_construct/small{dir = 1},/turf/simulated/floor/plating{dir = 4; icon_regular_floor = "whitecorner"},/area/maintenance/abandonedbar)
+"aGK" = (/obj/item/trash/cheesie,/turf/simulated/floor{icon_state = "whitehall"; dir = 5},/area/maintenance/abandonedbar)
"aGL" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{dir = 1; icon_state = "escape"},/area/maintenance/abandonedbar)
"aGM" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating{dir = 5; icon_regular_floor = "escape"},/area/maintenance/abandonedbar)
"aGN" = (/obj/item/weapon/lighter/random,/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken"},/area/maintenance/abandonedbar)
@@ -1762,10 +1762,10 @@
"aHT" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "solar_chapel_inner"; locked = 1; name = "Engineering External Access"; req_access = null; req_access_txt = "13"},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
"aHU" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
"aHV" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
-"aHW" = (/obj/item/trash/cheesie,/turf/simulated/floor{icon_state = "whitehall"; dir = 5},/area/maintenance/fsmaint2)
-"aHX" = (/obj/machinery/light_construct/small{dir = 1},/turf/simulated/floor/plating{dir = 4; icon_regular_floor = "whitecorner"},/area/maintenance/fsmaint2)
-"aHY" = (/turf/simulated/floor{dir = 8; icon_state = "escape"},/area/space)
-"aHZ" = (/obj/structure/door_assembly,/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
+"aHW" = (/obj/structure/door_assembly,/turf/simulated/floor/plating,/area/maintenance/abandonedbar)
+"aHX" = (/turf/simulated/floor{dir = 8; icon_state = "escape"},/area/maintenance/abandonedbar)
+"aHY" = (/obj/item/weapon/shard,/obj/item/stack/rods,/obj/item/weapon/airlock_electronics,/turf/simulated/floor/plating{dir = 9; icon_regular_floor = "escape"},/area/maintenance/abandonedbar)
+"aHZ" = (/obj/effect/decal/cleanable/fungus,/turf/simulated/wall,/area/maintenance/abandonedbar)
"aIa" = (/obj/item/stack/tile/plasteel,/turf/simulated/floor/plating,/area/maintenance/abandonedbar)
"aIb" = (/obj/item/weapon/shard{icon_state = "small"},/obj/item/stack/rods,/turf/simulated/floor/plating{dir = 4; icon_regular_floor = "escape"},/area/maintenance/abandonedbar)
"aIc" = (/obj/structure/stool,/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken"},/area/maintenance/abandonedbar)
@@ -1816,9 +1816,9 @@
"aIV" = (/obj/machinery/power/solar_control{id = "auxsolareast"; name = "Fore Starboard Solar Control"; track = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
"aIW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "solar_chapel_airlock"; name = "interior access button"; pixel_x = 25; pixel_y = 25; req_access_txt = "13"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5; icon_state = "intact"},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
"aIX" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
-"aIY" = (/turf/simulated/floor{dir = 4; icon_state = "whitecorner"},/area/maintenance/fsmaint2)
-"aIZ" = (/obj/structure/table/woodentable,/obj/item/weapon/lipstick/random,/obj/structure/sign/poster{pixel_x = -32},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
-"aJa" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plating{dir = 10; icon_regular_floor = "escape"},/area/space)
+"aIY" = (/obj/machinery/vending/autodrobe,/turf/simulated/floor/plating,/area/maintenance/abandonedbar)
+"aIZ" = (/obj/machinery/light_construct/small{dir = 8},/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken"},/area/maintenance/abandonedbar)
+"aJa" = (/turf/simulated/wall,/area/civilian/pet_store)
"aJb" = (/obj/item/stack/rods,/turf/simulated/floor{dir = 2; icon_state = "escape"},/area/maintenance/abandonedbar)
"aJc" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{dir = 6; icon_state = "escape"},/area/maintenance/abandonedbar)
"aJd" = (/obj/item/trash/pistachios,/obj/machinery/light_construct,/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken"},/area/maintenance/abandonedbar)
@@ -1878,8 +1878,8 @@
"aKf" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
"aKg" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/terminal,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
"aKh" = (/mob/living/simple_animal/mouse,/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
-"aKi" = (/obj/item/weapon/stool,/turf/simulated/floor/plating{dir = 10; icon_regular_floor = "purplecorner"},/area/maintenance/fsmaint2)
-"aKj" = (/obj/structure/table/woodentable,/obj/structure/mirror{pixel_x = -28},/obj/item/weapon/storage/pill_bottle/random_drug_bottle,/turf/simulated/floor{dir = 10; icon_state = "purple"},/area/maintenance/fsmaint2)
+"aKi" = (/obj/machinery/door/airlock/glass{name = "Pet Store"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/civilian/pet_store)
+"aKj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/civilian/pet_store)
"aKk" = (/turf/simulated/wall/r_wall,/area/maintenance/fsmaint2)
"aKl" = (/turf/simulated/shuttle/wall{icon_state = "swall_s6"; dir = 2},/area/shuttle/arrival/station)
"aKm" = (/turf/simulated/shuttle/wall{icon_state = "swall12"; dir = 2},/area/shuttle/arrival/station)
@@ -2487,7 +2487,7 @@
"aVQ" = (/turf/simulated/floor{dir = 2; icon_state = "asteroid"; tag = "icon-asteroid (NORTH)"},/turf/simulated/floor{tag = "icon-siding2 (NORTH)"; icon_state = "siding2"; dir = 1},/turf/simulated/floor{tag = "icon-siding1 (NORTH)"; icon_state = "siding1"; dir = 1},/area/hydroponics)
"aVR" = (/obj/machinery/door/window/eastright{base_state = "left"; dir = 8; icon_state = "left"; name = "Hydroponics Pasture"; req_access_txt = "35"},/turf/simulated/floor{icon_state = "hydrofloor"},/area/hydroponics)
"aVS" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor{icon_state = "hydrofloor"},/area/hydroponics)
-"aVT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{level = 1},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor{icon_state = "hydrofloor"},/area/hydroponics)
+"aVT" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor,/area/hallway/primary/port)
"aVU" = (/turf/simulated/floor{icon_state = "hydrofloor"},/area/hydroponics)
"aVV" = (/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = -31},/obj/machinery/light,/turf/simulated/floor{icon_state = "hydrofloor"},/area/hydroponics)
"aVW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor{icon_state = "hydrofloor"},/area/hydroponics)
@@ -2619,7 +2619,7 @@
"aYs" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/hallway/primary/port)
"aYt" = (/obj/machinery/light,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/camera{c_tag = "Port Hallway"; dir = 1},/turf/simulated/floor,/area/hallway/primary/port)
"aYu" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/hallway/primary/port)
-"aYv" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor,/area/hallway/primary/port)
+"aYv" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor,/area/hallway/primary/port)
"aYw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor,/area/hallway/primary/port)
"aYx" = (/obj/machinery/door/firedoor{dir = 4; name = "Firelock East"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/hallway/primary/port)
"aYy" = (/obj/machinery/door/airlock/glass{name = "Central Access"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/hallway/primary/central/nw)
@@ -2693,9 +2693,9 @@
"aZO" = (/turf/simulated/wall,/area/maintenance/port)
"aZP" = (/turf/simulated/wall,/area/storage/emergency2)
"aZQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock{name = "Port Emergency Storage"; req_access_txt = "0"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/storage/emergency2)
-"aZR" = (/obj/structure/table,/turf/simulated/floor,/area/hallway/primary/port)
-"aZS" = (/obj/structure/table,/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor,/area/hallway/primary/port)
-"aZT" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/structure/closet/emcloset,/turf/simulated/floor,/area/hallway/primary/port)
+"aZR" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1},/turf/simulated/floor{icon_state = "wood"},/area/civilian/pet_store)
+"aZS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor{icon_state = "wood"},/area/civilian/pet_store)
+"aZT" = (/obj/machinery/light_switch{pixel_x = -24},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor{icon_state = "wood"},/area/civilian/pet_store)
"aZU" = (/obj/structure/closet/emcloset,/turf/simulated/floor,/area/hallway/primary/port)
"aZV" = (/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/hallway/primary/port)
"aZW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atm{pixel_x = 24},/turf/simulated/floor,/area/hallway/primary/port)
@@ -2792,9 +2792,9 @@
"bbJ" = (/obj/machinery/vending/shoedispenser,/turf/simulated/floor,/area/crew_quarters/locker)
"bbK" = (/turf/simulated/floor/plating,/area/maintenance/port)
"bbL" = (/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/port)
-"bbM" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/turf/simulated/floor/plating,/area/storage/emergency2)
-"bbN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/storage/emergency2)
-"bbO" = (/obj/machinery/light_switch{pixel_y = 28},/obj/item/device/flashlight/flare,/turf/simulated/floor/plating,/area/storage/emergency2)
+"bbM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/storage/emergency2)
+"bbN" = (/obj/machinery/alarm{dir = 8; pixel_x = 25; pixel_y = 0},/turf/simulated/floor/carpet,/area/civilian/pet_store)
+"bbO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/civilian/pet_store)
"bbP" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/storage/emergency2)
"bbQ" = (/turf/simulated/wall,/area/storage/tools)
"bbR" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/storage/tools)
@@ -2865,10 +2865,10 @@
"bde" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating,/area/maintenance/port)
"bdf" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/structure/table,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor/plating,/area/storage/emergency2)
"bdg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/plating,/area/storage/emergency2)
-"bdh" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plating,/area/storage/emergency2)
-"bdi" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/storage/emergency2)
-"bdj" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/storage/emergency2)
-"bdk" = (/obj/structure/grille,/turf/simulated/floor/plating,/area/storage/emergency2)
+"bdh" = (/obj/structure/cable,/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/turf/simulated/floor/carpet,/area/civilian/pet_store)
+"bdi" = (/obj/item/device/flashlight/flare,/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/storage/emergency2)
+"bdj" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/machinery/light_switch{pixel_y = 28},/turf/simulated/floor/plating,/area/storage/emergency2)
+"bdk" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1; initialize_directions = 11; level = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; level = 1},/turf/simulated/floor,/area/hallway/primary/port)
"bdl" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/machinery/camera{c_tag = "Auxiliary Tool Storage"; dir = 2},/obj/structure/cable{d2 = 4; icon_state = "0-4"},/turf/simulated/floor,/area/storage/tools)
"bdm" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor,/area/storage/tools)
"bdn" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor,/area/storage/tools)
@@ -2938,9 +2938,9 @@
"bez" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/crew_quarters/locker)
"beA" = (/obj/structure/closet/secure_closet/personal,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/camera{c_tag = "Locker Room East"; dir = 8; network = list("SS13")},/obj/machinery/light{dir = 4},/turf/simulated/floor,/area/crew_quarters/locker)
"beB" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/extinguisher,/obj/item/weapon/extinguisher,/obj/item/weapon/extinguisher,/turf/simulated/floor/plating,/area/storage/emergency2)
-"beC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light/small,/turf/simulated/floor/plating,/area/storage/emergency2)
-"beD" = (/turf/simulated/floor/plating,/area/storage/emergency2)
-"beE" = (/obj/machinery/light/small,/turf/simulated/floor/plating,/area/storage/emergency2)
+"beC" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor{icon_state = "hydrofloor"},/area/hydroponics)
+"beD" = (/obj/machinery/light,/turf/simulated/floor{icon_state = "wood"},/area/civilian/pet_store)
+"beE" = (/obj/structure/table/woodentable,/obj/machinery/fishtank/bowl,/turf/simulated/floor{icon_state = "wood"},/area/civilian/pet_store)
"beF" = (/obj/machinery/portable_atmospherics/canister/air,/obj/effect/decal/warning_stripes/white/hollow,/turf/simulated/floor/plating,/area/storage/emergency2)
"beG" = (/obj/structure/extinguisher_cabinet{pixel_x = -24},/turf/simulated/floor,/area/storage/tools)
"beH" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor,/area/storage/tools)
@@ -3110,7 +3110,7 @@
"bhP" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/port)
"bhQ" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/port)
"bhR" = (/obj/effect/decal/cleanable/cobweb2,/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/maintenance/port)
-"bhS" = (/obj/item/clothing/gloves/color/rainbow,/obj/item/clothing/shoes/rainbow,/obj/item/clothing/head/soft/rainbow,/obj/item/clothing/under/rainbow,/turf/simulated/floor/plating,/area/maintenance/port)
+"bhS" = (/obj/machinery/vending/crittercare,/turf/simulated/floor{icon_state = "wood"},/area/civilian/pet_store)
"bhT" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/storage/tools)
"bhU" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/storage/tools)
"bhV" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/structure/rack{dir = 8; layer = 2.9},/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/item/device/multitool,/turf/simulated/floor,/area/storage/tools)
@@ -3556,7 +3556,7 @@
"bqt" = (/obj/machinery/power/apc{cell_type = 5000; dir = 2; name = "AI Upload APC"; pixel_y = -24},/obj/structure/cable,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"bqu" = (/obj/machinery/computer/borgupload,/obj/item/device/radio/intercom{anyai = 1; broadcasting = 0; freerange = 1; frequency = 1447; name = "Private Channel"; pixel_x = 0; pixel_y = -29},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"bqv" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/machinery/light,/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload)
-"bqw" = (/obj/structure/table,/obj/machinery/door/window{base_state = "left"; dir = 8; icon_state = "left"; name = "High-Risk Modules"; req_access_txt = "20"},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/aiModule/supplied/oxygen,/obj/item/weapon/aiModule/zeroth/oneHuman,/obj/item/weapon/aiModule/reset/purge,/obj/item/weapon/aiModule/core/full/antimov,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
+"bqw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light/small,/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/storage/emergency2)
"bqx" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/wall/r_wall,/area/turret_protected/ai_upload)
"bqy" = (/obj/machinery/light{dir = 8},/obj/machinery/photocopier,/turf/simulated/floor/wood,/area/crew_quarters/captain)
"bqz" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/wood,/area/crew_quarters/captain)
@@ -5655,6 +5655,7 @@
"ceM" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; layer = 2.4; on = 1},/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass,/turf/simulated/floor/wood,/area/blueshield)
"ceN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/wall,/area/ntrep)
"ceO" = (/obj/structure/filingcabinet,/turf/simulated/floor/wood,/area/ntrep)
+"ceP" = (/turf/simulated/floor{icon_state = "wood"},/area/civilian/pet_store)
"ceQ" = (/obj/machinery/door_control{id = "representative"; name = "Privacy Shutters Control"; pixel_x = 0; pixel_y = -24; req_access_txt = "73"},/obj/machinery/computer/secure_data,/turf/simulated/floor/wood,/area/ntrep)
"ceR" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; layer = 2.4; on = 1},/obj/structure/closet/secure_closet/ntrep,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/wood,/area/ntrep)
"ceS" = (/obj/structure/disposalpipe/segment,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/obj/machinery/camera{c_tag = "Aft Primary Hallway 1"; dir = 4; network = list("SS13")},/turf/simulated/floor{dir = 8; icon_state = "cautioncorner"},/area/hallway/primary/aft)
@@ -8106,6 +8107,7 @@
"cZU" = (/obj/structure/closet/wardrobe/black,/obj/machinery/camera{c_tag = "Aft Port Solar Access"; dir = 1; network = list("SS13")},/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/aft)
"cZV" = (/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/aft)
"cZW" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
+"cZX" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor{icon_state = "wood"},/area/civilian/pet_store)
"cZY" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door_control{id = "maint2"; name = "Blast Control Door B"; pixel_x = -28; pixel_y = 4},/obj/machinery/door_control{id = "maint1"; name = "Blast Control Door A"; pixel_x = -28; pixel_y = -6},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"cZZ" = (/obj/structure/janitorialcart,/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
"daa" = (/obj/structure/table/glass,/obj/item/weapon/pen,/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
@@ -8127,7 +8129,9 @@
"daq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall,/area/maintenance/electrical)
"dar" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plating,/area/maintenance/electrical)
"das" = (/obj/structure/table,/obj/machinery/cell_charger,/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/stock_parts/cell/high{charge = 100; maxcharge = 15000},/turf/simulated/floor/plating,/area/maintenance/electrical)
+"dat" = (/obj/item/clothing/gloves/color/rainbow,/obj/item/clothing/shoes/rainbow,/obj/item/clothing/head/soft/rainbow,/obj/item/clothing/under/rainbow,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/port)
"dau" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2)
+"dav" = (/obj/structure/table,/obj/machinery/door/window{base_state = "left"; dir = 8; icon_state = "left"; name = "High-Risk Modules"; req_access_txt = "20"},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/aiModule/supplied/oxygen,/obj/item/weapon/aiModule/zeroth/oneHuman,/obj/item/weapon/aiModule/reset/purge,/obj/item/weapon/aiModule/core/full/antimov,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"day" = (/obj/machinery/power/terminal,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/electrical)
"daz" = (/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/maintenance/electrical)
"daA" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/electrical)
@@ -8214,11 +8218,7 @@
"dcl" = (/obj/effect/decal/cleanable/fungus,/turf/simulated/wall/rust,/area/maintenance/abandonedbar)
"dcm" = (/turf/simulated/wall/rust,/area/maintenance/fsmaint2)
"dcn" = (/turf/simulated/wall/r_wall/rust,/area/maintenance/fsmaint2)
-"dco" = (/turf/simulated/wall/rust,/area/space)
"dcp" = (/obj/structure/mineral_door/wood{name = "Abandoned Bar"},/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken"},/area/maintenance/abandonedbar)
-"dcr" = (/turf/simulated/floor/plating{icon_state = "panelscorched"},/area/maintenance/abandonedbar)
-"dcs" = (/turf/simulated/floor/plating,/area/maintenance/abandonedbar)
-"dcu" = (/turf/space,/area/maintenance/fsmaint2)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -8306,15 +8306,15 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaapBaaaasrassassassassastasuasvaswaswaswaswasxaaaaczaaaaaaaaaamlaoRaoRaoSamlaaaaaaaaaaoTaoUaoVaoWaoXaoYaoYaoYaoZaoZaoZaoZapaapbapcapcapcapdapeapfapdapcapcapcapgaphapiapjapkapiaplaphapmapmapmapnapoapmappapqaprapsaptapuapvaoIaoJapwapwamiapxapyapzamiapAamiaabasqaabaaaapCaqDapEaaaaaaapCaqDapEaaaaaaapCaqDapEaabaabaaaaabaoOaabaaaaaaamjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaaczaycatlatlatlatlatlaaaatmaaaatlatlatlatlatlaabaczaaaaaaaaaamUapGaoRapHamlampapIaocapJapKapLapMapNapOapPapQaoZapRapSapTapUapVapWapXapYapZaqaaqbaqcaqdaqeapWaqfaqgaqhaqiaqjaqkaqlaqgapmaqmaqnaqoaqpapmaqqaqraqsaqtaquaqvapvaoIaqwaqxaqyaqzaqAaqAaqBamiaqCamiaabasqaabaaaapCaqDapEaaaaaaapCaqDapEaaaaaaapCaqDapEaaaaaaaaaaabasqaabaaaaaaawTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaaczaaaaaaaaaaabaaaaaaaaaaxyaaaaaaaaaaabaaaaaaaaaaczaaaaaaaaaamlaqEaoRaoRaqFaqGaqHaqIaqJaqKanjaqLaqManeaneaqNaoZaqOaqPaqQaqRaqSaqTaqUaqVaqWaqXaqYaqZaqVaraarbarcardarearfargarhariarjarkarlarmarnaroapmarparqarqarrarqarsapvaoIanTanTanTanTartanTaruarvarwamiarxaxvarAaaaaaaaoOaabaabaabaabaoOaabaabaabaabaoOaabaabaabaabaxwaxxarAaabaaaamjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaaczaabarBarBarBarBarBaaaatmaaaarBarBarBarBarBaabaczaaaaaaaaaamlarDarDarDamlampamqamqarEarFarGaojarHarIanearJaoZarKarLarMarNarOarParQarRarSarTarUarVarWarXarParYarjarZasaasbarZariascapmasdaseasfasgapmashasiarqarrarqasjapvaskaslasmasnasmasoaspamiamiaoJamiasqaxWaxXaryaryaxvaryaryaryaryaxvaryaryaryaryaxvaryaryaryaxYaxZaxWasqaabaaaamjaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaabaaaaIRaIRaApaAqaAqaDraDraDsaDpaDpaDqaDqaEoaEoaEoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaaczaaaasrassassassassastasuasvaswaswaswaswasxaaaaczaaaaaaaaaasyaszaszaszasAasBaaaaaaaoUaoUaoUaoUaoUasCaneasDasEaoZaoZaoZasFasGapcapcapcapcasHasIapcapcapcasJasKasLasMasNasOasPariasQapmasRasSasTasUasVasWasXasYasZarqataapvatbatcatdateatfatgathatiatjatkamiayKaxvayLaabaabaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabayPayQayLaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaabaIRaIRaFsaEpaFtaEraEsaEtaEuaEqaDpaDpaEoaEoaEoaEoaEoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaaabayZatlatlatlatlatlaaaatmaaaatlatlatlatlatlaabaczaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoUatnaneasDasEatoapSapTapUapVapWatpapYatqatratsattatuatvapWatwatxatyatzatAatAatBatCapmatDatEatFatGapmatHatIatJarrarqatKapvatbartatcatcatcatLanTatMatNatOamiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaabaabaabaabazDaabaabaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaIRaIRaIRaIRaGIaEraFuaEraFuaFvaEraEraEraFwaDpaEoaEoaEoaEoaEoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaaczaaaaaaaabaaaaabaaaaaaazJaaaaaaaabaaaaabaaaaaaaczaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaoUatPaneatQasEaqOatRatSatTatUatVatWatXatYatZauaaubaucaudaueaufaugaugauhaugaugauiaujaukaulaumapmaunapmauoaupauqaurausautapvatbauuauvauvauvauwauxauyauzauAamiaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaabaabaabaEnaabaabaaaaaaaabaaaaabaabaaaaaaaaaaaaaaaaaaaaaaIRaAsaGJdcmaGKaGLaGMaGNaEraEraGOaGPaEraGQaDpaEoaEoaEoaEoaEoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaaczaczaczaabaabaabaabaDxaDyaDxaabaabaabaabaczaczaczaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoUauBaneauCasEarKauDauEauFauGarParQauHauIauJauKauIauLarXarPauMauNauOauNauNauOauNauPapmasRauQapmauRapmauSauTauUauVauWauWauXauYauZavaavaavaavbavcavdaveaveaveaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaabaabaFqaFraFqaabaabaaaaabaaaaaaaabaabaaaaaaaaaaaaaaaaaaaIRaHXaHWaHZaHYaIaaIbaEraEraEraIcaIdaEraIeaDpaEoaEoaEoaEoaEoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaagaaaaaaaaaaaaaabaaaaabaaaaaaaabaaaaEFaEGaEHaaaaaaaabaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavfavfavfavfavfavfaoUaoUavgaoUasEasEasEavhaviavjavkavkavlavkavlavkavkavmasJasJavnavoavpavqavoavpavqavravsavsavsavsavsapmavtavuavvavvavwavvavxavyavaavzavAavBavbavCavDavEavFavcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaabaaaaGGaGHaGGaaaaabaaaaabaaaaaaaaaaabaabaaaaaaaaaaaaaaaaIRaIZaIYdcmaJaaJbaJcaJdaEraJfaJgaJhaJiaDpaJjaDqaEoaEoaEoaEoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaaabaaaaabaaaaaaaabaFJaFKaFLaFMaFNaaaaabaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavfavGavHavIavJavKavLavMavNavMavOavMavMavPavQavQavQavQavQavRavSavTavQavQavQavQavUavQavQavQavQavVavWavXavYavZawaawbawcapuawdaweawfawgawhawiawjawkavaawlawmawnavbawoawpawoawqavcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaabaHRaHSaHTaHUaHVaabaaaaabaaaaaaaaaaaaaabaabaaaaaaaaaaaaaIRaKjaKidcmaIRdckdcodcldcpaDpaDpaDpaDpaMUaDpaDqaDqaEoaEoaEoaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaaaaaaaaaaaaaaaaaaaabaabaaaaabaaaaaaaabaHaaHbaHcaHdaHaaABaABaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavfawrawsawtawuawYawvawwawxawyavVavVavVawzavVavVavVavVavVawAavVavVavVavVavVavVawBavVavVavVavVawCavVawDavVawEavVavVawFapuawGawHawIawJawfawKawjawLavaawMawNawOawPawQawRawSavFavcaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaabaIUaIVaIWaIXaIUaabaaaaabaaaaaaaabaaaaaaaabaabaaaaaaaMUaMUdcmaMUdcmaLHdcrdcsdckdcsaLHaLHaAraMUdcudcuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaABaABaABaABaABaabaabaHaaADaAGaIuaHaaBuaABaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavfawUawVawWawXctIavfawZaxaaxbaxcaxdaxeaxfaxgaxaaxcaxcaxcaxhaxcaxcaxcaxcaxcaxcaxiaxjaxkaxkaxkaxlaxmaxnaxmaxoaxpaxmaxqapuaxraxraxraxraxraxrawjawkavaaxsawmaxtavbawoaxuawoawqavcaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaabaIUaKeaKfaKgaIUaabaaaaabaaaaaaaabaaaaaaaMUazCaMUazCaMUaAraLHaLHaLHaLHaLHaLHaLHaLHaLHaNaaAsaMUdcudcuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaaczaabarBarBarBarBarBaaaatmaaaarBarBarBarBarBaabaczaaaaaaaaaamlarDarDarDamlampamqamqarEarFarGaojarHarIanearJaoZarKarLarMarNarOarParQarRarSarTarUarVarWarXarParYarjarZasaasbarZariascapmasdaseasfasgapmashasiarqarrarqasjapvaskaslasmasnasmasoaspamiamiaoJamiasqaxWaxXaryaryaxvaryaryaryaryaxvaryaryaryaryaxvaryaryaryaxYaxZaxWasqaabaaaamjaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaabaaaaDpaDpaDqaDraDraDraDraDsaDpaDpaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaaczaaaasrassassassassastasuasvaswaswaswaswasxaaaaczaaaaaaaaaasyaszaszaszasAasBaaaaaaaoUaoUaoUaoUaoUasCaneasDasEaoZaoZaoZasFasGapcapcapcapcasHasIapcapcapcasJasKasLasMasNasOasPariasQapmasRasSaAqasUasVasWasXasYasZarqataapvatbatcatdateatfatgathatiatjatkamiayKaxvayLaabaabaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabayPayQayLaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaabaDpaDpasTaApaEqaEraEsaEtaEuaEqaDpaDpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaaabayZatlatlatlatlatlaaaatmaaaatlatlatlatlatlaabaczaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoUatnaneasDasEatoapSapTapUapVapWatpapYatqatratsattatuatvapWatwatxatyatzatAatAatBatCapmatDatEatFatGapmatHatIatJarrarqatKapvatbartatcatcatcatLanTatMatNatOamiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaabaabaabaabazDaabaabaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaDpaDpaDpaDpaIZaEraFuaEraFuaFvaEraEraEraFwaDpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaaczaaaaaaaabaaaaabaaaaaaazJaaaaaaaabaaaaabaaaaaaaczaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaoUatPaneatQasEaqOatRatSatTatUatVatWatXatYatZauaaubaucaudaueaufaugaugauhaugaugauiaujaukaulaumapmaunapmauoaupauqaurausautapvatbauuauvauvauvauwauxauyauzauAamiaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaabaabaabaEnaabaabaaaaaaaabaaaaabaabaaaaaaaaaaaaaaaaaaaaaaDpaHZaIYdckaHYaGLaGMaGNaEraEraGOaGPaEraGQaDpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaaczaczaczaabaabaabaabaDxaDyaDxaabaabaabaabaczaczaczaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoUauBaneauCasEarKauDauEauFauGarParQauHauIauJauKauIauLarXarPauMauNauOauNauNauOauNauPapmasRauQapmauRapmauSauTauUauVauWauWauXauYauZavaavaavaavbavcavdaveaveaveaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaabaabaFqaFraFqaabaabaaaaabaaaaaaaabaabaaaaaaaaaaaaaaaaaaaDpaGJaGKaHWaHXaIaaIbaEraEraEraIcaIdaEraIeaDpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaagaaaaaaaaaaaaaabaaaaabaaaaaaaabaaaaEFaEGaEHaaaaaaaabaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavfavfavfavfavfavfaoUaoUavgaoUasEasEasEavhaviavjavkavkavlavkavlavkavkavmasJasJavnavoavpavqavoavpavqavravsavsavsavsavsapmavtavuavvavvavwavvavxavyavaavzavAavBavbavCavDavEavFavcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaabaaaaGGaGHaGGaaaaabaaaaabaaaaaaaaaaabaabaaaaaaaaaaaaaaaaDpaFsaFtdckaGIaJbaJcaJdaEraJfaJgaJhaJiaDpaJjaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaoPaoPaaaaaaaaaaaaaaaaaaaabaaaaabaaaaaaaabaFJaFKaFLaFMaFNaaaaabaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavfavGavHavIavJavKavLavMavNavMavOavMavMavPavQavQavQavQavQavRavSavTavQavQavQavQavUavQavQavQavQavVavWavXavYavZawaawbawcapuawdaweawfawgawhawiawjawkavaawlawmawnavbawoawpawoawqavcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaabaHRaHSaHTaHUaHVaabaaaaabaaaaaaaaaaaaaabaabaaaaaaaaaaaaaDpaEoaEpdckaDpdckdckdcldcpaDpaDpaDpaDpaDpaDpaabaabaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoPaoPaoPaaaaaaaaaaaaaaaaaaaabaabaaaaabaaaaaaaabaHaaHbaHcaHdaHaaABaABaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavfawrawsawtawuawYawvawwawxawyavVavVavVawzavVavVavVavVavVawAavVavVavVavVavVavVawBavVavVavVavVawCavVawDavVawEavVavVawFapuawGawHawIawJawfawKawjawLavaawMawNawOawPawQawRawSavFavcaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaabaIUaIVaIWaIXaIUaabaaaaabaaaaaaaabaaaaaaaabaabaaaaaaaMUaDpdckaDpdckaLHaKaaLHdcmaLHaLHaLHaAraMUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaABaABaABaABaABaabaabaHaaADaAGaIuaHaaBuaABaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavfawUawVawWawXctIavfawZaxaaxbaxcaxdaxeaxfaxgaxaaxcaxcaxcaxhaxcaxcaxcaxcaxcaxcaxiaxjaxkaxkaxkaxlaxmaxnaxmaxoaxpaxmaxqapuaxraxraxraxraxraxrawjawkavaaxsawmaxtavbawoaxuawoawqavcaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaaaaaaaaaaaaaabaIUaKeaKfaKgaIUaabaaaaabaaaaaaaabaaaaaaaMUazCaMUazCaMUaAraLHaLHaLHaLHaLHaLHaLHaLHaLHaNaaAsaMUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaBAaBzaBAaaaaaaaaaaABaABaABaABaCCaBGaCDaABaaaaaaaHaaJtaCEaJvaDzayYaABaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavfavfavfavfavfavfavfaxzaxzaxAaxBaxCaxDaxEaxFaxGaxHaxIaxGaxJaxGaxKaxKaxKaxKaxKaxKaxLaxKaxKaxMaxNaxOaxPaxzaxQaxzaxRaxzaxzaqzaBlanTanTanTanTaxSawkavaaxTawmaxUavbaxVawRawSavFavcaaaaaaaaaaaaaaaaaaaaaaaaaabaabaaaaaaaaaaaaaBAaChaBAaaaaabaIUaAtaLvaLwaIUaKkaKkaKkaKkaKkaAuaAwaAvaMUaBiaLHaNaaAsdcmaLHdcmdcmdcmaMUaBkaMUaMUaMUaMUaMUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaayaaybayaaaaaaaaabaABaBwaEIaEEayYaFOayYaABaGZaHeaHaaHaaHfaKBaDzayYaABaABaHhaHgaHeaABaABaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxAaydayeayfaxEaygaxGayhayiayjaykaylaymaynayoaypayqayraysaytayuayvavVavWaywayxayyayzayzayzayzayzayAayzayzayzayzayBayCayDayEayFayGayHayIayJawoawqavcaabayMayNayNayNayNayNayOaabaabaaaaaaaaaaaaaDkaCoaDkaaaaKkaIUaIUaMXaMYaIUaCqaLHaLHaLHdcmaBFaLHaCsaMUaLHaLHaLHaDbdcmaLHaMUaDhaDfaMUaLHaDiaMUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayRaySayTaaaayUayVayWaabaabayXayYayXaaaaaaaabaABaIqaItaIsaIyaIxaCraABaJrayYaMfaJsaKwaJuaJuaJuaJuaJuaJuaJuaJuaKxaABaaaaKyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazaazbazcazdaxEaygaxGazeazfazgaykazhaziazjazjazjazjazjaysazjazkavQavVavWaxzazlazmaznaznaznaznazoazpazqazqazqazqazqazqazrazsaztazuazvazwazxazyavcavcazzazAazBazBazBazBazBazAazzaabaaaaaaaaaaaaaHFaGDdbZaaaaKkaCBaEfaEcaEhaLHaLHaLHdcmaLHdcmaEiaLHaLHaMUaLHaEkaEjaEiaBkaLHaMUaFjaCFaMUaLHaDjaMUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -8334,21 +8334,21 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPsaLMaLMaKnaLTaNxaLMaNxaPtaNxaLMaNxaLTaNyaNzaIhaGTaPuaJqaJqaPvaPwcZFaPwaJqczPczPczPczPcZHcZGcZJcZIczPaPCaPDaPEaMmaMmaPFaMmaPGaPHaPIaJwaaaaIAaIAaPJaPKaPJaIAaIAaaaaFPaFUaFVaPLaPMaPNaNYaPOaFVaCJaERaFWaFXaPPaKYaIGaFXaIHaFXaIGaLaaPQaERaERaERaPRaPSaPTaPUaPVaPWamiamiaPXaPYaPZaQaaILaQbaJQaILaQcaILaQdaILaQeaQfaQgaQhaQiaQjaQkaQlaQmaQnaQoaQpaQqaQoaQoaQraQoaQlaQsaQlaLFdbQaQldbRdbTdbSaQwdbUaQxdbVdbXdbWdbYaQBaLEaQCaQDaQEaQFaQGaQHaQIaQJaOUaQKaQLaOVaQMaQNaQOaQPaPbaQQaPdaPeaPfaUndcaaLJaQSaQTaQTaQUaPpaPpaPpaPpaPqaPraaaaaaaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLUaQVaQWaNwaLTaNxaLMaNxaLMaNxaLMaNxaLTaNyaNzaIhaGTaQXaQYaQZaRaaRbaRbaFzaRdaReaRfaRgcZKcZMcZLcATcZNczPaRlaRmaRnaRoaRpcZOaRraRsaRtaRuaJwaaaaabaaaaRvaRwaRvaaaaabaaaazEaFUaFVaRxaRyaRzaRAaRBaFVaCJaERaRCaRDaHoaREaRFaHraRGaHraRHaRIaRJaERaRKaRLaRMaRNaROaRPaRQaRRaaaaaaaPXaRSaRTaRUaILaRVaRWaJQaJQaRXaJQaJQaJQaRYaINaRZaINaSaaSbaINaScaINaSdaSeaSfaSgaShaSiaSdaSjaSkaSlaSmaSlaSlaSlaSlaSnaSlaSlaSoaSldcbaUbaSlaSqaLHaOQaSraQFaSsaStaSuaSvaSwaSxaSyaSzaOVaSAaSBaSCaSDaSEaQQaPdaPeaPfaSFaSGaLJaSHaQTaQTaQUaPpaPpaPpaPpaPqaPraaaaaaaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSIaSJaKmaLKaLTaLMaSKaSLaLMaLMaSMaSKaLTaLUaSNaSOaGTaSPaSQaSRaSSaSRaSRaSRaSRaSRaSTaFzczPcZQcZPcZQczPczPaSVaSWaSXaJzaJzaJzaJzaSVaSYaSZaJwaTaaTbaTbaTcaTdaTeaTbaTbaTfaTgaThaFVaTiaFVaTjaTkaTlaFVaTmaERaERaERaERaTnaToaTpaTqaTpaTraTsaERaERaTtaRNaRNaRNaRNaTuaTvaTwaTxaTyaPXaTzaRTaTAaILaILaILaILaILaILaILaINaINaRYaTBaTCaTDaTEaTFaTGaTHaTIaSdaTJaTKaTLaTMaTNaSdaTOaTPaTQaTRaTQaTSaTTaTUaTVaTWaTXaTYaTZdccaVUaSlaUcaOHaUdaUeaUfaSsaUgaSuaSvaUhaOVaUiaUjaUkaUlaUmaQPaQPaOVaOVaPdaPeaPfaUnaUoaLJaUpaUqaUraUsaUtaUuaPpaPpaUvaPraaaaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSIaKmaKnaKmaKmaKoaKpaKmaKmaKnaSJaUwazEaUxaSPaEvaUyaUyaUzaUyaUAaAyaUBaUCaFzaUDaYgaUGaUGaUHaUIaUGaUJaUGaUGaUGaUKaUGaUGaULaUMaUNaUOaUPaUQaUOaURaUOaUOaUOaUOaUSaUTaUUaUGaUGaUVaUWaUXaUYaUZaVaaVbaVcaVdaVeaVfaVfaVfaVfaVfaVfaVgaVhaViaVjaVkaVlaVmaVnaVoaVpaRNaRNaVqaVraVsaVraVsaVtaVuaVvaVwaVxaVyaINaVzaVAaVBaVCaVDaVDaVEaVFaVGaVHaSdaVIaVJaVKaVKaVLaSdaVMaVNaVOaVPaVQaVQaVRaVSaVTaVUaVVaVWaVXaVYaVUaSlaSqdauaOQaWbaWcaWcaWdaWeaWcaWfaOVaWgaWhaOVaWiaWjaQPaWkaOVaWlaWmaWnaPfaNqaNqaLJaWoaNsaWpaWqaNsaNsaNsaNsaNsabCacUaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEvaWraWsaJlaJlaJlaJlaWtaWraEvaJnazEaWuaWvaWwaWxaWyaWzaWzaWAaAyaWBaUCaWCaWDaYgcZRaWFaWGaWHaWHaWIaWJaWJaWJaWKaWLaWLaWMaWNaWOaWHaWHaWPaWQaWRaWSaWTaWTaWUaWTaWVaWQaWQaWQaWWaUWaUXaUYaUZaUZaUZaUZaWXaUZaUZaUZaUZaUZaUZaWYaWZaXaaXbaXcaXdaXeaXfaXgaXhaXiaXiaXiaXjaXkaXkaXkaXlaVyaVyaVyaXmaXnaVyaINaXoaXpaVDaVDaXqaVDaXraXsaVGaXtaSdaXuaXvaXwaXxaXyaSdaXzaXAaXBaXCaXDaXEaSlaXFaXGaXFaSlaSlaSlaSoaSlaSlaSqaLHaOQaXHaQFaQFaQFaXIaQFaXJaOVaOVaOVaOVaOVaOVaOVaXKaOVaPfaPfaPeaPfaXLaXMaNqaXNaXOaXPaXQaXRaXSaXTaXUaXVaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaIfazEaWwaCzaIhaXWaXXaXYaXZaIhaCzaYaaYbazEaYcaSPaWwaYdaYeaWzaWzaWAaAyaYfaUCaFzaWDaYgaUGaYhaYiaUGaUGaYjaYkaYlaUGaYmaYnaYoaYnaYpaYqaYnaYnaYraYnaYnaYsaYtaYnaYuaYnaYvaUGaUGaUGaYwaYxaYyaYzaYAaYBaYAaYCaYDaYCaYCaYCaYCaYCaYCaYEaYFaYGaYGaYGaYGaYHaYGaYIaYJaYGaYGaYKaYLaYMaYMaYMaYMaYMaYMaYMaYNaVyaVyaINaYOaYPaYQaYRaYRaYSaYTaXsaVGaYUaSdaSdaSdaSdaSdaYVaSdaYWaYXaYYaYZaTQaZaaSlaZbaZcaZdaZeaZfaZgaZhaZiaSlaSqaWaaOQaZjaZkaQFaZlaZmaQFaZnaZnaOQaZoaZpbeKaNqaZraZsaZtaPfaPfaZuaZvaNqaZwaNqaZxaXOaZyaZzaZAaXOaXOaZBaZCaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaAyaFxaWraSOaGTaFzaFzaGUaSOaWraSOaZDaZEaZFaZGaFxaZHaZHaUzaZHaUAaAyaZIaUCaFzaAyaSUaSUaZJaZKaZKaZKaZKaZKaZKaZLaZMaZKaZKaZKaZKaZKaZKaZNaZOaZPaZPaZQaZPaZPaZPaZRaZSaZTaZUaZVaZWaSUaZXaZXaZYaZYaZYaZZbaabaabaabaabaabaababbacbadbaebafbaebagbagbahbaibajbakbalbacbamaTxaTxaTxaTxaTxaTxbanbaobaobaoaINbapbaqbarbarbarbarbasbatbaubavbawbaxbcjbazbaAbaBaSdaSdbaCbaDbaEbaFbaGaSlbaHbaIbaJbaJbaJbaJbaKbaLaSlbaMdcjaOQbaNaQFaZlaZlaZmaZlaQFbaOaOQbaPbaQbaRaNqaPfbaSbaTbaUbaUbaVbaWbaXbaYbaZbbabbbbbcbbdaXQaXOaXObbeaZCaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtdcdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEvbbfaFzbbgbbhbbibbjbbkbblbbjbbmbbnbbjbbjbbobbpbbqbbrbbsbbsbbsbbtbbsbbubbvaAybbwbbxbbyaZKbbzbbAbbBbbCbbDbbBbbEbbFbbGbbHbbIbbJaZKbbKbbLaZPbbMbbNbbObbPaZPaZPaZPbbQbbQbbRbbSbbQbbQbbQbbTaUZaVebbUaaaaaaaaaaaaaaaaaaaaabacbbVbbWbbXbbYbbZbcabcbbccbcdbcebcfbacaaaaaaaaaaaaaaaaaaaaabcgbchaVybciaINcrgbaqbavbavbavbavbavbckbclbavbavbavbaybcmbcmbcnbcobcpbcqbcrbcsbctbcuaSlbcvbcwbcxbcybcybcxbczbcAaSlaSqaLHaOQbcCbcDaQFaZlaZmaQFbcEbcEaOQaOQbcFaOQaNqbcGaZsaZvbcHbcHbcIaZvaNqaNqaNqbcJaXObcKbcKbcLbcKaXObcMaZCaabaaaaaabcNaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFxbcObcPbcObcObcObcObcObcObcPbcObcObcQaFzbcRbcSbcTaFzbcUaFzbcVbcWbcXbcYbcZaAybbxbbxbdaaZKbdbbbBbbBbbBbbBbbBbbEbdcbbBbbBbbBbddaZKbbKbdeaZPbdfbdgbdhbdhbdibdjbdkbbQbdlbdmbdnbdobdpbdqbbTaUZaVebbUaaaaaaaaaaaabacbacbacbacbdrbdsbdtbdubdvbdwbdxbdybdzbdAbdBbacbacbacbacaaaaaaaaaaaabcgbchaVyaVybdCbavbdDbdEbdFbavbdGbdHaLmbdIbdJbdKbavbaybdLbcmbdMbdNbcmbdObdPbdQbdRbcmbdSbdTbdUbcxbcybcybcxbdVbdWaSlaSqdauaOQbaNaQFaZlaZlaZmaZlaQFaQFbdYbdZaQFbeaaNqbebbecbedbcHbcHbeebedbefaNqbegbehaXObeibeibejbeiaXObbebekbelbembembenaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazEazEbeobepbepbepbepbepbepbepaInazEaAybeqberbesbesbesbesbesbesbetbesbesbesaAybbxbbKbeuaZKbevbbBbbBbewbexbeybezbewbbBbbBbbBbeAaZKbbKbbLaZPbeBbeCbeDbeDbeEbeFbdkbbQbeGbeHbeIbeJbnEbeLbeMbeNaVebeObePbeQbacbacbacbeRbeSbeTbeUbeVbeVbeWbeXbeVbeYbeVbeZbfabfbbfcbfdbfebacbacbacbeQbambffbchaVyaVyaINbfgbdDbdJbdFbavbfhbfibavbfjbfkbdKbavbaybcmbcmbflbfmbfnbfobfpbfqbfrbcmbfsbdTbftbcxbcybcybfubfvbdWaSlaSqaLHaOQbfxbfybfzaZlaZmbfAaQFaQFbfBaQFbfCbfDaNqbfEbfFbfGbcHbcHbfHbfGbfIaNqbfJbehaXOaXOaXOaXQaXOaXObfKbfLbfMbfNbfObfPaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQaabbfRaIiaFBbfSbesbfTbfUbfVbfWbfXbfYbfZbgabesbjjbgcbgdbgeaZKbgfbbBbbBbewbeybggbghbewbbBbbBbgibgjaZKbbKbbLaZPaZPbgkaZPaZPaZPaZPaZPbbQbglbeJbgmbeJbgnbeLbbTbgoaVeaVfaVfbgpbgqbgrbacbgsbdtbgtbeVbeVbgubgvbgwbgxbgwbgybgzbgAbgBbgCbgDbgEbacbgFbgqbgGbgHbgIbchaVyaVybdCbavbgJbavbavbavbgKbgLbavbfjbgMbdKbavbaybcmbcmbgNbgObgPbgQbgRbgSbfrbgTaSlbgUbftbcxbcybcybcxbfvbgVaSlbgWbgXaOQbgYaOQaOQbgZaZmbhabhbaQFbhcbhdaUgbhebaZbhfbhgbhhbhibhibhjbhkbhlbaZbhmbhnaXObhoaXOaXQaXOaXObhpbhqbelbembembhraNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbhsbhtbhuaGTbcRbesbfTbhvbhwbfTbhxbhybhzbhAbesbhBbhCbhDaZOaZKbhEbhFbhGbhHbhIbhJbhKbhLbhLbhLbhMbhNaZKbbKbgcbhObhPbhQbbKbbKbhRaZObhSbbQbhTbhUbhVbhWbhXbhYbbTbgoaUZaUZaUZbhZbiabibbicbidbiebeVbifbigbihbiibijbikbilbimbinbiobipbidbiqbirbisbitbiubivbiwbixbiyaVybizaINbavbiAbiBbdKbavbiCbiDbavbiEbiFbdKbavbaybcmbcmbcmbcnbcmbiGbcmbgSbfrbiHaSlbiIbftbcxbcybcybcxbfvbiJaSlbiKbiLbiMbiNbiObiPbiQbiRbiSbiSbiSbiSbiSbiSbiTbiUbiVbcHbcHbcHbcHbcHbcHbiWbiXbiYbehaXOaXOaXOaXQaXOaXObiZaZCbjabjabjaaZCaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbjbbjcbjdbjebcRbesbjfbfTbjgbjgbjgbjhbfTbjibesbqbbjkbhDbjlbjlbjlbjlbjmbjlbjnbbBbjobjpbjqbjqbjrbjsaZKbjtbjubjvbjwbjxbjybjybjzbjAbjBbjCbjCbjCbjCbjCbjDbbQbbTbjEbjFbjGbjHbjIbjJbjKbjLbjMbikbjNbjObjPbjPbjPbjPbjQbjPbjRbjSbjTbjUbjNbjVbjWbacbjXbjYbjZbkabkbbkcaVyaVybdCbavbkdbavbavbavaOsbavbavbkebkebkfbkfbkgbcmbcmbkhbkibcmbcmbcmbkjbkkbklaSlbdWbftbcxbcxbcxbcxbfvbkmaSlbknbkobkobkpbkobkqaZlaZlaZlaZlbkraZlaZlaZlbksbiXbcHbcHbcHbcHbcHbcHbcHbiWbiXbiYbehaXObcKbcKbcLbcKaXObktaZCbkubkvbkwaZCaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSIaKmaKnaKmaKmaKoaKpaKmaKmaKnaSJaUwazEaUxaSPaEvaUyaUyaUzaUyaUAaAyaUBaUCaFzaUDaYgaUGaUGaUHaUIaUGaUJaUGaUGaUGaUKaUGaUGaULaUMaUNaUOaUPaUQaUOaURaUOaUOaUOaUOaUSaUTaUUaUGaUGaUVaUWaUXaUYaUZaVaaVbaVcaVdaVeaVfaVfaVfaVfaVfaVfaVgaVhaViaVjaVkaVlaVmaVnaVoaVpaRNaRNaVqaVraVsaVraVsaVtaVuaVvaVwaVxaVyaINaVzaVAaVBaVCaVDaVDaVEaVFaVGaVHaSdaVIaVJaVKaVKaVLaSdaVMaVNaVOaVPaVQaVQaVRaVSbeCaVUaVVaVWaVXaVYaVUaSlaSqdauaOQaWbaWcaWcaWdaWeaWcaWfaOVaWgaWhaOVaWiaWjaQPaWkaOVaWlaWmaWnaPfaNqaNqaLJaWoaNsaWpaWqaNsaNsaNsaNsaNsabCacUaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEvaWraWsaJlaJlaJlaJlaWtaWraEvaJnazEaWuaWvaWwaWxaWyaWzaWzaWAaAyaWBaUCaWCaWDaYgcZRaWFaWGaWHaWHaWIaWJaWJaWJaWKaWLaWLaWMaWNaWOaWHaWHaWPaWQaWRaWSaWTaWTaWUbdkaWVaWQaWQaWQaWWaUWaUXaUYaUZaUZaUZaUZaWXaUZaUZaUZaUZaUZaUZaWYaWZaXaaXbaXcaXdaXeaXfaXgaXhaXiaXiaXiaXjaXkaXkaXkaXlaVyaVyaVyaXmaXnaVyaINaXoaXpaVDaVDaXqaVDaXraXsaVGaXtaSdaXuaXvaXwaXxaXyaSdaXzaXAaXBaXCaXDaXEaSlaXFaXGaXFaSlaSlaSlaSoaSlaSlaSqaLHaOQaXHaQFaQFaQFaXIaQFaXJaOVaOVaOVaOVaOVaOVaOVaXKaOVaPfaPfaPeaPfaXLaXMaNqaXNaXOaXPaXQaXRaXSaXTaXUaXVaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaIfazEaWwaCzaIhaXWaXXaXYaXZaIhaCzaYaaYbazEaYcaSPaWwaYdaYeaWzaWzaWAaAyaYfaUCaFzaWDaYgaUGaYhaYiaUGaUGaYjaYkaYlaUGaYmaYnaYoaYnaYpaYqaYnaYnaYraYnaYnaYsaYtaYnaYuaYsaYvaVTaUGaUGaYwaYxaYyaYzaYAaYBaYAaYCaYDaYCaYCaYCaYCaYCaYCaYEaYFaYGaYGaYGaYGaYHaYGaYIaYJaYGaYGaYKaYLaYMaYMaYMaYMaYMaYMaYMaYNaVyaVyaINaYOaYPaYQaYRaYRaYSaYTaXsaVGaYUaSdaSdaSdaSdaSdaYVaSdaYWaYXaYYaYZaTQaZaaSlaZbaZcaZdaZeaZfaZgaZhaZiaSlaSqaWaaOQaZjaZkaQFaZlaZmaQFaZnaZnaOQaZoaZpbeKaNqaZraZsaZtaPfaPfaZuaZvaNqaZwaNqaZxaXOaZyaZzaZAaXOaXOaZBaZCaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaAyaFxaWraSOaGTaFzaFzaGUaSOaWraSOaZDaZEaZFaZGaFxaZHaZHaUzaZHaUAaAyaZIaUCaFzaAyaSUaSUaZJaZKaZKaZKaZKaZKaZKaZLaZMaZKaZKaZKaZKaZKaZKaZNaZOaZPaZPaZQaZPaJaaKjaKiaJaaJaaZUaZVaZWaSUaZXaZXaZYaZYaZYaZZbaabaabaabaabaabaababbacbadbaebafbaebagbagbahbaibajbakbalbacbamaTxaTxaTxaTxaTxaTxbanbaobaobaoaINbapbaqbarbarbarbarbasbatbaubavbawbaxbcjbazbaAbaBaSdaSdbaCbaDbaEbaFbaGaSlbaHbaIbaJbaJbaJbaJbaKbaLaSlbaMdcjaOQbaNaQFaZlaZlaZmaZlaQFbaOaOQbaPbaQbaRaNqaPfbaSbaTbaUbaUbaVbaWbaXbaYbaZbbabbbbbcbbdaXQaXOaXObbeaZCaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtdcdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaEvbbfaFzbbgbbhbbibbjbbkbblbbjbbmbbnbbjbbjbbobbpbbqbbrbbsbbsbbsbbtbbsbbubbvaAybbwbbxbbyaZKbbzbbAbbBbbCbbDbbBbbEbbFbbGbbHbbIbbJaZKbbKbbLaZPbdjbdgbdiaJabdhbbObbNaJabbQbbRbbSbbQbbQbbQbbTaUZaVebbUaaaaaaaaaaaaaaaaaaaaabacbbVbbWbbXbbYbbZbcabcbbccbcdbcebcfbacaaaaaaaaaaaaaaaaaaaaabcgbchaVybciaINcrgbaqbavbavbavbavbavbckbclbavbavbavbaybcmbcmbcnbcobcpbcqbcrbcsbctbcuaSlbcvbcwbcxbcybcybcxbczbcAaSlaSqaLHaOQbcCbcDaQFaZlaZmaQFbcEbcEaOQaOQbcFaOQaNqbcGaZsaZvbcHbcHbcIaZvaNqaNqaNqbcJaXObcKbcKbcLbcKaXObcMaZCaabaaaaaabcNaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFxbcObcPbcObcObcObcObcObcObcPbcObcObcQaFzbcRbcSbcTaFzbcUaFzbcVbcWbcXbcYbcZaAybbxbbxbdaaZKbdbbbBbbBbbBbbBbbBbbEbdcbbBbbBbbBbddaZKbbKbdeaZPbdfbbMbeFaJaaZTaZSaZRaJabdlbdmbdnbdobdpbdqbbTaUZaVebbUaaaaaaaaaaaabacbacbacbacbdrbdsbdtbdubdvbdwbdxbdybdzbdAbdBbacbacbacbacaaaaaaaaaaaabcgbchaVyaVybdCbavbdDbdEbdFbavbdGbdHaLmbdIbdJbdKbavbaybdLbcmbdMbdNbcmbdObdPbdQbdRbcmbdSbdTbdUbcxbcybcybcxbdVbdWaSlaSqdauaOQbaNaQFaZlaZlaZmaZlaQFaQFbdYbdZaQFbeaaNqbebbecbedbcHbcHbeebedbefaNqbegbehaXObeibeibejbeiaXObbebekbelbembembenaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazEazEbeobepbepbepbepbepbepbepaInazEaAybeqberbesbesbesbesbesbesbetbesbesbesaAybbxbbKbeuaZKbevbbBbbBbewbexbeybezbewbbBbbBbbBbeAaZKbbKbbLaZPbeBbqwbbPaJabeEcePcZXaJabeGbeHbeIbeJbnEbeLbeMbeNaVebeObePbeQbacbacbacbeRbeSbeTbeUbeVbeVbeWbeXbeVbeYbeVbeZbfabfbbfcbfdbfebacbacbacbeQbambffbchaVyaVyaINbfgbdDbdJbdFbavbfhbfibavbfjbfkbdKbavbaybcmbcmbflbfmbfnbfobfpbfqbfrbcmbfsbdTbftbcxbcybcybfubfvbdWaSlaSqaLHaOQbfxbfybfzaZlaZmbfAaQFaQFbfBaQFbfCbfDaNqbfEbfFbfGbcHbcHbfHbfGbfIaNqbfJbehaXOaXOaXOaXQaXOaXObfKbfLbfMbfNbfObfPaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQaabbfRaIiaFBbfSbesbfTbfUbfVbfWbfXbfYbfZbgabesbjjbgcbgdbgeaZKbgfbbBbbBbewbeybggbghbewbbBbbBbgibgjaZKbbKbbLaZPaZPbgkaZPaJabeEbeDbhSaJabglbeJbgmbeJbgnbeLbbTbgoaVeaVfaVfbgpbgqbgrbacbgsbdtbgtbeVbeVbgubgvbgwbgxbgwbgybgzbgAbgBbgCbgDbgEbacbgFbgqbgGbgHbgIbchaVyaVybdCbavbgJbavbavbavbgKbgLbavbfjbgMbdKbavbaybcmbcmbgNbgObgPbgQbgRbgSbfrbgTaSlbgUbftbcxbcybcybcxbfvbgVaSlbgWbgXaOQbgYaOQaOQbgZaZmbhabhbaQFbhcbhdaUgbhebaZbhfbhgbhhbhibhibhjbhkbhlbaZbhmbhnaXObhoaXOaXQaXOaXObhpbhqbelbembembhraNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbhsbhtbhuaGTbcRbesbfTbhvbhwbfTbhxbhybhzbhAbesbhBbhCbhDaZOaZKbhEbhFbhGbhHbhIbhJbhKbhLbhLbhLbhMbhNaZKbbKbgcbhObhPbhQbhRaJaaJaaJaaJaaJabhTbhUbhVbhWbhXbhYbbTbgoaUZaUZaUZbhZbiabibbicbidbiebeVbifbigbihbiibijbikbilbimbinbiobipbidbiqbirbisbitbiubivbiwbixbiyaVybizaINbavbiAbiBbdKbavbiCbiDbavbiEbiFbdKbavbaybcmbcmbcmbcnbcmbiGbcmbgSbfrbiHaSlbiIbftbcxbcybcybcxbfvbiJaSlbiKbiLbiMbiNbiObiPbiQbiRbiSbiSbiSbiSbiSbiSbiTbiUbiVbcHbcHbcHbcHbcHbcHbiWbiXbiYbehaXOaXOaXOaXQaXOaXObiZaZCbjabjabjaaZCaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbjbbjcbjdbjebcRbesbjfbfTbjgbjgbjgbjhbfTbjibesbqbbjkbhDbjlbjlbjlbjlbjmbjlbjnbbBbjobjpbjqbjqbjrbjsaZKbjtbjubjvbjwbjxbjzbjAbjBdatbjBbjCbjCbjCbjCbjCbjDbbQbbTbjEbjFbjGbjHbjIbjJbjKbjLbjMbikbjNbjObjPbjPbjPbjPbjQbjPbjRbjSbjTbjUbjNbjVbjWbacbjXbjYbjZbkabkbbkcaVyaVybdCbavbkdbavbavbavaOsbavbavbkebkebkfbkfbkgbcmbcmbkhbkibcmbcmbcmbkjbkkbklaSlbdWbftbcxbcxbcxbcxbfvbkmaSlbknbkobkobkpbkobkqaZlaZlaZlaZlbkraZlaZlaZlbksbiXbcHbcHbcHbcHbcHbcHbcHbiWbiXbiYbehaXObcKbcKbcLbcKaXObktaZCbkubkvbkwaZCaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbkybkzbhubkAaZGbkBbfTbkCbjgbjgbjgbjhbkCbfTbesbkDbkEbhDbjlbkFbkGbkHbkIbjlbkJbkKbkLaZKbkMbkNbkObkPaZKbbKbkQbkRbkRbkSbkRbkRbkRbkRbkTbkUbkUbkUbkVbkUbkWbkXbkYbkZblablbblbblbblbblbblbblcbldblcbjPbjPbleblfblgblhblibljbleblkbjPbllblmbllbllbllbllbllbllbllbkcaVyaVyaINblnblobavblpbavblqbavblrblsbltbkfbluaSdblvblwaSdaSdblxblyblyblyaSdaSdaSlblzblAblBblBblBblBblAblCaSlblDbkobkobkpblEaOQblFblGblHblIblJblKblLblMblNaNqblOaPfblPbcHbcHblPaPfblQaNqblRbehaXObeibeibejbeiaXObiZaZCbjabjabjaaZCaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQbfQblSaFxblTblUblVbesbhvbhvbhvbfTblWblXblYblZbesbmabmbbhDbjlbmcbjlbmdbmebjlbmfbmgbmhaZKbkMbkNbkObmiaZKbbKbkQbkRbmjbmkbmlbmmbmnbkRbmobmpbmqbmrbkXbkXbkXbkXbmsbmtbmublbbmvbmwbmxbmybmzbmAbmBbmCbjPbmDblgbmEbmFbmGbmFbmEblgbmHbjPbmIbmJbmKbmLbmMbmNbmObmPbllbmQbmRbmRbmSaINaINaINaINbmTbdCbmTbmUaINaSbaINaINaSdaSdaSdaSdbmVbmWbmWbmWbmWbmXbmYaSlbmZbnabmZbnbbnbbmZbnabmZaSlblDbkobkobncblEaOQaOQaOQaOQaOQbgYaOQaOQaOQaOQaNqbndbnebnfbnfbnfbnfbngaNqaNqbnhbniaXOaXOaXOaXQaXOaXObhpbekbnjbembembnkaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIfazEbnlaJlbhuaAyaAyaAyaAyaAyaAybnmbnnbesbesbesbesbesbesbnobesbesbesbnpbnpbnqbjlbnrbnsbmdbntbjlbnubnvbnuaZKbkMbkNbkObnwaZKbbKbkQbkRbnxbnybnzbmmbnzbkRbmobnAbnBbnCbnDbEVbnFbkXbnGbnHbmubnIbnJbnKbnLbnMbnMbnLbnNbnObjPbnPblgblgbnQbnRbmFbmEblgbnSbjTbnTbnUbnVbnWbnXbnYbnVbnZbllboabobbocbodboebofbogbohbohbohbohbohbohboibojbokbolbohbombohbohbohbohbohbohbohbohbonboobopbopbopbopbopbopboqbofborbosbosbotboubovboubowbouboxboybozbouboAboBboCboDboEboEboEboEboEboEboEboFboGboHboHboHboHboIboHboJboKboLboMboNbfOboOaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaboPboPboPboPboPboPboPboPboPboPaaaaabboQaIiboRboSboTboUboUboUboUboUboVboWboXboYboZbpabnqbjlbjlbjlbpbbmebjlaZKaZKaZKaZKbkMbpcbpdbpeaZKbpfbpgbkRbphbpibmmbnzbpjbkRbmobpkbnBbnCbnCbplbpmbkXbpnbnHbmubpobppbpqbprbpsbptbpubnNbpvbjPbpwbnQblgbpxbpybpxblgbnQbpzblkbpAbnVbnVbnWbpBbnYbnVbpCbllbpDbocbocbodboebofbohbohbohbohbohbohbohbpEbohbohbohbohbohbohbpFbpGbpGbpGbpGbpGbpGbpGbpGbpGbpGbpGbpGbpGbpGbpHbpIbpJboEboEbpKbkobkobkobkobkobkpbkobkobkobkobkobkobkobkobkobkobkobkobpLbkobpMbpNaXOaXOaXOaXOaXOaXOaXObpObhqbelbembembenaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaboPboPboPboPboPboPboPboPboPboPboPbhsbhtbpPbpQbpRbpSbpSbpSbpTbpSbpSbpUbpVbpWaZOaZOaZObpXbjlbkFbpYbpZbntbjlbqabsubqaaZKaZKaZKaZKbqcaZKbqdbkQbkRbqebqfbnzbqgbqhbkRbmobkXbqibnCbnCbnCbqjbkXbqkbnHbmubqlbqmbpqbprbqnbqobpubnNbqpbjPbqqbqrblgbqsbqtbqubmEbqvbqwbqxbqybqzbqAbqBbqCbqDbnVbqEbllbqFbqGbocbodboebofbohbqHbohbohbohbohbqIbqJbqJbqJbqJbqKbohbohbohbohbqLbohbqHbqMbohbqNbqObqPbohbqQbqRbqRbqSbqTbqUbqVbkobkobkobkobkobkobkobqWbqXbqYbkobkobkobkobkobkobkobkobkobkobqZbrabrabrbbrcbrdbrebrfbrfbrfbrfbrgbrhbriaabaaaaaaaabaNtaNtaNtaNtaNtaNtaaaaNtaNtaNtaNtdcdaNtaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaboPboPboPboPboPboPboPboPboPboPboPbhsbhtbpPbpQbpRbpSbpSbpSbpTbpSbpSbpUbpVbpWaZOaZOaZObpXbjlbkFbpYbpZbntbjlbqabsubqaaZKaZKaZKaZKbqcaZKbqdbkQbkRbqebqfbnzbqgbqhbkRbmobkXbqibnCbnCbnCbqjbkXbqkbnHbmubqlbqmbpqbprbqnbqobpubnNbqpbjPbqqbqrblgbqsbqtbqubmEbqvdavbqxbqybqzbqAbqBbqCbqDbnVbqEbllbqFbqGbocbodboebofbohbqHbohbohbohbohbqIbqJbqJbqJbqJbqKbohbohbohbohbqLbohbqHbqMbohbqNbqObqPbohbqQbqRbqRbqSbqTbqUbqVbkobkobkobkobkobkobkobqWbqXbqYbkobkobkobkobkobkobkobkobkobkobqZbrabrabrbbrcbrdbrebrfbrfbrfbrfbrgbrhbriaabaaaaaaaabaNtaNtaNtaNtaNtaNtaaaaNtaNtaNtaNtdcdaNtaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaboPboPboPboPboPboPboPboPboPboPboPbrjbrkbrlbrmbrnbpSbrobrpbrqbrqbrrbrsbrtbrubrvbrvbrwbrxbjlbjlbjlbmdbrybmcaZOaZOaZOaZObrzbbKbbKbrAbjybrBbrCbrDbrEbrFbrGbrHbrIbkRbrJbkXbrKbnCbnCbnCbrLbrMbrNbnHbrOblbbrPbrQbnLbnLbnLbnLbnNbrRbjPbrSbrTbjPbjPbjPbjPbjPbjPbjPblkbllbrUbrVbrWbrXbrYbrZbsabllbsbbscbscbsdbsdbsdbsdbsdbsdbsdbsebsebsfbsgbshbshbsgbsfbsebsebsibsibsibsibsibsibsjbsjbskbsjbsjbsjbsjbsjbslbsmbsnbsobkobkobspbspbsqbsqbsqbsqbsqbsrbrabrabqZbrabkobrabrabrabrabssbstbstbstbstbsFbsvbsvbsvbsvbsvbsvbsvbsvbsvaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaaaaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaboPboPboPboPboPboPboPboPboPboPboPbkybkzbpPbpQbswbpSbsxbpSbsybszbpSbpUbpUbdabsAbsBbsBbsCbjlbkFbsDbmdbsEbmcbsHbsGbujbsIbsJbsKbsKbsLbsKbsMbsNbkRbsObsPbsQbsRbsSbrDbsTbkXbsUbnCbnCbsVbsWbsXbrNbnHbsYblbbsZbtabtbbtcbtdbtebtfblbblbbtgbthbtibtjbtkbtjbtlbthaaabtmbllbtnbtobtpbtqbrYbnVbtrbllbtsbttbtubsdbtvbtwbtxbtybtzbtAbtBbtCbtDbtEbtFbtFbtEbtGbtHbtIbsibtJbtLbtKbtMbsibtNbtObtPbtQbtRbtSbtSbtTbslbtUbtVbtWbtXbtWbtYbtYbsqbtZbuabubbsqbucbudbucbsqbuebrabssbstbufbugbufbstbuhbuibstbuwbukbulbumaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaaaaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaboPboPboPboPboPboPboPboPboPboPaaabunaWwbuoblUbupbpSbuqbpSburbusbutbuubpSbuvbwHbuxbuybsCbjlbjlbjlbjlbjlbjlbuzbuAbuBbuCbuDbkRbkRbkRbkRbkRbkRbkRbuEbkRbkRbkRbuFbkRbuGbuHbuIbnCbnCbnCbuJbrMbuKbnHbuLblbbuMbtablcblcblcblbbuNblbbuObuPbuQbuRbuSbuTbuUbuVbuWbuXbuYbllbuZbnVbvabvbbrYbvcbnVbllbvdbvebvfbsdbvgbvhbvibvjbvkbvlbvmbtFbtFbtFbtFbtFbtFbtFbvnbvobvpbvqbvrbvsbvtbsibvubvvbvwbvxbvybvzbvvbtTbslbvAbtVbvBbvCbvDbvEbvEbvFbvGbvHbvIbvJbvKbvLbvMbsqbvNbvObvPbstbvQbvRbvSbvTbvTbvUbstbvVbvWbvXbumaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaNtaNtaNtaNtaNtaNtaaaaNtaNtaNtaNtaNtaNtaaaaaaaaaaaaaaaaaaaaabkxbkxbkxbkxbkxbkxbkxbkxbkxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm
index 8e73f62d3ce..776108ecbef 100644
--- a/code/datums/supplypacks.dm
+++ b/code/datums/supplypacks.dm
@@ -14,8 +14,9 @@ var/const/supply_science = 5
var/const/supply_organic = 6
var/const/supply_materials = 7
var/const/supply_misc = 8
+var/const/supply_vend = 9
-var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engineer,supply_medical,supply_science,supply_organic,supply_materials,supply_misc)
+var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engineer,supply_medical,supply_science,supply_organic,supply_materials,supply_misc,supply_vend)
/proc/get_supply_group_name(var/cat)
switch(cat)
@@ -35,6 +36,8 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
return "Raw Materials"
if(8)
return "Miscellaneous"
+ if(9)
+ return "Vending"
/datum/supply_packs
@@ -961,17 +964,6 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
containername = "Beekeeping crate"
access = access_hydroponics
-/datum/supply_packs/organic/vending
- name = "Bartending Supply Crate"
- contains = list(/obj/item/weapon/vending_refill/boozeomat,
- /obj/item/weapon/vending_refill/boozeomat,
- /obj/item/weapon/vending_refill/boozeomat,
- /obj/item/weapon/vending_refill/coffee,
- /obj/item/weapon/vending_refill/coffee,
- /obj/item/weapon/vending_refill/coffee)
- cost = 20
- containername = "bartending supply crate"
-
/datum/supply_packs/organic/foodcart
name = "Food Cart crate"
contains = list(/obj/structure/foodcart)
@@ -979,30 +971,6 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
containertype = /obj/structure/largecrate
containername = "food cart crate"
-/datum/supply_packs/organic/vending/snack
- name = "Snack Supply Crate"
- contains = list(/obj/item/weapon/vending_refill/snack,
- /obj/item/weapon/vending_refill/snack,
- /obj/item/weapon/vending_refill/snack)
- cost = 15
- containername = "snacks supply crate"
-
-/datum/supply_packs/organic/vending/cola
- name = "Softdrinks Supply Crate"
- contains = list(/obj/item/weapon/vending_refill/cola,
- /obj/item/weapon/vending_refill/cola,
- /obj/item/weapon/vending_refill/cola)
- cost = 15
- containername = "softdrinks supply crate"
-
-/datum/supply_packs/organic/vending/cigarette
- name = "Cigarette Supply Crate"
- contains = list(/obj/item/weapon/vending_refill/cigarette,
- /obj/item/weapon/vending_refill/cigarette,
- /obj/item/weapon/vending_refill/cigarette)
- cost = 15
- containername = "cigarette supply crate"
-
//////////////////////////////////////////////////////////////////////////////
//////////////////////////// Materials ///////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
@@ -1306,13 +1274,6 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
containername = "crate" //let's keep it subtle, eh?
contraband = 1
-/datum/supply_packs/misc/autodrobe
- name = "Autodrobe Supply Crate"
- contains = list(/obj/item/weapon/vending_refill/autodrobe,
- /obj/item/weapon/vending_refill/autodrobe)
- cost = 15
- containername = "autodrobe supply crate"
-
/datum/supply_packs/misc/formalwear //This is a very classy crate.
name = "Formal-wear Crate"
contains = list(/obj/item/clothing/under/blacktango,
@@ -1378,3 +1339,75 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
/obj/item/weapon/beach_ball)
cost = 20
containername = "polo supply crate"
+
+
+//////////////////////////////////////////////////////////////////////////////
+//////////////////////////// Vending /////////////////////////////////////////
+//////////////////////////////////////////////////////////////////////////////
+
+/datum/supply_packs/vending
+ name = "HEADER"
+ group = supply_vend
+
+/datum/supply_packs/vending/autodrobe
+ name = "Autodrobe Supply Crate"
+ contains = list(/obj/item/weapon/vending_refill/autodrobe,
+ /obj/item/weapon/vending_refill/autodrobe)
+ cost = 15
+ containername = "autodrobe supply crate"
+
+/datum/supply_packs/vending/clothes
+ name = "Clothing Supply Crate"
+ contains = list(/obj/item/weapon/vending_refill/suitdispenser,
+ /obj/item/weapon/vending_refill/shoedispenser,
+ /obj/item/weapon/vending_refill/hatdispenser,
+ /obj/item/weapon/vending_refill/clothing)
+ cost = 15
+ containername = "clothing supply crate"
+
+/datum/supply_packs/vending/pets
+ name = "Pet Supply Crate"
+ contains = list(/obj/item/weapon/vending_refill/crittercare,
+ /obj/item/weapon/vending_refill/crittercare)
+ cost = 15
+ containername = "pet supply crate"
+
+/datum/supply_packs/vending/bar
+ name = "Bar Supply Crate"
+ contains = list(/obj/item/weapon/vending_refill/boozeomat,
+ /obj/item/weapon/vending_refill/boozeomat,
+ /obj/item/weapon/vending_refill/boozeomat)
+ cost = 15
+ containername = "bar supply crate"
+
+/datum/supply_packs/vending/coffee
+ name = "Coffee Supply Crate"
+ contains = list(/obj/item/weapon/vending_refill/coffee,
+ /obj/item/weapon/vending_refill/coffee,
+ /obj/item/weapon/vending_refill/coffee)
+ cost = 15
+ containername = "coffee supply crate"
+
+/datum/supply_packs/vending/snack
+ name = "Snack Supply Crate"
+ contains = list(/obj/item/weapon/vending_refill/snack,
+ /obj/item/weapon/vending_refill/snack,
+ /obj/item/weapon/vending_refill/snack)
+ cost = 15
+ containername = "snacks supply crate"
+
+/datum/supply_packs/vending/cola
+ name = "Softdrinks Supply Crate"
+ contains = list(/obj/item/weapon/vending_refill/cola,
+ /obj/item/weapon/vending_refill/cola,
+ /obj/item/weapon/vending_refill/cola)
+ cost = 15
+ containername = "softdrinks supply crate"
+
+/datum/supply_packs/vending/cigarette
+ name = "Cigarette Supply Crate"
+ contains = list(/obj/item/weapon/vending_refill/cigarette,
+ /obj/item/weapon/vending_refill/cigarette,
+ /obj/item/weapon/vending_refill/cigarette)
+ cost = 15
+ containername = "cigarette supply crate"
diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm
index e6be0ea5281..eb1f76e48cd 100644
--- a/code/game/area/Space Station 13 areas.dm
+++ b/code/game/area/Space Station 13 areas.dm
@@ -1118,6 +1118,10 @@ var/list/ghostteleportlocs = list()
name = "\improper Clothing Shop"
icon_state = "Theatre"
+/area/civilian/pet_store
+ name = "\improper Pet Store"
+ icon_state = "Theatre"
+
/area/holodeck
name = "\improper Holodeck"
icon_state = "Holodeck"
diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm
index b0c1ff709ea..a2042720a7f 100644
--- a/code/game/machinery/constructable_frame.dm
+++ b/code/game/machinery/constructable_frame.dm
@@ -199,7 +199,9 @@ to destroy them and players will be able to make replacements.
/obj/machinery/vending/autodrobe = "AutoDrobe",
/obj/machinery/vending/hatdispenser = "Hatlord 9000",
/obj/machinery/vending/suitdispenser = "Suitlord 9000",
- /obj/machinery/vending/shoedispenser = "Shoelord 9000")
+ /obj/machinery/vending/shoedispenser = "Shoelord 9000",
+ /obj/machinery/vending/clothing = "ClothesMate",
+ /obj/machinery/vending/crittercare = "CritterCare")
/obj/item/weapon/circuitboard/vendor/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/screwdriver))
diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm
index bf18a7e5111..dad171e0e59 100644
--- a/code/game/machinery/vending.dm
+++ b/code/game/machinery/vending.dm
@@ -1216,7 +1216,7 @@
/obj/item/clothing/accessory/scarf/purple=1,/obj/item/clothing/accessory/scarf/yellow=1,/obj/item/clothing/accessory/scarf/orange=1,
/obj/item/clothing/accessory/scarf/lightblue=1,/obj/item/clothing/accessory/scarf/white=1,/obj/item/clothing/accessory/scarf/black=1,
/obj/item/clothing/accessory/scarf/zebra=1,/obj/item/clothing/accessory/scarf/christmas=1,/obj/item/clothing/accessory/stripedredscarf=1,
- /obj/item/clothing/accessory/stripedbluescarf=1,/obj/item/clothing/accessory/stripedgreenscarf=1,/obj/item/clothing/accessory/petcollar =3,/obj/item/clothing/accessory/waistcoat=1,
+ /obj/item/clothing/accessory/stripedbluescarf=1,/obj/item/clothing/accessory/stripedgreenscarf=1,/obj/item/clothing/accessory/waistcoat=1,
/obj/item/clothing/under/sundress=2,/obj/item/clothing/under/stripeddress = 1, /obj/item/clothing/under/sailordress = 1, /obj/item/clothing/under/redeveninggown = 1, /obj/item/clothing/under/blacktango=1,/obj/item/clothing/suit/jacket=3,
/obj/item/clothing/glasses/regular=2,/obj/item/clothing/head/sombrero=1,/obj/item/clothing/suit/poncho=1,
/obj/item/clothing/suit/ianshirt=1,/obj/item/clothing/shoes/laceup=2,/obj/item/clothing/shoes/black=4,
@@ -1250,3 +1250,32 @@
/obj/item/weapon/pen/red = 5)
contraband = list(/obj/item/toy/crayon/mime = 1,/obj/item/toy/crayon/rainbow = 1)
premium = list(/obj/item/weapon/contraband/poster = 5)
+
+/obj/machinery/vending/crittercare
+ name = "CritterCare"
+ desc = "A vending machine for pet supplies."
+ product_slogans = "Stop by for all your animal's needs!;Cuddly pets deserve a stylish collar!;Pets in space, what could be more adorable?;Freshest fish eggs in the system!;Rocks are the perfect pet, buy one today!"
+ product_ads = "House-training costs extra!;Now with 1000% more cat hair!;Allergies are a sign of weakness!;Dogs are man's best friend. Remember that Vulpkanin!; Heat lamps for Unathi!; Vox-y want a cracker?"
+ vend_delay = 34
+ icon_state = "crittercare"
+ products = list(/obj/item/clothing/accessory/petcollar = 5, /obj/item/weapon/fish_net = 5, /obj/item/weapon/fishfood = 5,
+ /obj/item/weapon/tank_brush = 5, /obj/item/weapon/egg_scoop = 5, /obj/item/fish_eggs/goldfish = 5,
+ /obj/item/fish_eggs/clownfish = 5, /obj/item/fish_eggs/shark = 5, /obj/item/toy/pet_rock = 5,
+ )
+ prices = list(/obj/item/clothing/accessory/petcollar = 50, /obj/item/weapon/fish_net = 15, /obj/item/weapon/fishfood = 15,
+ /obj/item/weapon/tank_brush = 15, /obj/item/weapon/egg_scoop = 15, /obj/item/fish_eggs/goldfish = 10,
+ /obj/item/fish_eggs/clownfish = 10, /obj/item/fish_eggs/shark = 10, /obj/item/toy/pet_rock = 100,
+ )
+ contraband = list(/obj/item/fish_eggs/babycarp = 5)
+ premium = list(/obj/item/toy/pet_rock/fred = 1, /obj/item/toy/pet_rock/roxie = 1)
+ refill_canister = /obj/item/weapon/vending_refill/crittercare
+
+/obj/machinery/vending/crittercare/New()
+ ..()
+ component_parts = list()
+ var/obj/item/weapon/circuitboard/vendor/V = new(null)
+ V.set_type(type)
+ component_parts += V
+ component_parts += new /obj/item/weapon/vending_refill/crittercare(0)
+ component_parts += new /obj/item/weapon/vending_refill/crittercare(0)
+ component_parts += new /obj/item/weapon/vending_refill/crittercare(0)
diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm
index d65a4d33383..cd9a551a4f4 100644
--- a/code/game/objects/items/stacks/sheets/glass.dm
+++ b/code/game/objects/items/stacks/sheets/glass.dm
@@ -68,7 +68,7 @@
return 0
var/title = "Sheet-Glass"
title += " ([src.amount] sheet\s left)"
- switch(alert(title, "Would you like full tile glass or one direction?", "One Direction", "Full Window", "Cancel", null))
+ switch(input(title, "What would you like to construct?") in list("One Direction Window", "Full Window", "Fishbowl", "Fish Tank", "Wall Aquarium", "Cancel"))
if("One Direction")
if(!src) return 1
if(src.loc != user) return 1
@@ -118,6 +118,24 @@
W.anchored = 0
W.air_update_turf(1)
src.use(2)
+ if("Fish Tank")
+ if(!src) return 1
+ if(src.loc != user) return 1
+ if(src.amount < 3)
+ user << "\red You need more glass to do that."
+ return 1
+ var/obj/machinery/fishtank/F = new /obj/machinery/fishtank/tank(user.loc, 0)
+ F.air_update_turf(1)
+ src.use(3)
+ if("Wall Aquarium")
+ if(!src) return 1
+ if(src.loc != user) return 1
+ if(src.amount < 4)
+ user << "\red You need more glass to do that."
+ return 1
+ var/obj/machinery/fishtank/F = new /obj/machinery/fishtank/wall(user.loc, 0)
+ F.air_update_turf(1)
+ src.use(4)
return 0
diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm
index f9441690da7..f675e472702 100644
--- a/code/game/objects/items/toys.dm
+++ b/code/game/objects/items/toys.dm
@@ -1365,4 +1365,27 @@ obj/item/toy/cards/deck/syndicate/black
new /obj/item/toy/character/thief(src)
new /obj/item/toy/character/wizard(src)
new /obj/item/toy/character/cthulhu(src)
- new /obj/item/toy/character/lich(src)
\ No newline at end of file
+ new /obj/item/toy/character/lich(src)
+
+
+//Pet Rocks, just like from the 70's!
+
+/obj/item/toy/pet_rock
+ name = "pet rock"
+ desc = "The perfect pet!"
+ icon = 'icons/obj/toy.dmi'
+ icon_state = "pet_rock"
+ w_class = 2
+ force = 5
+ throwforce = 5
+ attack_verb = list("attacked", "bashed", "smashed", "stoned")
+
+/obj/item/toy/pet_rock/fred
+ name = "fred"
+ desc = "Fred, the bestest boy pet in the whole wide universe!"
+ icon_state = "fred"
+
+/obj/item/toy/pet_rock/roxie
+ name = "roxie"
+ desc = "Roxie, the bestest girl pet in the whole wide universe!"
+ icon_state = "roxie"
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/vending_items.dm b/code/game/objects/items/weapons/vending_items.dm
index e296670581a..306d0ba890a 100644
--- a/code/game/objects/items/weapons/vending_items.dm
+++ b/code/game/objects/items/weapons/vending_items.dm
@@ -76,4 +76,9 @@
/obj/item/weapon/vending_refill/clothing
machine_name = "ClothesMate"
icon_state = "refill_clothes"
- charges = 20// of 62
\ No newline at end of file
+ charges = 20// of 62
+
+/obj/item/weapon/vending_refill/crittercare
+ machine_name = "CritterCare"
+ icon_state = "refill_pet"
+ charges = 17// of 54
diff --git a/code/modules/fish/fish_eggs.dm b/code/modules/fish/fish_eggs.dm
new file mode 100644
index 00000000000..902616755dd
--- /dev/null
+++ b/code/modules/fish/fish_eggs.dm
@@ -0,0 +1,42 @@
+
+/obj/item/fish_eggs
+ name = "fish eggs"
+ desc = "Eggs laid by a fish. This cluster seems... empty?"
+ icon = 'icons/obj/fish_items.dmi'
+ icon_state = "eggs"
+ w_class = 2.0
+ var/fish_type = null //Holds the name of the fish that the egg is for
+
+/obj/item/fish_eggs/New()
+ ..()
+
+var/global/list/fish_eggs_list = list("dud" = /obj/item/fish_eggs,
+ "goldfish" = /obj/item/fish_eggs/goldfish,
+ "clownfish" = /obj/item/fish_eggs/clownfish,
+ "shark" = /obj/item/fish_eggs/shark,
+ "babycarp" = /obj/item/fish_eggs/babycarp,
+ )
+
+/obj/item/fish_eggs/goldfish
+ name = "goldfish eggs"
+ desc = "Goldfish eggs, surprisingly, don't contain actual gold."
+ icon_state = "gold_eggs"
+ fish_type = "goldfish"
+
+/obj/item/fish_eggs/clownfish
+ name = "clownfish eggs"
+ desc = "Even as eggs, they are funnier than the clown. HONK!"
+ icon_state = "clown_eggs"
+ fish_type = "clownfish"
+
+/obj/item/fish_eggs/shark
+ name = "shark eggs"
+ desc = "We're gonna need a- Oh wait, they're still eggs."
+ icon_state = "shark_eggs"
+ fish_type = "shark"
+
+/obj/item/fish_eggs/babycarp
+ name = "baby space carp eggs"
+ desc = "Eggs from the substantially smaller form of the intergalactic terror."
+ icon_state = "babycarp_eggs"
+ fish_type = "babycarp"
diff --git a/code/modules/fish/fish_items.dm b/code/modules/fish/fish_items.dm
new file mode 100644
index 00000000000..b1171871c25
--- /dev/null
+++ b/code/modules/fish/fish_items.dm
@@ -0,0 +1,52 @@
+
+/obj/item/weapon/egg_scoop
+ name = "fish egg scoop"
+ desc = "A small scoop to collect fish eggs with."
+ icon = 'icons/obj/fish_items.dmi'
+ icon_state = "egg_scoop"
+ slot_flags = SLOT_BELT
+ throwforce = 0
+ w_class = 2.0
+ throw_speed = 3
+ throw_range = 7
+
+/obj/item/weapon/fish_net
+ name = "fish net"
+ desc = "A tiny net to capture fish with. It's a death sentence!"
+ icon = 'icons/obj/fish_items.dmi'
+ icon_state = "net"
+ slot_flags = SLOT_BELT
+ throwforce = 0
+ w_class = 2.0
+ throw_speed = 3
+ throw_range = 7
+
+ suicide_act(mob/user) //"A tiny net is a death sentence: it's a net and it's tiny!" https://www.youtube.com/watch?v=FCI9Y4VGCVw
+ viewers(user) << "[user] placed the [src.name] on top of \his head, \his fingers tangled in the netting! It looks like \he's trying to commit suicide."
+ return(OXYLOSS)
+
+/obj/item/weapon/fishfood
+ name = "fish food can"
+ desc = "A small can of Carp's Choice brand fish flakes. The label shows a smiling Space Carp."
+ icon = 'icons/obj/fish_items.dmi'
+ icon_state = "fish_food"
+ throwforce = 1
+ w_class = 2.0
+ throw_speed = 3
+ throw_range = 7
+
+/obj/item/weapon/tank_brush
+ name = "aquarium brush"
+ desc = "A brush for cleaning the inside of aquariums. Contains a built-in odor neutralizer."
+ icon = 'icons/obj/fish_items.dmi'
+ icon_state = "brush"
+ slot_flags = SLOT_BELT
+ throwforce = 0
+ w_class = 2.0
+ throw_speed = 3
+ throw_range = 7
+ attack_verb = list("scrubbed", "brushed", "scraped")
+
+ suicide_act(mob/user)
+ viewers(user) << "[user] is vigorously scrubbing \himself raw with the [src.name]! It looks like \he's trying to commit suicide."
+ return(BRUTELOSS|FIRELOSS)
diff --git a/code/modules/fish/fishtank.dm b/code/modules/fish/fishtank.dm
new file mode 100644
index 00000000000..591329480f9
--- /dev/null
+++ b/code/modules/fish/fishtank.dm
@@ -0,0 +1,701 @@
+
+//////////////////////////////
+// Fish Tanks! //
+//////////////////////////////
+
+
+/obj/machinery/fishtank
+ name = "placeholder tank"
+ desc = "So generic, it might as well have no description at all."
+ icon = 'icons/obj/fish_items.dmi'
+ icon_state = "tank1"
+ density = 0
+ anchored = 0
+ throwpass = 0
+
+ var/tank_type = "" // Type of aquarium, used for icon updating
+ var/water_capacity = 0 // Number of units the tank holds (varies with tank type)
+ var/water_level = 0 // Number of units currently in the tank (new tanks start empty)
+ var/light_switch = 0 // 0 = off, 1 = on (off by default)
+ var/filth_level = 0.0 // How dirty the tank is (max 10)
+ var/lid_switch = 0 // 0 = open, 1 = closed (open by default)
+ var/max_fish = 0 // How many fish the tank can support (varies with tank type, 1 fish per 50 units sounds reasonable)
+ var/food_level = 0 // Amount of fishfood floating in the tank (max 10)
+ var/fish_count = 0 // Number of fish in the tank
+ var/list/fish_list = null // Tracks the current types of fish in the tank
+ var/egg_count = 0 // How many fish eggs can be harvested from the tank (capped at the max_fish value)
+ var/list/egg_list = null // Tracks the current types of harvestable eggs in the tank
+
+ var/has_lid = 0 // 0 if the tank doesn't have a lid/light, 1 if it does
+ var/max_health = 0 // Can handle a couple hits
+ var/cur_health = 0 // Current health, starts at max_health
+ var/leaking = 0 // 0 if not leaking, 1 if minor leak, 2 if major leak (not leaking by default)
+ var/shard_count = 0 // Number of glass shards to salvage when broken (1 less than the number of sheets to build the tank)
+
+/obj/machinery/fishtank/bowl
+ name = "fish bowl"
+ desc = "A small bowl capable of housing a single fish, commonly found on desks. This one has a tiny treasure chest in it!"
+ icon_state = "bowl1"
+ density = 0 // Small enough to not block stuff
+ anchored = 0 // Small enough to move even when filled
+ throwpass = 1 // Just like at the county fair, you can't seem to throw the ball in to win the goldfish
+ pass_flags = PASSTABLE // Small enough to pull onto a table
+
+ tank_type = "bowl"
+ water_capacity = 50 // Not very big, therefore it can't hold much
+ max_fish = 1 // What a lonely fish
+
+ has_lid = 0
+ max_health = 15 // Not very sturdy
+ cur_health = 15
+ shard_count = 0 // No salvageable shards
+
+/obj/machinery/fishtank/tank
+ name = "fish tank"
+ desc = "A large glass tank designed to house aquatic creatures. Contains an integrated water circulation system."
+ icon = 'icons/obj/fish_items.dmi'
+ icon_state = "tank1"
+ density = 1
+ anchored = 1
+ throwpass = 1 // You can throw objects over this, despite it's density, because it's short enough.
+
+ tank_type = "tank"
+ water_capacity = 200 // Decent sized, holds almost 2 full buckets
+ max_fish = 4 // Room for a few fish
+
+ has_lid = 1
+ max_health = 50 // Average strength, will take a couple hits from a toolbox.
+ cur_health = 50
+ shard_count = 2
+
+
+/obj/machinery/fishtank/wall
+ name = "wall aquarium"
+ desc = "This aquarium is massive! It completely occupies the same space as a wall, and looks very sturdy too!"
+ icon_state = "wall1"
+ density = 1
+ anchored = 1
+ throwpass = 0 // This thing is the size of a wall, you can't throw past it.
+
+ tank_type = "wall"
+ water_capacity = 500 // This thing fills an entire tile, it holds a lot.
+ max_fish = 10 // Plenty of room for a lot of fish
+
+ has_lid = 1
+ max_health = 100 // This thing is a freaking wall, it can handle abuse.
+ cur_health = 100
+ shard_count = 3
+
+
+//////////////////////////////
+// VERBS & PROCS //
+//////////////////////////////
+
+/obj/machinery/fishtank/verb/toggle_lid_verb()
+ set name = "Toggle Tank Lid"
+ set category = "Object"
+ set src in view(1)
+ toggle_lid(usr)
+
+/obj/machinery/fishtank/proc/toggle_lid(var/mob/living/user)
+ lid_switch = !lid_switch
+ update_icon()
+
+/obj/machinery/fishtank/verb/toggle_light_verb()
+ set name = "Toggle Tank Light"
+ set category = "Object"
+ set src in view(1)
+ toggle_light(usr)
+
+/obj/machinery/fishtank/proc/toggle_light(var/mob/living/user)
+ light_switch = !light_switch
+ if(light_switch)
+ set_light(2,2,"#a0a080")
+ else
+ set_light(0)
+
+//////////////////////////////
+// NEW() PROCS //
+//////////////////////////////
+
+/obj/machinery/fishtank/New()
+ ..()
+ fish_list = new/list()
+ egg_list = new/list()
+ if(!has_lid) //Tank doesn't have a lid/light, remove the verbs for then
+ verbs -= /obj/machinery/fishtank/verb/toggle_lid_verb
+ verbs -= /obj/machinery/fishtank/verb/toggle_light_verb
+
+/obj/machinery/fishtank/tank/New()
+ ..()
+ if(prob(5)) //5% chance to get the castle decoration
+ icon_state = "tank2"
+
+//////////////////////////////
+// ICON PROCS //
+//////////////////////////////
+
+/obj/machinery/fishtank/update_icon()
+ overlays.Cut()
+
+ //Update Alert Lights
+ if(has_lid) //Skip the alert lights for aquariums that don't have lids (fishbowls)
+ if(egg_count > 0) //There is at least 1 egg to harvest
+ overlays += "over_egg"
+ if(lid_switch == 1) //Lid is closed, lid status light is red
+ overlays += "over_lid_1"
+ else //Lid is open, lid status light is green
+ overlays += "over_lid_0"
+ if(food_level > 5) //Food_level is high and isn't a concern yet
+ overlays += "over_food_0"
+ else if(food_level > 2) //Food_level is starting to get low, but still above the breeding threshold
+ overlays += "over_food_1"
+ else //Food_level is below breeding threshold, or fully consumed, feed the fish!
+ overlays += "over_food_2"
+ overlays += "over_leak_[leaking]" //Green if we aren't leaking, light blue and slow blink if minor link, dark blue and rapid flashing for major leak
+
+ //Update water overlay
+ if(water_level == 0) return //Skip the rest of this if there is no water in the aquarium
+ var/water_type = "_clean" //Default to clean water
+ if(filth_level > 5) water_type = "_dirty" //Show dirty water above filth_level 5 (breeding threshold)
+ if(water_level > (water_capacity * 0.85)) //Show full if the water_level is over 85% of water_capacity
+ overlays += "over_[tank_type]_full[water_type]"
+ else if(water_level > (water_capacity * 0.35)) //Show half-full if the water_level is over 35% of water_capacity
+ overlays += "over_[tank_type]_half[water_type]"
+
+ return
+
+//////////////////////////////
+// PROCESS PROC //
+//////////////////////////////
+
+//Stops atmos from passing wall tanks, since they are effectively full-windows.
+/obj/machinery/fishtank/wall/CanAtmosPass(var/turf/T)
+ return 0
+
+/obj/machinery/fishtank/process()
+ //Start by counting fish in the tank
+ fish_count = 0
+ for(var/fish in fish_list)
+ if(fish)
+ fish_count ++
+
+ //Check if the water level can support the current number of fish
+ if((fish_count * 50) > water_level)
+ if(prob(50)) //Not enough water for all the fish, chance to kill one
+ kill_fish() //Chance passed, kill a random fish
+ filth_level += 2 //Dead fish raise the filth level quite a bit, reflect this
+
+ //Check filth_level
+ check_filth_level()
+ if(filth_level == 10 && fish_count > 0) //This tank is nasty and possibly unsuitable for fish if any are in it
+ if(prob(30)) //Chance for a fish to die each cycle while the tank is this nasty
+ kill_fish() //Kill a random fish, don't raise filth level since we're at cap already
+
+ //Check breeding conditions
+ if(fish_count >=2 && egg_count < max_fish) //Need at least 2 fish to breed, but won't breed if there are as many eggs as max_fish
+ if(food_level > 2 && filth_level <=5) //Breeding is going to use extra food, and the filth_level shouldn't be too high
+ if(prob(((fish_count - 2) * 5)+10)) //Chances increase with each additional fish, 10% base + 5% per additional fish
+ egg_count ++ //A new set of eggs were laid, increase egg_count
+ egg_list.Add(select_egg_type()) //Add the new egg to the egg_list for storage
+ food_level -= 2 //Remove extra food for the breeding process
+
+ //Handle standard food and filth adjustments
+ check_food_level()
+ var/ate_food = 0
+ if(food_level > 0 && prob(50)) //Chance for the fish to eat some food
+ if(food_level >= (fish_count * 0.1)) //If there is at least enough food to go around, feed all the fish
+ food_level -= fish_count * 0.1
+ else //Use up the last of the food
+ food_level = 0
+ ate_food = 1
+ check_food_level()
+
+ if(water_level > 0) //Don't dirty the tank if it has no water
+ if(filth_level < 10 && prob(25)) //Chance for the tank to get dirtier if the filth_level isn't 10
+ if(ate_food && prob(30)) //If they ate this cycle, there is an additional chance they make a bigger mess
+ filth_level += fish_count * 0.1
+ else //If they didn't make the big mess, make a little one
+ filth_level += 0.1
+ check_filth_level()
+
+ //Handle special interactions
+ handle_special_interactions()
+
+ //Handle water leakage from damage
+ if(water_level > 0) //Can't leak water if there is no water in the tank
+ if(leaking == 2) //At or below 25% health, the tank will lose 10 water_level per cycle (major leak)
+ water_level -= 10
+ else if(leaking == 1) //At or below 50% health, the tank will lose 1 water_level per cycle (minor leak)
+ water_level -= 1
+ check_water_level()
+
+//////////////////////////////
+// SUPPORT PROCS //
+//////////////////////////////
+
+/obj/machinery/fishtank/proc/handle_special_interactions()
+ for(var/fish in fish_list)
+ switch(fish)
+ if("catfish") //Catfish have a small chance of cleaning some filth since they are a bottom-feeder
+ if((filth_level > 0) && prob(25))
+ filth_level -= 0.1
+ if("feederfish") //Feeder fish have a small chance of sacrificing themselves to produce some food
+ if(fish_count < 2) //Don't sacrifice the last fish, there's nothing to eat it
+ continue
+ if(food_level <= 7.5 && prob(25))
+ kill_fish("feederfish") //Kill the fish to reflect it's sacrifice, but don't increase the filth_level
+ food_level += 1 //The corpse became food for the other fish, ecology at it's finest
+ check_food_level()
+ check_filth_level()
+ check_water_level()
+
+/obj/machinery/fishtank/proc/check_water_level()
+ if(water_level < 0) //Water_level cannot be negative, set it to 0 if it is
+ water_level = 0
+ if(water_level > water_capacity) //Water_level cannot exceed capacity, set it to capacity if it does
+ water_level = water_capacity
+ update_icon()
+
+/obj/machinery/fishtank/proc/check_filth_level()
+ if(filth_level < 0) //Filth_level cannot be negative, set it to 0 if it is
+ filth_level = 0
+ if(filth_level > 10) //Filth_level cannot exceed 10 (cap), set it to 10 if it does
+ filth_level = 10
+
+/obj/machinery/fishtank/proc/check_food_level()
+ if(food_level < 0) //Food_level cannot be negative, set it to 0 if it is
+ food_level = 0
+ if(food_level > 10) //Food_level cannot exceed 10 (cap), set it to 10 if it does
+ food_level = 10
+
+/obj/machinery/fishtank/proc/check_health()
+ //Max value check
+ if(cur_health > max_health) //Cur_health cannot exceed max_health, set it to max_health if it does
+ cur_health = max_health
+ //Leaking status check
+ if(cur_health <= (max_health * 0.25)) //Major leak at or below 25% health (-10 water/cycle)
+ leaking = 2
+ else if(cur_health <= (max_health * 0.5)) //Minor leak at or below 50% health (-1 water/cycle)
+ leaking = 1
+ else //Not leaking above 50% health
+ leaking = 0
+ //Destruction check
+ if(cur_health <= 0) //The tank is broken, destroy it
+ destroy()
+
+/obj/machinery/fishtank/proc/kill_fish(var/type = null)
+ //Check if we were passed a fish to kill, otherwise kill a random one
+ if(type)
+ fish_list.Remove(type) //Kill a fish of the specified type
+ fish_count -- //Lower fish_count to reflect the death of a fish, so the everything else works fine
+ else
+ fish_list.Remove(pick(fish_list)) //Kill a random fish
+ fish_count -- //Lower fish_count to reflect the death of a fish, so the everything else works fine
+
+/obj/machinery/fishtank/proc/add_fish(var/type = null)
+ //Check if we were passed a fish type
+ if(type)
+ fish_list.Add("[type]") //Add a fish of the specified type
+ fish_count ++ //Increase fish_count to reflect the introduction of a fish, so the everything else works fine
+ //Announce the new fish
+ src.visible_message("A new [type] hatched in \the [src]!")
+ //Null type fish are dud eggs, give a message to inform the player
+ else
+ usr << "The eggs disolve in the water. They were duds!"
+
+/obj/machinery/fishtank/proc/select_egg_type()
+ var/fish = pick(fish_list) //Select a fish from the fish in the tank
+ if(prob(25)) //25% chance to be a dud (blank) egg
+ fish = "dud"
+ var/obj/item/fish_eggs/egg_path = null //Create empty variable to receive the egg_path
+ egg_path = fish_eggs_list[fish] //Locate the corresponding path from fish_eggs_list that matches the fish
+ if(!egg_path) //The fish wasn't located in the fish_eggs_list, potentially due to a typo, so return a dud egg
+ return /obj/item/fish_eggs
+ else //The fish was located in the fish_eggs_list, so return the proper egg
+ return egg_path
+
+/obj/machinery/fishtank/proc/harvest_eggs(var/mob/user)
+ if(!egg_count) //Can't harvest non-existant eggs
+ return
+
+ if(egg_count > max_fish) //Make sure the number of eggs doesn't exceed the max_fish for the tank
+ egg_count = max_fish //If you somehow exceeded the cap, set the egg_count to max, destroy the excess later
+
+ while(egg_count > 0) //Loop until you've harvested all the eggs
+ var/obj/item/fish_eggs/egg = pick(egg_list) //Select an egg at random
+ egg = new egg(get_turf(user)) //Spawn the egg at the user's feet
+ egg_list.Remove(egg) //Remove the egg from the egg_list
+ egg_count -- //Decrease the egg_count and begin again
+
+ egg_list.Cut() //Destroy any excess eggs, clearing the egg_list
+
+/obj/machinery/fishtank/proc/destroy(var/deconstruct = 0)
+ var/turf/T = get_turf(src) //Store the tank's turf for atmos updating after deletion of tank
+ if(!deconstruct) //Check if we are deconstructing or breaking the tank
+ var/shards_left = shard_count
+ while(shards_left > 0) //Produce the appropriate number of glass shards
+ new /obj/item/weapon/shard(get_turf(src))
+ shards_left --
+ if(water_level) //Spill any water that was left in the tank when it broke
+ spill_water()
+ else //We are deconstructing, make glass sheets instead of shards
+ var/sheets = shard_count + 1 //Deconstructing it salvages all the glass used to build the tank
+ new /obj/item/stack/sheet/glass(get_turf(src), sheets) //Produce the appropriate number of glass sheets, in a single stack
+ qdel(src) //QDel the tank and it's contents
+ T.air_update_turf(1) //Update the air for the turf, to avoid permanent atmos sealing with wall tanks
+
+/obj/machinery/fishtank/proc/spill_water()
+ switch(tank_type)
+ if("bowl") //Fishbowl: Wets it's own tile
+ var/turf/T = get_turf(src)
+ if(!istype(T, /turf/simulated)) return
+ var/turf/simulated/S = T
+ S.MakeSlippery()
+ if("tank") //Fishtank: Wets it's own tile and the 4 adjacent tiles (cardinal directions)
+ var/turf/ST = get_turf(src)
+ if(istype(ST, /turf/simulated))
+ var/turf/simulated/ST2 = ST
+ ST2.MakeSlippery()
+ var/list/L = ST.CardinalTurfs()
+ for(var/turf/T in L)
+ if(!istype(T, /turf/simulated)) continue
+ var/turf/simulated/S = T
+ S.MakeSlippery()
+ if("wall") //Wall-tank: Wets it's own tile and the surrounding 8 tiles (3x3 square)
+ for(var/turf/T in trange(1, src.loc))
+ if(!istype(T, /turf/simulated)) continue
+ var/turf/simulated/S = T
+ S.MakeSlippery()
+
+////////////////////////////// Note from FalseIncarnate:
+// EXAMINE PROC // This proc is massive, messy, and probably could be handled better.
+////////////////////////////// Feel free to try cleaning it up if you think of a better way to do it.
+
+/obj/machinery/fishtank/examine()
+ ..()
+ var/examine_message = ""
+ //Approximate water level
+ if(water_level == 0)
+ examine_message += "\The [src] is empty! "
+ else if(water_level < water_capacity * 0.1)
+ examine_message += "\The [src] is nearly empty! "
+ else if(water_level <= water_capacity * 0.25)
+ examine_message += "\The [src] is about one-quarter filled. "
+ else if(water_level <= water_capacity * 0.5)
+ examine_message += "\The [src] is about half filled. "
+ else if(water_level <= water_capacity * 0.75)
+ examine_message += "\The [src] is about three-quarters filled. "
+ else if(water_level < water_capacity)
+ examine_message += "\The [src] is nearly full! "
+ else if (water_level == water_capacity)
+ examine_message += "\The [src] is full! "
+
+ //Approximate filth level
+ if(filth_level == 0)
+ examine_message += "[src] is spotless! "
+ else if(filth_level <= 2.5)
+ examine_message += "[src] looks like the glass has been smudged. "
+ else if(filth_level <= 5) //This is the breeding threshold
+ examine_message += "[src] has some algae growth in it. "
+ else if(filth_level <= 7.5)
+ examine_message += "[src] has a lot of algae growth in it. "
+ else if(filth_level < 10)
+ examine_message += "[src] is getting hard to see into! Someone should clean it soon! "
+ else if(filth_level == 10)
+ examine_message += "[src] is absolutely disgusting! Someone should clean it NOW! "
+
+ //Approximate food level
+ if(!fish_count) //Check if there are fish in the tank
+ if(food_level > 0) //Don't report a tank that has neither fish nor food in it
+ examine_message += "There's some food in [src], but no fish! "
+ else //We've got fish, report the food level
+ if(food_level == 0)
+ examine_message += "The fish look very hungry! "
+ else if(food_level < 2)
+ examine_message += "The fish are nibbling on the last of their food. "
+ else if(food_level < 10) //Breeding is possible
+ examine_message += "The fish seem happy! "
+ else if(food_level == 10)
+ examine_message += "There is a solid layer of fish food at the top. "
+
+ //Report the number of harvestable eggs
+ if(egg_count) //Don't bother if there isn't any eggs
+ examine_message += "There are [egg_count] eggs able to be harvested! "
+
+ //Report the number and types of live fish if there is water in the tank
+ if(fish_count == 0)
+ examine_message += "\The [src] doesn't contain any live fish. "
+ else
+ //Build a message reporting the types of fish
+ var/fish_num = fish_count
+ var/message = "You spot "
+ while(fish_num > 0)
+ if(fish_count > 1 && fish_num == 1) //If there were at least 2 fish, and this is the last one, add "and" to the message
+ message += "and "
+ message += "a [fish_list[fish_num]]"
+ fish_num --
+ if(fish_num > 0) //There's more fish, add a comma to the message
+ message +=", "
+ message +="." //No more fish, end the message with a period
+ //Display the number of fish and previously constructed message
+ examine_message += "\The [src] contains [fish_count] live fish. [message] "
+
+ //Report lid state for tanks and wall-tanks
+ if(has_lid) //Only report if the tank actually has a lid
+ //Report lid state
+ if(lid_switch)
+ examine_message += "The lid is closed. "
+ else
+ examine_message += "The lid is open. "
+
+ //Report if the tank is leaking/cracked
+ if(water_level > 0) //Tank has water, so it's actually leaking
+ if(leaking == 1) examine_message += "\The [src] is leaking."
+ if(leaking == 2) examine_message += "\The [src] is leaking profusely!"
+ else //No water, report the cracks instead
+ if(leaking == 1) examine_message += "\The [src] is cracked."
+ if(leaking == 2) examine_message += "\The [src] is nearly shattered!"
+
+
+ //Finally, report the full examine_message constructed from the above reports
+ usr << "[examine_message]"
+
+//////////////////////////////
+// ATACK PROCS //
+//////////////////////////////
+
+/obj/machinery/fishtank/attack_animal(mob/living/simple_animal/M as mob)
+ if(istype(M, /mob/living/simple_animal/pet/cat))
+ if(M.a_intent == "help") //Cats can try to fish in open tanks on help intent
+ if(lid_switch) //Can't fish in a closed tank. Fishbowls are ALWAYS open.
+ M.visible_message("[M.name] stares at into \the [src] while sitting perfectly still.", "The lid is closed, so you stare into \the [src] intently.")
+ else
+ if(fish_count) //Tank must actually have fish to try catching one
+ M.visible_message("[M.name] leaps up onto \the[src] and attempts to fish through the opening!", "You jump up onto \the [src] and begin fishing through the opening!")
+ spawn(10)
+ if(water_level && prob(45)) //If there is water, there is a chance the cat will slip, Syndicat will spark like E-N when this happens
+ M.visible_message("[M.name] slipped and got soaked!", "You slipped and got soaked!")
+ if(istype(M, /mob/living/simple_animal/pet/cat/Syndi))
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ s.set_up(3, 1, src)
+ s.start()
+ else //No water or didn't slip, get that fish!
+ M.visible_message("[M.name] caught and devoured a live fish!", "You catch and devour a live fish, yum!")
+ kill_fish() //Kill a random fish
+ M.health = M.maxHealth //Eating fish heals the predator
+ else
+ usr << "There are no fish in [src]!"
+ else
+ attack_generic(M, M.harm_intent_damage)
+ else if(istype(M, /mob/living/simple_animal/hostile/bear))
+ if(M.a_intent == "help") //Bears can try to fish in open tanks on help intent
+ if(lid_switch) //Can't fish in a closed tank. Fishbowls are ALWAYS open.
+ M.visible_message("[M.name] scrapes it's claws along \the [src]'s lid.", "The lid is closed, so you scrape your claws against \the [src]'s lid.")
+ else
+ if(fish_count) //Tank must actually have fish to try catching one
+ M.visible_message("[M.name] reaches into \the[src] and attempts to fish through the opening!", "You reach into \the [src] and begin fishing through the opening!")
+ spawn(5)
+ if(water_level && prob(5)) //Bears are good at catching fish, only a 5% chance to fail
+ M.visible_message("[M.name] swipes at the water!", "You just barely missed that fish!")
+ else //No water or didn't slip, get that fish!
+ M.visible_message("[M.name] caught and devoured a live fish!", "You catch and devour a live fish, yum!")
+ kill_fish() //Kill a random fish
+ M.health = M.maxHealth //Eating fish heals the predator
+ else
+ usr << "There are no fish in [src]!"
+ else
+ attack_generic(M, M.harm_intent_damage)
+ else
+ if(M.melee_damage_upper > 0) //If the simple_animal has a melee_damage_upper defined, use that for the damage
+ attack_generic(M, M.melee_damage_upper)
+ else if(M.a_intent == "harm") //Let any simple_animal try to break tanks when on harm intent
+ if(M.harm_intent_damage <= 0) return //If it doesn't do damage, don't bother with the attack
+ attack_generic(M, M.harm_intent_damage)
+ check_health()
+
+/obj/machinery/fishtank/attack_alien(mob/living/user as mob)
+ if(islarva(user)) return
+ attack_generic(user, 15)
+
+/obj/machinery/fishtank/attack_slime(mob/living/user as mob)
+ var/mob/living/carbon/slime/S = user
+ if (!S.is_adult)
+ return
+ attack_generic(user, rand(10, 15))
+
+/obj/machinery/fishtank/attack_hand(mob/user as mob)
+ if(HULK in user.mutations)
+ user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!"))
+ user.visible_message("[user] smashes through [src]!")
+ destroy()
+ else if (usr.a_intent == "harm")
+ user.changeNext_move(CLICK_CD_MELEE)
+ playsound(get_turf(src), 'sound/effects/glassknock.ogg', 80, 1)
+ usr.visible_message("\red [usr.name] bangs against the [src.name]!", \
+ "\red You bang against the [src.name]!", \
+ "You hear a banging sound.")
+ else
+ user.changeNext_move(CLICK_CD_MELEE)
+ playsound(src.loc, 'sound/effects/glassknock.ogg', 80, 1)
+ usr.visible_message("[usr.name] taps on the [src.name].", \
+ "You tap on the [src.name].", \
+ "You hear a knocking sound.")
+ return
+
+/obj/machinery/fishtank/proc/hit(var/damage, var/sound_effect = 1)
+ cur_health = max(0, cur_health - damage)
+ if(sound_effect)
+ playsound(loc, 'sound/effects/Glasshit.ogg', 75, 1)
+ check_health()
+
+/obj/machinery/fishtank/proc/attack_generic(mob/living/user as mob, damage = 0) //used by attack_alien, attack_animal, and attack_slime
+ user.changeNext_move(CLICK_CD_MELEE)
+ user.do_attack_animation(src)
+ cur_health -= damage
+ if(cur_health <= 0)
+ user.visible_message("[user] smashes through \the [src]!")
+ destroy()
+ else //for nicer text~
+ user.visible_message("[user] smashes into \the [src]!")
+ playsound(loc, 'sound/effects/Glasshit.ogg', 100, 1)
+ check_health()
+
+/obj/machinery/fishtank/attackby(var/obj/item/O, var/mob/user as mob)
+ //Welders repair damaged tanks on help intent, damage on all others
+ if(istype(O, /obj/item/weapon/weldingtool))
+ var/obj/item/weapon/weldingtool/W = O
+ if(user.a_intent == "help")
+ if(W.isOn())
+ if(cur_health < max_health)
+ usr << "You repair some of the cracks on \the [src]."
+ cur_health += 20
+ check_health()
+ else
+ usr << "There is no damage to fix!"
+ else
+ if(cur_health < max_health)
+ usr << "[W.name] must on to repair this damage."
+ else
+ user.changeNext_move(CLICK_CD_MELEE)
+ hit(W.force)
+ return
+ //Open reagent containers add and remove water
+ if(O.is_open_container())
+ if(istype(O, /obj/item/weapon/reagent_containers/glass))
+ if(lid_switch)
+ usr << "Open the lid on [src] first!"
+ return
+ var/obj/item/weapon/reagent_containers/glass/C = O
+ //Containers with any reagents will get dumped in
+ if(C.reagents.total_volume)
+ var/water_value = 0
+ water_value += C.reagents.get_reagent_amount("water") //Water is full value
+ water_value += C.reagents.get_reagent_amount("holywater") //Holywater is full value
+ water_value += C.reagents.get_reagent_amount("tonic") * 0.25 //Tonic water is 25% value
+ water_value += C.reagents.get_reagent_amount("sodawater") * 0.50 //Sodawater is 50% value
+ water_value += C.reagents.get_reagent_amount("fishwater") * 0.75 //Fishwater is 75% value, to account for the fish poo
+ water_value += C.reagents.get_reagent_amount("ice") * 0.80 //Ice is 80% value
+ var/message = ""
+ if(!water_value) //The container has no water value, clear everything in it
+ message = "The filtration process removes everything, leaving the water level unchanged."
+ C.reagents.clear_reagents()
+ else
+ if(water_level == water_capacity)
+ usr << "[src] is already full!"
+ return
+ else
+ message = "The filtration process purifies the water, raising the water level."
+ water_level += water_value
+ if(water_level == water_capacity)
+ message += " You filled \the [src] to the brim!"
+ if(water_level > water_capacity)
+ message += " You overfilled \the [src] and some water runs down the side, wasted."
+ C.reagents.clear_reagents()
+ check_water_level()
+ user.visible_message("[user.name] pours the contents of [C.name] into \the [src].", "[message]")
+ return
+ //Empty containers will scoop out water, filling the container as much as possible from the water_level
+ else
+ if(water_level == 0)
+ usr << "[src] is empty!"
+ else
+ if(water_level >= C.volume) //Enough to fill the container completely
+ C.reagents.add_reagent("fishwater", C.volume)
+ water_level -= C.volume
+ user.visible_message("[user.name] scoops out some water from \the [src].", "You completely fill [C.name] from \the [src].")
+ else //Fill the container as much as possible with the water_level
+ C.reagents.add_reagent("fishwater", water_level)
+ water_level = 0
+ user.visible_message("[user.name] scoops out some water from \the [src].", "You fill [C.name] with the last of the water in \the [src].")
+ check_water_level()
+ return
+ //Wrenches can deconstruct empty tanks, but not tanks with any water. Kills any fish left inside and destroys any unharvested eggs in the process
+ if(istype(O, /obj/item/weapon/wrench))
+ if(water_level == 0)
+ usr << "\blue Now disassembling [src]"
+ playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
+ if(do_after(user,50))
+ destroy(1)
+ else
+ usr << "[src] must be empty before you disassemble it!"
+ return
+ //Fish eggs
+ else if(istype(O, /obj/item/fish_eggs))
+ var/obj/item/fish_eggs/egg = O
+ //Don't add eggs if there is no water (they kinda need that to live)
+ if(water_level == 0)
+ usr << "[src] has no water; [egg.name] won't hatch without water!"
+ else
+ //Don't add eggs if the tank already has the max number of fish
+ if(fish_count >= max_fish)
+ usr << "[src] can't hold any more fish."
+ else
+ add_fish(egg.fish_type)
+ qdel(egg)
+ return
+ //Fish food
+ else if(istype(O, /obj/item/weapon/fishfood))
+ //Only add food if there is water and it isn't already full of food
+ if(water_level)
+ if(food_level < 10)
+ if(fish_count == 0)
+ user.visible_message("[user.name] shakes some fish food into the empty [src]... How sad.", "You shake some fish food into the empty [src]... If only it had fish.")
+ else
+ user.visible_message("[user.name] feeds the fish in \the [src]. The fish look excited!", "You feed the fish in \the [src]. They look excited!")
+ food_level += 10
+ else
+ usr << "[src] already has plenty of food in it. You decide to not add more."
+ else
+ usr << "[src] doesn't have any water in it. You should fill it with water first."
+ check_food_level()
+ return
+ //Fish egg scoop
+ else if(istype(O, /obj/item/weapon/egg_scoop))
+ if(egg_count)
+ user.visible_message("[user.name] harvests some fish eggs from \the [src].", "You scoop the fish eggs out of \the [src].")
+ harvest_eggs(user)
+ else
+ user.visible_message("[user.name] fails to harvest any fish eggs from \the [src].", "There are no fish eggs in \the [src] to scoop out.")
+ return
+ //Fish net
+ if(istype(O, /obj/item/weapon/fish_net))
+ if(fish_count > 0)
+ var/caught_fish = pick(fish_list)
+ usr << "You catch and remove a [caught_fish] from \the [src]."
+ kill_fish(caught_fish)
+ //TODO: Fish object spawning, need to get sprites before I can code the fish objects
+ else
+ usr << "There are no fish in \the [src] to catch!"
+ return
+ //Tank brush
+ if(istype(O, /obj/item/weapon/tank_brush))
+ if(filth_level == 0)
+ usr << "[src] is already spotless!"
+ else
+ filth_level = 0
+ user.visible_message("[user.name] scrubs the inside of \the [src], cleaning the filth.", "You scrub the inside of \the [src], cleaning the filth.")
+ else if(O && O.force)
+ user.visible_message("\The [src] has been attacked by [user.name] with \the [O]!")
+ hit(O.force)
+ return
diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm
index da6cf21d909..b142a1fa9b1 100644
--- a/code/modules/hydroponics/trays/tray.dm
+++ b/code/modules/hydroponics/trays/tray.dm
@@ -71,7 +71,8 @@
"adminordrazine" = 1,
"eznutrient" = 1,
"robustharvest" = 1,
- "left4zed" = 1
+ "left4zed" = 1,
+ "fishwater" = 0.75,
)
var/global/list/weedkiller_reagents = list(
"fluorine" = -4,
@@ -98,6 +99,7 @@
"phosphorus" = -0.5,
"water" = 1,
"sodawater" = 1,
+ "fishwater" = 1,
)
// Beneficial reagents also have values for modifying yield_mod and mut_mod (in that order).
diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm
index 61f1db03b17..ebb3a0d2dcf 100644
--- a/code/modules/reagents/Chemistry-Reagents.dm
+++ b/code/modules/reagents/Chemistry-Reagents.dm
@@ -205,6 +205,24 @@ datum
reagent_state = LIQUID
color = "#B97A57"
+ fishwater
+ name = "Fish Water"
+ id = "fishwater"
+ description = "Smelly water from a fish tank. Gross!"
+ reagent_state = LIQUID
+ color = "#757547"
+
+ on_mob_life(var/mob/living/M as mob)
+ if(!M) M = holder.my_atom
+ M << "Oh god, why did you drink that?"
+ if(prob(30)) // Nasty, you drank this stuff? 30% chance of the fakevomit (non-stunning version)
+ if(prob(50)) // 50/50 chance of green vomit vs normal vomit
+ M.fakevomit(1)
+ else
+ M.fakevomit(0)
+ ..()
+ return
+
water
name = "Water"
id = "water"
diff --git a/icons/obj/fish_items.dmi b/icons/obj/fish_items.dmi
new file mode 100644
index 00000000000..f21be0bb9e6
Binary files /dev/null and b/icons/obj/fish_items.dmi differ
diff --git a/icons/obj/toy.dmi b/icons/obj/toy.dmi
index 6eec85eca71..0bd2935fe91 100644
Binary files a/icons/obj/toy.dmi and b/icons/obj/toy.dmi differ
diff --git a/icons/obj/vending.dmi b/icons/obj/vending.dmi
index 3368ccb5331..718cdf5ebde 100755
Binary files a/icons/obj/vending.dmi and b/icons/obj/vending.dmi differ
diff --git a/icons/obj/vending_restock.dmi b/icons/obj/vending_restock.dmi
index aa9f2873f02..548f5ce5869 100644
Binary files a/icons/obj/vending_restock.dmi and b/icons/obj/vending_restock.dmi differ
diff --git a/paradise.dme b/paradise.dme
index 2d679fe3a4f..0f0555938f0 100644
--- a/paradise.dme
+++ b/paradise.dme
@@ -1118,6 +1118,9 @@
#include "code\modules\events\tgevents\vent_clog.dm"
#include "code\modules\ext_scripts\irc.dm"
#include "code\modules\ext_scripts\python.dm"
+#include "code\modules\fish\fish_eggs.dm"
+#include "code\modules\fish\fish_items.dm"
+#include "code\modules\fish\fishtank.dm"
#include "code\modules\flufftext\Dreaming.dm"
#include "code\modules\flufftext\Hallucination.dm"
#include "code\modules\flufftext\TextFilters.dm"