From 19efa2ae5b16f512059c7c5da947fc98ca816cad Mon Sep 17 00:00:00 2001 From: Leshana Date: Wed, 15 Feb 2017 21:04:53 -0500 Subject: [PATCH 01/74] Jukeboxes are coded to have hackable wires, but don't respond to wirecutters or multitools. Fix that. --- code/game/machinery/jukebox.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/game/machinery/jukebox.dm b/code/game/machinery/jukebox.dm index cd2346a32c..6fb8f90a41 100644 --- a/code/game/machinery/jukebox.dm +++ b/code/game/machinery/jukebox.dm @@ -78,6 +78,10 @@ datum/track/New(var/title_name, var/audio) return if(default_deconstruction_crowbar(user, W)) return + if(istype(W, /obj/item/weapon/wirecutters)) + return wires.Interact(user) + if(istype(W, /obj/item/device/multitool)) + return wires.Interact(user) if(istype(W, /obj/item/weapon/wrench)) if(playing) StopPlaying() From dad4e19785c9b74bfdd16e5c93989b728048fd6b Mon Sep 17 00:00:00 2001 From: Yoshax Date: Sat, 18 Feb 2017 21:46:13 +0000 Subject: [PATCH 02/74] Does custom food stuff --- code/_helpers/icons_vr.dm | 45 +++ code/game/machinery/vending_vr.dm | 27 ++ .../food/z_custom_food_vr.dm | 279 ++++++++++++++++++ icons/obj/food_custom.dmi | Bin 6903 -> 23788 bytes vorestation.dme | 2 + 5 files changed, 353 insertions(+) create mode 100644 code/_helpers/icons_vr.dm create mode 100644 code/modules/reagents/reagent_containers/food/z_custom_food_vr.dm diff --git a/code/_helpers/icons_vr.dm b/code/_helpers/icons_vr.dm new file mode 100644 index 0000000000..be5de68e82 --- /dev/null +++ b/code/_helpers/icons_vr.dm @@ -0,0 +1,45 @@ +/proc/AverageColor(var/icon/I, var/accurate = 0, var/ignoreGreyscale = 0) +//Accurate: Use more accurate color averaging, usually has better results and prevents muddied or overly dark colors. Mad thanks to wwjnc. +//ignoreGreyscale: Excempts greyscale colors from the color list, useful for filtering outlines or plate overlays. + var/list/colors = ListColors(I, ignoreGreyscale) + if(!colors.len) + return null + + var/list/colorsum = list(0, 0, 0) //Holds the sum of the RGB values to calculate the average + var/list/RGB = list(0, 0, 0) //Temp list for each color + var/total = colors.len + + var/final_average + if (accurate) //keeping it legible + for(var/i = 1 to total) + RGB = ReadRGB(colors[i]) + colorsum[1] += RGB[1]*RGB[1] + colorsum[2] += RGB[2]*RGB[2] + colorsum[3] += RGB[3]*RGB[3] + final_average = rgb(sqrt(colorsum[1]/total), sqrt(colorsum[2]/total), sqrt(colorsum[3]/total)) + else + for(var/i = 1 to total) + RGB = ReadRGB(colors[i]) + colorsum[1] += RGB[1] + colorsum[2] += RGB[2] + colorsum[3] += RGB[3] + final_average = rgb(colorsum[1]/total, colorsum[2]/total, colorsum[3]/total) + return final_average + +/proc/ListColors(var/icon/I, var/ignoreGreyscale = 0) + var/list/colors = list() + for(var/x_pixel = 1 to I.Width()) + for(var/y_pixel = 1 to I.Height()) + var/this_color = I.GetPixel(x_pixel, y_pixel) + if(this_color) + if (ignoreGreyscale && ReadHSV(RGBtoHSV(this_color))[2] == 0) //If saturation is 0, must be greyscale + continue + colors.Add(this_color) + return colors + +/proc/empty_Y_space(var/icon/I) //Returns the amount of lines containing only transparent pixels in an icon, starting from the bottom + for(var/y_pixel = 1 to I.Height()) + for(var/x_pixel = 1 to I.Width()) + if (I.GetPixel(x_pixel, y_pixel)) + return y_pixel - 1 + return null \ No newline at end of file diff --git a/code/game/machinery/vending_vr.dm b/code/game/machinery/vending_vr.dm index 203e5c03a4..1b37f51685 100644 --- a/code/game/machinery/vending_vr.dm +++ b/code/game/machinery/vending_vr.dm @@ -21,6 +21,33 @@ /obj/item/device/flashlight/glowstick = 3, /obj/item/device/flashlight/glowstick/red = 3, /obj/item/device/flashlight/glowstick/blue = 3, /obj/item/device/flashlight/glowstick/orange =3, /obj/item/device/flashlight/glowstick/yellow = 3, /obj/item/weapon/reagent_containers/spray/windowsealant = 5) +/obj/machinery/vending/dinnerware + name = "Dinnerware" + desc = "A kitchen and restaurant equipment vendor." + product_ads = "Mm, food stuffs!;Food and food accessories.;Get your plates!;You like forks?;I like forks.;Woo, utensils.;You don't really need these..." + icon_state = "dinnerware" + products = list( + /obj/item/weapon/tray = 8, + /obj/item/weapon/material/kitchen/utensil/fork = 6, + /obj/item/weapon/material/kitchen/utensil/knife = 6, + /obj/item/weapon/material/kitchen/utensil/spoon = 6, + /obj/item/weapon/material/knife = 3, + /obj/item/weapon/material/kitchen/rollingpin = 2, + /obj/item/weapon/reagent_containers/food/drinks/glass2/square = 8, + /obj/item/weapon/reagent_containers/food/drinks/glass2/shake = 8, + /obj/item/weapon/glass_extra/stick = 15, + /obj/item/weapon/glass_extra/straw = 15, + /obj/item/clothing/suit/chef/classic = 2, + /obj/item/weapon/storage/toolbox/lunchbox = 3, + /obj/item/weapon/storage/toolbox/lunchbox/heart = 3, + /obj/item/weapon/storage/toolbox/lunchbox/cat = 3, + /obj/item/weapon/storage/toolbox/lunchbox/nt = 3, + /obj/item/weapon/storage/toolbox/lunchbox/mars = 3, + /obj/item/weapon/storage/toolbox/lunchbox/cti = 3, + /obj/item/weapon/storage/toolbox/lunchbox/nymph = 3, + /obj/item/weapon/storage/toolbox/lunchbox/syndicate = 3, + /obj/item/trash/bowl = 30) + contraband = list(/obj/item/weapon/material/knife/butch = 2) /* var/list/log = list() var/req_log_access = access_armory diff --git a/code/modules/reagents/reagent_containers/food/z_custom_food_vr.dm b/code/modules/reagents/reagent_containers/food/z_custom_food_vr.dm new file mode 100644 index 0000000000..eeeb9896ef --- /dev/null +++ b/code/modules/reagents/reagent_containers/food/z_custom_food_vr.dm @@ -0,0 +1,279 @@ +// Customizable Foods ////////////////////////////////////////// +var/global/deepFriedEverything = 0 +var/global/deepFriedNutriment = 0 +var/global/foodNesting = 0 +var/global/recursiveFood = 0 +var/global/ingredientLimit = 20 + + +/obj/item/weapon/reagent_containers/food/snacks/customizable + icon = 'icons/obj/food_custom.dmi' + trash = /obj/item/trash/plate + bitesize = 2 + + var/ingMax = 100 + var/list/ingredients = list() + var/stackIngredients = 0 + var/fullyCustom = 0 + var/addTop = 0 + var/image/topping + var/image/filling + +/obj/item/weapon/reagent_containers/food/snacks/customizable/New(loc,ingredient) + . = ..() + topping = image(icon,,"[initial(icon_state)]_top") + filling = image(icon,,"[initial(icon_state)]_filling") + src.reagents.add_reagent("nutriment",3) + src.updateName() + return + +/obj/item/weapon/reagent_containers/food/snacks/customizable/attackby(obj/item/I, mob/user) + if(istype(I,/obj/item/weapon/reagent_containers/food/snacks)) + if((contents.len >= ingMax) || (contents.len >= ingredientLimit)) + to_chat(user, "That's already looking pretty stuffed.") + return + + var/obj/item/weapon/reagent_containers/food/snacks/S = I + if(istype(S,/obj/item/weapon/reagent_containers/food/snacks/customizable)) + var/obj/item/weapon/reagent_containers/food/snacks/customizable/SC = S + if(fullyCustom && SC.fullyCustom) + to_chat(user, "You slap yourself on the back of the head for thinking that stacking plates is an interesting dish.") + return + if(!recursiveFood && istype(I, /obj/item/weapon/reagent_containers/food/snacks/customizable)) + //to_chat(user, "[pick("As uniquely original as that idea is, you can't figure out how to perform it.","That would be a straining topological exercise.","This world just isn't ready for your cooking genius.","It's possible that you may have a problem.","It won't fit.","You don't think that would taste very good.","Quit goofin' around.")]") + to_chat(user, "As uniquely original as that idea is, you can't figure out how to perform it.") + return + /*if(!user.drop_item()) + user << "\The [I] is stuck to your hands!" + return*/ + user.drop_item() + I.forceMove(src) + + S.reagents.trans_to(src,S.reagents.total_volume) + ingredients += S + + if(src.addTop) + overlays -= topping //thank you Comic + if(!fullyCustom && !stackIngredients && overlays.len) + overlays -= filling //we can't directly modify the overlay, so we have to remove it and then add it again + var/newcolor = S.filling_color != "#FFFFFF" ? S.filling_color : AverageColor(getFlatIcon(S, S.dir, 0), 1, 1) + filling.color = BlendRGB(filling.color, newcolor, 1/ingredients.len) + overlays += filling + else + overlays += generateFilling(S) + if(addTop) + drawTopping() + + updateName() + to_chat(user, "You add the [I.name] to the [src.name].") + else + . = ..() + return + +/obj/item/weapon/reagent_containers/food/snacks/customizable/proc/generateFilling(var/obj/item/weapon/reagent_containers/food/snacks/S, params) + var/image/I + if(fullyCustom) + var/icon/C = getFlatIcon(S, S.dir, 0) + I = image(C) + I.pixel_y = 12 * empty_Y_space(C) + else + I = filling + if(istype(S) && S.filling_color != "#FFFFFF") + I.color = S.filling_color + else + I.color = AverageColor(getFlatIcon(S, S.dir, 0), 1, 1) + if(src.stackIngredients) + I.pixel_y = src.ingredients.len * 2 + else + src.overlays.len = 0 + if(src.fullyCustom || src.stackIngredients) + var/clicked_x = text2num(params2list(params)["icon-x"]) + if (isnull(clicked_x)) + I.pixel_x = 0 + else if (clicked_x < 9) + I.pixel_x = -2 //this looks pretty shitty + else if (clicked_x < 14) + I.pixel_x = -1 //but hey + else if (clicked_x < 19) + I.pixel_x = 0 //it works + else if (clicked_x < 25) + I.pixel_x = 1 + else + I.pixel_x = 2 + return I + +/obj/item/weapon/reagent_containers/food/snacks/customizable/proc/updateName() + var/i = 1 + var/new_name + for(var/obj/item/S in ingredients) + if(i == 1) + new_name += "[S.name]" + else if(i == src.ingredients.len) + new_name += " and [S.name]" + else + new_name += ", [S.name]" + i++ + new_name = "[new_name] [initial(name)]" + if(length(new_name) >= 150) + name = "something yummy" + else + name = new_name + return new_name + +/obj/item/weapon/reagent_containers/food/snacks/customizable/Destroy() + for(. in ingredients) qdel(.) + return ..() + +/obj/item/weapon/reagent_containers/food/snacks/customizable/proc/drawTopping() + var/image/I = topping + I.pixel_y = (ingredients.len+1)*2 + overlays += I + + +// Sandwiches ////////////////////////////////////////////////// + +/obj/item/weapon/reagent_containers/food/snacks/customizable/sandwich + name = "sandwich" + desc = "A timeless classic." + icon_state = "c_sandwich" + stackIngredients = 1 + addTop = 0 + +/obj/item/weapon/reagent_containers/food/snacks/customizable/sandwich/attackby(obj/item/I,mob/user) + if(istype(I,/obj/item/weapon/reagent_containers/food/snacks/breadslice) && !addTop) + I.reagents.trans_to(src,I.reagents.total_volume) + qdel(I) + addTop = 1 + src.drawTopping() + else + ..() + +/obj/item/weapon/reagent_containers/food/snacks/customizable/burger + name = "burger" + desc = "The apex of space culinary achievement." + icon_state = "c_burger" + stackIngredients = 1 + addTop = 1 + +// Misc Subtypes /////////////////////////////////////////////// + +/obj/item/weapon/reagent_containers/food/snacks/customizable/fullycustom + name = "on a plate" + desc = "A unique dish." + icon_state = "fullycustom" + fullyCustom = 1 //how the fuck do you forget to add this? + ingMax = 1 + +/obj/item/weapon/reagent_containers/food/snacks/customizable/soup + name = "soup" + desc = "A bowl with liquid and... stuff in it." + icon_state = "soup" + trash = /obj/item/trash/bowl + +/obj/item/weapon/reagent_containers/food/snacks/customizable/pizza + name = "pan pizza" + desc = "A personalized pan pizza meant for only one person." + icon_state = "personal_pizza" + +/obj/item/weapon/reagent_containers/food/snacks/customizable/pasta + name = "spaghetti" + desc = "Noodles. With stuff. Delicious." + icon_state = "pasta_bot" + +// Various Snacks ////////////////////////////////////////////// + +/obj/item/weapon/reagent_containers/food/snacks/breadslice/attackby(obj/item/I,mob/user,params) + if(istype(I,/obj/item/weapon/reagent_containers/food/snacks)) + if(!recursiveFood && istype(I, /obj/item/weapon/reagent_containers/food/snacks/customizable)) + to_chat(user, "Sorry, no recursive food.") + return + var/obj/F = new/obj/item/weapon/reagent_containers/food/snacks/customizable/sandwich(get_turf(src),I) //boy ain't this a mouthful + F.attackby(I, user) + qdel(src) + else + return ..() + +/obj/item/weapon/reagent_containers/food/snacks/bun/attackby(obj/item/I, mob/user) + // Bun + meatball = burger + if(istype(I,/obj/item/weapon/reagent_containers/food/snacks/meatball)) + new /obj/item/weapon/reagent_containers/food/snacks/monkeyburger(src) + to_chat(user, "You make a burger.") + qdel(I) + qdel(src) + + // Bun + cutlet = hamburger + else if(istype(I, /obj/item/weapon/reagent_containers/food/snacks/cutlet)) + new /obj/item/weapon/reagent_containers/food/snacks/monkeyburger(src) + to_chat(user, "You make a burger.") + qdel(I) + qdel(src) + + // Bun + sausage = hotdog + else if(istype(I, /obj/item/weapon/reagent_containers/food/snacks/sausage)) + new /obj/item/weapon/reagent_containers/food/snacks/hotdog(src) + to_chat(user, "You make a hotdog.") + qdel(I) + qdel(src) + + if(istype(I,/obj/item/weapon/reagent_containers/food/snacks)) + if(!recursiveFood && istype(I, /obj/item/weapon/reagent_containers/food/snacks/customizable)) + to_chat(user, "Sorry, no recursive food.") + return + var/obj/F = new/obj/item/weapon/reagent_containers/food/snacks/customizable/burger(get_turf(src),I) + F.attackby(I, user) + qdel(src) + else + return ..() + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough/attackby(obj/item/I, mob/user) + if(istype(I, /obj/item/weapon/reagent_containers/food/snacks)) + if(!recursiveFood && istype(I, /obj/item/weapon/reagent_containers/food/snacks/customizable)) + to_chat(user, "Sorry, no recursive food.") + return + var/obj/F = new/obj/item/weapon/reagent_containers/food/snacks/customizable/pizza(get_turf(src),I) + F.attackby(I, user) + qdel(src) + else + return ..() + +/obj/item/weapon/reagent_containers/food/snacks/spagetti/attackby(obj/item/I, mob/user) + if(istype(I, /obj/item/weapon/reagent_containers/food/snacks)) + if(!recursiveFood && istype(I, /obj/item/weapon/reagent_containers/food/snacks/customizable)) + to_chat(user, "Sorry, no recursive food.") + return + var/obj/F = new/obj/item/weapon/reagent_containers/food/snacks/customizable/pasta(get_turf(src),I) + F.attackby(I, user) + qdel(src) + else + return ..() + +// Custom Meals //////////////////////////////////////////////// +/* +/obj/item/trash/plate/attackby(obj/item/I, mob/user) + if(istype(I,/obj/item/weapon/reagent_containers/food/snacks)) + if(istype(I,/obj/item/weapon/reagent_containers/food/snacks/customizable/fullycustom)) //no platestacking even with recursive food, for now + to_chat(user, "That's already got a plate!") + return + var/obj/F = new/obj/item/weapon/reagent_containers/food/snacks/customizable/fullycustom(get_turf(src),I) + F.attackby(I, user) + qdel(src) + else + return ..() +*/ + +/obj/item/trash/bowl + name = "bowl" + desc = "An empty bowl. Put some food in it to start making a soup." + icon = 'icons/obj/food_custom.dmi' + icon_state = "soup" + +/obj/item/trash/bowl/attackby(obj/item/I, mob/user) + if(istype(I,/obj/item/weapon/reagent_containers/food/snacks)) + if(!recursiveFood && istype(I, /obj/item/weapon/reagent_containers/food/snacks/customizable)) + to_chat(user, "Sorry, no recursive food.") + return + var/obj/F = new/obj/item/weapon/reagent_containers/food/snacks/customizable/soup(get_turf(src),I) + F.attackby(I, user) + qdel(src) + else + return ..() diff --git a/icons/obj/food_custom.dmi b/icons/obj/food_custom.dmi index 39491d65f5eb8b4b78a3b4ccf0e7af5dc6dbbb56..4057be39939f87adbe1613ad7b15805b5d9de540 100644 GIT binary patch literal 23788 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 XBq`8URF4>ZlLe?LX)At~w~Y8digFWt diff --git a/vorestation.dme b/vorestation.dme index 138eaa6bc7..9042c3c292 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -57,6 +57,7 @@ #include "code\_helpers\global_lists.dm" #include "code\_helpers\global_lists_vr.dm" #include "code\_helpers\icons.dm" +#include "code\_helpers\icons_vr.dm" #include "code\_helpers\lists.dm" #include "code\_helpers\logging.dm" #include "code\_helpers\maths.dm" @@ -2067,6 +2068,7 @@ #include "code\modules\reagents\reagent_containers\food\lunch.dm" #include "code\modules\reagents\reagent_containers\food\sandwich.dm" #include "code\modules\reagents\reagent_containers\food\snacks.dm" +#include "code\modules\reagents\reagent_containers\food\z_custom_food_vr.dm" #include "code\modules\reagents\reagent_containers\food\drinks\bottle.dm" #include "code\modules\reagents\reagent_containers\food\drinks\cup.dm" #include "code\modules\reagents\reagent_containers\food\drinks\jar.dm" From 74018ebd34cebde075ddfa043f3c5c047d417bb6 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Sun, 19 Feb 2017 00:01:14 -0500 Subject: [PATCH 03/74] Basically replaced biological cloning so far --- code/game/area/Space Station 13 areas_vr.dm | 6 +- .../client/preference_setup/vore/02_size.dm | 3 + code/modules/resleeving/computers.dm | 259 ++++++++++++++++++ code/modules/resleeving/consoles.dm | 9 + code/modules/resleeving/general.dm | 53 ++++ code/modules/resleeving/infocore.dm | 147 ++++++++++ code/modules/resleeving/machines.dm | 238 ++++++++++++++++ maps/virgo-1.dmm | 255 +++++++++-------- nano/templates/sleever.tmpl | 112 ++++++++ vorestation.dme | 5 + 10 files changed, 956 insertions(+), 131 deletions(-) create mode 100644 code/modules/resleeving/computers.dm create mode 100644 code/modules/resleeving/consoles.dm create mode 100644 code/modules/resleeving/general.dm create mode 100644 code/modules/resleeving/infocore.dm create mode 100644 code/modules/resleeving/machines.dm create mode 100644 nano/templates/sleever.tmpl diff --git a/code/game/area/Space Station 13 areas_vr.dm b/code/game/area/Space Station 13 areas_vr.dm index f210187668..0e639737ae 100644 --- a/code/game/area/Space Station 13 areas_vr.dm +++ b/code/game/area/Space Station 13 areas_vr.dm @@ -107,4 +107,8 @@ /area/asteroid/rogue/zone4 name = "Asteroid Belt Zone 4" icon_state = "red2" - shuttle_area = /area/shuttle/belter/belt/zone4 \ No newline at end of file + shuttle_area = /area/shuttle/belter/belt/zone4 + +/area/medical/resleeving + name = "Resleeving Lab" + icon_state = "genetics" \ No newline at end of file diff --git a/code/modules/client/preference_setup/vore/02_size.dm b/code/modules/client/preference_setup/vore/02_size.dm index ca6b87c5fc..99acc59192 100644 --- a/code/modules/client/preference_setup/vore/02_size.dm +++ b/code/modules/client/preference_setup/vore/02_size.dm @@ -42,6 +42,9 @@ character.weight = pref.weight_vr character.weight_gain = pref.weight_gain character.weight_loss = pref.weight_loss + spawn(50) + if(character && !istype(character,/mob/living/carbon/human/dummy)) + new/datum/transhuman/body_record/(character,1) //Clearly related to size. /datum/category_item/player_setup_item/vore/size/content(var/mob/user) . += "
" diff --git a/code/modules/resleeving/computers.dm b/code/modules/resleeving/computers.dm new file mode 100644 index 0000000000..a06b306e41 --- /dev/null +++ b/code/modules/resleeving/computers.dm @@ -0,0 +1,259 @@ +/obj/machinery/computer/transhuman/resleeving + name = "resleeving control console" + icon = 'icons/obj/computer.dmi' + icon_keyboard = "med_key" + icon_screen = "dna" + light_color = "#315ab4" + circuit = /obj/item/weapon/circuitboard/cloning + req_access = list(access_heads) //Only used for record deletion right now. + var/list/pods = list() //Linked grower pods. + var/list/sleevers = list() //Linked resleeving booths. + var/temp = "" + var/menu = 1 //Which menu screen to display + var/datum/transhuman/body_record/active_br = null + var/datum/transhuman/mind_record/active_mr = null + var/datum/transhuman/infocore/TC //Easy debugging access + var/organic_capable = 1 + var/synthetic_capable = 0 + +/obj/machinery/computer/transhuman/resleeving/initialize() + ..() + updatemodules() + TC = transcore + +/obj/machinery/computer/transhuman/resleeving/Destroy() + releasepods() + ..() + +/obj/machinery/computer/transhuman/resleeving/proc/updatemodules() + releasepods() + findpods() + +/obj/machinery/computer/transhuman/resleeving/proc/releasepods() + for(var/obj/machinery/clonepod/transhuman/P in pods) + P.connected = null + P.name = initial(P.name) + pods.Cut() + for(var/obj/machinery/transhuman/resleever/P in sleevers) + P.connected = null + P.name = initial(P.name) + sleevers.Cut() + +/obj/machinery/computer/transhuman/resleeving/proc/findpods() + var/num = 1 + var/area/A = get_area(src) + for(var/obj/machinery/clonepod/transhuman/P in A.get_contents()) + if(!P.connected) + pods += P + P.connected = src + P.name = "[initial(P.name)] #[num++]" + for(var/obj/machinery/transhuman/resleever/P in A.get_contents()) + if(!P.connected) + sleevers += P + P.connected = src + P.name = "[initial(P.name)] #[num++]" + +/obj/machinery/computer/transhuman/resleeving/attackby(obj/item/W as obj, mob/user as mob) + if(istype(W, /obj/item/device/multitool)) + var/obj/item/device/multitool/M = W + var/obj/machinery/clonepod/transhuman/P = M.connecting + if(P && !(P in pods)) + pods += P + P.connected = src + P.name = "[initial(P.name)] #[pods.len]" + user << "You connect [P] to [src]." + else + ..() + return + +/obj/machinery/computer/transhuman/resleeving/attack_ai(mob/user as mob) + return attack_hand(user) + +/obj/machinery/computer/transhuman/resleeving/attack_hand(mob/user as mob) + user.set_machine(src) + add_fingerprint(user) + + if(stat & (BROKEN|NOPOWER)) + return + + updatemodules() + + ui_interact(user) + +/obj/machinery/computer/transhuman/resleeving/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + user.set_machine(src) + + var/data[0] + + var/bodyrecords_list_ui[0] + for(var/N in TC.body_scans) + var/datum/transhuman/body_record/BR = TC.body_scans[N] + bodyrecords_list_ui[++bodyrecords_list_ui.len] = list("name" = N, "recref" = "\ref[BR]") + + var/mindrecords_list_ui[0] + for(var/N in TC.backed_up) + var/datum/transhuman/mind_record/MR = TC.backed_up[N] + mindrecords_list_ui[++mindrecords_list_ui.len] = list("name" = N, "recref" = "\ref[MR]") + + var/pods_list_ui[0] + for(var/obj/machinery/clonepod/transhuman/pod in pods) + pods_list_ui[++pods_list_ui.len] = list("pod" = pod, "biomass" = pod.biomass) + + var/sleevers_list_ui[0] + for(var/obj/machinery/transhuman/resleever/resleever in sleevers) + sleevers_list_ui[++sleevers_list_ui.len] = list("sleever" = resleever, "occupant" = resleever.occupant ? resleever.occupant.real_name : "None") + + if(pods) + data["pods"] = pods_list_ui + else + data["pods"] = null + + if(sleevers) + data["sleevers"] = sleevers_list_ui + else + data["pods"] = null + + if(bodyrecords_list_ui.len) + data["bodyrecords"] = bodyrecords_list_ui + else + data["bodyrecords"] = null + + if(mindrecords_list_ui.len) + data["mindrecords"] = mindrecords_list_ui + else + data["mindrecords"] = null + + + if(active_br) + var/can_grow_active = 1 + if(!synthetic_capable && active_br.synthetic) //Disqualified due to being synthetic in an organic pod. + can_grow_active = 0 + else if(!organic_capable && !active_br.synthetic) //Disqualified for the opposite. + can_grow_active = 0 + else if(!synthetic_capable && !organic_capable) //What have you done?? + can_grow_active = 0 + else if(!pods.len) + can_grow_active = 0 + + data["activeBodyRecord"] = list("real_name" = active_br.mydna.name, \ + "speciesname" = active_br.speciesname, \ + "gender" = active_br.bodygender, \ + "synthetic" = active_br.synthetic ? "Yes" : "No", \ + "cando" = can_grow_active) + else + data["activeRecord"] = null + + if(active_mr) + var/can_sleeve_current = 1 + if(!sleevers.len) + can_sleeve_current = 0 + data["activeMindRecord"] = list("charname" = active_mr.charname, \ + "obviously_dead" = active_mr.obviously_dead ? "Past-due" : "Current", \ + "cando" = can_sleeve_current) + else + data["activeMindRecord"] = null + + + data["menu"] = menu + data["podsLen"] = pods.len + data["sleeversLen"] = sleevers.len + data["temp"] = temp + + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + if (!ui) + ui = new(user, src, ui_key, "sleever.tmpl", src.name, 400, 450) + ui.set_initial_data(data) + ui.open() + ui.set_auto_update(5) + +/obj/machinery/computer/transhuman/resleeving/Topic(href, href_list) + if(..()) + return 1 + + else if (href_list["view_brec"]) + active_br = locate(href_list["view_brec"]) + if(active_br && istype(active_br.mydna)) + menu = 4 + else + active_br = null + temp = "ERROR: Record missing." + + else if (href_list["view_mrec"]) + active_mr = locate(href_list["view_mrec"]) + if(active_mr && istype(active_mr)) + menu = 5 + else + active_mr = null + temp = "ERROR: Record missing." + + else if (href_list["refresh"]) + updateUsrDialog() + + else if (href_list["grow"]) + if(istype(active_br)) + if(!pods.len) + temp = "Error: No growpods detected." + else + var/obj/machinery/clonepod/transhuman/pod = pods[1] + if (pods.len > 1) + pod = input(usr,"Select a growing pod to use", "Pod selection") as anything in pods + if(pod.occupant) + temp = "Error: Growpod is currently occupied." + else if(pod.biomass < CLONE_BIOMASS) + temp = "Error: Not enough biomass." + else if(pod.mess) + temp = "Error: Growpod malfunction." + else if(!config.revival_cloning) + temp = "Error: Unable to initiate growing cycle." + else if(pod.growclone(active_br.mydna)) + temp = "Initiating growing cycle..." + menu = 1 + else + temp = "Initiating growing cycle...
Error: Post-initialisation failed. Growing cycle aborted." + else + temp = "Error: Data corruption." + + else if (href_list["sleeve"]) + if(istype(active_mr)) + if(!sleevers.len) + temp = "Error: No sleevers detected." + else + var/obj/machinery/transhuman/resleever/sleever = sleevers[1] + if (sleevers.len > 1) + sleever = input(usr,"Select a resleeving pod to use", "Resleever selection") as anything in sleevers + + //No body to sleeve into. + if(!sleever.occupant) + temp = "Error: Resleeving pod is not occupied." + + //Body to sleeve into, but mind is in another living body. + else if(active_mr.mind.current && active_mr.mind.current.stat != DEAD) //Mind is in a body already that's alive + var/answer = alert(active_mr.mind.current,"Someone is attempting to restore a CURRENT backup of your mind into another body. Do you want to move to that body? You should suffer no memory loss.","Resleeving","Yes","No") + + //They declined to be moved. + if(answer == "No") + temp = "Initiating resleeving...
Error: Post-initialisation failed. Resleeving cycle aborted." + menu = 1 + + //They approved being moved. + else + sleever.putmind(active_mr) + temp = "Initiating current backup & resleeving..." + menu = 1 + + //They were dead, or otherwise available. + else + sleever.putmind(active_mr) + temp = "Initiating resleeving..." + menu = 1 + + //IDK but it broke somehow. + else + temp = "Error: Data corruption." + + else if (href_list["menu"]) + menu = href_list["menu"] + temp = "" + + nanomanager.update_uis(src) + add_fingerprint(usr) diff --git a/code/modules/resleeving/consoles.dm b/code/modules/resleeving/consoles.dm new file mode 100644 index 0000000000..cc90ccf063 --- /dev/null +++ b/code/modules/resleeving/consoles.dm @@ -0,0 +1,9 @@ +//////////////////////////////// +//// Consoles for resleeving tech +//// for printing bodies and 'decanting' +//////////////////////////////// + +//TODO Tweaked cloning console +//TODO Subtype for synths + +//TODO Mind-backup management console \ No newline at end of file diff --git a/code/modules/resleeving/general.dm b/code/modules/resleeving/general.dm new file mode 100644 index 0000000000..73a86a1a63 --- /dev/null +++ b/code/modules/resleeving/general.dm @@ -0,0 +1,53 @@ +//////////////////////////////// +//// General resleeving stuff common to +//// robotics and medical both +//////////////////////////////// + +//The backup implant itself +/obj/item/weapon/implant/backup + name = "backup implant" + desc = "Do you wanna live forever?" + var/datum/transhuman/mind_record/my_record + +/obj/item/weapon/implant/backup/get_data() + var/dat = {" +Implant Specifications:
+Name: [company_name] Employee Backup Implant
+Life: ~8 hours.
+Important Notes: Implant is life-limited due to KHI licensing restrictions. Dissolves into harmless biomaterial after around ~8 hours, the typical work shift.
+
+Implant Details:
+Function: Contains a small swarm of nanobots that perform neuron scanning to create mind-backups.
+Special Features: Will allow restoring of backups during the 8-hour period it is active.
+Integrity: Generally very survivable. Susceptible to being destroyed by acid."} + return dat + +/obj/item/weapon/implant/backup/implanted(var/mob/living/carbon/human/H) + ..() + if(istype(H)) + my_record = new(H,src,1) + return 1 + +//The glass case for the implant +/obj/item/weapon/implantcase/backup + name = "glass case - 'backup'" + desc = "A case containing a backup implant." + icon_state = "implantcase-b" + +/obj/item/weapon/implantcase/backup/New() + src.imp = new /obj/item/weapon/implant/backup(src) + ..() + return + +//The box of backup implants +/obj/item/weapon/storage/box/backup_kit + name = "backup implant kit" + desc = "Box of stuff used to implant backup implants." + icon_state = "implant" + item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit") + +/obj/item/weapon/storage/box/backup_kit/New() + ..() + for(var/i = 1 to 7) + new /obj/item/weapon/implantcase/backup(src) + new /obj/item/weapon/implanter(src) \ No newline at end of file diff --git a/code/modules/resleeving/infocore.dm b/code/modules/resleeving/infocore.dm new file mode 100644 index 0000000000..c8d6d31519 --- /dev/null +++ b/code/modules/resleeving/infocore.dm @@ -0,0 +1,147 @@ +//////////////////////////////// +//// Mind/body data storage system +//// for the resleeving tech +//////////////////////////////// + +var/datum/transhuman/infocore/transcore = new/datum/transhuman/infocore + +//Mind-backup database +/datum/transhuman/infocore + var/notify_min = 5 MINUTES + var/notify_max = 15 MINUTES + var/ping_time = 3 MINUTES + + var/datum/transhuman/mind_record/list/backed_up = list() + var/datum/transhuman/mind_record/list/has_left = list() + var/datum/transhuman/body_record/list/body_scans = list() + + var/in_use = 1 //Whether to use this thing at all + var/time_to_ping = 0 //When to do the next backup 'ping', in world.time + +/datum/transhuman/infocore/New() + process() + +/datum/transhuman/infocore/proc/process() + if(!in_use) + return + + for(var/N in backed_up) + var/datum/transhuman/mind_record/curr_MR = backed_up[N] + if(!curr_MR) + log_debug("Tried to process [N] in transcore w/o a record!") + else + if(!curr_MR.imp_ref || curr_MR.imp_ref.loc != curr_MR.mob_ref) //Implant gone + curr_MR.secretly_dead = DEAD + spawn(rand(notify_min,notify_max)) + curr_MR.obviously_dead = curr_MR.secretly_dead + + else if(!curr_MR.secretly_dead && (!curr_MR.mob_ref || curr_MR.mob_ref.stat >= DEAD)) //Mob appears to be dead + curr_MR.secretly_dead = curr_MR.mob_ref.stat + spawn(rand(notify_min,notify_max)) + if(!curr_MR.mob_ref || curr_MR.mob_ref.stat >= DEAD) //Still dead + curr_MR.obviously_dead = curr_MR.secretly_dead + else + curr_MR.secretly_dead = curr_MR.mob_ref.stat //Not dead now, restore status. + + spawn(ping_time) + process() + +/datum/transhuman/infocore/proc/add_backup(var/datum/transhuman/mind_record/MR) + ASSERT(MR) + backed_up[MR.charname] = MR + log_debug("Added [MR.charname] to transcore DB.") + +/datum/transhuman/infocore/proc/stop_backup(var/datum/transhuman/mind_record/MR) + ASSERT(MR) + has_left[MR.charname] = MR + backed_up.Remove("[MR.charname]") + log_debug("Put [MR.charname] in transcore suspended DB.") + +/datum/transhuman/infocore/proc/add_body(var/datum/transhuman/body_record/BR) + ASSERT(BR) + body_scans[BR.mydna.name] = BR + log_debug("Added [BR.mydna.name] to transcore body DB.") + +/////// Mind-backup record /////// +/datum/transhuman/mind_record + //User visible + var/charname = "!!ERROR!!" + var/implanted_at + var/body_type + var/obviously_dead + var/id_gender + + //Backend + var/obj/item/weapon/implant/backup/imp_ref + var/ckey = "" + var/mob/living/carbon/human/mob_ref + var/client/client + var/datum/mind/mind + var/cryo_at + var/secretly_dead + var/languages + +/datum/transhuman/mind_record/New(var/mob/living/carbon/human/M,var/obj/item/weapon/implant/backup/imp,var/add_to_db = 1) + ASSERT(M && imp) + + if(!istype(M)) + return //Only works with humanoids. + + //Scrape info from mob. + mob_ref = M + charname = M.name + implanted_at = world.time + body_type = M.isSynthetic() + id_gender = M.identifying_gender + + imp_ref = imp + ckey = M.ckey + cryo_at = 0 + languages = M.languages.Copy() + + //If these are gone then it's a problemmmm. + client = M.client + mind = M.mind + + if(add_to_db) + transcore.add_backup(src) + + +/////// Body Record /////// +/datum/transhuman/body_record + var/datum/dna2/record/mydna + + //These may or may not be set, mostly irrelevant since it's just a body record. + var/ckey + var/client/client_ref + var/datum/mind/mind_ref + var/synthetic + var/speciesname + var/bodygender + +/datum/transhuman/body_record/New(var/mob/living/carbon/human/M,var/add_to_db = 1) + ASSERT(M) + + synthetic = M.isSynthetic() + speciesname = M.custom_species ? M.custom_species : M.dna.species + bodygender = M.gender + + //Probably should + M.dna.check_integrity() + + //The DNA2 stuff + mydna = new () + mydna.dna = M.dna.Clone() + mydna.ckey = M.ckey + mydna.id = copytext(md5(M.real_name), 2, 6) + mydna.name = M.dna.real_name + mydna.types = DNA2_BUF_UI|DNA2_BUF_UE|DNA2_BUF_SE + mydna.flavor = M.flavor_texts.Copy() + + //My stuff + client_ref = M.client + ckey = M.ckey + mind_ref = M.mind + + if(add_to_db) + transcore.add_body(src) \ No newline at end of file diff --git a/code/modules/resleeving/machines.dm b/code/modules/resleeving/machines.dm new file mode 100644 index 0000000000..f190eabf29 --- /dev/null +++ b/code/modules/resleeving/machines.dm @@ -0,0 +1,238 @@ +//////////////////////////////// +//// Machines required for body printing +//// and decanting into bodies +//////////////////////////////// + +/////// Grower Pod /////// +/obj/machinery/clonepod/transhuman + name = "grower pod" + +/obj/machinery/clonepod/transhuman/growclone(var/datum/dna2/record/R) + if(mess || attempting) + return 0 + + attempting = 1 //One at a time!! + locked = 1 + + eject_wait = 1 + spawn(30) + eject_wait = 0 + + var/mob/living/carbon/human/H = new /mob/living/carbon/human(src, R.dna.species) + occupant = H + + if(!R.dna.real_name) + R.dna.real_name = "clone ([rand(0,999)])" + H.real_name = R.dna.real_name + + H.adjustCloneLoss(150) + H.Paralyse(4) + H.updatehealth() + + if(!R.dna) + H.dna = new /datum/dna() + H.dna.real_name = H.real_name + else + H.dna = R.dna + H.UpdateAppearance() + H.sync_organ_dna() + if(heal_level < 60) + randmutb(H) + H.dna.UpdateSE() + H.dna.UpdateUI() + + H.set_cloned_appearance() + update_icon() + + H.flavor_texts = R.flavor.Copy() + H.suiciding = 0 + attempting = 0 + return 1 + +/obj/machinery/clonepod/transhuman/process() + if(stat & NOPOWER) + if(occupant) + locked = 0 + go_out() + return + + if((occupant) && (occupant.loc == src)) + if(occupant.stat == DEAD) + locked = 0 + go_out() + connected_message("Clone Rejected: Deceased.") + return + + else if(occupant.health < heal_level && occupant.getCloneLoss() > 0) + occupant.Paralyse(4) + + //Slowly get that clone healed and finished. + occupant.adjustCloneLoss(-2 * heal_rate) + + //Premature clones may have brain damage. + occupant.adjustBrainLoss(-(ceil(0.5*heal_rate))) + + //So clones don't die of oxyloss in a running pod. + if(occupant.reagents.get_reagent_amount("inaprovaline") < 30) + occupant.reagents.add_reagent("inaprovaline", 60) + occupant.Sleeping(30) + //Also heal some oxyloss ourselves because inaprovaline is so bad at preventing it!! + occupant.adjustOxyLoss(-4) + + use_power(7500) //This might need tweaking. + return + + else if((occupant.health >= heal_level) && (!eject_wait)) + playsound(src.loc, 'sound/machines/ding.ogg', 50, 1) + audible_message("\The [src] signals that the growing process is complete.") + connected_message("Growing Process Complete.") + locked = 0 + go_out() + return + + else if((!occupant) || (occupant.loc != src)) + occupant = null + if(locked) + locked = 0 + return + + return + + + +/////// Resleever Pod /////// +/obj/machinery/transhuman/resleever + name = "resleeving pod" + desc = "Used to combine mind and body into one unit." + icon = 'icons/obj/machines/implantchair.dmi' + icon_state = "implantchair" + density = 1 + opacity = 0 + anchored = 1 + + var/mob/living/carbon/human/occupant = null + var/connected = null + +/obj/machinery/transhuman/resleever/attack_hand(mob/user as mob) + user.set_machine(src) + var/health_text = "" + var/mind_text = "" + if(src.occupant) + if(src.occupant.stat >= DEAD) + health_text = "DEAD" + else if(src.occupant.health < 0) + health_text = "[round(src.occupant.health,0.1)]" + else + health_text = "[round(src.occupant.health,0.1)]" + + if(src.occupant.client) + mind_text = "Mind present" + else + mind_text = "Mind absent" + + var/dat ="Resleever Status
" + dat +="Current occupant: [src.occupant ? "
Name: [src.occupant]
Health: [health_text]
" : "None"]
" + dat +="Mind status: [mind_text]
" + user.set_machine(src) + user << browse(dat, "window=resleever") + onclose(user, "resleever") + +/obj/machinery/transhuman/resleever/attackby(var/obj/item/weapon/G as obj, var/mob/user as mob) + if(istype(G, /obj/item/weapon/grab)) + if(!ismob(G:affecting)) + return + for(var/mob/living/carbon/slime/M in range(1,G:affecting)) + if(M.Victim == G:affecting) + usr << "[G:affecting:name] will not fit into the [src.name] because they have a slime latched onto their head." + return + var/mob/M = G:affecting + if(put_mob(M)) + qdel(G) + src.updateUsrDialog() + return + +/obj/machinery/transhuman/resleever/proc/putmind(var/datum/transhuman/mind_record/MR) + if(!occupant || !istype(occupant) || occupant.stat >= DEAD) + return 0 + + //In case they already had a mind! + occupant << "You feel your mind being overwritten..." + + //Attach as much stuff as possible to the mob. + for(var/datum/language/L in MR.languages) + occupant.add_language(L.name) + occupant.identifying_gender = MR.id_gender + occupant.client = MR.client + occupant.mind = MR.mind + occupant.ckey = MR.ckey + + //Give them a backup implant + var/obj/item/weapon/implant/backup/new_imp = new() + if(new_imp.implanted(occupant)) + new_imp.loc = occupant + new_imp.imp_in = occupant + new_imp.implanted = 1 + //Put it in the head! Makes sense. + var/obj/item/organ/external/affected = occupant.get_organ(BP_HEAD) + affected.implants += new_imp + new_imp.part = affected + + //Update the database record + MR.mob_ref = occupant + MR.imp_ref = new_imp + MR.secretly_dead = occupant.stat + MR.obviously_dead = 0 + + //Inform them and make them a little dizzy. + occupant << "You feel a small pain in your head as you're given a new backup implant. Oh, and a new body. It's disorienting, to say the least." + occupant.confused = max(occupant.confused, 15) + occupant.eye_blurry = max(occupant.eye_blurry, 15) + + return 1 + +/obj/machinery/transhuman/resleever/proc/go_out(var/mob/M) + if(!( src.occupant )) + return + if (src.occupant.client) + src.occupant.client.eye = src.occupant.client.mob + src.occupant.client.perspective = MOB_PERSPECTIVE + src.occupant.loc = src.loc + src.occupant = null + icon_state = "implantchair" + return + +/obj/machinery/transhuman/resleever/proc/put_mob(mob/living/carbon/human/M as mob) + if(!ishuman(M)) + usr << "\The [src] cannot hold this!" + return + if(src.occupant) + usr << "\The [src] is already occupied!" + return + if(M.client) + M.client.perspective = EYE_PERSPECTIVE + M.client.eye = src + M.stop_pulling() + M.loc = src + src.occupant = M + src.add_fingerprint(usr) + icon_state = "implantchair_on" + return 1 + +/obj/machinery/transhuman/resleever/verb/get_out() + set name = "EJECT Occupant" + set category = "Object" + set src in oview(1) + if(usr.stat != 0) + return + src.go_out(usr) + add_fingerprint(usr) + return + +/obj/machinery/transhuman/resleever/verb/move_inside() + set name = "Move INSIDE" + set category = "Object" + set src in oview(1) + if(usr.stat != 0 || stat & (NOPOWER|BROKEN)) + return + put_mob(usr) + return diff --git a/maps/virgo-1.dmm b/maps/virgo-1.dmm index e28b1cddf8..b236080596 100644 --- a/maps/virgo-1.dmm +++ b/maps/virgo-1.dmm @@ -840,7 +840,7 @@ "aqh" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/hos) "aqi" = (/obj/structure/grille,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/door/firedoor/border_only,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/reinforced/polarized{dir = 1},/obj/structure/window/reinforced/polarized{dir = 8},/obj/structure/window/reinforced/polarized{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/heads/hos) "aqj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/red{dir = 9},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/security/main) -"aqk" = (/obj/structure/bed/chair/office/dark{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/effect/landmark/start{name = "Security Officer"},/obj/structure/disposalpipe/sortjunction/flipped{dir = 1; name = "HoS Office"; sortType = "HoS Office"},/turf/simulated/floor/tiled,/area/security/main) +"aqk" = (/obj/structure/bed/chair/office/dark{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/effect/landmark/start{name = "Security Officer"},/turf/simulated/floor/tiled,/area/security/main) "aql" = (/obj/structure/table/standard,/obj/item/weapon/folder/red,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/security/main) "aqm" = (/obj/structure/table/standard,/obj/item/weapon/folder/red,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/security/main) "aqn" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/landmark/start{name = "Security Officer"},/turf/simulated/floor/tiled,/area/security/main) @@ -3340,7 +3340,7 @@ "bml" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/crew_quarters/medbreak) "bmm" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/crew_quarters/medbreak) "bmn" = (/obj/machinery/door/airlock/glass_medical{name = "Staff Room"; req_access = list(5)},/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/corner/paleblue/diagonal{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/crew_quarters/medbreak) -"bmo" = (/turf/simulated/wall,/area/medical/genetics_cloning) +"bmo" = (/turf/simulated/floor/wood,/area/medical/psych) "bmp" = (/obj/structure/closet/secure_closet/personal/patient,/obj/effect/floor_decal/corner/lime{dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology) "bmq" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/virology) "bmr" = (/obj/effect/floor_decal/corner/lime{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/virology) @@ -3418,12 +3418,12 @@ "bnL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bnM" = (/obj/effect/floor_decal/corner/paleblue{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bnN" = (/obj/machinery/recharge_station,/obj/effect/floor_decal/corner/paleblue{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/sleeper) -"bnO" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/bodybags{pixel_x = 1; pixel_y = 2},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/effect/floor_decal/corner/mauve{dir = 5},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/machinery/light_switch{pixel_x = -36; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) -"bnP" = (/obj/effect/floor_decal/corner/mauve/full{dir = 1},/obj/machinery/light{dir = 1},/obj/structure/table/standard,/obj/item/weapon/storage/laundry_basket,/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) -"bnQ" = (/obj/structure/window/reinforced{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/medical/genetics_cloning) -"bnR" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/camera/network/medbay{c_tag = "MED - Cloning"; dir = 2},/turf/simulated/floor/tiled,/area/medical/genetics_cloning) -"bnS" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/medical/genetics_cloning) -"bnT" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/medical/genetics_cloning) +"bnO" = (/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/machinery/light_switch{pixel_x = -36; pixel_y = 0},/turf/simulated/floor/wood,/area/medical/psych) +"bnP" = (/obj/machinery/camera/network/medbay{c_tag = "MED - Mental Health"; dir = 2},/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green,/turf/simulated/floor/carpet/blue,/area/medical/psych) +"bnQ" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/carpet/blue,/area/medical/psych) +"bnR" = (/obj/structure/bookcase,/turf/simulated/floor/carpet/blue,/area/medical/psych) +"bnS" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor/glass,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/airlock/medical{id_tag = "mentaldoor"; name = "Mental Health"; req_access = list(64)},/turf/simulated/floor/tiled/white,/area/medical/psych) +"bnT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/wood,/area/medical/psych) "bnU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/medical/virology) "bnV" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/medical/virology) "bnW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/medical/virology) @@ -3514,12 +3514,12 @@ "bpD" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bpE" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bpF" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/junction{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/sleeper) -"bpG" = (/obj/machinery/door/airlock/glass_medical{id_tag = "GeneticsDoor"; name = "Cloning Laboratory"; req_access = list(66)},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor/glass,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) -"bpH" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) -"bpI" = (/obj/effect/landmark/start{name = "Geneticist"},/obj/effect/floor_decal/corner/mauve{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) -"bpJ" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/medical/genetics_cloning) -"bpK" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/medical/genetics_cloning) -"bpL" = (/obj/structure/window/reinforced,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/medical/genetics_cloning) +"bpG" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/wood,/area/medical/psych) +"bpH" = (/obj/structure/bed/chair/comfy/brown{dir = 4},/turf/simulated/floor/carpet/blue,/area/medical/psych) +"bpI" = (/obj/effect/landmark/start{name = "Psychiatrist"},/obj/structure/bed/chair/office/dark{dir = 8},/turf/simulated/floor/carpet/blue,/area/medical/psych) +"bpJ" = (/obj/machinery/camera/network/medbay{c_tag = "MED - Diagnostics Starboard"; dir = 1},/obj/effect/floor_decal/corner/paleblue{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/sleeper) +"bpK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/wood,/area/medical/psych) +"bpL" = (/obj/structure/table/woodentable,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/carpet/blue,/area/medical/psych) "bpM" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/white,/area/medical/virology) "bpN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/black,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/virology) "bpO" = (/obj/machinery/disease2/isolator,/obj/effect/floor_decal/corner/lime{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology) @@ -3573,15 +3573,15 @@ "bqK" = (/obj/machinery/door/firedoor/glass,/obj/effect/floor_decal/corner/paleblue{dir = 2},/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bqL" = (/obj/effect/floor_decal/corner/paleblue{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bqM" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/effect/floor_decal/corner/paleblue{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/sleeper) -"bqN" = (/obj/machinery/camera/network/medbay{c_tag = "MED - Diagnostics Starboard"; dir = 1},/turf/simulated/floor/tiled/white,/area/medical/sleeper) +"bqN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/carpet/blue,/area/medical/psych) "bqO" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bqP" = (/obj/effect/floor_decal/corner/paleblue{dir = 2},/obj/machinery/light,/obj/machinery/vending/fitness,/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bqQ" = (/obj/machinery/vending/medical,/obj/effect/floor_decal/corner/paleblue{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/sleeper) -"bqR" = (/obj/effect/floor_decal/corner/mauve{dir = 8},/obj/machinery/button/remote/airlock{desc = "A remote control switch for the medbay foyer."; id = "GeneticsDoor"; name = "Door Control"; pixel_x = -26; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) -"bqS" = (/obj/effect/floor_decal/corner/mauve{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) -"bqT" = (/obj/effect/floor_decal/corner/mauve{dir = 5},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) -"bqU" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) -"bqV" = (/obj/effect/floor_decal/corner/mauve/full{dir = 1},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/disposal,/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) +"bqR" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/floor/carpet/blue,/area/medical/psych) +"bqS" = (/obj/structure/table/woodentable,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/computer/med_data/laptop,/turf/simulated/floor/carpet/blue,/area/medical/psych) +"bqT" = (/obj/effect/floor_decal/corner/paleblue{dir = 2},/obj/structure/disposalpipe/segment,/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/effect/floor_decal/corner/paleblue,/turf/simulated/floor/tiled/white,/area/medical/sleeper) +"bqU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor/carpet/blue,/area/medical/psych) +"bqV" = (/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 8; frequency = 1487; icon_state = "intercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = -21; pixel_y = 0},/obj/structure/bed/chair/comfy/brown{dir = 4},/turf/simulated/floor/carpet/blue,/area/medical/psych) "bqW" = (/obj/structure/table/standard,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/effect/floor_decal/corner/lime{dir = 9},/obj/machinery/light,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology) "bqX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology) "bqY" = (/obj/machinery/door/window/westright{name = "Virology Isolation Room One"; req_access = list(39)},/obj/machinery/door/firedoor/glass,/obj/effect/floor_decal/corner/lime{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology) @@ -3660,18 +3660,18 @@ "bst" = (/obj/machinery/bodyscanner{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bsu" = (/obj/machinery/body_scanconsole,/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bsv" = (/obj/effect/floor_decal/corner/pink{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/sleeper) -"bsw" = (/obj/effect/floor_decal/corner/paleblue{dir = 2},/obj/structure/disposalpipe/segment,/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/sleeper) +"bsw" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/carpet/blue,/area/medical/psych) "bsx" = (/turf/simulated/wall,/area/crew_quarters/heads/cmo) "bsy" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0; dir = 1; icon_state = "shutter0"; id = "cmooffice"; name = "CMO Office Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/crew_quarters/heads/cmo) "bsz" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0; dir = 1; icon_state = "shutter0"; id = "cmooffice"; name = "CMO Office Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/crew_quarters/heads/cmo) "bsA" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/shutters{density = 0; dir = 1; icon_state = "shutter0"; id = "cmooffice"; name = "CMO Office Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/crew_quarters/heads/cmo) "bsB" = (/obj/machinery/door/airlock/command{id_tag = null; name = "CMO's Office"; req_access = list(40)},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) -"bsC" = (/obj/effect/floor_decal/corner/mauve{dir = 9},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 8; frequency = 1487; icon_state = "intercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = -21; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) -"bsD" = (/obj/structure/bed/chair/office/dark,/obj/effect/landmark/start{name = "Geneticist"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) -"bsE" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) -"bsF" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) -"bsG" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) -"bsH" = (/obj/effect/floor_decal/corner/mauve{dir = 6},/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) +"bsC" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/bed/psych,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/turf/simulated/floor/carpet/blue,/area/medical/psych) +"bsD" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/item/toy/therapy_blue,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/carpet/blue,/area/medical/psych) +"bsE" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/carpet/blue,/area/medical/psych) +"bsF" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light,/turf/simulated/floor/carpet/blue,/area/medical/psych) +"bsG" = (/obj/machinery/alarm{dir = 1; pixel_y = -25},/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/disposal,/turf/simulated/floor/carpet/blue,/area/medical/psych) +"bsH" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{id_tag = "mentaldoor"; name = "Mental Health"; req_access = list(64)},/turf/simulated/floor/tiled,/area/medical/psych) "bsI" = (/obj/item/roller,/obj/effect/floor_decal/corner/lime{dir = 6},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/turf/simulated/floor/tiled/white,/area/medical/virology) "bsJ" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/virology) "bsK" = (/obj/structure/table/glass,/obj/item/weapon/storage/fancy/vials,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/effect/floor_decal/corner/lime/full{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology) @@ -3752,12 +3752,12 @@ "buh" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) "bui" = (/obj/effect/floor_decal/corner/paleblue{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) "buj" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/effect/floor_decal/corner/paleblue/full{dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) -"buk" = (/obj/machinery/clonepod{biomass = 600},/obj/effect/floor_decal/corner/mauve/full,/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) -"bul" = (/obj/machinery/computer/cloning,/obj/effect/floor_decal/corner/mauve{dir = 10},/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) -"bum" = (/obj/machinery/dna_scannernew,/obj/effect/floor_decal/corner/mauve{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) -"bun" = (/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) -"buo" = (/obj/structure/closet/wardrobe/genetics_white,/obj/effect/floor_decal/corner/mauve,/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) -"bup" = (/obj/structure/closet/wardrobe/medic_white,/obj/effect/floor_decal/corner/mauve/full{dir = 4},/obj/machinery/alarm{dir = 1; pixel_y = -25},/turf/simulated/floor/tiled/white,/area/medical/genetics_cloning) +"buk" = (/obj/item/weapon/stool/padded,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/item/weapon/storage/box/backup_kit,/turf/simulated/floor/tiled/white,/area/medical/reception) +"bul" = (/obj/structure/table/steel,/turf/simulated/floor/tiled,/area/medical/morgue) +"bum" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled,/area/medical/morgue) +"bun" = (/obj/structure/closet/secure_closet{name = "Psychiatrist's Locker"; req_access = list(64)},/obj/item/clothing/suit/straight_jacket{layer = 3},/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/pill/methylphenidate,/obj/item/weapon/reagent_containers/pill/citalopram,/obj/item/weapon/reagent_containers/pill/citalopram,/obj/item/weapon/reagent_containers/pill/methylphenidate,/obj/item/weapon/reagent_containers/syringe,/turf/simulated/floor/tiled,/area/medical/morgue) +"buo" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Morgue"; req_access = list(6)},/turf/simulated/floor/tiled,/area/medical/morgue) +"bup" = (/obj/structure/table/standard,/obj/item/weapon/packageWrap,/obj/item/weapon/hand_labeler,/obj/effect/floor_decal/corner/paleblue{dir = 8},/obj/item/weapon/storage/box/backup_kit,/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) "buq" = (/obj/structure/table/glass,/obj/item/weapon/folder/white,/obj/item/weapon/hand_labeler,/obj/effect/floor_decal/corner/lime/full,/obj/structure/extinguisher_cabinet{pixel_x = -27},/turf/simulated/floor/tiled/white,/area/medical/virology) "bur" = (/obj/structure/table/glass,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 8},/obj/item/device/radio{anchored = 1; broadcasting = 0; canhear_range = 7; frequency = 1487; icon = 'icons/obj/items.dmi'; icon_state = "red_phone"; listening = 1; name = "Virology Emergency Phone"; pixel_x = -6; pixel_y = 8},/obj/item/weapon/reagent_containers/spray/cleaner,/obj/effect/floor_decal/corner/lime{dir = 10},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/virology) "bus" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/obj/effect/floor_decal/corner/lime{dir = 8},/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/medical/virology) @@ -3820,7 +3820,7 @@ "bvx" = (/obj/structure/table/reinforced,/obj/machinery/computer/skills{pixel_y = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) "bvy" = (/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) "bvz" = (/obj/structure/closet/secure_closet/CMO,/obj/effect/floor_decal/corner/paleblue{dir = 6},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/obj/item/clothing/glasses/sunglasses/omnihud/cmo,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) -"bvA" = (/obj/machinery/door/airlock/medical{name = "Morgue"; req_access = list(6,5)},/obj/machinery/door/firedoor,/turf/simulated/floor/tiled,/area/medical/genetics_cloning) +"bvA" = (/obj/structure/table/steel,/obj/item/weapon/autopsy_scanner,/obj/item/weapon/surgical/scalpel,/obj/machinery/light{dir = 1},/obj/item/weapon/surgical/cautery,/obj/effect/floor_decal/corner/paleblue{dir = 5},/turf/simulated/floor/tiled,/area/medical/morgue) "bvB" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/medical/virology) "bvC" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/medical/virology) "bvD" = (/obj/machinery/door/airlock/glass_medical{name = "Virology Laboratory"; req_access = list(39)},/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/black,/turf/simulated/floor/tiled/white,/area/medical/virology) @@ -3871,7 +3871,7 @@ "bww" = (/obj/effect/floor_decal/corner/paleblue{dir = 6},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/medical/reception) "bwx" = (/obj/structure/table/standard,/obj/structure/window/reinforced{dir = 8},/obj/machinery/button/remote/blast_door{id = "medbayrecquar"; name = "Medbay Entrance Quarantine Shutters Control"; pixel_x = -4; pixel_y = -4; req_access = list(5)},/obj/machinery/button/remote/airlock{desc = "A remote control switch for the medbay foyer."; id = "MedbayFoyer"; name = "Medbay Doors Control"; pixel_x = -4; pixel_y = 6},/obj/machinery/button/remote/airlock{desc = "A remote control switch for the medbay foyer."; id = "surgery_observation"; name = "Surgery Door Access"; pixel_x = 8; pixel_y = 0; specialfunctions = 4},/obj/effect/floor_decal/corner/paleblue{dir = 9},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/medical/reception) "bwy" = (/obj/machinery/computer/crew,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/medical/reception) -"bwz" = (/obj/item/weapon/stool/padded,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/reception) +"bwz" = (/obj/effect/floor_decal/corner/paleblue/full{dir = 8},/obj/structure/disposalpipe/trunk,/obj/machinery/disposal,/turf/simulated/floor/tiled,/area/medical/morgue) "bwA" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/reception) "bwB" = (/obj/machinery/door/airlock/glass_medical{name = "Medbay Equipment"; req_access = list(5)},/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) "bwC" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) @@ -3894,12 +3894,12 @@ "bwT" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) "bwU" = (/obj/structure/table/reinforced,/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/item/device/radio{frequency = 1487; name = "Medbay Emergency Radio Link"},/obj/item/device/megaphone,/obj/effect/floor_decal/corner/paleblue{dir = 6},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) "bwV" = (/turf/simulated/wall,/area/medical/morgue) -"bwW" = (/obj/structure/table/steel,/obj/item/weapon/autopsy_scanner,/obj/item/weapon/surgical/scalpel,/obj/effect/floor_decal/corner/paleblue/full{dir = 8},/obj/machinery/light{dir = 1},/obj/item/weapon/surgical/cautery,/turf/simulated/floor/tiled,/area/medical/morgue) +"bwW" = (/obj/effect/floor_decal/corner/paleblue{dir = 5},/turf/simulated/floor/tiled,/area/medical/morgue) "bwX" = (/obj/structure/table/steel,/obj/item/device/camera{name = "Autopsy Camera"; pixel_x = -2; pixel_y = 7},/obj/item/weapon/paper_bin{pixel_y = -6},/obj/item/weapon/pen/red{pixel_x = -1; pixel_y = -9},/obj/item/weapon/pen/blue{pixel_x = 3; pixel_y = -5},/obj/effect/floor_decal/corner/paleblue{dir = 5},/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 1; frequency = 1487; icon_state = "intercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = 21},/turf/simulated/floor/tiled,/area/medical/morgue) -"bwY" = (/obj/machinery/disposal,/obj/effect/floor_decal/corner/paleblue{dir = 1},/obj/structure/disposalpipe/trunk,/turf/simulated/floor/tiled,/area/medical/morgue) +"bwY" = (/obj/effect/floor_decal/corner/paleblue/full{dir = 1},/obj/structure/morgue{tag = "icon-morgue1 (WEST)"; icon_state = "morgue1"; dir = 8},/turf/simulated/floor/tiled,/area/medical/morgue) "bwZ" = (/turf/simulated/floor/tiled,/area/medical/morgue) -"bxa" = (/obj/effect/floor_decal/corner/paleblue{dir = 4},/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/medical/morgue) -"bxb" = (/obj/structure/morgue{tag = "icon-morgue1 (WEST)"; icon_state = "morgue1"; dir = 8},/obj/effect/floor_decal/corner/paleblue/full{dir = 1},/turf/simulated/floor/tiled,/area/medical/morgue) +"bxa" = (/obj/effect/floor_decal/corner/paleblue{dir = 5},/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/turf/simulated/floor/tiled,/area/medical/morgue) +"bxb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/medical/morgue) "bxc" = (/obj/structure/closet/l3closet/virology,/obj/item/clothing/mask/gas,/obj/effect/floor_decal/corner/lime{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/virology) "bxd" = (/obj/effect/floor_decal/corner/lime{dir = 5},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/virology) "bxe" = (/obj/effect/floor_decal/corner/lime{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology) @@ -3986,9 +3986,9 @@ "byH" = (/obj/structure/table/reinforced,/obj/machinery/computer/med_data/laptop{pixel_x = 3; pixel_y = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) "byI" = (/obj/effect/floor_decal/corner/paleblue{dir = 2},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) "byJ" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/medical,/obj/item/clothing/accessory/stethoscope,/obj/item/clothing/glasses/hud/health,/obj/machinery/requests_console{announcementConsole = 1; department = "Chief Medical Officer's Desk"; departmentType = 5; name = "Chief Medical Officer RC"; pixel_x = 32; pixel_y = -2},/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -26},/obj/effect/floor_decal/corner/paleblue/full{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) -"byK" = (/obj/effect/floor_decal/corner/paleblue{dir = 9},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/medical/morgue) -"byL" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/medical/morgue) -"byM" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/medical/morgue) +"byK" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/effect/floor_decal/corner/paleblue{dir = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/medical/morgue) +"byL" = (/obj/effect/floor_decal/corner/paleblue{dir = 6},/obj/structure/morgue{tag = "icon-morgue1 (WEST)"; icon_state = "morgue1"; dir = 8},/turf/simulated/floor/tiled,/area/medical/morgue) +"byM" = (/obj/effect/floor_decal/corner/paleblue{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/sleeper) "byN" = (/obj/structure/morgue{tag = "icon-morgue1 (WEST)"; icon_state = "morgue1"; dir = 8},/obj/effect/floor_decal/corner/paleblue{dir = 6},/turf/simulated/floor/tiled,/area/medical/morgue) "byO" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/maintenance/medbay_fore) "byP" = (/obj/effect/floor_decal/corner/lime{dir = 10},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor/tiled/white,/area/medical/virology) @@ -4081,7 +4081,7 @@ "bAy" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/reception) "bAz" = (/obj/effect/floor_decal/corner/paleblue{dir = 4},/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/floor/tiled/white,/area/medical/reception) "bAA" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/bottle/stoxin{pixel_x = -6; pixel_y = 10},/obj/item/weapon/reagent_containers/glass/bottle/antitoxin{pixel_x = 5; pixel_y = 5},/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline{pixel_x = 1},/obj/random/medical,/obj/effect/floor_decal/corner/paleblue/full,/obj/machinery/light{dir = 8},/obj/item/weapon/storage/firstaid/regular{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) -"bAB" = (/obj/structure/table/standard,/obj/item/weapon/packageWrap,/obj/item/weapon/hand_labeler,/obj/effect/floor_decal/corner/paleblue{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) +"bAB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/medical/morgue) "bAC" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) "bAD" = (/obj/structure/table/rack,/obj/item/device/radio{frequency = 1487; icon_state = "med_walkietalkie"; name = "Medbay Emergency Radio Link"; pixel_x = 2; pixel_y = 2},/obj/item/device/radio{frequency = 1487; icon_state = "med_walkietalkie"; name = "Medbay Emergency Radio Link"},/obj/item/device/radio{frequency = 1487; icon_state = "med_walkietalkie"; name = "Medbay Emergency Radio Link"},/obj/effect/floor_decal/corner/paleblue{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) "bAE" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/emergency,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/effect/floor_decal/corner/paleblue{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage) @@ -4098,9 +4098,9 @@ "bAP" = (/obj/structure/table/reinforced,/obj/machinery/photocopier/faxmachine{department = "CMO's Office"},/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/machinery/light,/obj/machinery/camera/network/medbay{c_tag = "MED - CMO"; dir = 1},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) "bAQ" = (/obj/machinery/keycard_auth{pixel_x = 0; pixel_y = -24},/obj/machinery/light_switch{pixel_x = -10; pixel_y = -23},/obj/effect/floor_decal/corner/paleblue{dir = 10},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) "bAR" = (/obj/machinery/computer/crew,/obj/effect/floor_decal/corner/paleblue/full{dir = 4},/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 2; frequency = 1487; icon_state = "intercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = -21},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo) -"bAS" = (/obj/effect/floor_decal/corner/paleblue{dir = 9},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/medical/morgue) +"bAS" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bAT" = (/obj/machinery/optable,/turf/simulated/floor/tiled,/area/medical/morgue) -"bAU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/medical/morgue) +"bAU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bAV" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled,/area/medical/morgue) "bAW" = (/obj/machinery/door/airlock/medical{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "virology_airlock_interior"; locked = 1; name = "Virology Interior Airlock"; req_access = list(39)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/black,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/virology) "bAX" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/wall/r_wall,/area/medical/virology) @@ -4194,9 +4194,9 @@ "bCH" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "cmooffice"; name = "CMO Office Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/crew_quarters/heads/cmo) "bCI" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "cmooffice"; name = "CMO Office Privacy Shutters"; opacity = 0},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/heads/cmo) "bCJ" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/effect/floor_decal/corner/paleblue/full{dir = 8},/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor/tiled,/area/medical/morgue) -"bCK" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/effect/floor_decal/corner/paleblue{dir = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/medical/morgue) -"bCL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/medical/morgue) -"bCM" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor/tiled,/area/medical/morgue) +"bCK" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled,/area/medical/morgue) +"bCL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/tiled,/area/medical/morgue) +"bCM" = (/obj/effect/floor_decal/corner/paleblue,/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bCN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled,/area/medical/morgue) "bCO" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/obj/structure/closet/wardrobe/virology_white,/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "virology_airlock_control"; name = "Virology Access Button"; pixel_x = 8; pixel_y = 28; req_access = list(39)},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology) "bCP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 9},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/virology) @@ -4280,15 +4280,15 @@ "bEp" = (/obj/effect/floor_decal/corner/paleblue{dir = 5},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bEq" = (/obj/effect/floor_decal/corner/paleblue{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bEr" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/medical/sleeper) -"bEs" = (/obj/machinery/door/firedoor/glass,/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/sleeper) -"bEt" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/machinery/atmospherics/portables_connector,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/medical/sleeper) -"bEu" = (/obj/machinery/atmospherics/unary/freezer{dir = 2; icon_state = "freezer"},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/medical/sleeper) -"bEv" = (/obj/machinery/atmospherics/unary/cryo_cell,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/medical/sleeper) +"bEs" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/effect/floor_decal/corner/paleblue{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/sleeper) +"bEt" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/structure/sign/goldenplaque{desc = "Done No Harm."; name = "Best Doctor 2552"; pixel_y = -32},/turf/simulated/floor/tiled/white,/area/medical/sleeper) +"bEu" = (/turf/simulated/wall,/area/medical/resleeving) +"bEv" = (/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "psych"; name = "Mental Health Privacy Shutters"; opacity = 0},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced/polarized{dir = 1; id = "resleeve_tint"},/obj/structure/window/reinforced/polarized{id = "resleeve_tint"},/obj/structure/window/reinforced/polarized{dir = 4; id = "resleeve_tint"},/turf/simulated/floor/plating,/area/medical/resleeving) "bEw" = (/obj/structure/table/steel,/obj/item/weapon/storage/box/bodybags,/obj/effect/floor_decal/corner/paleblue/full{dir = 8},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/item/weapon/storage/box/bodybags,/turf/simulated/floor/tiled,/area/medical/morgue) "bEx" = (/obj/structure/table/steel,/obj/item/weapon/paper_bin,/obj/item/weapon/pen/blue{pixel_x = 3; pixel_y = -5},/obj/item/weapon/pen/red{pixel_x = -1; pixel_y = -9},/obj/effect/floor_decal/corner/paleblue{dir = 5},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled,/area/medical/morgue) "bEy" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/corner/paleblue{dir = 1},/turf/simulated/floor/tiled,/area/medical/morgue) -"bEz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/medical/morgue) -"bEA" = (/obj/structure/morgue{tag = "icon-morgue1 (WEST)"; icon_state = "morgue1"; dir = 8},/turf/simulated/floor/tiled,/area/medical/morgue) +"bEz" = (/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "psych"; name = "Mental Health Privacy Shutters"; opacity = 0},/obj/structure/window/reinforced/polarized{id = "resleeve_tint"},/obj/structure/window/reinforced/polarized{dir = 8; id = "resleeve_tint"},/obj/structure/window/reinforced/polarized{dir = 1; id = "resleeve_tint"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/medical/resleeving) +"bEA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/medical{id_tag = "ResleevingDoor"; name = "Resleeving Lab"; req_access = list(5)},/turf/simulated/floor/tiled/white,/area/medical/resleeving) "bEB" = (/obj/structure/morgue,/turf/simulated/floor/tiled,/area/medical/morgue) "bEC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/medical/morgue) "bED" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/structure/closet/l3closet/virology,/obj/machinery/power/apc{cell_type = /obj/item/weapon/cell/super; dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/tiled/white,/area/medical/virology) @@ -4368,9 +4368,9 @@ "bFZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bGa" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bGb" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 4},/turf/simulated/floor/tiled/white,/area/medical/sleeper) -"bGc" = (/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/sleeper) -"bGd" = (/obj/machinery/atmospherics/pipe/manifold/visible,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/sleeper) -"bGe" = (/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/sleeper) +"bGc" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 4; id = "resleeve_tint"},/obj/structure/window/reinforced/polarized{dir = 8; id = "resleeve_tint"},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced/polarized{dir = 1; id = "resleeve_tint"},/obj/structure/window/reinforced/polarized{id = "resleeve_tint"},/turf/simulated/floor/plating,/area/medical/resleeving) +"bGd" = (/obj/structure/bed/chair,/obj/effect/floor_decal/corner/paleblue{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/resleeving) +"bGe" = (/obj/effect/floor_decal/corner/paleblue/full{dir = 8},/obj/structure/bed/chair,/turf/simulated/floor/tiled/white,/area/medical/resleeving) "bGf" = (/obj/structure/filingcabinet/chestdrawer{desc = "A large drawer filled with autopsy reports."; name = "Autopsy Reports"},/obj/machinery/light_switch{pixel_x = -26; pixel_y = 0},/turf/simulated/floor/tiled,/area/medical/morgue) "bGg" = (/obj/structure/bed/chair/office/dark{dir = 1},/turf/simulated/floor/tiled,/area/medical/morgue) "bGh" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/medical/morgue) @@ -4444,10 +4444,10 @@ "bHx" = (/obj/machinery/door/firedoor/glass,/obj/effect/floor_decal/corner/paleblue{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bHy" = (/obj/effect/floor_decal/corner/paleblue{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bHz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/medical/sleeper) -"bHA" = (/obj/structure/sign/goldenplaque{desc = "Done No Harm."; name = "Best Doctor 2552"; pixel_y = -32},/obj/effect/floor_decal/corner/paleblue,/turf/simulated/floor/tiled/white,/area/medical/sleeper) +"bHA" = (/obj/effect/floor_decal/corner/paleblue{dir = 4},/obj/machinery/button/remote/airlock{desc = "A remote control switch for the medbay foyer."; id = "ResleevingDoor"; name = "Door Control"; pixel_x = 0; pixel_y = 26},/obj/structure/bed/chair,/obj/machinery/button/windowtint{id = "resleeve_tint"; pixel_x = 5; pixel_y = 35},/obj/machinery/light_switch{pixel_x = -5; pixel_y = 35},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/medical/resleeving) "bHB" = (/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/machinery/camera/network/medbay{c_tag = "MED - Diagnostics Aft"; dir = 1},/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 2; frequency = 1487; icon_state = "intercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = -21},/turf/simulated/floor/tiled/white,/area/medical/sleeper) -"bHC" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/effect/floor_decal/corner/paleblue{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/sleeper) -"bHD" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/corner/paleblue{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/sleeper) +"bHC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled/white,/area/medical/resleeving) +"bHD" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/machinery/atmospherics/portables_connector,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled,/area/medical/resleeving) "bHE" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bHF" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/corner/paleblue{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/sleeper) "bHG" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/disposalpipe/junction/yjunction,/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled/white,/area/medical/sleeper) @@ -4458,7 +4458,7 @@ "bHL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/corner/paleblue,/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -26},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/medical/morgue) "bHM" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light,/turf/simulated/floor/tiled,/area/medical/morgue) "bHN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/tiled,/area/medical/morgue) -"bHO" = (/obj/structure/morgue{tag = "icon-morgue1 (WEST)"; icon_state = "morgue1"; dir = 8},/obj/effect/floor_decal/corner/paleblue{dir = 10},/turf/simulated/floor/tiled,/area/medical/morgue) +"bHO" = (/obj/effect/floor_decal/corner/paleblue{dir = 5},/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/light{dir = 1},/obj/structure/bed/chair,/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/tiled/white,/area/medical/resleeving) "bHP" = (/obj/structure/morgue,/obj/effect/floor_decal/corner/paleblue{dir = 10},/turf/simulated/floor/tiled,/area/medical/morgue) "bHQ" = (/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/machinery/light,/obj/machinery/camera/network/medbay{c_tag = "MED - Morgue"; dir = 1},/turf/simulated/floor/tiled,/area/medical/morgue) "bHR" = (/obj/effect/floor_decal/corner/paleblue{dir = 10},/turf/simulated/floor/tiled,/area/medical/morgue) @@ -4522,9 +4522,9 @@ "bIX" = (/obj/structure/sign/nosmoking_1,/turf/simulated/wall,/area/medical/medbay_emt_bay) "bIY" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/medical/medbay_emt_bay) "bIZ" = (/turf/simulated/wall,/area/medical/psych) -"bJa" = (/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "psych"; name = "Mental Health Privacy Shutters"; opacity = 0},/obj/structure/window/reinforced/polarized{id = "psyco_tint"},/obj/structure/window/reinforced/polarized{dir = 8; id = "psyco_tint"},/obj/structure/window/reinforced/polarized{dir = 1; id = "psyco_tint"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/medical/psych) -"bJb" = (/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "psych"; name = "Mental Health Privacy Shutters"; opacity = 0},/obj/structure/window/reinforced/polarized{id = "psyco_tint"},/obj/structure/window/reinforced/polarized{dir = 1; id = "psyco_tint"},/obj/structure/window/reinforced/polarized{dir = 4; id = "psyco_tint"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/medical/psych) -"bJc" = (/obj/machinery/door/airlock/medical{id_tag = "mentaldoor"; name = "Mental Health"; req_access = list(64)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/wood,/area/medical/psych) +"bJa" = (/obj/machinery/atmospherics/unary/cryo_cell,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/medical/resleeving) +"bJb" = (/obj/machinery/atmospherics/unary/freezer{dir = 2; icon_state = "freezer"},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/medical/resleeving) +"bJc" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 4; id = "resleeve_tint"},/obj/structure/window/reinforced/polarized{dir = 8; id = "resleeve_tint"},/obj/structure/window/reinforced/polarized{dir = 1; id = "resleeve_tint"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/medical/resleeving) "bJd" = (/turf/simulated/wall,/area/medical/patient_a) "bJe" = (/obj/machinery/door/airlock/glass_medical{name = "Patient Ward"},/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) "bJf" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/medical/patient_wing) @@ -4599,14 +4599,14 @@ "bKw" = (/obj/effect/floor_decal/corner/pink{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay) "bKx" = (/turf/simulated/floor,/area/medical/medbay_emt_bay) "bKy" = (/obj/machinery/mech_recharger,/obj/machinery/light{dir = 1},/turf/simulated/floor/plating,/area/medical/medbay_emt_bay) -"bKz" = (/obj/structure/closet/secure_closet{name = "Psychiatrist's Locker"; req_access = list(64)},/obj/item/clothing/suit/straight_jacket{layer = 3},/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/pill/methylphenidate,/obj/item/weapon/reagent_containers/pill/citalopram,/obj/item/weapon/reagent_containers/pill/citalopram,/obj/item/weapon/reagent_containers/pill/methylphenidate,/obj/item/weapon/reagent_containers/syringe,/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/wood,/area/medical/psych) -"bKA" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light{dir = 1},/turf/simulated/floor/wood,/area/medical/psych) -"bKB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/wood,/area/medical/psych) -"bKC" = (/obj/structure/bookcase,/turf/simulated/floor/wood,/area/medical/psych) +"bKz" = (/turf/simulated/floor/tiled/white,/area/medical/resleeving) +"bKA" = (/obj/effect/floor_decal/corner/paleblue{dir = 9},/obj/machinery/light_switch{pixel_x = -25; pixel_y = -5},/obj/machinery/button/windowtint{id = "resleeve_tint"; pixel_x = -25; pixel_y = 5},/turf/simulated/floor/tiled/white,/area/medical/resleeving) +"bKB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/medical/resleeving) +"bKC" = (/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/resleeving) "bKD" = (/obj/effect/floor_decal/corner/pink/full{dir = 8},/obj/machinery/iv_drip,/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/machinery/vending/wallmed1{name = "NanoMed Wall"; pixel_x = -25; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/patient_a) "bKE" = (/obj/effect/floor_decal/corner/pink{dir = 5},/obj/structure/bed/padded,/obj/item/weapon/bedsheet/medical,/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor/tiled/white,/area/medical/patient_a) -"bKF" = (/obj/effect/floor_decal/corner/pink{dir = 5},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 0; pixel_y = 36},/obj/machinery/button/windowtint{id = "pr1_window_tint"; pixel_y = 26},/turf/simulated/floor/tiled/white,/area/medical/patient_a) -"bKG" = (/obj/structure/window/reinforced/polarized{dir = 1; id = "pr1_window_tint"},/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/polarized{dir = 2; id = "pr1_window_tint"},/obj/structure/window/reinforced/polarized{dir = 4; id = "pr1_window_tint"},/obj/structure/window/reinforced/polarized{dir = 8; id = "pr1_window_tint"},/turf/simulated/floor,/area/medical/patient_a) +"bKF" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 4},/turf/simulated/floor/tiled/white,/area/medical/resleeving) +"bKG" = (/obj/effect/floor_decal/corner/paleblue{dir = 6},/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/resleeving) "bKH" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) "bKI" = (/obj/machinery/camera/network/medbay{c_tag = "MED - Patient Hallway Fore"; dir = 2},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) "bKJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) @@ -4697,15 +4697,15 @@ "bMq" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled/steel,/area/medical/medbay_emt_bay) "bMr" = (/turf/simulated/floor/tiled/steel,/area/medical/medbay_emt_bay) "bMs" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/tiled/steel,/area/medical/medbay_emt_bay) -"bMt" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/wood,/area/medical/psych) -"bMu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/wood,/area/medical/psych) -"bMv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/hologram/holopad,/turf/simulated/floor/wood,/area/medical/psych) -"bMw" = (/obj/structure/bed/chair/comfy/brown,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/wood,/area/medical/psych) -"bMx" = (/obj/effect/floor_decal/corner/pink{dir = 9},/obj/structure/bed/chair/office/light,/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/camera/network/medbay{c_tag = "MED - Patient Room A"; dir = 4},/turf/simulated/floor/tiled/white,/area/medical/patient_a) +"bMt" = (/obj/machinery/atmospherics/pipe/manifold/visible,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/resleeving) +"bMu" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 4; id = "resleeve_tint"},/obj/structure/window/reinforced/polarized{dir = 8; id = "resleeve_tint"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/medical/resleeving) +"bMv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"bMw" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/effect/floor_decal/corner/paleblue{dir = 9},/turf/simulated/floor/tiled/white,/area/medical/resleeving) +"bMx" = (/obj/effect/floor_decal/corner/paleblue,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/resleeving) "bMy" = (/obj/machinery/hologram/holopad,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/medical/patient_a) "bMz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/medical/patient_a) -"bMA" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Patient Room A"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/patient_a) -"bMB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) +"bMA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/white,/area/medical/resleeving) +"bMB" = (/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/structure/table/standard,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = -4; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/resleeving) "bMC" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) "bMD" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/tiled/white,/area/medical/patient_wing) "bME" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) @@ -4801,10 +4801,10 @@ "bOq" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor/tiled/steel,/area/medical/medbay_emt_bay) "bOr" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/steel,/area/medical/medbay_emt_bay) "bOs" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/structure/closet/fireaxecabinet{pixel_x = 32; pixel_y = 0},/turf/simulated/floor/tiled/steel,/area/medical/medbay_emt_bay) -"bOt" = (/obj/structure/bed/psych,/turf/simulated/floor/carpet/blue,/area/medical/psych) +"bOt" = (/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/resleeving) "bOu" = (/turf/simulated/floor/carpet/blue,/area/medical/psych) -"bOv" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green,/turf/simulated/floor/carpet/blue,/area/medical/psych) -"bOw" = (/obj/structure/table/woodentable,/obj/machinery/computer/med_data/laptop,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/turf/simulated/floor/carpet/blue,/area/medical/psych) +"bOv" = (/obj/effect/floor_decal/corner/paleblue/full{dir = 4},/obj/structure/table/standard,/turf/simulated/floor/tiled/white,/area/medical/resleeving) +"bOw" = (/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/resleeving) "bOx" = (/obj/effect/floor_decal/corner/pink/full,/obj/machinery/computer/med_data/laptop,/obj/structure/table/glass,/obj/machinery/light,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled/white,/area/medical/patient_a) "bOy" = (/obj/effect/floor_decal/corner/pink{dir = 10},/obj/structure/table/glass,/obj/item/weapon/paper_bin,/obj/item/weapon/clipboard,/obj/item/weapon/pen,/turf/simulated/floor/tiled/white,/area/medical/patient_a) "bOz" = (/obj/effect/floor_decal/corner/pink{dir = 10},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/structure/closet/secure_closet/personal/patient,/turf/simulated/floor/tiled/white,/area/medical/patient_a) @@ -4908,9 +4908,9 @@ "bQt" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay) "bQu" = (/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay) "bQv" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/table/rack,/obj/machinery/door/window/westright{name = "EVA Suit Storage"; req_access = list(5)},/obj/item/device/suit_cooling_unit,/turf/simulated/floor/tiled/dark,/area/medical/medbay_emt_bay) -"bQw" = (/obj/structure/bed/chair/comfy/brown{dir = 1},/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 8; frequency = 1487; icon_state = "intercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = -21; pixel_y = 0},/turf/simulated/floor/carpet/blue,/area/medical/psych) +"bQw" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{dir = 4; id = "resleeve_tint"},/obj/structure/window/reinforced/polarized{id = "resleeve_tint"},/obj/structure/window/reinforced/polarized{dir = 8; id = "resleeve_tint"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/medical/resleeving) "bQx" = (/obj/structure/table/woodentable,/turf/simulated/floor/carpet/blue,/area/medical/psych) -"bQy" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/machinery/light_switch{pixel_x = -25; pixel_y = 8},/obj/machinery/button/windowtint{id = "psyco_tint"; pixel_x = -25},/obj/machinery/button/remote/airlock{desc = "A remote control-switch for the office door."; id = "mentaldoor"; name = "office door control"; pixel_x = -34; pixel_y = 7},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/effect/landmark/start{name = "Psychiatrist"},/turf/simulated/floor/carpet/blue,/area/medical/psych) +"bQy" = (/obj/effect/landmark/start{name = "Geneticist"},/turf/simulated/floor/tiled/white,/area/medical/resleeving) "bQz" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/corner/pink{dir = 9},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) "bQA" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/effect/floor_decal/corner/pink{dir = 6},/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) "bQB" = (/turf/simulated/wall,/area/medical/patient_b) @@ -4946,7 +4946,7 @@ "bRf" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/obj/structure/table/standard,/obj/item/stack/cable_coil,/obj/item/weapon/weldingtool/hugetank,/turf/simulated/floor/tiled/white,/area/assembly/robotics) "bRg" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/turf/simulated/floor/tiled/white,/area/assembly/robotics) "bRh" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 5},/turf/simulated/floor/tiled/white,/area/assembly/robotics) -"bRi" = (/obj/structure/table/standard,/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/camera/network/research{c_tag = "SCI - Robotics Starboard"; dir = 8},/turf/simulated/floor/tiled,/area/assembly/robotics) +"bRi" = (/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 8; frequency = 1487; icon_state = "intercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = -21; pixel_y = 0},/obj/effect/floor_decal/corner/paleblue{dir = 9},/obj/structure/bed/chair/office/light{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/resleeving) "bRj" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/primary/central_four) "bRk" = (/obj/machinery/door/airlock/command{name = "Head of Personnel"; req_access = list(57)},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/wood,/area/crew_quarters/heads/hop) "bRl" = (/obj/effect/floor_decal/corner/blue{dir = 9},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/bridge_hallway) @@ -4981,15 +4981,15 @@ "bRO" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay) "bRP" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay) "bRQ" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/table/rack,/obj/machinery/door/window/westleft{name = "EVA Suit Storage"; req_access = list(5)},/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/void/medical,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/void/medical,/obj/item/weapon/tank/oxygen,/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/floor/tiled/dark,/area/medical/medbay_emt_bay) -"bRR" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/item/toy/therapy_blue,/turf/simulated/floor/carpet/blue,/area/medical/psych) -"bRS" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor/carpet/blue,/area/medical/psych) -"bRT" = (/obj/machinery/camera/network/medbay{c_tag = "MED - Mental Health"; dir = 1},/obj/machinery/light,/turf/simulated/floor/carpet/blue,/area/medical/psych) -"bRU" = (/obj/machinery/vending/wallmed1{name = "NanoMed Wall"; pixel_x = 25; pixel_y = 0},/turf/simulated/floor/carpet/blue,/area/medical/psych) +"bRR" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/effect/floor_decal/corner/paleblue{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/medical/resleeving) +"bRS" = (/obj/structure/table/standard,/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/tiled,/area/assembly/robotics) +"bRT" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/machinery/clonepod/transhuman,/turf/simulated/floor/tiled/white,/area/medical/resleeving) +"bRU" = (/obj/effect/floor_decal/corner/paleblue/full,/obj/machinery/computer/transhuman/resleeving,/turf/simulated/floor/tiled/white,/area/medical/resleeving) "bRV" = (/turf/simulated/wall,/area/medical/patient_c) "bRW" = (/obj/effect/floor_decal/corner/pink/full{dir = 8},/obj/machinery/iv_drip,/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/machinery/vending/wallmed1{name = "NanoMed Wall"; pixel_x = -25; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/patient_c) "bRX" = (/obj/effect/floor_decal/corner/pink{dir = 5},/obj/structure/bed/padded,/obj/item/weapon/bedsheet/medical,/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor/tiled/white,/area/medical/patient_c) -"bRY" = (/obj/effect/floor_decal/corner/pink{dir = 5},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 0; pixel_y = 36},/obj/machinery/button/windowtint{id = "pr3_window_tint"; pixel_y = 26},/turf/simulated/floor/tiled/white,/area/medical/patient_c) -"bRZ" = (/obj/structure/window/reinforced/polarized{dir = 8; id = "pr3_window_tint"},/obj/structure/window/reinforced/polarized{dir = 4; id = "pr3_window_tint"},/obj/structure/window/reinforced/polarized{dir = 2; id = "pr3_window_tint"},/obj/structure/window/reinforced/polarized{dir = 1; id = "pr3_window_tint"},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor,/area/medical/patient_c) +"bRY" = (/obj/machinery/vending/wallmed1{name = "NanoMed Wall"; pixel_x = 25; pixel_y = 0},/obj/effect/floor_decal/corner/paleblue/full{dir = 4},/obj/structure/closet{name = "spare clothes"},/obj/item/clothing/under/color/black,/obj/item/clothing/under/color/black,/obj/item/clothing/under/color/grey,/obj/item/clothing/under/color/grey,/obj/item/clothing/under/color/white,/obj/item/clothing/under/color/white,/obj/item/clothing/under/color/blue,/obj/item/clothing/under/color/green,/obj/item/clothing/under/color/lightpurple,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/resleeving) +"bRZ" = (/obj/machinery/camera/network/medbay{c_tag = "MED - Resleeving"; dir = 1},/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/machinery/transhuman/resleever,/turf/simulated/floor/tiled/white,/area/medical/resleeving) "bSa" = (/obj/effect/floor_decal/corner/pink{dir = 1},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) "bSb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/corner/pink{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) "bSc" = (/obj/structure/window/reinforced/polarized{dir = 1; id = "pr2_window_tint"},/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/polarized{dir = 2; id = "pr2_window_tint"},/obj/structure/window/reinforced/polarized{dir = 4; id = "pr2_window_tint"},/obj/structure/window/reinforced/polarized{dir = 8; id = "pr2_window_tint"},/turf/simulated/floor,/area/medical/patient_b) @@ -5074,7 +5074,7 @@ "bTD" = (/obj/effect/floor_decal/corner/pink{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay) "bTE" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green,/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay) "bTF" = (/obj/structure/table/rack,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/window/westright{name = "EVA Suit Storage"; req_access = newlist(); req_one_access = list(5,18)},/obj/item/weapon/rig/medical/equipped,/turf/simulated/floor/tiled/dark,/area/medical/medbay_emt_bay) -"bTG" = (/obj/effect/floor_decal/corner/pink{dir = 9},/obj/structure/bed/chair/office/light,/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/camera/network/medbay{c_tag = "MED - Patient Room C"; dir = 4},/turf/simulated/floor/tiled/white,/area/medical/patient_c) +"bTG" = (/obj/effect/floor_decal/corner/pink{dir = 5},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 0; pixel_y = 36},/obj/machinery/button/windowtint{id = "pr3_window_tint"; pixel_y = 26},/turf/simulated/floor/tiled/white,/area/medical/patient_a) "bTH" = (/obj/machinery/hologram/holopad,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/medical/patient_c) "bTI" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/medical/patient_c) "bTJ" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Patient Room C"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/medical/patient_c) @@ -5173,7 +5173,7 @@ "bVy" = (/obj/structure/closet/crate{icon_state = "crateopen"; name = "Grenade Crate"; opened = 1},/obj/item/weapon/grenade/chem_grenade,/obj/item/weapon/grenade/chem_grenade,/obj/item/weapon/grenade/chem_grenade,/obj/item/weapon/grenade/chem_grenade,/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter,/obj/item/device/assembly/timer,/obj/item/device/assembly/timer,/obj/item/device/assembly/timer,/turf/simulated/floor/tiled/dark,/area/medical/biostorage) "bVz" = (/obj/structure/table/rack,/obj/item/clothing/suit/radiation,/obj/item/clothing/head/radiation,/obj/item/weapon/storage/toolbox/emergency,/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; dir = 2; frequency = 1487; icon_state = "intercom"; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = -21},/obj/item/weapon/storage/box/lights/mixed,/obj/item/device/defib_kit,/obj/item/device/defib_kit,/turf/simulated/floor/tiled/dark,/area/medical/biostorage) "bVA" = (/obj/item/weapon/cane,/obj/item/weapon/cane{pixel_x = -3; pixel_y = 2},/obj/item/weapon/cane{pixel_x = -6; pixel_y = 4},/obj/structure/table/steel,/obj/item/weapon/storage/box/gloves{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/box/rxglasses,/turf/simulated/floor/tiled/dark,/area/medical/biostorage) -"bVB" = (/obj/item/weapon/storage/box/cdeathalarm_kit,/obj/item/bodybag/cryobag{pixel_x = -3},/obj/item/bodybag/cryobag{pixel_x = -3},/obj/structure/table/steel,/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -32},/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/floor/tiled/dark,/area/medical/biostorage) +"bVB" = (/obj/structure/window/reinforced/polarized{dir = 8; id = "pr3_window_tint"},/obj/structure/window/reinforced/polarized{dir = 4; id = "pr3_window_tint"},/obj/structure/window/reinforced/polarized{dir = 2; id = "pr3_window_tint"},/obj/structure/window/reinforced/polarized{dir = 1; id = "pr3_window_tint"},/obj/structure/grille,/obj/machinery/door/firedoor,/turf/simulated/floor,/area/medical/patient_a) "bVC" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/maintenance/medbay_aft) "bVD" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/meter,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/maintenance/medbay_aft) "bVE" = (/obj/machinery/door/airlock/engineering{name = "Medbay Substation"; req_one_access = list(11,24,5)},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/firedoor,/turf/simulated/floor,/area/maintenance/substation/medical) @@ -5294,11 +5294,11 @@ "bXP" = (/obj/structure/sign/redcross{desc = "The Star of Life, a symbol of Medical Aid."; icon_state = "lifestar"; name = "Medbay"},/turf/simulated/wall,/area/hallway/secondary/medical_emergency_hallway) "bXQ" = (/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "medbayquar"; name = "Medbay Emergency Lockdown Shutters"; opacity = 0},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/medical_emergency_hallway) "bXR" = (/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "medbayquar"; name = "Medbay Emergency Lockdown Shutters"; opacity = 0},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/medical_emergency_hallway) -"bXS" = (/turf/simulated/wall,/area/medical/patient_e) -"bXT" = (/obj/effect/floor_decal/corner/pink/full{dir = 8},/obj/machinery/iv_drip,/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/machinery/vending/wallmed1{name = "NanoMed Wall"; pixel_x = -25; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/medical/patient_e) -"bXU" = (/obj/effect/floor_decal/corner/pink{dir = 5},/obj/structure/bed/padded,/obj/item/weapon/bedsheet/medical,/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor/tiled/white,/area/medical/patient_e) -"bXV" = (/obj/effect/floor_decal/corner/pink{dir = 5},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 0; pixel_y = 36},/obj/machinery/button/windowtint{id = "pr5_window_tint"; pixel_y = 26},/turf/simulated/floor/tiled/white,/area/medical/patient_e) -"bXW" = (/obj/structure/window/reinforced/polarized{dir = 1; id = "pr5_window_tint"},/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/polarized{dir = 2; id = "pr5_window_tint"},/obj/structure/window/reinforced/polarized{dir = 4; id = "pr5_window_tint"},/obj/structure/window/reinforced/polarized{dir = 8; id = "pr5_window_tint"},/turf/simulated/floor,/area/medical/patient_e) +"bXS" = (/obj/effect/floor_decal/corner/pink{dir = 9},/obj/structure/bed/chair/office/light,/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/camera/network/medbay{c_tag = "MED - Patient Room C"; dir = 4},/turf/simulated/floor/tiled/white,/area/medical/patient_a) +"bXT" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Patient Room A"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/medical/patient_a) +"bXU" = (/obj/item/weapon/storage/box/cdeathalarm_kit,/obj/item/bodybag/cryobag{pixel_x = -3},/obj/item/bodybag/cryobag{pixel_x = -3},/obj/structure/table/steel,/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -32},/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/obj/item/weapon/storage/box/backup_kit,/turf/simulated/floor/tiled/dark,/area/medical/biostorage) +"bXV" = (/obj/structure/bed/chair/office/light{dir = 4},/turf/simulated/mineral/ignore_mapgen,/area/mine/unexplored/upper_level) +"bXW" = (/obj/effect/floor_decal/corner/pink{dir = 5},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 0; pixel_y = 36},/obj/machinery/button/windowtint{id = "pr5_window_tint"; pixel_y = 26},/turf/simulated/floor/tiled/white,/area/medical/patient_c) "bXX" = (/obj/structure/window/reinforced/polarized{dir = 1; id = "pr4_window_tint"},/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/polarized{dir = 2; id = "pr4_window_tint"},/obj/structure/window/reinforced/polarized{dir = 4; id = "pr4_window_tint"},/obj/structure/window/reinforced/polarized{dir = 8; id = "pr4_window_tint"},/turf/simulated/floor,/area/medical/patient_d) "bXY" = (/obj/machinery/button/windowtint{id = "pr4_window_tint"; pixel_y = 26},/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 0; pixel_y = 36},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/corner/pink{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/patient_d) "bXZ" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/medical,/obj/effect/floor_decal/corner/pink{dir = 5},/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor/tiled/white,/area/medical/patient_d) @@ -5372,10 +5372,8 @@ "bZp" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green,/obj/effect/floor_decal/corner/pink{dir = 6},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/medical_emergency_hallway) "bZq" = (/turf/simulated/wall,/area/hallway/secondary/medical_emergency_hallway) "bZr" = (/obj/random/obstruction,/turf/simulated/floor,/area/maintenance/medbay_aft) -"bZs" = (/obj/effect/floor_decal/corner/pink{dir = 9},/obj/structure/bed/chair/office/light,/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/camera/network/medbay{c_tag = "MED - Patient Room E"; dir = 4},/turf/simulated/floor/tiled/white,/area/medical/patient_e) -"bZt" = (/obj/machinery/hologram/holopad,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/medical/patient_e) -"bZu" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/medical/patient_e) -"bZv" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Patient Room E"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/medical/patient_e) +"bZs" = (/obj/structure/window/reinforced/polarized{dir = 1; id = "pr5_window_tint"},/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/window/reinforced/polarized{dir = 2; id = "pr5_window_tint"},/obj/structure/window/reinforced/polarized{dir = 4; id = "pr5_window_tint"},/obj/structure/window/reinforced/polarized{dir = 8; id = "pr5_window_tint"},/turf/simulated/floor,/area/medical/patient_c) +"bZt" = (/obj/effect/floor_decal/corner/pink{dir = 9},/obj/structure/bed/chair/office/light,/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/camera/network/medbay{c_tag = "MED - Patient Room E"; dir = 4},/turf/simulated/floor/tiled/white,/area/medical/patient_c) "bZw" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) "bZx" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) "bZy" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Patient Room D"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/medical/patient_d) @@ -5453,9 +5451,6 @@ "caS" = (/obj/effect/decal/cleanable/cobweb2{tag = "icon-cobweb1"; icon_state = "cobweb1"},/obj/effect/decal/cleanable/cobweb2{icon_state = "spiderling"; name = "dead spider"; tag = "icon-spiderling"},/turf/simulated/floor,/area/maintenance/medbay_aft) "caT" = (/turf/simulated/floor,/area/maintenance/medbay_aft) "caU" = (/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor,/area/maintenance/medbay_aft) -"caV" = (/obj/effect/floor_decal/corner/pink/full,/obj/machinery/computer/med_data/laptop,/obj/structure/table/glass,/obj/machinery/light,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled/white,/area/medical/patient_e) -"caW" = (/obj/effect/floor_decal/corner/pink{dir = 10},/obj/structure/table/glass,/obj/item/weapon/paper_bin,/obj/item/weapon/clipboard,/obj/item/weapon/pen,/turf/simulated/floor/tiled/white,/area/medical/patient_e) -"caX" = (/obj/effect/floor_decal/corner/pink{dir = 10},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/structure/closet/secure_closet/personal/patient,/turf/simulated/floor/tiled/white,/area/medical/patient_e) "caY" = (/turf/simulated/floor/tiled/white,/area/medical/patient_wing) "caZ" = (/obj/effect/floor_decal/corner/pink,/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -32},/obj/machinery/light,/obj/machinery/camera/network/medbay{c_tag = "MED - Patient Hallway Aft"; dir = 1},/turf/simulated/floor/tiled/white,/area/medical/patient_wing) "cba" = (/obj/effect/floor_decal/corner/pink{dir = 10},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/structure/closet/secure_closet/personal/patient,/turf/simulated/floor/tiled/white,/area/medical/patient_d) @@ -10104,33 +10099,33 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaX aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabijbikabxabxbilbikbijaafaafaafaafaafaafaUObinaXEbiobrDdIGdICbtbdlbdIBdIAdIHdIDdIJdIIbhcbhdbhebhfbhgbeFbhhbhibhjbhkbeFaafaafaafaaiaaiaaiaaiaaiaaiaWAbhlbhmbhnbeIbbibhobhpbhqbdJbeLbblaafaafaafaafbhrbhrbhrbhrbhsbhrbhrbhrbhraafaafaafaVebhtaVOaVeaaiaZsbeRbeSaYjaYjaYjaYjbeTbhuaXcaXcaXcbhvbeSaYjaYjaYjbhwaYjaYjbhxaVjbhyaUubbyaPRbhzaOKaafbckbhAbhBbhCbckbcsbcsbcsbcsbhDbcsbhEbhFbhGbepbhHbhIbhJbhKbepbhLbhMbhNbhObeqbhPbhQbhRbDWbhTbhUbhVbhWbhXbhYbhZbiabewaWdbibaVnaafaafbdzbdzbdzbdzbicbidbicbdzbicbifbicbdzbdzbdzbdzbigbihbiibdzbdzaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabikbjGbjHbjIbjHbjGbikaaiaafaafbikbikbikbDVbjJaXEbgSbrDdILdIKdINdIMdIPdIOdIQbrDdITbaXbizbiAbiBbiCbiDbeFbiEbiFbiGbiGbeFbiHbiHbiHbiHaaiaaiaaiaaiaaiaXOaXObiIbiJbiKbbkbblbiLbhqbdJbiMbblaafaafaafbhrbhrbhrbhrbiNbiObiNbhrbhrbhrbhraafaafaVeaVeaVOaVeaaiaVPbiPbcdbceaYjbiQaYjaYjaZzbhubiRbhvaYgaYjaYjbiQaYjbiSbiTbiUaVPaVgaOKaVkbiVaVmaOKaOKaafbckbiWbiXbiYbckbiZbjabjbbjcbjdbjebjfbfhbjgbepbepbjhbjibjjbepbjkbjlbjmbjnbeqbjobfsbfrbjpbfrbfrbjqbewbjrbjsbewbjtbewbjuaXCaVnaafbdzbdzbfybjvbicbjwbjxbjybjzbjAbjxbjybjBbdzbjCbjDbjAbjEbjybjFbdzbdzaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabllblmblnblobloblmblpblqbikbikbikblrblsbikbikbltbikbrDbrDbrDbrDbrDbrDbrDbrDbrDdIUbcEbjRbaZbjSbaZbjSbeFbiEbjTbjUbjVbiGbjWbjXbjYbiHbjZbkabkbbiHaaiaaiaVFaVGaZhbeIbbkbkcbkdbkebkfbblbblaafaafaafbhrbhrbkgbkhbkibkjbkkbklbkmbhrbhraafaafaafaVeaVOaVeaaiaVPbknbkobcXaYjbdcbddbkpaYjaYhaYhaYhaYjbkpbcfbcYaYjaYjbkqbkraVPaaiaVWaUuaUvaPRaOKaafaafbckbksbktbkubkvbkwbkxbkybkybkzbkAbkBbkCbkDbkEbepbkFbkGbkHbepbkIbkJbkKbkLbeqbkMbkNbkObkPbfrbkQbkRbewbkSbkTbewbkUbewbkVaXCaVnaafbdzbkWbkXbkYbkZblablbblablcblabldbfAblebdzblfblgblhblibfAbljblkbdzaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxbjIbmBbmCbmCbjIbmDbmEbmFbmGbmHbmIbmJbmKbmLbmMbmNbmObmPbmQbmRbmSbmTbmSbmUdIEdIVbmXdIFbaZblvblwblxbiGbiGblyblzblAbiGblBblCblCblDblEblFblGbiHaaiaaiaWEaVGaZhblHbbkbkdbkdblIblJbblaafaafaafbhrbhrblKblLblMblNblOblNblPblQblRbhrbhraafaafaVeaVOaVeaaibawbbpbdPbdQaYjaYjbdcbddaYjaYjaYjaYjaYjbbrbcgaYjaYjaYjbciblSbawaaiaXeaYsblTblUaOKaafaafbckbecblVbeeblWblXblYblZbmabmbbmcbembfhbmdbmebepbmfbmgbmfbepbmhbmibmjbmkbeqbdwbmlbmmbmnbmlbmmbmobmobmobmobmobmobmobmoaXCaVnaafbdzbmpbmqbmrbicbmsbjxbmtbmubmvbmwbjEbjybicbjAbjEbmxbmybmsbmzbmAbdzaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXNabxblmbokbmCbmCbolbombonboobopboqborbosbotboubovbowboxboybozboAboBboCboDboEboFdIWbdDbfGbmZbnabnabnabnbbiGbiGbncbiGbiGbndbnebnfbnfbnfbngbnhbiHaaiaaiaWEaVGaZhbcLbbkbblbblbblbblbblaafaafaafbhrbhrbnibnjbnkbnlbnlbnlbnkbnjbnmbhrbhraafaafaVeaVOaVeaaibbobbpbdWbnnaYjbbqaYjbdcbbsaYjaYjaYjbbtbcgaYjbbqaYjbiTbnoblSbboaaiaYraUuaUvaPRbnpaaiaafbckbnqbnrbeebnsbntbnubnvbnvbnwbnxbnybnzbnAbnAbnBbnCbnDbnCbnEbnCbnFbnGbnHbnIbnJbnKbnHbnLbnMbnNbmobnObnPbnQbnRbnSbnTbmoaXCaVnaafbdzbnUbnVbnWbdzbnXbnYbnZbdzboabobbocbocbodboebocbofbogbohbmzboibdzaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaaaaaaaayaazaayaayaayaayaayaayaayaazaayaayaayaazaayaayaayaayaaaaaaaayaayaayaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabojaaeaaiabxbjIbpYbmCbmCbjIbpZbqabqbbqcbqdbqebqfbikbikbltbikbfEbfEbfEbfEbfEbfEbfEbfEbfEdITbcEbfGboHboIboJbnaboKbjSboLboMboNboOboPboQboRboSboTboUboVbiHaaiaaiaWEboWboXboYaVFaaiaaiaaiaaiaaiaaiaafaafbhrboZbpabnjbnkbpbbpcbpbbnkbnjbpdbpebhraafaafaVeaVOaVeaaiaZsbpfbpgbdWbnnaYjaYjaYjaYjaYjaYjaYjaYjaYjaYjaYjbiTbdSbphbpiaZsaaiaOKbpjaUvbpkbplaaiaaibckbdhbiXbpmbckbpnbpobppbpqbprbjebpsbptbpubpvbpwbpxbpybpxbpxbpxbpzbpAbpBbpCbpDbpEbpDbpFbpDbpDbpGbpHbpIbpJbpKbpLbpLbmoaXCaVnaafbdzbmpbpMbmrbicbjAbpNbpObpPbpQbjEbjEbpRbicbpSbjEbpTbpUbjAbmzbpVbdzaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaaaaaaaayaaaaaeaaaaaaaaaaaaaaeaaeaaaaaaaaeaaeaaaaaeaaeaaeaaaaaeaaeaaeaaaaayaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpWaaiaaibpXblmblnbrubrvblmbrwblqbikbikbikbrxblqbikbiybvSbjQbfEbgTbgUbgVbgWbgXbgYbgZbfEdIXbcEbqhbaZbqibqjbqkbqkbqlbqmbqnbqoboObqpboQbqqbqrbqsboUbqtbquaaiaaiaWEaVGaZhbeIaWEaaiaaiaaiaaiaaiaaiaafaafbhrbhrbnibnjbqvbnlbqwbnlbnkbnjbnmbhrbhraafaafaVeaVOaVeaaiaVPbawaYebqxbdWbnnbqybcXbqzaYjaYjaYjbqybcXbqzbiTbdSbphaYebawaVPaaiaVWaUubbyaPRbplaaiaaibckbckbqAbckbckbjebjebjebqBbqBbqBbqBbqCbqDbqBbqBbqEbqFbqGbqHbqHbqIbqJbqFbqKbqLbqMbqNbqObqPbqQbmobqRbqSbqTbqUbqTbqVbmoaXCaVnaafbdzbqWbqXbkYbqYblabqZblabrabjEbrbbjEbrcbdzbrdbfCbrebrfbrgbrhbribdzaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaaaaaaaayaaabrjbrkbrlaaabrjbrkbrlaaabrjbrkbrlaaabrjbrkbrlaaabrjbrkbrlaaaaayaaeaaeaaaaaaaaaaaaaaaaaabrmbrnbrobrpaaaaaabrqbrrbrsbrqbrqbrtbjGbjHbjIbjHbjGbikaaiaaiaaiaaiaaiaaibrmbsZbrzbtabfEbipbiqbirbisbitbiubivbiwdIZdIYdJabmZbrEbrFbrGbnabrHbbLbrIbrJbrKbrLbrMbrNbrNbrNbrObrPbrQaaiaaiaWEaVGaZhbeIaWEaaiaaiaaiaaiaaiaafaafaafbhrbhrbrRbrSbrTbnlbnlbnlbrUbrVbrWbhrbhraafaafaVeaVOaVeaaiaaiaYqaXdaYebqxbdWbrXbrYbrZbdabdabdabrXbrYbrZbdSbphaYeaWPaYdaaiaaiaXebaAbaBbsabplaaiaaibsbbscbsdbsebsfbsgbshbsibqBbsjbskbslbsmbsnbsobspbsqbsrbssbstbsubsvbqJbswbsxbsybszbsAbsBbsybsAbmobsCbsDbsEbsFbsGbsHbmoaXCaVnaafbdzbdzbfybsIbicbmsbsJbjEbjxbjEbjEbrhbsKbdzbsLbsMbsNbsObpRbsPbdzbdzaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaXDaXDaXDaXDaXDaXDaXDaXDaXDaaaaaaaaaaaaaayaaebrjbsQbrlaaebrjbsQbrlaaebrjbsQbrlaaebrjbsQbrlaaebrjbsQbrlaaeaazaaaaaeaaeaaaaaaaaaaaaaaabrmbrmbsRbsSbrmbsTbsUbsVbsWbsXbsYbikbikabxabxbilbikbikcxVcxVaaiaaiaaiaaibrmbrmbrzbuJbfEbjKbjLbgVbjMbjNbjObjPbfEdJbbtcbtdboHbtebtfbtgbthbmZbtibtjbtkbtlbtmbtnbtobtpbtqbtrbtsbiHaaiaaiaWAaVGbttbeIaWAaaiaaiaaiaafaafaafaafaafaafbhrbhrbtubrSbtvbtwbtxbtybtzbhrbhraafaafaafaVeaVOaVeaaiaaiaaiaYqaVSbaxbdUbdUbtAbtBbtCbtDbtCbtEbtFbdUbdUbtGaVQaYdaaiaaiaaiaYraUubtHaPRbtIaaiaaibtJbtKbsdbtLbtMbtNbtObtPbqBbtQbtRbtSbtTbtTbtUbtVbtWbtXbtYbtZbtZbuabubbucbudbuebufbugbuhbuibujbmobukbulbumbunbuobupbmoaXCaVnaafaafbdzbdzbdzbdzbuqburbusbjxbutbuubuvbdzbdzbiebdzbuxbuybuzbdzbdzaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaXDaXDaXDaXDaXDaXDaXDaaaaaaaaaaaaaaaaayaaabrjbsQbrlaaabrjbsQbrlaaabrjbsQbrlaaabrjbsQbrlaaabrjbsQbrlaaaaaeaaaaaaaaeaaeaaaaaaaaaaaabrmbuAbuBbuCbrmbuDbuEbuFbuGbuHbuIdIScxVaaiaaiaaiaaicxVcxVaaiaaiaaiaaiaaiaaibrmbrzdIRbfEbfEbfEbfEbfEbfEbfEbfEbfEdJcbuMbuNbaZbuObuPbuQbuRboHbuSbrIbqhbrKbuTbuUbuVbiHbuWbuXbuWbiHaaibbkbbkbiIbiJbiKaXOaaiaaiaafaafaafaafaafaafaafbhrbhrbhrbuYbuZbvabvbbvcbhrbhrbhraafaafaVeaVeaVOaVeaVeaaiaaiaaiaVPaVQaVRaVSaVPaVPaVQaVRaVSaVPaVPaVQaVRaVSaVPaaiaaiaaiaaiaOKaVkbiVaVmaOKaOKaaibvdbvebvfbtNbvgbvhbvibvjbqBbvkbvlbvmbvnbtTbtTbvobnHbvpbvqbqLbqLbvrbqJbvsbvtbvubvvbvwbvxbvybvzbmobmobmobmobvAbmobmobmoaXCaVnaafaafaafaafaafbdzbvBbvCbdzbvDbdzbvBbvEbdzbvFbvGbdzbvHbvIbdzbdzaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayaaabrjbsQbrlaaabrjbsQbrlaaabrjbsQbrlaaabrjbsQbrlaaabrjbsQbrlaaaaaeaaaaaaaaaaaeaaeaaaaaaaaabrmbvJbvKbvLbrmbvMbvNbvObvPbvQbvRbrqaafaafaafaaiaaiaaiaaiaaiaaiaaiaaiaafaafbrmbvSbuKbuKbvTbvUbvVbvWbvXbvYbvZbuKdJdbwbbwcbaZbwdbwebwfbwgbaZbwhbrIbwibwjbwjbwjbwjbwjbwkbwlbwmbwjbcJbbkbwnaVGaZhbwoaXOaVeaafaafaafaafaafaafaafaafaafbhrbhrbhrbwpbhrbhrbhrbhrbhraafaafaVeaVeaVNaVOaVNaVeaVeaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaVeaOKaUubwqbgibwraOKbwsbwtbwubwvbwwbwxbwybwzbwAbwBbwCbwDbwEbwFbtTbwGbqBcsVbqFbwIbwJbwKbwLbwMbwNbwObwPbwQbwRbwSbwTbwUbwVbwWbwXbwYbwZbxabxbbwVaXCaVnaafaafaafaafaafbdzbxcbxdbxebxfbxgbxhbxibxjbxkbxlbdzbxmbxnbxobdzaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayaayaayaaeaaabrjbsQbrlaaabrjbsQbrlaaabrjbsQbrlaaabrjbsQbrlaaabrjbsQbrlaaaaaeaaaaaaaaaaaaaaebxpbxqbxqbxqbxqbxrbrmbrmbrqbxsbxtbxubxvbxwbrqaafaafaafaafaaiaaiaaiaaiaaiaaiaafaafaafbrmbvSbuKbxxbxybxzbxAbxBbxCbxDbxEbxFdJebxHbxIbxJbxKbxLbxMbxNbxObxPbxQbxRbxSbxTbxUbxVbxSbxWbxXbxYbxZbyabybbbiaWBbeHbeIbycaVeaVeaVeaVeaVeaVeaVeaVeaVeaVeaafaafbydbyebydbydaVeaVeaVeaVeaVeaVebyfbygbyhbyiaVNaVeaVeaVeaVeaVeaVeaVeaVeaVeaVeaVeaVeaVeaVeaVeaVeaVeaVeaVeaVeaVeaVebyjbykbylbymaPQbynbyobypbtNbyqbtNbyrbvhbysbytbspbyubyvbywbyxbyybyzbspbyAbyBbnMbyCbyCbyDbqJbyEbudbyFbyGbyHbvybyIbyJbwVbyKbyLbyMbwZbwZbyNbwVbyOaVnaafaafaafaafaafbdzbdzbyPbyQbyRbySbyTbyUbyVbyWbyXbyYbyZbzabzbbdzaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayaaaaaeaaaaaaaaebzcaaeaaaaaebzcaaeaaaaaebzcaaeaaaaaebzcaaeaaaaaebzcaaeaaaaaeaaaaaabzdbzebzebzfbzgbzhbzibzjbzkbzlbzmbrqbznbzobzpbzqbzrbrqaafaafaafaafaafaaiaaiaaiaaiaafaafaafaafbrmbvSbuKbzsbxzbztbzubzvbzwbzxbzwbzybzzbzAbzBbzCbhebzDbhebzEbhebhebzFbzGbzHbzIbzJbzKbzLbzMbzNbzObzPbzQbzRbzSbzTbzUbzVbzWbzXbzYbzZbzZbzZbzZbAabzZbAbaVeaVeaVeaVebAcaVeaVeaVebAdbAebAebAebAebAebAfbAgbAhbAibAibAibAibAibAibAibAjbAibAibAibAkbAlbAlbAlbAlbAlbAlbAlbAlbAmbAlbAnbAobApbAqbAraYvbAsbAtbAubAvbAwbtLbAxbtNbAybAzbtVbAAbABbACbADbAEbAFbtVbAGbAHbAIbAJbAJbAKbALbAMbvtbANbAObAPbAQbARbwVbwVbASbATbAUbAVbwZbyNbwVbyOaVnaafaafaafaafaafaafbdzbdzbdzbAWbAXbdzbdzbdzbdzbdzbdzbAYbAZbdzbdzaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayaaebBabBbbBbbBbbBcbBbbBbbBbbBcbBbbBbbBbbBcbBbbBbbBbbBcbBbbBbbBbbBcbBbbBbbBbbBbbBdbBebBfbBgbBhbBibBjbBkbBlbBmbBnbBobrqbrqbBpbrqbrqbBqbrqaafaafaafaafaafaafaafaaiaaiaafaafaafaafbrmbvSbuKbBrbBsbBtbBubBvbBwbBxbBybuKbBzbBAbBBbBCbBDbBEbBFbBGbBHbBIbBJbBKbwjbBLbBMbBNbBObBPbBQbxYbxZbyabybbbibbibBRbBSbBTaVebBUbBVbBWbBXbBYbBZbCabCbbCcbCdbCebCfbCgbzZbzZbzZbChaVeaVeaVeaVeaVNbCibCjbCkbClbClbClbClbClbClbClbCmbClbClbClbCnbCobCobCobCobCobCobCobFpbfYbhtaVebCqaUubbybCraQIbCsbCtbCubCvbCwbCxbCybCzbCAbCBbqBbqCbqDbCCbqCbCDbqDbqBbCEbqFbwIbwJbwKbCFbqJbCGbsxbCHbCIbsxbwVbwVbwVbCJbCKbCLbCMbCNbwZbyNbwVbyOaVnaafaafaafaafaafaafaafbdzbCObCPbCQbdzaafaafaafaafbdzbdzbdzbdzaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayaaaaaeaaaaaaaaebzcaaeaaaaaebzcaaeaaaaaebzcaaeaaaaaebzcaaeaaaaaebzcaaeaaaaaeaaaaaabzdbzebzebCRbCSbCTbCUbxqbCVbCWbCXbvSbvSbCYbCZbrmbDabrmaafaafaafaafaafaafaafaafaafaafaafaafaafbrmbvSbuKbDbbDcbDdbDebDfbDgbDhbDibuKbDjbcEbDkbDlbDmbDnbDobDpbDlbDqbDrbDqbwjbwjbwjbwjbwjbDsbDtbDubwjbcJbbkbDvbbiaZhbDwaXOaVebDxbDxbDxbDxbDxbDxbDybDzaVebDAbDBbDAaVebDCbDDbDEbDFaVeaafaafaVeaVeaVNaVOaVNbDGbDHbDIbDJbClbDKbDLbDMbDNbDObDPbDQbDRbDSbDTbDSbDUbFIbFHbHlbCobCobCoaOKbDXbeaaPQbDYaOKbwsbwtbDZbyqbEabEbbEcbEdbCvbEebEfbEgbEhbEibEjbEkbElbEmbEnbEobEpbEpbEqbErbqFbEsbEtbEubEvbwVbEwbExbEybEzbEAbEBbECbwZbyNbwVaXCaVnaVnaafaafaafaafaafaafbdzbEDbEEbEFbdzaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayaayaayaaeaaebrjbEGbrlaaabrjbEGbrlaaabrjbEGbrlaaabrjbEGbrlaaabrjbEGbrlaaaaaeaaaaaaaaaaaaaaabEHbxqbxqbxqbxqbrmbrmbEIbEJbBnbEKbELbEMbENbrmaafaafaafaafaafaafaafaafaafaafaafaafaafbrmbvSbuKbuKbuKbEObEPbEPbEPbuKbuKbuKbEQbERbwhbESbETbEUbEVbEWbDlbEXbEYbEZbFabFbbFcbFdbFebDqbFfbDqbFeaaibbkbbkbFgaZhbbibFhbFibDxbFjbFkbFlbFmbDxbDxbDxbDxbFnbFobTbbFqbFqbFrbFsbFqbFtaafaafaafaVeaVeaVObClbClbFubFvbFwbClbFxbFybFzbFzbFzbFAbFBbFCbFDbFDbFEbFFbFFbFGbRLcaObVwcbMaOKaVkbiVbFJaOKaOKaaibvdbFKbFLbAvbFMbFNbFObAvbFPbFQbFRbFSbFTbFUbFTbFVbFWbFWbFXbFWbFWbFYbFZbGabGbbGcbGdbGebwVbGfbGgbGhbEzbEAbEBbGibwZbyNbwVbGjbGkaVnaafaafaafaafaafaafbdzbGlbGmbGnbdzaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrjbEGbrlaaabrjbEGbrlaaabrjbEGbrlaaabrjbEGbrlaaabrjbEGbrlaaaaaeaaaaaaaaaaafaafaafaafaafaafaafaafbrmbrmbrmbrmbrmbGobGpbGqbrmaafaafaafaafaafaafaafaafaafaafaafaafaafbrmbvSbuKbGrbEPbEObEPbEPbEPbEPbGsbuKbGtbcEbGubGvbGwbGxbGybGzbDlbGAbGBbGCbGDbGDbGEbGDbGFbGGbGHbGIbGJaaiaaibGKbbibGLbbibGMbFibGNbGObGPbGPbGQbGRbGSbGTbDxbGUbGVbGWbFqbGXbGYbGZbFqaafaafaafaafaVeaVNaVObClbHabHbbHcbHdbClbHebHfbHgbDMbDMbHhbHibHjbHkbHkbHkbHkbHkbFFcbRbHmcebcqHbHnaUubHoaPQbnpaaiaaibsbbtKbtNbtNbHpbHqbtNbtNbHrbHsbHtbHubvqbHvbHwbHxbqLbHybHzbHAbHBbHCbHDbHEbHFbHGbHHbHIbHJbHKbHLbHMbHNbHObHPbHQbHRbHSbwVbdxbdyaVnaafaafaafaafaafaafbdzbdzbHTbHUbdzaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaabrjbEGbrlaaabrjbEGbrlaaabrjbEGbrlaaabrjbEGbrlaaabrjbEGbrlaaaaayaaaaaaaafaafaaiaaiaaiaaiaaiaaiaaiaaiaafaafaafbrmbrmbHVbGqbrmaafaafaafaafaafaafaafaafaafaafaafaafbrmbrmbvSbuKbHWbEPbHXbHYbEPbEPbEPbGsbuKbHZbrCbIabIbbIcbIdbIebIfbDlbFebIgbIhbGDbGDbGDbGDbIibGDbGDbIjbIkaaiaaibIlbbiaZhbbibImbFibInbIobIpbIqbIrbIpbIpbIsbDxbItbIubIvbFqbIwbIxbIybFqaafaafaafaafaVebIzaVObClbHabIAbIBbICbClbIDbIEbIFbDMbIGbIHbIIbIJbHkbHkbHkbHkbHkbFFbIKbILczYcAdbplbIMbwqbINbplaaiaaibtJbIObIPbIPbIQbIRbISbITbIUbIUbWxbIWbIXbIYbIUbIZbJabJbbJcbIZbJdbJdbJdbJdbJdbJebJfbJgbJhbwVbwVbwVbwVbwVbwVbwVbwVbwVbwVbJibJjaVnbJkbJlbJlbJlbJlbJlbJmbJnbJobJpbKZbJlaafaafaafaafaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayaaebrjbEGbrlaaebrjbEGbrlaaebrjbEGbrlaaebrjbEGbrlaaebrjbEGbrlaaeaayaaabJqaafbJrbJrbJsabxabxabxbJtbJrbJraaiaafaafaafbrmbJubGqbrmaafaafaafaafaafaafaafaafaafaafaafaafbrmbJvbvSbuKbJwbJxbJybEPbJzbEPbJAbuKbuKbJBbcEbGubDlbJCbJDbJEbJFbJGbFebJHbJIbJJbGDbGDbGDbIibJJbGDbJKbIkaaiaaibIlbJLbeHbbibImbFibJMbJNbIpbJObJPbJQbJRbJSbJTbJUbJVbJWbJXbJYbJZbKabFqaafaafaafaafaVeaVeaVObClbClbKbbClbClbClbKcbKdbKebKfbIGbKgbKhbKibKjbKkbKlbKmbFFbFFbKnbILcIBcIGbtIbKobeaaPQbtIaaiaaibKpbKqbKrbKsbKtbKpbKpbKpbKpbKubKvbKwbKxbKybKxbIZbKzbKAbKBbKCbJdbKDbKEbKFbKGbKHbKIbKJbKKbKLbKMbKNbKObKPbKQbKRbKSbKTbKUbKVbKWbKXbKYbKZbLabLbbLcbLdbLebLfbLgbLfbLhbJlaafaafaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazaaabrjbLibrlaaabrjbLibrlaaabrjbLibrlaaabrjbLibrlaaabrjbLibrlaaaaaeaaebJqaafbJrbLjbLkbLlbLkbLlbLkbLjbJraaiaaiaafaafbrmbLmbGqbrmbrmaafaafaafaafaafaafaafaafaafaafaafbrmbLnbvSbuKbuKbuKbuKbuKbuKbuKbuKbuKbLobLpbcEbwhbESbLqbLrbLsbJFbLtbFebLubLvbLwbLxbLybLzbLAbLwbLBbLCbLDaaiaaibIlbbibBRbBSbImbLEbDxbLFbIpbLGbLHbLIbLJbLKbDxbLLbLMbLNbLObLObLObLObLObLObLObLOaafaafaVeaVObClbLPbLQbLRbLSbLTbDMbDMbLUbDMbLVbClbLWbLXbLYbLZbMabFFbMbbMcbMdbMecQQcQWaOKbMfbbybMgaOKaaiaaibKpbMhbMibMjbMkbMlbMmbMnbMobMpbKvbKwbMqbMrbMsbIZbMtbMubMvbMwbJdbMxbMybMzbMAbMBbMCbMDbMEbMFbMFbMGbMHbMCbMFbMIbMFbMJbMKbMLbMMbMNbMObMPbMQbMQbMRbMQbMSbMTbMUbMVbMWbJlaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayaaaaaeaaaaaaaaaaaeaaeaaeaaaaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaeaaaaaeaaeaafaafaafbMXbMYbMZbNabNbbNcbMXbNdaaiaaiaafaafbrmbNebGqbNfbrmbrmbrmbrmbrmbrmbrmbrmbrmbrmbrmbrmbrmbNgbNhbNibNjbNkbNlbxKbNmbNnbNobNpbNqbNrbNsbGubGvbGwbNtbNubJFbNvbFebNwbNxbNybNzbNzbNAbNBbNybNCbNDbFeaaiaaibIlbbiaZhbbibNEbFibDxbNFbIpbNGbNHbIpbLJbNIbDxbNJbNKbNLbLObNMbNNbNObNPbLObNQbLObLOaafaVeaVObClbNRbNSbNTbNTbNUbNTbNTbNVbDMbNWbClbNXbNYbNZbOabObbOcbNXbNYbNZbCobNXbNZaOKaVkbiVbFJaOKaOKaaibKpbOfbOgbOhbOibOjbOkbOlbOmbOnbOobOpbOqbOrbOsbIZbOtbOubOvbOwbJdbOxbOybOzbKGbOAbOBbOCbODbOEbOFbOGbOHbOIbOEbOJbOKbOLbOMbKVbONbOObOPbKZbLabOQbORbMVbOSbOTbOUbMVbOVbJlaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayaayaayacvacvaazaayaaeaaeaaeaayaaeaaeaaeaaeaaaaaaaaaaaeaaeaaeaazaaeaaaaafaafaafbLlbOWbOXbOYbOYbOZbLlaaiaaiaaiaafaafbrmbPabPbbPcbPcbPcbPdbPcbPcbPcbPcbPcbPcbPcbPcbPcbPcbPebPfbPgbPhbPibPjbPkbPlbPmbPnbPobPpbPqbPrbwhbIbbPsbPtbPubPvbPwbFebPxbNBbNBbNBbNBbNBbNBbNBbNCbPybFeaaiaaibIlbbiaZhbPzbPAbPBbPCbPDbPEbPFbPGbPHbPIbPJbDxbPKbNKbPLbLObPMbPNbPObPObPPbPQbPRbLOaafaVeaVObClbPSbPTbDMbPUbPVbDMbDMbDMbDMbPWbClbPXbPYbPZbQabQbbQcbQbbQcbQdbQebQfbQfbQgbQhbbyaPQbQiaOKaaibKpbQjbQkbQlbMibQmbQnbQobQpbQqbQrbQsbQtbQubQvbIZbQwbOubQxbQybJdbJdbJdbJdbJdbQzbQAbQBbQBbQBbQBbQBbQCbQDbQCbQCbQCbQCbQCbQEbQFbQGbQHbQIbQIbQIbJlbJlbZGbQKbQLbZGbJlbJlaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafbMXbQMbOXbOYbOYbQNbMXbNdaaiaaiaafaafbrmbQObGqbQPbrmbrmbrmbrmbrmbrmbrmbrmbrmbrmbrmbrmbrmbrmbrmbQQbQQbQRbQSbQQbQTbQUbQVbQWbQXbQYbQZbRabRbbQXbQXbQXbQXbQXbFebRcbRdbRebNBbNBbRfbRgbRhbNCbRibFeaaiaaibIlbbiaZhbRjaXOaXObDxbDxbDxbDxbDxbRkbDxbDxbDxbRlbRmbRnbLObRobRpbRqbRrbLObRsbRtbLOaafaVeaVObClbDPbRubClbClbRvbRwbRwbRwbRwbClbClbRxbPZbPYbRybRzbPZbPYbPZbRAbRBaPQaPQaPQaPQbRCbRDbREaOKaaibKpbRFbRGbRHbRGbRIbQnbRJbRKcRbbRMbRNbRObRPbRQbIZbRRbRSbRTbRUbRVbRWbRXbRYbRZbSabSbbScbSdbSebSfbQBbSgbShbSibSjbSkbSlbQCbSmbSnbQGbSobSpbSqbQGaafaafbZGbSrbSsbZGaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafbJrbLjbLkbLlbStbLlbLkbLjbJraaiaaiaafaafbrmbrmbGqbrmbrmaafaafaafaafaafaafaafaafaafaafaafaafaafaafbQQbSubSvbSwbSxbQQbSybSzbSzbSAbSBbSCbSDbSEbSFbSGbSHbSIbSJbFebSKbSLbSMbNBbNBbSNbSLbSObNCbSPbFeaaiaaibIlbbiaZhaVGbSQaaibSRbSSbSTbSUbSVbSWbSXbSYbSRbSZbTabTbbLObLObTcbLObLObLObLObLObLOaafaVeaVOaVebTdbTebTfbTgbThbThbThbThbThbTibTjbPZbPYbTkbTlbTmbTnbPZbPYbTobTpaPQaPQbTqbTrbaBaPQbTsaOKaaibKpbTtbTubTvbTwbTxbTybTzbTAbTBbTCbTDbQubTEbTFbIZbIZbIZbIZbIZbRVbTGbTHbTIbTJbTKbTLbTMbTNbTObTPbQBbTQbTRbTSbTTbTTbTUbQCbTVbTWbQGbTXbTYbTZbQGaafaafbZGbUabUbbZGaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafbJrbJsbUcbUdbUebUfbUgbJtbJraaiaafaafaafaafbrmbGqbrmaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbQQbUhbUibUjbUkbUlbUmbUnbUobUpbUqbUrbUsbUtbUubUvbUvbUwbUxbUybUzbUAbUzbUBbUBbUzbUCbUzbUDbUzbUyaaiaaibIlbUEaZhaVGaWEaaibUFbUGbUHbUIbUGbSWbSWbUJbUKbULbUMbTbblubUObUPbUQbuwbUSbUTbQJbLOaafaVebUVbUWbUXbUYbUZbVabVbbVcbVdbVcbVbbVcbUZbPYbPZbVebVfbTlbVgbPYbPZbVhbVibOdbOeaOKbFJbiVbFJaOKaOKaaibKpbVjbVkbKpbVjbVkbKpbKpbKpbIUbVlbVmbVnbIUbIUbIUaafaafaafaafbRVbVobVpbVqbRZbVrbVsbScbVtbVubVvbQBcYzbVxbVybVzbVAbVBbQCbVCbVDbVEbVFbVGbQGbQGaafaafbZGbVHbVIbZGbZGaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaaiaaibVJbVKbVLbVMbVJaaiaaiaaiaafaafaafaafbrmbGqbrmaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbQQbVNbVObVPbVQbVRbVSbVTbVUbVVbVWbVXbVYbVZbWabWbbWcbWdbWebUybWfbWgbWhbWibWibWfbWgbWfbWjbWkbUyaaiaaibIlbWlbeHbWmaWEaaibWnbWobWpbWqbWrbWsbWtbWubSRbWvbWwbWMbWybWybWzbWAbWBbWCbWCbUNbLOaafaVebWEaVebWFbPZbPYbUZbWGbUZbWGbUZbWGbUZbWHbPZbPYbTkbWIbTmbTnbPZbPYbWJbViaaiaaiaOKbWKbbybWLaOKaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaibIUbXAbWNbIUbIUaafaafaafaafaafaafbRVbRVbRVbRVbRVbWObWPbQBbQBbQBbQBbQBbQCbQCbQCbQCbQCbQCbQCbWQbWRbQGbQGbQGbQGaafaafaafbZGbWSbWTbWUbZGaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaibWVbWWbWXbWYbWVaaiaaiaaiaafaafaafaafbrmbWZbrmaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbQQbXabXbbXcbXdbXebXfbWdbXgbXhbXibXjbXkbXhbXgbWdbWdbWdbXlbUybXmbXnbXmbXobWibXmbXnbXmbWjbWkbUyaaiaaibXpbbibBRbXqaWEaaibXrbXsbXtbXubXvbSWbXwbXxbXybWvbXzbYQbXBbXCbXDbXEbXFbXGbXHbXIbLOaafaVebWEaVeaVebPYbPZbPYbPZbPYbPZbPYbPZbPYbPZbXJbPZbPYbXKbRxbXLbPYbPZbRxbXMbXNaaibHnaPQbbyaPQbHnaaibXObXObXObXObXObXObXObXObXOaaibXPbXQbXRbXPaawaawaawaawaawaawaafbXSbXTbXUbXVbXWbSabSbbXXbXYbXZbYabYbaafaafaafaafaafaafbYcbYdbYebYfbYgbYcaafaafaafaafbZGbYhbYibYjbZGaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaibYkbYlbYmbYkbYkaaiaaiaafaafaafaafaafbYnbYobYnaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbQQbYpbYqbYrbYsbQQbYtbYubYubYubYvbYwbYxbYybYubYubYubYzbYAbUybYBbWibWibYCbYDbYEbYEbYEbYFbYGbUyaaiaaibYHbbiaZhaVGbYIaaibYJbUGbYKbYLbYMbSWbYNbYObSRbWvbYPcuebYRbYRbYSbYTbYUbWCbWCbYVbLOaafaVebWEbYWaVebYXbPYbPZbPYbPZbPYbPZbPYbPZbPYbPZbPYbPZbYYbYZbZabZbbZcbZdbZeaaiaaibplaPQbbybZfbplaaibXObZgbZhbZibZjbZkbZlbZmbXOaaibZnbZobZpbZqaawbZrbYcbYcbYcaawaafbXSbZsbZtbZubZvbZwbZxbZybZzbZAbZBbYbaafaafaafaafaafaafbYcbZCbZDbZEbZFbYcaafaafaafaafbZGbZHbZIbZJbZGaafaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaibZKbZLbZMbZNbZKaaiaaiaafaafaafaafaafbYnbYobYnaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbQQbZObZPbZQbZRbQQbZSbZTbZUbZVbZWbZXbZYbZZcaacabcaccadcaebUybXmbXnbXmcafbWibXmbXnbXmcagcahbUycaicajbbkcakcalcambbkaaibSRcanbSWcaocapcaqcarbSRcascatcaucasbLOcavcawcaxcaycazcaAcaBbLOaafaVebWEaVNaVecaCbPZbPYbRybRzbPZbPYbPZcaDbRybPYbPZbPYcaEbRzcaFbPYbPZcaGbZeaaiaaibplcaHbeaaPQbplaaibXOcaIcaJcaKcaLcaMcaNdlXbXOaaicaPcaQcaRbZqaawcaScaTcaUbYcaawaafbXScaVcaWcaXbXWcaYcaZbXXcbacbbcbcbYbaafaafaafaafaafaafbYcbYdbYcbYcbYcbYcaafaafaafaafbZGcbdcbecbfcbgcbhcbiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaaiaaibVJcbjcbkcblbVJaaiaaiaafaafaafbYnbYnbYnbYobYnaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbQQbQQcbmcbnbQQbQQbQXbQXbQXbQXbQXcbobQXbQXbQXcbpcbqcbrbQXbUybWfbWfbWfbWibWibWfbWfbWfcagcbscbtcbubbibbibbiaZhaVGbbkaaibSRbSRbSRbSRbSRbSRbSRbSRcbvcbwcbxcbybLObLOcbzbLObLObLOcbAbURbLOcbCaVecbDaVeaVecbEbPYbTkcbFbTmbTncbGcbHbTmbTlcbIcbJbTkbTlbVfcbKbPZbPYcbLbZeaaiaaibplaPQbbyaPQbtIaaibXOdmTcbNcbOcbPbXOcbQdnPbXOaaicaPcbScbTbZqaawcaTcaTcbUbYcaawaafbXSbXSbXSbXSbXScbVcbWbYbbYbbYbbYbbYbaafaafaafaafaafaafbYcbYdbYcaafaafaafaafaafaafaafbZGcbXcbYcbZccaccbcccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabxbjIbmBbmCbmCbjIbmDbmEbmFbmGbmHbmIbmJbmKbmLbmMbmNbmObmPbmQbmRbmSbmTbmSbmUdIEdIVbmXdIFbaZblvblwblxbiGbiGblyblzblAbiGblBblCblCblDblEblFblGbiHaaiaaiaWEaVGaZhblHbbkbkdbkdblIblJbblaafaafaafbhrbhrblKblLblMblNblOblNblPblQblRbhrbhraafaafaVeaVOaVeaaibawbbpbdPbdQaYjaYjbdcbddaYjaYjaYjaYjaYjbbrbcgaYjaYjaYjbciblSbawaaiaXeaYsblTblUaOKaafaafbckbecblVbeeblWblXblYblZbmabmbbmcbembfhbmdbmebepbmfbmgbmfbepbmhbmibmjbmkbeqbdwbmlbmmbmnbmlbmmbIZbIZbIZbIZbIZbIZbIZbIZaXCaVnaafbdzbmpbmqbmrbicbmsbjxbmtbmubmvbmwbjEbjybicbjAbjEbmxbmybmsbmzbmAbdzaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXNabxblmbokbmCbmCbolbombonboobopboqborbosbotboubovbowboxboybozboAboBboCboDboEboFdIWbdDbfGbmZbnabnabnabnbbiGbiGbncbiGbiGbndbnebnfbnfbnfbngbnhbiHaaiaaiaWEaVGaZhbcLbbkbblbblbblbblbblaafaafaafbhrbhrbnibnjbnkbnlbnlbnlbnkbnjbnmbhrbhraafaafaVeaVOaVeaaibbobbpbdWbnnaYjbbqaYjbdcbbsaYjaYjaYjbbtbcgaYjbbqaYjbiTbnoblSbboaaiaYraUuaUvaPRbnpaaiaafbckbnqbnrbeebnsbntbnubnvbnvbnwbnxbnybnzbnAbnAbnBbnCbnDbnCbnEbnCbnFbnGbnHbnIbnJbnKbnHbnLbnMbnNbIZbnObmobnQbnPbnRbnRbIZaXCaVnaafbdzbnUbnVbnWbdzbnXbnYbnZbdzboabobbocbocbodboebocbofbogbohbmzboibdzaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaaaaaaaayaazaayaayaayaayaayaayaayaazaayaayaayaazaayaayaayaayaaaaaaaayaayaayaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabojaaeaaiabxbjIbpYbmCbmCbjIbpZbqabqbbqcbqdbqebqfbikbikbltbikbfEbfEbfEbfEbfEbfEbfEbfEbfEdITbcEbfGboHboIboJbnaboKbjSboLboMboNboOboPboQboRboSboTboUboVbiHaaiaaiaWEboWboXboYaVFaaiaaiaaiaaiaaiaaiaafaafbhrboZbpabnjbnkbpbbpcbpbbnkbnjbpdbpebhraafaafaVeaVOaVeaaiaZsbpfbpgbdWbnnaYjaYjaYjaYjaYjaYjaYjaYjaYjaYjaYjbiTbdSbphbpiaZsaaiaOKbpjaUvbpkbplaaiaaibckbdhbiXbpmbckbpnbpobppbpqbprbjebpsbptbpubpvbpwbpxbpybpxbpxbpxbpzbpAbpBbpCbpDbpEbpDbpFbpDbpDbnSbpGbnTbpHbQxbpIbOubIZaXCaVnaafbdzbmpbpMbmrbicbjAbpNbpObpPbpQbjEbjEbpRbicbpSbjEbpTbpUbjAbmzbpVbdzaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaaaaaaaayaaaaaeaaaaaaaaaaaaaaeaaeaaaaaaaaeaaeaaaaaeaaeaaeaaaaaeaaeaaeaaaaayaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabpWaaiaaibpXblmblnbrubrvblmbrwblqbikbikbikbrxblqbikbiybvSbjQbfEbgTbgUbgVbgWbgXbgYbgZbfEdIXbcEbqhbaZbqibqjbqkbqkbqlbqmbqnbqoboObqpboQbqqbqrbqsboUbqtbquaaiaaiaWEaVGaZhbeIaWEaaiaaiaaiaaiaaiaaiaafaafbhrbhrbnibnjbqvbnlbqwbnlbnkbnjbnmbhrbhraafaafaVeaVOaVeaaiaVPbawaYebqxbdWbnnbqybcXbqzaYjaYjaYjbqybcXbqzbiTbdSbphaYebawaVPaaiaVWaUubbyaPRbplaaiaaibckbckbqAbckbckbjebjebjebqBbqBbqBbqBbqCbqDbqBbqBbqEbqFbqGbqHbqHbqIbqJbqFbqKbqLbqMbpJbqObqPbqQbIZbmobpKbqNbpLbqSbqRbIZaXCaVnaafbdzbqWbqXbkYbqYblabqZblabrabjEbrbbjEbrcbdzbrdbfCbrebrfbrgbrhbribdzaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaXDaaaaaaaayaaabrjbrkbrlaaabrjbrkbrlaaabrjbrkbrlaaabrjbrkbrlaaabrjbrkbrlaaaaayaaeaaeaaaaaaaaaaaaaaaaaabrmbrnbrobrpaaaaaabrqbrrbrsbrqbrqbrtbjGbjHbjIbjHbjGbikaaiaaiaaiaaiaaiaaibrmbsZbrzbtabfEbipbiqbirbisbitbiubivbiwdIZdIYdJabmZbrEbrFbrGbnabrHbbLbrIbrJbrKbrLbrMbrNbrNbrNbrObrPbrQaaiaaiaWEaVGaZhbeIaWEaaiaaiaaiaaiaaiaafaafaafbhrbhrbrRbrSbrTbnlbnlbnlbrUbrVbrWbhrbhraafaafaVeaVOaVeaaiaaiaYqaXdaYebqxbdWbrXbrYbrZbdabdabdabrXbrYbrZbdSbphaYeaWPaYdaaiaaiaXebaAbaBbsabplaaiaaibsbbscbsdbsebsfbsgbshbsibqBbsjbskbslbsmbsnbsobspbsqbsrbssbstbsubsvbqJbqTbsxbsybszbsAbsBbsybsAbIZbqVbqUbOubswbOubOubIZaXCaVnaafbdzbdzbfybsIbicbmsbsJbjEbjxbjEbjEbrhbsKbdzbsLbsMbsNbsObpRbsPbdzbdzaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaXDaXDaXDaXDaXDaXDaXDaXDaXDaaaaaaaaaaaaaayaaebrjbsQbrlaaebrjbsQbrlaaebrjbsQbrlaaebrjbsQbrlaaebrjbsQbrlaaeaazaaaaaeaaeaaaaaaaaaaaaaaabrmbrmbsRbsSbrmbsTbsUbsVbsWbsXbsYbikbikabxabxbilbikbikcxVcxVaaiaaiaaiaaibrmbrmbrzbuJbfEbjKbjLbgVbjMbjNbjObjPbfEdJbbtcbtdboHbtebtfbtgbthbmZbtibtjbtkbtlbtmbtnbtobtpbtqbtrbtsbiHaaiaaiaWAaVGbttbeIaWAaaiaaiaaiaafaafaafaafaafaafbhrbhrbtubrSbtvbtwbtxbtybtzbhrbhraafaafaafaVeaVOaVeaaiaaiaaiaYqaVSbaxbdUbdUbtAbtBbtCbtDbtCbtEbtFbdUbdUbtGaVQaYdaaiaaiaaiaYraUubtHaPRbtIaaiaaibtJbtKbsdbtLbtMbtNbtObtPbqBbtQbtRbtSbtTbtTbtUbtVbtWbtXbtYbtZbtZbuabubbucbudbuebufbugbuhbuibujbIZbsDbsCbsFbsEbsEbsGbIZaXCaVnaafaafbdzbdzbdzbdzbuqburbusbjxbutbuubuvbdzbdzbiebdzbuxbuybuzbdzbdzaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaXDaXDaXDaXDaXDaXDaXDaaaaaaaaaaaaaaaaayaaabrjbsQbrlaaabrjbsQbrlaaabrjbsQbrlaaabrjbsQbrlaaabrjbsQbrlaaaaaeaaaaaaaaeaaeaaaaaaaaaaaabrmbuAbuBbuCbrmbuDbuEbuFbuGbuHbuIdIScxVaaiaaiaaiaaicxVcxVaaiaaiaaiaaiaaiaaibrmbrzdIRbfEbfEbfEbfEbfEbfEbfEbfEbfEdJcbuMbuNbaZbuObuPbuQbuRboHbuSbrIbqhbrKbuTbuUbuVbiHbuWbuXbuWbiHaaibbkbbkbiIbiJbiKaXOaaiaaiaafaafaafaafaafaafaafbhrbhrbhrbuYbuZbvabvbbvcbhrbhrbhraafaafaVeaVeaVOaVeaVeaaiaaiaaiaVPaVQaVRaVSaVPaVPaVQaVRaVSaVPaVPaVQaVRaVSaVPaaiaaiaaiaaiaOKaVkbiVaVmaOKaOKaaibvdbvebvfbtNbvgbvhbvibvjbqBbvkbvlbvmbvnbtTbtTbvobnHbvpbvqbqLbqLbvrbqJbvsbvtbvubvvbvwbvxbvybvzbIZbIZbIZbIZbsHbIZbIZbIZaXCaVnaafaafaafaafaafbdzbvBbvCbdzbvDbdzbvBbvEbdzbvFbvGbdzbvHbvIbdzbdzaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayaaabrjbsQbrlaaabrjbsQbrlaaabrjbsQbrlaaabrjbsQbrlaaabrjbsQbrlaaaaaeaaaaaaaaaaaeaaeaaaaaaaaabrmbvJbvKbvLbrmbvMbvNbvObvPbvQbvRbrqaafaafaafaaiaaiaaiaaiaaiaaiaaiaaiaafaafbrmbvSbuKbuKbvTbvUbvVbvWbvXbvYbvZbuKdJdbwbbwcbaZbwdbwebwfbwgbaZbwhbrIbwibwjbwjbwjbwjbwjbwkbwlbwmbwjbcJbbkbwnaVGaZhbwoaXOaVeaafaafaafaafaafaafaafaafaafbhrbhrbhrbwpbhrbhrbhrbhrbhraafaafaVeaVeaVNaVOaVNaVeaVeaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaVeaOKaUubwqbgibwraOKbwsbwtbwubwvbwwbwxbwybukbwAbwBbwCbwDbwEbwFbtTbwGbqBcsVbqFbwIbwJbwKbwLbwMbwNbwObwPbwQbwRbwSbwTbwUbwVbulbwZbumbwZbwZbunbwVaXCaVnaafaafaafaafaafbdzbxcbxdbxebxfbxgbxhbxibxjbxkbxlbdzbxmbxnbxobdzaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayaayaayaaeaaabrjbsQbrlaaabrjbsQbrlaaabrjbsQbrlaaabrjbsQbrlaaabrjbsQbrlaaaaaeaaaaaaaaaaaaaaebxpbxqbxqbxqbxqbxrbrmbrmbrqbxsbxtbxubxvbxwbrqaafaafaafaafaaiaaiaaiaaiaaiaaiaafaafaafbrmbvSbuKbxxbxybxzbxAbxBbxCbxDbxEbxFdJebxHbxIbxJbxKbxLbxMbxNbxObxPbxQbxRbxSbxTbxUbxVbxSbxWbxXbxYbxZbyabybbbiaWBbeHbeIbycaVeaVeaVeaVeaVeaVeaVeaVeaVeaVeaafaafbydbyebydbydaVeaVeaVeaVeaVeaVebyfbygbyhbyiaVNaVeaVeaVeaVeaVeaVeaVeaVeaVeaVeaVeaVeaVeaVeaVeaVeaVeaVeaVeaVeaVeaVebyjbykbylbymaPQbynbyobypbtNbyqbtNbyrbvhbysbytbspbyubyvbywbyxbyybyzbspbyAbyBbnMbyCbyCbyDbqJbyEbudbyFbyGbyHbvybyIbyJbwVbwVbwVbwVbuobwVbwVbwVbyOaVnaafaafaafaafaafbdzbdzbyPbyQbyRbySbyTbyUbyVbyWbyXbyYbyZbzabzbbdzaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayaaaaaeaaaaaaaaebzcaaeaaaaaebzcaaeaaaaaebzcaaeaaaaaebzcaaeaaaaaebzcaaeaaaaaeaaaaaabzdbzebzebzfbzgbzhbzibzjbzkbzlbzmbrqbznbzobzpbzqbzrbrqaafaafaafaafaafaaiaaiaaiaaiaafaafaafaafbrmbvSbuKbzsbxzbztbzubzvbzwbzxbzwbzybzzbzAbzBbzCbhebzDbhebzEbhebhebzFbzGbzHbzIbzJbzKbzLbzMbzNbzObzPbzQbzRbzSbzTbzUbzVbzWbzXbzYbzZbzZbzZbzZbAabzZbAbaVeaVeaVeaVebAcaVeaVeaVebAdbAebAebAebAebAebAfbAgbAhbAibAibAibAibAibAibAibAjbAibAibAibAkbAlbAlbAlbAlbAlbAlbAlbAlbAmbAlbAnbAobApbAqbAraYvbAsbAtbAubAvbAwbtLbAxbtNbAybAzbtVbAAbupbACbADbAEbAFbtVbAGbAHbAIbAJbAJbAKbALbAMbvtbANbAObAPbAQbARbwVbwVbwzbvAbwXbwWbxabwYbwVbyOaVnaafaafaafaafaafaafbdzbdzbdzbAWbAXbdzbdzbdzbdzbdzbdzbAYbAZbdzbdzaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayaaebBabBbbBbbBbbBcbBbbBbbBbbBcbBbbBbbBbbBcbBbbBbbBbbBcbBbbBbbBbbBcbBbbBbbBbbBbbBdbBebBfbBgbBhbBibBjbBkbBlbBmbBnbBobrqbrqbBpbrqbrqbBqbrqaafaafaafaafaafaafaafaaiaaiaafaafaafaafbrmbvSbuKbBrbBsbBtbBubBvbBwbBxbBybuKbBzbBAbBBbBCbBDbBEbBFbBGbBHbBIbBJbBKbwjbBLbBMbBNbBObBPbBQbxYbxZbyabybbbibbibBRbBSbBTaVebBUbBVbBWbBXbBYbBZbCabCbbCcbCdbCebCfbCgbzZbzZbzZbChaVeaVeaVeaVeaVNbCibCjbCkbClbClbClbClbClbClbClbCmbClbClbClbCnbCobCobCobCobCobCobCobFpbfYbhtaVebCqaUubbybCraQIbCsbCtbCubCvbCwbCxbCybCzbCAbCBbqBbqCbqDbCCbqCbCDbqDbqBbCEbqFbwIbwJbwKbCFbqJbCGbsxbCHbCIbsxbwVbwVbwVbCJbyKbxbbxbbCNbwZbyLbwVbyOaVnaafaafaafaafaafaafaafbdzbCObCPbCQbdzaafaafaafaafbdzbdzbdzbdzaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayaaaaaeaaaaaaaaebzcaaeaaaaaebzcaaeaaaaaebzcaaeaaaaaebzcaaeaaaaaebzcaaeaaaaaeaaaaaabzdbzebzebCRbCSbCTbCUbxqbCVbCWbCXbvSbvSbCYbCZbrmbDabrmaafaafaafaafaafaafaafaafaafaafaafaafaafbrmbvSbuKbDbbDcbDdbDebDfbDgbDhbDibuKbDjbcEbDkbDlbDmbDnbDobDpbDlbDqbDrbDqbwjbwjbwjbwjbwjbDsbDtbDubwjbcJbbkbDvbbiaZhbDwaXOaVebDxbDxbDxbDxbDxbDxbDybDzaVebDAbDBbDAaVebDCbDDbDEbDFaVeaafaafaVeaVeaVNaVOaVNbDGbDHbDIbDJbClbDKbDLbDMbDNbDObDPbDQbDRbDSbDTbDSbDUbFIbFHbHlbCobCobCoaOKbDXbeaaPQbDYaOKbwsbwtbDZbyqbEabEbbEcbEdbCvbEebEfbEgbEhbEibEjbEkbElbEmbEnbEobEpbEpbEqbErbqFbnIbyCbyCbyMbwVbEwbExbEybABbAVbATbECbwZbyNbwVaXCaVnaVnaafaafaafaafaafaafbdzbEDbEEbEFbdzaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayaayaayaaeaaebrjbEGbrlaaabrjbEGbrlaaabrjbEGbrlaaabrjbEGbrlaaabrjbEGbrlaaaaaeaaaaaaaaaaaaaaabEHbxqbxqbxqbxqbrmbrmbEIbEJbBnbEKbELbEMbENbrmaafaafaafaafaafaafaafaafaafaafaafaafaafbrmbvSbuKbuKbuKbEObEPbEPbEPbuKbuKbuKbEQbERbwhbESbETbEUbEVbEWbDlbEXbEYbEZbFabFbbFcbFdbFebDqbFfbDqbFeaaibbkbbkbFgaZhbbibFhbFibDxbFjbFkbFlbFmbDxbDxbDxbDxbFnbFobTbbFqbFqbFrbFsbFqbFtaafaafaafaVeaVeaVObClbClbFubFvbFwbClbFxbFybFzbFzbFzbFAbFBbFCbFDbFDbFEbFFbFFbFGbRLcaObVwcbMaOKaVkbiVbFJaOKaOKaaibvdbFKbFLbAvbFMbFNbFObAvbFPbFQbFRbFSbFTbFUbFTbFVbFWbFWbFXbFWbFWbFYbFZbGabGbbASbFTbAUbwVbGfbGgbGhbCLbCKbEBbGibwZbyNbwVbGjbGkaVnaafaafaafaafaafaafbdzbGlbGmbGnbdzaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrjbEGbrlaaabrjbEGbrlaaabrjbEGbrlaaabrjbEGbrlaaabrjbEGbrlaaaaaeaaaaaaaaaaafaafaafaafaafaafaafaafbrmbrmbrmbrmbrmbGobGpbGqbrmaafaafaafaafaafaafaafaafaafaafaafaafaafbrmbvSbuKbGrbEPbEObEPbEPbEPbEPbGsbuKbGtbcEbGubGvbGwbGxbGybGzbDlbGAbGBbGCbGDbGDbGEbGDbGFbGGbGHbGIbGJaaiaaibGKbbibGLbbibGMbFibGNbGObGPbGPbGQbGRbGSbGTbDxbGUbGVbGWbFqbGXbGYbGZbFqaafaafaafaafaVeaVNaVObClbHabHbbHcbHdbClbHebHfbHgbDMbDMbHhbHibHjbHkbHkbHkbHkbHkbFFcbRbHmcebcqHbHnaUubHoaPQbnpaaiaaibsbbtKbtNbtNbHpbHqbtNbtNbHrbHsbHtbHubvqbHvbHwbHxbqLbHybHzbCMbHBbEsbEtbHEbHFbHGbHHbHIbHJbHKbHLbHMbHNbHRbHPbHQbHRbHSbwVbdxbdyaVnaafaafaafaafaafaafbdzbdzbHTbHUbdzaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaabrjbEGbrlaaabrjbEGbrlaaabrjbEGbrlaaabrjbEGbrlaaabrjbEGbrlaaaaayaaaaaaaafaafaaiaaiaaiaaiaaiaaiaaiaaiaafaafaafbrmbrmbHVbGqbrmaafaafaafaafaafaafaafaafaafaafaafaafbrmbrmbvSbuKbHWbEPbHXbHYbEPbEPbEPbGsbuKbHZbrCbIabIbbIcbIdbIebIfbDlbFebIgbIhbGDbGDbGDbGDbIibGDbGDbIjbIkaaiaaibIlbbiaZhbbibImbFibInbIobIpbIqbIrbIpbIpbIsbDxbItbIubIvbFqbIwbIxbIybFqaafaafaafaafaVebIzaVObClbHabIAbIBbICbClbIDbIEbIFbDMbIGbIHbIIbIJbHkbHkbHkbHkbHkbFFbIKbILczYcAdbplbIMbwqbINbplaaiaaibtJbIObIPbIPbIQbIRbISbITbIUbIUbWxbIWbIXbIYbIUbEubEzbEvbEAbEubEubEubEubEubEubJebJfbJgbJhbwVbwVbwVbwVbwVbwVbwVbwVbwVbwVbJibJjaVnbJkbJlbJlbJlbJlbJlbJmbJnbJobJpbKZbJlaafaafaafaafaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayaaebrjbEGbrlaaebrjbEGbrlaaebrjbEGbrlaaebrjbEGbrlaaebrjbEGbrlaaeaayaaabJqaafbJrbJrbJsabxabxabxbJtbJrbJraaiaafaafaafbrmbJubGqbrmaafaafaafaafaafaafaafaafaafaafaafaafbrmbJvbvSbuKbJwbJxbJybEPbJzbEPbJAbuKbuKbJBbcEbGubDlbJCbJDbJEbJFbJGbFebJHbJIbJJbGDbGDbGDbIibJJbGDbJKbIkaaiaaibIlbJLbeHbbibImbFibJMbJNbIpbJObJPbJQbJRbJSbJTbJUbJVbJWbJXbJYbJZbKabFqaafaafaafaafaVeaVeaVObClbClbKbbClbClbClbKcbKdbKebKfbIGbKgbKhbKibKjbKkbKlbKmbFFbFFbKnbILcIBcIGbtIbKobeaaPQbtIaaiaaibKpbKqbKrbKsbKtbKpbKpbKpbKpbKubKvbKwbKxbKybKxbGcbGebGdbHCbHAbHObHDbJbbJabJcbKHbKIbKJbKKbKLbKMbKNbKObKPbKQbKRbKSbKTbKUbKVbKWbKXbKYbKZbLabLbbLcbLdbLebLfbLgbLfbLhbJlaafaafaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazaaabrjbLibrlaaabrjbLibrlaaabrjbLibrlaaabrjbLibrlaaabrjbLibrlaaaaaeaaebJqaafbJrbLjbLkbLlbLkbLlbLkbLjbJraaiaaiaafaafbrmbLmbGqbrmbrmaafaafaafaafaafaafaafaafaafaafaafbrmbLnbvSbuKbuKbuKbuKbuKbuKbuKbuKbuKbLobLpbcEbwhbESbLqbLrbLsbJFbLtbFebLubLvbLwbLxbLybLzbLAbLwbLBbLCbLDaaiaaibIlbbibBRbBSbImbLEbDxbLFbIpbLGbLHbLIbLJbLKbDxbLLbLMbLNbLObLObLObLObLObLObLObLOaafaafaVeaVObClbLPbLQbLRbLSbLTbDMbDMbLUbDMbLVbClbLWbLXbLYbLZbMabFFbMbbMcbMdbMecQQcQWaOKbMfbbybMgaOKaaiaaibKpbMhbMibMjbMkbMlbMmbMnbMobMpbKvbKwbMqbMrbMsbEubKAbKzbKBbKzbKFbKCbMtbKGbMubKHbMvbMDbMEbMFbMFbMGbMHbMCbMFbMIbMFbMJbMKbMLbMMbMNbMObMPbMQbMQbMRbMQbMSbMTbMUbMVbMWbJlaafaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayaaaaaeaaaaaaaaaaaeaaeaaeaaaaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaeaaaaaeaaeaafaafaafbMXbMYbMZbNabNbbNcbMXbNdaaiaaiaafaafbrmbNebGqbNfbrmbrmbrmbrmbrmbrmbrmbrmbrmbrmbrmbrmbrmbNgbNhbNibNjbNkbNlbxKbNmbNnbNobNpbNqbNrbNsbGubGvbGwbNtbNubJFbNvbFebNwbNxbNybNzbNzbNAbNBbNybNCbNDbFeaaiaaibIlbbiaZhbbibNEbFibDxbNFbIpbNGbNHbIpbLJbNIbDxbNJbNKbNLbLObNMbNNbNObNPbLObNQbLObLOaafaVeaVObClbNRbNSbNTbNTbNUbNTbNTbNVbDMbNWbClbNXbNYbNZbOabObbOcbNXbNYbNZbCobNXbNZaOKaVkbiVbFJaOKaOKaaibKpbOfbOgbOhbOibOjbOkbOlbOmbOnbOobOpbOqbOrbOsbEubMwbKzbMAbMxbOtbMBbOwbOvbQwbOAbOBbOCbODbOEbOFbOGbOHbOIbOEbOJbOKbOLbOMbKVbONbOObOPbKZbLabOQbORbMVbOSbOTbOUbMVbOVbJlaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaayaayaayacvacvaazaayaaeaaeaaeaayaaeaaeaaeaaeaaaaaaaaaaaeaaeaaeaazaaeaaaaafaafaafbLlbOWbOXbOYbOYbOZbLlaaiaaiaaiaafaafbrmbPabPbbPcbPcbPcbPdbPcbPcbPcbPcbPcbPcbPcbPcbPcbPcbPebPfbPgbPhbPibPjbPkbPlbPmbPnbPobPpbPqbPrbwhbIbbPsbPtbPubPvbPwbFebPxbNBbNBbNBbNBbNBbNBbNBbNCbPybFeaaiaaibIlbbiaZhbPzbPAbPBbPCbPDbPEbPFbPGbPHbPIbPJbDxbPKbNKbPLbLObPMbPNbPObPObPPbPQbPRbLOaafaVeaVObClbPSbPTbDMbPUbPVbDMbDMbDMbDMbPWbClbPXbPYbPZbQabQbbQcbQbbQcbQdbQebQfbQfbQgbQhbbyaPQbQiaOKaaibKpbQjbQkbQlbMibQmbQnbQobQpbQqbQrbQsbQtbQubQvbEubRibQybKzbRRbEubEubEubEubEubQzbQAbQBbQBbQBbQBbQBbQCbQDbQCbQCbQCbQCbQCbQEbQFbQGbQHbQIbQIbQIbJlbJlbZGbQKbQLbZGbJlbJlaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafbMXbQMbOXbOYbOYbQNbMXbNdaaiaaiaafaafbrmbQObGqbQPbrmbrmbrmbrmbrmbrmbrmbrmbrmbrmbrmbrmbrmbrmbrmbQQbQQbQRbQSbQQbQTbQUbQVbQWbQXbQYbQZbRabRbbQXbQXbQXbQXbQXbFebRcbRdbRebNBbNBbRfbRgbRhbNCbRSbFeaaiaaibIlbbiaZhbRjaXOaXObDxbDxbDxbDxbDxbRkbDxbDxbDxbRlbRmbRnbLObRobRpbRqbRrbLObRsbRtbLOaafaVeaVObClbDPbRubClbClbRvbRwbRwbRwbRwbClbClbRxbPZbPYbRybRzbPZbPYbPZbRAbRBaPQaPQaPQaPQbRCbRDbREaOKaaibKpbRFbRGbRHbRGbRIbQnbRJbRKcRbbRMbRNbRObRPbRQbEubRUbRTbRZbRYbEubKDbKEbTGbVBbSabSbbScbSdbSebSfbQBbSgbShbSibSjbSkbSlbQCbSmbSnbQGbSobSpbSqbQGaafaafbZGbSrbSsbZGaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafbJrbLjbLkbLlbStbLlbLkbLjbJraaiaaiaafaafbrmbrmbGqbrmbrmaafaafaafaafaafaafaafaafaafaafaafaafaafaafbQQbSubSvbSwbSxbQQbSybSzbSzbSAbSBbSCbSDbSEbSFbSGbSHbSIbSJbFebSKbSLbSMbNBbNBbSNbSLbSObNCbSPbFeaaiaaibIlbbiaZhaVGbSQaaibSRbSSbSTbSUbSVbSWbSXbSYbSRbSZbTabTbbLObLObTcbLObLObLObLObLObLOaafaVeaVOaVebTdbTebTfbTgbThbThbThbThbThbTibTjbPZbPYbTkbTlbTmbTnbPZbPYbTobTpaPQaPQbTqbTrbaBaPQbTsaOKaaibKpbTtbTubTvbTwbTxbTybTzbTAbTBbTCbTDbQubTEbTFbEubEubEubEubEubEubXSbMybMzbXTbTKbTLbTMbTNbTObTPbQBbTQbTRbTSbTTbTTbTUbQCbTVbTWbQGbTXbTYbTZbQGaafaafbZGbUabUbbZGaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafbJrbJsbUcbUdbUebUfbUgbJtbJraaiaafaafaafaafbrmbGqbrmaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbQQbUhbUibUjbUkbUlbUmbUnbUobUpbUqbUrbUsbUtbUubUvbUvbUwbUxbUybUzbUAbUzbUBbUBbUzbUCbUzbUDbUzbUyaaiaaibIlbUEaZhaVGaWEaaibUFbUGbUHbUIbUGbSWbSWbUJbUKbULbUMbTbblubUObUPbUQbuwbUSbUTbQJbLOaafaVebUVbUWbUXbUYbUZbVabVbbVcbVdbVcbVbbVcbUZbPYbPZbVebVfbTlbVgbPYbPZbVhbVibOdbOeaOKbFJbiVbFJaOKaOKaaibKpbVjbVkbKpbVjbVkbKpbKpbKpbIUbVlbVmbVnbIUbIUbIUaafaafaafaafbJdbOxbOybOzbVBbVrbVsbScbVtbVubVvbQBcYzbVxbVybVzbVAbXUbQCbVCbVDbVEbVFbVGbQGbQGaafaafbZGbVHbVIbZGbZGaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaaiaaibVJbVKbVLbVMbVJaaiaaiaaiaafaafaafaafbrmbGqbrmaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbQQbVNbVObVPbVQbVRbVSbVTbVUbVVbVWbVXbVYbVZbWabWbbWcbWdbWebUybWfbWgbWhbWibWibWfbWgbWfbWjbWkbUyaaiaaibIlbWlbeHbWmaWEaaibWnbWobWpbWqbWrbWsbWtbWubSRbWvbWwbWMbWybWybWzbWAbWBbWCbWCbUNbLOaafaVebWEaVebWFbPZbPYbUZbWGbUZbWGbUZbWGbUZbWHbPZbPYbTkbWIbTmbTnbPZbPYbWJbViaaiaaiaOKbWKbbybWLaOKaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaibIUbXAbWNbIUbIUaafaafaafaafaafaafbJdbJdbJdbJdbJdbWObWPbQBbQBbQBbQBbQBbQCbQCbQCbQCbQCbQCbQCbWQbWRbQGbQGbQGbQGaafaafaafbZGbWSbWTbWUbZGaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaibWVbWWbWXbWYbWVaaiaaiaaiaafaafaafaafbrmbWZbrmaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbQQbXabXbbXcbXdbXebXfbWdbXgbXhbXibXjbXkbXhbXgbWdbWdbWdbXlbUybXmbXnbXmbXobWibXmbXnbXmbWjbWkbUyaaiaaibXpbbibBRbXqaWEaaibXrbXsbXtbXubXvbSWbXwbXxbXybWvbXzbYQbXBbXCbXDbXEbXFbXGbXHbXIbLOaafaVebWEaVeaVebPYbPZbPYbPZbPYbPZbPYbPZbPYbPZbXJbPZbPYbXKbRxbXLbPYbPZbRxbXMbXNaaibHnaPQbbyaPQbHnaaibXObXObXObXObXObXObXObXObXOaaibXPbXQbXRbXPaawaawaawaawaawbXVaafbRVbRWbRXbXWbZsbSabSbbXXbXYbXZbYabYbaafaafaafaafaafaafbYcbYdbYebYfbYgbYcaafaafaafaafbZGbYhbYibYjbZGaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaibYkbYlbYmbYkbYkaaiaaiaafaafaafaafaafbYnbYobYnaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbQQbYpbYqbYrbYsbQQbYtbYubYubYubYvbYwbYxbYybYubYubYubYzbYAbUybYBbWibWibYCbYDbYEbYEbYEbYFbYGbUyaaiaaibYHbbiaZhaVGbYIaaibYJbUGbYKbYLbYMbSWbYNbYObSRbWvbYPcuebYRbYRbYSbYTbYUbWCbWCbYVbLOaafaVebWEbYWaVebYXbPYbPZbPYbPZbPYbPZbPYbPZbPYbPZbPYbPZbYYbYZbZabZbbZcbZdbZeaaiaaibplaPQbbybZfbplaaibXObZgbZhbZibZjbZkbZlbZmbXOaaibZnbZobZpbZqaawbZrbYcbYcbYcaawaafbRVbZtbTHbTIbTJbZwbZxbZybZzbZAbZBbYbaafaafaafaafaafaafbYcbZCbZDbZEbZFbYcaafaafaafaafbZGbZHbZIbZJbZGaafaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaibZKbZLbZMbZNbZKaaiaaiaafaafaafaafaafbYnbYobYnaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbQQbZObZPbZQbZRbQQbZSbZTbZUbZVbZWbZXbZYbZZcaacabcaccadcaebUybXmbXnbXmcafbWibXmbXnbXmcagcahbUycaicajbbkcakcalcambbkaaibSRcanbSWcaocapcaqcarbSRcascatcaucasbLOcavcawcaxcaycazcaAcaBbLOaafaVebWEaVNaVecaCbPZbPYbRybRzbPZbPYbPZcaDbRybPYbPZbPYcaEbRzcaFbPYbPZcaGbZeaaiaaibplcaHbeaaPQbplaaibXOcaIcaJcaKcaLcaMcaNdlXbXOaaicaPcaQcaRbZqaawcaScaTcaUbYcaawaafbRVbVobVpbVqbZscaYcaZbXXcbacbbcbcbYbaafaafaafaafaafaafbYcbYdbYcbYcbYcbYcaafaafaafaafbZGcbdcbecbfcbgcbhcbiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaaiaaibVJcbjcbkcblbVJaaiaaiaafaafaafbYnbYnbYnbYobYnaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbQQbQQcbmcbnbQQbQQbQXbQXbQXbQXbQXcbobQXbQXbQXcbpcbqcbrbQXbUybWfbWfbWfbWibWibWfbWfbWfcagcbscbtcbubbibbibbiaZhaVGbbkaaibSRbSRbSRbSRbSRbSRbSRbSRcbvcbwcbxcbybLObLOcbzbLObLObLOcbAbURbLOcbCaVecbDaVeaVecbEbPYbTkcbFbTmbTncbGcbHbTmbTlcbIcbJbTkbTlbVfcbKbPZbPYcbLbZeaaiaaibplaPQbbyaPQbtIaaibXOdmTcbNcbOcbPbXOcbQdnPbXOaaicaPcbScbTbZqaawcaTcaTcbUbYcaawaafbRVbRVbRVbRVbRVcbVcbWbYbbYbbYbbYbbYbaafaafaafaafaafaafbYcbYdbYcaafaafaafaafaafaafaafbZGcbXcbYcbZccaccbcccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaaiaaibWVccdcbkccebWVaaiaaiaafaafaafbYnccfccgcchbYnbYnbYnbYnaafaafaafaafaafaafaafaafaafaafaafaafaafbQQbQQbQQbQQaafaafaafaafbYncciccjbYnaaiaaiaaiaaiaaiaaibUycckcclbWibWibWibWiccmbWiccnccocbtcbuccpccqbbiaZhaVGcascascascasccrccscctccuccvccwccxccycczccAccBccCccDccEccFcascascascascasccGccHccIbVibViccJcbHbTmbWIcbIccKbTkbWIbVfbTnccLcbHccMccNccOccPccQccRccSaaiaaibplccTbbyccUaOKbZqbXOccVccWccWccWbXOccXccYbXOaaiccZcdacdbbZqaawcdccddcdebYcaawaafaafaafaafaafbYccdfcdgbYcaafaafaafaafaafaafaafaafaafaafbYcbYdbYcaafaafbZGbZGbZGbZGbZGbZGcdhcdhbZGbZGbZGbZGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafbYkbUfbUdbYkcdicbkcdjbYkbUfbUdbYkbYkbYnbYncdkcdlcdmcdncdocdpbYnaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbYncdqcdrcdscdscdscdscdsaaiaaibUybUybUycdtcducducdvbUybUybUybUybUycaicajbbkcdwbhnaVGcdxcdycdzcascdAcdBcdCcdBcdAcdAcdAcbwcbxcdAcdAcdAccDcdDcdEcdFcascdGcdycdHcdIcdJcdKcdLcdMcdNcdOcdPcdQcdNcdRcdNcdScdPcdOcdTcdOcdPcdUcdVbPZbPYcdWbViaaiaaibtIaPQbbyaPQcdXbZqbXOcdYcbNcbPcdZbXOceabXObXObZqbZqceccedbZqbYcceebYcbYcaalaawaafaafaafbYcbYcbYccefcegbYcaafaafaafaafaafaafaafaafaafbYcbYcbYdbYcaafaafbZGcehceiceiceiceicejcejcekceiceicelaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafbYkcemcencemceocepceqcercescetceucevcewcexceycezceAceBceCceDbYnaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbYnceEceFceGceHceIceJcdsaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaaiaXOceKceLceMceNceOcePceQceRceSceTceUceUceUceUceVceWceUceUceUceXceYceSceZcfacfbcfccfdcfecffcfgcfhbRBcfibPYbPZbPYbPZcfjbPZbPYbPZbPYcfkbPYbPZcflbPZbPYbPZcfmbXMaaiaaiaOKcfnbwqcfoaQIcfpcfqcfqcfqcfrcfqdHDcgQcfqcfqcfqcfqcfscftcfubYccdccaTcfvbYcbYcbYcbYcbYcbYccfwcfxcfycfzbYcbYcbYcbYcbYcbYcbYcbYcbYcbYcbYccfAbYdbYcaafaafbZGcfBcfCcfDcfEcfFcfGcfHcfIcfJcfKceicelaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/nano/templates/sleever.tmpl b/nano/templates/sleever.tmpl new file mode 100644 index 0000000000..df60daea8a --- /dev/null +++ b/nano/templates/sleever.tmpl @@ -0,0 +1,112 @@ +{{:data.temp}} + + +{{if data.menu == 1}} +

Resleeving Control

+
+
+
+ {{if data.podsLen > 0}} + {{:data.podsLen}} growing vats found. + {{else}} + No growing vats found. + {{/if}} +
+
+ {{if data.sleeversLen > 0}} + {{:data.sleeversLen}} resleeving pods found. + {{else}} + No resleeving pods found. + {{/if}} +
+ + {{if data.podsLen}} + {{for data.pods}} +
{{:value.pod}}, biomass: {{:value.biomass}}
+ {{/for}} + {{/if}} + + {{if data.sleeversLen}} + {{for data.sleevers}} +
{{:value.sleever}}, occupant: {{:value.occupant}}
+ {{/for}} + {{/if}} + + +

Database Functions

+
+ {{:helper.link('View Body Records', 'list', {'menu' : 2})}} +
+
+ {{:helper.link('View Mind Records', 'list', {'menu' : 3})}} +
+ + +{{else data.menu == 2}} +

Current body records

+ {{:helper.link('Back', 'arrowreturn-1-w', {'menu' : 1})}} +
+ {{for data.bodyrecords}} + {{:helper.link(value.name, 'document', {'view_brec' : value.recref})}} + {{/for}} +
+ + +{{else data.menu == 3}} +

Current mind records

+ {{:helper.link('Back', 'arrowreturn-1-w', {'menu' : 1})}} +
+ {{for data.mindrecords}} + {{:helper.link(value.name, 'document', {'view_mrec' : value.recref})}} + {{/for}} +
+ + +{{else data.menu == 4}} +

Selected Body Record

+
{{:helper.link('Back', 'arrowreturn-1-w', {'menu' : 2})}}
+ + {{if data.activeBodyRecord}} +
+
Name:
+
{{:data.activeBodyRecord.real_name}}
+
+
+
Species:
+
{{:data.activeBodyRecord.speciesname}}
+
+
+
Bio. Sex:
+
{{:data.activeBodyRecord.gender}}
+
+
+
Synthetic:
+
{{:data.activeBodyRecord.synthetic}}
+
+ + {{:helper.link('Grow', 'play', {'grow' : data.activeBodyRecord.real_name}, data.activeBodyRecord.cando ? null : 'linkOff')}} + + {{else}} +
ERROR: Record not found.
+ {{/if}} + + +{{else data.menu == 5}} +

Selected Mind Record

+
{{:helper.link('Back', 'arrowreturn-1-w', {'menu' : 3})}}
+ + {{if data.activeMindRecord}} +
+
Name:
+
{{:data.activeMindRecord.charname}}
+
+
+
Backup status:
+
{{:data.activeMindRecord.obviously_dead}}
+
+ {{:helper.link('Sleeve', 'play', {'sleeve' : data.activeMindRecord.charname}, data.activeMindRecord.cando ? null : 'linkOff')}} + + {{else}} +
ERROR: Record not found.
+ {{/if}} +{{/if}} \ No newline at end of file diff --git a/vorestation.dme b/vorestation.dme index 138eaa6bc7..5edbfdf462 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -2092,6 +2092,11 @@ #include "code\modules\research\rdmachines.dm" #include "code\modules\research\research.dm" #include "code\modules\research\server.dm" +#include "code\modules\resleeving\computers.dm" +#include "code\modules\resleeving\consoles.dm" +#include "code\modules\resleeving\general.dm" +#include "code\modules\resleeving\infocore.dm" +#include "code\modules\resleeving\machines.dm" #include "code\modules\rogueminer_vr\asteroid.dm" #include "code\modules\rogueminer_vr\controller.dm" #include "code\modules\rogueminer_vr\debug.dm" From a9e5262ce7604f73bf009ba673dcb3410e44b48d Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Sun, 19 Feb 2017 04:05:14 -0500 Subject: [PATCH 04/74] Synthetic body printer, limbs/organs respected --- code/modules/resleeving/computers.dm | 108 ++++++++++++++---- code/modules/resleeving/infocore.dm | 29 +++++ code/modules/resleeving/machines.dm | 162 ++++++++++++++++++++++++++- icons/obj/machines/synthpod.dmi | Bin 0 -> 4965 bytes maps/virgo-1.dmm | 13 ++- nano/templates/sleever.tmpl | 20 +++- 6 files changed, 296 insertions(+), 36 deletions(-) create mode 100644 icons/obj/machines/synthpod.dmi diff --git a/code/modules/resleeving/computers.dm b/code/modules/resleeving/computers.dm index a06b306e41..a8beeee075 100644 --- a/code/modules/resleeving/computers.dm +++ b/code/modules/resleeving/computers.dm @@ -7,6 +7,7 @@ circuit = /obj/item/weapon/circuitboard/cloning req_access = list(access_heads) //Only used for record deletion right now. var/list/pods = list() //Linked grower pods. + var/list/spods = list() var/list/sleevers = list() //Linked resleeving booths. var/temp = "" var/menu = 1 //Which menu screen to display @@ -14,7 +15,7 @@ var/datum/transhuman/mind_record/active_mr = null var/datum/transhuman/infocore/TC //Easy debugging access var/organic_capable = 1 - var/synthetic_capable = 0 + var/synthetic_capable = 1 /obj/machinery/computer/transhuman/resleeving/initialize() ..() @@ -34,6 +35,10 @@ P.connected = null P.name = initial(P.name) pods.Cut() + for(var/obj/machinery/transhuman/synthprinter/P in spods) + P.connected = null + P.name = initial(P.name) + spods.Cut() for(var/obj/machinery/transhuman/resleever/P in sleevers) P.connected = null P.name = initial(P.name) @@ -47,6 +52,11 @@ pods += P P.connected = src P.name = "[initial(P.name)] #[num++]" + for(var/obj/machinery/transhuman/synthprinter/P in A.get_contents()) + if(!P.connected) + spods += P + P.connected = src + P.name = "[initial(P.name)] #[num++]" for(var/obj/machinery/transhuman/resleever/P in A.get_contents()) if(!P.connected) sleevers += P @@ -99,6 +109,10 @@ for(var/obj/machinery/clonepod/transhuman/pod in pods) pods_list_ui[++pods_list_ui.len] = list("pod" = pod, "biomass" = pod.biomass) + var/spods_list_ui[0] + for(var/obj/machinery/transhuman/synthprinter/spod in spods) + spods_list_ui[++spods_list_ui.len] = list("spod" = spod, "steel" = spod.steel, "glass" = spod.glass) + var/sleevers_list_ui[0] for(var/obj/machinery/transhuman/resleever/resleever in sleevers) sleevers_list_ui[++sleevers_list_ui.len] = list("sleever" = resleever, "occupant" = resleever.occupant ? resleever.occupant.real_name : "None") @@ -108,6 +122,11 @@ else data["pods"] = null + if(spods) + data["spods"] = spods_list_ui + else + data["spods"] = null + if(sleevers) data["sleevers"] = sleevers_list_ui else @@ -126,14 +145,12 @@ if(active_br) var/can_grow_active = 1 - if(!synthetic_capable && active_br.synthetic) //Disqualified due to being synthetic in an organic pod. + if(!synthetic_capable && active_br.synthetic) //Disqualified due to being synthetic in an organic only. can_grow_active = 0 else if(!organic_capable && !active_br.synthetic) //Disqualified for the opposite. can_grow_active = 0 else if(!synthetic_capable && !organic_capable) //What have you done?? can_grow_active = 0 - else if(!pods.len) - can_grow_active = 0 data["activeBodyRecord"] = list("real_name" = active_br.mydna.name, \ "speciesname" = active_br.speciesname, \ @@ -156,6 +173,7 @@ data["menu"] = menu data["podsLen"] = pods.len + data["spodsLen"] = spods.len data["sleeversLen"] = sleevers.len data["temp"] = temp @@ -189,27 +207,73 @@ else if (href_list["refresh"]) updateUsrDialog() - else if (href_list["grow"]) + else if (href_list["create"]) if(istype(active_br)) - if(!pods.len) + //Tried to grow a synth but no synth pods. + if(active_br.synthetic && !spods.len) + temp = "Error: No SynthFabs detected." + //Tried to grow an organic but no growpods. + else if(!active_br.synthetic && !pods.len) temp = "Error: No growpods detected." + //We have the machines. We can rebuild them. Probably. else - var/obj/machinery/clonepod/transhuman/pod = pods[1] - if (pods.len > 1) - pod = input(usr,"Select a growing pod to use", "Pod selection") as anything in pods - if(pod.occupant) - temp = "Error: Growpod is currently occupied." - else if(pod.biomass < CLONE_BIOMASS) - temp = "Error: Not enough biomass." - else if(pod.mess) - temp = "Error: Growpod malfunction." - else if(!config.revival_cloning) - temp = "Error: Unable to initiate growing cycle." - else if(pod.growclone(active_br.mydna)) - temp = "Initiating growing cycle..." - menu = 1 + //We're cloning a synth. + if(active_br.synthetic) + var/obj/machinery/transhuman/synthprinter/spod = spods[1] + if (spods.len > 1) + spod = input(usr,"Select a SynthFab to use", "Printer selection") as anything in spods + + //Already doing someone. + if(spod.busy) + temp = "Error: SynthFab is currently busy." + + //Not enough steel or glass + else if(spod.steel < spod.body_cost) + temp = "Error: Not enough steel in SynthFab." + else if(spod.glass < spod.body_cost) + temp = "Error: Not enough glass in SynthFab." + + //Gross pod (broke mid-cloning or something). + else if(spod.broken) + temp = "Error: SynthFab malfunction." + + //Do the cloning! + else if(spod.print(active_br)) + temp = "Initiating printing cycle..." + menu = 1 + else + temp = "Initiating printing cycle...
Error: Post-initialisation failed. Printing cycle aborted." + + //We're cloning an organic. else - temp = "Initiating growing cycle...
Error: Post-initialisation failed. Growing cycle aborted." + var/obj/machinery/clonepod/transhuman/pod = pods[1] + if (pods.len > 1) + pod = input(usr,"Select a growing pod to use", "Pod selection") as anything in pods + + //Already doing someone. + if(pod.occupant) + temp = "Error: Growpod is currently occupied." + + //Not enough materials. + else if(pod.biomass < CLONE_BIOMASS) + temp = "Error: Not enough biomass." + + //Gross pod (broke mid-cloning or something). + else if(pod.mess) + temp = "Error: Growpod malfunction." + + //Disabled in config. + else if(!config.revival_cloning) + temp = "Error: Unable to initiate growing cycle." + + //Do the cloning! + else if(pod.growclone(active_br)) + temp = "Initiating growing cycle..." + menu = 1 + else + temp = "Initiating growing cycle...
Error: Post-initialisation failed. Growing cycle aborted." + + //The body record is broken somehow. else temp = "Error: Data corruption." @@ -228,7 +292,7 @@ //Body to sleeve into, but mind is in another living body. else if(active_mr.mind.current && active_mr.mind.current.stat != DEAD) //Mind is in a body already that's alive - var/answer = alert(active_mr.mind.current,"Someone is attempting to restore a CURRENT backup of your mind into another body. Do you want to move to that body? You should suffer no memory loss.","Resleeving","Yes","No") + var/answer = alert(active_mr.mind.current,"Someone is attempting to restore a backup of your mind into another body. Do you want to move to that body? You MAY suffer memory loss! (Same rules as CMD apply)","Resleeving","Yes","No") //They declined to be moved. if(answer == "No") diff --git a/code/modules/resleeving/infocore.dm b/code/modules/resleeving/infocore.dm index c8d6d31519..0df9bb6c42 100644 --- a/code/modules/resleeving/infocore.dm +++ b/code/modules/resleeving/infocore.dm @@ -118,6 +118,8 @@ var/datum/transhuman/infocore/transcore = new/datum/transhuman/infocore var/synthetic var/speciesname var/bodygender + var/list/limb_data = list(BP_HEAD, BP_L_HAND, BP_R_HAND, BP_L_ARM, BP_R_ARM, BP_L_FOOT, BP_R_FOOT, BP_L_LEG, BP_R_LEG, BP_GROIN, BP_TORSO) + var/list/organ_data = list(O_HEART, O_EYES, O_LUNGS, O_BRAIN) /datum/transhuman/body_record/New(var/mob/living/carbon/human/M,var/add_to_db = 1) ASSERT(M) @@ -143,5 +145,32 @@ var/datum/transhuman/infocore/transcore = new/datum/transhuman/infocore ckey = M.ckey mind_ref = M.mind + //External organ status. 0:gone, 1:normal, "string":manufacturer + for(var/limb in limb_data) + var/obj/item/organ/external/O = M.organs_by_name[limb] + + //Missing limb. + if(!O) + limb_data[limb] = 0 + + //Has model set, is pros. + else if(O.model) + limb_data[limb] = O.model + + //Nothing special, present and normal. + else + limb_data[limb] = 1 + + //Internal organ status + for(var/org in organ_data) + var/obj/item/organ/I = M.internal_organs_by_name[org] + + //Who knows? Missing lungs maybe on synths, etc. + if(!I) + continue + + //Just set the data to this. 0:normal, 1:assisted, 2:robotic, 3:crazy + organ_data[org] = I.robotic + if(add_to_db) transcore.add_body(src) \ No newline at end of file diff --git a/code/modules/resleeving/machines.dm b/code/modules/resleeving/machines.dm index f190eabf29..dd54c8fc90 100644 --- a/code/modules/resleeving/machines.dm +++ b/code/modules/resleeving/machines.dm @@ -7,7 +7,8 @@ /obj/machinery/clonepod/transhuman name = "grower pod" -/obj/machinery/clonepod/transhuman/growclone(var/datum/dna2/record/R) +/obj/machinery/clonepod/transhuman/growclone(var/datum/transhuman/body_record/current_project) + var/datum/dna2/record/R = current_project.mydna if(mess || attempting) return 0 @@ -19,6 +20,45 @@ eject_wait = 0 var/mob/living/carbon/human/H = new /mob/living/carbon/human(src, R.dna.species) + + //Fix the external organs + for(var/part in current_project.limb_data) + + var/status = current_project.limb_data[part] + if(status == null) continue //Species doesn't have limb? Child of amputated limb? + + var/obj/item/organ/external/O = H.organs_by_name[part] + if(!O) continue //Not an organ. Perhaps another amputation removed it already. + + if(status == 1) //Normal limbs + continue + else if(status == 0) //Missing limbs + O.remove_rejuv() + else if(status) //Anything else is a manufacturer + O.remove_rejuv() //Don't robotize them, leave them removed so robotics can attach a part. + + //Look, this machine can do this because [reasons] okay?! + for(var/part in current_project.organ_data) + + var/status = current_project.organ_data[part] + if(status == null) continue //Species doesn't have organ? Child of missing part? + + var/obj/item/organ/I = H.internal_organs_by_name[name] + if(!I) continue//Not an organ. Perhaps external conversion changed it already? + + if(part == BP_EYES && status > 0) //But not eyes. The only non-essential internal organ. + qdel(I) + continue + + if(status == 0) //Normal organ + continue + else if(status == 1) //Assisted organ + I.mechassist() + else if(status == 2) //Mechanical organ + I.robotize() + else if(status == 3) //Digital organ + I.digitize() + occupant = H if(!R.dna.real_name) @@ -64,7 +104,6 @@ return else if(occupant.health < heal_level && occupant.getCloneLoss() > 0) - occupant.Paralyse(4) //Slowly get that clone healed and finished. occupant.adjustCloneLoss(-2 * heal_rate) @@ -75,7 +114,7 @@ //So clones don't die of oxyloss in a running pod. if(occupant.reagents.get_reagent_amount("inaprovaline") < 30) occupant.reagents.add_reagent("inaprovaline", 60) - occupant.Sleeping(30) + //Also heal some oxyloss ourselves because inaprovaline is so bad at preventing it!! occupant.adjustOxyLoss(-4) @@ -98,7 +137,124 @@ return +//Synthetic version +/obj/machinery/transhuman/synthprinter + name = "SynthFab 3000" + desc = "A rapid fabricator for synthetic bodies." + icon = 'icons/obj/machines/synthpod.dmi' + icon_state = "pod_0" + density = 1 + anchored = 1 + var/steel = 30000 //Starting steel + var/glass = 30000 //Starting glass + var/connected //What console it's done up with + var/busy = 0 //Busy cloning + var/body_cost = 15000 //Cost of a cloned body (metal and glass ea.) + var/datum/transhuman/body_record/current_project + var/broken = 0 + +/obj/machinery/transhuman/synthprinter/process() + if(stat & NOPOWER) + if(busy) + busy = 0 + current_project = null + update_icon() + return + + if(busy > 0 && busy <= 95) + busy += 5 + + if(busy >= 100) + make_body() + + return + +/obj/machinery/transhuman/synthprinter/proc/print(var/datum/transhuman/body_record/BR) + if(!istype(BR) || busy) + return 0 + + if(steel < body_cost || glass < body_cost) + return 0 + + current_project = BR + busy = 5 + update_icon() + + return 1 + +/obj/machinery/transhuman/synthprinter/proc/make_body() + if(!current_project) + busy = 0 + update_icon() + return + + //Blep us a new blank body to robotize (based on their original species choice). + var/mob/living/carbon/human/H = new /mob/living/carbon/human(src, current_project.mydna.dna.species) + H.name = current_project.mydna.dna.real_name + H.real_name = H.name + + //First the external organs + for(var/part in current_project.limb_data) + + var/status = current_project.limb_data[part] + if(status == null) continue //Species doesn't have limb? Child of amputated limb? + + var/obj/item/organ/external/O = H.organs_by_name[part] + if(!O) continue //Not an organ. Perhaps another amputation removed it already. + + if(status == 1) //Normal limbs + continue + else if(status == 0) //Missing limbs + O.remove_rejuv() + else if(status) //Anything else is a manufacturer + O.robotize(status) + + //Then the internal organs + for(var/part in current_project.organ_data) + + var/status = current_project.organ_data[part] + if(status == null) continue //Species doesn't have organ? Child of missing part? + + var/obj/item/organ/I = H.internal_organs_by_name[name] + if(!I) continue//Not an organ. Perhaps external conversion changed it already? + + if(status == 0) //Normal organ + continue + else if(status == 1) //Assisted organ + I.mechassist() + else if(status == 2) //Mechanical organ + I.robotize() + else if(status == 3) //Digital organ + I.digitize() + + H.adjustBruteLoss(20) + H.adjustFireLoss(20) + + //Cha-ching. + steel -= body_cost + glass -= body_cost + + //Plonk them here. + H.loc = get_turf(src) + + //Reset stuff. + busy = 0 + update_icon() + +/obj/machinery/transhuman/synthprinter/attack_hand(mob/user as mob) + if((busy == 0) || (stat & NOPOWER)) + return + user << "Current print cycle is [busy]% complete." + return + +/obj/machinery/transhuman/synthprinter/update_icon() + ..() + icon_state = "pod_0" + if(busy && !(stat & NOPOWER)) + icon_state = "pod_1" + else if(broken) + icon_state = "pod_g" /////// Resleever Pod /////// /obj/machinery/transhuman/resleever diff --git a/icons/obj/machines/synthpod.dmi b/icons/obj/machines/synthpod.dmi new file mode 100644 index 0000000000000000000000000000000000000000..2684ddcbe5840b5b3eba7c4bf83353b2582abe8f GIT binary patch literal 4965 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