diff --git a/code/__defines/admin.dm b/code/__defines/admin.dm
index d2afb7846e..84e0656c97 100644
--- a/code/__defines/admin.dm
+++ b/code/__defines/admin.dm
@@ -45,3 +45,27 @@
#define SMITE_BLUESPACEARTILLERY "Bluespace Artillery"
#define SMITE_SPONTANEOUSCOMBUSTION "Spontaneous Combustion"
#define SMITE_LIGHTNINGBOLT "Lightning Bolt"
+
+#define ADMIN_QUE(user) "(?)"
+#define ADMIN_FLW(user) "(FLW)"
+#define ADMIN_PP(user) "(PP)"
+#define ADMIN_VV(atom) "(VV)"
+#define ADMIN_SM(user) "(SM)"
+#define ADMIN_TP(user) "(TP)"
+#define ADMIN_BSA(user) "(BSA)"
+#define ADMIN_KICK(user) "(KICK)"
+#define ADMIN_CENTCOM_REPLY(user) "(RPLY)"
+#define ADMIN_SYNDICATE_REPLY(user) "(RPLY)"
+#define ADMIN_SC(user) "(SC)"
+#define ADMIN_SMITE(user) "(SMITE)"
+#define ADMIN_LOOKUP(user) "[key_name_admin(user)][ADMIN_QUE(user)]"
+#define ADMIN_LOOKUPFLW(user) "[key_name_admin(user)][ADMIN_QUE(user)] [ADMIN_FLW(user)]"
+#define ADMIN_FULLMONTY_NONAME(user) "[ADMIN_QUE(user)] [ADMIN_PP(user)] [ADMIN_VV(user)] [ADMIN_SM(user)] [ADMIN_FLW(user)] [ADMIN_TP(user)]"
+#define ADMIN_FULLMONTY(user) "[key_name_admin(user)] [ADMIN_FULLMONTY_NONAME(user)]"
+#define ADMIN_JMP(src) "(JMP)"
+#define COORD(src) "[src ? "([src.x],[src.y],[src.z])" : "nonexistent location"]"
+#define ADMIN_COORDJMP(src) "[src ? "[COORD(src)] [ADMIN_JMP(src)]" : "nonexistent location"]"
+
+#define AHELP_ACTIVE 1
+#define AHELP_CLOSED 2
+#define AHELP_RESOLVED 3
\ No newline at end of file
diff --git a/code/__defines/misc.dm b/code/__defines/misc.dm
index df433e7f47..56586c341b 100644
--- a/code/__defines/misc.dm
+++ b/code/__defines/misc.dm
@@ -149,6 +149,7 @@
#define MAT_GLASS "glass"
#define MAT_SILVER "silver"
#define MAT_GOLD "gold"
+#define MAT_URANIUM "uranium" //Did it
#define MAT_TITANIUM "titanium"
#define MAT_PHORON "phoron"
#define MAT_DIAMOND "diamond"
diff --git a/code/__defines/qdel.dm b/code/__defines/qdel.dm
index 82ec12a211..51c6db5325 100644
--- a/code/__defines/qdel.dm
+++ b/code/__defines/qdel.dm
@@ -20,4 +20,11 @@
#define QDELING(X) (X.gc_destroyed)
#define QDELETED(X) (!X || X.gc_destroyed)
-#define QDESTROYING(X) (!X || X.gc_destroyed == GC_CURRENTLY_BEING_QDELETED)
\ No newline at end of file
+#define QDESTROYING(X) (!X || X.gc_destroyed == GC_CURRENTLY_BEING_QDELETED)
+
+#define QDEL_LIST(L) if(L) { for(var/I in L) qdel(I); L.Cut(); }
+#define QDEL_LIST_ASSOC(L) if(L) { for(var/I in L) { qdel(L[I]); qdel(I); } L.Cut(); }
+#define QDEL_LIST_ASSOC_VAL(L) if(L) { for(var/I in L) qdel(L[I]); L.Cut(); }
+
+/proc/______qdel_list_wrapper(list/L) //the underscores are to encourage people not to use this directly.
+ QDEL_LIST(L)
diff --git a/code/__defines/subsystems.dm b/code/__defines/subsystems.dm
index d1344e55c5..94c233d752 100644
--- a/code/__defines/subsystems.dm
+++ b/code/__defines/subsystems.dm
@@ -1,3 +1,18 @@
+//Timing subsystem
+//Don't run if there is an identical unique timer active
+#define TIMER_UNIQUE 0x1
+//For unique timers: Replace the old timer rather then not start this one
+#define TIMER_OVERRIDE 0x2
+//Timing should be based on how timing progresses on clients, not the sever.
+// tracking this is more expensive,
+// should only be used in conjuction with things that have to progress client side, such as animate() or sound()
+#define TIMER_CLIENT_TIME 0x4
+//Timer can be stopped using deltimer()
+#define TIMER_STOPPABLE 0x8
+//To be used with TIMER_UNIQUE
+//prevents distinguishing identical timers with the wait variable
+#define TIMER_NO_HASH_WAIT 0x10
+#define TIMER_NO_INVOKE_WARNING 600 //number of byond ticks that are allowed to pass before the timer subsystem thinks it hung on something
#define INITIALIZATION_INSSATOMS 0 //New should not call Initialize
#define INITIALIZATION_INNEW_MAPLOAD 1 //New should call Initialize(TRUE)
@@ -7,6 +22,15 @@
#define INITIALIZE_HINT_LATELOAD 1 //Call LateInitialize
#define INITIALIZE_HINT_QDEL 2 //Call qdel on the atom
+//type and all subtypes should always call Initialize in New()
+#define INITIALIZE_IMMEDIATE(X) ##X/New(loc, ...){\
+ ..();\
+ if(!initialized) {\
+ args[1] = TRUE;\
+ SSatoms.InitAtom(src, args);\
+ }\
+}
+
// SS runlevels
#define RUNLEVEL_INIT 0 // "Initialize Only" - Used for subsystems that should never be fired (Should also have SS_NO_FIRE set)
diff --git a/code/__defines/typeids.dm b/code/__defines/typeids.dm
new file mode 100644
index 0000000000..9af310012b
--- /dev/null
+++ b/code/__defines/typeids.dm
@@ -0,0 +1,6 @@
+//Byond type ids
+#define TYPEID_NULL "0"
+#define TYPEID_NORMAL_LIST "f"
+//helper macros
+#define GET_TYPEID(ref) ( ( (lentext(ref) <= 10) ? "TYPEID_NULL" : copytext(ref, 4, lentext(ref)-6) ) )
+#define IS_NORMAL_LIST(L) (GET_TYPEID("\ref[L]") == TYPEID_NORMAL_LIST)
\ No newline at end of file
diff --git a/code/_global_vars/misc.dm b/code/_global_vars/misc.dm
index de2779c45b..504246e304 100644
--- a/code/_global_vars/misc.dm
+++ b/code/_global_vars/misc.dm
@@ -1 +1,5 @@
-GLOBAL_LIST_EMPTY(all_observable_events)
\ No newline at end of file
+GLOBAL_LIST_EMPTY(all_observable_events)
+
+GLOBAL_VAR_INIT(timezoneOffset, 0) // The difference betwen midnight (of the host computer) and 0 world.ticks.
+
+GLOBAL_VAR_INIT(TAB, " ")
diff --git a/code/_global_vars/mobs.dm b/code/_global_vars/mobs.dm
index 7fa2b5d162..a5099a68d2 100644
--- a/code/_global_vars/mobs.dm
+++ b/code/_global_vars/mobs.dm
@@ -1,2 +1,5 @@
GLOBAL_LIST_EMPTY(admins) //all clients whom are admins
-GLOBAL_PROTECT(admins)
\ No newline at end of file
+GLOBAL_PROTECT(admins)
+GLOBAL_LIST_EMPTY(deadmins) //all ckeys who have used the de-admin verb.
+GLOBAL_LIST_EMPTY(stealthminID)
+GLOBAL_LIST_EMPTY(directory) //all ckeys with associated client
diff --git a/code/_helpers/game.dm b/code/_helpers/game.dm
index a9ac87e4aa..9ba432779f 100644
--- a/code/_helpers/game.dm
+++ b/code/_helpers/game.dm
@@ -26,17 +26,17 @@
max_z = max(z, max_z)
return max_z
-/proc/get_area(O)
- var/turf/loc = get_turf(O)
- if(loc)
- var/area/res = loc.loc
- .= res
+/proc/get_area(atom/A)
+ if(isarea(A))
+ return A
+ var/turf/T = get_turf(A)
+ return T ? T.loc : null
-/proc/get_area_name(N) //get area by its name
- for(var/area/A in all_areas)
- if(A.name == N)
- return A
- return 0
+/proc/get_area_name(atom/X, format_text = FALSE)
+ var/area/A = isarea(X) ? X : get_area(X)
+ if(!A)
+ return null
+ return format_text ? format_text(A.name) : A.name
/proc/get_area_master(const/O)
var/area/A = get_area(O)
@@ -602,3 +602,8 @@ datum/projectile_data
/proc/SecondsToTicks(var/seconds)
return seconds * 10
+
+/proc/window_flash(var/client_or_usr)
+ if (!client_or_usr)
+ return
+ winset(client_or_usr, "mainwindow", "flash=5")
\ No newline at end of file
diff --git a/code/_helpers/lists.dm b/code/_helpers/lists.dm
index 17bc605ae7..b9e5dd8623 100644
--- a/code/_helpers/lists.dm
+++ b/code/_helpers/lists.dm
@@ -240,6 +240,17 @@ proc/listclearnulls(list/list)
for(var/i in L)
. |= i
+//same, but returns nothing and acts on list in place (also handles associated values properly)
+/proc/uniqueList_inplace(list/L)
+ var/temp = L.Copy()
+ L.len = 0
+ for(var/key in temp)
+ if (isnum(key))
+ L |= key
+ else
+ L[key] = temp[key]
+
+
//Mergesort: divides up the list into halves to begin the sort
/proc/sortKey(var/list/client/L, var/order = 1)
if(isnull(L) || L.len < 2)
diff --git a/code/_helpers/time.dm b/code/_helpers/time.dm
index f75802eb45..8348796665 100644
--- a/code/_helpers/time.dm
+++ b/code/_helpers/time.dm
@@ -64,6 +64,11 @@ var/next_station_date_change = 1 DAY
var/time_portion = time2text(world.timeofday, "hh:mm:ss")
return "[date_portion]T[time_portion]"
+/proc/gameTimestamp(format = "hh:mm:ss", wtime=null)
+ if(!wtime)
+ wtime = world.time
+ return time2text(wtime - GLOB.timezoneOffset, format)
+
/* Returns 1 if it is the selected month and day */
proc/isDay(var/month, var/day)
if(isnum(month) && isnum(day))
@@ -137,4 +142,101 @@ var/round_start_time = 0
i *= 2
while (TICK_USAGE > min(TICK_LIMIT_TO_RUN, GLOB.CURRENT_TICKLIMIT))
-#undef DELTA_CALC
\ No newline at end of file
+#undef DELTA_CALC
+
+
+//Takes a value of time in deciseconds.
+//Returns a text value of that number in hours, minutes, or seconds.
+/proc/DisplayTimeText(time_value, truncate = FALSE)
+ var/second = (time_value)*0.1
+ var/second_adjusted = null
+ var/second_rounded = FALSE
+ var/minute = null
+ var/hour = null
+ var/day = null
+
+ if(!second)
+ return "0 seconds"
+ if(second >= 60)
+ minute = FLOOR(second/60, 1)
+ second = round(second - (minute*60), 0.1)
+ second_rounded = TRUE
+ if(second) //check if we still have seconds remaining to format, or if everything went into minute.
+ second_adjusted = round(second) //used to prevent '1 seconds' being shown
+ if(day || hour || minute)
+ if(second_adjusted == 1 && second >= 1)
+ second = " and 1 second"
+ else if(second > 1)
+ second = " and [second_adjusted] seconds"
+ else //shows a fraction if seconds is < 1
+ if(second_rounded) //no sense rounding again if it's already done
+ second = " and [second] seconds"
+ else
+ second = " and [round(second, 0.1)] seconds"
+ else
+ if(second_adjusted == 1 && second >= 1)
+ second = "[truncate ? "second" : "1 second"]"
+ else if(second > 1)
+ second = "[second_adjusted] seconds"
+ else
+ if(second_rounded)
+ second = "[second] seconds"
+ else
+ second = "[round(second, 0.1)] seconds"
+ else
+ second = null
+
+ if(!minute)
+ return "[second]"
+ if(minute >= 60)
+ hour = FLOOR(minute/60, 1)
+ minute = (minute - (hour*60))
+ if(minute) //alot simpler from here since you don't have to worry about fractions
+ if(minute != 1)
+ if((day || hour) && second)
+ minute = ", [minute] minutes"
+ else if((day || hour) && !second)
+ minute = " and [minute] minutes"
+ else
+ minute = "[minute] minutes"
+ else
+ if((day || hour) && second)
+ minute = ", 1 minute"
+ else if((day || hour) && !second)
+ minute = " and 1 minute"
+ else
+ minute = "[truncate ? "minute" : "1 minute"]"
+ else
+ minute = null
+
+ if(!hour)
+ return "[minute][second]"
+ if(hour >= 24)
+ day = FLOOR(hour/24, 1)
+ hour = (hour - (day*24))
+ if(hour)
+ if(hour != 1)
+ if(day && (minute || second))
+ hour = ", [hour] hours"
+ else if(day && (!minute || !second))
+ hour = " and [hour] hours"
+ else
+ hour = "[hour] hours"
+ else
+ if(day && (minute || second))
+ hour = ", 1 hour"
+ else if(day && (!minute || !second))
+ hour = " and 1 hour"
+ else
+ hour = "[truncate ? "hour" : "1 hour"]"
+ else
+ hour = null
+
+ if(!day)
+ return "[hour][minute][second]"
+ if(day > 1)
+ day = "[day] days"
+ else
+ day = "[truncate ? "day" : "1 day"]"
+
+ return "[day][hour][minute][second]"
diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm
index 91720600dd..4f9e7d00b1 100644
--- a/code/_helpers/unsorted.dm
+++ b/code/_helpers/unsorted.dm
@@ -519,6 +519,14 @@ Turf and target are seperate in case you want to teleport some distance from a t
return "[round((powerused * 0.000001),0.001)] MW"
return "[round((powerused * 0.000000001),0.0001)] GW"
+/proc/get_mob_by_ckey(key)
+ if(!key)
+ return
+ var/list/mobs = sortmobs()
+ for(var/mob/M in mobs)
+ if(M.ckey == key)
+ return M
+
//Forces a variable to be posative
/proc/modulus(var/M)
if(M >= 0)
@@ -1429,4 +1437,4 @@ var/mob/dview/dview_mob = new
return "North-Northwest"
/proc/pass()
- return
\ No newline at end of file
+ return
diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm
index 484adf6068..3abb5012c7 100644
--- a/code/game/machinery/camera/camera.dm
+++ b/code/game/machinery/camera/camera.dm
@@ -390,7 +390,7 @@
return 0
// Do after stuff here
- user << "You start to weld the [src].."
+ user << "You start to weld [src].."
playsound(src.loc, WT.usesound, 50, 1)
WT.eyecheck(user)
busy = 1
diff --git a/code/game/machinery/computer/atmos_control.dm b/code/game/machinery/computer/atmos_control.dm
index 3826eb3c94..14ba6dd005 100644
--- a/code/game/machinery/computer/atmos_control.dm
+++ b/code/game/machinery/computer/atmos_control.dm
@@ -20,6 +20,7 @@
/obj/machinery/computer/atmoscontrol/laptop
name = "Atmospherics Laptop"
desc = "A cheap laptop."
+ icon_screen = "atmoslaptop"
icon_state = "laptop"
icon_keyboard = "laptop_key"
density = 0
diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm
index 30182937d4..c153e37190 100644
--- a/code/game/machinery/computer/medical.dm
+++ b/code/game/machinery/computer/medical.dm
@@ -5,6 +5,7 @@
desc = "Used to view, edit and maintain medical records."
icon_keyboard = "med_key"
icon_screen = "medcomp"
+ density = 0 //Why does a laptop blocks peoples.
light_color = "#315ab4"
req_one_access = list(access_medical, access_forensics_lockers, access_robotics)
circuit = /obj/item/weapon/circuitboard/med_data
diff --git a/code/game/machinery/computer/supply.dm b/code/game/machinery/computer/supply.dm
index af3a21a053..fcaa2b4d8a 100644
--- a/code/game/machinery/computer/supply.dm
+++ b/code/game/machinery/computer/supply.dm
@@ -43,6 +43,8 @@
return 1
+
+
/obj/machinery/computer/supplycomp/ui_interact(mob/user, ui_key = "supply_records", var/datum/nanoui/ui = null, var/force_open = 1, var/key_state = null)
var/data[0]
var/shuttle_status[0] // Supply shuttle status
@@ -180,6 +182,8 @@
ui.set_auto_update(20) // Longer term to reduce the rate of data collection and processing
+
+
/obj/machinery/computer/supplycomp/Topic(href, href_list)
if(!supply_controller)
world.log << "## ERROR: The supply_controller datum is missing."
diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm
index 6993d988dd..64987c863c 100644
--- a/code/game/machinery/cryo.dm
+++ b/code/game/machinery/cryo.dm
@@ -205,7 +205,7 @@
var/mob/M = grab.affecting
qdel(grab)
put_mob(M)
-
+
return
/obj/machinery/atmospherics/unary/cryo_cell/MouseDrop_T(var/mob/target, var/mob/user) //Allows borgs to put people into cryo without external assistance
diff --git a/code/game/machinery/oxygen_pump.dm b/code/game/machinery/oxygen_pump.dm
index fd6a1048c7..2f781129b6 100644
--- a/code/game/machinery/oxygen_pump.dm
+++ b/code/game/machinery/oxygen_pump.dm
@@ -33,7 +33,7 @@
if(breather.internals)
breather.internals.icon_state = "internal0"
breather.remove_from_mob(contained)
- visible_message("The mask rapidly retracts just before /the [src] is destroyed!")
+ visible_message("\The [contained] rapidly retracts just before /the [src] is destroyed!")
breather = null
QDEL_NULL(tank)
@@ -45,11 +45,11 @@
if(istype(target) && CanMouseDrop(target))
if(!can_apply_to_target(target, usr)) // There is no point in attempting to apply a mask if it's impossible.
return
- usr.visible_message("\The [usr] begins placing the mask onto [target]..")
+ usr.visible_message("\The [usr] begins placing \the [contained] onto [target].")
if(!do_mob(usr, target, 25) || !can_apply_to_target(target, usr))
return
// place mask and add fingerprints
- usr.visible_message("\The [usr] has placed \the mask on [target]'s mouth.")
+ usr.visible_message("\The [usr] has placed \the [contained] on [target]'s mouth.")
attach_mask(target)
src.add_fingerprint(usr)
@@ -69,7 +69,7 @@
tank.forceMove(src)
breather.remove_from_mob(contained)
contained.forceMove(src)
- src.visible_message("\The [user] makes \The [contained] rapidly retracts back into \the [src]!")
+ src.visible_message("\The [user] makes \the [contained] rapidly retract back into \the [src]!")
if(breather.internals)
breather.internals.icon_state = "internal0"
breather = null
@@ -112,7 +112,7 @@
to_chat(user, "There is no tank in \the [src].")
return
if(stat & MAINT)
- to_chat(user, "Please close \the maintenance hatch first.")
+ to_chat(user, "Please close the maintenance hatch first.")
return
if(!Adjacent(target))
to_chat(user, "Please stay close to \the [src].")
@@ -123,18 +123,15 @@
return
//Checking if breather is still valid
if(target == breather && target.wear_mask != contained)
- to_chat(user, "\The [target] is not using the supplied mask.")
+ to_chat(user, "\The [target] is not using the supplied [contained].")
return
return 1
/obj/machinery/oxygen_pump/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(W.is_screwdriver())
stat ^= MAINT
- user.visible_message("\The [user] [stat & MAINT ? "opens" : "closes"] \the [src].", "You [stat & MAINT ? "open" : "close"] \the [src].")
- if(stat & MAINT)
- icon_state = icon_state_open
- if(!stat)
- icon_state = icon_state_closed
+ user.visible_message("\The [user] [(stat & MAINT) ? "opens" : "closes"] \the [src].", "You [(stat & MAINT) ? "open" : "close"] \the [src].")
+ icon_state = (stat & MAINT) ? icon_state_open : icon_state_closed
//TO-DO: Open icon
if(istype(W, /obj/item/weapon/tank) && (stat & MAINT))
if(tank)
@@ -151,7 +148,7 @@
/obj/machinery/oxygen_pump/examine(var/mob/user)
. = ..()
if(tank)
- to_chat(user, "The meter shows [round(tank.air_contents.return_pressure())]")
+ to_chat(user, "The meter shows [round(tank.air_contents.return_pressure())] kPa.")
else
to_chat(user, "It is missing a tank!")
diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm
new file mode 100644
index 0000000000..4e28a370f7
--- /dev/null
+++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm
@@ -0,0 +1,46 @@
+/obj/effect/temp_visual/decoy
+ desc = "It's a decoy!"
+ duration = 15
+
+/obj/effect/temp_visual/decoy/initialize(mapload, atom/mimiced_atom, var/customappearance)
+ . = ..()
+ alpha = initial(alpha)
+ if(mimiced_atom)
+ name = mimiced_atom.name
+ appearance = mimiced_atom.appearance
+ set_dir(mimiced_atom.dir)
+ mouse_opacity = 0
+ if(customappearance)
+ appearance = customappearance
+
+/obj/effect/temp_visual/decoy/fading/initialize(mapload, atom/mimiced_atom)
+ . = ..()
+ animate(src, alpha = 0, time = duration)
+
+/obj/effect/temp_visual/decoy/fading/fivesecond
+ duration = 50
+
+/obj/effect/temp_visual/small_smoke
+ icon_state = "smoke"
+ duration = 50
+
+// VOREStation Add - Used by Kinetic Accelerator
+/obj/effect/temp_visual/kinetic_blast
+ name = "kinetic explosion"
+ icon = 'icons/obj/projectiles.dmi'
+ icon_state = "kinetic_blast"
+ layer = ABOVE_MOB_LAYER
+ duration = 4
+
+/obj/effect/temp_visual/explosion
+ name = "explosion"
+ icon = 'icons/effects/96x96.dmi'
+ icon_state = "explosion"
+ pixel_x = -32
+ pixel_y = -32
+ duration = 8
+
+/obj/effect/temp_visual/explosion/fast
+ icon_state = "explosionfast"
+ duration = 4
+// VOREStation Add End
diff --git a/code/game/objects/effects/temporary_visuals/temproary_visual.dm b/code/game/objects/effects/temporary_visuals/temproary_visual.dm
new file mode 100644
index 0000000000..79a8797bae
--- /dev/null
+++ b/code/game/objects/effects/temporary_visuals/temproary_visual.dm
@@ -0,0 +1,36 @@
+//temporary visual effects
+/obj/effect/temp_visual
+ icon = 'icons/effects/effects.dmi'
+ icon_state = "nothing"
+ anchored = TRUE
+ layer = ABOVE_MOB_LAYER
+ mouse_opacity = 0
+ var/duration = 10 //in deciseconds
+ var/randomdir = TRUE
+
+/obj/effect/temp_visual/initialize()
+ . = ..()
+ if(randomdir)
+ set_dir(pick(cardinal))
+
+ spawn(duration)
+ qdel(src)
+
+/obj/effect/temp_visual/singularity_act()
+ return
+
+/obj/effect/temp_visual/singularity_pull()
+ return
+
+/obj/effect/temp_visual/ex_act()
+ return
+
+/*
+/obj/effect/temp_visual/dir_setting
+ randomdir = FALSE
+
+/obj/effect/temp_visual/dir_setting/Initialize(mapload, set_dir)
+ if(set_dir)
+ setDir(set_dir)
+ . = ..()
+*/ //More tg stuff that might be useful later
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 6c4895e42b..be332a47e5 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -111,6 +111,13 @@
src.loc = null
return ..()
+// Check if target is reasonable for us to operate on.
+/obj/item/proc/check_allowed_items(atom/target, not_inside, target_self)
+ if(((src in target) && !target_self) || ((!istype(target.loc, /turf)) && (!istype(target, /turf)) && (not_inside)))
+ return FALSE
+ else
+ return TRUE
+
/obj/item/proc/update_twohanding()
update_held_icon()
@@ -622,7 +629,7 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
var/cannotzoom
- if(usr.stat || !(istype(usr,/mob/living/carbon/human)))
+ if((usr.stat && !zoom) || !(istype(usr,/mob/living/carbon/human)))
usr << "You are unable to focus through the [devicename]"
cannotzoom = 1
else if(!zoom && global_hud.darkMask[1] in usr.client.screen)
@@ -632,39 +639,46 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
usr << "You are too distracted to look through the [devicename], perhaps if it was in your active hand this might work better"
cannotzoom = 1
+ //We checked above if they are a human and returned already if they weren't.
+ var/mob/living/carbon/human/H = usr
+
if(!zoom && !cannotzoom)
- if(usr.hud_used.hud_shown)
- usr.toggle_zoom_hud() // If the user has already limited their HUD this avoids them having a HUD when they zoom in
- usr.client.view = viewsize
+ if(H.hud_used.hud_shown)
+ H.toggle_zoom_hud() // If the user has already limited their HUD this avoids them having a HUD when they zoom in
+ H.client.view = viewsize
zoom = 1
var/tilesize = 32
var/viewoffset = tilesize * tileoffset
- switch(usr.dir)
+ switch(H.dir)
if (NORTH)
- usr.client.pixel_x = 0
- usr.client.pixel_y = viewoffset
+ H.client.pixel_x = 0
+ H.client.pixel_y = viewoffset
if (SOUTH)
- usr.client.pixel_x = 0
- usr.client.pixel_y = -viewoffset
+ H.client.pixel_x = 0
+ H.client.pixel_y = -viewoffset
if (EAST)
- usr.client.pixel_x = viewoffset
- usr.client.pixel_y = 0
+ H.client.pixel_x = viewoffset
+ H.client.pixel_y = 0
if (WEST)
- usr.client.pixel_x = -viewoffset
- usr.client.pixel_y = 0
+ H.client.pixel_x = -viewoffset
+ H.client.pixel_y = 0
- usr.visible_message("[usr] peers through the [zoomdevicename ? "[zoomdevicename] of the [src.name]" : "[src.name]"].")
+ H.visible_message("[usr] peers through the [zoomdevicename ? "[zoomdevicename] of the [src.name]" : "[src.name]"].")
+ H.looking_elsewhere = TRUE
+ H.handle_vision()
else
- usr.client.view = world.view
- if(!usr.hud_used.hud_shown)
- usr.toggle_zoom_hud()
+ H.client.view = world.view
+ if(!H.hud_used.hud_shown)
+ H.toggle_zoom_hud()
zoom = 0
- usr.client.pixel_x = 0
- usr.client.pixel_y = 0
+ H.client.pixel_x = 0
+ H.client.pixel_y = 0
+ H.looking_elsewhere = FALSE
+ H.handle_vision()
if(!cannotzoom)
usr.visible_message("[zoomdevicename ? "[usr] looks up from the [src.name]" : "[usr] lowers the [src.name]"].")
diff --git a/code/game/objects/items/paintkit.dm b/code/game/objects/items/paintkit.dm
index 87b7566b60..4b3bd408d2 100644
--- a/code/game/objects/items/paintkit.dm
+++ b/code/game/objects/items/paintkit.dm
@@ -149,6 +149,52 @@
return
return ..()
+/obj/item/device/kit/suit/rig
+ name = "rig modification kit"
+ desc = "A kit for modifying a rigsuit."
+ uses = 1
+
+/obj/item/device/kit/suit/rig/customize(var/obj/item/I, var/mob/user)
+ var/obj/item/weapon/rig/RIG = I
+ RIG.suit_state = new_icon
+ RIG.suit_type = "customized [initial(RIG.suit_type)]"
+ RIG.name = "[new_name]"
+ RIG.desc = new_desc
+ RIG.icon = new_icon_file
+ RIG.icon_state = new_icon
+ RIG.icon_override = new_icon_override_file
+ for(var/obj/item/piece in list(RIG.gloves,RIG.helmet,RIG.boots,RIG.chest))
+ if(!istype(piece))
+ continue
+ piece.name = "[RIG.suit_type] [initial(piece.name)]"
+ piece.desc = "It seems to be part of a [RIG.name]."
+ piece.icon_state = "[RIG.suit_state]"
+ if(istype(piece, /obj/item/clothing/shoes))
+ icon = 'icons/mob/custom_items_rig_boots.dmi'
+ icon_override = 'icons/mob/custom_items_rig_boots.dmi'
+ if(istype(piece, /obj/item/clothing/suit))
+ icon = 'icons/mob/custom_items_rig_suit.dmi'
+ icon_override = 'icons/mob/custom_items_rig_suit.dmi'
+ if(istype(piece, /obj/item/clothing/head))
+ icon = 'icons/mob/custom_items_rig_helmet.dmi'
+ icon_override = 'icons/mob/custom_items_rig_helmet.dmi'
+ if(istype(piece, /obj/item/clothing/gloves))
+ icon = 'icons/mob/custom_items_rig_gloves.dmi'
+ icon_override = 'icons/mob/custom_items_rig_gloves.dmi'
+ if(RIG.helmet && istype(RIG.helmet, /obj/item/clothing/head/helmet) && new_light_overlay)
+ var/obj/item/clothing/head/helmet/H = RIG.helmet
+ H.light_overlay = new_light_overlay
+ use(1,user)
+
+/obj/item/device/kit/suit/rig/can_customize(var/obj/item/I)
+ return istype(I, /obj/item/weapon/rig)
+
+/obj/item/weapon/rig/attackby(var/obj/item/O, var/mob/user)
+ if(istype(O,/obj/item/device/kit/suit))
+ var/obj/item/device/kit/suit/rig/kit = O
+ kit.customize(src, user)
+ return
+ return ..()
/obj/item/device/kit/paint
name = "mecha customisation kit"
diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm
index 02e121d02c..8b2590589e 100644
--- a/code/game/objects/items/toys.dm
+++ b/code/game/objects/items/toys.dm
@@ -887,6 +887,7 @@
icon_state = "nymphplushie"
w_class = ITEMSIZE_TINY
var/last_message = 0
+ var/pokephrase = "Uww!"
/obj/item/toy/plushie/attack_self(mob/user as mob)
if(world.time - last_message <= 1 SECOND)
@@ -899,6 +900,7 @@
user.visible_message("\The [user] attempts to strangle [src]!","You attempt to strangle [src]!")
else
user.visible_message("\The [user] pokes [src].","You poke [src].")
+ visible_message("[src] says, \"[pokephrase]\"")
last_message = world.time
/obj/item/toy/plushie/verb/rename_plushie()
@@ -926,121 +928,199 @@
name = "diona nymph plush"
desc = "A plushie of an adorable diona nymph! While its level of self-awareness is still being debated, its level of cuteness is not."
icon_state = "nymphplushie"
+ pokephrase = "Chirp!"
/obj/item/toy/plushie/mouse
name = "mouse plush"
desc = "A plushie of a delightful mouse! What was once considered a vile rodent is now your very best friend."
icon_state = "mouseplushie"
+ pokephrase = "Squeak!"
/obj/item/toy/plushie/kitten
name = "kitten plush"
desc = "A plushie of a cute kitten! Watch as it purrs its way right into your heart."
icon_state = "kittenplushie"
+ pokephrase = "Mrow!"
/obj/item/toy/plushie/lizard
name = "lizard plush"
desc = "A plushie of a scaly lizard! Very controversial, after being accused as \"racist\" by some Unathi."
icon_state = "lizardplushie"
+ pokephrase = "Hiss!"
/obj/item/toy/plushie/spider
name = "spider plush"
desc = "A plushie of a fuzzy spider! It has eight legs - all the better to hug you with."
icon_state = "spiderplushie"
+ pokephrase = "Sksksk!"
/obj/item/toy/plushie/farwa
name = "farwa plush"
desc = "A farwa plush doll. It's soft and comforting!"
icon_state = "farwaplushie"
+ pokephrase = "Squaw!"
/obj/item/toy/plushie/corgi
name = "corgi plushie"
icon_state = "corgi"
+ pokephrase = "Woof!"
/obj/item/toy/plushie/girly_corgi
name = "corgi plushie"
icon_state = "girlycorgi"
+ pokephrase = "Arf!"
/obj/item/toy/plushie/robo_corgi
name = "borgi plushie"
icon_state = "robotcorgi"
+ pokephrase = "Bark."
/obj/item/toy/plushie/octopus
name = "octopus plushie"
icon_state = "loveable"
+ pokephrase = "Squish!"
/obj/item/toy/plushie/face_hugger
name = "facehugger plushie"
icon_state = "huggable"
+ pokephrase = "Hug!"
//foxes are basically the best
/obj/item/toy/plushie/red_fox
name = "red fox plushie"
icon_state = "redfox"
+ pokephrase = "Gecker!"
/obj/item/toy/plushie/black_fox
name = "black fox plushie"
icon_state = "blackfox"
+ pokephrase = "Ack!"
/obj/item/toy/plushie/marble_fox
name = "marble fox plushie"
icon_state = "marblefox"
+ pokephrase = "Awoo!"
/obj/item/toy/plushie/blue_fox
name = "blue fox plushie"
icon_state = "bluefox"
+ pokephrase = "Yoww!"
/obj/item/toy/plushie/orange_fox
name = "orange fox plushie"
icon_state = "orangefox"
+ pokephrase = "Yagh!"
/obj/item/toy/plushie/coffee_fox
name = "coffee fox plushie"
icon_state = "coffeefox"
+ pokephrase = "Gerr!"
/obj/item/toy/plushie/pink_fox
name = "pink fox plushie"
icon_state = "pinkfox"
+ pokephrase = "Yack!"
/obj/item/toy/plushie/purple_fox
name = "purple fox plushie"
icon_state = "purplefox"
+ pokephrase = "Whine!"
/obj/item/toy/plushie/crimson_fox
name = "crimson fox plushie"
icon_state = "crimsonfox"
+ pokephrase = "Auuu!"
/obj/item/toy/plushie/deer
name = "deer plushie"
icon_state = "deer"
+ pokephrase = "Bleat!"
/obj/item/toy/plushie/black_cat
name = "black cat plushie"
icon_state = "blackcat"
+ pokephrase = "Mlem!"
/obj/item/toy/plushie/grey_cat
name = "grey cat plushie"
icon_state = "greycat"
+ pokephrase = "Mraw!"
/obj/item/toy/plushie/white_cat
name = "white cat plushie"
icon_state = "whitecat"
+ pokephrase = "Mew!"
/obj/item/toy/plushie/orange_cat
name = "orange cat plushie"
icon_state = "orangecat"
+ pokephrase = "Meow!"
/obj/item/toy/plushie/siamese_cat
name = "siamese cat plushie"
icon_state = "siamesecat"
+ pokephrase = "Mrew?"
/obj/item/toy/plushie/tabby_cat
name = "tabby cat plushie"
icon_state = "tabbycat"
+ pokephrase = "Purr!"
/obj/item/toy/plushie/tuxedo_cat
name = "tuxedo cat plushie"
icon_state = "tuxedocat"
+ pokephrase = "Mrowww!!"
+
+// nah, squids are better than foxes :>
+
+/obj/item/toy/plushie/squid/green
+ name = "green squid plushie"
+ desc = "A small, cute and loveable squid friend. This one is green."
+ icon = 'icons/obj/toy.dmi'
+ icon_state = "greensquid"
+ slot_flags = SLOT_HEAD
+ pokephrase = "Squrr!"
+
+/obj/item/toy/plushie/squid/mint
+ name = "mint squid plushie"
+ desc = "A small, cute and loveable squid friend. This one is mint coloured."
+ icon = 'icons/obj/toy.dmi'
+ icon_state = "mintsquid"
+ slot_flags = SLOT_HEAD
+ pokephrase = "Blurble!"
+
+/obj/item/toy/plushie/squid/blue
+ name = "blue squid plushie"
+ desc = "A small, cute and loveable squid friend. This one is blue."
+ icon = 'icons/obj/toy.dmi'
+ icon_state = "bluesquid"
+ slot_flags = SLOT_HEAD
+ pokephrase = "Blob!"
+
+/obj/item/toy/plushie/squid/orange
+ name = "orange squid plushie"
+ desc = "A small, cute and loveable squid friend. This one is orange."
+ icon = 'icons/obj/toy.dmi'
+ icon_state = "orangesquid"
+ slot_flags = SLOT_HEAD
+ pokephrase = "Squash!"
+
+/obj/item/toy/plushie/squid/yellow
+ name = "yellow squid plushie"
+ desc = "A small, cute and loveable squid friend. This one is yellow."
+ icon = 'icons/obj/toy.dmi'
+ icon_state = "yellowsquid"
+ slot_flags = SLOT_HEAD
+ pokephrase = "Glorble!"
+
+/obj/item/toy/plushie/squid/pink
+ name = "pink squid plushie"
+ desc = "A small, cute and loveable squid friend. This one is pink."
+ icon = 'icons/obj/toy.dmi'
+ icon_state = "pinksquid"
+ slot_flags = SLOT_HEAD
+ pokephrase = "Wobble!"
// nah, squids are better than foxes :>
@@ -1322,4 +1402,4 @@
icon_state = "tinyxmastree"
w_class = ITEMSIZE_TINY
force = 1
- throwforce = 1
+ throwforce = 1
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm
index 40c074c939..923eea6b15 100644
--- a/code/game/objects/items/weapons/handcuffs.dm
+++ b/code/game/objects/items/weapons/handcuffs.dm
@@ -283,7 +283,7 @@ var/last_chew = 0
target.update_inv_legcuffed()
if(target.m_intent != "walk")
target.m_intent = "walk"
- if(target.hud_used && user.hud_used.move_intent)
+ if(target.hud_used && target.hud_used.move_intent)
target.hud_used.move_intent.icon_state = "walking"
return 1
@@ -334,6 +334,6 @@ var/last_chew = 0
target.update_inv_legcuffed()
if(target.m_intent != "walk")
target.m_intent = "walk"
- if(target.hud_used && user.hud_used.move_intent)
+ if(target.hud_used && target.hud_used.move_intent)
target.hud_used.move_intent.icon_state = "walking"
- return 1
\ No newline at end of file
+ return 1
diff --git a/code/game/objects/items/weapons/id cards/station_ids.dm b/code/game/objects/items/weapons/id cards/station_ids.dm
index d3d8b4d1a6..f3d6c7040b 100644
--- a/code/game/objects/items/weapons/id cards/station_ids.dm
+++ b/code/game/objects/items/weapons/id cards/station_ids.dm
@@ -30,6 +30,8 @@
var/rank = null //actual job
var/dorm = 0 // determines if this ID has claimed a dorm already
+ var/mining_points = 0 // For redeeming at mining equipment vendors
+
/obj/item/weapon/card/id/examine(mob/user)
set src in oview(1)
if(in_range(usr, src))
diff --git a/code/game/objects/items/weapons/material/ashtray.dm b/code/game/objects/items/weapons/material/ashtray.dm
index d5e7cd67bb..8becb48010 100644
--- a/code/game/objects/items/weapons/material/ashtray.dm
+++ b/code/game/objects/items/weapons/material/ashtray.dm
@@ -14,7 +14,7 @@ var/global/list/ashtray_cache = list()
if(!material)
qdel(src)
return
- max_butts = round(material.hardness/10) //This is arbitrary but whatever.
+ max_butts = round(material.hardness/5) //This is arbitrary but whatever.
src.pixel_y = rand(-5, 5)
src.pixel_x = rand(-6, 6)
update_icon()
diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm
index 9c4a44d76d..1d338fc459 100644
--- a/code/game/objects/items/weapons/storage/firstaid.dm
+++ b/code/game/objects/items/weapons/storage/firstaid.dm
@@ -132,7 +132,8 @@
/obj/item/weapon/surgical/FixOVein,
/obj/item/stack/medical/advanced/bruise_pack,
/obj/item/stack/nanopaste,
- /obj/item/device/healthanalyzer/advanced
+ /obj/item/device/healthanalyzer/advanced,
+ /obj/item/weapon/autopsy_scanner
)
starts_with = list(
@@ -146,7 +147,8 @@
/obj/item/weapon/surgical/bonegel,
/obj/item/weapon/surgical/FixOVein,
/obj/item/stack/medical/advanced/bruise_pack,
- /obj/item/device/healthanalyzer/advanced
+ /obj/item/device/healthanalyzer/advanced,
+ /obj/item/weapon/autopsy_scanner
)
/obj/item/weapon/storage/firstaid/clotting
diff --git a/code/game/objects/items/weapons/tools/weldingtool.dm b/code/game/objects/items/weapons/tools/weldingtool.dm
index 6a6c28ff82..7c559b2344 100644
--- a/code/game/objects/items/weapons/tools/weldingtool.dm
+++ b/code/game/objects/items/weapons/tools/weldingtool.dm
@@ -1,612 +1,612 @@
-
-#define WELDER_FUEL_BURN_INTERVAL 13
-/*
- * Welding Tool
- */
-/obj/item/weapon/weldingtool
- name = "welding tool"
- icon = 'icons/obj/tools.dmi'
- icon_state = "welder"
- item_state = "welder"
- flags = CONDUCT
- slot_flags = SLOT_BELT
-
- //Amount of OUCH when it's thrown
- force = 3.0
- throwforce = 5.0
- throw_speed = 1
- throw_range = 5
- w_class = ITEMSIZE_SMALL
-
- //Cost to make in the autolathe
- matter = list(DEFAULT_WALL_MATERIAL = 70, "glass" = 30)
-
- //R&D tech level
- origin_tech = list(TECH_ENGINEERING = 1)
-
- //Welding tool specific stuff
- var/welding = 0 //Whether or not the welding tool is off(0), on(1) or currently welding(2)
- var/status = 1 //Whether the welder is secured or unsecured (able to attach rods to it to make a flamethrower)
- var/max_fuel = 20 //The max amount of fuel the welder can hold
-
- var/acti_sound = 'sound/items/welderactivate.ogg'
- var/deac_sound = 'sound/items/welderdeactivate.ogg'
- usesound = 'sound/items/Welder2.ogg'
- var/change_icons = TRUE
- var/flame_intensity = 2 //how powerful the emitted light is when used.
- var/flame_color = "#FF9933" // What color the welder light emits when its on. Default is an orange-ish color.
- var/eye_safety_modifier = 0 // Increasing this will make less eye protection needed to stop eye damage. IE at 1, sunglasses will fully protect.
- var/burned_fuel_for = 0 // Keeps track of how long the welder's been on, used to gradually empty the welder if left one, without RNG.
- var/always_process = FALSE // If true, keeps the welder on the process list even if it's off. Used for when it needs to regenerate fuel.
- toolspeed = 1
-
-/obj/item/weapon/weldingtool/New()
-// var/random_fuel = min(rand(10,20),max_fuel)
- var/datum/reagents/R = new/datum/reagents(max_fuel)
- reagents = R
- R.my_atom = src
- R.add_reagent("fuel", max_fuel)
- update_icon()
- if(always_process)
- processing_objects |= src
- ..()
-
-/obj/item/weapon/weldingtool/Destroy()
- if(welding || always_process)
- processing_objects -= src
- return ..()
-
-/obj/item/weapon/weldingtool/examine(mob/user)
- if(..(user, 0))
- if(max_fuel)
- to_chat(user, text("\icon[] The [] contains []/[] units of fuel!", src, src.name, get_fuel(),src.max_fuel ))
-
-/obj/item/weapon/weldingtool/attack(var/atom/A, var/mob/living/user, var/def_zone)
- if(ishuman(A) && user.a_intent == I_HELP)
- var/mob/living/carbon/human/H = A
- var/obj/item/organ/external/S = H.organs_by_name[user.zone_sel.selecting]
-
- if(!S || S.robotic < ORGAN_ROBOT || S.open == 3)
- return ..()
-
- if(!welding)
- to_chat(user, "You'll need to turn [src] on to patch the damage on [H]'s [S.name]!")
- return 1
-
- if(S.robo_repair(15, BRUTE, "some dents", src, user))
- remove_fuel(1, user)
- return 1
-
- return ..()
-
-/obj/item/weapon/weldingtool/attackby(obj/item/W as obj, mob/living/user as mob)
- if(istype(W,/obj/item/weapon/tool/screwdriver))
- if(welding)
- to_chat(user, "Stop welding first!")
- return
- status = !status
- if(status)
- to_chat(user, "You secure the welder.")
- else
- to_chat(user, "The welder can now be attached and modified.")
- src.add_fingerprint(user)
- return
-
- if((!status) && (istype(W,/obj/item/stack/rods)))
- var/obj/item/stack/rods/R = W
- R.use(1)
- var/obj/item/weapon/flamethrower/F = new/obj/item/weapon/flamethrower(user.loc)
- src.loc = F
- F.weldtool = src
- if (user.client)
- user.client.screen -= src
- if (user.r_hand == src)
- user.remove_from_mob(src)
- else
- user.remove_from_mob(src)
- src.master = F
- src.layer = initial(src.layer)
- user.remove_from_mob(src)
- if (user.client)
- user.client.screen -= src
- src.loc = F
- src.add_fingerprint(user)
- return
-
- ..()
- return
-
-
-/obj/item/weapon/weldingtool/process()
- if(welding)
- ++burned_fuel_for
- if(burned_fuel_for >= WELDER_FUEL_BURN_INTERVAL)
- remove_fuel(1)
-
-
-
- if(get_fuel() < 1)
- setWelding(0)
-
- //I'm not sure what this does. I assume it has to do with starting fires...
- //...but it doesnt check to see if the welder is on or not.
- var/turf/location = src.loc
- if(istype(location, /mob/living))
- var/mob/living/M = location
- if(M.item_is_in_hands(src))
- location = get_turf(M)
- if (istype(location, /turf))
- location.hotspot_expose(700, 5)
-
-
-/obj/item/weapon/weldingtool/afterattack(obj/O as obj, mob/user as mob, proximity)
- if(!proximity) return
- if (istype(O, /obj/structure/reagent_dispensers/fueltank) && get_dist(src,O) <= 1)
- if(!welding && max_fuel)
- O.reagents.trans_to_obj(src, max_fuel)
- to_chat(user, "Welder refueled")
- playsound(src.loc, 'sound/effects/refill.ogg', 50, 1, -6)
- return
- else if(!welding)
- to_chat(user, "[src] doesn't use fuel.")
- return
- else
- message_admins("[key_name_admin(user)] triggered a fueltank explosion with a welding tool.")
- log_game("[key_name(user)] triggered a fueltank explosion with a welding tool.")
- to_chat(user, "You begin welding on the fueltank and with a moment of lucidity you realize, this might not have been the smartest thing you've ever done.")
- var/obj/structure/reagent_dispensers/fueltank/tank = O
- tank.explode()
- return
- if (src.welding)
- remove_fuel(1)
- var/turf/location = get_turf(user)
- if(isliving(O))
- var/mob/living/L = O
- L.IgniteMob()
- if (istype(location, /turf))
- location.hotspot_expose(700, 50, 1)
- return
-
-
-/obj/item/weapon/weldingtool/attack_self(mob/user as mob)
- setWelding(!welding, usr)
- return
-
-//Returns the amount of fuel in the welder
-/obj/item/weapon/weldingtool/proc/get_fuel()
- return reagents.get_reagent_amount("fuel")
-
-/obj/item/weapon/weldingtool/proc/get_max_fuel()
- return max_fuel
-
-//Removes fuel from the welding tool. If a mob is passed, it will perform an eyecheck on the mob. This should probably be renamed to use()
-/obj/item/weapon/weldingtool/proc/remove_fuel(var/amount = 1, var/mob/M = null)
- if(!welding)
- return 0
- if(amount)
- burned_fuel_for = 0 // Reset the counter since we're removing fuel.
- if(get_fuel() >= amount)
- reagents.remove_reagent("fuel", amount)
- if(M)
- eyecheck(M)
- update_icon()
- return 1
- else
- if(M)
- to_chat(M, "You need more welding fuel to complete this task.")
- update_icon()
- return 0
-
-//Returns whether or not the welding tool is currently on.
-/obj/item/weapon/weldingtool/proc/isOn()
- return src.welding
-
-/obj/item/weapon/weldingtool/update_icon()
- ..()
- overlays.Cut()
- // Welding overlay.
- if(welding)
- var/image/I = image(icon, src, "[icon_state]-on")
- overlays.Add(I)
- item_state = "[initial(item_state)]1"
- else
- item_state = initial(item_state)
-
- // Fuel counter overlay.
- if(change_icons && get_max_fuel())
- var/ratio = get_fuel() / get_max_fuel()
- ratio = Ceiling(ratio*4) * 25
- var/image/I = image(icon, src, "[icon_state][ratio]")
- overlays.Add(I)
-
- // Lights
- if(welding && flame_intensity)
- set_light(flame_intensity, flame_intensity, flame_color)
- else
- set_light(0)
-
-// icon_state = welding ? "[icon_state]1" : "[initial(icon_state)]"
- var/mob/M = loc
- if(istype(M))
- M.update_inv_l_hand()
- M.update_inv_r_hand()
-
-/obj/item/weapon/weldingtool/MouseDrop(obj/over_object as obj)
- if(!canremove)
- return
-
- if (ishuman(usr) || issmall(usr)) //so monkeys can take off their backpacks -- Urist
-
- if (istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech. why?
- return
-
- if (!( istype(over_object, /obj/screen) ))
- return ..()
-
- //makes sure that the thing is equipped, so that we can't drag it into our hand from miles away.
- //there's got to be a better way of doing this.
- if (!(src.loc == usr) || (src.loc && src.loc.loc == usr))
- return
-
- if (( usr.restrained() ) || ( usr.stat ))
- return
-
- if ((src.loc == usr) && !(istype(over_object, /obj/screen)) && !usr.unEquip(src))
- return
-
- switch(over_object.name)
- if("r_hand")
- usr.u_equip(src)
- usr.put_in_r_hand(src)
- if("l_hand")
- usr.u_equip(src)
- usr.put_in_l_hand(src)
- src.add_fingerprint(usr)
-
-//Sets the welding state of the welding tool. If you see W.welding = 1 anywhere, please change it to W.setWelding(1)
-//so that the welding tool updates accordingly
-/obj/item/weapon/weldingtool/proc/setWelding(var/set_welding, var/mob/M)
- if(!status) return
-
- var/turf/T = get_turf(src)
- //If we're turning it on
- if(set_welding && !welding)
- if (get_fuel() > 0)
- if(M)
- to_chat(M, "You switch the [src] on.")
- else if(T)
- T.visible_message("\The [src] turns on.")
- playsound(loc, acti_sound, 50, 1)
- src.force = 15
- src.damtype = "fire"
- src.w_class = ITEMSIZE_LARGE
- src.hitsound = 'sound/items/welder.ogg'
- welding = 1
- update_icon()
- if(!always_process)
- processing_objects |= src
- else
- if(M)
- var/msg = max_fuel ? "welding fuel" : "charge"
- to_chat(M, "You need more [msg] to complete this task.")
- return
- //Otherwise
- else if(!set_welding && welding)
- if(!always_process)
- processing_objects -= src
- if(M)
- to_chat(M, "You switch \the [src] off.")
- else if(T)
- T.visible_message("\The [src] turns off.")
- playsound(loc, deac_sound, 50, 1)
- src.force = 3
- src.damtype = "brute"
- src.w_class = initial(src.w_class)
- src.welding = 0
- src.hitsound = initial(src.hitsound)
- update_icon()
-
-//Decides whether or not to damage a player's eyes based on what they're wearing as protection
-//Note: This should probably be moved to mob
-/obj/item/weapon/weldingtool/proc/eyecheck(mob/living/carbon/user)
- if(!istype(user))
- return 1
- var/safety = user.eyecheck()
- safety = between(-1, safety + eye_safety_modifier, 2)
- if(istype(user, /mob/living/carbon/human))
- var/mob/living/carbon/human/H = user
- var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name[O_EYES]
- if(!E)
- return
- switch(safety)
- if(1)
- to_chat(usr, "Your eyes sting a little.")
- E.damage += rand(1, 2)
- if(E.damage > 12)
- user.eye_blurry += rand(3,6)
- if(0)
- to_chat(usr, "Your eyes burn.")
- E.damage += rand(2, 4)
- if(E.damage > 10)
- E.damage += rand(4,10)
- if(-1)
- to_chat(usr, "Your thermals intensify the welder's glow. Your eyes itch and burn severely.")
- user.eye_blurry += rand(12,20)
- E.damage += rand(12, 16)
- if(safety<2)
-
- if(E.damage > 10)
- to_chat(user, "Your eyes are really starting to hurt. This can't be good for you!")
-
- if (E.damage >= E.min_broken_damage)
- to_chat(user, "You go blind!")
- user.sdisabilities |= BLIND
- else if (E.damage >= E.min_bruised_damage)
- to_chat(user, "You go blind!")
- user.Blind(5)
- user.eye_blurry = 5
- user.disabilities |= NEARSIGHTED
- spawn(100)
- user.disabilities &= ~NEARSIGHTED
- return
-
-/obj/item/weapon/weldingtool/is_hot()
- return isOn()
-
-/obj/item/weapon/weldingtool/largetank
- name = "industrial welding tool"
- desc = "A slightly larger welder with a larger tank."
- icon_state = "indwelder"
- max_fuel = 40
- origin_tech = list(TECH_ENGINEERING = 2, TECH_PHORON = 2)
- matter = list(DEFAULT_WALL_MATERIAL = 70, "glass" = 60)
-
-/obj/item/weapon/weldingtool/largetank/cyborg
- name = "integrated welding tool"
- desc = "An advanced welder designed to be used in robotic systems."
- toolspeed = 0.5
-
-/obj/item/weapon/weldingtool/hugetank
- name = "upgraded welding tool"
- desc = "A much larger welder with a huge tank."
- icon_state = "indwelder"
- max_fuel = 80
- w_class = ITEMSIZE_NORMAL
- origin_tech = list(TECH_ENGINEERING = 3)
- matter = list(DEFAULT_WALL_MATERIAL = 70, "glass" = 120)
-
-/obj/item/weapon/weldingtool/mini
- name = "emergency welding tool"
- desc = "A miniature welder used during emergencies."
- icon_state = "miniwelder"
- max_fuel = 10
- w_class = ITEMSIZE_SMALL
- matter = list(MAT_METAL = 30, MAT_GLASS = 10)
- change_icons = 0
- toolspeed = 2
- eye_safety_modifier = 1 // Safer on eyes.
-
-/obj/item/weapon/weldingtool/alien
- name = "alien welding tool"
- desc = "An alien welding tool. Whatever fuel it uses, it never runs out."
- icon = 'icons/obj/abductor.dmi'
- icon_state = "welder"
- toolspeed = 0.1
- flame_color = "#6699FF" // Light bluish.
- eye_safety_modifier = 2
- change_icons = 0
- origin_tech = list(TECH_PHORON = 5 ,TECH_ENGINEERING = 5)
- always_process = TRUE
-
-/obj/item/weapon/weldingtool/alien/process()
- if(get_fuel() <= get_max_fuel())
- reagents.add_reagent("fuel", 1)
- ..()
-
-/obj/item/weapon/weldingtool/experimental
- name = "experimental welding tool"
- desc = "An experimental welder capable of synthesizing its own fuel from waste compounds. It can output a flame hotter than regular welders."
- icon_state = "exwelder"
- max_fuel = 40
- w_class = ITEMSIZE_NORMAL
- origin_tech = list(TECH_ENGINEERING = 4, TECH_PHORON = 3)
- matter = list(DEFAULT_WALL_MATERIAL = 70, "glass" = 120)
- toolspeed = 0.5
- change_icons = 0
- flame_intensity = 3
- always_process = TRUE
- var/nextrefueltick = 0
-
-/obj/item/weapon/weldingtool/experimental/process()
- ..()
- if(get_fuel() < get_max_fuel() && nextrefueltick < world.time)
- nextrefueltick = world.time + 10
- reagents.add_reagent("fuel", 1)
-
-/*
- * Backpack Welder.
- */
-
-/obj/item/weapon/weldingtool/tubefed
- name = "tube-fed welding tool"
- desc = "A bulky, cooler-burning welding tool that draws from a worn welding tank."
- icon_state = "tubewelder"
- max_fuel = 10
- w_class = ITEMSIZE_NO_CONTAINER
- matter = null
- toolspeed = 1.25
- change_icons = 0
- flame_intensity = 1
- eye_safety_modifier = 1
- always_process = TRUE
- var/obj/item/weapon/weldpack/mounted_pack = null
-
-/obj/item/weapon/weldingtool/tubefed/New(location)
- ..()
- if(istype(location, /obj/item/weapon/weldpack))
- var/obj/item/weapon/weldpack/holder = location
- mounted_pack = holder
- else
- qdel(src)
-
-/obj/item/weapon/weldingtool/tubefed/Destroy()
- mounted_pack.nozzle = null
- mounted_pack = null
- return ..()
-
-/obj/item/weapon/weldingtool/tubefed/process()
- if(mounted_pack)
- if(!istype(mounted_pack.loc,/mob/living/carbon/human))
- mounted_pack.return_nozzle()
- else
- var/mob/living/carbon/human/H = mounted_pack.loc
- if(H.back != mounted_pack)
- mounted_pack.return_nozzle()
-
- if(mounted_pack.loc != src.loc && src.loc != mounted_pack)
- mounted_pack.return_nozzle()
- visible_message("\The [src] retracts to its fueltank.")
-
- if(get_fuel() <= get_max_fuel())
- mounted_pack.reagents.trans_to_obj(src, 1)
-
- ..()
-
-/obj/item/weapon/weldingtool/tubefed/dropped(mob/user)
- ..()
- if(src.loc != user)
- mounted_pack.return_nozzle()
- to_chat(user, "\The [src] retracts to its fueltank.")
-
-/*
- * Electric/Arc Welder
- */
-
-/obj/item/weapon/weldingtool/electric //AND HIS WELDING WAS ELECTRIC
- name = "electric welding tool"
- desc = "A welder which runs off of electricity."
- icon_state = "arcwelder"
- max_fuel = 0 //We'll handle the consumption later.
- item_state = "ewelder"
- var/obj/item/weapon/cell/power_supply //What type of power cell this uses
- var/charge_cost = 24 //The rough equivalent of 1 unit of fuel, based on us wanting 10 welds per battery
- var/cell_type = /obj/item/weapon/cell/device
- var/use_external_power = 0 //If in a borg or hardsuit, this needs to = 1
- flame_color = "#00CCFF" // Blue-ish, to set it apart from the gas flames.
- acti_sound = 'sound/effects/sparks4.ogg'
- deac_sound = 'sound/effects/sparks4.ogg'
-
-/obj/item/weapon/weldingtool/electric/unloaded/New()
- cell_type = null
-
-/obj/item/weapon/weldingtool/electric/New()
- ..()
- if(cell_type == null)
- update_icon()
- else if(cell_type)
- power_supply = new cell_type(src)
- else
- power_supply = new /obj/item/weapon/cell/device(src)
- update_icon()
-
-/obj/item/weapon/weldingtool/electric/get_cell()
- return power_supply
-
-/obj/item/weapon/weldingtool/electric/examine(mob/user)
- if(get_dist(src, user) > 1)
- to_chat(user, desc)
- else // The << need to stay, for some reason
- if(power_supply)
- user << text("\icon[] The [] has [] charge left.", src, src.name, get_fuel())
- else
- user << text("\icon[] The [] has no power cell!", src, src.name)
-
-/obj/item/weapon/weldingtool/electric/get_fuel()
- if(use_external_power)
- var/obj/item/weapon/cell/external = get_external_power_supply()
- if(external)
- return external.charge
- else if(power_supply)
- return power_supply.charge
- else
- return 0
-
-/obj/item/weapon/weldingtool/electric/get_max_fuel()
- if(use_external_power)
- var/obj/item/weapon/cell/external = get_external_power_supply()
- if(external)
- return external.maxcharge
- else if(power_supply)
- return power_supply.maxcharge
- return 0
-
-/obj/item/weapon/weldingtool/electric/remove_fuel(var/amount = 1, var/mob/M = null)
- if(!welding)
- return 0
- if(get_fuel() >= amount)
- power_supply.checked_use(charge_cost)
- if(use_external_power)
- var/obj/item/weapon/cell/external = get_external_power_supply()
- if(!external || !external.use(charge_cost)) //Take power from the borg...
- power_supply.give(charge_cost) //Give it back to the cell.
- if(M)
- eyecheck(M)
- update_icon()
- return 1
- else
- if(M)
- to_chat(M, "You need more energy to complete this task.")
- update_icon()
- return 0
-
-/obj/item/weapon/weldingtool/electric/attack_hand(mob/user as mob)
- if(user.get_inactive_hand() == src)
- if(power_supply)
- power_supply.update_icon()
- user.put_in_hands(power_supply)
- power_supply = null
- to_chat(user, "You remove the cell from the [src].")
- setWelding(0)
- update_icon()
- return
- ..()
- else
- return ..()
-
-/obj/item/weapon/weldingtool/electric/attackby(obj/item/weapon/W, mob/user as mob)
- if(istype(W, /obj/item/weapon/cell))
- if(istype(W, /obj/item/weapon/cell/device))
- if(!power_supply)
- user.drop_item()
- W.loc = src
- power_supply = W
- to_chat(user, "You install a cell in \the [src].")
- update_icon()
- else
- to_chat(user, "\The [src] already has a cell.")
- else
- to_chat(user, "\The [src] cannot use that type of cell.")
- else
- ..()
-
-/obj/item/weapon/weldingtool/electric/proc/get_external_power_supply()
- if(isrobot(src.loc))
- var/mob/living/silicon/robot/R = src.loc
- return R.cell
- if(istype(src.loc, /obj/item/rig_module))
- var/obj/item/rig_module/module = src.loc
- if(module.holder && module.holder.wearer)
- var/mob/living/carbon/human/H = module.holder.wearer
- if(istype(H) && H.back)
- var/obj/item/weapon/rig/suit = H.back
- if(istype(suit))
- return suit.cell
- return null
-
-/obj/item/weapon/weldingtool/electric/mounted
- use_external_power = 1
-
-/obj/item/weapon/weldingtool/electric/mounted/cyborg
- toolspeed = 0.5
-
-#undef WELDER_FUEL_BURN_INTERVAL
+
+#define WELDER_FUEL_BURN_INTERVAL 13
+/*
+ * Welding Tool
+ */
+/obj/item/weapon/weldingtool
+ name = "\improper welding tool"
+ icon = 'icons/obj/tools.dmi'
+ icon_state = "welder"
+ item_state = "welder"
+ flags = CONDUCT
+ slot_flags = SLOT_BELT
+
+ //Amount of OUCH when it's thrown
+ force = 3.0
+ throwforce = 5.0
+ throw_speed = 1
+ throw_range = 5
+ w_class = ITEMSIZE_SMALL
+
+ //Cost to make in the autolathe
+ matter = list(DEFAULT_WALL_MATERIAL = 70, "glass" = 30)
+
+ //R&D tech level
+ origin_tech = list(TECH_ENGINEERING = 1)
+
+ //Welding tool specific stuff
+ var/welding = 0 //Whether or not the welding tool is off(0), on(1) or currently welding(2)
+ var/status = 1 //Whether the welder is secured or unsecured (able to attach rods to it to make a flamethrower)
+ var/max_fuel = 20 //The max amount of fuel the welder can hold
+
+ var/acti_sound = 'sound/items/welderactivate.ogg'
+ var/deac_sound = 'sound/items/welderdeactivate.ogg'
+ usesound = 'sound/items/Welder2.ogg'
+ var/change_icons = TRUE
+ var/flame_intensity = 2 //how powerful the emitted light is when used.
+ var/flame_color = "#FF9933" // What color the welder light emits when its on. Default is an orange-ish color.
+ var/eye_safety_modifier = 0 // Increasing this will make less eye protection needed to stop eye damage. IE at 1, sunglasses will fully protect.
+ var/burned_fuel_for = 0 // Keeps track of how long the welder's been on, used to gradually empty the welder if left one, without RNG.
+ var/always_process = FALSE // If true, keeps the welder on the process list even if it's off. Used for when it needs to regenerate fuel.
+ toolspeed = 1
+
+/obj/item/weapon/weldingtool/New()
+// var/random_fuel = min(rand(10,20),max_fuel)
+ var/datum/reagents/R = new/datum/reagents(max_fuel)
+ reagents = R
+ R.my_atom = src
+ R.add_reagent("fuel", max_fuel)
+ update_icon()
+ if(always_process)
+ processing_objects |= src
+ ..()
+
+/obj/item/weapon/weldingtool/Destroy()
+ if(welding || always_process)
+ processing_objects -= src
+ return ..()
+
+/obj/item/weapon/weldingtool/examine(mob/user)
+ if(..(user, 0))
+ if(max_fuel)
+ to_chat(user, text("\icon[] The [] contains []/[] units of fuel!", src, src.name, get_fuel(),src.max_fuel ))
+
+/obj/item/weapon/weldingtool/attack(var/atom/A, var/mob/living/user, var/def_zone)
+ if(ishuman(A) && user.a_intent == I_HELP)
+ var/mob/living/carbon/human/H = A
+ var/obj/item/organ/external/S = H.organs_by_name[user.zone_sel.selecting]
+
+ if(!S || S.robotic < ORGAN_ROBOT || S.open == 3)
+ return ..()
+
+ if(!welding)
+ to_chat(user, "You'll need to turn [src] on to patch the damage on [H]'s [S.name]!")
+ return 1
+
+ if(S.robo_repair(15, BRUTE, "some dents", src, user))
+ remove_fuel(1, user)
+ return 1
+
+ return ..()
+
+/obj/item/weapon/weldingtool/attackby(obj/item/W as obj, mob/living/user as mob)
+ if(istype(W,/obj/item/weapon/tool/screwdriver))
+ if(welding)
+ to_chat(user, "Stop welding first!")
+ return
+ status = !status
+ if(status)
+ to_chat(user, "You secure the welder.")
+ else
+ to_chat(user, "The welder can now be attached and modified.")
+ src.add_fingerprint(user)
+ return
+
+ if((!status) && (istype(W,/obj/item/stack/rods)))
+ var/obj/item/stack/rods/R = W
+ R.use(1)
+ var/obj/item/weapon/flamethrower/F = new/obj/item/weapon/flamethrower(user.loc)
+ src.loc = F
+ F.weldtool = src
+ if (user.client)
+ user.client.screen -= src
+ if (user.r_hand == src)
+ user.remove_from_mob(src)
+ else
+ user.remove_from_mob(src)
+ src.master = F
+ src.layer = initial(src.layer)
+ user.remove_from_mob(src)
+ if (user.client)
+ user.client.screen -= src
+ src.loc = F
+ src.add_fingerprint(user)
+ return
+
+ ..()
+ return
+
+
+/obj/item/weapon/weldingtool/process()
+ if(welding)
+ ++burned_fuel_for
+ if(burned_fuel_for >= WELDER_FUEL_BURN_INTERVAL)
+ remove_fuel(1)
+
+
+
+ if(get_fuel() < 1)
+ setWelding(0)
+
+ //I'm not sure what this does. I assume it has to do with starting fires...
+ //...but it doesnt check to see if the welder is on or not.
+ var/turf/location = src.loc
+ if(istype(location, /mob/living))
+ var/mob/living/M = location
+ if(M.item_is_in_hands(src))
+ location = get_turf(M)
+ if (istype(location, /turf))
+ location.hotspot_expose(700, 5)
+
+
+/obj/item/weapon/weldingtool/afterattack(obj/O as obj, mob/user as mob, proximity)
+ if(!proximity) return
+ if (istype(O, /obj/structure/reagent_dispensers/fueltank) && get_dist(src,O) <= 1)
+ if(!welding && max_fuel)
+ O.reagents.trans_to_obj(src, max_fuel)
+ to_chat(user, "Welder refueled")
+ playsound(src.loc, 'sound/effects/refill.ogg', 50, 1, -6)
+ return
+ else if(!welding)
+ to_chat(user, "[src] doesn't use fuel.")
+ return
+ else
+ message_admins("[key_name_admin(user)] triggered a fueltank explosion with a welding tool.")
+ log_game("[key_name(user)] triggered a fueltank explosion with a welding tool.")
+ to_chat(user, "You begin welding on the fueltank and with a moment of lucidity you realize, this might not have been the smartest thing you've ever done.")
+ var/obj/structure/reagent_dispensers/fueltank/tank = O
+ tank.explode()
+ return
+ if (src.welding)
+ remove_fuel(1)
+ var/turf/location = get_turf(user)
+ if(isliving(O))
+ var/mob/living/L = O
+ L.IgniteMob()
+ if (istype(location, /turf))
+ location.hotspot_expose(700, 50, 1)
+ return
+
+
+/obj/item/weapon/weldingtool/attack_self(mob/user as mob)
+ setWelding(!welding, usr)
+ return
+
+//Returns the amount of fuel in the welder
+/obj/item/weapon/weldingtool/proc/get_fuel()
+ return reagents.get_reagent_amount("fuel")
+
+/obj/item/weapon/weldingtool/proc/get_max_fuel()
+ return max_fuel
+
+//Removes fuel from the welding tool. If a mob is passed, it will perform an eyecheck on the mob. This should probably be renamed to use()
+/obj/item/weapon/weldingtool/proc/remove_fuel(var/amount = 1, var/mob/M = null)
+ if(!welding)
+ return 0
+ if(amount)
+ burned_fuel_for = 0 // Reset the counter since we're removing fuel.
+ if(get_fuel() >= amount)
+ reagents.remove_reagent("fuel", amount)
+ if(M)
+ eyecheck(M)
+ update_icon()
+ return 1
+ else
+ if(M)
+ to_chat(M, "You need more welding fuel to complete this task.")
+ update_icon()
+ return 0
+
+//Returns whether or not the welding tool is currently on.
+/obj/item/weapon/weldingtool/proc/isOn()
+ return src.welding
+
+/obj/item/weapon/weldingtool/update_icon()
+ ..()
+ overlays.Cut()
+ // Welding overlay.
+ if(welding)
+ var/image/I = image(icon, src, "[icon_state]-on")
+ overlays.Add(I)
+ item_state = "[initial(item_state)]1"
+ else
+ item_state = initial(item_state)
+
+ // Fuel counter overlay.
+ if(change_icons && get_max_fuel())
+ var/ratio = get_fuel() / get_max_fuel()
+ ratio = Ceiling(ratio*4) * 25
+ var/image/I = image(icon, src, "[icon_state][ratio]")
+ overlays.Add(I)
+
+ // Lights
+ if(welding && flame_intensity)
+ set_light(flame_intensity, flame_intensity, flame_color)
+ else
+ set_light(0)
+
+// icon_state = welding ? "[icon_state]1" : "[initial(icon_state)]"
+ var/mob/M = loc
+ if(istype(M))
+ M.update_inv_l_hand()
+ M.update_inv_r_hand()
+
+/obj/item/weapon/weldingtool/MouseDrop(obj/over_object as obj)
+ if(!canremove)
+ return
+
+ if (ishuman(usr) || issmall(usr)) //so monkeys can take off their backpacks -- Urist
+
+ if (istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech. why?
+ return
+
+ if (!( istype(over_object, /obj/screen) ))
+ return ..()
+
+ //makes sure that the thing is equipped, so that we can't drag it into our hand from miles away.
+ //there's got to be a better way of doing this.
+ if (!(src.loc == usr) || (src.loc && src.loc.loc == usr))
+ return
+
+ if (( usr.restrained() ) || ( usr.stat ))
+ return
+
+ if ((src.loc == usr) && !(istype(over_object, /obj/screen)) && !usr.unEquip(src))
+ return
+
+ switch(over_object.name)
+ if("r_hand")
+ usr.u_equip(src)
+ usr.put_in_r_hand(src)
+ if("l_hand")
+ usr.u_equip(src)
+ usr.put_in_l_hand(src)
+ src.add_fingerprint(usr)
+
+//Sets the welding state of the welding tool. If you see W.welding = 1 anywhere, please change it to W.setWelding(1)
+//so that the welding tool updates accordingly
+/obj/item/weapon/weldingtool/proc/setWelding(var/set_welding, var/mob/M)
+ if(!status) return
+
+ var/turf/T = get_turf(src)
+ //If we're turning it on
+ if(set_welding && !welding)
+ if (get_fuel() > 0)
+ if(M)
+ to_chat(M, "You switch the [src] on.")
+ else if(T)
+ T.visible_message("\The [src] turns on.")
+ playsound(loc, acti_sound, 50, 1)
+ src.force = 15
+ src.damtype = "fire"
+ src.w_class = ITEMSIZE_LARGE
+ src.hitsound = 'sound/items/welder.ogg'
+ welding = 1
+ update_icon()
+ if(!always_process)
+ processing_objects |= src
+ else
+ if(M)
+ var/msg = max_fuel ? "welding fuel" : "charge"
+ to_chat(M, "You need more [msg] to complete this task.")
+ return
+ //Otherwise
+ else if(!set_welding && welding)
+ if(!always_process)
+ processing_objects -= src
+ if(M)
+ to_chat(M, "You switch \the [src] off.")
+ else if(T)
+ T.visible_message("\The [src] turns off.")
+ playsound(loc, deac_sound, 50, 1)
+ src.force = 3
+ src.damtype = "brute"
+ src.w_class = initial(src.w_class)
+ src.welding = 0
+ src.hitsound = initial(src.hitsound)
+ update_icon()
+
+//Decides whether or not to damage a player's eyes based on what they're wearing as protection
+//Note: This should probably be moved to mob
+/obj/item/weapon/weldingtool/proc/eyecheck(mob/living/carbon/user)
+ if(!istype(user))
+ return 1
+ var/safety = user.eyecheck()
+ safety = between(-1, safety + eye_safety_modifier, 2)
+ if(istype(user, /mob/living/carbon/human))
+ var/mob/living/carbon/human/H = user
+ var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name[O_EYES]
+ if(!E)
+ return
+ switch(safety)
+ if(1)
+ to_chat(usr, "Your eyes sting a little.")
+ E.damage += rand(1, 2)
+ if(E.damage > 12)
+ user.eye_blurry += rand(3,6)
+ if(0)
+ to_chat(usr, "Your eyes burn.")
+ E.damage += rand(2, 4)
+ if(E.damage > 10)
+ E.damage += rand(4,10)
+ if(-1)
+ to_chat(usr, "Your thermals intensify the welder's glow. Your eyes itch and burn severely.")
+ user.eye_blurry += rand(12,20)
+ E.damage += rand(12, 16)
+ if(safety<2)
+
+ if(E.damage > 10)
+ to_chat(user, "Your eyes are really starting to hurt. This can't be good for you!")
+
+ if (E.damage >= E.min_broken_damage)
+ to_chat(user, "You go blind!")
+ user.sdisabilities |= BLIND
+ else if (E.damage >= E.min_bruised_damage)
+ to_chat(user, "You go blind!")
+ user.Blind(5)
+ user.eye_blurry = 5
+ user.disabilities |= NEARSIGHTED
+ spawn(100)
+ user.disabilities &= ~NEARSIGHTED
+ return
+
+/obj/item/weapon/weldingtool/is_hot()
+ return isOn()
+
+/obj/item/weapon/weldingtool/largetank
+ name = "industrial welding tool"
+ desc = "A slightly larger welder with a larger tank."
+ icon_state = "indwelder"
+ max_fuel = 40
+ origin_tech = list(TECH_ENGINEERING = 2, TECH_PHORON = 2)
+ matter = list(DEFAULT_WALL_MATERIAL = 70, "glass" = 60)
+
+/obj/item/weapon/weldingtool/largetank/cyborg
+ name = "integrated welding tool"
+ desc = "An advanced welder designed to be used in robotic systems."
+ toolspeed = 0.5
+
+/obj/item/weapon/weldingtool/hugetank
+ name = "upgraded welding tool"
+ desc = "A much larger welder with a huge tank."
+ icon_state = "indwelder"
+ max_fuel = 80
+ w_class = ITEMSIZE_NORMAL
+ origin_tech = list(TECH_ENGINEERING = 3)
+ matter = list(DEFAULT_WALL_MATERIAL = 70, "glass" = 120)
+
+/obj/item/weapon/weldingtool/mini
+ name = "emergency welding tool"
+ desc = "A miniature welder used during emergencies."
+ icon_state = "miniwelder"
+ max_fuel = 10
+ w_class = ITEMSIZE_SMALL
+ matter = list(MAT_METAL = 30, MAT_GLASS = 10)
+ change_icons = 0
+ toolspeed = 2
+ eye_safety_modifier = 1 // Safer on eyes.
+
+/obj/item/weapon/weldingtool/alien
+ name = "alien welding tool"
+ desc = "An alien welding tool. Whatever fuel it uses, it never runs out."
+ icon = 'icons/obj/abductor.dmi'
+ icon_state = "welder"
+ toolspeed = 0.1
+ flame_color = "#6699FF" // Light bluish.
+ eye_safety_modifier = 2
+ change_icons = 0
+ origin_tech = list(TECH_PHORON = 5 ,TECH_ENGINEERING = 5)
+ always_process = TRUE
+
+/obj/item/weapon/weldingtool/alien/process()
+ if(get_fuel() <= get_max_fuel())
+ reagents.add_reagent("fuel", 1)
+ ..()
+
+/obj/item/weapon/weldingtool/experimental
+ name = "experimental welding tool"
+ desc = "An experimental welder capable of synthesizing its own fuel from waste compounds. It can output a flame hotter than regular welders."
+ icon_state = "exwelder"
+ max_fuel = 40
+ w_class = ITEMSIZE_NORMAL
+ origin_tech = list(TECH_ENGINEERING = 4, TECH_PHORON = 3)
+ matter = list(DEFAULT_WALL_MATERIAL = 70, "glass" = 120)
+ toolspeed = 0.5
+ change_icons = 0
+ flame_intensity = 3
+ always_process = TRUE
+ var/nextrefueltick = 0
+
+/obj/item/weapon/weldingtool/experimental/process()
+ ..()
+ if(get_fuel() < get_max_fuel() && nextrefueltick < world.time)
+ nextrefueltick = world.time + 10
+ reagents.add_reagent("fuel", 1)
+
+/*
+ * Backpack Welder.
+ */
+
+/obj/item/weapon/weldingtool/tubefed
+ name = "tube-fed welding tool"
+ desc = "A bulky, cooler-burning welding tool that draws from a worn welding tank."
+ icon_state = "tubewelder"
+ max_fuel = 10
+ w_class = ITEMSIZE_NO_CONTAINER
+ matter = null
+ toolspeed = 1.25
+ change_icons = 0
+ flame_intensity = 1
+ eye_safety_modifier = 1
+ always_process = TRUE
+ var/obj/item/weapon/weldpack/mounted_pack = null
+
+/obj/item/weapon/weldingtool/tubefed/New(location)
+ ..()
+ if(istype(location, /obj/item/weapon/weldpack))
+ var/obj/item/weapon/weldpack/holder = location
+ mounted_pack = holder
+ else
+ qdel(src)
+
+/obj/item/weapon/weldingtool/tubefed/Destroy()
+ mounted_pack.nozzle = null
+ mounted_pack = null
+ return ..()
+
+/obj/item/weapon/weldingtool/tubefed/process()
+ if(mounted_pack)
+ if(!istype(mounted_pack.loc,/mob/living/carbon/human))
+ mounted_pack.return_nozzle()
+ else
+ var/mob/living/carbon/human/H = mounted_pack.loc
+ if(H.back != mounted_pack)
+ mounted_pack.return_nozzle()
+
+ if(mounted_pack.loc != src.loc && src.loc != mounted_pack)
+ mounted_pack.return_nozzle()
+ visible_message("\The [src] retracts to its fueltank.")
+
+ if(get_fuel() <= get_max_fuel())
+ mounted_pack.reagents.trans_to_obj(src, 1)
+
+ ..()
+
+/obj/item/weapon/weldingtool/tubefed/dropped(mob/user)
+ ..()
+ if(src.loc != user)
+ mounted_pack.return_nozzle()
+ to_chat(user, "\The [src] retracts to its fueltank.")
+
+/*
+ * Electric/Arc Welder
+ */
+
+/obj/item/weapon/weldingtool/electric //AND HIS WELDING WAS ELECTRIC
+ name = "electric welding tool"
+ desc = "A welder which runs off of electricity."
+ icon_state = "arcwelder"
+ max_fuel = 0 //We'll handle the consumption later.
+ item_state = "ewelder"
+ var/obj/item/weapon/cell/power_supply //What type of power cell this uses
+ var/charge_cost = 24 //The rough equivalent of 1 unit of fuel, based on us wanting 10 welds per battery
+ var/cell_type = /obj/item/weapon/cell/device
+ var/use_external_power = 0 //If in a borg or hardsuit, this needs to = 1
+ flame_color = "#00CCFF" // Blue-ish, to set it apart from the gas flames.
+ acti_sound = 'sound/effects/sparks4.ogg'
+ deac_sound = 'sound/effects/sparks4.ogg'
+
+/obj/item/weapon/weldingtool/electric/unloaded/New()
+ cell_type = null
+
+/obj/item/weapon/weldingtool/electric/New()
+ ..()
+ if(cell_type == null)
+ update_icon()
+ else if(cell_type)
+ power_supply = new cell_type(src)
+ else
+ power_supply = new /obj/item/weapon/cell/device(src)
+ update_icon()
+
+/obj/item/weapon/weldingtool/electric/get_cell()
+ return power_supply
+
+/obj/item/weapon/weldingtool/electric/examine(mob/user)
+ if(get_dist(src, user) > 1)
+ to_chat(user, desc)
+ else // The << need to stay, for some reason
+ if(power_supply)
+ user << text("\icon[] The [] has [] charge left.", src, src.name, get_fuel())
+ else
+ user << text("\icon[] The [] has no power cell!", src, src.name)
+
+/obj/item/weapon/weldingtool/electric/get_fuel()
+ if(use_external_power)
+ var/obj/item/weapon/cell/external = get_external_power_supply()
+ if(external)
+ return external.charge
+ else if(power_supply)
+ return power_supply.charge
+ else
+ return 0
+
+/obj/item/weapon/weldingtool/electric/get_max_fuel()
+ if(use_external_power)
+ var/obj/item/weapon/cell/external = get_external_power_supply()
+ if(external)
+ return external.maxcharge
+ else if(power_supply)
+ return power_supply.maxcharge
+ return 0
+
+/obj/item/weapon/weldingtool/electric/remove_fuel(var/amount = 1, var/mob/M = null)
+ if(!welding)
+ return 0
+ if(get_fuel() >= amount)
+ power_supply.checked_use(charge_cost)
+ if(use_external_power)
+ var/obj/item/weapon/cell/external = get_external_power_supply()
+ if(!external || !external.use(charge_cost)) //Take power from the borg...
+ power_supply.give(charge_cost) //Give it back to the cell.
+ if(M)
+ eyecheck(M)
+ update_icon()
+ return 1
+ else
+ if(M)
+ to_chat(M, "You need more energy to complete this task.")
+ update_icon()
+ return 0
+
+/obj/item/weapon/weldingtool/electric/attack_hand(mob/user as mob)
+ if(user.get_inactive_hand() == src)
+ if(power_supply)
+ power_supply.update_icon()
+ user.put_in_hands(power_supply)
+ power_supply = null
+ to_chat(user, "You remove the cell from the [src].")
+ setWelding(0)
+ update_icon()
+ return
+ ..()
+ else
+ return ..()
+
+/obj/item/weapon/weldingtool/electric/attackby(obj/item/weapon/W, mob/user as mob)
+ if(istype(W, /obj/item/weapon/cell))
+ if(istype(W, /obj/item/weapon/cell/device))
+ if(!power_supply)
+ user.drop_item()
+ W.loc = src
+ power_supply = W
+ to_chat(user, "You install a cell in \the [src].")
+ update_icon()
+ else
+ to_chat(user, "\The [src] already has a cell.")
+ else
+ to_chat(user, "\The [src] cannot use that type of cell.")
+ else
+ ..()
+
+/obj/item/weapon/weldingtool/electric/proc/get_external_power_supply()
+ if(isrobot(src.loc))
+ var/mob/living/silicon/robot/R = src.loc
+ return R.cell
+ if(istype(src.loc, /obj/item/rig_module))
+ var/obj/item/rig_module/module = src.loc
+ if(module.holder && module.holder.wearer)
+ var/mob/living/carbon/human/H = module.holder.wearer
+ if(istype(H) && H.back)
+ var/obj/item/weapon/rig/suit = H.back
+ if(istype(suit))
+ return suit.cell
+ return null
+
+/obj/item/weapon/weldingtool/electric/mounted
+ use_external_power = 1
+
+/obj/item/weapon/weldingtool/electric/mounted/cyborg
+ toolspeed = 0.5
+
+#undef WELDER_FUEL_BURN_INTERVAL
diff --git a/code/game/objects/random/mob.dm b/code/game/objects/random/mob.dm
index bc3082f99c..45a35f9b7a 100644
--- a/code/game/objects/random/mob.dm
+++ b/code/game/objects/random/mob.dm
@@ -201,4 +201,4 @@
return pick(prob(15);/mob/living/simple_mob/animal/passive/mouse/white,
prob(30);/mob/living/simple_mob/animal/passive/mouse/brown,
prob(30);/mob/living/simple_mob/animal/passive/mouse/gray,
- prob(25);/obj/random/mouseremains) //because figuring out how to come up with it picking nothing is beyond my coding ability.
\ No newline at end of file
+ prob(25);/obj/random/mouseremains) //because figuring out how to come up with it picking nothing is beyond my coding ability.
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index 1dc8336ae6..2dbadcc968 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -9,18 +9,26 @@
var/icon_closed = "closed"
var/icon_opened = "open"
var/opened = 0
- var/welded = 0
+ var/sealed = 0
+ var/seal_tool = /obj/item/weapon/weldingtool //Tool used to seal the closet, defaults to welder
var/wall_mounted = 0 //never solid (You can always pass over it)
var/health = 100
+
var/breakout = 0 //if someone is currently breaking out. mutex
+ var/breakout_time = 2 //2 minutes by default
+ var/breakout_sound = 'sound/effects/grillehit.ogg' //Sound that plays while breaking out
+
var/storage_capacity = 2 * MOB_MEDIUM //This is so that someone can't pack hundreds of items in a locker/crate
//then open it in a populated area to crash clients.
+ var/storage_cost = 40 //How much space this closet takes up if it's stuffed in another closet
+
var/open_sound = 'sound/machines/click.ogg'
var/close_sound = 'sound/machines/click.ogg'
- var/store_misc = 1
- var/store_items = 1
- var/store_mobs = 1
+ var/store_misc = 1 //Chameleon item check
+ var/store_items = 1 //Will the closet store items?
+ var/store_mobs = 1 //Will the closet store mobs?
+ var/max_closets = 0 //Number of other closets allowed on tile before it won't close.
var/list/starts_with
@@ -41,7 +49,7 @@
content_size += Ceiling(I.w_class/2)
if(content_size > storage_capacity-5)
storage_capacity = content_size + 5
-
+ update_icon()
/obj/structure/closet/examine(mob/user)
if(..(user, 1) && !opened)
@@ -50,29 +58,33 @@
if(!I.anchored)
content_size += Ceiling(I.w_class/2)
if(!content_size)
- user << "It is empty."
+ to_chat(user, "It is empty.")
else if(storage_capacity > content_size*4)
- user << "It is barely filled."
+ to_chat(user, "It is barely filled.")
else if(storage_capacity > content_size*2)
- user << "It is less than half full."
+ to_chat(user, "It is less than half full.")
else if(storage_capacity > content_size)
- user << "There is still some free space."
+ to_chat(user, "There is still some free space.")
else
- user << "It is full."
+ to_chat(user, "It is full.")
/obj/structure/closet/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(air_group || (height==0 || wall_mounted)) return 1
return (!density)
/obj/structure/closet/proc/can_open()
- if(src.welded)
+ if(src.sealed)
return 0
return 1
/obj/structure/closet/proc/can_close()
+ var/closet_count = 0
for(var/obj/structure/closet/closet in get_turf(src))
if(closet != src)
- return 0
+ if(!closet.anchored)
+ closet_count ++
+ if(closet_count > max_closets)
+ return 0
return 1
/obj/structure/closet/proc/dump_contents()
@@ -101,7 +113,7 @@
src.icon_state = src.icon_opened
src.opened = 1
playsound(src.loc, open_sound, 15, 1, -3)
- density = 0
+ density = !density
return 1
/obj/structure/closet/proc/close()
@@ -118,12 +130,14 @@
stored_units += store_items(stored_units)
if(store_mobs)
stored_units += store_mobs(stored_units)
+ if(max_closets)
+ stored_units += store_closets(stored_units)
src.icon_state = src.icon_closed
src.opened = 0
playsound(src.loc, close_sound, 15, 1, -3)
- density = 1
+ density = !density
return 1
//Cham Projector Exception
@@ -161,9 +175,25 @@
added_units += M.mob_size
return added_units
+/obj/structure/closet/proc/store_closets(var/stored_units)
+ var/added_units = 0
+ for(var/obj/structure/closet/C in src.loc)
+ if(C == src) //Don't store ourself
+ continue
+ if(C.anchored) //Don't worry about anchored things on the same tile
+ continue
+ if(C.max_closets) //Prevents recursive storage
+ continue
+ if(stored_units + added_units + storage_cost > storage_capacity)
+ break
+ C.forceMove(src)
+ added_units += storage_cost
+ return added_units
+
+
/obj/structure/closet/proc/toggle(mob/user as mob)
if(!(src.opened ? src.close() : src.open()))
- user << "It won't budge!"
+ to_chat(user, "It won't budge!")
return
update_icon()
@@ -221,7 +251,7 @@
if(!WT.isOn())
return
else
- user << "You need more welding fuel to complete this task."
+ to_chat(user, "You need more welding fuel to complete this task.")
return
playsound(src, WT.usesound, 50)
new /obj/item/stack/material/steel(src.loc)
@@ -247,21 +277,25 @@
W.forceMove(src.loc)
else if(istype(W, /obj/item/weapon/packageWrap))
return
- else if(istype(W, /obj/item/weapon/weldingtool))
- var/obj/item/weapon/weldingtool/WT = W
- if(!WT.remove_fuel(0,user))
- if(!WT.isOn())
- return
- else
- user << "You need more welding fuel to complete this task."
- return
- playsound(src, WT.usesound, 50)
- src.welded = !src.welded
- src.update_icon()
- for(var/mob/M in viewers(src))
- M.show_message("[src] has been [welded?"welded shut":"unwelded"] by [user.name].", 3, "You hear welding.", 2)
+ else if(seal_tool)
+ if(istype(W, seal_tool))
+ var/obj/item/weapon/S = W
+ if(istype(S, /obj/item/weapon/weldingtool))
+ var/obj/item/weapon/weldingtool/WT = S
+ if(!WT.remove_fuel(0,user))
+ if(!WT.isOn())
+ return
+ else
+ to_chat(user, "You need more welding fuel to complete this task.")
+ return
+ if(do_after(user, 20 * S.toolspeed))
+ playsound(src, S.usesound, 50)
+ src.sealed = !src.sealed
+ src.update_icon()
+ for(var/mob/M in viewers(src))
+ M.show_message("[src] has been [sealed?"sealed":"unsealed"] by [user.name].", 3)
else if(W.is_wrench())
- if(welded)
+ if(sealed)
if(anchored)
user.visible_message("\The [user] begins unsecuring \the [src] from the floor.", "You start unsecuring \the [src] from the floor.")
else
@@ -269,7 +303,7 @@
playsound(src, W.usesound, 50)
if(do_after(user, 20 * W.toolspeed))
if(!src) return
- user << "You [anchored? "un" : ""]secured \the [src]!"
+ to_chat(user, "You [anchored? "un" : ""]secured \the [src]!")
anchored = !anchored
else
src.attack_hand(user)
@@ -305,7 +339,7 @@
return
if(!src.open())
- user << "It won't budge!"
+ to_chat(user, "It won't budge!")
/obj/structure/closet/attack_hand(mob/user as mob)
src.add_fingerprint(user)
@@ -315,7 +349,7 @@
/obj/structure/closet/attack_self_tk(mob/user as mob)
src.add_fingerprint(user)
if(!src.toggle())
- usr << "It won't budge!"
+ to_chat(usr, "It won't budge!")
/obj/structure/closet/attack_ghost(mob/ghost)
if(ghost.client && ghost.client.inquisitive_ghost)
@@ -335,14 +369,14 @@
src.add_fingerprint(usr)
src.toggle(usr)
else
- usr << "This mob type can't use this verb."
+ to_chat(usr, "This mob type can't use this verb.")
-/obj/structure/closet/update_icon()//Putting the welded stuff in updateicon() so it's easy to overwrite for special cases (Fridges, cabinets, and whatnot)
+/obj/structure/closet/update_icon()//Putting the sealed stuff in updateicon() so it's easy to overwrite for special cases (Fridges, cabinets, and whatnot)
overlays.Cut()
if(!opened)
icon_state = icon_closed
- if(welded)
- overlays += "welded"
+ if(sealed)
+ overlays += "sealed"
else
icon_state = icon_opened
@@ -358,20 +392,19 @@
/obj/structure/closet/proc/req_breakout()
if(opened)
return 0 //Door's open... wait, why are you in it's contents then?
- if(!welded)
- return 0 //closed but not welded...
+ if(!sealed)
+ return 0 //closed but not sealed...
return 1
/obj/structure/closet/proc/mob_breakout(var/mob/living/escapee)
- var/breakout_time = 2 //2 minutes by default
if(breakout || !req_breakout())
return
escapee.setClickCooldown(100)
- //okay, so the closet is either welded or locked... resist!!!
- escapee << "You lean on the back of \the [src] and start pushing the door open. (this will take about [breakout_time] minutes)"
+ //okay, so the closet is either sealed or locked... resist!!!
+ to_chat(escapee, "You lean on the back of \the [src] and start pushing the door open. (this will take about [breakout_time] minutes)")
visible_message("\The [src] begins to shake violently!")
@@ -388,20 +421,20 @@
breakout = 0
return
- playsound(src.loc, 'sound/effects/grillehit.ogg', 100, 1)
+ playsound(src.loc, breakout_sound, 100, 1)
animate_shake()
add_fingerprint(escapee)
//Well then break it!
breakout = 0
- escapee << "You successfully break out!"
+ to_chat(escapee, "You successfully break out!")
visible_message("\The [escapee] successfully broke out of \the [src]!")
- playsound(src.loc, 'sound/effects/grillehit.ogg', 100, 1)
+ playsound(src.loc, breakout_sound, 100, 1)
break_open()
animate_shake()
/obj/structure/closet/proc/break_open()
- welded = 0
+ sealed = 0
update_icon()
//Do this to prevent contents from being opened into nullspace (read: bluespace)
if(istype(loc, /obj/structure/bigDelivery))
@@ -420,3 +453,9 @@
/obj/structure/closet/AllowDrop()
return TRUE
+
+/obj/structure/closet/return_air_for_internal_lifeform(var/mob/living/L)
+ if(src.loc)
+ if(istype(src.loc, /obj/structure/closet))
+ return (loc.return_air_for_internal_lifeform(L))
+ return return_air()
diff --git a/code/game/objects/structures/crates_lockers/closets/coffin.dm b/code/game/objects/structures/crates_lockers/closets/coffin.dm
index 67de5d38b9..6d5df80ed8 100644
--- a/code/game/objects/structures/crates_lockers/closets/coffin.dm
+++ b/code/game/objects/structures/crates_lockers/closets/coffin.dm
@@ -4,9 +4,161 @@
icon_state = "coffin"
icon_closed = "coffin"
icon_opened = "coffin_open"
+ seal_tool = /obj/item/weapon/tool/screwdriver
+ breakout_sound = 'sound/weapons/tablehit1.ogg'
/obj/structure/closet/coffin/update_icon()
if(!opened)
icon_state = icon_closed
else
icon_state = icon_opened
+
+/* Graves */
+/obj/structure/closet/grave
+ name = "grave"
+ desc = "Dirt."
+ icon_state = "grave"
+ icon_closed = "grave"
+ icon_opened = "grave_open"
+ seal_tool = null
+ breakout_sound = 'sound/weapons/thudswoosh.ogg'
+ anchored = 1
+ max_closets = 1
+ opened = 1
+
+/obj/structure/closet/grave/attack_hand(mob/user as mob)
+ if(opened)
+ visible_message("[user] starts to climb into \the [src.name].", \
+ "You start to lower yourself into \the [src.name].")
+ if(do_after(user, 50))
+ user.forceMove(src.loc)
+ visible_message("[user] climbs into \the [src.name].", \
+ "You climb into \the [src.name].")
+ else
+ visible_message("[user] decides not to climb into \the [src.name].", \
+ "You stop climbing into \the [src.name].")
+ return
+
+/obj/structure/closet/grave/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
+ if(opened && ismob(mover))
+ var/mob/M = mover
+ add_fingerprint(M)
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ if(H.m_intent == "walk")
+ to_chat(H, "You stop at the edge of \the [src.name].")
+ return FALSE
+ else
+ to_chat(H, "You fall into \the [src.name]!")
+ fall_in(H)
+ return TRUE
+ if(isrobot(M))
+ var/mob/living/silicon/robot/R = M
+ if(R.a_intent == I_HELP)
+ to_chat(R, "You stop at the edge of \the [src.name].")
+ return FALSE
+ else
+ to_chat(R, "You enter \the [src.name].")
+ return TRUE
+ return TRUE //Everything else can move over the graves
+
+/obj/structure/closet/grave/proc/fall_in(mob/living/L) //Only called on humans for now, but still
+ L.Weaken(5)
+ if(ishuman(L))
+ var/mob/living/carbon/human/H = L
+ var/limb_damage = rand(5,25)
+ H.adjustBruteLoss(limb_damage)
+
+/obj/structure/closet/grave/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ if(src.opened)
+ if(istype(W, /obj/item/weapon/shovel))
+ user.visible_message("[user] piles dirt into \the [src.name].", \
+ "You start to pile dirt into \the [src.name].", \
+ "You hear dirt being moved.")
+ if(do_after(user, 40 * W.toolspeed))
+ user.visible_message("[user] pats down the dirt on top of \the [src.name].", \
+ "You finish filling in \the [src.name].")
+ close()
+ return
+ else
+ user.visible_message("[user] stops filling in \the [src.name].", \
+ "You change your mind and stop filling in \the [src.name].")
+ return
+ if(istype(W, /obj/item/weapon/grab))
+ var/obj/item/weapon/grab/G = W
+ src.MouseDrop_T(G.affecting, user) //act like they were dragged onto the closet
+ return 0
+ if(istype(W,/obj/item/tk_grab))
+ return 0
+ if(istype(W, /obj/item/weapon/storage/laundry_basket) && W.contents.len)
+ var/obj/item/weapon/storage/laundry_basket/LB = W
+ var/turf/T = get_turf(src)
+ for(var/obj/item/I in LB.contents)
+ LB.remove_from_storage(I, T)
+ user.visible_message("[user] empties \the [LB] into \the [src].", \
+ "You empty \the [LB] into \the [src].", \
+ "You hear rustling of clothes.")
+ return
+ if(isrobot(user))
+ return
+ if(W.loc != user) // This should stop mounted modules ending up outside the module.
+ return
+ usr.drop_item()
+ if(W)
+ W.forceMove(src.loc)
+ else
+ if(istype(W, /obj/item/weapon/shovel))
+ if(user.a_intent == I_HURT) // Hurt intent means you're trying to kill someone, or just get rid of the grave
+ user.visible_message("[user] begins to smoothe out the dirt of \the [src.name].", \
+ "You start to smoothe out the dirt of \the [src.name].", \
+ "You hear dirt being moved.")
+ if(do_after(user, 40 * W.toolspeed))
+ user.visible_message("[user] finishes smoothing out \the [src.name].", \
+ "You finish smoothing out \the [src.name].")
+ if(LAZYLEN(contents))
+ alpha = 40 // If we've got stuff inside, like maybe a person, just make it hard to see us
+ else
+ qdel(src) // Else, go away
+ return
+ else
+ user.visible_message("[user] stops concealing \the [src.name].", \
+ "You stop concealing \the [src.name].")
+ return
+ else
+ user.visible_message("[user] begins to unearth \the [src.name].", \
+ "You start to unearth \the [src.name].", \
+ "You hear dirt being moved.")
+ if(do_after(user, 40 * W.toolspeed))
+ user.visible_message("[user] reaches the bottom of \the [src.name].", \
+ "You finish digging out \the [src.name].")
+ break_open()
+ return
+ else
+ user.visible_message("[user] stops digging out \the [src.name].", \
+ "You stop digging out \the [src.name].")
+ return
+ return
+
+/obj/structure/closet/grave/close()
+ ..()
+ if(!opened)
+ sealed = TRUE
+
+/obj/structure/closet/grave/open()
+ .=..()
+ alpha = 255 // Needed because of grave hiding
+
+/obj/structure/closet/grave/bullet_act(var/obj/item/projectile/P)
+ return PROJECTILE_CONTINUE // It's a hole in the ground, doesn't usually stop or even care about bullets
+
+/obj/structure/closet/grave/return_air_for_internal_lifeform(var/mob/living/L)
+ var/gasid = "carbon_dioxide"
+ if(ishuman(L))
+ var/mob/living/carbon/human/H = L
+ if(H.species && H.species.exhale_type)
+ gasid = H.species.exhale_type
+ var/datum/gas_mixture/grave_breath = new()
+ var/datum/gas_mixture/above_air = return_air()
+ grave_breath.adjust_gas(gasid, BREATH_MOLES)
+ grave_breath.temperature = (above_air.temperature) - 30 //Underground
+ return grave_breath
\ No newline at end of file
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm b/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm
index c606151550..62497919fc 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm
@@ -43,8 +43,8 @@
overlays += icon(src.icon, "door")
- if(welded)
- overlays += icon(src.icon,"welded")
+ if(sealed)
+ overlays += icon(src.icon,"sealed")
if(broken)
overlays += icon(src.icon,"broken")
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm
index 994fe0eca1..af07ceb9e5 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm
@@ -46,23 +46,23 @@
/obj/structure/closet/secure_closet/proc/togglelock(mob/user as mob)
if(src.opened)
- user << "Close the locker first."
+ to_chat(user, "Close the locker first.")
return
if(src.broken)
- user << "The locker appears to be broken."
+ to_chat(user, "The locker appears to be broken.")
return
if(user.loc == src)
- user << "You can't reach the lock from inside."
+ to_chat(user, "You can't reach the lock from inside.")
return
if(src.allowed(user))
src.locked = !src.locked
playsound(src.loc, 'sound/machines/click.ogg', 15, 1, -3)
for(var/mob/O in viewers(user, 3))
if((O.client && !( O.blinded )))
- O << "The locker has been [locked ? null : "un"]locked by [user]."
+ to_chat(O, "The locker has been [locked ? null : "un"]locked by [user].")
update_icon()
else
- user << "Access Denied"
+ to_chat(user, "Access Denied")
/obj/structure/closet/secure_closet/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(src.opened)
@@ -73,7 +73,7 @@
if(src.large)
src.MouseDrop_T(G.affecting, user) //act like they were dragged onto the closet
else
- user << "The locker is too small to stuff [G.affecting] into!"
+ to_chat(user, "The locker is too small to stuff [G.affecting] into!")
if(isrobot(user))
return
if(W.loc != user) // This should stop mounted modules ending up outside the module.
@@ -89,14 +89,14 @@
playsound(src.loc, 'sound/weapons/blade1.ogg', 50, 1)
playsound(src.loc, "sparks", 50, 1)
else if(W.is_wrench())
- if(welded)
+ if(sealed)
if(anchored)
user.visible_message("\The [user] begins unsecuring \the [src] from the floor.", "You start unsecuring \the [src] from the floor.")
else
user.visible_message("\The [user] begins securing \the [src] to the floor.", "You start securing \the [src] to the floor.")
if(do_after(user, 20 * W.toolspeed))
if(!src) return
- user << "You [anchored? "un" : ""]secured \the [src]!"
+ to_chat(user, "You [anchored? "un" : ""]secured \the [src]!")
anchored = !anchored
return
else if(istype(W,/obj/item/weapon/packageWrap) || istype(W,/obj/item/weapon/weldingtool))
@@ -143,9 +143,9 @@
src.add_fingerprint(usr)
src.togglelock(usr)
else
- usr << "This mob type can't use this verb."
+ to_chat(usr, "This mob type can't use this verb.")
-/obj/structure/closet/secure_closet/update_icon()//Putting the welded stuff in updateicon() so it's easy to overwrite for special cases (Fridges, cabinets, and whatnot)
+/obj/structure/closet/secure_closet/update_icon()//Putting the sealed stuff in updateicon() so it's easy to overwrite for special cases (Fridges, cabinets, and whatnot)
overlays.Cut()
if(!opened)
@@ -155,8 +155,8 @@
icon_state = icon_locked
else
icon_state = icon_closed
- if(welded)
- overlays += "welded"
+ if(sealed)
+ overlays += "sealed"
else
icon_state = icon_opened
diff --git a/code/game/objects/structures/musician.dm b/code/game/objects/structures/musician.dm
index 5b76b4cf86..26889106ac 100644
--- a/code/game/objects/structures/musician.dm
+++ b/code/game/objects/structures/musician.dm
@@ -98,7 +98,6 @@
for(var/line in lines)
for(var/beat in splittext(lowertext(line), ","))
- //world << "beat: [beat]"
var/list/notes = splittext(beat, "/")
for(var/note in splittext(notes[1], "-"))
if(!playing || shouldStopPlaying(user))//If the instrument is playing, or special case
@@ -106,7 +105,6 @@
return
if(lentext(note) == 0)
continue
- //world << "Parse: [copytext(note,1,2)]"
var/cur_note = text2ascii(note) - 96
if(cur_note < 1 || cur_note > 7)
continue
diff --git a/code/game/objects/structures/props/nest.dm b/code/game/objects/structures/props/nest.dm
index c23f7f3a86..4b54d010cf 100644
--- a/code/game/objects/structures/props/nest.dm
+++ b/code/game/objects/structures/props/nest.dm
@@ -51,7 +51,7 @@
if(istype(spawnpoint) && den_mobs.len < max_creatures)
last_spawn = world.time
var/spawn_choice = pick(creature_types)
- var/mob/living/L = new spawn_choice
+ var/mob/living/L = new spawn_choice(spawnpoint)
if(den_faction)
L.faction = den_faction
visible_message("\The [L] crawls out of \the [src].")
diff --git a/code/game/sound.dm b/code/game/sound.dm
index 8e206300a8..f409018f26 100644
--- a/code/game/sound.dm
+++ b/code/game/sound.dm
@@ -133,6 +133,7 @@
if ("thunder") soundin = pick('sound/effects/thunder/thunder1.ogg', 'sound/effects/thunder/thunder2.ogg', 'sound/effects/thunder/thunder3.ogg', 'sound/effects/thunder/thunder4.ogg',
'sound/effects/thunder/thunder5.ogg', 'sound/effects/thunder/thunder6.ogg', 'sound/effects/thunder/thunder7.ogg', 'sound/effects/thunder/thunder8.ogg', 'sound/effects/thunder/thunder9.ogg',
'sound/effects/thunder/thunder10.ogg')
+ if ("casing_sound") soundin = pick('sound/weapons/casingfall1.ogg','sound/weapons/casingfall2.ogg','sound/weapons/casingfall3.ogg')
return soundin
//Are these even used?
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 56a440b639..dd47534dbe 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -585,6 +585,25 @@ var/list/admin_verbs_event_manager = list(
feedback_add_details("admin_verb","OC") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
return
+/client/proc/findStealthKey(txt)
+ if(txt)
+ for(var/P in GLOB.stealthminID)
+ if(GLOB.stealthminID[P] == txt)
+ return P
+ txt = GLOB.stealthminID[ckey]
+ return txt
+
+/client/proc/createStealthKey()
+ var/num = (rand(0,1000))
+ var/i = 0
+ while(i == 0)
+ i = 1
+ for(var/P in GLOB.stealthminID)
+ if(num == GLOB.stealthminID[P])
+ num++
+ i = 0
+ GLOB.stealthminID["[ckey]"] = "@[num2text(num)]"
+
/client/proc/stealth()
set category = "Admin"
set name = "Stealth Mode"
@@ -595,10 +614,12 @@ var/list/admin_verbs_event_manager = list(
mob.name = capitalize(ckey)
else
var/new_key = ckeyEx(input("Enter your desired display name.", "Fake Key", key) as text|null)
- if(!new_key) return
+ if(!new_key)
+ return
if(length(new_key) >= 26)
new_key = copytext(new_key, 1, 26)
holder.fakekey = new_key
+ createStealthKey()
if(istype(mob, /mob/new_player))
mob.name = new_key
log_admin("[key_name(usr)] has turned stealth mode [holder.fakekey ? "ON" : "OFF"]")
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 07b3b1972b..6ed50a7d78 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -10,6 +10,20 @@
check_antagonists()
return
+ if(href_list["ahelp"])
+ if(!check_rights(R_ADMIN))
+ return
+
+ var/ahelp_ref = href_list["ahelp"]
+ var/datum/admin_help/AH = locate(ahelp_ref)
+ if(AH)
+ AH.Action(href_list["ahelp_action"])
+ else
+ to_chat(usr, "Ticket [ahelp_ref] has been deleted!")
+
+ else if(href_list["ahelp_tickets"])
+ GLOB.ahelp_tickets.BrowseTickets(text2num(href_list["ahelp_tickets"]))
+
if(href_list["dbsearchckey"] || href_list["dbsearchadmin"])
var/adminckey = href_list["dbsearchadmin"]
@@ -841,7 +855,9 @@
M << "No ban appeals URL has been set."
log_admin("[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis will be removed in [mins] minutes.")
message_admins("[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis will be removed in [mins] minutes.")
-
+ var/datum/admin_help/AH = M.client ? M.client.current_ticket : null
+ if(AH)
+ AH.Resolve()
qdel(M.client)
//qdel(M) // See no reason why to delete mob. Important stuff can be lost. And ban can be lifted before round ends.
if("No")
@@ -867,7 +883,9 @@
message_admins("[usr.client.ckey] has banned [M.ckey].\nReason: [reason]\nThis is a permanent ban.")
feedback_inc("ban_perma",1)
DB_ban_record(BANTYPE_PERMA, M, -1, reason)
-
+ var/datum/admin_help/AH = M.client ? M.client.current_ticket : null
+ if(AH)
+ AH.Resolve()
qdel(M.client)
//qdel(M)
if("Cancel")
diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm
index 766473e010..9203741c3f 100644
--- a/code/modules/admin/verbs/adminhelp.dm
+++ b/code/modules/admin/verbs/adminhelp.dm
@@ -1,32 +1,599 @@
+/client/var/datum/admin_help/current_ticket //the current ticket the (usually) not-admin client is dealing with
-//This is a list of words which are ignored by the parser when comparing message contents for names. MUST BE IN LOWER CASE!
-var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","alien","as")
+//
+//TICKET MANAGER
+//
+
+GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
+
+/datum/admin_help_tickets
+ var/list/active_tickets = list()
+ var/list/closed_tickets = list()
+ var/list/resolved_tickets = list()
+
+ var/obj/effect/statclick/ticket_list/astatclick = new(null, null, AHELP_ACTIVE)
+ var/obj/effect/statclick/ticket_list/cstatclick = new(null, null, AHELP_CLOSED)
+ var/obj/effect/statclick/ticket_list/rstatclick = new(null, null, AHELP_RESOLVED)
+
+/datum/admin_help_tickets/Destroy()
+ QDEL_LIST(active_tickets)
+ QDEL_LIST(closed_tickets)
+ QDEL_LIST(resolved_tickets)
+ QDEL_NULL(astatclick)
+ QDEL_NULL(cstatclick)
+ QDEL_NULL(rstatclick)
+ return ..()
+
+//private
+/datum/admin_help_tickets/proc/ListInsert(datum/admin_help/new_ticket)
+ var/list/ticket_list
+ switch(new_ticket.state)
+ if(AHELP_ACTIVE)
+ ticket_list = active_tickets
+ if(AHELP_CLOSED)
+ ticket_list = closed_tickets
+ if(AHELP_RESOLVED)
+ ticket_list = resolved_tickets
+ else
+ CRASH("Invalid ticket state: [new_ticket.state]")
+ var/num_closed = ticket_list.len
+ if(num_closed)
+ for(var/I in 1 to num_closed)
+ var/datum/admin_help/AH = ticket_list[I]
+ if(AH.id > new_ticket.id)
+ ticket_list.Insert(I, new_ticket)
+ return
+ ticket_list += new_ticket
+
+//opens the ticket listings for one of the 3 states
+/datum/admin_help_tickets/proc/BrowseTickets(state)
+ var/list/l2b
+ var/title
+ switch(state)
+ if(AHELP_ACTIVE)
+ l2b = active_tickets
+ title = "Active Tickets"
+ if(AHELP_CLOSED)
+ l2b = closed_tickets
+ title = "Closed Tickets"
+ if(AHELP_RESOLVED)
+ l2b = resolved_tickets
+ title = "Resolved Tickets"
+ if(!l2b)
+ return
+ var/list/dat = list("
[title]")
+ dat += "Refresh
"
+ for(var/I in l2b)
+ var/datum/admin_help/AH = I
+ dat += "Ticket #[AH.id]: [AH.initiator_key_name]: [AH.name]
"
+
+ usr << browse(dat.Join(), "window=ahelp_list[state];size=600x480")
+
+//Tickets statpanel
+/datum/admin_help_tickets/proc/stat_entry()
+ var/num_disconnected = 0
+ stat("Active Tickets:", astatclick.update("[active_tickets.len]"))
+ for(var/I in active_tickets)
+ var/datum/admin_help/AH = I
+ if(AH.initiator)
+ stat("#[AH.id]. [AH.initiator_key_name]:", AH.statclick.update())
+ else
+ ++num_disconnected
+ if(num_disconnected)
+ stat("Disconnected:", astatclick.update("[num_disconnected]"))
+ stat("Closed Tickets:", cstatclick.update("[closed_tickets.len]"))
+ stat("Resolved Tickets:", rstatclick.update("[resolved_tickets.len]"))
+
+//Reassociate still open ticket if one exists
+/datum/admin_help_tickets/proc/ClientLogin(client/C)
+ C.current_ticket = CKey2ActiveTicket(C.ckey)
+ if(C.current_ticket)
+ C.current_ticket.AddInteraction("Client reconnected.")
+ C.current_ticket.initiator = C
+
+//Dissasociate ticket
+/datum/admin_help_tickets/proc/ClientLogout(client/C)
+ if(C.current_ticket)
+ C.current_ticket.AddInteraction("Client disconnected.")
+ C.current_ticket.initiator = null
+ C.current_ticket = null
+
+//Get a ticket given a ckey
+/datum/admin_help_tickets/proc/CKey2ActiveTicket(ckey)
+ for(var/I in active_tickets)
+ var/datum/admin_help/AH = I
+ if(AH.initiator_ckey == ckey)
+ return AH
+
+//
+//TICKET LIST STATCLICK
+//
+
+/obj/effect/statclick/ticket_list
+ var/current_state
+
+/obj/effect/statclick/ticket_list/New(loc, name, state)
+ current_state = state
+ ..()
+
+/obj/effect/statclick/ticket_list/Click()
+ GLOB.ahelp_tickets.BrowseTickets(current_state)
+
+//
+//TICKET DATUM
+//
+
+/datum/admin_help
+ var/id
+ var/name
+ var/state = AHELP_ACTIVE
+
+ var/opened_at
+ var/closed_at
+
+ var/client/initiator //semi-misnomer, it's the person who ahelped/was bwoinked
+ var/initiator_ckey
+ var/initiator_key_name
+
+ var/list/_interactions //use AddInteraction() or, preferably, admin_ticket_log()
+
+ var/obj/effect/statclick/ahelp/statclick
+
+ var/static/ticket_counter = 0
+
+//call this on its own to create a ticket, don't manually assign current_ticket
+//msg is the title of the ticket: usually the ahelp text
+//is_bwoink is TRUE if this ticket was started by an admin PM
+/datum/admin_help/New(msg, client/C, is_bwoink)
+ //clean the input msg
+ msg = sanitize(copytext(msg,1,MAX_MESSAGE_LEN))
+ if(!msg || !C || !C.mob)
+ qdel(src)
+ return
+
+ id = ++ticket_counter
+ opened_at = world.time
+
+ name = msg
+
+ initiator = C
+ initiator_ckey = initiator.ckey
+ initiator_key_name = key_name(initiator, FALSE, TRUE)
+ if(initiator.current_ticket) //This is a bug
+ log_debug("Multiple ahelp current_tickets")
+ initiator.current_ticket.AddInteraction("Ticket erroneously left open by code")
+ initiator.current_ticket.Close()
+ initiator.current_ticket = src
+
+ var/parsed_message = keywords_lookup(msg)
+
+ statclick = new(null, src)
+ _interactions = list()
+
+ if(is_bwoink)
+ AddInteraction("[key_name_admin(usr)] PM'd [LinkedReplyName()]")
+ message_admins("Ticket [TicketHref("#[id]")] created")
+ else
+ MessageNoRecipient(parsed_message)
+
+ //show it to the person adminhelping too
+ to_chat(C, "PM to-Admins: [name]")
+
+ //send it to irc if nobody is on and tell us how many were on
+ var/admin_number_present = send2irc_adminless_only(initiator_ckey, name)
+ log_admin("Ticket #[id]: [key_name(initiator)]: [name] - heard by [admin_number_present] non-AFK admins who have +BAN.")
+ if(admin_number_present <= 0)
+ to_chat(C, "No active admins are online, your adminhelp was sent to the admin irc.")
+
+ GLOB.ahelp_tickets.active_tickets += src
+
+/datum/admin_help/Destroy()
+ RemoveActive()
+ GLOB.ahelp_tickets.closed_tickets -= src
+ GLOB.ahelp_tickets.resolved_tickets -= src
+ return ..()
+
+/datum/admin_help/proc/AddInteraction(formatted_message)
+ _interactions += "[gameTimestamp()]: [formatted_message]"
+
+//private
+/datum/admin_help/proc/FullMonty(ref_src)
+ if(!ref_src)
+ ref_src = "\ref[src]"
+ . = ADMIN_FULLMONTY_NONAME(initiator.mob)
+ if(state == AHELP_ACTIVE)
+ . += ClosureLinks(ref_src)
+
+//private
+/datum/admin_help/proc/ClosureLinks(ref_src)
+ if(!ref_src)
+ ref_src = "\ref[src]"
+ . = " (REJT)"
+ . += " (IC)"
+ . += " (CLOSE)"
+ . += " (RSLVE)"
+ . += " (HANDLE)"
+
+//private
+/datum/admin_help/proc/LinkedReplyName(ref_src)
+ if(!ref_src)
+ ref_src = "\ref[src]"
+ return "[initiator_key_name]"
+
+//private
+/datum/admin_help/proc/TicketHref(msg, ref_src, action = "ticket")
+ if(!ref_src)
+ ref_src = "\ref[src]"
+ return "[msg]"
+
+//message from the initiator without a target, all admins will see this
+//won't bug irc
+/datum/admin_help/proc/MessageNoRecipient(msg)
+ var/ref_src = "\ref[src]"
+ var/chat_msg = "Ticket [TicketHref("#[id]", ref_src)]: [LinkedReplyName(ref_src)] [FullMonty(ref_src)]: [msg]"
+
+ AddInteraction("[LinkedReplyName(ref_src)]: [msg]")
+ //send this msg to all admins
+
+ for(var/client/X in admins)
+ if(X.is_preference_enabled(/datum/client_preference/holder/play_adminhelp_ping))
+ X << 'sound/effects/adminhelp.ogg'
+ window_flash(X)
+ to_chat(X, chat_msg)
+
+//Reopen a closed ticket
+/datum/admin_help/proc/Reopen()
+ if(state == AHELP_ACTIVE)
+ to_chat(usr, "This ticket is already open.")
+ return
+
+ if(GLOB.ahelp_tickets.CKey2ActiveTicket(initiator_ckey))
+ to_chat(usr, "This user already has an active ticket, cannot reopen this one.")
+ return
+
+ statclick = new(null, src)
+ GLOB.ahelp_tickets.active_tickets += src
+ GLOB.ahelp_tickets.closed_tickets -= src
+ GLOB.ahelp_tickets.resolved_tickets -= src
+ switch(state)
+ if(AHELP_CLOSED)
+ feedback_dec("ahelp_close")
+ if(AHELP_RESOLVED)
+ feedback_dec("ahelp_resolve")
+ state = AHELP_ACTIVE
+ closed_at = null
+ if(initiator)
+ initiator.current_ticket = src
+
+ AddInteraction("Reopened by [key_name_admin(usr)]")
+ if(initiator)
+ to_chat(initiator, "Ticket [TicketHref("#[id]")] was reopened by [key_name(usr,FALSE,FALSE)].")
+ var/msg = "Ticket [TicketHref("#[id]")] reopened by [key_name_admin(usr)]."
+ message_admins(msg)
+ log_admin(msg)
+ feedback_inc("ahelp_reopen")
+ TicketPanel() //can only be done from here, so refresh it
+
+//private
+/datum/admin_help/proc/RemoveActive()
+ if(state != AHELP_ACTIVE)
+ return
+ closed_at = world.time
+ QDEL_NULL(statclick)
+ GLOB.ahelp_tickets.active_tickets -= src
+ if(initiator && initiator.current_ticket == src)
+ initiator.current_ticket = null
+
+//Mark open ticket as closed/meme
+/datum/admin_help/proc/Close(silent = FALSE)
+ if(state != AHELP_ACTIVE)
+ return
+ RemoveActive()
+ state = AHELP_CLOSED
+ GLOB.ahelp_tickets.ListInsert(src)
+ AddInteraction("Closed by [key_name_admin(usr)].")
+ if(initiator)
+ to_chat(initiator, "Ticket [TicketHref("#[id]")] was closed by [key_name(usr,FALSE,FALSE)].")
+ if(!silent)
+ feedback_inc("ahelp_close")
+ var/msg = "Ticket [TicketHref("#[id]")] closed by [key_name_admin(usr)]."
+ message_admins(msg)
+ log_admin(msg)
+
+//Mark open ticket as resolved/legitimate, returns ahelp verb
+/datum/admin_help/proc/Resolve(silent = FALSE)
+ if(state != AHELP_ACTIVE)
+ return
+ RemoveActive()
+ state = AHELP_RESOLVED
+ GLOB.ahelp_tickets.ListInsert(src)
+
+ AddInteraction("Resolved by [key_name_admin(usr)].")
+ if(initiator)
+ to_chat(initiator, "Ticket [TicketHref("#[id]")] was marked resolved by [key_name(usr,FALSE,FALSE)].")
+ if(!silent)
+ feedback_inc("ahelp_resolve")
+ var/msg = "Ticket [TicketHref("#[id]")] resolved by [key_name_admin(usr)]"
+ message_admins(msg)
+ log_admin(msg)
+
+//Close and return ahelp verb, use if ticket is incoherent
+/datum/admin_help/proc/Reject(key_name = key_name_admin(usr))
+ if(state != AHELP_ACTIVE)
+ return
+
+ if(initiator)
+ initiator << 'sound/effects/adminhelp.ogg'
+
+ to_chat(initiator, "- AdminHelp Rejected! -")
+ to_chat(initiator, "Your admin help was rejected.")
+ to_chat(initiator, "Please try to be calm, clear, and descriptive in admin helps, do not assume the admin has seen any related events, and clearly state the names of anybody you are reporting.")
+
+ feedback_inc("ahelp_reject")
+ var/msg = "Ticket [TicketHref("#[id]")] rejected by [key_name_admin(usr)]"
+ message_admins(msg)
+ log_admin(msg)
+ AddInteraction("Rejected by [key_name_admin(usr)].")
+ Close(silent = TRUE)
+
+//Resolve ticket with IC Issue message
+/datum/admin_help/proc/ICIssue(key_name = key_name_admin(usr))
+ if(state != AHELP_ACTIVE)
+ return
+
+ var/msg = "- AdminHelp marked as IC issue! -
"
+ msg += "Losing is part of the game!
"
+ msg += "Your AdminHelp may also be unabled to be answered due to ongoing events."
+
+ if(initiator)
+ to_chat(initiator, msg)
+
+ feedback_inc("ahelp_icissue")
+ msg = "Ticket [TicketHref("#[id]")] marked as IC by [key_name_admin(usr)]"
+ message_admins(msg)
+ log_admin(msg)
+ AddInteraction("Marked as IC issue by [key_name_admin(usr)]")
+ Resolve(silent = TRUE)
+
+//Resolve ticket with IC Issue message
+/datum/admin_help/proc/HandleIssue()
+ if(state != AHELP_ACTIVE)
+ return
+
+ var/msg = "Your AdminHelp is being handled by [key_name(usr,FALSE,FALSE)] please be patient."
+
+ if(initiator)
+ to_chat(initiator, msg)
+
+ feedback_inc("ahelp_icissue")
+ msg = "Ticket [TicketHref("#[id]")] being handled by [key_name(usr,FALSE,FALSE)]"
+ message_admins(msg)
+ log_admin(msg)
+ AddInteraction("[key_name_admin(usr)] is now handling this ticket.")
+
+//Show the ticket panel
+/datum/admin_help/proc/TicketPanel()
+ var/list/dat = list("Ticket #[id]")
+ var/ref_src = "\ref[src]"
+ dat += "Admin Help Ticket #[id]: [LinkedReplyName(ref_src)]
"
+ dat += "State: "
+ switch(state)
+ if(AHELP_ACTIVE)
+ dat += "OPEN"
+ if(AHELP_RESOLVED)
+ dat += "RESOLVED"
+ if(AHELP_CLOSED)
+ dat += "CLOSED"
+ else
+ dat += "UNKNOWN"
+ dat += "[GLOB.TAB][TicketHref("Refresh", ref_src)][GLOB.TAB][TicketHref("Re-Title", ref_src, "retitle")]"
+ if(state != AHELP_ACTIVE)
+ dat += "[GLOB.TAB][TicketHref("Reopen", ref_src, "reopen")]"
+ dat += "
Opened at: [gameTimestamp(wtime = opened_at)] (Approx [(world.time - opened_at) / 600] minutes ago)"
+ if(closed_at)
+ dat += "
Closed at: [gameTimestamp(wtime = closed_at)] (Approx [(world.time - closed_at) / 600] minutes ago)"
+ dat += "
"
+ if(initiator)
+ dat += "Actions: [FullMonty(ref_src)]
"
+ else
+ dat += "DISCONNECTED[GLOB.TAB][ClosureLinks(ref_src)]
"
+ dat += "
Log:
"
+ for(var/I in _interactions)
+ dat += "[I]
"
+
+ usr << browse(dat.Join(), "window=ahelp[id];size=620x480")
+
+/datum/admin_help/proc/Retitle()
+ var/new_title = input(usr, "Enter a title for the ticket", "Rename Ticket", name) as text|null
+ if(new_title)
+ name = new_title
+ //not saying the original name cause it could be a long ass message
+ var/msg = "Ticket [TicketHref("#[id]")] titled [name] by [key_name_admin(usr)]"
+ message_admins(msg)
+ log_admin(msg)
+ TicketPanel() //we have to be here to do this
+
+//Forwarded action from admin/Topic
+/datum/admin_help/proc/Action(action)
+ testing("Ahelp action: [action]")
+ switch(action)
+ if("ticket")
+ TicketPanel()
+ if("retitle")
+ Retitle()
+ if("reject")
+ Reject()
+ if("reply")
+ usr.client.cmd_ahelp_reply(initiator)
+ if("icissue")
+ ICIssue()
+ if("close")
+ Close()
+ if("resolve")
+ Resolve()
+ if("handleissue")
+ HandleIssue()
+ if("reopen")
+ Reopen()
+
+//
+// TICKET STATCLICK
+//
+
+/obj/effect/statclick/ahelp
+ var/datum/admin_help/ahelp_datum
+
+/obj/effect/statclick/ahelp/New(loc, datum/admin_help/AH)
+ ahelp_datum = AH
+ ..(loc)
+
+/obj/effect/statclick/ahelp/update()
+ return ..(ahelp_datum.name)
+
+/obj/effect/statclick/ahelp/Click()
+ ahelp_datum.TicketPanel()
+
+/obj/effect/statclick/ahelp/Destroy()
+ ahelp_datum = null
+ return ..()
+
+//
+// CLIENT PROCS
+//
/client/verb/adminhelp(msg as text)
set category = "Admin"
set name = "Adminhelp"
if(say_disabled) //This is here to try to identify lag problems
- usr << "Speech is currently admin-disabled."
+ to_chat(usr, "Speech is currently admin-disabled.")
return
//handle muting and automuting
if(prefs.muted & MUTE_ADMINHELP)
- src << "Error: Admin-PM: You cannot send adminhelps (Muted)."
+ to_chat(src, "Error: Admin-PM: You cannot send adminhelps (Muted).")
+ return
+ if(handle_spam_prevention(msg,MUTE_ADMINHELP))
return
- adminhelped = 1 //Determines if they get the message to reply by clicking the name.
-
- if(msg)
- handle_spam_prevention(MUTE_ADMINHELP)
-
- //clean the input msg
if(!msg)
return
- msg = sanitize(msg)
- if(!msg)
+
+ //remove out adminhelp verb temporarily to prevent spamming of admins.
+ src.verbs -= /client/verb/adminhelp
+ spawn(1200)
+ src.verbs += /client/verb/adminhelp // 2 minute cool-down for adminhelps
+
+ feedback_add_details("admin_verb","Adminhelp") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+ if(current_ticket)
+ if(alert(usr, "You already have a ticket open. Is this for the same issue?",,"Yes","No") != "No")
+ if(current_ticket)
+ current_ticket.MessageNoRecipient(msg)
+ return
+ else
+ to_chat(usr, "Ticket not found, creating new one...")
+ else
+ current_ticket.AddInteraction("[key_name_admin(usr)] opened a new ticket.")
+ current_ticket.Close()
+
+ new /datum/admin_help(msg, src, FALSE)
+
+//admin proc
+/client/proc/cmd_admin_ticket_panel()
+ set name = "Show Ticket List"
+ set category = "Admin"
+
+ if(!check_rights(R_ADMIN, TRUE))
return
- var/original_msg = msg
+
+ var/browse_to
+
+ switch(input("Display which ticket list?") as null|anything in list("Active Tickets", "Closed Tickets", "Resolved Tickets"))
+ if("Active Tickets")
+ browse_to = AHELP_ACTIVE
+ if("Closed Tickets")
+ browse_to = AHELP_CLOSED
+ if("Resolved Tickets")
+ browse_to = AHELP_RESOLVED
+ else
+ return
+
+ GLOB.ahelp_tickets.BrowseTickets(browse_to)
+
+//
+// LOGGING
+//
+
+//Use this proc when an admin takes action that may be related to an open ticket on what
+//what can be a client, ckey, or mob
+/proc/admin_ticket_log(what, message)
+ var/client/C
+ var/mob/Mob = what
+ if(istype(Mob))
+ C = Mob.client
+ else
+ C = what
+ if(istype(C) && C.current_ticket)
+ C.current_ticket.AddInteraction(message)
+ return C.current_ticket
+ if(istext(what)) //ckey
+ var/datum/admin_help/AH = GLOB.ahelp_tickets.CKey2ActiveTicket(what)
+ if(AH)
+ AH.AddInteraction(message)
+ return AH
+
+//
+// HELPER PROCS
+//
+
+/proc/get_admin_counts(requiredflags = R_BAN)
+ . = list("total" = list(), "noflags" = list(), "afk" = list(), "stealth" = list(), "present" = list())
+ for(var/client/X in admins)
+ .["total"] += X
+ if(requiredflags != 0 && !check_rights(rights_required = requiredflags, show_msg = FALSE, C = X))
+ .["noflags"] += X
+ else if(X.is_afk())
+ .["afk"] += X
+ else if(X.holder.fakekey)
+ .["stealth"] += X
+ else
+ .["present"] += X
+
+/proc/send2irc_adminless_only(source, msg, requiredflags = R_BAN)
+ var/list/adm = get_admin_counts()
+ var/list/activemins = adm["present"]
+ . = activemins.len
+ if(. <= 0)
+ var/final = ""
+ var/list/afkmins = adm["afk"]
+ var/list/stealthmins = adm["stealth"]
+ var/list/powerlessmins = adm["noflags"]
+ var/list/allmins = adm["total"]
+ if(!afkmins.len && !stealthmins.len && !powerlessmins.len)
+ final = "[msg] - No admins online"
+ else
+ final = "[msg] - All admins stealthed\[[english_list(stealthmins)]\], AFK\[[english_list(afkmins)]\], or lacks +BAN\[[english_list(powerlessmins)]\]! Total: [allmins.len] "
+ send2irc(source,final)
+
+/proc/ircadminwho()
+ var/list/message = list("Admins: ")
+ var/list/admin_keys = list()
+ for(var/adm in admins)
+ var/client/C = adm
+ admin_keys += "[C][C.holder.fakekey ? "(Stealth)" : ""][C.is_afk() ? "(AFK)" : ""]"
+
+ for(var/admin in admin_keys)
+ if(LAZYLEN(admin_keys) > 1)
+ message += ", [admin]"
+ else
+ message += "[admin]"
+
+ return jointext(message, "")
+
+/proc/keywords_lookup(msg,irc)
+
+ //This is a list of words which are ignored by the parser when comparing message contents for names. MUST BE IN LOWER CASE!
+ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","alien","as", "i")
//explode the input msg into a list
var/list/msglist = splittext(msg, " ")
@@ -35,9 +602,11 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
var/list/surnames = list()
var/list/forenames = list()
var/list/ckeys = list()
+ var/founds = ""
for(var/mob/M in mob_list)
var/list/indexing = list(M.real_name, M.name)
- if(M.mind) indexing += M.mind.name
+ if(M.mind)
+ indexing += M.mind.name
for(var/string in indexing)
var/list/L = splittext(string, " ")
@@ -77,41 +646,17 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
mobs_found += found
if(!ai_found && isAI(found))
ai_found = 1
- msg += "[original_word] (?) "
+ var/is_antag = 0
+ if(found.mind && found.mind.special_role)
+ is_antag = 1
+ founds += "Name: [found.name]([found.real_name]) Ckey: [found.ckey] [is_antag ? "(Antag)" : null] "
+ msg += "[original_word](?|F) "
continue
- msg += "[original_word] "
-
- if(!mob) //this doesn't happen
- return
-
- var/ai_cl
- if(ai_found)
- ai_cl = " (CL)"
-
- //Options bar: mob, details ( admin = 2, dev = 3, event manager = 4, character name (0 = just ckey, 1 = ckey and character name), link? (0 no don't make it a link, 1 do so),
- // highlight special roles (0 = everyone has same looking name, 1 = antags / special roles get a golden name)
-
- msg = "Request for Help: [get_options_bar(mob, 2, 1, 1)][ai_cl] [msg]"
-
- var/admin_number_afk = 0
-
- for(var/client/X in admins)
- if((R_ADMIN|R_MOD|R_EVENT|R_SERVER) & X.holder.rights)
- if(X.is_afk())
- admin_number_afk++
- X << msg
- if(X.is_preference_enabled(/datum/client_preference/holder/play_adminhelp_ping))
- X << 'sound/effects/adminhelp.ogg'
-
- //show it to the person adminhelping too
- src << "PM to-Staff : [original_msg]"
-
- var/admin_number_present = admins.len - admin_number_afk
- log_admin("HELP: [key_name(src)]: [original_msg] - heard by [admin_number_present] non-AFK admins.")
- if(admin_number_present <= 0)
- send2adminirc("Request for Help from [key_name(src)]: [html_decode(original_msg)] - !![admin_number_afk ? "All admins AFK ([admin_number_afk])" : "No admins online"]!!")
- else
- send2adminirc("Request for Help from [key_name(src)]: [html_decode(original_msg)]")
- feedback_add_details("admin_verb","AH") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
- return
+ msg += "[original_word] "
+ if(irc)
+ if(founds == "")
+ return "Search Failed"
+ else
+ return founds
+ return msg
\ No newline at end of file
diff --git a/code/modules/admin/verbs/adminjump.dm b/code/modules/admin/verbs/adminjump.dm
index 823a540d10..8e39f45d61 100644
--- a/code/modules/admin/verbs/adminjump.dm
+++ b/code/modules/admin/verbs/adminjump.dm
@@ -109,8 +109,10 @@
if(!check_rights(R_ADMIN|R_MOD|R_DEBUG))
return
if(config.allow_admin_jump)
- log_admin("[key_name(usr)] teleported [key_name(M)]")
- message_admins("[key_name_admin(usr)] teleported [key_name_admin(M)]", 1)
+ log_admin("[key_name(usr)] jumped to [key_name(M)]")
+ var/msg = "[key_name_admin(usr)] jumped to [key_name_admin(M)]"
+ message_admins(msg)
+ admin_ticket_log(M, msg)
M.on_mob_jump()
M.loc = get_turf(usr)
feedback_add_details("admin_verb","GM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -137,7 +139,9 @@
if(!M)
return
log_admin("[key_name(usr)] teleported [key_name(M)]")
- message_admins("[key_name_admin(usr)] teleported [key_name(M)]", 1)
+ var/msg = "[key_name_admin(usr)] teleported [ADMIN_LOOKUPFLW(M)]"
+ message_admins(msg)
+ admin_ticket_log(M, msg)
if(M)
M.on_mob_jump()
M.loc = get_turf(usr)
@@ -157,7 +161,9 @@
M.loc = pick(get_area_turfs(A))
feedback_add_details("admin_verb","SMOB") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
- log_admin("[key_name(usr)] teleported [key_name(M)] to [A]")
- message_admins("[key_name_admin(usr)] teleported [key_name_admin(M)] to [A]", 1)
+ log_admin("[key_name(usr)] teleported [key_name(M)]")
+ var/msg = "[key_name_admin(usr)] teleported [ADMIN_LOOKUPFLW(M)]"
+ message_admins(msg)
+ admin_ticket_log(M, msg)
else
- alert("Admin jumping disabled")
+ alert("Admin jumping disabled")
\ No newline at end of file
diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm
index 4ff94877f4..2bf3a1f5cc 100644
--- a/code/modules/admin/verbs/adminpm.dm
+++ b/code/modules/admin/verbs/adminpm.dm
@@ -1,145 +1,286 @@
+#define IRCREPLYCOUNT 2
+
+
//allows right clicking mobs to send an admin PM to their client, forwards the selected mob's client to cmd_admin_pm
-/client/proc/cmd_admin_pm_context(mob/M as mob in mob_list)
+/client/proc/cmd_admin_pm_context(mob/M in mob_list)
set category = null
set name = "Admin PM Mob"
if(!holder)
- src << "Error: Admin-PM-Context: Only administrators may use this command."
+ to_chat(src, "Error: Admin-PM-Context: Only administrators may use this command.")
+ return
+ if( !ismob(M) || !M.client )
return
- if( !ismob(M) || !M.client ) return
cmd_admin_pm(M.client,null)
- feedback_add_details("admin_verb","APMM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+ feedback_add_details("admin_verb","Admin PM Mob") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
//shows a list of clients we could send PMs to, then forwards our choice to cmd_admin_pm
/client/proc/cmd_admin_pm_panel()
set category = "Admin"
set name = "Admin PM"
if(!holder)
- src << "Error: Admin-PM-Panel: Only administrators may use this command."
+ to_chat(src, "Error: Admin-PM-Panel: Only administrators may use this command.")
return
var/list/client/targets[0]
for(var/client/T)
if(T.mob)
- if(istype(T.mob, /mob/new_player))
+ if(isnewplayer(T.mob))
targets["(New Player) - [T]"] = T
- else if(istype(T.mob, /mob/observer/dead))
+ else if(isobserver(T.mob))
targets["[T.mob.name](Ghost) - [T]"] = T
else
targets["[T.mob.real_name](as [T.mob.name]) - [T]"] = T
else
targets["(No Mob) - [T]"] = T
- var/list/sorted = sortList(targets)
- var/target = input(src,"To whom shall we send a message?","Admin PM",null) in sorted|null
+ var/target = input(src,"To whom shall we send a message?","Admin PM",null) as null|anything in sortList(targets)
cmd_admin_pm(targets[target],null)
- feedback_add_details("admin_verb","APM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+ feedback_add_details("admin_verb","Admin PM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+/client/proc/cmd_ahelp_reply(whom)
+ if(prefs.muted & MUTE_ADMINHELP)
+ to_chat(src, "Error: Admin-PM: You are unable to use admin PM-s (muted).")
+ return
+ var/client/C
+ if(istext(whom))
+ if(cmptext(copytext(whom,1,2),"@"))
+ whom = findStealthKey(whom)
+ C = GLOB.directory[whom]
+ else if(istype(whom,/client))
+ C = whom
+ if(!C)
+ if(holder)
+ to_chat(src, "Error: Admin-PM: Client not found.")
+ return
+
+ var/datum/admin_help/AH = C.current_ticket
+
+ if(AH)
+ message_admins("[key_name_admin(src)] has started replying to [key_name(C, 0, 0)]'s admin help.")
+ var/msg = input(src,"Message:", "Private message to [key_name(C, 0, 0)]") as text|null
+ if (!msg)
+ message_admins("[key_name_admin(src)] has cancelled their reply to [key_name(C, 0, 0)]'s admin help.")
+ return
+ cmd_admin_pm(whom, msg, AH)
//takes input from cmd_admin_pm_context, cmd_admin_pm_panel or /client/Topic and sends them a PM.
//Fetching a message if needed. src is the sender and C is the target client
-
-/client/proc/cmd_admin_pm(var/client/C, var/msg = null)
+/client/proc/cmd_admin_pm(whom, msg, datum/admin_help/AH)
if(prefs.muted & MUTE_ADMINHELP)
- src << "Error: Private-Message: You are unable to use PM-s (muted)."
+ to_chat(src, "Error: Admin-PM: You are unable to use admin PM-s (muted).")
return
- if(!istype(C,/client))
- if(holder) src << "Error: Private-Message: Client not found."
- else src << "Error: Private-Message: Client not found. They may have lost connection, so try using an adminhelp!"
+ if(!holder && !current_ticket) //no ticket? https://www.youtube.com/watch?v=iHSPf6x1Fdo
+ to_chat(src, "You can no longer reply to this ticket, please open another one by using the Adminhelp verb if need be.")
+ to_chat(src, "Message: [msg]")
return
- //get message text, limit it's length.and clean/escape html
- if(!msg)
- msg = input(src,"Message:", "Private message to [key_name(C, 0, holder ? 1 : 0)]") as text|null
+ var/client/recipient
+ var/irc = 0
+ if(istext(whom))
+ if(cmptext(copytext(whom,1,2),"@"))
+ whom = findStealthKey(whom)
+ if(whom == "IRCKEY")
+ irc = 1
+ else
+ recipient = GLOB.directory[whom]
+ else if(istype(whom,/client))
+ recipient = whom
- if(!msg) return
- if(!C)
- if(holder) src << "Error: Admin-PM: Client not found."
- else src << "Error: Private-Message: Client not found. They may have lost connection, so try using an adminhelp!"
+
+ if(irc)
+ if(!ircreplyamount) //to prevent people from spamming irc
+ return
+ if(!msg)
+ msg = input(src,"Message:", "Private message to Administrator") as text|null
+
+ if(!msg)
+ return
+ if(holder)
+ to_chat(src, "Error: Use the admin IRC channel, nerd.")
return
- //clean the message if it's not sent by a high-rank admin
- //todo: sanitize for all???
- if(!check_rights(R_SERVER|R_DEBUG,0))
- msg = sanitize(msg)
- if(!msg) return
- var/recieve_pm_type = "Player"
- if(holder)
- //mod PMs are maroon
- //PMs sent from admins and mods display their rank
- if(holder)
- if(!C.holder && holder && holder.fakekey)
- recieve_pm_type = "Admin"
+ else
+ if(!recipient)
+ if(holder)
+ to_chat(src, "Error: Admin-PM: Client not found.")
+ to_chat(src, msg)
else
- recieve_pm_type = holder.rank
+ current_ticket.MessageNoRecipient(msg)
+ return
- else if(!C.holder)
- src << "Error: Admin-PM: Non-admin to non-admin PM communication is forbidden."
- return
+ //get message text, limit it's length.and clean/escape html
+ if(!msg)
+ msg = input(src,"Message:", "Private message to [key_name(recipient, 0, 0)]") as text|null
- var/recieve_message
-
- if(holder && !C.holder)
- recieve_message = "-- Click the [recieve_pm_type]'s name to reply --\n"
- if(C.adminhelped)
- C << recieve_message
- C.adminhelped = 0
-
- //AdminPM popup for ApocStation and anybody else who wants to use it. Set it with POPUP_ADMIN_PM in config.txt ~Carn
- if(config.popup_admin_pm)
- spawn(0) //so we don't hold the caller proc up
- var/sender = src
- var/sendername = key
- var/reply = sanitize(input(C, msg,"[recieve_pm_type] PM from [sendername]", "") as text|null) //show message and await a reply
- if(C && reply)
- if(sender)
- C.cmd_admin_pm(sender,reply) //sender is still about, let's reply to them
- else
- adminhelp(reply) //sender has left, adminhelp instead
+ if(!msg)
return
- src << "" + create_text_tag("pm_out_alt", "PM", src) + " to [get_options_bar(C, holder ? 1 : 0, holder ? 1 : 0, 1)]: [msg]"
- C << "" + create_text_tag("pm_in", "", C) + " \[[recieve_pm_type] PM\] [get_options_bar(src, C.holder ? 1 : 0, C.holder ? 1 : 0, 1)]: [msg]"
- //play the recieving admin the adminhelp sound (if they have them enabled)
- //non-admins shouldn't be able to disable this
- if(C.is_preference_enabled(/datum/client_preference/holder/play_adminhelp_ping))
- C << 'sound/effects/adminhelp.ogg'
+ if(prefs.muted & MUTE_ADMINHELP)
+ to_chat(src, "Error: Admin-PM: You are unable to use admin PM-s (muted).")
+ return
- log_adminpm(msg,src,C)
- send2adminirc("Reply: [key_name(src)]->[key_name(C)]: [html_decode(msg)]")
+ if(!recipient)
+ if(holder)
+ to_chat(src, "Error: Admin-PM: Client not found.")
+ else
+ current_ticket.MessageNoRecipient(msg)
+ return
- //we don't use message_admins here because the sender/receiver might get it too
- for(var/client/X in admins)
- //check client/X is an admin and isn't the sender or recipient
- if(X == C || X == src)
- continue
- if(X.key != key && X.key != C.key && (X.holder.rights & R_ADMIN|R_MOD|R_EVENT))
- X << "" + create_text_tag("pm_other", "PM:", X) + " [key_name(src, X, 0)] to [key_name(C, X, 0)]: [msg]"
-
-/client/proc/cmd_admin_irc_pm(sender)
- if(prefs.muted & MUTE_ADMINHELP)
- src << "Error: Private-Message: You are unable to use PM-s (muted)."
+ if (src.handle_spam_prevention(msg,MUTE_ADMINHELP))
return
- var/msg = input(src,"Message:", "Reply private message to [sender] on IRC / 400 character limit") as text|null
+ //clean the message if it's not sent by a high-rank admin
+ if(!check_rights(R_SERVER|R_DEBUG,0)||irc)//no sending html to the poor bots
+ msg = trim(sanitize(copytext(msg,1,MAX_MESSAGE_LEN)))
+ if(!msg)
+ return
+ var/rawmsg = msg
+
+ var/keywordparsedmsg = keywords_lookup(msg)
+
+ if(irc)
+ to_chat(src, "PM to-Admins: [rawmsg]")
+ admin_ticket_log(src, "Reply PM from-[key_name(src, TRUE, TRUE)] to IRC: [keywordparsedmsg]")
+ ircreplyamount--
+ send2irc("Reply: [ckey]",rawmsg)
+ else
+ if(recipient.holder)
+ if(holder) //both are admins
+ to_chat(recipient, "Admin PM from-[key_name(src, recipient, 1)]: [keywordparsedmsg]")
+ to_chat(src, "Admin PM to-[key_name(recipient, src, 1)]: [keywordparsedmsg]")
+
+ //omg this is dumb, just fill in both their tickets
+ var/interaction_message = "PM from-[key_name(src, recipient, 1)] to-[key_name(recipient, src, 1)]: [keywordparsedmsg]"
+ admin_ticket_log(src, interaction_message)
+ if(recipient != src) //reeee
+ admin_ticket_log(recipient, interaction_message)
+
+ else //recipient is an admin but sender is not
+ var/replymsg = "Reply PM from-[key_name(src, recipient, 1)]: [keywordparsedmsg]"
+ admin_ticket_log(src, replymsg)
+ to_chat(recipient, replymsg)
+ to_chat(src, "PM to-Admins: [msg]")
+
+ //play the recieving admin the adminhelp sound (if they have them enabled)
+ if(recipient.is_preference_enabled(/datum/client_preference/holder/play_adminhelp_ping))
+ recipient << 'sound/effects/adminhelp.ogg'
+
+ else
+ if(holder) //sender is an admin but recipient is not. Do BIG RED TEXT
+ if(!recipient.current_ticket)
+ new /datum/admin_help(msg, recipient, TRUE)
+
+ to_chat(recipient, "-- Administrator private message --")
+ to_chat(recipient, "Admin PM from-[key_name(src, recipient, 0)]: [msg]")
+ to_chat(recipient, "Click on the administrator's name to reply.")
+ to_chat(src, "Admin PM to-[key_name(recipient, src, 1)]: [msg]")
+
+ admin_ticket_log(recipient, "PM From [key_name_admin(src)]: [keywordparsedmsg]")
+
+ //always play non-admin recipients the adminhelp sound
+ recipient << 'sound/effects/adminhelp.ogg'
+
+ //AdminPM popup for ApocStation and anybody else who wants to use it. Set it with POPUP_ADMIN_PM in config.txt ~Carn
+ if(config.popup_admin_pm)
+ spawn() //so we don't hold the caller proc up
+ var/sender = src
+ var/sendername = key
+ var/reply = input(recipient, msg,"Admin PM from-[sendername]", "") as text|null //show message and await a reply
+ if(recipient && reply)
+ if(sender)
+ recipient.cmd_admin_pm(sender,reply) //sender is still about, let's reply to them
+ else
+ adminhelp(reply) //sender has left, adminhelp instead
+ return
+
+ else //neither are admins
+ to_chat(src, "Error: Admin-PM: Non-admin to non-admin PM communication is forbidden.")
+ return
+
+ if(irc)
+ log_admin("PM: [key_name(src)]->IRC: [rawmsg]")
+ for(var/client/X in admins)
+ to_chat(X, "PM: [key_name(src, X, 0)]->IRC: [keywordparsedmsg]")
+ else
+ log_admin("PM: [key_name(src)]->[key_name(recipient)]: [rawmsg]")
+ //we don't use message_admins here because the sender/receiver might get it too
+ for(var/client/X in admins)
+ if(X.key!=key && X.key!=recipient.key) //check client/X is an admin and isn't the sender or recipient
+ to_chat(X, "PM: [key_name(src, X, 0)]->[key_name(recipient, X, 0)]: [keywordparsedmsg]" )
+
+/proc/IrcPm(target,msg,sender)
+ var/client/C = GLOB.directory[target]
+
+ var/datum/admin_help/ticket = C ? C.current_ticket : GLOB.ahelp_tickets.CKey2ActiveTicket(target)
+ var/compliant_msg = trim(lowertext(msg))
+ var/irc_tagged = "[sender](IRC)"
+ var/list/splits = splittext(compliant_msg, " ")
+ if(splits.len && splits[1] == "ticket")
+ if(splits.len < 2)
+ return "Usage: ticket "
+ switch(splits[2])
+ if("close")
+ if(ticket)
+ ticket.Close(irc_tagged)
+ return "Ticket #[ticket.id] successfully closed"
+ if("resolve")
+ if(ticket)
+ ticket.Resolve(irc_tagged)
+ return "Ticket #[ticket.id] successfully resolved"
+ if("icissue")
+ if(ticket)
+ ticket.ICIssue(irc_tagged)
+ return "Ticket #[ticket.id] successfully marked as IC issue"
+ if("reject")
+ if(ticket)
+ ticket.Reject(irc_tagged)
+ return "Ticket #[ticket.id] successfully rejected"
+ else
+ return "Usage: ticket "
+ return "Error: Ticket could not be found"
+
+ var/static/stealthkey
+ var/adminname = "Administrator"
+
+ if(!C)
+ return "Error: No client"
+
+ if(!stealthkey)
+ stealthkey = GenIrcStealthKey()
+
+ msg = sanitize(copytext(msg,1,MAX_MESSAGE_LEN))
if(!msg)
- return
+ return "Error: No message"
- sanitize(msg)
+ message_admins("IRC message from [sender] to [key_name_admin(C)] : [msg]")
+ log_admin("IRC PM: [sender] -> [key_name(C)] : [msg]")
- // Handled on Bot32's end, unsure about other bots
-// if(length(msg) > 400) // TODO: if message length is over 400, divide it up into seperate messages, the message length restriction is based on IRC limitations. Probably easier to do this on the bots ends.
-// src << "Your message was not sent because it was more then 400 characters find your message below for ease of copy/pasting"
-// src << "[msg]"
-// return
+ to_chat(C, "-- Administrator private message --")
+ to_chat(C, "Admin PM from-[adminname]: [msg]")
+ to_chat(C, "Click on the administrator's name to reply.")
- send2adminirc("PlayerPM to [sender] from [key_name(src)]: [html_decode(msg)]")
+ admin_ticket_log(C, "PM From [irc_tagged]: [msg]")
- src << "" + create_text_tag("pm_out_alt", "", src) + " to IRC-[sender]: [msg]"
+ window_flash(C, ignorepref = TRUE)
+ //always play non-admin recipients the adminhelp sound
+ C << 'sound/effects/adminhelp.ogg'
- log_admin("PM: [key_name(src)]->IRC-[sender]: [msg]")
- for(var/client/X in admins)
- if(X == src)
- continue
- if(X.holder.rights & R_ADMIN|R_MOD)
- X << "" + create_text_tag("pm_other", "PM:", X) + " [key_name(src, X, 0)] to IRC-[sender]: [msg]"
+ C.ircreplyamount = IRCREPLYCOUNT
+
+ return "Message Successful"
+
+/proc/GenIrcStealthKey()
+ var/num = (rand(0,1000))
+ var/i = 0
+ while(i == 0)
+ i = 1
+ for(var/P in GLOB.stealthminID)
+ if(num == GLOB.stealthminID[P])
+ num++
+ i = 0
+ var/stealth = "@[num2text(num)]"
+ GLOB.stealthminID["IRCKEY"] = stealth
+ return stealth
+
+#undef IRCREPLYCOUNT
\ No newline at end of file
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index 0373b8bf5d..20a187e84e 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -96,7 +96,9 @@
M << "You hear a voice in your head... [msg]"
log_admin("SubtlePM: [key_name(usr)] -> [key_name(M)] : [msg]")
- message_admins("SubtleMessage: [key_name_admin(usr)] -> [key_name_admin(M)] : [msg]", 1)
+ msg = " SubtleMessage: [key_name_admin(usr)] -> [key_name_admin(M)] : [msg]"
+ message_admins(msg)
+ admin_ticket_log(M, msg)
feedback_add_details("admin_verb","SMS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_admin_world_narrate() // Allows administrators to fluff events a little easier -- TLE
@@ -135,9 +137,11 @@
if( !msg )
return
- M << msg
+ to_chat(M, msg)
log_admin("DirectNarrate: [key_name(usr)] to ([M.name]/[M.key]): [msg]")
- message_admins(" DirectNarrate: [key_name(usr)] to ([M.name]/[M.key]): [msg]
", 1)
+ msg = " DirectNarrate: [key_name(usr)] to ([M.name]/[M.key]): [msg]
"
+ message_admins(msg)
+ admin_ticket_log(M, msg)
feedback_add_details("admin_verb","DIRN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/cmd_admin_godmode(mob/M as mob in mob_list)
@@ -150,7 +154,9 @@
usr << " Toggled [(M.status_flags & GODMODE) ? "ON" : "OFF"]"
log_admin("[key_name(usr)] has toggled [key_name(M)]'s nodamage to [(M.status_flags & GODMODE) ? "On" : "Off"]")
- message_admins("[key_name_admin(usr)] has toggled [key_name_admin(M)]'s nodamage to [(M.status_flags & GODMODE) ? "On" : "Off"]", 1)
+ var/msg = "[key_name_admin(usr)] has toggled [ADMIN_LOOKUPFLW(M)]'s nodamage to [(M.status_flags & GODMODE) ? "On" : "Off"]"
+ message_admins(msg)
+ admin_ticket_log(M, msg)
feedback_add_details("admin_verb","GOD") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
@@ -540,7 +546,9 @@ Traitors and the like can also be revived with the previous role mostly intact.
M.revive()
log_admin("[key_name(usr)] healed / revived [key_name(M)]")
- message_admins("Admin [key_name_admin(usr)] healed / revived [key_name_admin(M)]!", 1)
+ var/msg = "Admin [key_name_admin(usr)] healed / revived [ADMIN_LOOKUPFLW(M)]!"
+ message_admins(msg)
+ admin_ticket_log(M, msg)
else
alert("Admin revive disabled")
feedback_add_details("admin_verb","REJU") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
diff --git a/code/modules/ai/ai_holder.dm b/code/modules/ai/ai_holder.dm
index 3b5bad97ea..23bc9215b0 100644
--- a/code/modules/ai/ai_holder.dm
+++ b/code/modules/ai/ai_holder.dm
@@ -164,7 +164,7 @@
else if(istype(holder.loc, /obj/structure/closet))
var/obj/structure/closet/C = holder.loc
ai_log("handle_stance_tactical() : Inside a closet. Going to attempt escape.", AI_LOG_TRACE)
- if(C.welded)
+ if(C.sealed)
holder.resist()
else
C.open()
diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm
index 5142f6e45e..5f49b931b5 100644
--- a/code/modules/client/client defines.dm
+++ b/code/modules/client/client defines.dm
@@ -12,6 +12,7 @@
var/last_message = "" //Contains the last message sent by this client - used to protect against copy-paste spamming.
var/last_message_count = 0 //contins a number of how many times a message identical to last_message was sent.
+ var/ircreplyamount = 0
/////////
//OTHER//
diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm
index 1202147210..d21dc16f48 100644
--- a/code/modules/client/client procs.dm
+++ b/code/modules/client/client procs.dm
@@ -57,7 +57,7 @@
if(mute_irc)
usr << ""
return
- cmd_admin_irc_pm(href_list["irc_msg"])
+ send2adminirc(href_list["irc_msg"])
return
@@ -111,6 +111,8 @@
clients += src
directory[ckey] = src
+ GLOB.ahelp_tickets.ClientLogin(src)
+
//Admin Authorisation
holder = admin_datums[ckey]
if(holder)
@@ -176,6 +178,7 @@
if(holder)
holder.owner = null
admins -= src
+ GLOB.ahelp_tickets.ClientLogout(src)
directory -= ckey
clients -= src
return ..()
diff --git a/code/modules/client/preference_setup/loadout/loadout_head.dm b/code/modules/client/preference_setup/loadout/loadout_head.dm
index 7e0ac15a34..7801d92b0c 100644
--- a/code/modules/client/preference_setup/loadout/loadout_head.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_head.dm
@@ -353,26 +353,18 @@
sols[initial(sol.name)] = sol
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(sols))
-/datum/gear/head/surgical/black
- display_name = "surgical cap, black"
- path = /obj/item/clothing/head/surgery/black
+/datum/gear/head/surgical
+ display_name = "surgical cap selection"
+ path = /obj/item/clothing/head/surgery
-/datum/gear/head/surgical/blue
- display_name = "surgical cap, blue"
- path = /obj/item/clothing/head/surgery/blue
-
-/datum/gear/head/surgical/green
- display_name = "surgical cap, green"
- path = /obj/item/clothing/head/surgery/green
-
-/datum/gear/head/surgical/navyblue
- display_name = "surgical cap, navy blue"
- path = /obj/item/clothing/head/surgery/navyblue
-
-/datum/gear/head/surgical/purple
- display_name = "surgical cap, purple"
- path = /obj/item/clothing/head/surgery/purple
+/datum/gear/head/surgical/New()
+ ..()
+ var/list/caps = list()
+ for(var/surgery in typesof(/obj/item/clothing/head/surgery))
+ var/obj/item/clothing/head/surgery/cap_type = caps
+ caps[initial(cap_type.name)] = cap_type
+ gear_tweaks += new/datum/gear_tweak/path(sortAssoc(caps))
/datum/gear/head/circuitry
display_name = "headwear, circuitry (empty)"
- path = /obj/item/clothing/head/circuitry
\ No newline at end of file
+ path = /obj/item/clothing/head/circuitry
diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm
index c932d2524b..fed3119830 100644
--- a/code/modules/clothing/glasses/glasses.dm
+++ b/code/modules/clothing/glasses/glasses.dm
@@ -60,6 +60,7 @@ BLIND // can't see anything
to_chat(usr, "You activate the optical matrix on the [src].")
user.update_action_buttons()
user.recalculate_vis()
+ ..()
/obj/item/clothing/glasses/meson
name = "optical meson scanner"
diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm
index fdc5d97284..2f36d68209 100644
--- a/code/modules/clothing/spacesuits/rig/rig.dm
+++ b/code/modules/clothing/spacesuits/rig/rig.dm
@@ -26,6 +26,8 @@
unacidable = 1
preserve_item = 1
+ var/suit_state //The string used for the suit's icon_state.
+
var/interface_path = "hardsuit.tmpl"
var/ai_interface_path = "hardsuit.tmpl"
var/interface_title = "Hardsuit Controller"
@@ -110,6 +112,7 @@
/obj/item/weapon/rig/New()
..()
+ suit_state = icon_state
item_state = icon_state
wires = new(src)
@@ -154,7 +157,7 @@
piece.canremove = 0
piece.name = "[suit_type] [initial(piece.name)]"
piece.desc = "It seems to be part of a [src.name]."
- piece.icon_state = "[initial(icon_state)]"
+ piece.icon_state = "[suit_state]"
piece.min_cold_protection_temperature = min_cold_protection_temperature
piece.max_heat_protection_temperature = max_heat_protection_temperature
if(piece.siemens_coefficient > siemens_coefficient) //So that insulated gloves keep their insulation.
@@ -206,7 +209,7 @@
canremove = 1
for(var/obj/item/piece in list(helmet,boots,gloves,chest))
if(!piece) continue
- piece.icon_state = "[initial(icon_state)]"
+ piece.icon_state = "[suit_state]"
if(airtight)
piece.item_flags &= ~(STOPPRESSUREDAMAGE|AIRTIGHT)
update_icon(1)
@@ -271,7 +274,7 @@
if(seal_delay && !instant && !do_after(M,seal_delay,needhand=0))
failed_to_seal = 1
- piece.icon_state = "[initial(icon_state)][!seal_target ? "_sealed" : ""]"
+ piece.icon_state = "[suit_state][!seal_target ? "_sealed" : ""]"
switch(msg_type)
if("boots")
M << "\The [piece] [!seal_target ? "seal around your feet" : "relax their grip on your legs"]."
@@ -309,7 +312,7 @@
qdel(booting_R)
for(var/obj/item/piece in list(helmet,boots,gloves,chest))
if(!piece) continue
- piece.icon_state = "[initial(icon_state)][!seal_target ? "" : "_sealed"]"
+ piece.icon_state = "[suit_state][!seal_target ? "" : "_sealed"]"
canremove = !seal_target
if(airtight)
update_component_sealed()
diff --git a/code/modules/reagents/reagent_containers/drinkingglass/drinkingglass.dm b/code/modules/food/drinkingglass/drinkingglass.dm
similarity index 100%
rename from code/modules/reagents/reagent_containers/drinkingglass/drinkingglass.dm
rename to code/modules/food/drinkingglass/drinkingglass.dm
diff --git a/code/modules/reagents/reagent_containers/drinkingglass/extras.dm b/code/modules/food/drinkingglass/extras.dm
similarity index 100%
rename from code/modules/reagents/reagent_containers/drinkingglass/extras.dm
rename to code/modules/food/drinkingglass/extras.dm
diff --git a/code/modules/reagents/reagent_containers/drinkingglass/glass_boxes.dm b/code/modules/food/drinkingglass/glass_boxes.dm
similarity index 100%
rename from code/modules/reagents/reagent_containers/drinkingglass/glass_boxes.dm
rename to code/modules/food/drinkingglass/glass_boxes.dm
diff --git a/code/modules/reagents/reagent_containers/drinkingglass/glass_types.dm b/code/modules/food/drinkingglass/glass_types.dm
similarity index 100%
rename from code/modules/reagents/reagent_containers/drinkingglass/glass_types.dm
rename to code/modules/food/drinkingglass/glass_types.dm
diff --git a/code/modules/reagents/reagent_containers/drinkingglass/metaglass.dm b/code/modules/food/drinkingglass/metaglass.dm
similarity index 92%
rename from code/modules/reagents/reagent_containers/drinkingglass/metaglass.dm
rename to code/modules/food/drinkingglass/metaglass.dm
index 355407e9a3..52528235bb 100644
--- a/code/modules/reagents/reagent_containers/drinkingglass/metaglass.dm
+++ b/code/modules/food/drinkingglass/metaglass.dm
@@ -201,6 +201,18 @@ Drinks Data
/datum/reagent/drink/nothing
glass_icon_state = "nothing"
+/datum/reagent/drink/oilslick
+ glass_icon_state = "jar_oil"
+ glass_center_of_mass = list("x"=15, "y"=12)
+
+/datum/reagent/drink/nuclearwaste
+ glass_icon_state = "jar_rad"
+ glass_center_of_mass = list("x"=15, "y"=12)
+
+/datum/reagent/drink/sodaoil
+ glass_icon_state = "jar_water"
+ glass_center_of_mass = list("x"=15, "y"=12)
+
/datum/reagent/ethanol/absinthe
glass_icon_state = "absintheglass"
glass_center_of_mass = list("x"=16, "y"=5)
@@ -242,7 +254,11 @@ Drinks Data
glass_center_of_mass = list("x"=16, "y"=12)
/datum/reagent/ethanol/sake
- glass_icon_state = "ginvodkaglass"
+ glass_icon_state = "sakecup"
+ glass_center_of_mass = list("x"=16, "y"=12)
+
+/datum/reagent/ethanol/godsake
+ glass_icon_state = "sakeporcelain"
glass_center_of_mass = list("x"=16, "y"=12)
/datum/reagent/ethanol/tequila
@@ -502,4 +518,27 @@ Drinks Data
/datum/reagent/ethanol/specialwhiskey
glass_icon_state = "whiskeyglass"
- glass_center_of_mass = list("x"=16, "y"=12)
\ No newline at end of file
+ glass_center_of_mass = list("x"=16, "y"=12)
+
+/datum/reagent/ethanol/godka
+ glass_icon_state = "godkabottle"
+ glass_center_of_mass = list("x"=17, "y"=15)
+
+/datum/reagent/ethanol/holywine
+ glass_icon_state = "holywineglass"
+ glass_center_of_mass = list("x"=15, "y"=7)
+
+/datum/reagent/ethanol/holy_mary
+ glass_icon_state = "holymaryglass"
+
+/datum/reagent/ethanol/angelswrath
+ glass_icon_state = "angelswrath"
+ glass_center_of_mass = list("x"=16, "y"=2)
+
+/datum/reagent/ethanol/angelskiss
+ glass_icon_state = "angelskiss"
+ glass_center_of_mass = list("x"=16, "y"=8)
+
+/datum/reagent/ethanol/ichor_mead
+ glass_icon_state = "ichor_meadglass"
+ glass_center_of_mass = list("x"=17, "y"=10)
diff --git a/code/modules/reagents/reagent_containers/drinkingglass/shaker.dm b/code/modules/food/drinkingglass/shaker.dm
similarity index 100%
rename from code/modules/reagents/reagent_containers/drinkingglass/shaker.dm
rename to code/modules/food/drinkingglass/shaker.dm
diff --git a/code/modules/reagents/reagent_containers/food.dm b/code/modules/food/food.dm
similarity index 97%
rename from code/modules/reagents/reagent_containers/food.dm
rename to code/modules/food/food.dm
index a99c9cdf24..330dfaab7e 100644
--- a/code/modules/reagents/reagent_containers/food.dm
+++ b/code/modules/food/food.dm
@@ -1,38 +1,38 @@
-#define CELLS 8
-#define CELLSIZE (32/CELLS)
-
-////////////////////////////////////////////////////////////////////////////////
-/// Food.
-////////////////////////////////////////////////////////////////////////////////
-/obj/item/weapon/reagent_containers/food
- possible_transfer_amounts = null
- volume = 50 //Sets the default container amount for all food items.
- var/filling_color = "#FFFFFF" //Used by sandwiches.
-
- var/list/center_of_mass = list() // Used for table placement
-
-/obj/item/weapon/reagent_containers/food/New()
- ..()
- if (center_of_mass.len && !pixel_x && !pixel_y)
- src.pixel_x = rand(-6.0, 6) //Randomizes postion
- src.pixel_y = rand(-6.0, 6)
-
-/obj/item/weapon/reagent_containers/food/afterattack(atom/A, mob/user, proximity, params)
- if(center_of_mass.len && proximity && params && istype(A, /obj/structure/table))
- //Places the item on a grid
- var/list/mouse_control = params2list(params)
-
- var/mouse_x = text2num(mouse_control["icon-x"])
- var/mouse_y = text2num(mouse_control["icon-y"])
-
- if(!isnum(mouse_x) || !isnum(mouse_y))
- return
-
- var/cell_x = max(0, min(CELLS-1, round(mouse_x/CELLSIZE)))
- var/cell_y = max(0, min(CELLS-1, round(mouse_y/CELLSIZE)))
-
- pixel_x = (CELLSIZE * (0.5 + cell_x)) - center_of_mass["x"]
- pixel_y = (CELLSIZE * (0.5 + cell_y)) - center_of_mass["y"]
-
-#undef CELLS
-#undef CELLSIZE
+#define CELLS 8
+#define CELLSIZE (32/CELLS)
+
+////////////////////////////////////////////////////////////////////////////////
+/// Food.
+////////////////////////////////////////////////////////////////////////////////
+/obj/item/weapon/reagent_containers/food
+ possible_transfer_amounts = null
+ volume = 50 //Sets the default container amount for all food items.
+ var/filling_color = "#FFFFFF" //Used by sandwiches.
+
+ var/list/center_of_mass = list() // Used for table placement
+
+/obj/item/weapon/reagent_containers/food/New()
+ ..()
+ if (center_of_mass.len && !pixel_x && !pixel_y)
+ src.pixel_x = rand(-6.0, 6) //Randomizes postion
+ src.pixel_y = rand(-6.0, 6)
+
+/obj/item/weapon/reagent_containers/food/afterattack(atom/A, mob/user, proximity, params)
+ if(center_of_mass.len && proximity && params && istype(A, /obj/structure/table))
+ //Places the item on a grid
+ var/list/mouse_control = params2list(params)
+
+ var/mouse_x = text2num(mouse_control["icon-x"])
+ var/mouse_y = text2num(mouse_control["icon-y"])
+
+ if(!isnum(mouse_x) || !isnum(mouse_y))
+ return
+
+ var/cell_x = max(0, min(CELLS-1, round(mouse_x/CELLSIZE)))
+ var/cell_y = max(0, min(CELLS-1, round(mouse_y/CELLSIZE)))
+
+ pixel_x = (CELLSIZE * (0.5 + cell_x)) - center_of_mass["x"]
+ pixel_y = (CELLSIZE * (0.5 + cell_y)) - center_of_mass["y"]
+
+#undef CELLS
+#undef CELLSIZE
diff --git a/code/modules/reagents/reagent_containers/food/cans.dm b/code/modules/food/food/cans.dm
similarity index 100%
rename from code/modules/reagents/reagent_containers/food/cans.dm
rename to code/modules/food/food/cans.dm
diff --git a/code/modules/reagents/reagent_containers/food/condiment.dm b/code/modules/food/food/condiment.dm
similarity index 97%
rename from code/modules/reagents/reagent_containers/food/condiment.dm
rename to code/modules/food/food/condiment.dm
index 7257ac65b1..8ab7f34c79 100644
--- a/code/modules/reagents/reagent_containers/food/condiment.dm
+++ b/code/modules/food/food/condiment.dm
@@ -1,178 +1,178 @@
-
-///////////////////////////////////////////////Condiments
-//Notes by Darem: The condiments food-subtype is for stuff you don't actually eat but you use to modify existing food. They all
-// leave empty containers when used up and can be filled/re-filled with other items. Formatting for first section is identical
-// to mixed-drinks code. If you want an object that starts pre-loaded, you need to make it in addition to the other code.
-
-//Food items that aren't eaten normally and leave an empty container behind.
-/obj/item/weapon/reagent_containers/food/condiment
- name = "Condiment Container"
- desc = "Just your average condiment container."
- icon = 'icons/obj/food.dmi'
- icon_state = "emptycondiment"
- flags = OPENCONTAINER
- possible_transfer_amounts = list(1,5,10)
- center_of_mass = list("x"=16, "y"=6)
- volume = 50
-
-/obj/item/weapon/reagent_containers/food/condiment/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
- return
-
-/obj/item/weapon/reagent_containers/food/condiment/attack_self(var/mob/user as mob)
- return
-
-/obj/item/weapon/reagent_containers/food/condiment/attack(var/mob/M as mob, var/mob/user as mob, var/def_zone)
- if(standard_feed_mob(user, M))
- return
-
-/obj/item/weapon/reagent_containers/food/condiment/afterattack(var/obj/target, var/mob/user, var/flag)
- if(standard_dispenser_refill(user, target))
- return
- if(standard_pour_into(user, target))
- return
-
- if(istype(target, /obj/item/weapon/reagent_containers/food/snacks)) // These are not opencontainers but we can transfer to them
- if(!reagents || !reagents.total_volume)
- user << "There is no condiment left in \the [src]."
- return
-
- if(!target.reagents.get_free_space())
- user << "You can't add more condiment to \the [target]."
- return
-
- var/trans = reagents.trans_to_obj(target, amount_per_transfer_from_this)
- user << "You add [trans] units of the condiment to \the [target]."
- else
- ..()
-
-/obj/item/weapon/reagent_containers/food/condiment/feed_sound(var/mob/user)
- playsound(user.loc, 'sound/items/drink.ogg', rand(10, 50), 1)
-
-/obj/item/weapon/reagent_containers/food/condiment/self_feed_message(var/mob/user)
- user << "You swallow some of contents of \the [src]."
-
-/obj/item/weapon/reagent_containers/food/condiment/on_reagent_change()
- if(reagents.reagent_list.len > 0)
- switch(reagents.get_master_reagent_id())
- if("ketchup")
- name = "Ketchup"
- desc = "You feel more American already."
- icon_state = "ketchup"
- center_of_mass = list("x"=16, "y"=6)
- if("capsaicin")
- name = "Hotsauce"
- desc = "You can almost TASTE the stomach ulcers now!"
- icon_state = "hotsauce"
- center_of_mass = list("x"=16, "y"=6)
- if("enzyme")
- name = "Universal Enzyme"
- desc = "Used in cooking various dishes."
- icon_state = "enzyme"
- center_of_mass = list("x"=16, "y"=6)
- if("soysauce")
- name = "Soy Sauce"
- desc = "A salty soy-based flavoring."
- icon_state = "soysauce"
- center_of_mass = list("x"=16, "y"=6)
- if("frostoil")
- name = "Coldsauce"
- desc = "Leaves the tongue numb in its passage."
- icon_state = "coldsauce"
- center_of_mass = list("x"=16, "y"=6)
- if("sodiumchloride")
- name = "Salt Shaker"
- desc = "Salt. From space oceans, presumably."
- icon_state = "saltshaker"
- center_of_mass = list("x"=16, "y"=10)
- if("blackpepper")
- name = "Pepper Mill"
- desc = "Often used to flavor food or make people sneeze."
- icon_state = "peppermillsmall"
- center_of_mass = list("x"=16, "y"=10)
- if("cornoil")
- name = "Corn Oil"
- desc = "A delicious oil used in cooking. Made from corn."
- icon_state = "oliveoil"
- center_of_mass = list("x"=16, "y"=6)
- if("sugar")
- name = "Sugar"
- desc = "Tastey space sugar!"
- center_of_mass = list("x"=16, "y"=6)
- else
- name = "Misc Condiment Bottle"
- if (reagents.reagent_list.len==1)
- desc = "Looks like it is [reagents.get_master_reagent_name()], but you are not sure."
- else
- desc = "A mixture of various condiments. [reagents.get_master_reagent_name()] is one of them."
- icon_state = "mixedcondiments"
- center_of_mass = list("x"=16, "y"=6)
- else
- icon_state = "emptycondiment"
- name = "Condiment Bottle"
- desc = "An empty condiment bottle."
- center_of_mass = list("x"=16, "y"=6)
- return
-
-/obj/item/weapon/reagent_containers/food/condiment/enzyme
- name = "Universal Enzyme"
- desc = "Used in cooking various dishes."
- icon_state = "enzyme"
-
-/obj/item/weapon/reagent_containers/food/condiment/enzyme/New()
- ..()
- reagents.add_reagent("enzyme", 50)
-
-/obj/item/weapon/reagent_containers/food/condiment/sugar/New()
- ..()
- reagents.add_reagent("sugar", 50)
-
-/obj/item/weapon/reagent_containers/food/condiment/small
- possible_transfer_amounts = list(1,20)
- amount_per_transfer_from_this = 1
- volume = 20
- center_of_mass = list()
-
-/obj/item/weapon/reagent_containers/food/condiment/small/on_reagent_change()
- return
-
-/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker //Seperate from above since it's a small shaker rather then
- name = "salt shaker" // a large one.
- desc = "Salt. From space oceans, presumably."
- icon_state = "saltshakersmall"
-
-/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker/New()
- ..()
- reagents.add_reagent("sodiumchloride", 20)
-
-/obj/item/weapon/reagent_containers/food/condiment/small/peppermill
- name = "pepper mill"
- desc = "Often used to flavor food or make people sneeze."
- icon_state = "peppermillsmall"
-
-/obj/item/weapon/reagent_containers/food/condiment/small/peppermill/New()
- ..()
- reagents.add_reagent("blackpepper", 20)
-
-/obj/item/weapon/reagent_containers/food/condiment/small/sugar
- name = "sugar"
- desc = "Sweetness in a bottle"
- icon_state = "sugarsmall"
-
-/obj/item/weapon/reagent_containers/food/condiment/small/sugar/New()
- ..()
- reagents.add_reagent("sugar", 20)
-
-/obj/item/weapon/reagent_containers/food/condiment/flour
- name = "flour sack"
- desc = "A big bag of flour. Good for baking!"
- icon = 'icons/obj/food.dmi'
- icon_state = "flour"
-
-/obj/item/weapon/reagent_containers/food/condiment/flour/on_reagent_change()
- return
-
-/obj/item/weapon/reagent_containers/food/condiment/flour/New()
- ..()
- reagents.add_reagent("flour", 30)
- src.pixel_x = rand(-10.0, 10)
- src.pixel_y = rand(-10.0, 10)
+
+///////////////////////////////////////////////Condiments
+//Notes by Darem: The condiments food-subtype is for stuff you don't actually eat but you use to modify existing food. They all
+// leave empty containers when used up and can be filled/re-filled with other items. Formatting for first section is identical
+// to mixed-drinks code. If you want an object that starts pre-loaded, you need to make it in addition to the other code.
+
+//Food items that aren't eaten normally and leave an empty container behind.
+/obj/item/weapon/reagent_containers/food/condiment
+ name = "Condiment Container"
+ desc = "Just your average condiment container."
+ icon = 'icons/obj/food.dmi'
+ icon_state = "emptycondiment"
+ flags = OPENCONTAINER
+ possible_transfer_amounts = list(1,5,10)
+ center_of_mass = list("x"=16, "y"=6)
+ volume = 50
+
+/obj/item/weapon/reagent_containers/food/condiment/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
+ return
+
+/obj/item/weapon/reagent_containers/food/condiment/attack_self(var/mob/user as mob)
+ return
+
+/obj/item/weapon/reagent_containers/food/condiment/attack(var/mob/M as mob, var/mob/user as mob, var/def_zone)
+ if(standard_feed_mob(user, M))
+ return
+
+/obj/item/weapon/reagent_containers/food/condiment/afterattack(var/obj/target, var/mob/user, var/flag)
+ if(standard_dispenser_refill(user, target))
+ return
+ if(standard_pour_into(user, target))
+ return
+
+ if(istype(target, /obj/item/weapon/reagent_containers/food/snacks)) // These are not opencontainers but we can transfer to them
+ if(!reagents || !reagents.total_volume)
+ user << "There is no condiment left in \the [src]."
+ return
+
+ if(!target.reagents.get_free_space())
+ user << "You can't add more condiment to \the [target]."
+ return
+
+ var/trans = reagents.trans_to_obj(target, amount_per_transfer_from_this)
+ user << "You add [trans] units of the condiment to \the [target]."
+ else
+ ..()
+
+/obj/item/weapon/reagent_containers/food/condiment/feed_sound(var/mob/user)
+ playsound(user.loc, 'sound/items/drink.ogg', rand(10, 50), 1)
+
+/obj/item/weapon/reagent_containers/food/condiment/self_feed_message(var/mob/user)
+ user << "You swallow some of contents of \the [src]."
+
+/obj/item/weapon/reagent_containers/food/condiment/on_reagent_change()
+ if(reagents.reagent_list.len > 0)
+ switch(reagents.get_master_reagent_id())
+ if("ketchup")
+ name = "Ketchup"
+ desc = "You feel more American already."
+ icon_state = "ketchup"
+ center_of_mass = list("x"=16, "y"=6)
+ if("capsaicin")
+ name = "Hotsauce"
+ desc = "You can almost TASTE the stomach ulcers now!"
+ icon_state = "hotsauce"
+ center_of_mass = list("x"=16, "y"=6)
+ if("enzyme")
+ name = "Universal Enzyme"
+ desc = "Used in cooking various dishes."
+ icon_state = "enzyme"
+ center_of_mass = list("x"=16, "y"=6)
+ if("soysauce")
+ name = "Soy Sauce"
+ desc = "A salty soy-based flavoring."
+ icon_state = "soysauce"
+ center_of_mass = list("x"=16, "y"=6)
+ if("frostoil")
+ name = "Coldsauce"
+ desc = "Leaves the tongue numb in its passage."
+ icon_state = "coldsauce"
+ center_of_mass = list("x"=16, "y"=6)
+ if("sodiumchloride")
+ name = "Salt Shaker"
+ desc = "Salt. From space oceans, presumably."
+ icon_state = "saltshaker"
+ center_of_mass = list("x"=16, "y"=10)
+ if("blackpepper")
+ name = "Pepper Mill"
+ desc = "Often used to flavor food or make people sneeze."
+ icon_state = "peppermillsmall"
+ center_of_mass = list("x"=16, "y"=10)
+ if("cornoil")
+ name = "Corn Oil"
+ desc = "A delicious oil used in cooking. Made from corn."
+ icon_state = "oliveoil"
+ center_of_mass = list("x"=16, "y"=6)
+ if("sugar")
+ name = "Sugar"
+ desc = "Tastey space sugar!"
+ center_of_mass = list("x"=16, "y"=6)
+ else
+ name = "Misc Condiment Bottle"
+ if (reagents.reagent_list.len==1)
+ desc = "Looks like it is [reagents.get_master_reagent_name()], but you are not sure."
+ else
+ desc = "A mixture of various condiments. [reagents.get_master_reagent_name()] is one of them."
+ icon_state = "mixedcondiments"
+ center_of_mass = list("x"=16, "y"=6)
+ else
+ icon_state = "emptycondiment"
+ name = "Condiment Bottle"
+ desc = "An empty condiment bottle."
+ center_of_mass = list("x"=16, "y"=6)
+ return
+
+/obj/item/weapon/reagent_containers/food/condiment/enzyme
+ name = "Universal Enzyme"
+ desc = "Used in cooking various dishes."
+ icon_state = "enzyme"
+
+/obj/item/weapon/reagent_containers/food/condiment/enzyme/New()
+ ..()
+ reagents.add_reagent("enzyme", 50)
+
+/obj/item/weapon/reagent_containers/food/condiment/sugar/New()
+ ..()
+ reagents.add_reagent("sugar", 50)
+
+/obj/item/weapon/reagent_containers/food/condiment/small
+ possible_transfer_amounts = list(1,20)
+ amount_per_transfer_from_this = 1
+ volume = 20
+ center_of_mass = list()
+
+/obj/item/weapon/reagent_containers/food/condiment/small/on_reagent_change()
+ return
+
+/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker //Seperate from above since it's a small shaker rather then
+ name = "salt shaker" // a large one.
+ desc = "Salt. From space oceans, presumably."
+ icon_state = "saltshakersmall"
+
+/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker/New()
+ ..()
+ reagents.add_reagent("sodiumchloride", 20)
+
+/obj/item/weapon/reagent_containers/food/condiment/small/peppermill
+ name = "pepper mill"
+ desc = "Often used to flavor food or make people sneeze."
+ icon_state = "peppermillsmall"
+
+/obj/item/weapon/reagent_containers/food/condiment/small/peppermill/New()
+ ..()
+ reagents.add_reagent("blackpepper", 20)
+
+/obj/item/weapon/reagent_containers/food/condiment/small/sugar
+ name = "sugar"
+ desc = "Sweetness in a bottle"
+ icon_state = "sugarsmall"
+
+/obj/item/weapon/reagent_containers/food/condiment/small/sugar/New()
+ ..()
+ reagents.add_reagent("sugar", 20)
+
+/obj/item/weapon/reagent_containers/food/condiment/flour
+ name = "flour sack"
+ desc = "A big bag of flour. Good for baking!"
+ icon = 'icons/obj/food.dmi'
+ icon_state = "flour"
+
+/obj/item/weapon/reagent_containers/food/condiment/flour/on_reagent_change()
+ return
+
+/obj/item/weapon/reagent_containers/food/condiment/flour/New()
+ ..()
+ reagents.add_reagent("flour", 30)
+ src.pixel_x = rand(-10.0, 10)
+ src.pixel_y = rand(-10.0, 10)
diff --git a/code/modules/reagents/reagent_containers/food/drinks.dm b/code/modules/food/food/drinks.dm
similarity index 97%
rename from code/modules/reagents/reagent_containers/food/drinks.dm
rename to code/modules/food/food/drinks.dm
index 4146c967c8..af4dd0fb53 100644
--- a/code/modules/reagents/reagent_containers/food/drinks.dm
+++ b/code/modules/food/food/drinks.dm
@@ -1,313 +1,313 @@
-////////////////////////////////////////////////////////////////////////////////
-/// Drinks.
-////////////////////////////////////////////////////////////////////////////////
-/obj/item/weapon/reagent_containers/food/drinks
- name = "drink"
- desc = "yummy"
- icon = 'icons/obj/drinks.dmi'
- icon_state = null
- flags = OPENCONTAINER
- amount_per_transfer_from_this = 5
- volume = 50
-
-/obj/item/weapon/reagent_containers/food/drinks/on_reagent_change()
- if (reagents.reagent_list.len > 0)
- var/datum/reagent/R = reagents.get_master_reagent()
- if(R.price_tag)
- price_tag = R.price_tag
- else
- price_tag = null
- return
-
-/obj/item/weapon/reagent_containers/food/drinks/attack_self(mob/user as mob)
- if(!is_open_container())
- open(user)
-
-/obj/item/weapon/reagent_containers/food/drinks/proc/open(mob/user)
- playsound(loc,"canopen", rand(10,50), 1)
- user << "You open [src] with an audible pop!"
- flags |= OPENCONTAINER
-
-/obj/item/weapon/reagent_containers/food/drinks/attack(mob/M as mob, mob/user as mob, def_zone)
- if(force && !(flags & NOBLUDGEON) && user.a_intent == I_HURT)
- return ..()
-
- if(standard_feed_mob(user, M))
- return
-
- return 0
-
-/obj/item/weapon/reagent_containers/food/drinks/afterattack(obj/target, mob/user, proximity)
- if(!proximity) return
-
- if(standard_dispenser_refill(user, target))
- return
- if(standard_pour_into(user, target))
- return
- return ..()
-
-/obj/item/weapon/reagent_containers/food/drinks/standard_feed_mob(var/mob/user, var/mob/target)
- if(!is_open_container())
- user << "You need to open [src]!"
- return 1
- return ..()
-
-/obj/item/weapon/reagent_containers/food/drinks/standard_dispenser_refill(var/mob/user, var/obj/structure/reagent_dispensers/target)
- if(!is_open_container())
- user << "You need to open [src]!"
- return 1
- return ..()
-
-/obj/item/weapon/reagent_containers/food/drinks/standard_pour_into(var/mob/user, var/atom/target)
- if(!is_open_container())
- user << "You need to open [src]!"
- return 1
- return ..()
-
-/obj/item/weapon/reagent_containers/food/drinks/self_feed_message(var/mob/user)
- user << "You swallow a gulp from \the [src]."
-
-/obj/item/weapon/reagent_containers/food/drinks/feed_sound(var/mob/user)
- playsound(user.loc, 'sound/items/drink.ogg', rand(10, 50), 1)
-
-/obj/item/weapon/reagent_containers/food/drinks/examine(mob/user)
- if(!..(user, 1))
- return
- if(!reagents || reagents.total_volume == 0)
- user << "\The [src] is empty!"
- else if (reagents.total_volume <= volume * 0.25)
- user << "\The [src] is almost empty!"
- else if (reagents.total_volume <= volume * 0.66)
- user << "\The [src] is half full!"
- else if (reagents.total_volume <= volume * 0.90)
- user << "\The [src] is almost full!"
- else
- user << "\The [src] is full!"
-
-
-////////////////////////////////////////////////////////////////////////////////
-/// Drinks. END
-////////////////////////////////////////////////////////////////////////////////
-
-/obj/item/weapon/reagent_containers/food/drinks/golden_cup
- desc = "A golden cup"
- name = "golden cup"
- icon_state = "golden_cup"
- item_state = "" //nope :(
- w_class = ITEMSIZE_LARGE
- force = 14
- throwforce = 10
- amount_per_transfer_from_this = 20
- possible_transfer_amounts = null
- volume = 150
- flags = CONDUCT | OPENCONTAINER
-
-/obj/item/weapon/reagent_containers/food/drinks/golden_cup/on_reagent_change()
- ..()
-
-///////////////////////////////////////////////Drinks
-//Notes by Darem: Drinks are simply containers that start preloaded. Unlike condiments, the contents can be ingested directly
-// rather then having to add it to something else first. They should only contain liquids. They have a default container size of 50.
-// Formatting is the same as food.
-
-/obj/item/weapon/reagent_containers/food/drinks/milk
- name = "milk carton"
- desc = "It's milk. White and nutritious goodness!"
- icon_state = "milk"
- item_state = "carton"
- center_of_mass = list("x"=16, "y"=9)
-
-/obj/item/weapon/reagent_containers/food/drinks/milk/New()
- ..()
- reagents.add_reagent("milk", 50)
-
-/obj/item/weapon/reagent_containers/food/drinks/soymilk
- name = "soymilk carton"
- desc = "It's soy milk. White and nutritious goodness!"
- icon_state = "soymilk"
- item_state = "carton"
- center_of_mass = list("x"=16, "y"=9)
-/obj/item/weapon/reagent_containers/food/drinks/soymilk/New()
- ..()
- reagents.add_reagent("soymilk", 50)
-
-/obj/item/weapon/reagent_containers/food/drinks/smallmilk
- name = "small milk carton"
- desc = "It's milk. White and nutritious goodness!"
- volume = 30
- icon_state = "mini-milk"
- item_state = "carton"
- center_of_mass = list("x"=16, "y"=9)
-/obj/item/weapon/reagent_containers/food/drinks/smallmilk/New()
- ..()
- reagents.add_reagent("milk", 30)
-
-/obj/item/weapon/reagent_containers/food/drinks/smallchocmilk
- name = "small chocolate milk carton"
- desc = "It's milk! This one is in delicious chocolate flavour."
- volume = 30
- icon_state = "mini-milk_choco"
- item_state = "carton"
- center_of_mass = list("x"=16, "y"=9)
-/obj/item/weapon/reagent_containers/food/drinks/smallchocmilk/New()
- ..()
- reagents.add_reagent("chocolate_milk", 30)
-
-/obj/item/weapon/reagent_containers/food/drinks/coffee
- name = "\improper Robust Coffee"
- desc = "Careful, the beverage you're about to enjoy is extremely hot."
- icon_state = "coffee"
- center_of_mass = list("x"=15, "y"=10)
-/obj/item/weapon/reagent_containers/food/drinks/coffee/New()
- ..()
- reagents.add_reagent("coffee", 30)
-
-/obj/item/weapon/reagent_containers/food/drinks/tea
- name = "cup of Duke Purple Tea"
- desc = "An insult to Duke Purple is an insult to the Space Queen! Any proper gentleman will fight you, if you sully this tea."
- icon_state = "teacup"
- item_state = "coffee"
- center_of_mass = list("x"=16, "y"=14)
-
-/obj/item/weapon/reagent_containers/food/drinks/tea/New()
- ..()
- reagents.add_reagent("tea", 30)
-
-/obj/item/weapon/reagent_containers/food/drinks/ice
- name = "cup of ice"
- desc = "Careful, cold ice, do not chew."
- icon_state = "coffee"
- center_of_mass = list("x"=15, "y"=10)
-/obj/item/weapon/reagent_containers/food/drinks/ice/New()
- ..()
- reagents.add_reagent("ice", 30)
-
-/obj/item/weapon/reagent_containers/food/drinks/h_chocolate
- name = "cup of Dutch hot coco"
- desc = "Made in Space South America."
- icon_state = "hot_coco"
- item_state = "coffee"
- center_of_mass = list("x"=15, "y"=13)
-
-/obj/item/weapon/reagent_containers/food/drinks/h_chocolate/New()
- ..()
- reagents.add_reagent("hot_coco", 30)
-
-/obj/item/weapon/reagent_containers/food/drinks/dry_ramen
- name = "Cup Ramen"
- desc = "Just add 10ml water, self heats! A taste that reminds you of your school years."
- icon_state = "ramen"
- center_of_mass = list("x"=16, "y"=11)
-/obj/item/weapon/reagent_containers/food/drinks/dry_ramen/New()
- ..()
- reagents.add_reagent("dry_ramen", 30)
-
-/obj/item/weapon/reagent_containers/food/drinks/sillycup
- name = "paper cup"
- desc = "A paper water cup."
- icon_state = "water_cup_e"
- possible_transfer_amounts = null
- volume = 10
- center_of_mass = list("x"=16, "y"=12)
-
-/obj/item/weapon/reagent_containers/food/drinks/sillycup/New()
- ..()
-
-/obj/item/weapon/reagent_containers/food/drinks/sillycup/on_reagent_change()
- ..()
- if(reagents.total_volume)
- icon_state = "water_cup"
- else
- icon_state = "water_cup_e"
-
-/obj/item/weapon/reagent_containers/food/drinks/sillycup/MouseDrop(obj/over_object as obj)
- if(!reagents.total_volume && istype(over_object, /obj/structure/reagent_dispensers/water_cooler))
- if(over_object.Adjacent(usr))
- var/obj/structure/reagent_dispensers/water_cooler/W = over_object
- if(W.cupholder && W.cups < 10)
- W.cups++
- usr << "You put the [src] in the cup dispenser."
- qdel(src)
- W.update_icon()
- else
- return ..()
-
-//////////////////////////drinkingglass and shaker//
-//Note by Darem: This code handles the mixing of drinks. New drinks go in three places: In Chemistry-Reagents.dm (for the drink
-// itself), in Chemistry-Recipes.dm (for the reaction that changes the components into the drink), and here (for the drinking glass
-// icon states.
-
-/obj/item/weapon/reagent_containers/food/drinks/shaker
- name = "shaker"
- desc = "A metal shaker to mix drinks in."
- icon_state = "shaker"
- amount_per_transfer_from_this = 10
- volume = 120
- center_of_mass = list("x"=17, "y"=10)
-
-/obj/item/weapon/reagent_containers/food/drinks/shaker/on_reagent_change()
- ..()
-
-/obj/item/weapon/reagent_containers/food/drinks/teapot
- name = "teapot"
- desc = "An elegant teapot. It simply oozes class."
- icon_state = "teapot"
- item_state = "teapot"
- amount_per_transfer_from_this = 10
- volume = 120
- center_of_mass = list("x"=17, "y"=7)
-
-/obj/item/weapon/reagent_containers/food/drinks/teapot/on_reagent_change()
- ..()
-
-/obj/item/weapon/reagent_containers/food/drinks/flask
- name = "\improper Colony Director's flask"
- desc = "A metal flask belonging to the Colony Director"
- icon_state = "flask"
- volume = 60
- center_of_mass = list("x"=17, "y"=7)
-
-/obj/item/weapon/reagent_containers/food/drinks/flask/on_reagent_change()
- ..()
-
-/obj/item/weapon/reagent_containers/food/drinks/flask/shiny
- name = "shiny flask"
- desc = "A shiny metal flask. It appears to have a Greek symbol inscribed on it."
- icon_state = "shinyflask"
-
-/obj/item/weapon/reagent_containers/food/drinks/flask/lithium
- name = "lithium flask"
- desc = "A flask with a Lithium Atom symbol on it."
- icon_state = "lithiumflask"
-
-/obj/item/weapon/reagent_containers/food/drinks/flask/detflask
- name = "\improper Detective's flask"
- desc = "A metal flask with a leather band and golden badge belonging to the detective."
- icon_state = "detflask"
- volume = 60
- center_of_mass = list("x"=17, "y"=8)
-
-/obj/item/weapon/reagent_containers/food/drinks/flask/barflask
- name = "flask"
- desc = "For those who can't be bothered to hang out at the bar to drink."
- icon_state = "barflask"
- volume = 60
- center_of_mass = list("x"=17, "y"=7)
-
-/obj/item/weapon/reagent_containers/food/drinks/flask/vacuumflask
- name = "vacuum flask"
- desc = "Keeping your drinks at the perfect temperature since 1892."
- icon_state = "vacuumflask"
- volume = 60
- center_of_mass = list("x"=15, "y"=4)
-
-/obj/item/weapon/reagent_containers/food/drinks/britcup
- name = "cup"
- desc = "A cup with the British flag emblazoned on it."
- icon_state = "britcup"
- volume = 30
- center_of_mass = list("x"=15, "y"=13)
-
-/obj/item/weapon/reagent_containers/food/drinks/britcup/on_reagent_change()
- ..()
-
+////////////////////////////////////////////////////////////////////////////////
+/// Drinks.
+////////////////////////////////////////////////////////////////////////////////
+/obj/item/weapon/reagent_containers/food/drinks
+ name = "drink"
+ desc = "yummy"
+ icon = 'icons/obj/drinks.dmi'
+ icon_state = null
+ flags = OPENCONTAINER
+ amount_per_transfer_from_this = 5
+ volume = 50
+
+/obj/item/weapon/reagent_containers/food/drinks/on_reagent_change()
+ if (reagents.reagent_list.len > 0)
+ var/datum/reagent/R = reagents.get_master_reagent()
+ if(R.price_tag)
+ price_tag = R.price_tag
+ else
+ price_tag = null
+ return
+
+/obj/item/weapon/reagent_containers/food/drinks/attack_self(mob/user as mob)
+ if(!is_open_container())
+ open(user)
+
+/obj/item/weapon/reagent_containers/food/drinks/proc/open(mob/user)
+ playsound(loc,"canopen", rand(10,50), 1)
+ user << "You open [src] with an audible pop!"
+ flags |= OPENCONTAINER
+
+/obj/item/weapon/reagent_containers/food/drinks/attack(mob/M as mob, mob/user as mob, def_zone)
+ if(force && !(flags & NOBLUDGEON) && user.a_intent == I_HURT)
+ return ..()
+
+ if(standard_feed_mob(user, M))
+ return
+
+ return 0
+
+/obj/item/weapon/reagent_containers/food/drinks/afterattack(obj/target, mob/user, proximity)
+ if(!proximity) return
+
+ if(standard_dispenser_refill(user, target))
+ return
+ if(standard_pour_into(user, target))
+ return
+ return ..()
+
+/obj/item/weapon/reagent_containers/food/drinks/standard_feed_mob(var/mob/user, var/mob/target)
+ if(!is_open_container())
+ user << "You need to open [src]!"
+ return 1
+ return ..()
+
+/obj/item/weapon/reagent_containers/food/drinks/standard_dispenser_refill(var/mob/user, var/obj/structure/reagent_dispensers/target)
+ if(!is_open_container())
+ user << "You need to open [src]!"
+ return 1
+ return ..()
+
+/obj/item/weapon/reagent_containers/food/drinks/standard_pour_into(var/mob/user, var/atom/target)
+ if(!is_open_container())
+ user << "You need to open [src]!"
+ return 1
+ return ..()
+
+/obj/item/weapon/reagent_containers/food/drinks/self_feed_message(var/mob/user)
+ user << "You swallow a gulp from \the [src]."
+
+/obj/item/weapon/reagent_containers/food/drinks/feed_sound(var/mob/user)
+ playsound(user.loc, 'sound/items/drink.ogg', rand(10, 50), 1)
+
+/obj/item/weapon/reagent_containers/food/drinks/examine(mob/user)
+ if(!..(user, 1))
+ return
+ if(!reagents || reagents.total_volume == 0)
+ user << "\The [src] is empty!"
+ else if (reagents.total_volume <= volume * 0.25)
+ user << "\The [src] is almost empty!"
+ else if (reagents.total_volume <= volume * 0.66)
+ user << "\The [src] is half full!"
+ else if (reagents.total_volume <= volume * 0.90)
+ user << "\The [src] is almost full!"
+ else
+ user << "\The [src] is full!"
+
+
+////////////////////////////////////////////////////////////////////////////////
+/// Drinks. END
+////////////////////////////////////////////////////////////////////////////////
+
+/obj/item/weapon/reagent_containers/food/drinks/golden_cup
+ desc = "A golden cup"
+ name = "golden cup"
+ icon_state = "golden_cup"
+ item_state = "" //nope :(
+ w_class = ITEMSIZE_LARGE
+ force = 14
+ throwforce = 10
+ amount_per_transfer_from_this = 20
+ possible_transfer_amounts = null
+ volume = 150
+ flags = CONDUCT | OPENCONTAINER
+
+/obj/item/weapon/reagent_containers/food/drinks/golden_cup/on_reagent_change()
+ ..()
+
+///////////////////////////////////////////////Drinks
+//Notes by Darem: Drinks are simply containers that start preloaded. Unlike condiments, the contents can be ingested directly
+// rather then having to add it to something else first. They should only contain liquids. They have a default container size of 50.
+// Formatting is the same as food.
+
+/obj/item/weapon/reagent_containers/food/drinks/milk
+ name = "milk carton"
+ desc = "It's milk. White and nutritious goodness!"
+ icon_state = "milk"
+ item_state = "carton"
+ center_of_mass = list("x"=16, "y"=9)
+
+/obj/item/weapon/reagent_containers/food/drinks/milk/New()
+ ..()
+ reagents.add_reagent("milk", 50)
+
+/obj/item/weapon/reagent_containers/food/drinks/soymilk
+ name = "soymilk carton"
+ desc = "It's soy milk. White and nutritious goodness!"
+ icon_state = "soymilk"
+ item_state = "carton"
+ center_of_mass = list("x"=16, "y"=9)
+/obj/item/weapon/reagent_containers/food/drinks/soymilk/New()
+ ..()
+ reagents.add_reagent("soymilk", 50)
+
+/obj/item/weapon/reagent_containers/food/drinks/smallmilk
+ name = "small milk carton"
+ desc = "It's milk. White and nutritious goodness!"
+ volume = 30
+ icon_state = "mini-milk"
+ item_state = "carton"
+ center_of_mass = list("x"=16, "y"=9)
+/obj/item/weapon/reagent_containers/food/drinks/smallmilk/New()
+ ..()
+ reagents.add_reagent("milk", 30)
+
+/obj/item/weapon/reagent_containers/food/drinks/smallchocmilk
+ name = "small chocolate milk carton"
+ desc = "It's milk! This one is in delicious chocolate flavour."
+ volume = 30
+ icon_state = "mini-milk_choco"
+ item_state = "carton"
+ center_of_mass = list("x"=16, "y"=9)
+/obj/item/weapon/reagent_containers/food/drinks/smallchocmilk/New()
+ ..()
+ reagents.add_reagent("chocolate_milk", 30)
+
+/obj/item/weapon/reagent_containers/food/drinks/coffee
+ name = "\improper Robust Coffee"
+ desc = "Careful, the beverage you're about to enjoy is extremely hot."
+ icon_state = "coffee"
+ center_of_mass = list("x"=15, "y"=10)
+/obj/item/weapon/reagent_containers/food/drinks/coffee/New()
+ ..()
+ reagents.add_reagent("coffee", 30)
+
+/obj/item/weapon/reagent_containers/food/drinks/tea
+ name = "cup of Duke Purple Tea"
+ desc = "An insult to Duke Purple is an insult to the Space Queen! Any proper gentleman will fight you, if you sully this tea."
+ icon_state = "teacup"
+ item_state = "coffee"
+ center_of_mass = list("x"=16, "y"=14)
+
+/obj/item/weapon/reagent_containers/food/drinks/tea/New()
+ ..()
+ reagents.add_reagent("tea", 30)
+
+/obj/item/weapon/reagent_containers/food/drinks/ice
+ name = "cup of ice"
+ desc = "Careful, cold ice, do not chew."
+ icon_state = "coffee"
+ center_of_mass = list("x"=15, "y"=10)
+/obj/item/weapon/reagent_containers/food/drinks/ice/New()
+ ..()
+ reagents.add_reagent("ice", 30)
+
+/obj/item/weapon/reagent_containers/food/drinks/h_chocolate
+ name = "cup of Dutch hot coco"
+ desc = "Made in Space South America."
+ icon_state = "hot_coco"
+ item_state = "coffee"
+ center_of_mass = list("x"=15, "y"=13)
+
+/obj/item/weapon/reagent_containers/food/drinks/h_chocolate/New()
+ ..()
+ reagents.add_reagent("hot_coco", 30)
+
+/obj/item/weapon/reagent_containers/food/drinks/dry_ramen
+ name = "Cup Ramen"
+ desc = "Just add 10ml water, self heats! A taste that reminds you of your school years."
+ icon_state = "ramen"
+ center_of_mass = list("x"=16, "y"=11)
+/obj/item/weapon/reagent_containers/food/drinks/dry_ramen/New()
+ ..()
+ reagents.add_reagent("dry_ramen", 30)
+
+/obj/item/weapon/reagent_containers/food/drinks/sillycup
+ name = "paper cup"
+ desc = "A paper water cup."
+ icon_state = "water_cup_e"
+ possible_transfer_amounts = null
+ volume = 10
+ center_of_mass = list("x"=16, "y"=12)
+
+/obj/item/weapon/reagent_containers/food/drinks/sillycup/New()
+ ..()
+
+/obj/item/weapon/reagent_containers/food/drinks/sillycup/on_reagent_change()
+ ..()
+ if(reagents.total_volume)
+ icon_state = "water_cup"
+ else
+ icon_state = "water_cup_e"
+
+/obj/item/weapon/reagent_containers/food/drinks/sillycup/MouseDrop(obj/over_object as obj)
+ if(!reagents.total_volume && istype(over_object, /obj/structure/reagent_dispensers/water_cooler))
+ if(over_object.Adjacent(usr))
+ var/obj/structure/reagent_dispensers/water_cooler/W = over_object
+ if(W.cupholder && W.cups < 10)
+ W.cups++
+ usr << "You put the [src] in the cup dispenser."
+ qdel(src)
+ W.update_icon()
+ else
+ return ..()
+
+//////////////////////////drinkingglass and shaker//
+//Note by Darem: This code handles the mixing of drinks. New drinks go in three places: In Chemistry-Reagents.dm (for the drink
+// itself), in Chemistry-Recipes.dm (for the reaction that changes the components into the drink), and here (for the drinking glass
+// icon states.
+
+/obj/item/weapon/reagent_containers/food/drinks/shaker
+ name = "shaker"
+ desc = "A metal shaker to mix drinks in."
+ icon_state = "shaker"
+ amount_per_transfer_from_this = 10
+ volume = 120
+ center_of_mass = list("x"=17, "y"=10)
+
+/obj/item/weapon/reagent_containers/food/drinks/shaker/on_reagent_change()
+ ..()
+
+/obj/item/weapon/reagent_containers/food/drinks/teapot
+ name = "teapot"
+ desc = "An elegant teapot. It simply oozes class."
+ icon_state = "teapot"
+ item_state = "teapot"
+ amount_per_transfer_from_this = 10
+ volume = 120
+ center_of_mass = list("x"=17, "y"=7)
+
+/obj/item/weapon/reagent_containers/food/drinks/teapot/on_reagent_change()
+ ..()
+
+/obj/item/weapon/reagent_containers/food/drinks/flask
+ name = "\improper Colony Director's flask"
+ desc = "A metal flask belonging to the Colony Director"
+ icon_state = "flask"
+ volume = 60
+ center_of_mass = list("x"=17, "y"=7)
+
+/obj/item/weapon/reagent_containers/food/drinks/flask/on_reagent_change()
+ ..()
+
+/obj/item/weapon/reagent_containers/food/drinks/flask/shiny
+ name = "shiny flask"
+ desc = "A shiny metal flask. It appears to have a Greek symbol inscribed on it."
+ icon_state = "shinyflask"
+
+/obj/item/weapon/reagent_containers/food/drinks/flask/lithium
+ name = "lithium flask"
+ desc = "A flask with a Lithium Atom symbol on it."
+ icon_state = "lithiumflask"
+
+/obj/item/weapon/reagent_containers/food/drinks/flask/detflask
+ name = "\improper Detective's flask"
+ desc = "A metal flask with a leather band and golden badge belonging to the detective."
+ icon_state = "detflask"
+ volume = 60
+ center_of_mass = list("x"=17, "y"=8)
+
+/obj/item/weapon/reagent_containers/food/drinks/flask/barflask
+ name = "flask"
+ desc = "For those who can't be bothered to hang out at the bar to drink."
+ icon_state = "barflask"
+ volume = 60
+ center_of_mass = list("x"=17, "y"=7)
+
+/obj/item/weapon/reagent_containers/food/drinks/flask/vacuumflask
+ name = "vacuum flask"
+ desc = "Keeping your drinks at the perfect temperature since 1892."
+ icon_state = "vacuumflask"
+ volume = 60
+ center_of_mass = list("x"=15, "y"=4)
+
+/obj/item/weapon/reagent_containers/food/drinks/britcup
+ name = "cup"
+ desc = "A cup with the British flag emblazoned on it."
+ icon_state = "britcup"
+ volume = 30
+ center_of_mass = list("x"=15, "y"=13)
+
+/obj/item/weapon/reagent_containers/food/drinks/britcup/on_reagent_change()
+ ..()
+
diff --git a/code/modules/reagents/reagent_containers/food/drinks/bottle.dm b/code/modules/food/food/drinks/bottle.dm
similarity index 97%
rename from code/modules/reagents/reagent_containers/food/drinks/bottle.dm
rename to code/modules/food/food/drinks/bottle.dm
index 0a09b22fe9..d3b5e5bc66 100644
--- a/code/modules/reagents/reagent_containers/food/drinks/bottle.dm
+++ b/code/modules/food/food/drinks/bottle.dm
@@ -1,551 +1,551 @@
-///////////////////////////////////////////////Alchohol bottles! -Agouri //////////////////////////
-//Functionally identical to regular drinks. The only difference is that the default bottle size is 100. - Darem
-//Bottles now weaken and break when smashed on people's heads. - Giacom
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle
- amount_per_transfer_from_this = 10
- volume = 100
- item_state = "broken_beer" //Generic held-item sprite until unique ones are made.
- force = 6
- var/smash_duration = 5 //Directly relates to the 'weaken' duration. Lowered by armor (i.e. helmets)
- var/isGlass = 1 //Whether the 'bottle' is made of glass or not so that milk cartons dont shatter when someone gets hit by it
-
- var/obj/item/weapon/reagent_containers/glass/rag/rag = null
- var/rag_underlay = "rag"
- on_reagent_change() return // To suppress price updating. Bottles have their own price tags.
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/New()
- ..()
- if(isGlass) unacidable = 1
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/Destroy()
- if(rag)
- rag.forceMove(src.loc)
- rag = null
- return ..()
-
-//when thrown on impact, bottles smash and spill their contents
-/obj/item/weapon/reagent_containers/food/drinks/bottle/throw_impact(atom/hit_atom, var/speed)
- ..()
-
- var/mob/M = thrower
- if(isGlass && istype(M) && M.a_intent == I_HURT)
- var/throw_dist = get_dist(throw_source, loc)
- if(speed >= throw_speed && smash_check(throw_dist)) //not as reliable as smashing directly
- if(reagents)
- hit_atom.visible_message("The contents of \the [src] splash all over [hit_atom]!")
- reagents.splash(hit_atom, reagents.total_volume)
- src.smash(loc, hit_atom)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/proc/smash_check(var/distance)
- if(!isGlass || !smash_duration)
- return 0
-
- var/list/chance_table = list(100, 95, 90, 85, 75, 55, 35) //starting from distance 0
- var/idx = max(distance + 1, 1) //since list indices start at 1
- if(idx > chance_table.len)
- return 0
- return prob(chance_table[idx])
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/proc/smash(var/newloc, atom/against = null)
- if(ismob(loc))
- var/mob/M = loc
- M.drop_from_inventory(src)
-
- //Creates a shattering noise and replaces the bottle with a broken_bottle
- var/obj/item/weapon/broken_bottle/B = new /obj/item/weapon/broken_bottle(newloc)
- if(prob(33))
- new/obj/item/weapon/material/shard(newloc) // Create a glass shard at the target's location!
- B.icon_state = src.icon_state
-
- var/icon/I = new('icons/obj/drinks.dmi', src.icon_state)
- I.Blend(B.broken_outline, ICON_OVERLAY, rand(5), 1)
- I.SwapColor(rgb(255, 0, 220, 255), rgb(0, 0, 0, 0))
- B.icon = I
-
- if(rag && rag.on_fire && isliving(against))
- rag.forceMove(loc)
- var/mob/living/L = against
- L.IgniteMob()
-
- playsound(src, "shatter", 70, 1)
- src.transfer_fingerprints_to(B)
-
- qdel(src)
- return B
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/verb/smash_bottle()
- set name = "Smash Bottle"
- set category = "Object"
-
- var/list/things_to_smash_on = list()
- for(var/atom/A in range (1, usr))
- if(A.density && usr.Adjacent(A) && !istype(A, /mob))
- things_to_smash_on += A
-
- var/atom/choice = input("Select what you want to smash the bottle on.") as null|anything in things_to_smash_on
- if(!choice)
- return
- if(!(choice.density && usr.Adjacent(choice)))
- usr << "You must stay close to your target! You moved away from \the [choice]"
- return
-
- usr.put_in_hands(src.smash(usr.loc, choice))
- usr.visible_message("\The [usr] smashed \the [src] on \the [choice]!")
- usr << "You smash \the [src] on \the [choice]!"
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/attackby(obj/item/W, mob/user)
- if(!rag && istype(W, /obj/item/weapon/reagent_containers/glass/rag))
- insert_rag(W, user)
- return
- if(rag && istype(W, /obj/item/weapon/flame))
- rag.attackby(W, user)
- return
- ..()
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/attack_self(mob/user)
- if(rag)
- remove_rag(user)
- else
- ..()
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/proc/insert_rag(obj/item/weapon/reagent_containers/glass/rag/R, mob/user)
- if(!isGlass || rag) return
- if(user.unEquip(R))
- user << "You stuff [R] into [src]."
- rag = R
- rag.forceMove(src)
- flags &= ~OPENCONTAINER
- update_icon()
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/proc/remove_rag(mob/user)
- if(!rag) return
- user.put_in_hands(rag)
- rag = null
- flags |= (initial(flags) & OPENCONTAINER)
- update_icon()
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/open(mob/user)
- if(rag) return
- ..()
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/update_icon()
- underlays.Cut()
- if(rag)
- var/underlay_image = image(icon='icons/obj/drinks.dmi', icon_state=rag.on_fire? "[rag_underlay]_lit" : rag_underlay)
- underlays += underlay_image
- set_light(rag.light_range, rag.light_power, rag.light_color)
- else
- set_light(0)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone)
- var/blocked = ..()
-
- if(user.a_intent != I_HURT)
- return
- if(!smash_check(1))
- return //won't always break on the first hit
-
- // You are going to knock someone out for longer if they are not wearing a helmet.
- var/weaken_duration = 0
- if(blocked < 100)
- weaken_duration = smash_duration + min(0, force - target.getarmor(hit_zone, "melee") + 10)
-
- if(hit_zone == "head" && istype(target, /mob/living/carbon/))
- user.visible_message("\The [user] smashes [src] over [target]'s head!")
- if(weaken_duration)
- target.apply_effect(min(weaken_duration, 5), WEAKEN, blocked) // Never weaken more than a flash!
- else
- user.visible_message("\The [user] smashes [src] into [target]!")
-
- //The reagents in the bottle splash all over the target, thanks for the idea Nodrak
- if(reagents)
- user.visible_message("The contents of \the [src] splash all over [target]!")
- reagents.splash(target, reagents.total_volume)
-
- //Finally, smash the bottle. This kills (qdel) the bottle.
- var/obj/item/weapon/broken_bottle/B = smash(target.loc, target)
- user.put_in_active_hand(B)
-
-//Keeping this here for now, I'll ask if I should keep it here.
-/obj/item/weapon/broken_bottle
- name = "Broken Bottle"
- desc = "A bottle with a sharp broken bottom."
- icon = 'icons/obj/drinks.dmi'
- icon_state = "broken_bottle"
- force = 10
- throwforce = 5
- throw_speed = 3
- throw_range = 5
- item_state = "beer"
- attack_verb = list("stabbed", "slashed", "attacked")
- sharp = 1
- edge = 0
- var/icon/broken_outline = icon('icons/obj/drinks.dmi', "broken")
-
-/obj/item/weapon/broken_bottle/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
- playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1)
- return ..()
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/gin
- name = "Griffeater Gin"
- desc = "A bottle of high quality gin, produced in Alpha Centauri."
- icon_state = "ginbottle"
- center_of_mass = list("x"=16, "y"=4)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/gin/New()
- ..()
- reagents.add_reagent("gin", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey
- name = "Uncle Git's Special Reserve"
- desc = "A premium single-malt whiskey, gently matured inside the tunnels of a nuclear shelter."
- icon_state = "whiskeybottle"
- center_of_mass = list("x"=16, "y"=3)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey/New()
- ..()
- reagents.add_reagent("whiskey", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/specialwhiskey
- name = "Special Blend Whiskey"
- desc = "Just when you thought regular station whiskey was good... This silky, amber goodness has to come along and ruin everything."
- icon_state = "whiskeybottle2"
- center_of_mass = list("x"=16, "y"=3)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/specialwhiskey/New()
- ..()
- reagents.add_reagent("specialwhiskey", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka
- name = "Tunguska Triple Distilled"
- desc = "Aah, vodka. Prime choice of drink and fuel by Russians worldwide."
- icon_state = "vodkabottle"
- center_of_mass = list("x"=17, "y"=3)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka/New()
- ..()
- reagents.add_reagent("vodka", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/tequilla
- name = "Caccavo Guaranteed Quality Tequilla"
- desc = "Made from premium petroleum distillates, pure thalidomide and other fine quality ingredients!"
- icon_state = "tequillabottle"
- center_of_mass = list("x"=16, "y"=3)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/tequilla/New()
- ..()
- reagents.add_reagent("tequilla", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing
- name = "Bottle of Nothing"
- desc = "A bottle filled with nothing"
- icon_state = "bottleofnothing"
- center_of_mass = list("x"=17, "y"=5)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing/New()
- ..()
- reagents.add_reagent("nothing", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/patron
- name = "Wrapp Artiste Patron"
- desc = "Silver laced tequilla, served in space night clubs across the galaxy."
- icon_state = "patronbottle"
- center_of_mass = list("x"=16, "y"=6)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/patron/New()
- ..()
- reagents.add_reagent("patron", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/rum
- name = "Captain Pete's Cuban Spiced Rum"
- desc = "This isn't just rum, oh no. It's practically Cuba in a bottle."
- icon_state = "rumbottle"
- center_of_mass = list("x"=16, "y"=8)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/rum/New()
- ..()
- reagents.add_reagent("rum", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater
- name = "Flask of Holy Water"
- desc = "A flask of the chaplain's holy water."
- icon_state = "holyflask"
- center_of_mass = list("x"=17, "y"=10)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater/New()
- ..()
- reagents.add_reagent("holywater", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/vermouth
- name = "Goldeneye Vermouth"
- desc = "Sweet, sweet dryness~"
- icon_state = "vermouthbottle"
- center_of_mass = list("x"=17, "y"=3)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/vermouth/New()
- ..()
- reagents.add_reagent("vermouth", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/kahlua
- name = "Robert Robust's Coffee Liqueur"
- desc = "A widely known, Mexican coffee-flavoured liqueur. In production since 1936."
- icon_state = "kahluabottle"
- center_of_mass = list("x"=17, "y"=3)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/kahlua/New()
- ..()
- reagents.add_reagent("kahlua", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/goldschlager
- name = "College Girl Goldschlager"
- desc = "Because they are the only ones who will drink 100 proof cinnamon schnapps."
- icon_state = "goldschlagerbottle"
- center_of_mass = list("x"=15, "y"=3)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/goldschlager/New()
- ..()
- reagents.add_reagent("goldschlager", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/cognac
- name = "Chateau De Baton Premium Cognac"
- desc = "A sweet and strongly alchoholic drink, made after numerous distillations and years of maturing."
- icon_state = "cognacbottle"
- center_of_mass = list("x"=16, "y"=6)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/cognac/New()
- ..()
- reagents.add_reagent("cognac", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/wine
- name = "Doublebeard Bearded Special Wine"
- desc = "Cheap cooking wine pretending to be drinkable."
- icon_state = "winebottle"
- center_of_mass = list("x"=16, "y"=4)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/wine/New()
- ..()
- reagents.add_reagent("wine", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe
- name = "Jailbreaker Verte"
- desc = "One sip of this and you just know you're gonna have a good time."
- icon_state = "absinthebottle"
- center_of_mass = list("x"=16, "y"=6)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe/New()
- ..()
- reagents.add_reagent("absinthe", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/melonliquor
- name = "Emeraldine Melon Liquor"
- desc = "A bottle of 46 proof Emeraldine Melon Liquor. Sweet and light."
- icon_state = "alco-green" //Placeholder.
- center_of_mass = list("x"=16, "y"=6)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/melonliquor/New()
- ..()
- reagents.add_reagent("melonliquor", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/bluecuracao
- name = "Miss Blue Curacao"
- desc = "A fruity, exceptionally azure drink. Does not allow the imbiber to use the fifth magic."
- icon_state = "alco-blue" //Placeholder.
- center_of_mass = list("x"=16, "y"=6)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/bluecuracao/New()
- ..()
- reagents.add_reagent("bluecuracao", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/grenadine
- name = "Briar Rose Grenadine Syrup"
- desc = "Sweet and tangy, a bar syrup used to add color or flavor to drinks."
- icon_state = "grenadinebottle"
- center_of_mass = list("x"=16, "y"=6)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/grenadine/New()
- ..()
- reagents.add_reagent("grenadine", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/cola
- name = "\improper Space Cola"
- desc = "Cola. in space"
- icon_state = "colabottle"
- center_of_mass = list("x"=16, "y"=6)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/cola/New()
- ..()
- reagents.add_reagent("cola", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/space_up
- name = "\improper Space-Up"
- desc = "Tastes like a hull breach in your mouth."
- icon_state = "space-up_bottle"
- center_of_mass = list("x"=16, "y"=6)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/space_up/New()
- ..()
- reagents.add_reagent("space_up", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/space_mountain_wind
- name = "\improper Space Mountain Wind"
- desc = "Blows right through you like a space wind."
- icon_state = "space_mountain_wind_bottle"
- center_of_mass = list("x"=16, "y"=6)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/space_mountain_wind/New()
- ..()
- reagents.add_reagent("spacemountainwind", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/pwine
- name = "Warlock's Velvet"
- desc = "What a delightful packaging for a surely high quality wine! The vintage must be amazing!"
- icon_state = "pwinebottle"
- center_of_mass = list("x"=16, "y"=4)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/pwine/New()
- ..()
- reagents.add_reagent("pwine", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/redeemersbrew
- name = "Redeemer's Brew"
- desc = "Just opening the top of this bottle makes you feel a bit tipsy. Not for the faint of heart."
- icon_state = "redeemersbrew"
- center_of_mass = list("x"=16, "y"=3)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/redeemersbrew/New()
- ..()
- reagents.add_reagent("unathiliquor", 100)
-
-//////////////////////////JUICES AND STUFF ///////////////////////
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice
- name = "Orange Juice"
- desc = "Full of vitamins and deliciousness!"
- icon_state = "orangejuice"
- item_state = "carton"
- center_of_mass = list("x"=16, "y"=7)
- isGlass = 0
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice/New()
- ..()
- reagents.add_reagent("orangejuice", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/applejuice
- name = "Apple Juice"
- desc = "Squeezed, pressed and ground to perfection!"
- icon_state = "applejuice"
- item_state = "carton"
- center_of_mass = list("x"=16, "y"=7)
- isGlass = 0
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/applejuice/New()
- ..()
- reagents.add_reagent("applejuice", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/milk
- name = "Large Milk Carton"
- desc = "It's milk. This carton's large enough to serve your biggest milk drinkers."
- icon_state = "milk"
- item_state = "carton"
- center_of_mass = list("x"=16, "y"=9)
- isGlass = 0
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/milk/New()
- ..()
- reagents.add_reagent("milk", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/cream
- name = "Milk Cream"
- desc = "It's cream. Made from milk. What else did you think you'd find in there?"
- icon_state = "cream"
- item_state = "carton"
- center_of_mass = list("x"=16, "y"=8)
- isGlass = 0
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/cream/New()
- ..()
- reagents.add_reagent("cream", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/tomatojuice
- name = "Tomato Juice"
- desc = "Well, at least it LOOKS like tomato juice. You can't tell with all that redness."
- icon_state = "tomatojuice"
- item_state = "carton"
- center_of_mass = list("x"=16, "y"=8)
- isGlass = 0
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/tomatojuice/New()
- ..()
- reagents.add_reagent("tomatojuice", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/limejuice
- name = "Lime Juice"
- desc = "Sweet-sour goodness."
- icon_state = "limejuice"
- item_state = "carton"
- center_of_mass = list("x"=16, "y"=8)
- isGlass = 0
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/limejuice/New()
- ..()
- reagents.add_reagent("limejuice", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/lemonjuice
- name = "Lemon Juice"
- desc = "Sweet-sour goodness. Minus the sweet."
- icon_state = "lemonjuice"
- item_state = "carton"
- center_of_mass = list("x"=16, "y"=8)
- isGlass = 0
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/lemonjuice/New()
- ..()
- reagents.add_reagent("lemonjuice", 100)
-
-//Small bottles
-/obj/item/weapon/reagent_containers/food/drinks/bottle/small
- volume = 50
- smash_duration = 1
- flags = 0 //starts closed
- rag_underlay = "rag_small"
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer
- name = "space beer"
- desc = "Contains only water, malt and hops."
- icon_state = "beer"
- center_of_mass = list("x"=16, "y"=12)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/New()
- ..()
- reagents.add_reagent("beer", 30)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/small/ale
- name = "\improper Magm-Ale"
- desc = "A true dorf's drink of choice."
- icon_state = "alebottle"
- item_state = "beer"
- center_of_mass = list("x"=16, "y"=10)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/small/ale/New()
- ..()
- reagents.add_reagent("ale", 30)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/sake
- name = "Mono-No-Aware Luxury Sake"
- desc = "Dry alcohol made from rice, a favorite of businessmen."
- icon_state = "sakebottle"
- center_of_mass = list("x"=16, "y"=3)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/sake/New()
- ..()
- reagents.add_reagent("sake", 100)
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/champagne
- name = "Gilthari Luxury Champagne"
- desc = "For those special occassions."
- icon_state = "champagne"
-
-/obj/item/weapon/reagent_containers/food/drinks/bottle/champagne/New()
- ..()
+///////////////////////////////////////////////Alchohol bottles! -Agouri //////////////////////////
+//Functionally identical to regular drinks. The only difference is that the default bottle size is 100. - Darem
+//Bottles now weaken and break when smashed on people's heads. - Giacom
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle
+ amount_per_transfer_from_this = 10
+ volume = 100
+ item_state = "broken_beer" //Generic held-item sprite until unique ones are made.
+ force = 6
+ var/smash_duration = 5 //Directly relates to the 'weaken' duration. Lowered by armor (i.e. helmets)
+ var/isGlass = 1 //Whether the 'bottle' is made of glass or not so that milk cartons dont shatter when someone gets hit by it
+
+ var/obj/item/weapon/reagent_containers/glass/rag/rag = null
+ var/rag_underlay = "rag"
+ on_reagent_change() return // To suppress price updating. Bottles have their own price tags.
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/New()
+ ..()
+ if(isGlass) unacidable = 1
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/Destroy()
+ if(rag)
+ rag.forceMove(src.loc)
+ rag = null
+ return ..()
+
+//when thrown on impact, bottles smash and spill their contents
+/obj/item/weapon/reagent_containers/food/drinks/bottle/throw_impact(atom/hit_atom, var/speed)
+ ..()
+
+ var/mob/M = thrower
+ if(isGlass && istype(M) && M.a_intent == I_HURT)
+ var/throw_dist = get_dist(throw_source, loc)
+ if(speed >= throw_speed && smash_check(throw_dist)) //not as reliable as smashing directly
+ if(reagents)
+ hit_atom.visible_message("The contents of \the [src] splash all over [hit_atom]!")
+ reagents.splash(hit_atom, reagents.total_volume)
+ src.smash(loc, hit_atom)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/proc/smash_check(var/distance)
+ if(!isGlass || !smash_duration)
+ return 0
+
+ var/list/chance_table = list(100, 95, 90, 85, 75, 55, 35) //starting from distance 0
+ var/idx = max(distance + 1, 1) //since list indices start at 1
+ if(idx > chance_table.len)
+ return 0
+ return prob(chance_table[idx])
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/proc/smash(var/newloc, atom/against = null)
+ if(ismob(loc))
+ var/mob/M = loc
+ M.drop_from_inventory(src)
+
+ //Creates a shattering noise and replaces the bottle with a broken_bottle
+ var/obj/item/weapon/broken_bottle/B = new /obj/item/weapon/broken_bottle(newloc)
+ if(prob(33))
+ new/obj/item/weapon/material/shard(newloc) // Create a glass shard at the target's location!
+ B.icon_state = src.icon_state
+
+ var/icon/I = new('icons/obj/drinks.dmi', src.icon_state)
+ I.Blend(B.broken_outline, ICON_OVERLAY, rand(5), 1)
+ I.SwapColor(rgb(255, 0, 220, 255), rgb(0, 0, 0, 0))
+ B.icon = I
+
+ if(rag && rag.on_fire && isliving(against))
+ rag.forceMove(loc)
+ var/mob/living/L = against
+ L.IgniteMob()
+
+ playsound(src, "shatter", 70, 1)
+ src.transfer_fingerprints_to(B)
+
+ qdel(src)
+ return B
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/verb/smash_bottle()
+ set name = "Smash Bottle"
+ set category = "Object"
+
+ var/list/things_to_smash_on = list()
+ for(var/atom/A in range (1, usr))
+ if(A.density && usr.Adjacent(A) && !istype(A, /mob))
+ things_to_smash_on += A
+
+ var/atom/choice = input("Select what you want to smash the bottle on.") as null|anything in things_to_smash_on
+ if(!choice)
+ return
+ if(!(choice.density && usr.Adjacent(choice)))
+ usr << "You must stay close to your target! You moved away from \the [choice]"
+ return
+
+ usr.put_in_hands(src.smash(usr.loc, choice))
+ usr.visible_message("\The [usr] smashed \the [src] on \the [choice]!")
+ usr << "You smash \the [src] on \the [choice]!"
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/attackby(obj/item/W, mob/user)
+ if(!rag && istype(W, /obj/item/weapon/reagent_containers/glass/rag))
+ insert_rag(W, user)
+ return
+ if(rag && istype(W, /obj/item/weapon/flame))
+ rag.attackby(W, user)
+ return
+ ..()
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/attack_self(mob/user)
+ if(rag)
+ remove_rag(user)
+ else
+ ..()
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/proc/insert_rag(obj/item/weapon/reagent_containers/glass/rag/R, mob/user)
+ if(!isGlass || rag) return
+ if(user.unEquip(R))
+ user << "You stuff [R] into [src]."
+ rag = R
+ rag.forceMove(src)
+ flags &= ~OPENCONTAINER
+ update_icon()
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/proc/remove_rag(mob/user)
+ if(!rag) return
+ user.put_in_hands(rag)
+ rag = null
+ flags |= (initial(flags) & OPENCONTAINER)
+ update_icon()
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/open(mob/user)
+ if(rag) return
+ ..()
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/update_icon()
+ underlays.Cut()
+ if(rag)
+ var/underlay_image = image(icon='icons/obj/drinks.dmi', icon_state=rag.on_fire? "[rag_underlay]_lit" : rag_underlay)
+ underlays += underlay_image
+ set_light(rag.light_range, rag.light_power, rag.light_color)
+ else
+ set_light(0)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone)
+ var/blocked = ..()
+
+ if(user.a_intent != I_HURT)
+ return
+ if(!smash_check(1))
+ return //won't always break on the first hit
+
+ // You are going to knock someone out for longer if they are not wearing a helmet.
+ var/weaken_duration = 0
+ if(blocked < 100)
+ weaken_duration = smash_duration + min(0, force - target.getarmor(hit_zone, "melee") + 10)
+
+ if(hit_zone == "head" && istype(target, /mob/living/carbon/))
+ user.visible_message("\The [user] smashes [src] over [target]'s head!")
+ if(weaken_duration)
+ target.apply_effect(min(weaken_duration, 5), WEAKEN, blocked) // Never weaken more than a flash!
+ else
+ user.visible_message("\The [user] smashes [src] into [target]!")
+
+ //The reagents in the bottle splash all over the target, thanks for the idea Nodrak
+ if(reagents)
+ user.visible_message("The contents of \the [src] splash all over [target]!")
+ reagents.splash(target, reagents.total_volume)
+
+ //Finally, smash the bottle. This kills (qdel) the bottle.
+ var/obj/item/weapon/broken_bottle/B = smash(target.loc, target)
+ user.put_in_active_hand(B)
+
+//Keeping this here for now, I'll ask if I should keep it here.
+/obj/item/weapon/broken_bottle
+ name = "Broken Bottle"
+ desc = "A bottle with a sharp broken bottom."
+ icon = 'icons/obj/drinks.dmi'
+ icon_state = "broken_bottle"
+ force = 10
+ throwforce = 5
+ throw_speed = 3
+ throw_range = 5
+ item_state = "beer"
+ attack_verb = list("stabbed", "slashed", "attacked")
+ sharp = 1
+ edge = 0
+ var/icon/broken_outline = icon('icons/obj/drinks.dmi', "broken")
+
+/obj/item/weapon/broken_bottle/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
+ playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1)
+ return ..()
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/gin
+ name = "Griffeater Gin"
+ desc = "A bottle of high quality gin, produced in Alpha Centauri."
+ icon_state = "ginbottle"
+ center_of_mass = list("x"=16, "y"=4)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/gin/New()
+ ..()
+ reagents.add_reagent("gin", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey
+ name = "Uncle Git's Special Reserve"
+ desc = "A premium single-malt whiskey, gently matured inside the tunnels of a nuclear shelter."
+ icon_state = "whiskeybottle"
+ center_of_mass = list("x"=16, "y"=3)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey/New()
+ ..()
+ reagents.add_reagent("whiskey", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/specialwhiskey
+ name = "Special Blend Whiskey"
+ desc = "Just when you thought regular station whiskey was good... This silky, amber goodness has to come along and ruin everything."
+ icon_state = "whiskeybottle2"
+ center_of_mass = list("x"=16, "y"=3)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/specialwhiskey/New()
+ ..()
+ reagents.add_reagent("specialwhiskey", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka
+ name = "Tunguska Triple Distilled"
+ desc = "Aah, vodka. Prime choice of drink and fuel by Russians worldwide."
+ icon_state = "vodkabottle"
+ center_of_mass = list("x"=17, "y"=3)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka/New()
+ ..()
+ reagents.add_reagent("vodka", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/tequilla
+ name = "Caccavo Guaranteed Quality Tequilla"
+ desc = "Made from premium petroleum distillates, pure thalidomide and other fine quality ingredients!"
+ icon_state = "tequillabottle"
+ center_of_mass = list("x"=16, "y"=3)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/tequilla/New()
+ ..()
+ reagents.add_reagent("tequilla", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing
+ name = "Bottle of Nothing"
+ desc = "A bottle filled with nothing"
+ icon_state = "bottleofnothing"
+ center_of_mass = list("x"=17, "y"=5)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing/New()
+ ..()
+ reagents.add_reagent("nothing", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/patron
+ name = "Wrapp Artiste Patron"
+ desc = "Silver laced tequilla, served in space night clubs across the galaxy."
+ icon_state = "patronbottle"
+ center_of_mass = list("x"=16, "y"=6)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/patron/New()
+ ..()
+ reagents.add_reagent("patron", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/rum
+ name = "Captain Pete's Cuban Spiced Rum"
+ desc = "This isn't just rum, oh no. It's practically Cuba in a bottle."
+ icon_state = "rumbottle"
+ center_of_mass = list("x"=16, "y"=8)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/rum/New()
+ ..()
+ reagents.add_reagent("rum", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater
+ name = "Flask of Holy Water"
+ desc = "A flask of the chaplain's holy water."
+ icon_state = "holyflask"
+ center_of_mass = list("x"=17, "y"=10)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater/New()
+ ..()
+ reagents.add_reagent("holywater", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/vermouth
+ name = "Goldeneye Vermouth"
+ desc = "Sweet, sweet dryness~"
+ icon_state = "vermouthbottle"
+ center_of_mass = list("x"=17, "y"=3)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/vermouth/New()
+ ..()
+ reagents.add_reagent("vermouth", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/kahlua
+ name = "Robert Robust's Coffee Liqueur"
+ desc = "A widely known, Mexican coffee-flavoured liqueur. In production since 1936."
+ icon_state = "kahluabottle"
+ center_of_mass = list("x"=17, "y"=3)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/kahlua/New()
+ ..()
+ reagents.add_reagent("kahlua", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/goldschlager
+ name = "College Girl Goldschlager"
+ desc = "Because they are the only ones who will drink 100 proof cinnamon schnapps."
+ icon_state = "goldschlagerbottle"
+ center_of_mass = list("x"=15, "y"=3)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/goldschlager/New()
+ ..()
+ reagents.add_reagent("goldschlager", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/cognac
+ name = "Chateau De Baton Premium Cognac"
+ desc = "A sweet and strongly alchoholic drink, made after numerous distillations and years of maturing."
+ icon_state = "cognacbottle"
+ center_of_mass = list("x"=16, "y"=6)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/cognac/New()
+ ..()
+ reagents.add_reagent("cognac", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/wine
+ name = "Doublebeard Bearded Special Wine"
+ desc = "Cheap cooking wine pretending to be drinkable."
+ icon_state = "winebottle"
+ center_of_mass = list("x"=16, "y"=4)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/wine/New()
+ ..()
+ reagents.add_reagent("wine", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe
+ name = "Jailbreaker Verte"
+ desc = "One sip of this and you just know you're gonna have a good time."
+ icon_state = "absinthebottle"
+ center_of_mass = list("x"=16, "y"=6)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe/New()
+ ..()
+ reagents.add_reagent("absinthe", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/melonliquor
+ name = "Emeraldine Melon Liquor"
+ desc = "A bottle of 46 proof Emeraldine Melon Liquor. Sweet and light."
+ icon_state = "alco-green" //Placeholder.
+ center_of_mass = list("x"=16, "y"=6)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/melonliquor/New()
+ ..()
+ reagents.add_reagent("melonliquor", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/bluecuracao
+ name = "Miss Blue Curacao"
+ desc = "A fruity, exceptionally azure drink. Does not allow the imbiber to use the fifth magic."
+ icon_state = "alco-blue" //Placeholder.
+ center_of_mass = list("x"=16, "y"=6)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/bluecuracao/New()
+ ..()
+ reagents.add_reagent("bluecuracao", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/grenadine
+ name = "Briar Rose Grenadine Syrup"
+ desc = "Sweet and tangy, a bar syrup used to add color or flavor to drinks."
+ icon_state = "grenadinebottle"
+ center_of_mass = list("x"=16, "y"=6)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/grenadine/New()
+ ..()
+ reagents.add_reagent("grenadine", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/cola
+ name = "\improper Space Cola"
+ desc = "Cola. in space"
+ icon_state = "colabottle"
+ center_of_mass = list("x"=16, "y"=6)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/cola/New()
+ ..()
+ reagents.add_reagent("cola", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/space_up
+ name = "\improper Space-Up"
+ desc = "Tastes like a hull breach in your mouth."
+ icon_state = "space-up_bottle"
+ center_of_mass = list("x"=16, "y"=6)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/space_up/New()
+ ..()
+ reagents.add_reagent("space_up", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/space_mountain_wind
+ name = "\improper Space Mountain Wind"
+ desc = "Blows right through you like a space wind."
+ icon_state = "space_mountain_wind_bottle"
+ center_of_mass = list("x"=16, "y"=6)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/space_mountain_wind/New()
+ ..()
+ reagents.add_reagent("spacemountainwind", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/pwine
+ name = "Warlock's Velvet"
+ desc = "What a delightful packaging for a surely high quality wine! The vintage must be amazing!"
+ icon_state = "pwinebottle"
+ center_of_mass = list("x"=16, "y"=4)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/pwine/New()
+ ..()
+ reagents.add_reagent("pwine", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/redeemersbrew
+ name = "Redeemer's Brew"
+ desc = "Just opening the top of this bottle makes you feel a bit tipsy. Not for the faint of heart."
+ icon_state = "redeemersbrew"
+ center_of_mass = list("x"=16, "y"=3)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/redeemersbrew/New()
+ ..()
+ reagents.add_reagent("unathiliquor", 100)
+
+//////////////////////////JUICES AND STUFF ///////////////////////
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice
+ name = "Orange Juice"
+ desc = "Full of vitamins and deliciousness!"
+ icon_state = "orangejuice"
+ item_state = "carton"
+ center_of_mass = list("x"=16, "y"=7)
+ isGlass = 0
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice/New()
+ ..()
+ reagents.add_reagent("orangejuice", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/applejuice
+ name = "Apple Juice"
+ desc = "Squeezed, pressed and ground to perfection!"
+ icon_state = "applejuice"
+ item_state = "carton"
+ center_of_mass = list("x"=16, "y"=7)
+ isGlass = 0
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/applejuice/New()
+ ..()
+ reagents.add_reagent("applejuice", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/milk
+ name = "Large Milk Carton"
+ desc = "It's milk. This carton's large enough to serve your biggest milk drinkers."
+ icon_state = "milk"
+ item_state = "carton"
+ center_of_mass = list("x"=16, "y"=9)
+ isGlass = 0
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/milk/New()
+ ..()
+ reagents.add_reagent("milk", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/cream
+ name = "Milk Cream"
+ desc = "It's cream. Made from milk. What else did you think you'd find in there?"
+ icon_state = "cream"
+ item_state = "carton"
+ center_of_mass = list("x"=16, "y"=8)
+ isGlass = 0
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/cream/New()
+ ..()
+ reagents.add_reagent("cream", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/tomatojuice
+ name = "Tomato Juice"
+ desc = "Well, at least it LOOKS like tomato juice. You can't tell with all that redness."
+ icon_state = "tomatojuice"
+ item_state = "carton"
+ center_of_mass = list("x"=16, "y"=8)
+ isGlass = 0
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/tomatojuice/New()
+ ..()
+ reagents.add_reagent("tomatojuice", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/limejuice
+ name = "Lime Juice"
+ desc = "Sweet-sour goodness."
+ icon_state = "limejuice"
+ item_state = "carton"
+ center_of_mass = list("x"=16, "y"=8)
+ isGlass = 0
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/limejuice/New()
+ ..()
+ reagents.add_reagent("limejuice", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/lemonjuice
+ name = "Lemon Juice"
+ desc = "Sweet-sour goodness. Minus the sweet."
+ icon_state = "lemonjuice"
+ item_state = "carton"
+ center_of_mass = list("x"=16, "y"=8)
+ isGlass = 0
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/lemonjuice/New()
+ ..()
+ reagents.add_reagent("lemonjuice", 100)
+
+//Small bottles
+/obj/item/weapon/reagent_containers/food/drinks/bottle/small
+ volume = 50
+ smash_duration = 1
+ flags = 0 //starts closed
+ rag_underlay = "rag_small"
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer
+ name = "space beer"
+ desc = "Contains only water, malt and hops."
+ icon_state = "beer"
+ center_of_mass = list("x"=16, "y"=12)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer/New()
+ ..()
+ reagents.add_reagent("beer", 30)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/small/ale
+ name = "\improper Magm-Ale"
+ desc = "A true dorf's drink of choice."
+ icon_state = "alebottle"
+ item_state = "beer"
+ center_of_mass = list("x"=16, "y"=10)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/small/ale/New()
+ ..()
+ reagents.add_reagent("ale", 30)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/sake
+ name = "Mono-No-Aware Luxury Sake"
+ desc = "Dry alcohol made from rice, a favorite of businessmen."
+ icon_state = "sakebottle"
+ center_of_mass = list("x"=16, "y"=3)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/sake/New()
+ ..()
+ reagents.add_reagent("sake", 100)
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/champagne
+ name = "Gilthari Luxury Champagne"
+ desc = "For those special occassions."
+ icon_state = "champagne"
+
+/obj/item/weapon/reagent_containers/food/drinks/bottle/champagne/New()
+ ..()
reagents.add_reagent("champagne", 100)
\ No newline at end of file
diff --git a/code/modules/reagents/reagent_containers/food/drinks/bottle/robot.dm b/code/modules/food/food/drinks/bottle/robot.dm
similarity index 100%
rename from code/modules/reagents/reagent_containers/food/drinks/bottle/robot.dm
rename to code/modules/food/food/drinks/bottle/robot.dm
diff --git a/code/modules/reagents/reagent_containers/food/drinks/cup.dm b/code/modules/food/food/drinks/cup.dm
similarity index 100%
rename from code/modules/reagents/reagent_containers/food/drinks/cup.dm
rename to code/modules/food/food/drinks/cup.dm
diff --git a/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm b/code/modules/food/food/drinks/drinkingglass.dm
similarity index 96%
rename from code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm
rename to code/modules/food/food/drinks/drinkingglass.dm
index b10feb2b59..b8183fd1fc 100644
--- a/code/modules/reagents/reagent_containers/food/drinks/drinkingglass.dm
+++ b/code/modules/food/food/drinks/drinkingglass.dm
@@ -1,178 +1,178 @@
-
-
-/obj/item/weapon/reagent_containers/food/drinks/drinkingglass
- name = "glass"
- desc = "Your standard drinking glass."
- icon_state = "glass_empty"
- amount_per_transfer_from_this = 5
- volume = 30
- unacidable = 1 //glass
- center_of_mass = list("x"=16, "y"=10)
- matter = list("glass" = 500)
-
- on_reagent_change()
- /*if(reagents.reagent_list.len > 1 )
- icon_state = "glass_brown"
- name = "Glass of Hooch"
- desc = "Two or more drinks, mixed together."*/
- /*else if(reagents.reagent_list.len == 1)
- for(var/datum/reagent/R in reagents.reagent_list)
- switch(R.id)*/
- if (reagents.reagent_list.len > 0)
- var/datum/reagent/R = reagents.get_master_reagent()
-
- if(R.glass_icon_state)
- icon_state = R.glass_icon_state
- else
- icon_state = "glass_brown"
-
- if(R.glass_name)
- name = R.glass_name
- else
- name = "Glass of.. what?"
-
- if(R.glass_desc)
- desc = R.glass_desc
- else
- desc = "You can't really tell what this is."
-
- if(R.glass_center_of_mass)
- center_of_mass = R.glass_center_of_mass
- else
- center_of_mass = list("x"=16, "y"=10)
-
- if(R.price_tag)
- price_tag = R.price_tag
- else
- price_tag = null
- else
- icon_state = "glass_empty"
- name = "glass"
- desc = "Your standard drinking glass."
- center_of_mass = list("x"=16, "y"=10)
- return
-
-/obj/item/weapon/reagent_containers/food/drinks/cup
- name = "coffee cup"
- desc = "The container of oriental luxuries."
- icon_state = "cup_empty"
- amount_per_transfer_from_this = 5
- volume = 30
- center_of_mass = list("x"=16, "y"=16)
-
- on_reagent_change()
- if (reagents.reagent_list.len > 0)
- var/datum/reagent/R = reagents.get_master_reagent()
-
- if(R.cup_icon_state)
- icon_state = R.cup_icon_state
- else
- icon_state = "cup_brown"
-
- if(R.cup_name)
- name = R.cup_name
- else
- name = "Cup of.. what?"
-
- if(R.cup_desc)
- desc = R.cup_desc
- else
- desc = "You can't really tell what this is."
-
- if(R.cup_center_of_mass)
- center_of_mass = R.cup_center_of_mass
- else
- center_of_mass = list("x"=16, "y"=16)
-
- if(R.price_tag)
- price_tag = R.price_tag
- else
- price_tag = null
-
- else
- icon_state = "cup_empty"
- name = "coffee cup"
- desc = "The container of oriental luxuries."
- center_of_mass = list("x"=16, "y"=16)
- return
-
-// for /obj/machinery/vending/sovietsoda
-/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/soda
- New()
- ..()
- reagents.add_reagent("sodawater", 50)
- on_reagent_change()
-
-/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/cola
- New()
- ..()
- reagents.add_reagent("cola", 50)
- on_reagent_change()
-
-/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass
- name = "shot glass"
- desc = "No glasses were shot in the making of this glass."
- icon_state = "shotglass"
- amount_per_transfer_from_this = 10
- volume = 10
- matter = list("glass" = 175)
-
-/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass/on_reagent_change()
- overlays.Cut()
-
- if(reagents.total_volume)
- var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]1")
-
- switch(reagents.total_volume)
- if(0 to 3) filling.icon_state = "[icon_state]1"
- if(4 to 7) filling.icon_state = "[icon_state]5"
- if(8 to INFINITY) filling.icon_state = "[icon_state]12"
-
- filling.color += reagents.get_color()
- overlays += filling
- name = "shot glass of " + reagents.get_master_reagent_name() //No matter what, the glass will tell you the reagent's name. Might be too abusable in the future.
- else
- name = "shot glass"
-
-/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask
- name = "fitness shaker"
- desc = "Big enough to contain enough protein to get perfectly swole. Don't mind the bits."
- icon_state = "fitness-cup_black"
- volume = 100
- matter = list("plastic" = 2000)
-
-/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/New()
- ..()
- icon_state = pick("fitness-cup_black", "fitness-cup_red", "fitness-cup_black")
-
-/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/on_reagent_change()
- overlays.Cut()
-
- if(reagents.total_volume)
- var/image/filling = image('icons/obj/reagentfillings.dmi', src, "fitness-cup10")
-
- switch(reagents.total_volume)
- if(0 to 10) filling.icon_state = "fitness-cup10"
- if(11 to 20) filling.icon_state = "fitness-cup20"
- if(21 to 29) filling.icon_state = "fitness-cup30"
- if(30 to 39) filling.icon_state = "fitness-cup40"
- if(40 to 49) filling.icon_state = "fitness-cup50"
- if(50 to 59) filling.icon_state = "fitness-cup60"
- if(60 to 69) filling.icon_state = "fitness-cup70"
- if(70 to 79) filling.icon_state = "fitness-cup80"
- if(80 to 89) filling.icon_state = "fitness-cup90"
- if(90 to INFINITY) filling.icon_state = "fitness-cup100"
-
- filling.color += reagents.get_color()
- overlays += filling
-
-/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/proteinshake
- name = "protein shake"
-
-/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/proteinshake/New()
- ..()
- reagents.add_reagent("nutriment", 30)
- reagents.add_reagent("iron", 10)
- reagents.add_reagent("protein", 15)
- reagents.add_reagent("water", 45)
+
+
+/obj/item/weapon/reagent_containers/food/drinks/drinkingglass
+ name = "glass"
+ desc = "Your standard drinking glass."
+ icon_state = "glass_empty"
+ amount_per_transfer_from_this = 5
+ volume = 30
+ unacidable = 1 //glass
+ center_of_mass = list("x"=16, "y"=10)
+ matter = list("glass" = 500)
+
+ on_reagent_change()
+ /*if(reagents.reagent_list.len > 1 )
+ icon_state = "glass_brown"
+ name = "Glass of Hooch"
+ desc = "Two or more drinks, mixed together."*/
+ /*else if(reagents.reagent_list.len == 1)
+ for(var/datum/reagent/R in reagents.reagent_list)
+ switch(R.id)*/
+ if (reagents.reagent_list.len > 0)
+ var/datum/reagent/R = reagents.get_master_reagent()
+
+ if(R.glass_icon_state)
+ icon_state = R.glass_icon_state
+ else
+ icon_state = "glass_brown"
+
+ if(R.glass_name)
+ name = R.glass_name
+ else
+ name = "Glass of.. what?"
+
+ if(R.glass_desc)
+ desc = R.glass_desc
+ else
+ desc = "You can't really tell what this is."
+
+ if(R.glass_center_of_mass)
+ center_of_mass = R.glass_center_of_mass
+ else
+ center_of_mass = list("x"=16, "y"=10)
+
+ if(R.price_tag)
+ price_tag = R.price_tag
+ else
+ price_tag = null
+ else
+ icon_state = "glass_empty"
+ name = "glass"
+ desc = "Your standard drinking glass."
+ center_of_mass = list("x"=16, "y"=10)
+ return
+
+/obj/item/weapon/reagent_containers/food/drinks/cup
+ name = "coffee cup"
+ desc = "The container of oriental luxuries."
+ icon_state = "cup_empty"
+ amount_per_transfer_from_this = 5
+ volume = 30
+ center_of_mass = list("x"=16, "y"=16)
+
+ on_reagent_change()
+ if (reagents.reagent_list.len > 0)
+ var/datum/reagent/R = reagents.get_master_reagent()
+
+ if(R.cup_icon_state)
+ icon_state = R.cup_icon_state
+ else
+ icon_state = "cup_brown"
+
+ if(R.cup_name)
+ name = R.cup_name
+ else
+ name = "Cup of.. what?"
+
+ if(R.cup_desc)
+ desc = R.cup_desc
+ else
+ desc = "You can't really tell what this is."
+
+ if(R.cup_center_of_mass)
+ center_of_mass = R.cup_center_of_mass
+ else
+ center_of_mass = list("x"=16, "y"=16)
+
+ if(R.price_tag)
+ price_tag = R.price_tag
+ else
+ price_tag = null
+
+ else
+ icon_state = "cup_empty"
+ name = "coffee cup"
+ desc = "The container of oriental luxuries."
+ center_of_mass = list("x"=16, "y"=16)
+ return
+
+// for /obj/machinery/vending/sovietsoda
+/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/soda
+ New()
+ ..()
+ reagents.add_reagent("sodawater", 50)
+ on_reagent_change()
+
+/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/cola
+ New()
+ ..()
+ reagents.add_reagent("cola", 50)
+ on_reagent_change()
+
+/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass
+ name = "shot glass"
+ desc = "No glasses were shot in the making of this glass."
+ icon_state = "shotglass"
+ amount_per_transfer_from_this = 10
+ volume = 10
+ matter = list("glass" = 175)
+
+/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass/on_reagent_change()
+ overlays.Cut()
+
+ if(reagents.total_volume)
+ var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]1")
+
+ switch(reagents.total_volume)
+ if(0 to 3) filling.icon_state = "[icon_state]1"
+ if(4 to 7) filling.icon_state = "[icon_state]5"
+ if(8 to INFINITY) filling.icon_state = "[icon_state]12"
+
+ filling.color += reagents.get_color()
+ overlays += filling
+ name = "shot glass of " + reagents.get_master_reagent_name() //No matter what, the glass will tell you the reagent's name. Might be too abusable in the future.
+ else
+ name = "shot glass"
+
+/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask
+ name = "fitness shaker"
+ desc = "Big enough to contain enough protein to get perfectly swole. Don't mind the bits."
+ icon_state = "fitness-cup_black"
+ volume = 100
+ matter = list("plastic" = 2000)
+
+/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/New()
+ ..()
+ icon_state = pick("fitness-cup_black", "fitness-cup_red", "fitness-cup_black")
+
+/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/on_reagent_change()
+ overlays.Cut()
+
+ if(reagents.total_volume)
+ var/image/filling = image('icons/obj/reagentfillings.dmi', src, "fitness-cup10")
+
+ switch(reagents.total_volume)
+ if(0 to 10) filling.icon_state = "fitness-cup10"
+ if(11 to 20) filling.icon_state = "fitness-cup20"
+ if(21 to 29) filling.icon_state = "fitness-cup30"
+ if(30 to 39) filling.icon_state = "fitness-cup40"
+ if(40 to 49) filling.icon_state = "fitness-cup50"
+ if(50 to 59) filling.icon_state = "fitness-cup60"
+ if(60 to 69) filling.icon_state = "fitness-cup70"
+ if(70 to 79) filling.icon_state = "fitness-cup80"
+ if(80 to 89) filling.icon_state = "fitness-cup90"
+ if(90 to INFINITY) filling.icon_state = "fitness-cup100"
+
+ filling.color += reagents.get_color()
+ overlays += filling
+
+/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/proteinshake
+ name = "protein shake"
+
+/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/fitnessflask/proteinshake/New()
+ ..()
+ reagents.add_reagent("nutriment", 30)
+ reagents.add_reagent("iron", 10)
+ reagents.add_reagent("protein", 15)
+ reagents.add_reagent("water", 45)
on_reagent_change()
\ No newline at end of file
diff --git a/code/modules/reagents/reagent_containers/food/drinks/jar.dm b/code/modules/food/food/drinks/jar.dm
similarity index 96%
rename from code/modules/reagents/reagent_containers/food/drinks/jar.dm
rename to code/modules/food/food/drinks/jar.dm
index b4d305bae7..2167eb48a4 100644
--- a/code/modules/reagents/reagent_containers/food/drinks/jar.dm
+++ b/code/modules/food/food/drinks/jar.dm
@@ -1,25 +1,25 @@
-///jar
-/obj/item/weapon/reagent_containers/food/drinks/jar
- name = "empty jar"
- desc = "A jar. You're not sure what it's supposed to hold."
- icon_state = "jar"
- item_state = "beaker"
- center_of_mass = list("x"=15, "y"=8)
- unacidable = 1
-
-/obj/item/weapon/reagent_containers/food/drinks/jar/on_reagent_change()
- if (reagents.reagent_list.len > 0)
- switch(reagents.get_master_reagent_id())
- if("slime")
- icon_state = "jar_slime"
- name = "slime jam"
- desc = "A jar of slime jam. Delicious!"
- else
- icon_state ="jar_what"
- name = "jar of something"
- desc = "You can't really tell what this is."
- else
- icon_state = "jar"
- name = "empty jar"
- desc = "A jar. You're not sure what it's supposed to hold."
- return
+///jar
+/obj/item/weapon/reagent_containers/food/drinks/jar
+ name = "empty jar"
+ desc = "A jar. You're not sure what it's supposed to hold."
+ icon_state = "jar"
+ item_state = "beaker"
+ center_of_mass = list("x"=15, "y"=8)
+ unacidable = 1
+
+/obj/item/weapon/reagent_containers/food/drinks/jar/on_reagent_change()
+ if (reagents.reagent_list.len > 0)
+ switch(reagents.get_master_reagent_id())
+ if("slime")
+ icon_state = "jar_slime"
+ name = "slime jam"
+ desc = "A jar of slime jam. Delicious!"
+ else
+ icon_state ="jar_what"
+ name = "jar of something"
+ desc = "You can't really tell what this is."
+ else
+ icon_state = "jar"
+ name = "empty jar"
+ desc = "A jar. You're not sure what it's supposed to hold."
+ return
diff --git a/code/modules/reagents/reagent_containers/food/lunch.dm b/code/modules/food/food/lunch.dm
similarity index 100%
rename from code/modules/reagents/reagent_containers/food/lunch.dm
rename to code/modules/food/food/lunch.dm
diff --git a/code/modules/reagents/reagent_containers/food/sandwich.dm b/code/modules/food/food/sandwich.dm
similarity index 100%
rename from code/modules/reagents/reagent_containers/food/sandwich.dm
rename to code/modules/food/food/sandwich.dm
diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/food/food/snacks.dm
similarity index 96%
rename from code/modules/reagents/reagent_containers/food/snacks.dm
rename to code/modules/food/food/snacks.dm
index 3a7cec0213..80145ce20d 100644
--- a/code/modules/reagents/reagent_containers/food/snacks.dm
+++ b/code/modules/food/food/snacks.dm
@@ -1,3862 +1,3862 @@
-//Food items that are eaten normally and don't leave anything behind.
-/obj/item/weapon/reagent_containers/food/snacks
- name = "snack"
- desc = "yummy"
- icon = 'icons/obj/food.dmi'
- icon_state = null
- var/bitesize = 1
- var/bitecount = 0
- var/trash = null
- var/slice_path
- var/slices_num
- var/dried_type = null
- var/dry = 0
- var/nutriment_amt = 0
- var/list/nutriment_desc = list("food" = 1)
- center_of_mass = list("x"=16, "y"=16)
- w_class = ITEMSIZE_SMALL
- force = 1
-
-/obj/item/weapon/reagent_containers/food/snacks/New()
- ..()
- if(nutriment_amt)
- reagents.add_reagent("nutriment",nutriment_amt,nutriment_desc)
-
-/obj/item/weapon/reagent_containers/food/snacks/New()
- ..()
- if(nutriment_amt)
- reagents.add_reagent("nutriment", nutriment_amt)
-
- //Placeholder for effect that trigger on eating that aren't tied to reagents.
-/obj/item/weapon/reagent_containers/food/snacks/proc/On_Consume(var/mob/M)
- if(!usr)
- usr = M
- if(!reagents.total_volume)
- M.visible_message("[M] finishes eating \the [src].","You finish eating \the [src].")
- usr.drop_from_inventory(src) //so icons update :[
-
- if(trash)
- if(ispath(trash,/obj/item))
- var/obj/item/TrashItem = new trash(usr)
- usr.put_in_hands(TrashItem)
- else if(istype(trash,/obj/item))
- usr.put_in_hands(trash)
- qdel(src)
- return
-
-/obj/item/weapon/reagent_containers/food/snacks/attack_self(mob/user as mob)
- return
-
-/obj/item/weapon/reagent_containers/food/snacks/attack(mob/M as mob, mob/user as mob, def_zone)
- if(reagents && !reagents.total_volume)
- user << "None of [src] left!"
- user.drop_from_inventory(src)
- qdel(src)
- return 0
-
- if(istype(M, /mob/living/carbon))
- //TODO: replace with standard_feed_mob() call.
-
- var/fullness = M.nutrition + (M.reagents.get_reagent_amount("nutriment") * 25)
- if(M == user) //If you're eating it yourself
- if(istype(M,/mob/living/carbon/human))
- var/mob/living/carbon/human/H = M
- if(!H.check_has_mouth())
- user << "Where do you intend to put \the [src]? You don't have a mouth!"
- return
- var/obj/item/blocked = H.check_mouth_coverage()
- if(blocked)
- user << "\The [blocked] is in the way!"
- return
-
- user.setClickCooldown(user.get_attack_speed(src)) //puts a limit on how fast people can eat/drink things
- if (fullness <= 50)
- M << "You hungrily chew out a piece of [src] and gobble it!"
- if (fullness > 50 && fullness <= 150)
- M << "You hungrily begin to eat [src]."
- if (fullness > 150 && fullness <= 350)
- M << "You take a bite of [src]."
- if (fullness > 350 && fullness <= 550)
- M << "You unwillingly chew a bit of [src]."
- if (fullness > (550 * (1 + M.overeatduration / 2000))) // The more you eat - the more you can eat
- M << "You cannot force any more of [src] to go down your throat."
- return 0
-
- else if(user.a_intent == I_HURT)
- return ..()
-
- else
- if(istype(M,/mob/living/carbon/human))
- var/mob/living/carbon/human/H = M
- if(!H.check_has_mouth())
- user << "Where do you intend to put \the [src]? \The [H] doesn't have a mouth!"
- return
- var/obj/item/blocked = H.check_mouth_coverage()
- if(blocked)
- user << "\The [blocked] is in the way!"
- return
-
- if (fullness <= (550 * (1 + M.overeatduration / 1000)))
- user.visible_message("[user] attempts to feed [M] [src].")
- else
- user.visible_message("[user] cannot force anymore of [src] down [M]'s throat.")
- return 0
-
- user.setClickCooldown(user.get_attack_speed(src))
- if(!do_mob(user, M)) return
-
- //Do we really care about this
- add_attack_logs(user,M,"Fed with [src.name] containing [reagentlist(src)]", admin_notify = FALSE)
-
- user.visible_message("[user] feeds [M] [src].")
-
- else
- user << "This creature does not seem to have a mouth!"
- return
-
- if(reagents) //Handle ingestion of the reagent.
- playsound(M.loc,'sound/items/eatfood.ogg', rand(10,50), 1)
- if(reagents.total_volume)
- if(reagents.total_volume > bitesize)
- reagents.trans_to_mob(M, bitesize, CHEM_INGEST)
- else
- reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST)
- bitecount++
- On_Consume(M)
- return 1
-
- return 0
-
-/obj/item/weapon/reagent_containers/food/snacks/examine(mob/user)
- if(!..(user, 1))
- return
- if (bitecount==0)
- return
- else if (bitecount==1)
- user << "\The [src] was bitten by someone!"
- else if (bitecount<=3)
- user << "\The [src] was bitten [bitecount] times!"
- else
- user << "\The [src] was bitten multiple times!"
-
-/obj/item/weapon/reagent_containers/food/snacks/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if(istype(W,/obj/item/weapon/storage))
- ..() // -> item/attackby()
- return
-
- // Eating with forks
- if(istype(W,/obj/item/weapon/material/kitchen/utensil))
- var/obj/item/weapon/material/kitchen/utensil/U = W
- if(U.scoop_food)
- if(!U.reagents)
- U.create_reagents(5)
-
- if (U.reagents.total_volume > 0)
- user << "You already have something on your [U]."
- return
-
- user.visible_message( \
- "[user] scoops up some [src] with \the [U]!", \
- "You scoop up some [src] with \the [U]!" \
- )
-
- src.bitecount++
- U.overlays.Cut()
- U.loaded = "[src]"
- var/image/I = new(U.icon, "loadedfood")
- I.color = src.filling_color
- U.overlays += I
-
- reagents.trans_to_obj(U, min(reagents.total_volume,5))
-
- if (reagents.total_volume <= 0)
- qdel(src)
- return
-
- if (is_sliceable())
- //these are used to allow hiding edge items in food that is not on a table/tray
- var/can_slice_here = isturf(src.loc) && ((locate(/obj/structure/table) in src.loc) || (locate(/obj/machinery/optable) in src.loc) || (locate(/obj/item/weapon/tray) in src.loc))
- var/hide_item = !has_edge(W) || !can_slice_here
-
- if (hide_item)
- if (W.w_class >= src.w_class || is_robot_module(W))
- return
-
- to_chat(user, "You slip \the [W] inside \the [src].")
- user.drop_from_inventory(W, src)
- add_fingerprint(user)
- contents += W
- return
-
- if (has_edge(W))
- if (!can_slice_here)
- to_chat(user, "You cannot slice \the [src] here! You need a table or at least a tray to do it.")
- return
-
- var/slices_lost = 0
- if (W.w_class > 3)
- user.visible_message("\The [user] crudely slices \the [src] with [W]!", "You crudely slice \the [src] with your [W]!")
- slices_lost = rand(1,min(1,round(slices_num/2)))
- else
- user.visible_message("\The [user] slices \the [src]!", "You slice \the [src]!")
-
- var/reagents_per_slice = reagents.total_volume/slices_num
- for(var/i=1 to (slices_num-slices_lost))
- var/obj/slice = new slice_path (src.loc)
- reagents.trans_to_obj(slice, reagents_per_slice)
- qdel(src)
- return
-
-/obj/item/weapon/reagent_containers/food/snacks/proc/is_sliceable()
- return (slices_num && slice_path && slices_num > 0)
-
-/obj/item/weapon/reagent_containers/food/snacks/Destroy()
- if(contents)
- for(var/atom/movable/something in contents)
- something.dropInto(loc)
- . = ..()
-
-////////////////////////////////////////////////////////////////////////////////
-/// FOOD END
-////////////////////////////////////////////////////////////////////////////////
-/obj/item/weapon/reagent_containers/food/snacks/attack_generic(var/mob/living/user)
- if(!isanimal(user) && !isalien(user))
- return
- user.visible_message("[user] nibbles away at \the [src].","You nibble away at \the [src].")
- bitecount++
- if(reagents)
- reagents.trans_to_mob(user, bitesize, CHEM_INGEST)
- spawn(5)
- if(!src && !user.client)
- user.custom_emote(1,"[pick("burps", "cries for more", "burps twice", "looks at the area where the food was")]")
- qdel(src)
- On_Consume(user)
-
-//////////////////////////////////////////////////
-////////////////////////////////////////////Snacks
-//////////////////////////////////////////////////
-//Items in the "Snacks" subcategory are food items that people actually eat. The key points are that they are created
-// already filled with reagents and are destroyed when empty. Additionally, they make a "munching" noise when eaten.
-
-//Notes by Darem: Food in the "snacks" subtype can hold a maximum of 50 units Generally speaking, you don't want to go over 40
-// total for the item because you want to leave space for extra condiments. If you want effect besides healing, add a reagent for
-// it. Try to stick to existing reagents when possible (so if you want a stronger healing effect, just use Tricordrazine). On use
-// effect (such as the old officer eating a donut code) requires a unique reagent (unless you can figure out a better way).
-
-//The nutriment reagent and bitesize variable replace the old heal_amt and amount variables. Each unit of nutriment is equal to
-// 2 of the old heal_amt variable. Bitesize is the rate at which the reagents are consumed. So if you have 6 nutriment and a
-// bitesize of 2, then it'll take 3 bites to eat. Unlike the old system, the contained reagents are evenly spread among all
-// the bites. No more contained reagents = no more bites.
-
-//Here is an example of the new formatting for anyone who wants to add more food items.
-///obj/item/weapon/reagent_containers/food/snacks/xenoburger //Identification path for the object.
-// name = "Xenoburger" //Name that displays in the UI.
-// desc = "Smells caustic. Tastes like heresy." //Duh
-// icon_state = "xburger" //Refers to an icon in food.dmi
-// New() //Don't mess with this.
-// ..() //Same here.
-// reagents.add_reagent("xenomicrobes", 10) //This is what is in the food item. you may copy/paste
-// reagents.add_reagent("nutriment", 2) // this line of code for all the contents.
-// bitesize = 3 //This is the amount each bite consumes.
-
-
-
-
-/obj/item/weapon/reagent_containers/food/snacks/aesirsalad
- name = "Aesir salad"
- desc = "Probably too incredible for mortal men to fully enjoy."
- icon_state = "aesirsalad"
- trash = /obj/item/trash/snack_bowl
- filling_color = "#468C00"
- center_of_mass = list("x"=17, "y"=11)
- nutriment_amt = 8
- nutriment_desc = list("apples" = 3,"salad" = 5)
-
-/obj/item/weapon/reagent_containers/food/snacks/aesirsalad/New()
- ..()
- reagents.add_reagent("doctorsdelight", 8)
- reagents.add_reagent("tricordrazine", 8)
- bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/candy
- name = "candy"
- desc = "Nougat, love it or hate it."
- icon_state = "candy"
- trash = /obj/item/trash/candy
- filling_color = "#7D5F46"
- center_of_mass = list("x"=15, "y"=15)
- nutriment_amt = 1
- nutriment_desc = list("candy" = 1)
-
-/obj/item/weapon/reagent_containers/food/snacks/candy/New()
- ..()
- reagents.add_reagent("sugar", 3)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar
- name = "protein bar"
- desc = "SwoleMAX brand protein bars, guaranteed to get you feeling perfectly overconfident."
- icon_state = "proteinbar"
- trash = /obj/item/trash/candy/proteinbar
- nutriment_amt = 9
- nutriment_desc = list("candy" = 1, "protein" = 8)
-
-/obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar/New()
- ..()
- reagents.add_reagent("protein", 4)
- reagents.add_reagent("sugar", 4)
- bitesize = 6
-
-/obj/item/weapon/reagent_containers/food/snacks/candy/donor
- name = "Donor Candy"
- desc = "A little treat for blood donors."
- trash = /obj/item/trash/candy
- nutriment_amt = 9
- nutriment_desc = list("candy" = 10)
-
-/obj/item/weapon/reagent_containers/food/snacks/candy/donor/New()
- ..()
- reagents.add_reagent("sugar", 3)
- bitesize = 5
-
-/obj/item/weapon/reagent_containers/food/snacks/candy_corn
- name = "candy corn"
- desc = "It's a handful of candy corn. Cannot be stored in a detective's hat, alas."
- icon_state = "candy_corn"
- filling_color = "#FFFCB0"
- center_of_mass = list("x"=14, "y"=10)
- nutriment_amt = 4
- nutriment_desc = list("candy corn" = 4)
-
-/obj/item/weapon/reagent_containers/food/snacks/candy_corn/New()
- ..()
- reagents.add_reagent("sugar", 2)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/chips
- name = "chips"
- desc = "Commander Riker's What-The-Crisps"
- icon_state = "chips"
- trash = /obj/item/trash/chips
- filling_color = "#E8C31E"
- center_of_mass = list("x"=15, "y"=15)
- nutriment_amt = 3
- nutriment_desc = list("salt" = 1, "chips" = 2)
-
-/obj/item/weapon/reagent_containers/food/snacks/chips/New()
- ..()
- bitesize = 1
-
-/obj/item/weapon/reagent_containers/food/snacks/cookie
- name = "cookie"
- desc = "COOKIE!!!"
- icon_state = "COOKIE!!!"
- filling_color = "#DBC94F"
- center_of_mass = list("x"=17, "y"=18)
- nutriment_amt = 5
- nutriment_desc = list("sweetness" = 3, "cookie" = 2)
-
-/obj/item/weapon/reagent_containers/food/snacks/cookie/New()
- ..()
- bitesize = 1
-
-/obj/item/weapon/reagent_containers/food/snacks/chocolatebar
- name = "Chocolate Bar"
- desc = "Such sweet, fattening food."
- icon_state = "chocolatebar"
- filling_color = "#7D5F46"
- center_of_mass = list("x"=15, "y"=15)
- nutriment_amt = 2
- nutriment_desc = list("chocolate" = 5)
-
-/obj/item/weapon/reagent_containers/food/snacks/chocolatebar/New()
- ..()
- reagents.add_reagent("sugar", 2)
- reagents.add_reagent("coco", 2)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/chocolatepiece
- name = "chocolate piece"
- desc = "A luscious milk chocolate piece filled with gooey caramel."
- icon_state = "chocolatepiece"
- filling_color = "#7D5F46"
- center_of_mass = list("x"=15, "y"=15)
- nutriment_amt = 1
- nutriment_desc = list("chocolate" = 3, "caramel" = 2, "lusciousness" = 1)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/chocolatepiece/white
- name = "white chocolate piece"
- desc = "A creamy white chocolate piece drizzled in milk chocolate."
- icon_state = "chocolatepiece_white"
- filling_color = "#E2DAD3"
- nutriment_desc = list("white chocolate" = 3, "creaminess" = 1)
-
-/obj/item/weapon/reagent_containers/food/snacks/chocolatepiece/truffle
- name = "chocolate truffle"
- desc = "A bite-sized milk chocolate truffle that could buy anyone's love."
- icon_state = "chocolatepiece_truffle"
- nutriment_desc = list("chocolate" = 3, "undying devotion" = 3)
-
-/obj/item/weapon/reagent_containers/food/snacks/chocolateegg
- name = "Chocolate Egg"
- desc = "Such sweet, fattening food."
- icon_state = "chocolateegg"
- filling_color = "#7D5F46"
- center_of_mass = list("x"=16, "y"=13)
- nutriment_amt = 3
- nutriment_desc = list("chocolate" = 5)
-
-/obj/item/weapon/reagent_containers/food/snacks/chocolateegg/New()
- ..()
- reagents.add_reagent("sugar", 2)
- reagents.add_reagent("coco", 2)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/donut
- name = "donut"
- desc = "Goes great with Robust Coffee."
- icon_state = "donut1"
- filling_color = "#D9C386"
- var/overlay_state = "box-donut1"
- center_of_mass = list("x"=13, "y"=16)
- nutriment_desc = list("sweetness", "donut")
-
-/obj/item/weapon/reagent_containers/food/snacks/donut/normal
- name = "donut"
- desc = "Goes great with Robust Coffee."
- icon_state = "donut1"
- nutriment_amt = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/donut/normal/New()
- ..()
- reagents.add_reagent("nutriment", 3)
- reagents.add_reagent("sprinkles", 1)
- src.bitesize = 3
- if(prob(30))
- src.icon_state = "donut2"
- src.overlay_state = "box-donut2"
- src.name = "frosted donut"
- reagents.add_reagent("sprinkles", 2)
- center_of_mass = list("x"=19, "y"=16)
-
-/obj/item/weapon/reagent_containers/food/snacks/donut/chaos
- name = "Chaos Donut"
- desc = "Like life, it never quite tastes the same."
- icon_state = "donut1"
- filling_color = "#ED11E6"
- nutriment_amt = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/donut/chaos/New()
- ..()
- reagents.add_reagent("sprinkles", 1)
- bitesize = 10
- var/chaosselect = pick(1,2,3,4,5,6,7,8,9,10)
- switch(chaosselect)
- if(1)
- reagents.add_reagent("nutriment", 3)
- if(2)
- reagents.add_reagent("capsaicin", 3)
- if(3)
- reagents.add_reagent("frostoil", 3)
- if(4)
- reagents.add_reagent("sprinkles", 3)
- if(5)
- reagents.add_reagent("phoron", 3)
- if(6)
- reagents.add_reagent("coco", 3)
- if(7)
- reagents.add_reagent("slimejelly", 3)
- if(8)
- reagents.add_reagent("banana", 3)
- if(9)
- reagents.add_reagent("berryjuice", 3)
- if(10)
- reagents.add_reagent("tricordrazine", 3)
- if(prob(30))
- src.icon_state = "donut2"
- src.overlay_state = "box-donut2"
- src.name = "Frosted Chaos Donut"
- reagents.add_reagent("sprinkles", 2)
-
-/obj/item/weapon/reagent_containers/food/snacks/donut/jelly
- name = "Jelly Donut"
- desc = "You jelly?"
- icon_state = "jdonut1"
- filling_color = "#ED1169"
- center_of_mass = list("x"=16, "y"=11)
- nutriment_amt = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/donut/jelly/New()
- ..()
- reagents.add_reagent("sprinkles", 1)
- reagents.add_reagent("berryjuice", 5)
- bitesize = 5
- if(prob(30))
- src.icon_state = "jdonut2"
- src.overlay_state = "box-donut2"
- src.name = "Frosted Jelly Donut"
- reagents.add_reagent("sprinkles", 2)
-
-/obj/item/weapon/reagent_containers/food/snacks/donut/slimejelly
- name = "Jelly Donut"
- desc = "You jelly?"
- icon_state = "jdonut1"
- filling_color = "#ED1169"
- center_of_mass = list("x"=16, "y"=11)
- nutriment_amt = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/donut/slimejelly/New()
- ..()
- reagents.add_reagent("sprinkles", 1)
- reagents.add_reagent("slimejelly", 5)
- bitesize = 5
- if(prob(30))
- src.icon_state = "jdonut2"
- src.overlay_state = "box-donut2"
- src.name = "Frosted Jelly Donut"
- reagents.add_reagent("sprinkles", 2)
-
-/obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly
- name = "Jelly Donut"
- desc = "You jelly?"
- icon_state = "jdonut1"
- filling_color = "#ED1169"
- center_of_mass = list("x"=16, "y"=11)
- nutriment_amt = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly/New()
- ..()
- reagents.add_reagent("sprinkles", 1)
- reagents.add_reagent("cherryjelly", 5)
- bitesize = 5
- if(prob(30))
- src.icon_state = "jdonut2"
- src.overlay_state = "box-donut2"
- src.name = "Frosted Jelly Donut"
- reagents.add_reagent("sprinkles", 2)
-
-/obj/item/weapon/reagent_containers/food/snacks/egg
- name = "egg"
- desc = "An egg!"
- icon_state = "egg"
- filling_color = "#FDFFD1"
- volume = 10
- center_of_mass = list("x"=16, "y"=13)
-
-/obj/item/weapon/reagent_containers/food/snacks/egg/New()
- ..()
- reagents.add_reagent("egg", 3)
-
-/obj/item/weapon/reagent_containers/food/snacks/egg/afterattack(obj/O as obj, mob/user as mob, proximity)
- if(istype(O,/obj/machinery/microwave))
- return ..()
- if(!(proximity && O.is_open_container()))
- return
- user << "You crack \the [src] into \the [O]."
- reagents.trans_to(O, reagents.total_volume)
- user.drop_from_inventory(src)
- qdel(src)
-
-/obj/item/weapon/reagent_containers/food/snacks/egg/throw_impact(atom/hit_atom)
- ..()
- new/obj/effect/decal/cleanable/egg_smudge(src.loc)
- src.reagents.splash(hit_atom, reagents.total_volume)
- src.visible_message("[src.name] has been squashed.","You hear a smack.")
- qdel(src)
-
-/obj/item/weapon/reagent_containers/food/snacks/egg/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if(istype( W, /obj/item/weapon/pen/crayon ))
- var/obj/item/weapon/pen/crayon/C = W
- var/clr = C.colourName
-
- if(!(clr in list("blue","green","mime","orange","purple","rainbow","red","yellow")))
- usr << "The egg refuses to take on this color!"
- return
-
- usr << "You color \the [src] [clr]"
- icon_state = "egg-[clr]"
- else
- ..()
-
-/obj/item/weapon/reagent_containers/food/snacks/egg/blue
- icon_state = "egg-blue"
-
-/obj/item/weapon/reagent_containers/food/snacks/egg/green
- icon_state = "egg-green"
-
-/obj/item/weapon/reagent_containers/food/snacks/egg/mime
- icon_state = "egg-mime"
-
-/obj/item/weapon/reagent_containers/food/snacks/egg/orange
- icon_state = "egg-orange"
-
-/obj/item/weapon/reagent_containers/food/snacks/egg/purple
- icon_state = "egg-purple"
-
-/obj/item/weapon/reagent_containers/food/snacks/egg/rainbow
- icon_state = "egg-rainbow"
-
-/obj/item/weapon/reagent_containers/food/snacks/egg/red
- icon_state = "egg-red"
-
-/obj/item/weapon/reagent_containers/food/snacks/egg/yellow
- icon_state = "egg-yellow"
-
-/obj/item/weapon/reagent_containers/food/snacks/friedegg
- name = "Fried egg"
- desc = "A fried egg, with a touch of salt and pepper."
- icon_state = "friedegg"
- filling_color = "#FFDF78"
- center_of_mass = list("x"=16, "y"=14)
-
-/obj/item/weapon/reagent_containers/food/snacks/friedegg/New()
- ..()
- reagents.add_reagent("protein", 3)
- reagents.add_reagent("sodiumchloride", 1)
- reagents.add_reagent("blackpepper", 1)
- bitesize = 1
-
-/obj/item/weapon/reagent_containers/food/snacks/boiledegg
- name = "Boiled egg"
- desc = "A hard boiled egg."
- icon_state = "egg"
- filling_color = "#FFFFFF"
-
-/obj/item/weapon/reagent_containers/food/snacks/boiledegg/New()
- ..()
- reagents.add_reagent("protein", 2)
-
-/obj/item/weapon/reagent_containers/food/snacks/organ
- name = "organ"
- desc = "It's good for you."
- icon = 'icons/obj/surgery.dmi'
- icon_state = "appendix"
- filling_color = "#E00D34"
- center_of_mass = list("x"=16, "y"=16)
-
-/obj/item/weapon/reagent_containers/food/snacks/organ/New()
- ..()
- reagents.add_reagent("protein", rand(3,5))
- reagents.add_reagent("toxin", rand(1,3))
- src.bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/tofu
- name = "Tofu"
- icon_state = "tofu"
- desc = "We all love tofu."
- filling_color = "#FFFEE0"
- center_of_mass = list("x"=17, "y"=10)
- nutriment_amt = 3
- nutriment_desc = list("tofu" = 3, "goeyness" = 3)
-
-/obj/item/weapon/reagent_containers/food/snacks/tofu/New()
- ..()
- src.bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/tofurkey
- name = "Tofurkey"
- desc = "A fake turkey made from tofu."
- icon_state = "tofurkey"
- filling_color = "#FFFEE0"
- center_of_mass = list("x"=16, "y"=8)
- nutriment_amt = 12
- nutriment_desc = list("turkey" = 3, "tofu" = 5, "goeyness" = 4)
-
-/obj/item/weapon/reagent_containers/food/snacks/tofurkey/New()
- ..()
- reagents.add_reagent("stoxin", 3)
- bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/stuffing
- name = "Stuffing"
- desc = "Moist, peppery breadcrumbs for filling the body cavities of dead birds. Dig in!"
- icon_state = "stuffing"
- filling_color = "#C9AC83"
- center_of_mass = list("x"=16, "y"=10)
- nutriment_amt = 3
- nutriment_desc = list("dryness" = 2, "bread" = 2)
-
-/obj/item/weapon/reagent_containers/food/snacks/stuffing/New()
- ..()
- bitesize = 1
-
-/obj/item/weapon/reagent_containers/food/snacks/carpmeat
- name = "carp fillet"
- desc = "A fillet of spess carp meat"
- icon_state = "fishfillet"
- filling_color = "#FFDEFE"
- center_of_mass = list("x"=17, "y"=13)
-
-/obj/item/weapon/reagent_containers/food/snacks/carpmeat/New()
- ..()
- reagents.add_reagent("protein", 3)
- reagents.add_reagent("carpotoxin", 3)
- src.bitesize = 6
-
-/obj/item/weapon/reagent_containers/food/snacks/fishfingers
- name = "Fish Fingers"
- desc = "A finger of fish."
- icon_state = "fishfingers"
- filling_color = "#FFDEFE"
- center_of_mass = list("x"=16, "y"=13)
-
-/obj/item/weapon/reagent_containers/food/snacks/fishfingers/New()
- ..()
- reagents.add_reagent("protein", 4)
- reagents.add_reagent("carpotoxin", 3)
- bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice
- name = "huge mushroom slice"
- desc = "A slice from a huge mushroom."
- icon_state = "hugemushroomslice"
- filling_color = "#E0D7C5"
- center_of_mass = list("x"=17, "y"=16)
- nutriment_amt = 3
- nutriment_desc = list("raw" = 2, "mushroom" = 2)
-
-/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice/New()
- ..()
- reagents.add_reagent("psilocybin", 3)
- src.bitesize = 6
-
-/obj/item/weapon/reagent_containers/food/snacks/tomatomeat
- name = "tomato slice"
- desc = "A slice from a huge tomato"
- icon_state = "tomatomeat"
- filling_color = "#DB0000"
- center_of_mass = list("x"=17, "y"=16)
- nutriment_amt = 3
- nutriment_desc = list("raw" = 2, "tomato" = 3)
-
-/obj/item/weapon/reagent_containers/food/snacks/tomatomeat/New()
- ..()
- src.bitesize = 6
-
-/obj/item/weapon/reagent_containers/food/snacks/bearmeat
- name = "bear meat"
- desc = "A very manly slab of meat."
- icon_state = "bearmeat"
- filling_color = "#DB0000"
- center_of_mass = list("x"=16, "y"=10)
-
-/obj/item/weapon/reagent_containers/food/snacks/bearmeat/New()
- ..()
- reagents.add_reagent("protein", 12)
- reagents.add_reagent("hyperzine", 5)
- src.bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/xenomeat
- name = "xenomeat"
- desc = "A slab of green meat. Smells like acid."
- icon_state = "xenomeat"
- filling_color = "#43DE18"
- center_of_mass = list("x"=16, "y"=10)
-
-/obj/item/weapon/reagent_containers/food/snacks/xenomeat/New()
- ..()
- reagents.add_reagent("protein", 6)
- reagents.add_reagent("pacid",6)
- src.bitesize = 6
-
-/obj/item/weapon/reagent_containers/food/snacks/xenomeat/spidermeat // Substitute for recipes requiring xeno meat.
- name = "spider meat"
- desc = "A slab of green meat."
- icon_state = "xenomeat"
- filling_color = "#43DE18"
- center_of_mass = list("x"=16, "y"=10)
-
-/obj/item/weapon/reagent_containers/food/snacks/xenomeat/spidermeat/New()
- ..()
- reagents.add_reagent("spidertoxin",6)
- reagents.remove_reagent("pacid",6)
- src.bitesize = 6
-
-/obj/item/weapon/reagent_containers/food/snacks/meatball
- name = "meatball"
- desc = "A great meal all round."
- icon_state = "meatball"
- filling_color = "#DB0000"
- center_of_mass = list("x"=16, "y"=16)
-
-/obj/item/weapon/reagent_containers/food/snacks/meatball/New()
- ..()
- reagents.add_reagent("protein", 3)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/sausage
- name = "Sausage"
- desc = "A piece of mixed, long meat."
- icon_state = "sausage"
- filling_color = "#DB0000"
- center_of_mass = list("x"=16, "y"=16)
-
-/obj/item/weapon/reagent_containers/food/snacks/sausage/New()
- ..()
- reagents.add_reagent("protein", 6)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/donkpocket
- name = "Donk-pocket"
- desc = "The food of choice for the seasoned traitor."
- icon_state = "donkpocket"
- filling_color = "#DEDEAB"
- center_of_mass = list("x"=16, "y"=10)
- var/warm
- var/list/heated_reagents
-
-/obj/item/weapon/reagent_containers/food/snacks/donkpocket/New()
- ..()
- reagents.add_reagent("nutriment", 2)
- reagents.add_reagent("protein", 2)
-
- warm = 0
- heated_reagents = list("tricordrazine" = 5)
-
-/obj/item/weapon/reagent_containers/food/snacks/donkpocket/proc/heat()
- warm = 1
- for(var/reagent in heated_reagents)
- reagents.add_reagent(reagent, heated_reagents[reagent])
- bitesize = 6
- name = "Warm " + name
- cooltime()
-
-/obj/item/weapon/reagent_containers/food/snacks/donkpocket/proc/cooltime()
- if (src.warm)
- spawn(4200)
- src.warm = 0
- for(var/reagent in heated_reagents)
- src.reagents.del_reagent(reagent)
- src.name = initial(name)
- return
-
-/obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket
- name = "\improper Sin-pocket"
- desc = "The food of choice for the veteran. Do NOT overconsume."
- filling_color = "#6D6D00"
- heated_reagents = list("doctorsdelight" = 5, "hyperzine" = 0.75, "synaptizine" = 0.25)
- var/has_been_heated = 0
-
-/obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket/attack_self(mob/user)
- if(has_been_heated)
- user << "The heating chemicals have already been spent."
- return
- has_been_heated = 1
- user.visible_message("[user] crushes \the [src] package.", "You crush \the [src] package and feel a comfortable heat build up.")
- spawn(200)
- user << "You think \the [src] is ready to eat about now."
- heat()
-
-/obj/item/weapon/reagent_containers/food/snacks/brainburger
- name = "brainburger"
- desc = "A strange looking burger. It looks almost sentient."
- icon_state = "brainburger"
- filling_color = "#F2B6EA"
- center_of_mass = list("x"=15, "y"=11)
-
-/obj/item/weapon/reagent_containers/food/snacks/brainburger/New()
- ..()
- reagents.add_reagent("protein", 6)
- reagents.add_reagent("alkysine", 6)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/ghostburger
- name = "Ghost Burger"
- desc = "Spooky! It doesn't look very filling."
- icon_state = "ghostburger"
- filling_color = "#FFF2FF"
- center_of_mass = list("x"=16, "y"=11)
- nutriment_desc = list("buns" = 3, "spookiness" = 3)
- nutriment_amt = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/ghostburger/New()
- ..()
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/human
- var/hname = ""
- var/job = null
- filling_color = "#D63C3C"
-
-/obj/item/weapon/reagent_containers/food/snacks/human/burger
- name = "-burger"
- desc = "A bloody burger."
- icon_state = "hburger"
- center_of_mass = list("x"=16, "y"=11)
-
-/obj/item/weapon/reagent_containers/food/snacks/human/burger/New()
- ..()
- reagents.add_reagent("protein", 6)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/cheeseburger
- name = "cheeseburger"
- desc = "The cheese adds a good flavor."
- icon_state = "cheeseburger"
- center_of_mass = list("x"=16, "y"=11)
- nutriment_amt = 2
- nutriment_desc = list("cheese" = 2, "bun" = 2)
-
-/obj/item/weapon/reagent_containers/food/snacks/cheeseburger/New()
- ..()
- reagents.add_reagent("protein", 2)
-
-/obj/item/weapon/reagent_containers/food/snacks/monkeyburger
- name = "burger"
- desc = "The cornerstone of every nutritious breakfast."
- icon_state = "hburger"
- filling_color = "#D63C3C"
- center_of_mass = list("x"=16, "y"=11)
- nutriment_amt = 3
- nutriment_desc = list("bun" = 2)
-
-/obj/item/weapon/reagent_containers/food/snacks/monkeyburger/New()
- ..()
- reagents.add_reagent("protein", 3)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/fishburger
- name = "Fillet -o- Carp Sandwich"
- desc = "Almost like a carp is yelling somewhere... Give me back that fillet -o- carp, give me that carp."
- icon_state = "fishburger"
- filling_color = "#FFDEFE"
- center_of_mass = list("x"=16, "y"=10)
-
-/obj/item/weapon/reagent_containers/food/snacks/fishburger/New()
- ..()
- reagents.add_reagent("protein", 6)
- reagents.add_reagent("carpotoxin", 3)
- bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/tofuburger
- name = "Tofu Burger"
- desc = "What.. is that meat?"
- icon_state = "tofuburger"
- filling_color = "#FFFEE0"
- center_of_mass = list("x"=16, "y"=10)
- nutriment_amt = 6
- nutriment_desc = list("bun" = 2, "pseudo-soy meat" = 3)
-
-/obj/item/weapon/reagent_containers/food/snacks/tofuburger/New()
- ..()
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/roburger
- name = "roburger"
- desc = "The lettuce is the only organic component. Beep."
- icon_state = "roburger"
- filling_color = "#CCCCCC"
- center_of_mass = list("x"=16, "y"=11)
- nutriment_amt = 2
- nutriment_desc = list("bun" = 2, "metal" = 3)
-
-/obj/item/weapon/reagent_containers/food/snacks/roburger/New()
- ..()
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/roburgerbig
- name = "roburger"
- desc = "This massive patty looks like poison. Beep."
- icon_state = "roburger"
- filling_color = "#CCCCCC"
- volume = 100
- center_of_mass = list("x"=16, "y"=11)
-
-/obj/item/weapon/reagent_containers/food/snacks/roburgerbig/New()
- ..()
- bitesize = 0.1
-
-/obj/item/weapon/reagent_containers/food/snacks/xenoburger
- name = "xenoburger"
- desc = "Smells caustic. Tastes like heresy."
- icon_state = "xburger"
- filling_color = "#43DE18"
- center_of_mass = list("x"=16, "y"=11)
-
-/obj/item/weapon/reagent_containers/food/snacks/xenoburger/New()
- ..()
- reagents.add_reagent("protein", 8)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/clownburger
- name = "Clown Burger"
- desc = "This tastes funny..."
- icon_state = "clownburger"
- filling_color = "#FF00FF"
- center_of_mass = list("x"=17, "y"=12)
- nutriment_amt = 6
- nutriment_desc = list("bun" = 2, "clown shoe" = 3)
-
-/obj/item/weapon/reagent_containers/food/snacks/clownburger/New()
- ..()
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/mimeburger
- name = "Mime Burger"
- desc = "Its taste defies language."
- icon_state = "mimeburger"
- filling_color = "#FFFFFF"
- center_of_mass = list("x"=16, "y"=11)
- nutriment_amt = 6
- nutriment_desc = list("bun" = 2, "face paint" = 3)
-
-/obj/item/weapon/reagent_containers/food/snacks/mimeburger/New()
- ..()
- reagents.add_reagent("nutriment", 6)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/omelette
- name = "Omelette Du Fromage"
- desc = "That's all you can say!"
- icon_state = "omelette"
- trash = /obj/item/trash/plate
- filling_color = "#FFF9A8"
- center_of_mass = list("x"=16, "y"=13)
-
-/obj/item/weapon/reagent_containers/food/snacks/omelette/New()
- ..()
- reagents.add_reagent("protein", 8)
- bitesize = 1
-
-/obj/item/weapon/reagent_containers/food/snacks/muffin
- name = "Muffin"
- desc = "A delicious and spongy little cake"
- icon_state = "muffin"
- filling_color = "#E0CF9B"
- center_of_mass = list("x"=17, "y"=4)
- nutriment_amt = 6
- nutriment_desc = list("sweetness" = 3, "muffin" = 3)
-
-/obj/item/weapon/reagent_containers/food/snacks/muffin/New()
- ..()
- reagents.add_reagent("nutriment", 6)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/pie
- name = "Banana Cream Pie"
- desc = "Just like back home, on clown planet! HONK!"
- icon_state = "pie"
- trash = /obj/item/trash/plate
- filling_color = "#FBFFB8"
- center_of_mass = list("x"=16, "y"=13)
- nutriment_amt = 4
- nutriment_desc = list("pie" = 3, "cream" = 2)
-
-/obj/item/weapon/reagent_containers/food/snacks/pie/New()
- ..()
- reagents.add_reagent("banana",5)
- bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/pie/throw_impact(atom/hit_atom)
- ..()
- new/obj/effect/decal/cleanable/pie_smudge(src.loc)
- src.visible_message("\The [src.name] splats.","You hear a splat.")
- qdel(src)
-
-/obj/item/weapon/reagent_containers/food/snacks/berryclafoutis
- name = "Berry Clafoutis"
- desc = "No black birds, this is a good sign."
- icon_state = "berryclafoutis"
- trash = /obj/item/trash/plate
- center_of_mass = list("x"=16, "y"=13)
- nutriment_amt = 4
- nutriment_desc = list("sweetness" = 2, "pie" = 3)
-
-/obj/item/weapon/reagent_containers/food/snacks/berryclafoutis/New()
- ..()
- reagents.add_reagent("berryjuice", 5)
- bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/waffles
- name = "waffles"
- desc = "Mmm, waffles"
- icon_state = "waffles"
- trash = /obj/item/trash/waffles
- filling_color = "#E6DEB5"
- center_of_mass = list("x"=15, "y"=11)
- nutriment_amt = 8
- nutriment_desc = list("waffle" = 8)
-
-/obj/item/weapon/reagent_containers/food/snacks/waffles/New()
- ..()
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/eggplantparm
- name = "Eggplant Parmigiana"
- desc = "The only good recipe for eggplant."
- icon_state = "eggplantparm"
- trash = /obj/item/trash/plate
- filling_color = "#4D2F5E"
- center_of_mass = list("x"=16, "y"=11)
- nutriment_amt = 6
- nutriment_desc = list("cheese" = 3, "eggplant" = 3)
-
-/obj/item/weapon/reagent_containers/food/snacks/eggplantparm/New()
- ..()
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/soylentgreen
- name = "Soylent Green"
- desc = "Not made of people. Honest." //Totally people.
- icon_state = "soylent_green"
- trash = /obj/item/trash/waffles
- filling_color = "#B8E6B5"
- center_of_mass = list("x"=15, "y"=11)
-
-/obj/item/weapon/reagent_containers/food/snacks/soylentgreen/New()
- ..()
- reagents.add_reagent("protein", 10)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/soylenviridians
- name = "Soylen Virdians"
- desc = "Not made of people. Honest." //Actually honest for once.
- icon_state = "soylent_yellow"
- trash = /obj/item/trash/waffles
- filling_color = "#E6FA61"
- center_of_mass = list("x"=15, "y"=11)
- nutriment_amt = 10
- nutriment_desc = list("some sort of protein" = 10) //seasoned VERY well.
-
-/obj/item/weapon/reagent_containers/food/snacks/soylenviridians/New()
- ..()
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/meatpie
- name = "Meat-pie"
- icon_state = "meatpie"
- desc = "An old barber recipe, very delicious!"
- trash = /obj/item/trash/plate
- filling_color = "#948051"
- center_of_mass = list("x"=16, "y"=13)
-
-/obj/item/weapon/reagent_containers/food/snacks/meatpie/New()
- ..()
- reagents.add_reagent("protein", 10)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/tofupie
- name = "Tofu-pie"
- icon_state = "meatpie"
- desc = "A delicious tofu pie."
- trash = /obj/item/trash/plate
- filling_color = "#FFFEE0"
- center_of_mass = list("x"=16, "y"=13)
- nutriment_amt = 10
- nutriment_desc = list("tofu" = 2, "pie" = 8)
-
-/obj/item/weapon/reagent_containers/food/snacks/tofupie/New()
- ..()
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/amanita_pie
- name = "amanita pie"
- desc = "Sweet and tasty poison pie."
- icon_state = "amanita_pie"
- filling_color = "#FFCCCC"
- center_of_mass = list("x"=17, "y"=9)
- nutriment_amt = 5
- nutriment_desc = list("sweetness" = 3, "mushroom" = 3, "pie" = 2)
-
-/obj/item/weapon/reagent_containers/food/snacks/amanita_pie/New()
- ..()
- reagents.add_reagent("amatoxin", 3)
- reagents.add_reagent("psilocybin", 1)
- bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/plump_pie
- name = "plump pie"
- desc = "I bet you love stuff made out of plump helmets!"
- icon_state = "plump_pie"
- filling_color = "#B8279B"
- center_of_mass = list("x"=17, "y"=9)
- nutriment_amt = 8
- nutriment_desc = list("heartiness" = 2, "mushroom" = 3, "pie" = 3)
-
-/obj/item/weapon/reagent_containers/food/snacks/plump_pie/New()
- ..()
- if(prob(10))
- name = "exceptional plump pie"
- desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump pie!"
- reagents.add_reagent("nutriment", 8)
- reagents.add_reagent("tricordrazine", 5)
- bitesize = 2
- else
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/xemeatpie
- name = "Xeno-pie"
- icon_state = "xenomeatpie"
- desc = "A delicious meatpie. Probably heretical."
- trash = /obj/item/trash/plate
- filling_color = "#43DE18"
- center_of_mass = list("x"=16, "y"=13)
-
-/obj/item/weapon/reagent_containers/food/snacks/xemeatpie/New()
- ..()
- reagents.add_reagent("protein", 10)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/wingfangchu
- name = "Wing Fang Chu"
- desc = "A savory dish of alien wing wang in soy."
- icon_state = "wingfangchu"
- trash = /obj/item/trash/snack_bowl
- filling_color = "#43DE18"
- center_of_mass = list("x"=17, "y"=9)
-
-/obj/item/weapon/reagent_containers/food/snacks/wingfangchu/New()
- ..()
- reagents.add_reagent("protein", 6)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/human/kabob
- name = "-kabob"
- icon_state = "kabob"
- desc = "A human meat, on a stick."
- trash = /obj/item/stack/rods
- filling_color = "#A85340"
- center_of_mass = list("x"=17, "y"=15)
-
-/obj/item/weapon/reagent_containers/food/snacks/human/kabob/New()
- ..()
- reagents.add_reagent("protein", 8)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/monkeykabob
- name = "Meat-kabob"
- icon_state = "kabob"
- desc = "Delicious meat, on a stick."
- trash = /obj/item/stack/rods
- filling_color = "#A85340"
- center_of_mass = list("x"=17, "y"=15)
-
-/obj/item/weapon/reagent_containers/food/snacks/monkeykabob/New()
- ..()
- reagents.add_reagent("protein", 8)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/tofukabob
- name = "Tofu-kabob"
- icon_state = "kabob"
- desc = "Vegan meat, on a stick."
- trash = /obj/item/stack/rods
- filling_color = "#FFFEE0"
-
- center_of_mass = list("x"=17, "y"=15)
- nutriment_amt = 8
- nutriment_desc = list("tofu" = 3, "metal" = 1)
-
-/obj/item/weapon/reagent_containers/food/snacks/tofukabob/New()
- ..()
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/cubancarp
- name = "Cuban Carp"
- desc = "A sandwich that burns your tongue and then leaves it numb!"
- icon_state = "cubancarp"
- trash = /obj/item/trash/plate
- filling_color = "#E9ADFF"
- center_of_mass = list("x"=12, "y"=5)
- nutriment_amt = 3
- nutriment_desc = list("toasted bread" = 3)
-
-/obj/item/weapon/reagent_containers/food/snacks/cubancarp/New()
- ..()
- reagents.add_reagent("protein", 3)
- reagents.add_reagent("carpotoxin", 3)
- reagents.add_reagent("capsaicin", 3)
- bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/popcorn
- name = "Popcorn"
- desc = "Now let's find some cinema."
- icon_state = "popcorn"
- trash = /obj/item/trash/popcorn
- var/unpopped = 0
- filling_color = "#FFFAD4"
- center_of_mass = list("x"=16, "y"=8)
- nutriment_amt = 2
- nutriment_desc = list("popcorn" = 3)
-
-
-/obj/item/weapon/reagent_containers/food/snacks/popcorn/New()
- ..()
- unpopped = rand(1,10)
- bitesize = 0.1 //this snack is supposed to be eating during looooong time. And this it not dinner food! --rastaf0
-
-/obj/item/weapon/reagent_containers/food/snacks/popcorn/On_Consume()
- if(prob(unpopped)) //lol ...what's the point?
- usr << "You bite down on an un-popped kernel!"
- unpopped = max(0, unpopped-1)
- ..()
-
-/obj/item/weapon/reagent_containers/food/snacks/sosjerky
- name = "Scaredy's Private Reserve Beef Jerky"
- icon_state = "sosjerky"
- desc = "Beef jerky made from the finest space cows."
- trash = /obj/item/trash/sosjerky
- filling_color = "#631212"
- center_of_mass = list("x"=15, "y"=9)
-
-/obj/item/weapon/reagent_containers/food/snacks/sosjerky/New()
- ..()
- reagents.add_reagent("protein", 4)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/no_raisin
- name = "4no Raisins"
- icon_state = "4no_raisins"
- desc = "Best raisins in the universe. Not sure why."
- trash = /obj/item/trash/raisins
- filling_color = "#343834"
- center_of_mass = list("x"=15, "y"=4)
- nutriment_amt = 6
- nutriment_desc = list("dried raisins" = 6)
-
-/obj/item/weapon/reagent_containers/food/snacks/no_raisin/New()
- ..()
- reagents.add_reagent("nutriment", 6)
-
-/obj/item/weapon/reagent_containers/food/snacks/spacetwinkie
- name = "Space Twinkie"
- icon_state = "space_twinkie"
- desc = "Guaranteed to survive longer then you will."
- filling_color = "#FFE591"
- center_of_mass = list("x"=15, "y"=11)
-
-/obj/item/weapon/reagent_containers/food/snacks/spacetwinkie/New()
- ..()
- reagents.add_reagent("sugar", 4)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers
- name = "Cheesie Honkers"
- icon_state = "cheesie_honkers"
- desc = "Bite sized cheesie snacks that will honk all over your mouth"
- trash = /obj/item/trash/cheesie
- filling_color = "#FFA305"
- center_of_mass = list("x"=15, "y"=9)
- nutriment_amt = 4
- nutriment_desc = list("cheese" = 5, "chips" = 2)
-
-/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers/New()
- ..()
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/syndicake
- name = "Syndi-Cakes"
- icon_state = "syndi_cakes"
- desc = "An extremely moist snack cake that tastes just as good after being nuked."
- filling_color = "#FF5D05"
- center_of_mass = list("x"=16, "y"=10)
- trash = /obj/item/trash/syndi_cakes
- nutriment_amt = 4
- nutriment_desc = list("sweetness" = 3, "cake" = 1)
-
-/obj/item/weapon/reagent_containers/food/snacks/syndicake/New()
- ..()
- reagents.add_reagent("doctorsdelight", 5)
- bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/loadedbakedpotato
- name = "Loaded Baked Potato"
- desc = "Totally baked."
- icon_state = "loadedbakedpotato"
- filling_color = "#9C7A68"
- center_of_mass = list("x"=16, "y"=10)
- nutriment_amt = 3
- nutriment_desc = list("baked potato" = 3)
-
-/obj/item/weapon/reagent_containers/food/snacks/loadedbakedpotato/New()
- ..()
- reagents.add_reagent("protein", 3)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/fries
- name = "Space Fries"
- desc = "AKA: French Fries, Freedom Fries, etc."
- icon_state = "fries"
- trash = /obj/item/trash/plate
- filling_color = "#EDDD00"
- center_of_mass = list("x"=16, "y"=11)
- nutriment_amt = 4
- nutriment_desc = list("fresh fries" = 4)
-
-/obj/item/weapon/reagent_containers/food/snacks/fries/New()
- ..()
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/mashedpotato
- name = "Mashed Potato"
- desc = "Pillowy mounds of mashed potato."
- icon_state = "mashedpotato"
- trash = /obj/item/trash/plate
- filling_color = "#EDDD00"
- center_of_mass = list("x"=16, "y"=11)
- nutriment_amt = 4
- nutriment_desc = list("fluffy mashed potatoes" = 4)
-
-/obj/item/weapon/reagent_containers/food/snacks/mashedpotato/New()
- ..()
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/bangersandmash
- name = "Bangers and Mash"
- desc = "An English treat."
- icon_state = "bangersandmash"
- trash = /obj/item/trash/plate
- filling_color = "#EDDD00"
- center_of_mass = list("x"=16, "y"=11)
- nutriment_amt = 4
- nutriment_desc = list("fluffy potato" = 3, "sausage" = 2)
-
-/obj/item/weapon/reagent_containers/food/snacks/bangersandmash/New()
- ..()
- reagents.add_reagent("protein", 3)
- bitesize = 4
-
-/obj/item/weapon/reagent_containers/food/snacks/cheesymash
- name = "Cheesy Mashed Potato"
- desc = "The only thing that could make mash better."
- icon_state = "cheesymash"
- trash = /obj/item/trash/plate
- filling_color = "#EDDD00"
- center_of_mass = list("x"=16, "y"=11)
- nutriment_amt = 4
- nutriment_desc = list("cheesy potato" = 4)
-
-/obj/item/weapon/reagent_containers/food/snacks/cheesymash/New()
- ..()
- reagents.add_reagent("protein", 3)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/blackpudding
- name = "Black Pudding"
- desc = "This doesn't seem like a pudding at all."
- icon_state = "blackpudding"
- filling_color = "#FF0000"
- center_of_mass = list("x"=16, "y"=7)
-
-/obj/item/weapon/reagent_containers/food/snacks/blackpudding/New()
- ..()
- reagents.add_reagent("protein", 2)
- reagents.add_reagent("blood", 5)
- bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/soydope
- name = "Soy Dope"
- desc = "Dope from a soy."
- icon_state = "soydope"
- trash = /obj/item/trash/plate
- filling_color = "#C4BF76"
- center_of_mass = list("x"=16, "y"=10)
- nutriment_amt = 2
- nutriment_desc = list("slime" = 2, "soy" = 2)
-
-/obj/item/weapon/reagent_containers/food/snacks/soydope/New()
- ..()
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/spagetti
- name = "Spaghetti"
- desc = "A bundle of raw spaghetti."
- icon_state = "spagetti"
- filling_color = "#EDDD00"
- center_of_mass = list("x"=16, "y"=16)
- nutriment_amt = 1
- nutriment_desc = list("noodles" = 2)
-
-/obj/item/weapon/reagent_containers/food/snacks/spagetti/New()
- ..()
- bitesize = 1
-
-/obj/item/weapon/reagent_containers/food/snacks/cheesyfries
- name = "Cheesy Fries"
- desc = "Fries. Covered in cheese. Duh."
- icon_state = "cheesyfries"
- trash = /obj/item/trash/plate
- filling_color = "#EDDD00"
- center_of_mass = list("x"=16, "y"=11)
- nutriment_amt = 4
- nutriment_desc = list("fresh fries" = 3, "cheese" = 3)
-
-/obj/item/weapon/reagent_containers/food/snacks/cheesyfries/New()
- ..()
- reagents.add_reagent("protein", 2)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/fortunecookie
- name = "Fortune cookie"
- desc = "A true prophecy in each cookie!"
- icon_state = "fortune_cookie"
- filling_color = "#E8E79E"
- center_of_mass = list("x"=15, "y"=14)
- nutriment_amt = 3
- nutriment_desc = list("fortune cookie" = 2)
-
-/obj/item/weapon/reagent_containers/food/snacks/fortunecookie/New()
- ..()
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/badrecipe
- name = "Burned mess"
- desc = "Someone should be demoted from chef for this."
- icon_state = "badrecipe"
- filling_color = "#211F02"
- center_of_mass = list("x"=16, "y"=12)
-
-/obj/item/weapon/reagent_containers/food/snacks/badrecipe/New()
- ..()
- reagents.add_reagent("toxin", 1)
- reagents.add_reagent("carbon", 3)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/meatsteak
- name = "Meat steak"
- desc = "A piece of hot spicy meat."
- icon_state = "meatstake"
- trash = /obj/item/trash/plate
- filling_color = "#7A3D11"
- center_of_mass = list("x"=16, "y"=13)
-
-/obj/item/weapon/reagent_containers/food/snacks/meatsteak/New()
- ..()
- reagents.add_reagent("protein", 4)
- reagents.add_reagent("sodiumchloride", 1)
- reagents.add_reagent("blackpepper", 1)
- bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/spacylibertyduff
- name = "Spacy Liberty Duff"
- desc = "Jello gelatin, from Alfred Hubbard's cookbook"
- icon_state = "spacylibertyduff"
- trash = /obj/item/trash/snack_bowl
- filling_color = "#42B873"
- center_of_mass = list("x"=16, "y"=8)
- nutriment_amt = 6
- nutriment_desc = list("mushroom" = 6)
-
-/obj/item/weapon/reagent_containers/food/snacks/spacylibertyduff/New()
- ..()
- reagents.add_reagent("psilocybin", 6)
- bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/amanitajelly
- name = "Amanita Jelly"
- desc = "Looks curiously toxic"
- icon_state = "amanitajelly"
- trash = /obj/item/trash/snack_bowl
- filling_color = "#ED0758"
- center_of_mass = list("x"=16, "y"=5)
- nutriment_amt = 6
- nutriment_desc = list("jelly" = 3, "mushroom" = 3)
-
-/obj/item/weapon/reagent_containers/food/snacks/amanitajelly/New()
- ..()
- reagents.add_reagent("amatoxin", 6)
- reagents.add_reagent("psilocybin", 3)
- bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/poppypretzel
- name = "Poppy pretzel"
- desc = "It's all twisted up!"
- icon_state = "poppypretzel"
- bitesize = 2
- filling_color = "#916E36"
- center_of_mass = list("x"=16, "y"=10)
- nutriment_amt = 5
- nutriment_desc = list("poppy seeds" = 2, "pretzel" = 3)
-
-/obj/item/weapon/reagent_containers/food/snacks/poppypretzel/New()
- ..()
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/meatballsoup
- name = "Meatball soup"
- desc = "You've got balls kid, BALLS!"
- icon_state = "meatballsoup"
- trash = /obj/item/trash/snack_bowl
- filling_color = "#785210"
- center_of_mass = list("x"=16, "y"=8)
-
-/obj/item/weapon/reagent_containers/food/snacks/meatballsoup/New()
- ..()
- reagents.add_reagent("protein", 8)
- reagents.add_reagent("water", 5)
- bitesize = 5
-
-/obj/item/weapon/reagent_containers/food/snacks/slimesoup
- name = "slime soup"
- desc = "If no water is available, you may substitute tears."
- icon_state = "slimesoup" //nonexistant?
- filling_color = "#C4DBA0"
-
-/obj/item/weapon/reagent_containers/food/snacks/slimesoup/New()
- ..()
- reagents.add_reagent("slimejelly", 5)
- reagents.add_reagent("water", 10)
- bitesize = 5
-
-/obj/item/weapon/reagent_containers/food/snacks/bloodsoup
- name = "Tomato soup"
- desc = "Smells like copper."
- icon_state = "tomatosoup"
- filling_color = "#FF0000"
- center_of_mass = list("x"=16, "y"=7)
-
-/obj/item/weapon/reagent_containers/food/snacks/bloodsoup/New()
- ..()
- reagents.add_reagent("protein", 2)
- reagents.add_reagent("blood", 10)
- reagents.add_reagent("water", 5)
- bitesize = 5
-
-/obj/item/weapon/reagent_containers/food/snacks/clownstears
- name = "Clown's Tears"
- desc = "Not very funny."
- icon_state = "clownstears"
- filling_color = "#C4FBFF"
- center_of_mass = list("x"=16, "y"=7)
- nutriment_amt = 4
- nutriment_desc = list("salt" = 1, "the worst joke" = 3)
-
-/obj/item/weapon/reagent_containers/food/snacks/clownstears/New()
- ..()
- reagents.add_reagent("banana", 5)
- reagents.add_reagent("water", 10)
- bitesize = 5
-
-/obj/item/weapon/reagent_containers/food/snacks/vegetablesoup
- name = "Vegetable soup"
- desc = "A true vegan meal" //TODO
- icon_state = "vegetablesoup"
- trash = /obj/item/trash/snack_bowl
- filling_color = "#AFC4B5"
- center_of_mass = list("x"=16, "y"=8)
- nutriment_amt = 8
- nutriment_desc = list("carot" = 2, "corn" = 2, "eggplant" = 2, "potato" = 2)
-
-/obj/item/weapon/reagent_containers/food/snacks/vegetablesoup/New()
- ..()
- reagents.add_reagent("water", 5)
- bitesize = 5
-
-/obj/item/weapon/reagent_containers/food/snacks/nettlesoup
- name = "Nettle soup"
- desc = "To think, the botanist would've beat you to death with one of these."
- icon_state = "nettlesoup"
- trash = /obj/item/trash/snack_bowl
- filling_color = "#AFC4B5"
- center_of_mass = list("x"=16, "y"=7)
- nutriment_amt = 8
- nutriment_desc = list("salad" = 4, "egg" = 2, "potato" = 2)
-
-/obj/item/weapon/reagent_containers/food/snacks/nettlesoup/New()
- ..()
- reagents.add_reagent("water", 5)
- reagents.add_reagent("tricordrazine", 5)
- bitesize = 5
-
-/obj/item/weapon/reagent_containers/food/snacks/mysterysoup
- name = "Mystery soup"
- desc = "The mystery is, why aren't you eating it?"
- icon_state = "mysterysoup"
- trash = /obj/item/trash/snack_bowl
- filling_color = "#F082FF"
- center_of_mass = list("x"=16, "y"=6)
- nutriment_amt = 1
- nutriment_desc = list("backwash" = 1)
-
-/obj/item/weapon/reagent_containers/food/snacks/mysterysoup/New()
- ..()
- var/mysteryselect = pick(1,2,3,4,5,6,7,8,9,10)
- switch(mysteryselect)
- if(1)
- reagents.add_reagent("nutriment", 6)
- reagents.add_reagent("capsaicin", 3)
- reagents.add_reagent("tomatojuice", 2)
- if(2)
- reagents.add_reagent("nutriment", 6)
- reagents.add_reagent("frostoil", 3)
- reagents.add_reagent("tomatojuice", 2)
- if(3)
- reagents.add_reagent("nutriment", 5)
- reagents.add_reagent("water", 5)
- reagents.add_reagent("tricordrazine", 5)
- if(4)
- reagents.add_reagent("nutriment", 5)
- reagents.add_reagent("water", 10)
- if(5)
- reagents.add_reagent("nutriment", 2)
- reagents.add_reagent("banana", 10)
- if(6)
- reagents.add_reagent("nutriment", 6)
- reagents.add_reagent("blood", 10)
- if(7)
- reagents.add_reagent("slimejelly", 10)
- reagents.add_reagent("water", 10)
- if(8)
- reagents.add_reagent("carbon", 10)
- reagents.add_reagent("toxin", 10)
- if(9)
- reagents.add_reagent("nutriment", 5)
- reagents.add_reagent("tomatojuice", 10)
- if(10)
- reagents.add_reagent("nutriment", 6)
- reagents.add_reagent("tomatojuice", 5)
- reagents.add_reagent("imidazoline", 5)
- bitesize = 5
-
-/obj/item/weapon/reagent_containers/food/snacks/wishsoup
- name = "Wish Soup"
- desc = "I wish this was soup."
- icon_state = "wishsoup"
- trash = /obj/item/trash/snack_bowl
- filling_color = "#D1F4FF"
- center_of_mass = list("x"=16, "y"=11)
-
-/obj/item/weapon/reagent_containers/food/snacks/wishsoup/New()
- ..()
- reagents.add_reagent("water", 10)
- bitesize = 5
- if(prob(25))
- src.desc = "A wish come true!"
- reagents.add_reagent("nutriment", 8, list("something good" = 8))
-
-/obj/item/weapon/reagent_containers/food/snacks/hotchili
- name = "Hot Chili"
- desc = "A five alarm Texan Chili!"
- icon_state = "hotchili"
- trash = /obj/item/trash/snack_bowl
- filling_color = "#FF3C00"
- center_of_mass = list("x"=15, "y"=9)
- nutriment_amt = 3
- nutriment_desc = list("chilli peppers" = 3)
-
-/obj/item/weapon/reagent_containers/food/snacks/hotchili/New()
- ..()
- reagents.add_reagent("protein", 3)
- reagents.add_reagent("capsaicin", 3)
- reagents.add_reagent("tomatojuice", 2)
- bitesize = 5
-
-/obj/item/weapon/reagent_containers/food/snacks/coldchili
- name = "Cold Chili"
- desc = "This slush is barely a liquid!"
- icon_state = "coldchili"
- filling_color = "#2B00FF"
- center_of_mass = list("x"=15, "y"=9)
- trash = /obj/item/trash/snack_bowl
- nutriment_amt = 3
- nutriment_desc = list("ice peppers" = 3)
-
-/obj/item/weapon/reagent_containers/food/snacks/coldchili/New()
- ..()
- reagents.add_reagent("protein", 3)
- reagents.add_reagent("frostoil", 3)
- reagents.add_reagent("tomatojuice", 2)
- bitesize = 5
-
-/obj/item/weapon/reagent_containers/food/snacks/monkeycube
- name = "monkey cube"
- desc = "Just add water!"
- flags = OPENCONTAINER
- icon_state = "monkeycube"
- bitesize = 12
- filling_color = "#ADAC7F"
- center_of_mass = list("x"=16, "y"=14)
-
- var/wrapped = 0
- var/monkey_type = "Monkey"
-
-/obj/item/weapon/reagent_containers/food/snacks/monkeycube/New()
- ..()
- reagents.add_reagent("protein", 10)
-
-/obj/item/weapon/reagent_containers/food/snacks/monkeycube/attack_self(mob/user as mob)
- if(wrapped)
- Unwrap(user)
-
-/obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Expand()
- src.visible_message("\The [src] expands!")
- var/mob/living/carbon/human/H = new(get_turf(src))
- H.set_species(monkey_type)
- H.real_name = H.species.get_random_name()
- H.name = H.real_name
- if(ismob(loc))
- var/mob/M = loc
- M.unEquip(src)
- qdel(src)
- return 1
-
-/obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Unwrap(mob/user as mob)
- icon_state = "monkeycube"
- desc = "Just add water!"
- to_chat(user, "You unwrap the cube.")
- wrapped = 0
- flags |= OPENCONTAINER
- return
-
-/obj/item/weapon/reagent_containers/food/snacks/monkeycube/On_Consume(var/mob/M)
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- H.visible_message("A screeching creature bursts out of [M]'s chest!")
- var/obj/item/organ/external/organ = H.get_organ(BP_TORSO)
- organ.take_damage(50, 0, 0, "Animal escaping the ribcage")
- Expand()
-
-/obj/item/weapon/reagent_containers/food/snacks/monkeycube/on_reagent_change()
- if(reagents.has_reagent("water"))
- Expand()
-
-/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped
- desc = "Still wrapped in some paper."
- icon_state = "monkeycubewrap"
- flags = 0
- wrapped = 1
-
-/obj/item/weapon/reagent_containers/food/snacks/monkeycube/farwacube
- name = "farwa cube"
- monkey_type = "Farwa"
-
-/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/farwacube
- name = "farwa cube"
- monkey_type = "Farwa"
-
-/obj/item/weapon/reagent_containers/food/snacks/monkeycube/stokcube
- name = "stok cube"
- monkey_type = "Stok"
-
-/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/stokcube
- name = "stok cube"
- monkey_type = "Stok"
-
-/obj/item/weapon/reagent_containers/food/snacks/monkeycube/neaeracube
- name = "neaera cube"
- monkey_type = "Neaera"
-
-/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/neaeracube
- name = "neaera cube"
- monkey_type = "Neaera"
-
-/obj/item/weapon/reagent_containers/food/snacks/spellburger
- name = "Spell Burger"
- desc = "This is absolutely Ei Nath."
- icon_state = "spellburger"
- filling_color = "#D505FF"
- nutriment_amt = 6
- nutriment_desc = list("magic" = 3, "buns" = 3)
-
-/obj/item/weapon/reagent_containers/food/snacks/spellburger/New()
- ..()
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/bigbiteburger
- name = "Big Bite Burger"
- desc = "Forget the Big Mac. THIS is the future!"
- icon_state = "bigbiteburger"
- filling_color = "#E3D681"
- center_of_mass = list("x"=16, "y"=11)
- nutriment_amt = 4
- nutriment_desc = list("buns" = 4)
-
-/obj/item/weapon/reagent_containers/food/snacks/bigbiteburger/New()
- ..()
- reagents.add_reagent("protein", 10)
- bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/enchiladas
- name = "Enchiladas"
- desc = "Viva La Mexico!"
- icon_state = "enchiladas"
- trash = /obj/item/trash/tray
- filling_color = "#A36A1F"
- center_of_mass = list("x"=16, "y"=13)
- nutriment_amt = 2
- nutriment_desc = list("tortilla" = 3, "corn" = 3)
-
-/obj/item/weapon/reagent_containers/food/snacks/enchiladas/New()
- ..()
- reagents.add_reagent("protein", 6)
- reagents.add_reagent("capsaicin", 6)
- bitesize = 4
-
-/obj/item/weapon/reagent_containers/food/snacks/monkeysdelight
- name = "monkey's Delight"
- desc = "Eeee Eee!"
- icon_state = "monkeysdelight"
- trash = /obj/item/trash/tray
- filling_color = "#5C3C11"
- center_of_mass = list("x"=16, "y"=13)
-
-/obj/item/weapon/reagent_containers/food/snacks/monkeysdelight/New()
- ..()
- reagents.add_reagent("protein", 10)
- reagents.add_reagent("banana", 5)
- reagents.add_reagent("blackpepper", 1)
- reagents.add_reagent("sodiumchloride", 1)
- bitesize = 6
-
-/obj/item/weapon/reagent_containers/food/snacks/baguette
- name = "Baguette"
- desc = "Bon appetit!"
- icon_state = "baguette"
- filling_color = "#E3D796"
- center_of_mass = list("x"=18, "y"=12)
- nutriment_amt = 6
- nutriment_desc = list("french bread" = 6)
-
-/obj/item/weapon/reagent_containers/food/snacks/baguette/New()
- ..()
- reagents.add_reagent("blackpepper", 1)
- reagents.add_reagent("sodiumchloride", 1)
- bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/fishandchips
- name = "Fish and Chips"
- desc = "I do say so myself chap."
- icon_state = "fishandchips"
- filling_color = "#E3D796"
- center_of_mass = list("x"=16, "y"=16)
- nutriment_amt = 3
- nutriment_desc = list("salt" = 1, "chips" = 3)
-
-/obj/item/weapon/reagent_containers/food/snacks/fishandchips/New()
- ..()
- reagents.add_reagent("protein", 3)
- reagents.add_reagent("carpotoxin", 3)
- bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/sandwich
- name = "Sandwich"
- desc = "A grand creation of meat, cheese, bread, and several leaves of lettuce! Arthur Dent would be proud."
- icon_state = "sandwich"
- trash = /obj/item/trash/plate
- filling_color = "#D9BE29"
- center_of_mass = list("x"=16, "y"=4)
- nutriment_amt = 3
- nutriment_desc = list("bread" = 3, "cheese" = 3)
-
-/obj/item/weapon/reagent_containers/food/snacks/sandwich/New()
- ..()
- reagents.add_reagent("protein", 3)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/toastedsandwich
- name = "Toasted Sandwich"
- desc = "Now if you only had a pepper bar."
- icon_state = "toastedsandwich"
- trash = /obj/item/trash/plate
- filling_color = "#D9BE29"
- center_of_mass = list("x"=16, "y"=4)
- nutriment_amt = 3
- nutriment_desc = list("toasted bread" = 3, "cheese" = 3)
-
-/obj/item/weapon/reagent_containers/food/snacks/toastedsandwich/New()
- ..()
- reagents.add_reagent("protein", 3)
- reagents.add_reagent("carbon", 2)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/grilledcheese
- name = "Grilled Cheese Sandwich"
- desc = "Goes great with Tomato soup!"
- icon_state = "toastedsandwich"
- trash = /obj/item/trash/plate
- filling_color = "#D9BE29"
- nutriment_amt = 3
- nutriment_desc = list("toasted bread" = 3, "cheese" = 3)
-
-/obj/item/weapon/reagent_containers/food/snacks/grilledcheese/New()
- ..()
- reagents.add_reagent("protein", 4)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/tomatosoup
- name = "Tomato Soup"
- desc = "Drinking this feels like being a vampire! A tomato vampire..."
- icon_state = "tomatosoup"
- trash = /obj/item/trash/snack_bowl
- filling_color = "#D92929"
- center_of_mass = list("x"=16, "y"=7)
- nutriment_amt = 5
- nutriment_desc = list("soup" = 5)
-
-/obj/item/weapon/reagent_containers/food/snacks/tomatosoup/New()
- ..()
- reagents.add_reagent("tomatojuice", 10)
- bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/onionsoup
- name = "Onion Soup"
- desc = "A soup with layers."
- icon_state = "onionsoup"
- trash = /obj/item/trash/snack_bowl
- filling_color = "#E0C367"
- center_of_mass = list("x"=16, "y"=7)
- nutriment_amt = 5
- nutriment_desc = list("onion" = 2, "soup" = 2)
-
-/obj/item/weapon/reagent_containers/food/snacks/onionsoup/New()
- ..()
- bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/onionrings
- name = "Onion Rings"
- desc = "Crispy rings."
- icon_state = "onionrings"
- trash = /obj/item/trash/plate
- filling_color = "#E0C367"
- center_of_mass = list("x"=16, "y"=7)
- nutriment_amt = 5
- nutriment_desc = list("onion" = 2)
-
-/obj/item/weapon/reagent_containers/food/snacks/onionrings/New()
- ..()
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/rofflewaffles
- name = "Roffle Waffles"
- desc = "Waffles from Roffle. Co."
- icon_state = "rofflewaffles"
- trash = /obj/item/trash/waffles
- filling_color = "#FF00F7"
- center_of_mass = list("x"=15, "y"=11)
- nutriment_amt = 8
- nutriment_desc = list("waffle" = 7, "sweetness" = 1)
-
-/obj/item/weapon/reagent_containers/food/snacks/rofflewaffles/New()
- ..()
- reagents.add_reagent("psilocybin", 8)
- bitesize = 4
-
-/obj/item/weapon/reagent_containers/food/snacks/stew
- name = "Stew"
- desc = "A nice and warm stew. Healthy and strong."
- icon_state = "stew"
- filling_color = "#9E673A"
- center_of_mass = list("x"=16, "y"=5)
- nutriment_amt = 6
- nutriment_desc = list("tomato" = 2, "potato" = 2, "carrot" = 2, "eggplant" = 2, "mushroom" = 2)
-
-/obj/item/weapon/reagent_containers/food/snacks/stew/New()
- ..()
- reagents.add_reagent("protein", 4)
- reagents.add_reagent("tomatojuice", 5)
- reagents.add_reagent("imidazoline", 5)
- reagents.add_reagent("water", 5)
- bitesize = 10
-
-/obj/item/weapon/reagent_containers/food/snacks/jelliedtoast
- name = "Jellied Toast"
- desc = "A slice of bread covered with delicious jam."
- icon_state = "jellytoast"
- trash = /obj/item/trash/plate
- filling_color = "#B572AB"
- center_of_mass = list("x"=16, "y"=8)
- nutriment_amt = 1
- nutriment_desc = list("toasted bread" = 2)
-
-/obj/item/weapon/reagent_containers/food/snacks/jelliedtoast/New()
- ..()
- bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/jelliedtoast/cherry/New()
- ..()
- reagents.add_reagent("cherryjelly", 5)
-
-/obj/item/weapon/reagent_containers/food/snacks/jelliedtoast/slime/New()
- ..()
- reagents.add_reagent("slimejelly", 5)
-
-/obj/item/weapon/reagent_containers/food/snacks/jellyburger
- name = "Jelly Burger"
- desc = "Culinary delight..?"
- icon_state = "jellyburger"
- filling_color = "#B572AB"
- center_of_mass = list("x"=16, "y"=11)
- nutriment_amt = 5
- nutriment_desc = list("buns" = 5)
-
-/obj/item/weapon/reagent_containers/food/snacks/jellyburger/New()
- ..()
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/jellyburger/slime/New()
- ..()
- reagents.add_reagent("slimejelly", 5)
-
-/obj/item/weapon/reagent_containers/food/snacks/jellyburger/cherry/New()
- ..()
- reagents.add_reagent("cherryjelly", 5)
-
-/obj/item/weapon/reagent_containers/food/snacks/milosoup
- name = "Milosoup"
- desc = "The universes best soup! Yum!!!"
- icon_state = "milosoup"
- trash = /obj/item/trash/snack_bowl
- center_of_mass = list("x"=16, "y"=7)
- nutriment_amt = 8
- nutriment_desc = list("soy" = 8)
-
-/obj/item/weapon/reagent_containers/food/snacks/milosoup/New()
- ..()
- reagents.add_reagent("water", 5)
- bitesize = 4
-
-/obj/item/weapon/reagent_containers/food/snacks/stewedsoymeat
- name = "Stewed Soy Meat"
- desc = "Even non-vegetarians will LOVE this!"
- icon_state = "stewedsoymeat"
- trash = /obj/item/trash/plate
- center_of_mass = list("x"=16, "y"=10)
- nutriment_amt = 8
- nutriment_desc = list("soy" = 4, "tomato" = 4)
-
-/obj/item/weapon/reagent_containers/food/snacks/stewedsoymeat/New()
- ..()
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/boiledspagetti
- name = "Boiled Spaghetti"
- desc = "A plain dish of noodles, this sucks."
- icon_state = "spagettiboiled"
- trash = /obj/item/trash/plate
- filling_color = "#FCEE81"
- center_of_mass = list("x"=16, "y"=10)
- nutriment_amt = 2
- nutriment_desc = list("noodles" = 2)
-
-/obj/item/weapon/reagent_containers/food/snacks/boiledspagetti/New()
- ..()
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/boiledrice
- name = "Boiled Rice"
- desc = "A boring dish of boring rice."
- icon_state = "boiledrice"
- trash = /obj/item/trash/snack_bowl
- filling_color = "#FFFBDB"
- center_of_mass = list("x"=17, "y"=11)
- nutriment_amt = 2
- nutriment_desc = list("rice" = 2)
-
-/obj/item/weapon/reagent_containers/food/snacks/boiledrice/New()
- ..()
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/ricepudding
- name = "Rice Pudding"
- desc = "Where's the jam?"
- icon_state = "rpudding"
- trash = /obj/item/trash/snack_bowl
- filling_color = "#FFFBDB"
- center_of_mass = list("x"=17, "y"=11)
- nutriment_amt = 4
- nutriment_desc = list("rice" = 2)
-
-/obj/item/weapon/reagent_containers/food/snacks/ricepudding/New()
- ..()
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/pastatomato
- name = "Spaghetti"
- desc = "Spaghetti and crushed tomatoes. Just like your abusive father used to make!"
- icon_state = "pastatomato"
- trash = /obj/item/trash/plate
- filling_color = "#DE4545"
- center_of_mass = list("x"=16, "y"=10)
- nutriment_amt = 6
- nutriment_desc = list("tomato" = 3, "noodles" = 3)
-
-/obj/item/weapon/reagent_containers/food/snacks/pastatomato/New()
- ..()
- reagents.add_reagent("tomatojuice", 10)
- bitesize = 4
-
-/obj/item/weapon/reagent_containers/food/snacks/meatballspagetti
- name = "Spaghetti & Meatballs"
- desc = "Now thats a nic'e meatball!"
- icon_state = "meatballspagetti"
- trash = /obj/item/trash/plate
- filling_color = "#DE4545"
- center_of_mass = list("x"=16, "y"=10)
- nutriment_amt = 4
- nutriment_desc = list("noodles" = 4)
-
-/obj/item/weapon/reagent_containers/food/snacks/meatballspagetti/New()
- ..()
- reagents.add_reagent("protein", 4)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/spesslaw
- name = "Spesslaw"
- desc = "A lawyers favourite"
- icon_state = "spesslaw"
- filling_color = "#DE4545"
- center_of_mass = list("x"=16, "y"=10)
- nutriment_amt = 4
- nutriment_desc = list("noodles" = 4)
-
-/obj/item/weapon/reagent_containers/food/snacks/spesslaw/New()
- ..()
- reagents.add_reagent("protein", 4)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/carrotfries
- name = "Carrot Fries"
- desc = "Tasty fries from fresh Carrots."
- icon_state = "carrotfries"
- trash = /obj/item/trash/plate
- filling_color = "#FAA005"
- center_of_mass = list("x"=16, "y"=11)
- nutriment_amt = 3
- nutriment_desc = list("carrot" = 3, "salt" = 1)
-
-/obj/item/weapon/reagent_containers/food/snacks/carrotfries/New()
- ..()
- reagents.add_reagent("imidazoline", 3)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/superbiteburger
- name = "Super Bite Burger"
- desc = "This is a mountain of a burger. FOOD!"
- icon_state = "superbiteburger"
- filling_color = "#CCA26A"
- center_of_mass = list("x"=16, "y"=3)
- nutriment_amt = 25
- nutriment_desc = list("buns" = 25)
-
-/obj/item/weapon/reagent_containers/food/snacks/superbiteburger/New()
- ..()
- reagents.add_reagent("protein", 25)
- bitesize = 10
-
-/obj/item/weapon/reagent_containers/food/snacks/candiedapple
- name = "Candied Apple"
- desc = "An apple coated in sugary sweetness."
- icon_state = "candiedapple"
- filling_color = "#F21873"
- center_of_mass = list("x"=15, "y"=13)
- nutriment_amt = 3
- nutriment_desc = list("apple" = 3, "caramel" = 3, "sweetness" = 2)
-
-/obj/item/weapon/reagent_containers/food/snacks/candiedapple/New()
- ..()
- bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/applepie
- name = "Apple Pie"
- desc = "A pie containing sweet sweet love... or apple."
- icon_state = "applepie"
- filling_color = "#E0EDC5"
- center_of_mass = list("x"=16, "y"=13)
- nutriment_amt = 4
- nutriment_desc = list("sweetness" = 2, "apple" = 2, "pie" = 2)
-
-/obj/item/weapon/reagent_containers/food/snacks/applepie/New()
- ..()
- bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/cherrypie
- name = "Cherry Pie"
- desc = "Taste so good, make a grown man cry."
- icon_state = "cherrypie"
- filling_color = "#FF525A"
- center_of_mass = list("x"=16, "y"=11)
- nutriment_amt = 4
- nutriment_desc = list("sweetness" = 2, "cherry" = 2, "pie" = 2)
-
-/obj/item/weapon/reagent_containers/food/snacks/cherrypie/New()
- ..()
- bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/twobread
- name = "Two Bread"
- desc = "It is very bitter and winy."
- icon_state = "twobread"
- filling_color = "#DBCC9A"
- center_of_mass = list("x"=15, "y"=12)
- nutriment_amt = 2
- nutriment_desc = list("sourness" = 2, "bread" = 2)
-
-/obj/item/weapon/reagent_containers/food/snacks/twobread/New()
- ..()
- bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/jellysandwich
- name = "Jelly Sandwich"
- desc = "You wish you had some peanut butter to go with this..."
- icon_state = "jellysandwich"
- trash = /obj/item/trash/plate
- filling_color = "#9E3A78"
- center_of_mass = list("x"=16, "y"=8)
- nutriment_amt = 2
- nutriment_desc = list("bread" = 2)
-
-/obj/item/weapon/reagent_containers/food/snacks/jellysandwich/New()
- ..()
- bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/jellysandwich/slime/New()
- ..()
- reagents.add_reagent("slimejelly", 5)
-
-/obj/item/weapon/reagent_containers/food/snacks/jellysandwich/cherry/New()
- ..()
- reagents.add_reagent("cherryjelly", 5)
-
-/obj/item/weapon/reagent_containers/food/snacks/boiledslimecore
- name = "Boiled slime Core"
- desc = "A boiled red thing."
- icon_state = "boiledslimecore" //nonexistant?
-
-/obj/item/weapon/reagent_containers/food/snacks/boiledslimecore/New()
- ..()
- reagents.add_reagent("slimejelly", 5)
- bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/mint
- name = "mint"
- desc = "it is only wafer thin."
- icon_state = "mint"
- filling_color = "#F2F2F2"
- center_of_mass = list("x"=16, "y"=14)
-
-/obj/item/weapon/reagent_containers/food/snacks/mint/New()
- ..()
- reagents.add_reagent("mint", 1)
- bitesize = 1
-
-/obj/item/weapon/reagent_containers/food/snacks/mushroomsoup
- name = "chantrelle soup"
- desc = "A delicious and hearty mushroom soup."
- icon_state = "mushroomsoup"
- trash = /obj/item/trash/snack_bowl
- filling_color = "#E386BF"
- center_of_mass = list("x"=17, "y"=10)
- nutriment_amt = 8
- nutriment_desc = list("mushroom" = 8, "milk" = 2)
-
-/obj/item/weapon/reagent_containers/food/snacks/mushroomsoup/New()
- ..()
- bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit
- name = "plump helmet biscuit"
- desc = "This is a finely-prepared plump helmet biscuit. The ingredients are exceptionally minced plump helmet, and well-minced dwarven wheat flour."
- icon_state = "phelmbiscuit"
- filling_color = "#CFB4C4"
- center_of_mass = list("x"=16, "y"=13)
- nutriment_amt = 5
- nutriment_desc = list("mushroom" = 4)
-
-/obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit/New()
- ..()
- if(prob(10))
- name = "exceptional plump helmet biscuit"
- desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump helmet biscuit!"
- reagents.add_reagent("nutriment", 8)
- bitesize = 2
- else
- reagents.add_reagent("nutriment", 5)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/chawanmushi
- name = "chawanmushi"
- desc = "A legendary egg custard that makes friends out of enemies. Probably too hot for a cat to eat."
- icon_state = "chawanmushi"
- trash = /obj/item/trash/snack_bowl
- filling_color = "#F0F2E4"
- center_of_mass = list("x"=17, "y"=10)
-
-/obj/item/weapon/reagent_containers/food/snacks/chawanmushi/New()
- ..()
- reagents.add_reagent("protein", 5)
- bitesize = 1
-
-/obj/item/weapon/reagent_containers/food/snacks/beetsoup
- name = "beet soup"
- desc = "Wait, how do you spell it again..?"
- icon_state = "beetsoup"
- trash = /obj/item/trash/snack_bowl
- filling_color = "#FAC9FF"
- center_of_mass = list("x"=15, "y"=8)
- nutriment_amt = 8
- nutriment_desc = list("tomato" = 4, "beet" = 4)
-
-/obj/item/weapon/reagent_containers/food/snacks/beetsoup/New()
- ..()
- name = pick(list("borsch","bortsch","borstch","borsh","borshch","borscht"))
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/tossedsalad
- name = "tossed salad"
- desc = "A proper salad, basic and simple, with little bits of carrot, tomato and apple intermingled. Vegan!"
- icon_state = "herbsalad"
- trash = /obj/item/trash/snack_bowl
- filling_color = "#76B87F"
- center_of_mass = list("x"=17, "y"=11)
- nutriment_amt = 8
- nutriment_desc = list("salad" = 2, "tomato" = 2, "carrot" = 2, "apple" = 2)
-
-/obj/item/weapon/reagent_containers/food/snacks/tossedsalad/New()
- ..()
- bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/validsalad
- name = "valid salad"
- desc = "It's just a salad of questionable 'herbs' with meatballs and fried potato slices. Nothing suspicious about it."
- icon_state = "validsalad"
- trash = /obj/item/trash/snack_bowl
- filling_color = "#76B87F"
- center_of_mass = list("x"=17, "y"=11)
- nutriment_amt = 6
- nutriment_desc = list("100% real salad")
-
-/obj/item/weapon/reagent_containers/food/snacks/validsalad/New()
- ..()
- reagents.add_reagent("protein", 2)
- bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/appletart
- name = "golden apple streusel tart"
- desc = "A tasty dessert that won't make it through a metal detector."
- icon_state = "gappletart"
- trash = /obj/item/trash/plate
- filling_color = "#FFFF00"
- center_of_mass = list("x"=16, "y"=18)
- nutriment_amt = 8
- nutriment_desc = list("apple" = 8)
-
-/obj/item/weapon/reagent_containers/food/snacks/appletart/New()
- ..()
- reagents.add_reagent("gold", 5)
- bitesize = 3
-
-/////////////////////////////////////////////////Sliceable////////////////////////////////////////
-// All the food items that can be sliced into smaller bits like Meatbread and Cheesewheels
-
-// sliceable is just an organization type path, it doesn't have any additional code or variables tied to it.
-
-/obj/item/weapon/reagent_containers/food/snacks/sliceable
- w_class = ITEMSIZE_NORMAL //Whole pizzas and cakes shouldn't fit in a pocket, you can slice them if you want to do that.
-
-/**
- * A food item slice
- *
- * This path contains some extra code for spawning slices pre-filled with
- * reagents.
- */
-/obj/item/weapon/reagent_containers/food/snacks/slice
- name = "slice of... something"
- var/whole_path // path for the item from which this slice comes
- var/filled = FALSE // should the slice spawn with any reagents
-
-/**
- * Spawn a new slice of food
- *
- * If the slice's filled is TRUE, this will also fill the slice with the
- * appropriate amount of reagents. Note that this is done by spawning a new
- * whole item, transferring the reagents and deleting the whole item, which may
- * have performance implications.
- */
-/obj/item/weapon/reagent_containers/food/snacks/slice/New()
- ..()
- if(filled)
- var/obj/item/weapon/reagent_containers/food/snacks/whole = new whole_path()
- if(whole && whole.slices_num)
- var/reagent_amount = whole.reagents.total_volume/whole.slices_num
- whole.reagents.trans_to_obj(src, reagent_amount)
-
- qdel(whole)
-
-/obj/item/weapon/reagent_containers/food/snacks/sliceable/meatbread
- name = "meatbread loaf"
- desc = "The culinary base of every self-respecting eloquent gentleman."
- icon_state = "meatbread"
- slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/meatbread
- slices_num = 5
- filling_color = "#FF7575"
- center_of_mass = list("x"=19, "y"=9)
- nutriment_desc = list("bread" = 10)
- nutriment_amt = 10
-
-/obj/item/weapon/reagent_containers/food/snacks/sliceable/meatbread/New()
- ..()
- reagents.add_reagent("protein", 20)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/slice/meatbread
- name = "meatbread slice"
- desc = "A slice of delicious meatbread."
- icon_state = "meatbreadslice"
- trash = /obj/item/trash/plate
- filling_color = "#FF7575"
- bitesize = 2
- center_of_mass = list("x"=16, "y"=16)
- whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/meatbread
-
-/obj/item/weapon/reagent_containers/food/snacks/slice/meatbread/filled
- filled = TRUE
-
-/obj/item/weapon/reagent_containers/food/snacks/sliceable/xenomeatbread
- name = "xenomeatbread loaf"
- desc = "The culinary base of every self-respecting eloquent gentleman. Extra Heretical."
- icon_state = "xenomeatbread"
- slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/xenomeatbread
- slices_num = 5
- filling_color = "#8AFF75"
- center_of_mass = list("x"=16, "y"=9)
- nutriment_desc = list("bread" = 10)
- nutriment_amt = 10
-
-/obj/item/weapon/reagent_containers/food/snacks/sliceable/xenomeatbread/New()
- ..()
- reagents.add_reagent("protein", 20)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/slice/xenomeatbread
- name = "xenomeatbread slice"
- desc = "A slice of delicious meatbread. Extra Heretical."
- icon_state = "xenobreadslice"
- trash = /obj/item/trash/plate
- filling_color = "#8AFF75"
- bitesize = 2
- center_of_mass = list("x"=16, "y"=13)
- whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/xenomeatbread
-
-
-/obj/item/weapon/reagent_containers/food/snacks/slice/xenomeatbread/filled
- filled = TRUE
-
-/obj/item/weapon/reagent_containers/food/snacks/sliceable/bananabread
- name = "Banana-nut bread"
- desc = "A heavenly and filling treat."
- icon_state = "bananabread"
- slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/bananabread
- slices_num = 5
- filling_color = "#EDE5AD"
- center_of_mass = list("x"=16, "y"=9)
- nutriment_desc = list("bread" = 10)
- nutriment_amt = 10
-
-/obj/item/weapon/reagent_containers/food/snacks/sliceable/bananabread/New()
- ..()
- reagents.add_reagent("banana", 20)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/slice/bananabread
- name = "Banana-nut bread slice"
- desc = "A slice of delicious banana bread."
- icon_state = "bananabreadslice"
- trash = /obj/item/trash/plate
- filling_color = "#EDE5AD"
- bitesize = 2
- center_of_mass = list("x"=16, "y"=8)
- whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/bananabread
-
-/obj/item/weapon/reagent_containers/food/snacks/slice/bananabread/filled
- filled = TRUE
-
-/obj/item/weapon/reagent_containers/food/snacks/sliceable/tofubread
- name = "Tofubread"
- icon_state = "Like meatbread but for vegetarians. Not guaranteed to give superpowers."
- icon_state = "tofubread"
- slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/tofubread
- slices_num = 5
- filling_color = "#F7FFE0"
- center_of_mass = list("x"=16, "y"=9)
- nutriment_desc = list("tofu" = 10)
- nutriment_amt = 10
-
-/obj/item/weapon/reagent_containers/food/snacks/sliceable/tofubread/New()
- ..()
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/slice/tofubread
- name = "Tofubread slice"
- desc = "A slice of delicious tofubread."
- icon_state = "tofubreadslice"
- trash = /obj/item/trash/plate
- filling_color = "#F7FFE0"
- bitesize = 2
- center_of_mass = list("x"=16, "y"=13)
- whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/tofubread
-
-/obj/item/weapon/reagent_containers/food/snacks/slice/tofubread/filled
- filled = TRUE
-
-
-/obj/item/weapon/reagent_containers/food/snacks/sliceable/carrotcake
- name = "Carrot Cake"
- desc = "A favorite desert of a certain wascally wabbit. Not a lie."
- icon_state = "carrotcake"
- slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/carrotcake
- slices_num = 5
- filling_color = "#FFD675"
- center_of_mass = list("x"=16, "y"=10)
- nutriment_desc = list("cake" = 10, "sweetness" = 10, "carrot" = 15)
- nutriment_amt = 25
-
-/obj/item/weapon/reagent_containers/food/snacks/sliceable/carrotcake/New()
- ..()
- reagents.add_reagent("imidazoline", 10)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/slice/carrotcake
- name = "Carrot Cake slice"
- desc = "Carrotty slice of Carrot Cake, carrots are good for your eyes! Also not a lie."
- icon_state = "carrotcake_slice"
- trash = /obj/item/trash/plate
- filling_color = "#FFD675"
- bitesize = 2
- center_of_mass = list("x"=16, "y"=14)
- whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/carrotcake
-
-/obj/item/weapon/reagent_containers/food/snacks/slice/carrotcake/filled
- filled = TRUE
-
-/obj/item/weapon/reagent_containers/food/snacks/sliceable/braincake
- name = "Brain Cake"
- desc = "A squishy cake-thing."
- icon_state = "braincake"
- slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/braincake
- slices_num = 5
- filling_color = "#E6AEDB"
- center_of_mass = list("x"=16, "y"=10)
- nutriment_desc = list("cake" = 10, "sweetness" = 10, "slime" = 15)
- nutriment_amt = 5
-
-/obj/item/weapon/reagent_containers/food/snacks/sliceable/braincake/New()
- ..()
- reagents.add_reagent("protein", 25)
- reagents.add_reagent("alkysine", 10)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/slice/braincake
- name = "Brain Cake slice"
- desc = "Lemme tell you something about prions. THEY'RE DELICIOUS."
- icon_state = "braincakeslice"
- trash = /obj/item/trash/plate
- filling_color = "#E6AEDB"
- bitesize = 2
- center_of_mass = list("x"=16, "y"=12)
- whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/braincake
-
-/obj/item/weapon/reagent_containers/food/snacks/slice/braincake/filled
- filled = TRUE
-
-/obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesecake
- name = "Cheese Cake"
- desc = "DANGEROUSLY cheesy."
- icon_state = "cheesecake"
- slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/cheesecake
- slices_num = 5
- filling_color = "#FAF7AF"
- center_of_mass = list("x"=16, "y"=10)
- nutriment_desc = list("cake" = 10, "cream" = 10, "cheese" = 15)
- nutriment_amt = 10
-
-/obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesecake/New()
- ..()
- reagents.add_reagent("protein", 15)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/slice/cheesecake
- name = "Cheese Cake slice"
- desc = "Slice of pure cheestisfaction."
- icon_state = "cheesecake_slice"
- trash = /obj/item/trash/plate
- filling_color = "#FAF7AF"
- bitesize = 2
- center_of_mass = list("x"=16, "y"=14)
- whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesecake
-
-/obj/item/weapon/reagent_containers/food/snacks/slice/cheesecake/filled
- filled = TRUE
-
-/obj/item/weapon/reagent_containers/food/snacks/sliceable/plaincake
- name = "Vanilla Cake"
- desc = "A plain cake, not a lie."
- icon_state = "plaincake"
- slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/plaincake
- slices_num = 5
- filling_color = "#F7EDD5"
- center_of_mass = list("x"=16, "y"=10)
- nutriment_desc = list("cake" = 10, "sweetness" = 10, "vanilla" = 15)
- nutriment_amt = 20
-
-/obj/item/weapon/reagent_containers/food/snacks/slice/plaincake
- name = "Vanilla Cake slice"
- desc = "Just a slice of cake, it is enough for everyone."
- icon_state = "plaincake_slice"
- trash = /obj/item/trash/plate
- filling_color = "#F7EDD5"
- bitesize = 2
- center_of_mass = list("x"=16, "y"=14)
- whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/plaincake
-
-/obj/item/weapon/reagent_containers/food/snacks/slice/plaincake/filled
- filled = TRUE
-
-/obj/item/weapon/reagent_containers/food/snacks/sliceable/orangecake
- name = "Orange Cake"
- desc = "A cake with added orange."
- icon_state = "orangecake"
- slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/orangecake
- slices_num = 5
- filling_color = "#FADA8E"
- center_of_mass = list("x"=16, "y"=10)
- nutriment_desc = list("cake" = 10, "sweetness" = 10, "orange" = 15)
- nutriment_amt = 20
-
-/obj/item/weapon/reagent_containers/food/snacks/slice/orangecake
- name = "Orange Cake slice"
- desc = "Just a slice of cake, it is enough for everyone."
- icon_state = "orangecake_slice"
- trash = /obj/item/trash/plate
- filling_color = "#FADA8E"
- bitesize = 2
- center_of_mass = list("x"=16, "y"=14)
- whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/orangecake
-
-/obj/item/weapon/reagent_containers/food/snacks/slice/orangecake/filled
- filled = TRUE
-
-
-/obj/item/weapon/reagent_containers/food/snacks/sliceable/limecake
- name = "Lime Cake"
- desc = "A cake with added lime."
- icon_state = "limecake"
- slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/limecake
- slices_num = 5
- filling_color = "#CBFA8E"
- center_of_mass = list("x"=16, "y"=10)
- nutriment_desc = list("cake" = 10, "sweetness" = 10, "lime" = 15)
- nutriment_amt = 20
-
-
-/obj/item/weapon/reagent_containers/food/snacks/slice/limecake
- name = "Lime Cake slice"
- desc = "Just a slice of cake, it is enough for everyone."
- icon_state = "limecake_slice"
- trash = /obj/item/trash/plate
- filling_color = "#CBFA8E"
- bitesize = 2
- center_of_mass = list("x"=16, "y"=14)
- whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/limecake
-
-/obj/item/weapon/reagent_containers/food/snacks/slice/limecake/filled
- filled = TRUE
-
-/obj/item/weapon/reagent_containers/food/snacks/sliceable/lemoncake
- name = "Lemon Cake"
- desc = "A cake with added lemon."
- icon_state = "lemoncake"
- slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/lemoncake
- slices_num = 5
- filling_color = "#FAFA8E"
- center_of_mass = list("x"=16, "y"=10)
- nutriment_desc = list("cake" = 10, "sweetness" = 10, "lemon" = 15)
- nutriment_amt = 20
-
-
-/obj/item/weapon/reagent_containers/food/snacks/slice/lemoncake
- name = "Lemon Cake slice"
- desc = "Just a slice of cake, it is enough for everyone."
- icon_state = "lemoncake_slice"
- trash = /obj/item/trash/plate
- filling_color = "#FAFA8E"
- bitesize = 2
- center_of_mass = list("x"=16, "y"=14)
- whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/lemoncake
-
-/obj/item/weapon/reagent_containers/food/snacks/slice/lemoncake/filled
- filled = TRUE
-
-/obj/item/weapon/reagent_containers/food/snacks/sliceable/chocolatecake
- name = "Chocolate Cake"
- desc = "A cake with added chocolate."
- icon_state = "chocolatecake"
- slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/chocolatecake
- slices_num = 5
- filling_color = "#805930"
- center_of_mass = list("x"=16, "y"=10)
- nutriment_desc = list("cake" = 10, "sweetness" = 10, "chocolate" = 15)
- nutriment_amt = 20
-
-/obj/item/weapon/reagent_containers/food/snacks/slice/chocolatecake
- name = "Chocolate Cake slice"
- desc = "Just a slice of cake, it is enough for everyone."
- icon_state = "chocolatecake_slice"
- trash = /obj/item/trash/plate
- filling_color = "#805930"
- bitesize = 2
- center_of_mass = list("x"=16, "y"=14)
- whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/chocolatecake
-
-/obj/item/weapon/reagent_containers/food/snacks/slice/chocolatecake/filled
- filled = TRUE
-
-/obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesewheel
- name = "Cheese wheel"
- desc = "A big wheel of delcious Cheddar."
- icon_state = "cheesewheel"
- slice_path = /obj/item/weapon/reagent_containers/food/snacks/cheesewedge
- slices_num = 5
- filling_color = "#FFF700"
- center_of_mass = list("x"=16, "y"=10)
- nutriment_desc = list("cheese" = 10)
- nutriment_amt = 10
-
-/obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesewheel/New()
- ..()
- reagents.add_reagent("protein", 10)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/cheesewedge
- name = "Cheese wedge"
- desc = "A wedge of delicious Cheddar. The cheese wheel it was cut from can't have gone far."
- icon_state = "cheesewedge"
- filling_color = "#FFF700"
- bitesize = 2
- center_of_mass = list("x"=16, "y"=10)
-
-/obj/item/weapon/reagent_containers/food/snacks/sliceable/birthdaycake
- name = "Birthday Cake"
- desc = "Happy Birthday..."
- icon_state = "birthdaycake"
- slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/birthdaycake
- slices_num = 5
- filling_color = "#FFD6D6"
- center_of_mass = list("x"=16, "y"=10)
- nutriment_desc = list("cake" = 10, "sweetness" = 10)
- nutriment_amt = 20
-
-/obj/item/weapon/reagent_containers/food/snacks/sliceable/birthdaycake/New()
- ..()
- reagents.add_reagent("sprinkles", 10)
- bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/slice/birthdaycake
- name = "Birthday Cake slice"
- desc = "A slice of your birthday."
- icon_state = "birthdaycakeslice"
- trash = /obj/item/trash/plate
- filling_color = "#FFD6D6"
- bitesize = 2
- center_of_mass = list("x"=16, "y"=14)
- whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/birthdaycake
-
-/obj/item/weapon/reagent_containers/food/snacks/slice/birthdaycake/filled
- filled = TRUE
-
-/obj/item/weapon/reagent_containers/food/snacks/sliceable/bread
- name = "Bread"
- icon_state = "Some plain old Earthen bread."
- icon_state = "bread"
- slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/bread
- slices_num = 5
- filling_color = "#FFE396"
- center_of_mass = list("x"=16, "y"=9)
- nutriment_desc = list("bread" = 6)
- nutriment_amt = 6
-
-/obj/item/weapon/reagent_containers/food/snacks/sliceable/bread/New()
- ..()
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/slice/bread
- name = "Bread slice"
- desc = "A slice of home."
- icon_state = "breadslice"
- trash = /obj/item/trash/plate
- filling_color = "#D27332"
- bitesize = 2
- center_of_mass = list("x"=16, "y"=4)
- whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/bread
-
-/obj/item/weapon/reagent_containers/food/snacks/slice/bread/filled
- filled = TRUE
-
-
-/obj/item/weapon/reagent_containers/food/snacks/sliceable/creamcheesebread
- name = "Cream Cheese Bread"
- desc = "Yum yum yum!"
- icon_state = "creamcheesebread"
- slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/creamcheesebread
- slices_num = 5
- filling_color = "#FFF896"
- center_of_mass = list("x"=16, "y"=9)
- nutriment_desc = list("bread" = 6, "cream" = 3, "cheese" = 3)
- nutriment_amt = 5
-
-/obj/item/weapon/reagent_containers/food/snacks/sliceable/creamcheesebread/New()
- ..()
- reagents.add_reagent("protein", 15)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/slice/creamcheesebread
- name = "Cream Cheese Bread slice"
- desc = "A slice of yum!"
- icon_state = "creamcheesebreadslice"
- trash = /obj/item/trash/plate
- filling_color = "#FFF896"
- bitesize = 2
- center_of_mass = list("x"=16, "y"=14)
- whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/creamcheesebread
-
-
-/obj/item/weapon/reagent_containers/food/snacks/slice/creamcheesebread/filled
- filled = TRUE
-
-
-/obj/item/weapon/reagent_containers/food/snacks/watermelonslice
- name = "Watermelon Slice"
- desc = "A slice of watery goodness."
- icon_state = "watermelonslice"
- filling_color = "#FF3867"
- bitesize = 2
- center_of_mass = list("x"=16, "y"=10)
-
-/obj/item/weapon/reagent_containers/food/snacks/sliceable/applecake
- name = "Apple Cake"
- desc = "A cake centred with apples."
- icon_state = "applecake"
- slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/applecake
- slices_num = 5
- filling_color = "#EBF5B8"
- center_of_mass = list("x"=16, "y"=10)
- nutriment_desc = list("cake" = 10, "sweetness" = 10, "apple" = 15)
- nutriment_amt = 15
-
-/obj/item/weapon/reagent_containers/food/snacks/slice/applecake
- name = "Apple Cake slice"
- desc = "A slice of heavenly cake."
- icon_state = "applecakeslice"
- trash = /obj/item/trash/plate
- filling_color = "#EBF5B8"
- bitesize = 2
- center_of_mass = list("x"=16, "y"=14)
- whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/applecake
-
-/obj/item/weapon/reagent_containers/food/snacks/slice/applecake/filled
- filled = TRUE
-
-/obj/item/weapon/reagent_containers/food/snacks/sliceable/pumpkinpie
- name = "Pumpkin Pie"
- desc = "A delicious treat for the autumn months."
- icon_state = "pumpkinpie"
- slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/pumpkinpie
- slices_num = 5
- filling_color = "#F5B951"
- center_of_mass = list("x"=16, "y"=10)
- nutriment_desc = list("pie" = 5, "cream" = 5, "pumpkin" = 5)
- nutriment_amt = 15
-
-/obj/item/weapon/reagent_containers/food/snacks/slice/pumpkinpie
- name = "Pumpkin Pie slice"
- desc = "A slice of pumpkin pie, with whipped cream on top. Perfection."
- icon_state = "pumpkinpieslice"
- trash = /obj/item/trash/plate
- filling_color = "#F5B951"
- bitesize = 2
- center_of_mass = list("x"=16, "y"=12)
- whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pumpkinpie
-
-/obj/item/weapon/reagent_containers/food/snacks/slice/pumpkinpie/filled
- filled = TRUE
-
-/obj/item/weapon/reagent_containers/food/snacks/cracker
- name = "Cracker"
- desc = "It's a salted cracker."
- icon_state = "cracker"
- filling_color = "#F5DEB8"
- center_of_mass = list("x"=16, "y"=6)
- nutriment_desc = list("salt" = 1, "cracker" = 2)
- nutriment_amt = 1
-
-
-
-/////////////////////////////////////////////////PIZZA////////////////////////////////////////
-
-/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza
- slices_num = 6
- filling_color = "#BAA14C"
-
-/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/margherita
- name = "Margherita"
- desc = "The golden standard of pizzas."
- icon_state = "pizzamargherita"
- slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/margherita
- slices_num = 6
- center_of_mass = list("x"=16, "y"=11)
- nutriment_desc = list("pizza crust" = 10, "tomato" = 10, "cheese" = 15)
- nutriment_amt = 35
-
-/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/margherita/New()
- ..()
- reagents.add_reagent("protein", 5)
- reagents.add_reagent("tomatojuice", 6)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/slice/margherita
- name = "Margherita slice"
- desc = "A slice of the classic pizza."
- icon_state = "pizzamargheritaslice"
- filling_color = "#BAA14C"
- bitesize = 2
- center_of_mass = list("x"=16, "y"=13)
- whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/margherita
-
-/obj/item/weapon/reagent_containers/food/snacks/slice/margherita/filled
- filled = TRUE
-
-/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/meatpizza
- name = "Meatpizza"
- desc = "A pizza with meat topping."
- icon_state = "meatpizza"
- slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/meatpizza
- slices_num = 6
- center_of_mass = list("x"=16, "y"=11)
- nutriment_desc = list("pizza crust" = 10, "tomato" = 10, "cheese" = 15)
- nutriment_amt = 10
-
-/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/meatpizza/New()
- ..()
- reagents.add_reagent("protein", 34)
- reagents.add_reagent("tomatojuice", 6)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/slice/meatpizza
- name = "Meatpizza slice"
- desc = "A slice of a meaty pizza."
- icon_state = "meatpizzaslice"
- filling_color = "#BAA14C"
- bitesize = 2
- center_of_mass = list("x"=16, "y"=13)
- whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/meatpizza
-
-/obj/item/weapon/reagent_containers/food/snacks/slice/meatpizza/filled
- filled = TRUE
-
-/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/mushroompizza
- name = "Mushroompizza"
- desc = "Very special pizza."
- icon_state = "mushroompizza"
- slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/mushroompizza
- slices_num = 6
- center_of_mass = list("x"=16, "y"=11)
- nutriment_desc = list("pizza crust" = 10, "tomato" = 10, "cheese" = 5, "mushroom" = 10)
- nutriment_amt = 35
-
-/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/mushroompizza/New()
- ..()
- reagents.add_reagent("protein", 5)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/slice/mushroompizza
- name = "Mushroompizza slice"
- desc = "Maybe it is the last slice of pizza in your life."
- icon_state = "mushroompizzaslice"
- filling_color = "#BAA14C"
- bitesize = 2
- center_of_mass = list("x"=16, "y"=13)
- whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/mushroompizza
-
-/obj/item/weapon/reagent_containers/food/snacks/slice/mushroompizza/filled
- filled = TRUE
-
-/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza
- name = "Vegetable pizza"
- desc = "No one of Tomato Sapiens were harmed during making this pizza."
- icon_state = "vegetablepizza"
- slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/vegetablepizza
- slices_num = 6
- center_of_mass = list("x"=16, "y"=11)
- nutriment_desc = list("pizza crust" = 10, "tomato" = 10, "cheese" = 5, "eggplant" = 5, "carrot" = 5, "corn" = 5)
- nutriment_amt = 25
-
-/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza/New()
- ..()
- reagents.add_reagent("protein", 5)
- reagents.add_reagent("tomatojuice", 6)
- reagents.add_reagent("imidazoline", 12)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/slice/vegetablepizza
- name = "Vegetable pizza slice"
- desc = "A slice of the most green pizza of all pizzas not containing green ingredients."
- icon_state = "vegetablepizzaslice"
- filling_color = "#BAA14C"
- bitesize = 2
- center_of_mass = list("x"=16, "y"=13)
- whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza
-
-/obj/item/weapon/reagent_containers/food/snacks/slice/vegetablepizza/filled
- filled = TRUE
-
-/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/oldpizza
- name = "moldy pizza"
- desc = "This pizza might actually be alive. There's mold all over."
- icon_state = "oldpizza"
- slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/oldpizza
- slices_num = 6
- center_of_mass = list("x"=16, "y"=11)
- nutriment_desc = list("stale pizza crust" = 10, "moldy tomato" = 10, "moldy cheese" = 5)
- nutriment_amt = 10
-
-/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/oldpizza/New()
- ..()
- reagents.add_reagent("protein", 5)
- reagents.add_reagent("tomatojuice", 6)
- reagents.add_reagent("mold", 8)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/slice/oldpizza
- name = "moldy pizza slice"
- desc = "This used to be pizza..."
- icon_state = "old_pizza"
- filling_color = "#BAA14C"
- bitesize = 2
- center_of_mass = list("x"=16, "y"=13)
- whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/oldpizza
-
-/obj/item/pizzabox
- name = "pizza box"
- desc = "A box suited for pizzas."
- icon = 'icons/obj/food.dmi'
- icon_state = "pizzabox1"
-
- var/open = 0 // Is the box open?
- var/ismessy = 0 // Fancy mess on the lid
- var/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/pizza // Content pizza
- var/list/boxes = list() // If the boxes are stacked, they come here
- var/boxtag = ""
-
-/obj/item/pizzabox/update_icon()
-
- overlays = list()
-
- // Set appropriate description
- if( open && pizza )
- desc = "A box suited for pizzas. It appears to have a [pizza.name] inside."
- else if( boxes.len > 0 )
- desc = "A pile of boxes suited for pizzas. There appears to be [boxes.len + 1] boxes in the pile."
-
- var/obj/item/pizzabox/topbox = boxes[boxes.len]
- var/toptag = topbox.boxtag
- if( toptag != "" )
- desc = "[desc] The box on top has a tag, it reads: '[toptag]'."
- else
- desc = "A box suited for pizzas."
-
- if( boxtag != "" )
- desc = "[desc] The box has a tag, it reads: '[boxtag]'."
-
- // Icon states and overlays
- if( open )
- if( ismessy )
- icon_state = "pizzabox_messy"
- else
- icon_state = "pizzabox_open"
-
- if( pizza )
- var/image/pizzaimg = image("food.dmi", icon_state = pizza.icon_state)
- pizzaimg.pixel_y = -3
- overlays += pizzaimg
-
- return
- else
- // Stupid code because byondcode sucks
- var/doimgtag = 0
- if( boxes.len > 0 )
- var/obj/item/pizzabox/topbox = boxes[boxes.len]
- if( topbox.boxtag != "" )
- doimgtag = 1
- else
- if( boxtag != "" )
- doimgtag = 1
-
- if( doimgtag )
- var/image/tagimg = image("food.dmi", icon_state = "pizzabox_tag")
- tagimg.pixel_y = boxes.len * 3
- overlays += tagimg
-
- icon_state = "pizzabox[boxes.len+1]"
-
-/obj/item/pizzabox/attack_hand( mob/user as mob )
-
- if( open && pizza )
- user.put_in_hands( pizza )
-
- to_chat(user, "You take \the [src.pizza] out of \the [src].")
- src.pizza = null
- update_icon()
- return
-
- if( boxes.len > 0 )
- if( user.get_inactive_hand() != src )
- ..()
- return
-
- var/obj/item/pizzabox/box = boxes[boxes.len]
- boxes -= box
-
- user.put_in_hands( box )
- to_chat(user, "You remove the topmost [src] from your hand.")
- box.update_icon()
- update_icon()
- return
- ..()
-
-/obj/item/pizzabox/attack_self( mob/user as mob )
-
- if( boxes.len > 0 )
- return
-
- open = !open
-
- if( open && pizza )
- ismessy = 1
-
- update_icon()
-
-/obj/item/pizzabox/attackby( obj/item/I as obj, mob/user as mob )
- if( istype(I, /obj/item/pizzabox/) )
- var/obj/item/pizzabox/box = I
-
- if( !box.open && !src.open )
- // Make a list of all boxes to be added
- var/list/boxestoadd = list()
- boxestoadd += box
- for(var/obj/item/pizzabox/i in box.boxes)
- boxestoadd += i
-
- if( (boxes.len+1) + boxestoadd.len <= 5 )
- user.drop_item()
-
- box.loc = src
- box.boxes = list() // Clear the box boxes so we don't have boxes inside boxes. - Xzibit
- src.boxes.Add( boxestoadd )
-
- box.update_icon()
- update_icon()
-
- to_chat(user, "You put \the [box] ontop of \the [src]!")
- else
- to_chat(user, "The stack is too high!")
- else
- to_chat(user, "Close \the [box] first!")
-
- return
-
- if( istype(I, /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/) ) // Long ass fucking object name
-
- if( src.open )
- user.drop_item()
- I.loc = src
- src.pizza = I
-
- update_icon()
-
- to_chat(user, "You put \the [I] in \the [src]!")
- else
- to_chat(user, "You try to push \the [I] through the lid but it doesn't work!")
- return
-
- if( istype(I, /obj/item/weapon/pen/) )
-
- if( src.open )
- return
-
- var/t = sanitize(input("Enter what you want to add to the tag:", "Write", null, null) as text, 30)
-
- var/obj/item/pizzabox/boxtotagto = src
- if( boxes.len > 0 )
- boxtotagto = boxes[boxes.len]
-
- boxtotagto.boxtag = copytext("[boxtotagto.boxtag][t]", 1, 30)
-
- update_icon()
- return
- ..()
-
-/obj/item/pizzabox/margherita/New()
- pizza = new /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/margherita(src)
- boxtag = "Margherita Deluxe"
-
-/obj/item/pizzabox/vegetable/New()
- pizza = new /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza(src)
- boxtag = "Gourmet Vegatable"
-
-/obj/item/pizzabox/mushroom/New()
- pizza = new /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/mushroompizza(src)
- boxtag = "Mushroom Special"
-
-/obj/item/pizzabox/meat/New()
- pizza = new /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/meatpizza(src)
- boxtag = "Meatlover's Supreme"
-
-/obj/item/pizzabox/old/New()
- pizza = new /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/oldpizza(src)
- boxtag = "Deluxe Gourmet"
-
-/obj/item/weapon/reagent_containers/food/snacks/dionaroast
- name = "roast diona"
- desc = "It's like an enormous, leathery carrot. With an eye."
- icon_state = "dionaroast"
- trash = /obj/item/trash/plate
- filling_color = "#75754B"
- center_of_mass = list("x"=16, "y"=7)
- nutriment_amt = 6
- nutriment_desc = list("a chorus of flavor" = 6)
-
-/obj/item/weapon/reagent_containers/food/snacks/dionaroast/New()
- ..()
- reagents.add_reagent("radium", 2)
- bitesize = 2
-
-///////////////////////////////////////////
-// new old food stuff from bs12
-///////////////////////////////////////////
-/obj/item/weapon/reagent_containers/food/snacks/dough
- name = "dough"
- desc = "A piece of dough."
- icon = 'icons/obj/food_ingredients.dmi'
- icon_state = "dough"
- bitesize = 2
- center_of_mass = list("x"=16, "y"=13)
- nutriment_amt = 3
- nutriment_desc = list("uncooked dough" = 3)
-
-/obj/item/weapon/reagent_containers/food/snacks/dough/New()
- ..()
- reagents.add_reagent("protein", 1)
-
-// Dough + rolling pin = flat dough
-/obj/item/weapon/reagent_containers/food/snacks/dough/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if(istype(W,/obj/item/weapon/material/kitchen/rollingpin))
- new /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough(src)
- user << "You flatten the dough."
- qdel(src)
-
-// slicable into 3xdoughslices
-/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough
- name = "flat dough"
- desc = "A flattened dough."
- icon = 'icons/obj/food_ingredients.dmi'
- icon_state = "flat dough"
- slice_path = /obj/item/weapon/reagent_containers/food/snacks/doughslice
- slices_num = 3
- center_of_mass = list("x"=16, "y"=16)
-
-/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough/New()
- ..()
- reagents.add_reagent("protein", 1)
- reagents.add_reagent("nutriment", 3)
-
-/obj/item/weapon/reagent_containers/food/snacks/doughslice
- name = "dough slice"
- desc = "A building block of an impressive dish."
- icon = 'icons/obj/food_ingredients.dmi'
- icon_state = "doughslice"
- slice_path = /obj/item/weapon/reagent_containers/food/snacks/spagetti
- slices_num = 1
- bitesize = 2
- center_of_mass = list("x"=17, "y"=19)
- nutriment_amt = 1
- nutriment_desc = list("uncooked dough" = 1)
-
-/obj/item/weapon/reagent_containers/food/snacks/doughslice/New()
- ..()
-
-/obj/item/weapon/reagent_containers/food/snacks/bun
- name = "bun"
- desc = "A base for any self-respecting burger."
- icon = 'icons/obj/food_ingredients.dmi'
- icon_state = "bun"
- bitesize = 2
- center_of_mass = list("x"=16, "y"=12)
- nutriment_amt = 4
- nutriment_desc = "bun"
-
-/obj/item/weapon/reagent_containers/food/snacks/bun/New()
- ..()
-
-/obj/item/weapon/reagent_containers/food/snacks/bun/attackby(obj/item/weapon/W as obj, mob/user as mob)
- // Bun + meatball = burger
- if(istype(W,/obj/item/weapon/reagent_containers/food/snacks/meatball))
- new /obj/item/weapon/reagent_containers/food/snacks/monkeyburger(src)
- user << "You make a burger."
- qdel(W)
- qdel(src)
-
- // Bun + cutlet = hamburger
- else if(istype(W,/obj/item/weapon/reagent_containers/food/snacks/cutlet))
- new /obj/item/weapon/reagent_containers/food/snacks/monkeyburger(src)
- user << "You make a burger."
- qdel(W)
- qdel(src)
-
- // Bun + sausage = hotdog
- else if(istype(W,/obj/item/weapon/reagent_containers/food/snacks/sausage))
- new /obj/item/weapon/reagent_containers/food/snacks/hotdog(src)
- user << "You make a hotdog."
- qdel(W)
- qdel(src)
-
-// Burger + cheese wedge = cheeseburger
-/obj/item/weapon/reagent_containers/food/snacks/monkeyburger/attackby(obj/item/weapon/reagent_containers/food/snacks/cheesewedge/W as obj, mob/user as mob)
- if(istype(W))// && !istype(src,/obj/item/weapon/reagent_containers/food/snacks/cheesewedge))
- new /obj/item/weapon/reagent_containers/food/snacks/cheeseburger(src)
- user << "You make a cheeseburger."
- qdel(W)
- qdel(src)
- return
- else
- ..()
-
-// Human Burger + cheese wedge = cheeseburger
-/obj/item/weapon/reagent_containers/food/snacks/human/burger/attackby(obj/item/weapon/reagent_containers/food/snacks/cheesewedge/W as obj, mob/user as mob)
- if(istype(W))
- new /obj/item/weapon/reagent_containers/food/snacks/cheeseburger(src)
- user << "You make a cheeseburger."
- qdel(W)
- qdel(src)
- return
- else
- ..()
-
-/obj/item/weapon/reagent_containers/food/snacks/bunbun
- name = "\improper Bun Bun"
- desc = "A small bread monkey fashioned from two burger buns."
- icon_state = "bunbun"
- bitesize = 2
- center_of_mass = list("x"=16, "y"=8)
- nutriment_amt = 8
- nutriment_desc = list("bun" = 8)
-
-/obj/item/weapon/reagent_containers/food/snacks/bunbun/New()
- ..()
-
-/obj/item/weapon/reagent_containers/food/snacks/taco
- name = "taco"
- desc = "Take a bite!"
- icon_state = "taco"
- bitesize = 3
- center_of_mass = list("x"=21, "y"=12)
- nutriment_amt = 4
- nutriment_desc = list("cheese" = 2,"taco shell" = 2)
-/obj/item/weapon/reagent_containers/food/snacks/taco/New()
- ..()
- reagents.add_reagent("protein", 3)
-
-/obj/item/weapon/reagent_containers/food/snacks/rawcutlet
- name = "raw cutlet"
- desc = "A thin piece of raw meat."
- icon = 'icons/obj/food_ingredients.dmi'
- icon_state = "rawcutlet"
- bitesize = 1
- center_of_mass = list("x"=17, "y"=20)
-
-/obj/item/weapon/reagent_containers/food/snacks/rawcutlet/New()
- ..()
- reagents.add_reagent("protein", 1)
-
-/obj/item/weapon/reagent_containers/food/snacks/cutlet
- name = "cutlet"
- desc = "A tasty meat slice."
- icon = 'icons/obj/food_ingredients.dmi'
- icon_state = "cutlet"
- bitesize = 2
- center_of_mass = list("x"=17, "y"=20)
-
-/obj/item/weapon/reagent_containers/food/snacks/cutlet/New()
- ..()
- reagents.add_reagent("protein", 2)
-
-/obj/item/weapon/reagent_containers/food/snacks/rawmeatball
- name = "raw meatball"
- desc = "A raw meatball."
- icon = 'icons/obj/food_ingredients.dmi'
- icon_state = "rawmeatball"
- bitesize = 2
- center_of_mass = list("x"=16, "y"=15)
-
-/obj/item/weapon/reagent_containers/food/snacks/rawmeatball/New()
- ..()
- reagents.add_reagent("protein", 2)
-
-/obj/item/weapon/reagent_containers/food/snacks/hotdog
- name = "hotdog"
- desc = "Unrelated to dogs, maybe."
- icon_state = "hotdog"
- bitesize = 2
- center_of_mass = list("x"=16, "y"=17)
-
-/obj/item/weapon/reagent_containers/food/snacks/hotdog/New()
- ..()
- reagents.add_reagent("protein", 6)
-
-/obj/item/weapon/reagent_containers/food/snacks/hotdog/old
- name = "old hotdog"
- desc = "Covered in mold. You're not gonna eat that, are you?"
-
-/obj/item/weapon/reagent_containers/food/snacks/hotdog/old/New()
- ..()
- reagents.add_reagent("mold", 6)
-
-/obj/item/weapon/reagent_containers/food/snacks/flatbread
- name = "flatbread"
- desc = "Bland but filling."
- icon = 'icons/obj/food_ingredients.dmi'
- icon_state = "flatbread"
- bitesize = 2
- center_of_mass = list("x"=16, "y"=16)
- nutriment_amt = 3
- nutriment_desc = list("bread" = 3)
-
-/obj/item/weapon/reagent_containers/food/snacks/flatbread/New()
- ..()
-
-// potato + knife = raw sticks
-/obj/item/weapon/reagent_containers/food/snacks/grown/attackby(obj/item/weapon/W, mob/user)
- if(seed && seed.kitchen_tag && seed.kitchen_tag == "potato" && istype(W,/obj/item/weapon/material/knife))
- new /obj/item/weapon/reagent_containers/food/snacks/rawsticks(get_turf(src))
- user << "You cut the potato."
- qdel(src)
- else
- ..()
-
-/obj/item/weapon/reagent_containers/food/snacks/rawsticks
- name = "raw potato sticks"
- desc = "Raw fries, not very tasty."
- icon = 'icons/obj/food_ingredients.dmi'
- icon_state = "rawsticks"
- bitesize = 2
- center_of_mass = list("x"=16, "y"=12)
- nutriment_amt = 3
- nutriment_desc = list("raw potato" = 3)
-
-/obj/item/weapon/reagent_containers/food/snacks/rawsticks/New()
- ..()
-
-/obj/item/weapon/reagent_containers/food/snacks/liquidfood
- name = "\improper LiquidFood Ration"
- desc = "A prepackaged grey slurry of all the essential nutrients for a spacefarer on the go. Should this be crunchy?"
- icon_state = "liquidfood"
- trash = /obj/item/trash/liquidfood
- filling_color = "#A8A8A8"
- center_of_mass = list("x"=16, "y"=15)
- nutriment_amt = 20
- nutriment_desc = list("chalk" = 6)
-
-/obj/item/weapon/reagent_containers/food/snacks/liquidfood/New()
- ..()
- reagents.add_reagent("iron", 3)
- bitesize = 4
-
-/obj/item/weapon/reagent_containers/food/snacks/tastybread
- name = "bread tube"
- desc = "Bread in a tube. Chewy...and surprisingly tasty."
- icon_state = "tastybread"
- trash = /obj/item/trash/tastybread
- filling_color = "#A66829"
- center_of_mass = list("x"=17, "y"=16)
- nutriment_amt = 6
- nutriment_desc = list("bread" = 2, "sweetness" = 3)
-
-/obj/item/weapon/reagent_containers/food/snacks/tastybread/New()
- ..()
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/skrellsnacks
- name = "\improper SkrellSnax"
- desc = "Cured fungus shipped all the way from Qerr'balak, almost like jerky! Almost."
- icon_state = "skrellsnacks"
- filling_color = "#A66829"
- center_of_mass = list("x"=15, "y"=12)
- nutriment_amt = 10
- nutriment_desc = list("mushroom" = 5, "salt" = 5)
-
-/obj/item/weapon/reagent_containers/food/snacks/skrellsnacks/New()
- ..()
- bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/unajerky
- name = "Moghes Imported Sissalik Jerky"
- icon_state = "unathitinred"
- desc = "An incredibly well made jerky, shipped in all the way from Moghes."
- trash = /obj/item/trash/unajerky
- filling_color = "#631212"
- center_of_mass = list("x"=15, "y"=9)
-
-/obj/item/weapon/reagent_containers/food/snacks/unajerky/New()
- ..()
- reagents.add_reagent("protein", 8)
- reagents.add_reagent("capsaicin", 2)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/croissant
- name = "croissant"
- desc = "True French cuisine."
- filling_color = "#E3D796"
- icon_state = "croissant"
- nutriment_amt = 6
- nutriment_desc = list("french bread" = 6)
-
-/obj/item/weapon/reagent_containers/food/snacks/croissant/New()
- ..()
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/meatbun
- name = "meat bun"
- desc = "Chinese street food, in neither China nor a street."
- filling_color = "#DEDEAB"
- icon_state = "meatbun"
- nutriment_amt = 4
-
-/obj/item/weapon/reagent_containers/food/snacks/meatbun/New()
- ..()
- bitesize = 2
- reagents.add_reagent("protein", 4)
-
-/obj/item/weapon/reagent_containers/food/snacks/sashimi
- name = "carp sashimi"
- desc = "Expertly prepared. Still toxic."
- filling_color = "#FFDEFE"
- icon_state = "sashimi"
- nutriment_amt = 6
-
-/obj/item/weapon/reagent_containers/food/snacks/sashimi/New()
- ..()
- reagents.add_reagent("protein", 2)
- reagents.add_reagent("carpotoxin", 2)
- bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/benedict
- name = "eggs benedict"
- desc = "Hey, there's only one egg in this!"
- filling_color = "#FFDF78"
- icon_state = "benedict"
- nutriment_amt = 4
-
-/obj/item/weapon/reagent_containers/food/snacks/benedict/New()
- ..()
- reagents.add_reagent("protein", 2)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/beans
- name = "baked beans"
- desc = "Musical fruit in a slightly less musical container."
- filling_color = "#FC6F28"
- icon_state = "beans"
- nutriment_amt = 4
- nutriment_desc = list("beans" = 4)
-
-/obj/item/weapon/reagent_containers/food/snacks/beans/New()
- ..()
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/sugarcookie
- name = "sugar cookie"
- desc = "Just like your little sister used to make."
- filling_color = "#DBC94F"
- icon_state = "sugarcookie"
- nutriment_amt = 5
- nutriment_desc = list("sweetness" = 4, "cookie" = 1)
-
-/obj/item/weapon/reagent_containers/food/snacks/sugarcookie/New()
- ..()
- bitesize = 1
-
-/obj/item/weapon/reagent_containers/food/snacks/berrymuffin
- name = "berry muffin"
- desc = "A delicious and spongy little cake, with berries."
- icon_state = "berrymuffin"
- filling_color = "#E0CF9B"
- center_of_mass = list("x"=17, "y"=4)
- nutriment_amt = 6
- nutriment_desc = list("sweetness" = 2, "muffin" = 2, "berries" = 2)
-
-/obj/item/weapon/reagent_containers/food/snacks/berrymuffin/New()
- ..()
- reagents.add_reagent("nutriment", 6)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/ghostmuffin
- name = "booberry muffin"
- desc = "My stomach is a graveyard! No living being can quench my bloodthirst!"
- icon_state = "berrymuffin"
- filling_color = "#799ACE"
- center_of_mass = list("x"=17, "y"=4)
- nutriment_amt = 6
- nutriment_desc = list("spookiness" = 4, "muffin" = 1, "berries" = 1)
-
-/obj/item/weapon/reagent_containers/food/snacks/ghostmuffin/New()
- ..()
- reagents.add_reagent("nutriment", 6)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/eggroll
- name = "egg roll"
- desc = "Free with orders over 10 thalers."
- icon_state = "eggroll"
- filling_color = "#799ACE"
- center_of_mass = list("x"=17, "y"=4)
- nutriment_amt = 4
- nutriment_desc = list("egg" = 4)
-
-/obj/item/weapon/reagent_containers/food/snacks/eggroll/New()
- ..()
- reagents.add_reagent("nutriment", 6)
- reagents.add_reagent("protein", 2)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/fruitsalad
- name = "fruit salad"
- desc = "Your standard fruit salad."
- icon_state = "fruitsalad"
- filling_color = "#FF3867"
- nutriment_amt = 10
- nutriment_desc = list("fruit" = 10)
-
-/obj/item/weapon/reagent_containers/food/snacks/fruitsalad/New()
- ..()
- reagents.add_reagent("nutriment", 10)
- bitesize = 4
-
-/obj/item/weapon/reagent_containers/food/snacks/eggbowl
- name = "egg bowl"
- desc = "A bowl of fried rice with egg mixed in."
- icon_state = "eggbowl"
- trash = /obj/item/trash/snack_bowl
- filling_color = "#FFFBDB"
- nutriment_amt = 6
- nutriment_desc = list("rice" = 2, "egg" = 4)
-
-/obj/item/weapon/reagent_containers/food/snacks/eggbowl/New()
- ..()
- reagents.add_reagent("nutriment", 6)
- reagents.add_reagent("protein", 4)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/porkbowl
- name = "pork bowl"
- desc = "A bowl of fried rice with cuts of meat."
- icon_state = "porkbowl"
- trash = /obj/item/trash/snack_bowl
- filling_color = "#FFFBDB"
- nutriment_amt = 6
- nutriment_desc = list("rice" = 2, "meat" = 4)
-
-/obj/item/weapon/reagent_containers/food/snacks/porkbowl/New()
- ..()
- reagents.add_reagent("nutriment", 6)
- reagents.add_reagent("protein", 4)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/tortilla
- name = "tortilla"
- desc = "The base for all your burritos."
- icon_state = "tortilla"
- nutriment_amt = 1
- nutriment_desc = list("bread" = 1)
-
-/obj/item/weapon/reagent_containers/food/snacks/tortilla/New()
- ..()
- reagents.add_reagent("nutriment", 2)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/meatburrito
- name = "carne asada burrito"
- desc = "The best burrito for meat lovers."
- icon_state = "carneburrito"
- nutriment_amt = 6
- nutriment_desc = list("tortilla" = 3, "meat" = 3)
-
-/obj/item/weapon/reagent_containers/food/snacks/meatburrito/New()
- ..()
- reagents.add_reagent("protein", 6)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/cheeseburrito
- name = "Cheese burrito"
- desc = "It's a burrito filled with cheese."
- icon_state = "cheeseburrito"
- nutriment_amt = 6
- nutriment_desc = list("tortilla" = 3, "cheese" = 3)
-
-/obj/item/weapon/reagent_containers/food/snacks/cheeseburrito/New()
- ..()
- reagents.add_reagent("nutriment", 6)
- reagents.add_reagent("protein", 2)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/fuegoburrito
- name = "fuego phoron burrito"
- desc = "A super spicy burrito."
- icon_state = "fuegoburrito"
- nutriment_amt = 6
- nutriment_desc = list("chili peppers" = 5, "tortilla" = 1)
-
-/obj/item/weapon/reagent_containers/food/snacks/fuegoburrito/New()
- ..()
- reagents.add_reagent("nutriment", 6)
- reagents.add_reagent("capsaicin", 4)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/nachos
- name = "nachos"
- desc = "Chips from Old Mexico."
- icon_state = "nachos"
- nutriment_amt = 2
- nutriment_desc = list("salt" = 1)
-
-/obj/item/weapon/reagent_containers/food/snacks/nachos/New()
- ..()
- reagents.add_reagent("nutriment", 1)
- bitesize = 1
-
-/obj/item/weapon/reagent_containers/food/snacks/cheesenachos
- name = "cheesy nachos"
- desc = "The delicious combination of nachos and melting cheese."
- icon_state = "cheesenachos"
- nutriment_amt = 5
- nutriment_desc = list("salt" = 2, "cheese" = 3)
-
-/obj/item/weapon/reagent_containers/food/snacks/cheesenachos/New()
- ..()
- reagents.add_reagent("nutriment", 5)
- reagents.add_reagent("protein", 2)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/cubannachos
- name = "cuban nachos"
- desc = "That's some dangerously spicy nachos."
- icon_state = "cubannachos"
- nutriment_amt = 6
- nutriment_desc = list("salt" = 1, "cheese" = 2, "chili peppers" = 3)
-
-/obj/item/weapon/reagent_containers/food/snacks/cubannachos/New()
- ..()
- reagents.add_reagent("nutriment", 5)
- reagents.add_reagent("capsaicin", 4)
- bitesize = 2
-
-/obj/item/weapon/reagent_containers/food/snacks/piginblanket
- name = "pig in a blanket"
- desc = "A sausage embedded in soft, fluffy pastry. Free this pig from its blanket prison by eating it."
- icon_state = "piginblanket"
- nutriment_amt = 6
- nutriment_desc = list("meat" = 3, "pastry" = 3)
-
-/obj/item/weapon/reagent_containers/food/snacks/piginblanket/New()
- ..()
- reagents.add_reagent("nutriment", 6)
- reagents.add_reagent("protein", 4)
+//Food items that are eaten normally and don't leave anything behind.
+/obj/item/weapon/reagent_containers/food/snacks
+ name = "snack"
+ desc = "yummy"
+ icon = 'icons/obj/food.dmi'
+ icon_state = null
+ var/bitesize = 1
+ var/bitecount = 0
+ var/trash = null
+ var/slice_path
+ var/slices_num
+ var/dried_type = null
+ var/dry = 0
+ var/nutriment_amt = 0
+ var/list/nutriment_desc = list("food" = 1)
+ center_of_mass = list("x"=16, "y"=16)
+ w_class = ITEMSIZE_SMALL
+ force = 1
+
+/obj/item/weapon/reagent_containers/food/snacks/New()
+ ..()
+ if(nutriment_amt)
+ reagents.add_reagent("nutriment",nutriment_amt,nutriment_desc)
+
+/obj/item/weapon/reagent_containers/food/snacks/New()
+ ..()
+ if(nutriment_amt)
+ reagents.add_reagent("nutriment", nutriment_amt)
+
+ //Placeholder for effect that trigger on eating that aren't tied to reagents.
+/obj/item/weapon/reagent_containers/food/snacks/proc/On_Consume(var/mob/M)
+ if(!usr)
+ usr = M
+ if(!reagents.total_volume)
+ M.visible_message("[M] finishes eating \the [src].","You finish eating \the [src].")
+ usr.drop_from_inventory(src) //so icons update :[
+
+ if(trash)
+ if(ispath(trash,/obj/item))
+ var/obj/item/TrashItem = new trash(usr)
+ usr.put_in_hands(TrashItem)
+ else if(istype(trash,/obj/item))
+ usr.put_in_hands(trash)
+ qdel(src)
+ return
+
+/obj/item/weapon/reagent_containers/food/snacks/attack_self(mob/user as mob)
+ return
+
+/obj/item/weapon/reagent_containers/food/snacks/attack(mob/M as mob, mob/user as mob, def_zone)
+ if(reagents && !reagents.total_volume)
+ user << "None of [src] left!"
+ user.drop_from_inventory(src)
+ qdel(src)
+ return 0
+
+ if(istype(M, /mob/living/carbon))
+ //TODO: replace with standard_feed_mob() call.
+
+ var/fullness = M.nutrition + (M.reagents.get_reagent_amount("nutriment") * 25)
+ if(M == user) //If you're eating it yourself
+ if(istype(M,/mob/living/carbon/human))
+ var/mob/living/carbon/human/H = M
+ if(!H.check_has_mouth())
+ user << "Where do you intend to put \the [src]? You don't have a mouth!"
+ return
+ var/obj/item/blocked = H.check_mouth_coverage()
+ if(blocked)
+ user << "\The [blocked] is in the way!"
+ return
+
+ user.setClickCooldown(user.get_attack_speed(src)) //puts a limit on how fast people can eat/drink things
+ if (fullness <= 50)
+ M << "You hungrily chew out a piece of [src] and gobble it!"
+ if (fullness > 50 && fullness <= 150)
+ M << "You hungrily begin to eat [src]."
+ if (fullness > 150 && fullness <= 350)
+ M << "You take a bite of [src]."
+ if (fullness > 350 && fullness <= 550)
+ M << "You unwillingly chew a bit of [src]."
+ if (fullness > (550 * (1 + M.overeatduration / 2000))) // The more you eat - the more you can eat
+ M << "You cannot force any more of [src] to go down your throat."
+ return 0
+
+ else if(user.a_intent == I_HURT)
+ return ..()
+
+ else
+ if(istype(M,/mob/living/carbon/human))
+ var/mob/living/carbon/human/H = M
+ if(!H.check_has_mouth())
+ user << "Where do you intend to put \the [src]? \The [H] doesn't have a mouth!"
+ return
+ var/obj/item/blocked = H.check_mouth_coverage()
+ if(blocked)
+ user << "\The [blocked] is in the way!"
+ return
+
+ if (fullness <= (550 * (1 + M.overeatduration / 1000)))
+ user.visible_message("[user] attempts to feed [M] [src].")
+ else
+ user.visible_message("[user] cannot force anymore of [src] down [M]'s throat.")
+ return 0
+
+ user.setClickCooldown(user.get_attack_speed(src))
+ if(!do_mob(user, M)) return
+
+ //Do we really care about this
+ add_attack_logs(user,M,"Fed with [src.name] containing [reagentlist(src)]", admin_notify = FALSE)
+
+ user.visible_message("[user] feeds [M] [src].")
+
+ else
+ user << "This creature does not seem to have a mouth!"
+ return
+
+ if(reagents) //Handle ingestion of the reagent.
+ playsound(M.loc,'sound/items/eatfood.ogg', rand(10,50), 1)
+ if(reagents.total_volume)
+ if(reagents.total_volume > bitesize)
+ reagents.trans_to_mob(M, bitesize, CHEM_INGEST)
+ else
+ reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST)
+ bitecount++
+ On_Consume(M)
+ return 1
+
+ return 0
+
+/obj/item/weapon/reagent_containers/food/snacks/examine(mob/user)
+ if(!..(user, 1))
+ return
+ if (bitecount==0)
+ return
+ else if (bitecount==1)
+ user << "\The [src] was bitten by someone!"
+ else if (bitecount<=3)
+ user << "\The [src] was bitten [bitecount] times!"
+ else
+ user << "\The [src] was bitten multiple times!"
+
+/obj/item/weapon/reagent_containers/food/snacks/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ if(istype(W,/obj/item/weapon/storage))
+ ..() // -> item/attackby()
+ return
+
+ // Eating with forks
+ if(istype(W,/obj/item/weapon/material/kitchen/utensil))
+ var/obj/item/weapon/material/kitchen/utensil/U = W
+ if(U.scoop_food)
+ if(!U.reagents)
+ U.create_reagents(5)
+
+ if (U.reagents.total_volume > 0)
+ user << "You already have something on your [U]."
+ return
+
+ user.visible_message( \
+ "[user] scoops up some [src] with \the [U]!", \
+ "You scoop up some [src] with \the [U]!" \
+ )
+
+ src.bitecount++
+ U.overlays.Cut()
+ U.loaded = "[src]"
+ var/image/I = new(U.icon, "loadedfood")
+ I.color = src.filling_color
+ U.overlays += I
+
+ reagents.trans_to_obj(U, min(reagents.total_volume,5))
+
+ if (reagents.total_volume <= 0)
+ qdel(src)
+ return
+
+ if (is_sliceable())
+ //these are used to allow hiding edge items in food that is not on a table/tray
+ var/can_slice_here = isturf(src.loc) && ((locate(/obj/structure/table) in src.loc) || (locate(/obj/machinery/optable) in src.loc) || (locate(/obj/item/weapon/tray) in src.loc))
+ var/hide_item = !has_edge(W) || !can_slice_here
+
+ if (hide_item)
+ if (W.w_class >= src.w_class || is_robot_module(W))
+ return
+
+ to_chat(user, "You slip \the [W] inside \the [src].")
+ user.drop_from_inventory(W, src)
+ add_fingerprint(user)
+ contents += W
+ return
+
+ if (has_edge(W))
+ if (!can_slice_here)
+ to_chat(user, "You cannot slice \the [src] here! You need a table or at least a tray to do it.")
+ return
+
+ var/slices_lost = 0
+ if (W.w_class > 3)
+ user.visible_message("\The [user] crudely slices \the [src] with [W]!", "You crudely slice \the [src] with your [W]!")
+ slices_lost = rand(1,min(1,round(slices_num/2)))
+ else
+ user.visible_message("\The [user] slices \the [src]!", "You slice \the [src]!")
+
+ var/reagents_per_slice = reagents.total_volume/slices_num
+ for(var/i=1 to (slices_num-slices_lost))
+ var/obj/slice = new slice_path (src.loc)
+ reagents.trans_to_obj(slice, reagents_per_slice)
+ qdel(src)
+ return
+
+/obj/item/weapon/reagent_containers/food/snacks/proc/is_sliceable()
+ return (slices_num && slice_path && slices_num > 0)
+
+/obj/item/weapon/reagent_containers/food/snacks/Destroy()
+ if(contents)
+ for(var/atom/movable/something in contents)
+ something.dropInto(loc)
+ . = ..()
+
+////////////////////////////////////////////////////////////////////////////////
+/// FOOD END
+////////////////////////////////////////////////////////////////////////////////
+/obj/item/weapon/reagent_containers/food/snacks/attack_generic(var/mob/living/user)
+ if(!isanimal(user) && !isalien(user))
+ return
+ user.visible_message("[user] nibbles away at \the [src].","You nibble away at \the [src].")
+ bitecount++
+ if(reagents)
+ reagents.trans_to_mob(user, bitesize, CHEM_INGEST)
+ spawn(5)
+ if(!src && !user.client)
+ user.custom_emote(1,"[pick("burps", "cries for more", "burps twice", "looks at the area where the food was")]")
+ qdel(src)
+ On_Consume(user)
+
+//////////////////////////////////////////////////
+////////////////////////////////////////////Snacks
+//////////////////////////////////////////////////
+//Items in the "Snacks" subcategory are food items that people actually eat. The key points are that they are created
+// already filled with reagents and are destroyed when empty. Additionally, they make a "munching" noise when eaten.
+
+//Notes by Darem: Food in the "snacks" subtype can hold a maximum of 50 units Generally speaking, you don't want to go over 40
+// total for the item because you want to leave space for extra condiments. If you want effect besides healing, add a reagent for
+// it. Try to stick to existing reagents when possible (so if you want a stronger healing effect, just use Tricordrazine). On use
+// effect (such as the old officer eating a donut code) requires a unique reagent (unless you can figure out a better way).
+
+//The nutriment reagent and bitesize variable replace the old heal_amt and amount variables. Each unit of nutriment is equal to
+// 2 of the old heal_amt variable. Bitesize is the rate at which the reagents are consumed. So if you have 6 nutriment and a
+// bitesize of 2, then it'll take 3 bites to eat. Unlike the old system, the contained reagents are evenly spread among all
+// the bites. No more contained reagents = no more bites.
+
+//Here is an example of the new formatting for anyone who wants to add more food items.
+///obj/item/weapon/reagent_containers/food/snacks/xenoburger //Identification path for the object.
+// name = "Xenoburger" //Name that displays in the UI.
+// desc = "Smells caustic. Tastes like heresy." //Duh
+// icon_state = "xburger" //Refers to an icon in food.dmi
+// New() //Don't mess with this.
+// ..() //Same here.
+// reagents.add_reagent("xenomicrobes", 10) //This is what is in the food item. you may copy/paste
+// reagents.add_reagent("nutriment", 2) // this line of code for all the contents.
+// bitesize = 3 //This is the amount each bite consumes.
+
+
+
+
+/obj/item/weapon/reagent_containers/food/snacks/aesirsalad
+ name = "Aesir salad"
+ desc = "Probably too incredible for mortal men to fully enjoy."
+ icon_state = "aesirsalad"
+ trash = /obj/item/trash/snack_bowl
+ filling_color = "#468C00"
+ center_of_mass = list("x"=17, "y"=11)
+ nutriment_amt = 8
+ nutriment_desc = list("apples" = 3,"salad" = 5)
+
+/obj/item/weapon/reagent_containers/food/snacks/aesirsalad/New()
+ ..()
+ reagents.add_reagent("doctorsdelight", 8)
+ reagents.add_reagent("tricordrazine", 8)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/candy
+ name = "candy"
+ desc = "Nougat, love it or hate it."
+ icon_state = "candy"
+ trash = /obj/item/trash/candy
+ filling_color = "#7D5F46"
+ center_of_mass = list("x"=15, "y"=15)
+ nutriment_amt = 1
+ nutriment_desc = list("candy" = 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/candy/New()
+ ..()
+ reagents.add_reagent("sugar", 3)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar
+ name = "protein bar"
+ desc = "SwoleMAX brand protein bars, guaranteed to get you feeling perfectly overconfident."
+ icon_state = "proteinbar"
+ trash = /obj/item/trash/candy/proteinbar
+ nutriment_amt = 9
+ nutriment_desc = list("candy" = 1, "protein" = 8)
+
+/obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar/New()
+ ..()
+ reagents.add_reagent("protein", 4)
+ reagents.add_reagent("sugar", 4)
+ bitesize = 6
+
+/obj/item/weapon/reagent_containers/food/snacks/candy/donor
+ name = "Donor Candy"
+ desc = "A little treat for blood donors."
+ trash = /obj/item/trash/candy
+ nutriment_amt = 9
+ nutriment_desc = list("candy" = 10)
+
+/obj/item/weapon/reagent_containers/food/snacks/candy/donor/New()
+ ..()
+ reagents.add_reagent("sugar", 3)
+ bitesize = 5
+
+/obj/item/weapon/reagent_containers/food/snacks/candy_corn
+ name = "candy corn"
+ desc = "It's a handful of candy corn. Cannot be stored in a detective's hat, alas."
+ icon_state = "candy_corn"
+ filling_color = "#FFFCB0"
+ center_of_mass = list("x"=14, "y"=10)
+ nutriment_amt = 4
+ nutriment_desc = list("candy corn" = 4)
+
+/obj/item/weapon/reagent_containers/food/snacks/candy_corn/New()
+ ..()
+ reagents.add_reagent("sugar", 2)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/chips
+ name = "chips"
+ desc = "Commander Riker's What-The-Crisps"
+ icon_state = "chips"
+ trash = /obj/item/trash/chips
+ filling_color = "#E8C31E"
+ center_of_mass = list("x"=15, "y"=15)
+ nutriment_amt = 3
+ nutriment_desc = list("salt" = 1, "chips" = 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/chips/New()
+ ..()
+ bitesize = 1
+
+/obj/item/weapon/reagent_containers/food/snacks/cookie
+ name = "cookie"
+ desc = "COOKIE!!!"
+ icon_state = "COOKIE!!!"
+ filling_color = "#DBC94F"
+ center_of_mass = list("x"=17, "y"=18)
+ nutriment_amt = 5
+ nutriment_desc = list("sweetness" = 3, "cookie" = 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/cookie/New()
+ ..()
+ bitesize = 1
+
+/obj/item/weapon/reagent_containers/food/snacks/chocolatebar
+ name = "Chocolate Bar"
+ desc = "Such sweet, fattening food."
+ icon_state = "chocolatebar"
+ filling_color = "#7D5F46"
+ center_of_mass = list("x"=15, "y"=15)
+ nutriment_amt = 2
+ nutriment_desc = list("chocolate" = 5)
+
+/obj/item/weapon/reagent_containers/food/snacks/chocolatebar/New()
+ ..()
+ reagents.add_reagent("sugar", 2)
+ reagents.add_reagent("coco", 2)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/chocolatepiece
+ name = "chocolate piece"
+ desc = "A luscious milk chocolate piece filled with gooey caramel."
+ icon_state = "chocolatepiece"
+ filling_color = "#7D5F46"
+ center_of_mass = list("x"=15, "y"=15)
+ nutriment_amt = 1
+ nutriment_desc = list("chocolate" = 3, "caramel" = 2, "lusciousness" = 1)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/chocolatepiece/white
+ name = "white chocolate piece"
+ desc = "A creamy white chocolate piece drizzled in milk chocolate."
+ icon_state = "chocolatepiece_white"
+ filling_color = "#E2DAD3"
+ nutriment_desc = list("white chocolate" = 3, "creaminess" = 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/chocolatepiece/truffle
+ name = "chocolate truffle"
+ desc = "A bite-sized milk chocolate truffle that could buy anyone's love."
+ icon_state = "chocolatepiece_truffle"
+ nutriment_desc = list("chocolate" = 3, "undying devotion" = 3)
+
+/obj/item/weapon/reagent_containers/food/snacks/chocolateegg
+ name = "Chocolate Egg"
+ desc = "Such sweet, fattening food."
+ icon_state = "chocolateegg"
+ filling_color = "#7D5F46"
+ center_of_mass = list("x"=16, "y"=13)
+ nutriment_amt = 3
+ nutriment_desc = list("chocolate" = 5)
+
+/obj/item/weapon/reagent_containers/food/snacks/chocolateegg/New()
+ ..()
+ reagents.add_reagent("sugar", 2)
+ reagents.add_reagent("coco", 2)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/donut
+ name = "donut"
+ desc = "Goes great with Robust Coffee."
+ icon_state = "donut1"
+ filling_color = "#D9C386"
+ var/overlay_state = "box-donut1"
+ center_of_mass = list("x"=13, "y"=16)
+ nutriment_desc = list("sweetness", "donut")
+
+/obj/item/weapon/reagent_containers/food/snacks/donut/normal
+ name = "donut"
+ desc = "Goes great with Robust Coffee."
+ icon_state = "donut1"
+ nutriment_amt = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/donut/normal/New()
+ ..()
+ reagents.add_reagent("nutriment", 3)
+ reagents.add_reagent("sprinkles", 1)
+ src.bitesize = 3
+ if(prob(30))
+ src.icon_state = "donut2"
+ src.overlay_state = "box-donut2"
+ src.name = "frosted donut"
+ reagents.add_reagent("sprinkles", 2)
+ center_of_mass = list("x"=19, "y"=16)
+
+/obj/item/weapon/reagent_containers/food/snacks/donut/chaos
+ name = "Chaos Donut"
+ desc = "Like life, it never quite tastes the same."
+ icon_state = "donut1"
+ filling_color = "#ED11E6"
+ nutriment_amt = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/donut/chaos/New()
+ ..()
+ reagents.add_reagent("sprinkles", 1)
+ bitesize = 10
+ var/chaosselect = pick(1,2,3,4,5,6,7,8,9,10)
+ switch(chaosselect)
+ if(1)
+ reagents.add_reagent("nutriment", 3)
+ if(2)
+ reagents.add_reagent("capsaicin", 3)
+ if(3)
+ reagents.add_reagent("frostoil", 3)
+ if(4)
+ reagents.add_reagent("sprinkles", 3)
+ if(5)
+ reagents.add_reagent("phoron", 3)
+ if(6)
+ reagents.add_reagent("coco", 3)
+ if(7)
+ reagents.add_reagent("slimejelly", 3)
+ if(8)
+ reagents.add_reagent("banana", 3)
+ if(9)
+ reagents.add_reagent("berryjuice", 3)
+ if(10)
+ reagents.add_reagent("tricordrazine", 3)
+ if(prob(30))
+ src.icon_state = "donut2"
+ src.overlay_state = "box-donut2"
+ src.name = "Frosted Chaos Donut"
+ reagents.add_reagent("sprinkles", 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/donut/jelly
+ name = "Jelly Donut"
+ desc = "You jelly?"
+ icon_state = "jdonut1"
+ filling_color = "#ED1169"
+ center_of_mass = list("x"=16, "y"=11)
+ nutriment_amt = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/donut/jelly/New()
+ ..()
+ reagents.add_reagent("sprinkles", 1)
+ reagents.add_reagent("berryjuice", 5)
+ bitesize = 5
+ if(prob(30))
+ src.icon_state = "jdonut2"
+ src.overlay_state = "box-donut2"
+ src.name = "Frosted Jelly Donut"
+ reagents.add_reagent("sprinkles", 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/donut/slimejelly
+ name = "Jelly Donut"
+ desc = "You jelly?"
+ icon_state = "jdonut1"
+ filling_color = "#ED1169"
+ center_of_mass = list("x"=16, "y"=11)
+ nutriment_amt = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/donut/slimejelly/New()
+ ..()
+ reagents.add_reagent("sprinkles", 1)
+ reagents.add_reagent("slimejelly", 5)
+ bitesize = 5
+ if(prob(30))
+ src.icon_state = "jdonut2"
+ src.overlay_state = "box-donut2"
+ src.name = "Frosted Jelly Donut"
+ reagents.add_reagent("sprinkles", 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly
+ name = "Jelly Donut"
+ desc = "You jelly?"
+ icon_state = "jdonut1"
+ filling_color = "#ED1169"
+ center_of_mass = list("x"=16, "y"=11)
+ nutriment_amt = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly/New()
+ ..()
+ reagents.add_reagent("sprinkles", 1)
+ reagents.add_reagent("cherryjelly", 5)
+ bitesize = 5
+ if(prob(30))
+ src.icon_state = "jdonut2"
+ src.overlay_state = "box-donut2"
+ src.name = "Frosted Jelly Donut"
+ reagents.add_reagent("sprinkles", 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/egg
+ name = "egg"
+ desc = "An egg!"
+ icon_state = "egg"
+ filling_color = "#FDFFD1"
+ volume = 10
+ center_of_mass = list("x"=16, "y"=13)
+
+/obj/item/weapon/reagent_containers/food/snacks/egg/New()
+ ..()
+ reagents.add_reagent("egg", 3)
+
+/obj/item/weapon/reagent_containers/food/snacks/egg/afterattack(obj/O as obj, mob/user as mob, proximity)
+ if(istype(O,/obj/machinery/microwave))
+ return ..()
+ if(!(proximity && O.is_open_container()))
+ return
+ user << "You crack \the [src] into \the [O]."
+ reagents.trans_to(O, reagents.total_volume)
+ user.drop_from_inventory(src)
+ qdel(src)
+
+/obj/item/weapon/reagent_containers/food/snacks/egg/throw_impact(atom/hit_atom)
+ ..()
+ new/obj/effect/decal/cleanable/egg_smudge(src.loc)
+ src.reagents.splash(hit_atom, reagents.total_volume)
+ src.visible_message("[src.name] has been squashed.","You hear a smack.")
+ qdel(src)
+
+/obj/item/weapon/reagent_containers/food/snacks/egg/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ if(istype( W, /obj/item/weapon/pen/crayon ))
+ var/obj/item/weapon/pen/crayon/C = W
+ var/clr = C.colourName
+
+ if(!(clr in list("blue","green","mime","orange","purple","rainbow","red","yellow")))
+ usr << "The egg refuses to take on this color!"
+ return
+
+ usr << "You color \the [src] [clr]"
+ icon_state = "egg-[clr]"
+ else
+ ..()
+
+/obj/item/weapon/reagent_containers/food/snacks/egg/blue
+ icon_state = "egg-blue"
+
+/obj/item/weapon/reagent_containers/food/snacks/egg/green
+ icon_state = "egg-green"
+
+/obj/item/weapon/reagent_containers/food/snacks/egg/mime
+ icon_state = "egg-mime"
+
+/obj/item/weapon/reagent_containers/food/snacks/egg/orange
+ icon_state = "egg-orange"
+
+/obj/item/weapon/reagent_containers/food/snacks/egg/purple
+ icon_state = "egg-purple"
+
+/obj/item/weapon/reagent_containers/food/snacks/egg/rainbow
+ icon_state = "egg-rainbow"
+
+/obj/item/weapon/reagent_containers/food/snacks/egg/red
+ icon_state = "egg-red"
+
+/obj/item/weapon/reagent_containers/food/snacks/egg/yellow
+ icon_state = "egg-yellow"
+
+/obj/item/weapon/reagent_containers/food/snacks/friedegg
+ name = "Fried egg"
+ desc = "A fried egg, with a touch of salt and pepper."
+ icon_state = "friedegg"
+ filling_color = "#FFDF78"
+ center_of_mass = list("x"=16, "y"=14)
+
+/obj/item/weapon/reagent_containers/food/snacks/friedegg/New()
+ ..()
+ reagents.add_reagent("protein", 3)
+ reagents.add_reagent("sodiumchloride", 1)
+ reagents.add_reagent("blackpepper", 1)
+ bitesize = 1
+
+/obj/item/weapon/reagent_containers/food/snacks/boiledegg
+ name = "Boiled egg"
+ desc = "A hard boiled egg."
+ icon_state = "egg"
+ filling_color = "#FFFFFF"
+
+/obj/item/weapon/reagent_containers/food/snacks/boiledegg/New()
+ ..()
+ reagents.add_reagent("protein", 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/organ
+ name = "organ"
+ desc = "It's good for you."
+ icon = 'icons/obj/surgery.dmi'
+ icon_state = "appendix"
+ filling_color = "#E00D34"
+ center_of_mass = list("x"=16, "y"=16)
+
+/obj/item/weapon/reagent_containers/food/snacks/organ/New()
+ ..()
+ reagents.add_reagent("protein", rand(3,5))
+ reagents.add_reagent("toxin", rand(1,3))
+ src.bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/tofu
+ name = "Tofu"
+ icon_state = "tofu"
+ desc = "We all love tofu."
+ filling_color = "#FFFEE0"
+ center_of_mass = list("x"=17, "y"=10)
+ nutriment_amt = 3
+ nutriment_desc = list("tofu" = 3, "goeyness" = 3)
+
+/obj/item/weapon/reagent_containers/food/snacks/tofu/New()
+ ..()
+ src.bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/tofurkey
+ name = "Tofurkey"
+ desc = "A fake turkey made from tofu."
+ icon_state = "tofurkey"
+ filling_color = "#FFFEE0"
+ center_of_mass = list("x"=16, "y"=8)
+ nutriment_amt = 12
+ nutriment_desc = list("turkey" = 3, "tofu" = 5, "goeyness" = 4)
+
+/obj/item/weapon/reagent_containers/food/snacks/tofurkey/New()
+ ..()
+ reagents.add_reagent("stoxin", 3)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/stuffing
+ name = "Stuffing"
+ desc = "Moist, peppery breadcrumbs for filling the body cavities of dead birds. Dig in!"
+ icon_state = "stuffing"
+ filling_color = "#C9AC83"
+ center_of_mass = list("x"=16, "y"=10)
+ nutriment_amt = 3
+ nutriment_desc = list("dryness" = 2, "bread" = 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/stuffing/New()
+ ..()
+ bitesize = 1
+
+/obj/item/weapon/reagent_containers/food/snacks/carpmeat
+ name = "carp fillet"
+ desc = "A fillet of spess carp meat"
+ icon_state = "fishfillet"
+ filling_color = "#FFDEFE"
+ center_of_mass = list("x"=17, "y"=13)
+
+/obj/item/weapon/reagent_containers/food/snacks/carpmeat/New()
+ ..()
+ reagents.add_reagent("protein", 3)
+ reagents.add_reagent("carpotoxin", 3)
+ src.bitesize = 6
+
+/obj/item/weapon/reagent_containers/food/snacks/fishfingers
+ name = "Fish Fingers"
+ desc = "A finger of fish."
+ icon_state = "fishfingers"
+ filling_color = "#FFDEFE"
+ center_of_mass = list("x"=16, "y"=13)
+
+/obj/item/weapon/reagent_containers/food/snacks/fishfingers/New()
+ ..()
+ reagents.add_reagent("protein", 4)
+ reagents.add_reagent("carpotoxin", 3)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice
+ name = "huge mushroom slice"
+ desc = "A slice from a huge mushroom."
+ icon_state = "hugemushroomslice"
+ filling_color = "#E0D7C5"
+ center_of_mass = list("x"=17, "y"=16)
+ nutriment_amt = 3
+ nutriment_desc = list("raw" = 2, "mushroom" = 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/hugemushroomslice/New()
+ ..()
+ reagents.add_reagent("psilocybin", 3)
+ src.bitesize = 6
+
+/obj/item/weapon/reagent_containers/food/snacks/tomatomeat
+ name = "tomato slice"
+ desc = "A slice from a huge tomato"
+ icon_state = "tomatomeat"
+ filling_color = "#DB0000"
+ center_of_mass = list("x"=17, "y"=16)
+ nutriment_amt = 3
+ nutriment_desc = list("raw" = 2, "tomato" = 3)
+
+/obj/item/weapon/reagent_containers/food/snacks/tomatomeat/New()
+ ..()
+ src.bitesize = 6
+
+/obj/item/weapon/reagent_containers/food/snacks/bearmeat
+ name = "bear meat"
+ desc = "A very manly slab of meat."
+ icon_state = "bearmeat"
+ filling_color = "#DB0000"
+ center_of_mass = list("x"=16, "y"=10)
+
+/obj/item/weapon/reagent_containers/food/snacks/bearmeat/New()
+ ..()
+ reagents.add_reagent("protein", 12)
+ reagents.add_reagent("hyperzine", 5)
+ src.bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/xenomeat
+ name = "xenomeat"
+ desc = "A slab of green meat. Smells like acid."
+ icon_state = "xenomeat"
+ filling_color = "#43DE18"
+ center_of_mass = list("x"=16, "y"=10)
+
+/obj/item/weapon/reagent_containers/food/snacks/xenomeat/New()
+ ..()
+ reagents.add_reagent("protein", 6)
+ reagents.add_reagent("pacid",6)
+ src.bitesize = 6
+
+/obj/item/weapon/reagent_containers/food/snacks/xenomeat/spidermeat // Substitute for recipes requiring xeno meat.
+ name = "spider meat"
+ desc = "A slab of green meat."
+ icon_state = "xenomeat"
+ filling_color = "#43DE18"
+ center_of_mass = list("x"=16, "y"=10)
+
+/obj/item/weapon/reagent_containers/food/snacks/xenomeat/spidermeat/New()
+ ..()
+ reagents.add_reagent("spidertoxin",6)
+ reagents.remove_reagent("pacid",6)
+ src.bitesize = 6
+
+/obj/item/weapon/reagent_containers/food/snacks/meatball
+ name = "meatball"
+ desc = "A great meal all round."
+ icon_state = "meatball"
+ filling_color = "#DB0000"
+ center_of_mass = list("x"=16, "y"=16)
+
+/obj/item/weapon/reagent_containers/food/snacks/meatball/New()
+ ..()
+ reagents.add_reagent("protein", 3)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/sausage
+ name = "Sausage"
+ desc = "A piece of mixed, long meat."
+ icon_state = "sausage"
+ filling_color = "#DB0000"
+ center_of_mass = list("x"=16, "y"=16)
+
+/obj/item/weapon/reagent_containers/food/snacks/sausage/New()
+ ..()
+ reagents.add_reagent("protein", 6)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/donkpocket
+ name = "Donk-pocket"
+ desc = "The food of choice for the seasoned traitor."
+ icon_state = "donkpocket"
+ filling_color = "#DEDEAB"
+ center_of_mass = list("x"=16, "y"=10)
+ var/warm
+ var/list/heated_reagents
+
+/obj/item/weapon/reagent_containers/food/snacks/donkpocket/New()
+ ..()
+ reagents.add_reagent("nutriment", 2)
+ reagents.add_reagent("protein", 2)
+
+ warm = 0
+ heated_reagents = list("tricordrazine" = 5)
+
+/obj/item/weapon/reagent_containers/food/snacks/donkpocket/proc/heat()
+ warm = 1
+ for(var/reagent in heated_reagents)
+ reagents.add_reagent(reagent, heated_reagents[reagent])
+ bitesize = 6
+ name = "Warm " + name
+ cooltime()
+
+/obj/item/weapon/reagent_containers/food/snacks/donkpocket/proc/cooltime()
+ if (src.warm)
+ spawn(4200)
+ src.warm = 0
+ for(var/reagent in heated_reagents)
+ src.reagents.del_reagent(reagent)
+ src.name = initial(name)
+ return
+
+/obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket
+ name = "\improper Sin-pocket"
+ desc = "The food of choice for the veteran. Do NOT overconsume."
+ filling_color = "#6D6D00"
+ heated_reagents = list("doctorsdelight" = 5, "hyperzine" = 0.75, "synaptizine" = 0.25)
+ var/has_been_heated = 0
+
+/obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket/attack_self(mob/user)
+ if(has_been_heated)
+ user << "The heating chemicals have already been spent."
+ return
+ has_been_heated = 1
+ user.visible_message("[user] crushes \the [src] package.", "You crush \the [src] package and feel a comfortable heat build up.")
+ spawn(200)
+ user << "You think \the [src] is ready to eat about now."
+ heat()
+
+/obj/item/weapon/reagent_containers/food/snacks/brainburger
+ name = "brainburger"
+ desc = "A strange looking burger. It looks almost sentient."
+ icon_state = "brainburger"
+ filling_color = "#F2B6EA"
+ center_of_mass = list("x"=15, "y"=11)
+
+/obj/item/weapon/reagent_containers/food/snacks/brainburger/New()
+ ..()
+ reagents.add_reagent("protein", 6)
+ reagents.add_reagent("alkysine", 6)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/ghostburger
+ name = "Ghost Burger"
+ desc = "Spooky! It doesn't look very filling."
+ icon_state = "ghostburger"
+ filling_color = "#FFF2FF"
+ center_of_mass = list("x"=16, "y"=11)
+ nutriment_desc = list("buns" = 3, "spookiness" = 3)
+ nutriment_amt = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/ghostburger/New()
+ ..()
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/human
+ var/hname = ""
+ var/job = null
+ filling_color = "#D63C3C"
+
+/obj/item/weapon/reagent_containers/food/snacks/human/burger
+ name = "-burger"
+ desc = "A bloody burger."
+ icon_state = "hburger"
+ center_of_mass = list("x"=16, "y"=11)
+
+/obj/item/weapon/reagent_containers/food/snacks/human/burger/New()
+ ..()
+ reagents.add_reagent("protein", 6)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/cheeseburger
+ name = "cheeseburger"
+ desc = "The cheese adds a good flavor."
+ icon_state = "cheeseburger"
+ center_of_mass = list("x"=16, "y"=11)
+ nutriment_amt = 2
+ nutriment_desc = list("cheese" = 2, "bun" = 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/cheeseburger/New()
+ ..()
+ reagents.add_reagent("protein", 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/monkeyburger
+ name = "burger"
+ desc = "The cornerstone of every nutritious breakfast."
+ icon_state = "hburger"
+ filling_color = "#D63C3C"
+ center_of_mass = list("x"=16, "y"=11)
+ nutriment_amt = 3
+ nutriment_desc = list("bun" = 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/monkeyburger/New()
+ ..()
+ reagents.add_reagent("protein", 3)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/fishburger
+ name = "Fillet -o- Carp Sandwich"
+ desc = "Almost like a carp is yelling somewhere... Give me back that fillet -o- carp, give me that carp."
+ icon_state = "fishburger"
+ filling_color = "#FFDEFE"
+ center_of_mass = list("x"=16, "y"=10)
+
+/obj/item/weapon/reagent_containers/food/snacks/fishburger/New()
+ ..()
+ reagents.add_reagent("protein", 6)
+ reagents.add_reagent("carpotoxin", 3)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/tofuburger
+ name = "Tofu Burger"
+ desc = "What.. is that meat?"
+ icon_state = "tofuburger"
+ filling_color = "#FFFEE0"
+ center_of_mass = list("x"=16, "y"=10)
+ nutriment_amt = 6
+ nutriment_desc = list("bun" = 2, "pseudo-soy meat" = 3)
+
+/obj/item/weapon/reagent_containers/food/snacks/tofuburger/New()
+ ..()
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/roburger
+ name = "roburger"
+ desc = "The lettuce is the only organic component. Beep."
+ icon_state = "roburger"
+ filling_color = "#CCCCCC"
+ center_of_mass = list("x"=16, "y"=11)
+ nutriment_amt = 2
+ nutriment_desc = list("bun" = 2, "metal" = 3)
+
+/obj/item/weapon/reagent_containers/food/snacks/roburger/New()
+ ..()
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/roburgerbig
+ name = "roburger"
+ desc = "This massive patty looks like poison. Beep."
+ icon_state = "roburger"
+ filling_color = "#CCCCCC"
+ volume = 100
+ center_of_mass = list("x"=16, "y"=11)
+
+/obj/item/weapon/reagent_containers/food/snacks/roburgerbig/New()
+ ..()
+ bitesize = 0.1
+
+/obj/item/weapon/reagent_containers/food/snacks/xenoburger
+ name = "xenoburger"
+ desc = "Smells caustic. Tastes like heresy."
+ icon_state = "xburger"
+ filling_color = "#43DE18"
+ center_of_mass = list("x"=16, "y"=11)
+
+/obj/item/weapon/reagent_containers/food/snacks/xenoburger/New()
+ ..()
+ reagents.add_reagent("protein", 8)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/clownburger
+ name = "Clown Burger"
+ desc = "This tastes funny..."
+ icon_state = "clownburger"
+ filling_color = "#FF00FF"
+ center_of_mass = list("x"=17, "y"=12)
+ nutriment_amt = 6
+ nutriment_desc = list("bun" = 2, "clown shoe" = 3)
+
+/obj/item/weapon/reagent_containers/food/snacks/clownburger/New()
+ ..()
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/mimeburger
+ name = "Mime Burger"
+ desc = "Its taste defies language."
+ icon_state = "mimeburger"
+ filling_color = "#FFFFFF"
+ center_of_mass = list("x"=16, "y"=11)
+ nutriment_amt = 6
+ nutriment_desc = list("bun" = 2, "face paint" = 3)
+
+/obj/item/weapon/reagent_containers/food/snacks/mimeburger/New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/omelette
+ name = "Omelette Du Fromage"
+ desc = "That's all you can say!"
+ icon_state = "omelette"
+ trash = /obj/item/trash/plate
+ filling_color = "#FFF9A8"
+ center_of_mass = list("x"=16, "y"=13)
+
+/obj/item/weapon/reagent_containers/food/snacks/omelette/New()
+ ..()
+ reagents.add_reagent("protein", 8)
+ bitesize = 1
+
+/obj/item/weapon/reagent_containers/food/snacks/muffin
+ name = "Muffin"
+ desc = "A delicious and spongy little cake"
+ icon_state = "muffin"
+ filling_color = "#E0CF9B"
+ center_of_mass = list("x"=17, "y"=4)
+ nutriment_amt = 6
+ nutriment_desc = list("sweetness" = 3, "muffin" = 3)
+
+/obj/item/weapon/reagent_containers/food/snacks/muffin/New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/pie
+ name = "Banana Cream Pie"
+ desc = "Just like back home, on clown planet! HONK!"
+ icon_state = "pie"
+ trash = /obj/item/trash/plate
+ filling_color = "#FBFFB8"
+ center_of_mass = list("x"=16, "y"=13)
+ nutriment_amt = 4
+ nutriment_desc = list("pie" = 3, "cream" = 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/pie/New()
+ ..()
+ reagents.add_reagent("banana",5)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/pie/throw_impact(atom/hit_atom)
+ ..()
+ new/obj/effect/decal/cleanable/pie_smudge(src.loc)
+ src.visible_message("\The [src.name] splats.","You hear a splat.")
+ qdel(src)
+
+/obj/item/weapon/reagent_containers/food/snacks/berryclafoutis
+ name = "Berry Clafoutis"
+ desc = "No black birds, this is a good sign."
+ icon_state = "berryclafoutis"
+ trash = /obj/item/trash/plate
+ center_of_mass = list("x"=16, "y"=13)
+ nutriment_amt = 4
+ nutriment_desc = list("sweetness" = 2, "pie" = 3)
+
+/obj/item/weapon/reagent_containers/food/snacks/berryclafoutis/New()
+ ..()
+ reagents.add_reagent("berryjuice", 5)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/waffles
+ name = "waffles"
+ desc = "Mmm, waffles"
+ icon_state = "waffles"
+ trash = /obj/item/trash/waffles
+ filling_color = "#E6DEB5"
+ center_of_mass = list("x"=15, "y"=11)
+ nutriment_amt = 8
+ nutriment_desc = list("waffle" = 8)
+
+/obj/item/weapon/reagent_containers/food/snacks/waffles/New()
+ ..()
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/eggplantparm
+ name = "Eggplant Parmigiana"
+ desc = "The only good recipe for eggplant."
+ icon_state = "eggplantparm"
+ trash = /obj/item/trash/plate
+ filling_color = "#4D2F5E"
+ center_of_mass = list("x"=16, "y"=11)
+ nutriment_amt = 6
+ nutriment_desc = list("cheese" = 3, "eggplant" = 3)
+
+/obj/item/weapon/reagent_containers/food/snacks/eggplantparm/New()
+ ..()
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/soylentgreen
+ name = "Soylent Green"
+ desc = "Not made of people. Honest." //Totally people.
+ icon_state = "soylent_green"
+ trash = /obj/item/trash/waffles
+ filling_color = "#B8E6B5"
+ center_of_mass = list("x"=15, "y"=11)
+
+/obj/item/weapon/reagent_containers/food/snacks/soylentgreen/New()
+ ..()
+ reagents.add_reagent("protein", 10)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/soylenviridians
+ name = "Soylen Virdians"
+ desc = "Not made of people. Honest." //Actually honest for once.
+ icon_state = "soylent_yellow"
+ trash = /obj/item/trash/waffles
+ filling_color = "#E6FA61"
+ center_of_mass = list("x"=15, "y"=11)
+ nutriment_amt = 10
+ nutriment_desc = list("some sort of protein" = 10) //seasoned VERY well.
+
+/obj/item/weapon/reagent_containers/food/snacks/soylenviridians/New()
+ ..()
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/meatpie
+ name = "Meat-pie"
+ icon_state = "meatpie"
+ desc = "An old barber recipe, very delicious!"
+ trash = /obj/item/trash/plate
+ filling_color = "#948051"
+ center_of_mass = list("x"=16, "y"=13)
+
+/obj/item/weapon/reagent_containers/food/snacks/meatpie/New()
+ ..()
+ reagents.add_reagent("protein", 10)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/tofupie
+ name = "Tofu-pie"
+ icon_state = "meatpie"
+ desc = "A delicious tofu pie."
+ trash = /obj/item/trash/plate
+ filling_color = "#FFFEE0"
+ center_of_mass = list("x"=16, "y"=13)
+ nutriment_amt = 10
+ nutriment_desc = list("tofu" = 2, "pie" = 8)
+
+/obj/item/weapon/reagent_containers/food/snacks/tofupie/New()
+ ..()
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/amanita_pie
+ name = "amanita pie"
+ desc = "Sweet and tasty poison pie."
+ icon_state = "amanita_pie"
+ filling_color = "#FFCCCC"
+ center_of_mass = list("x"=17, "y"=9)
+ nutriment_amt = 5
+ nutriment_desc = list("sweetness" = 3, "mushroom" = 3, "pie" = 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/amanita_pie/New()
+ ..()
+ reagents.add_reagent("amatoxin", 3)
+ reagents.add_reagent("psilocybin", 1)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/plump_pie
+ name = "plump pie"
+ desc = "I bet you love stuff made out of plump helmets!"
+ icon_state = "plump_pie"
+ filling_color = "#B8279B"
+ center_of_mass = list("x"=17, "y"=9)
+ nutriment_amt = 8
+ nutriment_desc = list("heartiness" = 2, "mushroom" = 3, "pie" = 3)
+
+/obj/item/weapon/reagent_containers/food/snacks/plump_pie/New()
+ ..()
+ if(prob(10))
+ name = "exceptional plump pie"
+ desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump pie!"
+ reagents.add_reagent("nutriment", 8)
+ reagents.add_reagent("tricordrazine", 5)
+ bitesize = 2
+ else
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/xemeatpie
+ name = "Xeno-pie"
+ icon_state = "xenomeatpie"
+ desc = "A delicious meatpie. Probably heretical."
+ trash = /obj/item/trash/plate
+ filling_color = "#43DE18"
+ center_of_mass = list("x"=16, "y"=13)
+
+/obj/item/weapon/reagent_containers/food/snacks/xemeatpie/New()
+ ..()
+ reagents.add_reagent("protein", 10)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/wingfangchu
+ name = "Wing Fang Chu"
+ desc = "A savory dish of alien wing wang in soy."
+ icon_state = "wingfangchu"
+ trash = /obj/item/trash/snack_bowl
+ filling_color = "#43DE18"
+ center_of_mass = list("x"=17, "y"=9)
+
+/obj/item/weapon/reagent_containers/food/snacks/wingfangchu/New()
+ ..()
+ reagents.add_reagent("protein", 6)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/human/kabob
+ name = "-kabob"
+ icon_state = "kabob"
+ desc = "A human meat, on a stick."
+ trash = /obj/item/stack/rods
+ filling_color = "#A85340"
+ center_of_mass = list("x"=17, "y"=15)
+
+/obj/item/weapon/reagent_containers/food/snacks/human/kabob/New()
+ ..()
+ reagents.add_reagent("protein", 8)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/monkeykabob
+ name = "Meat-kabob"
+ icon_state = "kabob"
+ desc = "Delicious meat, on a stick."
+ trash = /obj/item/stack/rods
+ filling_color = "#A85340"
+ center_of_mass = list("x"=17, "y"=15)
+
+/obj/item/weapon/reagent_containers/food/snacks/monkeykabob/New()
+ ..()
+ reagents.add_reagent("protein", 8)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/tofukabob
+ name = "Tofu-kabob"
+ icon_state = "kabob"
+ desc = "Vegan meat, on a stick."
+ trash = /obj/item/stack/rods
+ filling_color = "#FFFEE0"
+
+ center_of_mass = list("x"=17, "y"=15)
+ nutriment_amt = 8
+ nutriment_desc = list("tofu" = 3, "metal" = 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/tofukabob/New()
+ ..()
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/cubancarp
+ name = "Cuban Carp"
+ desc = "A sandwich that burns your tongue and then leaves it numb!"
+ icon_state = "cubancarp"
+ trash = /obj/item/trash/plate
+ filling_color = "#E9ADFF"
+ center_of_mass = list("x"=12, "y"=5)
+ nutriment_amt = 3
+ nutriment_desc = list("toasted bread" = 3)
+
+/obj/item/weapon/reagent_containers/food/snacks/cubancarp/New()
+ ..()
+ reagents.add_reagent("protein", 3)
+ reagents.add_reagent("carpotoxin", 3)
+ reagents.add_reagent("capsaicin", 3)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/popcorn
+ name = "Popcorn"
+ desc = "Now let's find some cinema."
+ icon_state = "popcorn"
+ trash = /obj/item/trash/popcorn
+ var/unpopped = 0
+ filling_color = "#FFFAD4"
+ center_of_mass = list("x"=16, "y"=8)
+ nutriment_amt = 2
+ nutriment_desc = list("popcorn" = 3)
+
+
+/obj/item/weapon/reagent_containers/food/snacks/popcorn/New()
+ ..()
+ unpopped = rand(1,10)
+ bitesize = 0.1 //this snack is supposed to be eating during looooong time. And this it not dinner food! --rastaf0
+
+/obj/item/weapon/reagent_containers/food/snacks/popcorn/On_Consume()
+ if(prob(unpopped)) //lol ...what's the point?
+ usr << "You bite down on an un-popped kernel!"
+ unpopped = max(0, unpopped-1)
+ ..()
+
+/obj/item/weapon/reagent_containers/food/snacks/sosjerky
+ name = "Scaredy's Private Reserve Beef Jerky"
+ icon_state = "sosjerky"
+ desc = "Beef jerky made from the finest space cows."
+ trash = /obj/item/trash/sosjerky
+ filling_color = "#631212"
+ center_of_mass = list("x"=15, "y"=9)
+
+/obj/item/weapon/reagent_containers/food/snacks/sosjerky/New()
+ ..()
+ reagents.add_reagent("protein", 4)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/no_raisin
+ name = "4no Raisins"
+ icon_state = "4no_raisins"
+ desc = "Best raisins in the universe. Not sure why."
+ trash = /obj/item/trash/raisins
+ filling_color = "#343834"
+ center_of_mass = list("x"=15, "y"=4)
+ nutriment_amt = 6
+ nutriment_desc = list("dried raisins" = 6)
+
+/obj/item/weapon/reagent_containers/food/snacks/no_raisin/New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+
+/obj/item/weapon/reagent_containers/food/snacks/spacetwinkie
+ name = "Space Twinkie"
+ icon_state = "space_twinkie"
+ desc = "Guaranteed to survive longer then you will."
+ filling_color = "#FFE591"
+ center_of_mass = list("x"=15, "y"=11)
+
+/obj/item/weapon/reagent_containers/food/snacks/spacetwinkie/New()
+ ..()
+ reagents.add_reagent("sugar", 4)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers
+ name = "Cheesie Honkers"
+ icon_state = "cheesie_honkers"
+ desc = "Bite sized cheesie snacks that will honk all over your mouth"
+ trash = /obj/item/trash/cheesie
+ filling_color = "#FFA305"
+ center_of_mass = list("x"=15, "y"=9)
+ nutriment_amt = 4
+ nutriment_desc = list("cheese" = 5, "chips" = 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers/New()
+ ..()
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/syndicake
+ name = "Syndi-Cakes"
+ icon_state = "syndi_cakes"
+ desc = "An extremely moist snack cake that tastes just as good after being nuked."
+ filling_color = "#FF5D05"
+ center_of_mass = list("x"=16, "y"=10)
+ trash = /obj/item/trash/syndi_cakes
+ nutriment_amt = 4
+ nutriment_desc = list("sweetness" = 3, "cake" = 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/syndicake/New()
+ ..()
+ reagents.add_reagent("doctorsdelight", 5)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/loadedbakedpotato
+ name = "Loaded Baked Potato"
+ desc = "Totally baked."
+ icon_state = "loadedbakedpotato"
+ filling_color = "#9C7A68"
+ center_of_mass = list("x"=16, "y"=10)
+ nutriment_amt = 3
+ nutriment_desc = list("baked potato" = 3)
+
+/obj/item/weapon/reagent_containers/food/snacks/loadedbakedpotato/New()
+ ..()
+ reagents.add_reagent("protein", 3)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/fries
+ name = "Space Fries"
+ desc = "AKA: French Fries, Freedom Fries, etc."
+ icon_state = "fries"
+ trash = /obj/item/trash/plate
+ filling_color = "#EDDD00"
+ center_of_mass = list("x"=16, "y"=11)
+ nutriment_amt = 4
+ nutriment_desc = list("fresh fries" = 4)
+
+/obj/item/weapon/reagent_containers/food/snacks/fries/New()
+ ..()
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/mashedpotato
+ name = "Mashed Potato"
+ desc = "Pillowy mounds of mashed potato."
+ icon_state = "mashedpotato"
+ trash = /obj/item/trash/plate
+ filling_color = "#EDDD00"
+ center_of_mass = list("x"=16, "y"=11)
+ nutriment_amt = 4
+ nutriment_desc = list("fluffy mashed potatoes" = 4)
+
+/obj/item/weapon/reagent_containers/food/snacks/mashedpotato/New()
+ ..()
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/bangersandmash
+ name = "Bangers and Mash"
+ desc = "An English treat."
+ icon_state = "bangersandmash"
+ trash = /obj/item/trash/plate
+ filling_color = "#EDDD00"
+ center_of_mass = list("x"=16, "y"=11)
+ nutriment_amt = 4
+ nutriment_desc = list("fluffy potato" = 3, "sausage" = 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/bangersandmash/New()
+ ..()
+ reagents.add_reagent("protein", 3)
+ bitesize = 4
+
+/obj/item/weapon/reagent_containers/food/snacks/cheesymash
+ name = "Cheesy Mashed Potato"
+ desc = "The only thing that could make mash better."
+ icon_state = "cheesymash"
+ trash = /obj/item/trash/plate
+ filling_color = "#EDDD00"
+ center_of_mass = list("x"=16, "y"=11)
+ nutriment_amt = 4
+ nutriment_desc = list("cheesy potato" = 4)
+
+/obj/item/weapon/reagent_containers/food/snacks/cheesymash/New()
+ ..()
+ reagents.add_reagent("protein", 3)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/blackpudding
+ name = "Black Pudding"
+ desc = "This doesn't seem like a pudding at all."
+ icon_state = "blackpudding"
+ filling_color = "#FF0000"
+ center_of_mass = list("x"=16, "y"=7)
+
+/obj/item/weapon/reagent_containers/food/snacks/blackpudding/New()
+ ..()
+ reagents.add_reagent("protein", 2)
+ reagents.add_reagent("blood", 5)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/soydope
+ name = "Soy Dope"
+ desc = "Dope from a soy."
+ icon_state = "soydope"
+ trash = /obj/item/trash/plate
+ filling_color = "#C4BF76"
+ center_of_mass = list("x"=16, "y"=10)
+ nutriment_amt = 2
+ nutriment_desc = list("slime" = 2, "soy" = 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/soydope/New()
+ ..()
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/spagetti
+ name = "Spaghetti"
+ desc = "A bundle of raw spaghetti."
+ icon_state = "spagetti"
+ filling_color = "#EDDD00"
+ center_of_mass = list("x"=16, "y"=16)
+ nutriment_amt = 1
+ nutriment_desc = list("noodles" = 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/spagetti/New()
+ ..()
+ bitesize = 1
+
+/obj/item/weapon/reagent_containers/food/snacks/cheesyfries
+ name = "Cheesy Fries"
+ desc = "Fries. Covered in cheese. Duh."
+ icon_state = "cheesyfries"
+ trash = /obj/item/trash/plate
+ filling_color = "#EDDD00"
+ center_of_mass = list("x"=16, "y"=11)
+ nutriment_amt = 4
+ nutriment_desc = list("fresh fries" = 3, "cheese" = 3)
+
+/obj/item/weapon/reagent_containers/food/snacks/cheesyfries/New()
+ ..()
+ reagents.add_reagent("protein", 2)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/fortunecookie
+ name = "Fortune cookie"
+ desc = "A true prophecy in each cookie!"
+ icon_state = "fortune_cookie"
+ filling_color = "#E8E79E"
+ center_of_mass = list("x"=15, "y"=14)
+ nutriment_amt = 3
+ nutriment_desc = list("fortune cookie" = 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/fortunecookie/New()
+ ..()
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/badrecipe
+ name = "Burned mess"
+ desc = "Someone should be demoted from chef for this."
+ icon_state = "badrecipe"
+ filling_color = "#211F02"
+ center_of_mass = list("x"=16, "y"=12)
+
+/obj/item/weapon/reagent_containers/food/snacks/badrecipe/New()
+ ..()
+ reagents.add_reagent("toxin", 1)
+ reagents.add_reagent("carbon", 3)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/meatsteak
+ name = "Meat steak"
+ desc = "A piece of hot spicy meat."
+ icon_state = "meatstake"
+ trash = /obj/item/trash/plate
+ filling_color = "#7A3D11"
+ center_of_mass = list("x"=16, "y"=13)
+
+/obj/item/weapon/reagent_containers/food/snacks/meatsteak/New()
+ ..()
+ reagents.add_reagent("protein", 4)
+ reagents.add_reagent("sodiumchloride", 1)
+ reagents.add_reagent("blackpepper", 1)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/spacylibertyduff
+ name = "Spacy Liberty Duff"
+ desc = "Jello gelatin, from Alfred Hubbard's cookbook"
+ icon_state = "spacylibertyduff"
+ trash = /obj/item/trash/snack_bowl
+ filling_color = "#42B873"
+ center_of_mass = list("x"=16, "y"=8)
+ nutriment_amt = 6
+ nutriment_desc = list("mushroom" = 6)
+
+/obj/item/weapon/reagent_containers/food/snacks/spacylibertyduff/New()
+ ..()
+ reagents.add_reagent("psilocybin", 6)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/amanitajelly
+ name = "Amanita Jelly"
+ desc = "Looks curiously toxic"
+ icon_state = "amanitajelly"
+ trash = /obj/item/trash/snack_bowl
+ filling_color = "#ED0758"
+ center_of_mass = list("x"=16, "y"=5)
+ nutriment_amt = 6
+ nutriment_desc = list("jelly" = 3, "mushroom" = 3)
+
+/obj/item/weapon/reagent_containers/food/snacks/amanitajelly/New()
+ ..()
+ reagents.add_reagent("amatoxin", 6)
+ reagents.add_reagent("psilocybin", 3)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/poppypretzel
+ name = "Poppy pretzel"
+ desc = "It's all twisted up!"
+ icon_state = "poppypretzel"
+ bitesize = 2
+ filling_color = "#916E36"
+ center_of_mass = list("x"=16, "y"=10)
+ nutriment_amt = 5
+ nutriment_desc = list("poppy seeds" = 2, "pretzel" = 3)
+
+/obj/item/weapon/reagent_containers/food/snacks/poppypretzel/New()
+ ..()
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/meatballsoup
+ name = "Meatball soup"
+ desc = "You've got balls kid, BALLS!"
+ icon_state = "meatballsoup"
+ trash = /obj/item/trash/snack_bowl
+ filling_color = "#785210"
+ center_of_mass = list("x"=16, "y"=8)
+
+/obj/item/weapon/reagent_containers/food/snacks/meatballsoup/New()
+ ..()
+ reagents.add_reagent("protein", 8)
+ reagents.add_reagent("water", 5)
+ bitesize = 5
+
+/obj/item/weapon/reagent_containers/food/snacks/slimesoup
+ name = "slime soup"
+ desc = "If no water is available, you may substitute tears."
+ icon_state = "slimesoup" //nonexistant?
+ filling_color = "#C4DBA0"
+
+/obj/item/weapon/reagent_containers/food/snacks/slimesoup/New()
+ ..()
+ reagents.add_reagent("slimejelly", 5)
+ reagents.add_reagent("water", 10)
+ bitesize = 5
+
+/obj/item/weapon/reagent_containers/food/snacks/bloodsoup
+ name = "Tomato soup"
+ desc = "Smells like copper."
+ icon_state = "tomatosoup"
+ filling_color = "#FF0000"
+ center_of_mass = list("x"=16, "y"=7)
+
+/obj/item/weapon/reagent_containers/food/snacks/bloodsoup/New()
+ ..()
+ reagents.add_reagent("protein", 2)
+ reagents.add_reagent("blood", 10)
+ reagents.add_reagent("water", 5)
+ bitesize = 5
+
+/obj/item/weapon/reagent_containers/food/snacks/clownstears
+ name = "Clown's Tears"
+ desc = "Not very funny."
+ icon_state = "clownstears"
+ filling_color = "#C4FBFF"
+ center_of_mass = list("x"=16, "y"=7)
+ nutriment_amt = 4
+ nutriment_desc = list("salt" = 1, "the worst joke" = 3)
+
+/obj/item/weapon/reagent_containers/food/snacks/clownstears/New()
+ ..()
+ reagents.add_reagent("banana", 5)
+ reagents.add_reagent("water", 10)
+ bitesize = 5
+
+/obj/item/weapon/reagent_containers/food/snacks/vegetablesoup
+ name = "Vegetable soup"
+ desc = "A true vegan meal" //TODO
+ icon_state = "vegetablesoup"
+ trash = /obj/item/trash/snack_bowl
+ filling_color = "#AFC4B5"
+ center_of_mass = list("x"=16, "y"=8)
+ nutriment_amt = 8
+ nutriment_desc = list("carot" = 2, "corn" = 2, "eggplant" = 2, "potato" = 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/vegetablesoup/New()
+ ..()
+ reagents.add_reagent("water", 5)
+ bitesize = 5
+
+/obj/item/weapon/reagent_containers/food/snacks/nettlesoup
+ name = "Nettle soup"
+ desc = "To think, the botanist would've beat you to death with one of these."
+ icon_state = "nettlesoup"
+ trash = /obj/item/trash/snack_bowl
+ filling_color = "#AFC4B5"
+ center_of_mass = list("x"=16, "y"=7)
+ nutriment_amt = 8
+ nutriment_desc = list("salad" = 4, "egg" = 2, "potato" = 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/nettlesoup/New()
+ ..()
+ reagents.add_reagent("water", 5)
+ reagents.add_reagent("tricordrazine", 5)
+ bitesize = 5
+
+/obj/item/weapon/reagent_containers/food/snacks/mysterysoup
+ name = "Mystery soup"
+ desc = "The mystery is, why aren't you eating it?"
+ icon_state = "mysterysoup"
+ trash = /obj/item/trash/snack_bowl
+ filling_color = "#F082FF"
+ center_of_mass = list("x"=16, "y"=6)
+ nutriment_amt = 1
+ nutriment_desc = list("backwash" = 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/mysterysoup/New()
+ ..()
+ var/mysteryselect = pick(1,2,3,4,5,6,7,8,9,10)
+ switch(mysteryselect)
+ if(1)
+ reagents.add_reagent("nutriment", 6)
+ reagents.add_reagent("capsaicin", 3)
+ reagents.add_reagent("tomatojuice", 2)
+ if(2)
+ reagents.add_reagent("nutriment", 6)
+ reagents.add_reagent("frostoil", 3)
+ reagents.add_reagent("tomatojuice", 2)
+ if(3)
+ reagents.add_reagent("nutriment", 5)
+ reagents.add_reagent("water", 5)
+ reagents.add_reagent("tricordrazine", 5)
+ if(4)
+ reagents.add_reagent("nutriment", 5)
+ reagents.add_reagent("water", 10)
+ if(5)
+ reagents.add_reagent("nutriment", 2)
+ reagents.add_reagent("banana", 10)
+ if(6)
+ reagents.add_reagent("nutriment", 6)
+ reagents.add_reagent("blood", 10)
+ if(7)
+ reagents.add_reagent("slimejelly", 10)
+ reagents.add_reagent("water", 10)
+ if(8)
+ reagents.add_reagent("carbon", 10)
+ reagents.add_reagent("toxin", 10)
+ if(9)
+ reagents.add_reagent("nutriment", 5)
+ reagents.add_reagent("tomatojuice", 10)
+ if(10)
+ reagents.add_reagent("nutriment", 6)
+ reagents.add_reagent("tomatojuice", 5)
+ reagents.add_reagent("imidazoline", 5)
+ bitesize = 5
+
+/obj/item/weapon/reagent_containers/food/snacks/wishsoup
+ name = "Wish Soup"
+ desc = "I wish this was soup."
+ icon_state = "wishsoup"
+ trash = /obj/item/trash/snack_bowl
+ filling_color = "#D1F4FF"
+ center_of_mass = list("x"=16, "y"=11)
+
+/obj/item/weapon/reagent_containers/food/snacks/wishsoup/New()
+ ..()
+ reagents.add_reagent("water", 10)
+ bitesize = 5
+ if(prob(25))
+ src.desc = "A wish come true!"
+ reagents.add_reagent("nutriment", 8, list("something good" = 8))
+
+/obj/item/weapon/reagent_containers/food/snacks/hotchili
+ name = "Hot Chili"
+ desc = "A five alarm Texan Chili!"
+ icon_state = "hotchili"
+ trash = /obj/item/trash/snack_bowl
+ filling_color = "#FF3C00"
+ center_of_mass = list("x"=15, "y"=9)
+ nutriment_amt = 3
+ nutriment_desc = list("chilli peppers" = 3)
+
+/obj/item/weapon/reagent_containers/food/snacks/hotchili/New()
+ ..()
+ reagents.add_reagent("protein", 3)
+ reagents.add_reagent("capsaicin", 3)
+ reagents.add_reagent("tomatojuice", 2)
+ bitesize = 5
+
+/obj/item/weapon/reagent_containers/food/snacks/coldchili
+ name = "Cold Chili"
+ desc = "This slush is barely a liquid!"
+ icon_state = "coldchili"
+ filling_color = "#2B00FF"
+ center_of_mass = list("x"=15, "y"=9)
+ trash = /obj/item/trash/snack_bowl
+ nutriment_amt = 3
+ nutriment_desc = list("ice peppers" = 3)
+
+/obj/item/weapon/reagent_containers/food/snacks/coldchili/New()
+ ..()
+ reagents.add_reagent("protein", 3)
+ reagents.add_reagent("frostoil", 3)
+ reagents.add_reagent("tomatojuice", 2)
+ bitesize = 5
+
+/obj/item/weapon/reagent_containers/food/snacks/monkeycube
+ name = "monkey cube"
+ desc = "Just add water!"
+ flags = OPENCONTAINER
+ icon_state = "monkeycube"
+ bitesize = 12
+ filling_color = "#ADAC7F"
+ center_of_mass = list("x"=16, "y"=14)
+
+ var/wrapped = 0
+ var/monkey_type = "Monkey"
+
+/obj/item/weapon/reagent_containers/food/snacks/monkeycube/New()
+ ..()
+ reagents.add_reagent("protein", 10)
+
+/obj/item/weapon/reagent_containers/food/snacks/monkeycube/attack_self(mob/user as mob)
+ if(wrapped)
+ Unwrap(user)
+
+/obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Expand()
+ src.visible_message("\The [src] expands!")
+ var/mob/living/carbon/human/H = new(get_turf(src))
+ H.set_species(monkey_type)
+ H.real_name = H.species.get_random_name()
+ H.name = H.real_name
+ if(ismob(loc))
+ var/mob/M = loc
+ M.unEquip(src)
+ qdel(src)
+ return 1
+
+/obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Unwrap(mob/user as mob)
+ icon_state = "monkeycube"
+ desc = "Just add water!"
+ to_chat(user, "You unwrap the cube.")
+ wrapped = 0
+ flags |= OPENCONTAINER
+ return
+
+/obj/item/weapon/reagent_containers/food/snacks/monkeycube/On_Consume(var/mob/M)
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ H.visible_message("A screeching creature bursts out of [M]'s chest!")
+ var/obj/item/organ/external/organ = H.get_organ(BP_TORSO)
+ organ.take_damage(50, 0, 0, "Animal escaping the ribcage")
+ Expand()
+
+/obj/item/weapon/reagent_containers/food/snacks/monkeycube/on_reagent_change()
+ if(reagents.has_reagent("water"))
+ Expand()
+
+/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped
+ desc = "Still wrapped in some paper."
+ icon_state = "monkeycubewrap"
+ flags = 0
+ wrapped = 1
+
+/obj/item/weapon/reagent_containers/food/snacks/monkeycube/farwacube
+ name = "farwa cube"
+ monkey_type = "Farwa"
+
+/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/farwacube
+ name = "farwa cube"
+ monkey_type = "Farwa"
+
+/obj/item/weapon/reagent_containers/food/snacks/monkeycube/stokcube
+ name = "stok cube"
+ monkey_type = "Stok"
+
+/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/stokcube
+ name = "stok cube"
+ monkey_type = "Stok"
+
+/obj/item/weapon/reagent_containers/food/snacks/monkeycube/neaeracube
+ name = "neaera cube"
+ monkey_type = "Neaera"
+
+/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/neaeracube
+ name = "neaera cube"
+ monkey_type = "Neaera"
+
+/obj/item/weapon/reagent_containers/food/snacks/spellburger
+ name = "Spell Burger"
+ desc = "This is absolutely Ei Nath."
+ icon_state = "spellburger"
+ filling_color = "#D505FF"
+ nutriment_amt = 6
+ nutriment_desc = list("magic" = 3, "buns" = 3)
+
+/obj/item/weapon/reagent_containers/food/snacks/spellburger/New()
+ ..()
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/bigbiteburger
+ name = "Big Bite Burger"
+ desc = "Forget the Big Mac. THIS is the future!"
+ icon_state = "bigbiteburger"
+ filling_color = "#E3D681"
+ center_of_mass = list("x"=16, "y"=11)
+ nutriment_amt = 4
+ nutriment_desc = list("buns" = 4)
+
+/obj/item/weapon/reagent_containers/food/snacks/bigbiteburger/New()
+ ..()
+ reagents.add_reagent("protein", 10)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/enchiladas
+ name = "Enchiladas"
+ desc = "Viva La Mexico!"
+ icon_state = "enchiladas"
+ trash = /obj/item/trash/tray
+ filling_color = "#A36A1F"
+ center_of_mass = list("x"=16, "y"=13)
+ nutriment_amt = 2
+ nutriment_desc = list("tortilla" = 3, "corn" = 3)
+
+/obj/item/weapon/reagent_containers/food/snacks/enchiladas/New()
+ ..()
+ reagents.add_reagent("protein", 6)
+ reagents.add_reagent("capsaicin", 6)
+ bitesize = 4
+
+/obj/item/weapon/reagent_containers/food/snacks/monkeysdelight
+ name = "monkey's Delight"
+ desc = "Eeee Eee!"
+ icon_state = "monkeysdelight"
+ trash = /obj/item/trash/tray
+ filling_color = "#5C3C11"
+ center_of_mass = list("x"=16, "y"=13)
+
+/obj/item/weapon/reagent_containers/food/snacks/monkeysdelight/New()
+ ..()
+ reagents.add_reagent("protein", 10)
+ reagents.add_reagent("banana", 5)
+ reagents.add_reagent("blackpepper", 1)
+ reagents.add_reagent("sodiumchloride", 1)
+ bitesize = 6
+
+/obj/item/weapon/reagent_containers/food/snacks/baguette
+ name = "Baguette"
+ desc = "Bon appetit!"
+ icon_state = "baguette"
+ filling_color = "#E3D796"
+ center_of_mass = list("x"=18, "y"=12)
+ nutriment_amt = 6
+ nutriment_desc = list("french bread" = 6)
+
+/obj/item/weapon/reagent_containers/food/snacks/baguette/New()
+ ..()
+ reagents.add_reagent("blackpepper", 1)
+ reagents.add_reagent("sodiumchloride", 1)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/fishandchips
+ name = "Fish and Chips"
+ desc = "I do say so myself chap."
+ icon_state = "fishandchips"
+ filling_color = "#E3D796"
+ center_of_mass = list("x"=16, "y"=16)
+ nutriment_amt = 3
+ nutriment_desc = list("salt" = 1, "chips" = 3)
+
+/obj/item/weapon/reagent_containers/food/snacks/fishandchips/New()
+ ..()
+ reagents.add_reagent("protein", 3)
+ reagents.add_reagent("carpotoxin", 3)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/sandwich
+ name = "Sandwich"
+ desc = "A grand creation of meat, cheese, bread, and several leaves of lettuce! Arthur Dent would be proud."
+ icon_state = "sandwich"
+ trash = /obj/item/trash/plate
+ filling_color = "#D9BE29"
+ center_of_mass = list("x"=16, "y"=4)
+ nutriment_amt = 3
+ nutriment_desc = list("bread" = 3, "cheese" = 3)
+
+/obj/item/weapon/reagent_containers/food/snacks/sandwich/New()
+ ..()
+ reagents.add_reagent("protein", 3)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/toastedsandwich
+ name = "Toasted Sandwich"
+ desc = "Now if you only had a pepper bar."
+ icon_state = "toastedsandwich"
+ trash = /obj/item/trash/plate
+ filling_color = "#D9BE29"
+ center_of_mass = list("x"=16, "y"=4)
+ nutriment_amt = 3
+ nutriment_desc = list("toasted bread" = 3, "cheese" = 3)
+
+/obj/item/weapon/reagent_containers/food/snacks/toastedsandwich/New()
+ ..()
+ reagents.add_reagent("protein", 3)
+ reagents.add_reagent("carbon", 2)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/grilledcheese
+ name = "Grilled Cheese Sandwich"
+ desc = "Goes great with Tomato soup!"
+ icon_state = "toastedsandwich"
+ trash = /obj/item/trash/plate
+ filling_color = "#D9BE29"
+ nutriment_amt = 3
+ nutriment_desc = list("toasted bread" = 3, "cheese" = 3)
+
+/obj/item/weapon/reagent_containers/food/snacks/grilledcheese/New()
+ ..()
+ reagents.add_reagent("protein", 4)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/tomatosoup
+ name = "Tomato Soup"
+ desc = "Drinking this feels like being a vampire! A tomato vampire..."
+ icon_state = "tomatosoup"
+ trash = /obj/item/trash/snack_bowl
+ filling_color = "#D92929"
+ center_of_mass = list("x"=16, "y"=7)
+ nutriment_amt = 5
+ nutriment_desc = list("soup" = 5)
+
+/obj/item/weapon/reagent_containers/food/snacks/tomatosoup/New()
+ ..()
+ reagents.add_reagent("tomatojuice", 10)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/onionsoup
+ name = "Onion Soup"
+ desc = "A soup with layers."
+ icon_state = "onionsoup"
+ trash = /obj/item/trash/snack_bowl
+ filling_color = "#E0C367"
+ center_of_mass = list("x"=16, "y"=7)
+ nutriment_amt = 5
+ nutriment_desc = list("onion" = 2, "soup" = 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/onionsoup/New()
+ ..()
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/onionrings
+ name = "Onion Rings"
+ desc = "Crispy rings."
+ icon_state = "onionrings"
+ trash = /obj/item/trash/plate
+ filling_color = "#E0C367"
+ center_of_mass = list("x"=16, "y"=7)
+ nutriment_amt = 5
+ nutriment_desc = list("onion" = 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/onionrings/New()
+ ..()
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/rofflewaffles
+ name = "Roffle Waffles"
+ desc = "Waffles from Roffle. Co."
+ icon_state = "rofflewaffles"
+ trash = /obj/item/trash/waffles
+ filling_color = "#FF00F7"
+ center_of_mass = list("x"=15, "y"=11)
+ nutriment_amt = 8
+ nutriment_desc = list("waffle" = 7, "sweetness" = 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/rofflewaffles/New()
+ ..()
+ reagents.add_reagent("psilocybin", 8)
+ bitesize = 4
+
+/obj/item/weapon/reagent_containers/food/snacks/stew
+ name = "Stew"
+ desc = "A nice and warm stew. Healthy and strong."
+ icon_state = "stew"
+ filling_color = "#9E673A"
+ center_of_mass = list("x"=16, "y"=5)
+ nutriment_amt = 6
+ nutriment_desc = list("tomato" = 2, "potato" = 2, "carrot" = 2, "eggplant" = 2, "mushroom" = 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/stew/New()
+ ..()
+ reagents.add_reagent("protein", 4)
+ reagents.add_reagent("tomatojuice", 5)
+ reagents.add_reagent("imidazoline", 5)
+ reagents.add_reagent("water", 5)
+ bitesize = 10
+
+/obj/item/weapon/reagent_containers/food/snacks/jelliedtoast
+ name = "Jellied Toast"
+ desc = "A slice of bread covered with delicious jam."
+ icon_state = "jellytoast"
+ trash = /obj/item/trash/plate
+ filling_color = "#B572AB"
+ center_of_mass = list("x"=16, "y"=8)
+ nutriment_amt = 1
+ nutriment_desc = list("toasted bread" = 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/jelliedtoast/New()
+ ..()
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/jelliedtoast/cherry/New()
+ ..()
+ reagents.add_reagent("cherryjelly", 5)
+
+/obj/item/weapon/reagent_containers/food/snacks/jelliedtoast/slime/New()
+ ..()
+ reagents.add_reagent("slimejelly", 5)
+
+/obj/item/weapon/reagent_containers/food/snacks/jellyburger
+ name = "Jelly Burger"
+ desc = "Culinary delight..?"
+ icon_state = "jellyburger"
+ filling_color = "#B572AB"
+ center_of_mass = list("x"=16, "y"=11)
+ nutriment_amt = 5
+ nutriment_desc = list("buns" = 5)
+
+/obj/item/weapon/reagent_containers/food/snacks/jellyburger/New()
+ ..()
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/jellyburger/slime/New()
+ ..()
+ reagents.add_reagent("slimejelly", 5)
+
+/obj/item/weapon/reagent_containers/food/snacks/jellyburger/cherry/New()
+ ..()
+ reagents.add_reagent("cherryjelly", 5)
+
+/obj/item/weapon/reagent_containers/food/snacks/milosoup
+ name = "Milosoup"
+ desc = "The universes best soup! Yum!!!"
+ icon_state = "milosoup"
+ trash = /obj/item/trash/snack_bowl
+ center_of_mass = list("x"=16, "y"=7)
+ nutriment_amt = 8
+ nutriment_desc = list("soy" = 8)
+
+/obj/item/weapon/reagent_containers/food/snacks/milosoup/New()
+ ..()
+ reagents.add_reagent("water", 5)
+ bitesize = 4
+
+/obj/item/weapon/reagent_containers/food/snacks/stewedsoymeat
+ name = "Stewed Soy Meat"
+ desc = "Even non-vegetarians will LOVE this!"
+ icon_state = "stewedsoymeat"
+ trash = /obj/item/trash/plate
+ center_of_mass = list("x"=16, "y"=10)
+ nutriment_amt = 8
+ nutriment_desc = list("soy" = 4, "tomato" = 4)
+
+/obj/item/weapon/reagent_containers/food/snacks/stewedsoymeat/New()
+ ..()
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/boiledspagetti
+ name = "Boiled Spaghetti"
+ desc = "A plain dish of noodles, this sucks."
+ icon_state = "spagettiboiled"
+ trash = /obj/item/trash/plate
+ filling_color = "#FCEE81"
+ center_of_mass = list("x"=16, "y"=10)
+ nutriment_amt = 2
+ nutriment_desc = list("noodles" = 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/boiledspagetti/New()
+ ..()
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/boiledrice
+ name = "Boiled Rice"
+ desc = "A boring dish of boring rice."
+ icon_state = "boiledrice"
+ trash = /obj/item/trash/snack_bowl
+ filling_color = "#FFFBDB"
+ center_of_mass = list("x"=17, "y"=11)
+ nutriment_amt = 2
+ nutriment_desc = list("rice" = 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/boiledrice/New()
+ ..()
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/ricepudding
+ name = "Rice Pudding"
+ desc = "Where's the jam?"
+ icon_state = "rpudding"
+ trash = /obj/item/trash/snack_bowl
+ filling_color = "#FFFBDB"
+ center_of_mass = list("x"=17, "y"=11)
+ nutriment_amt = 4
+ nutriment_desc = list("rice" = 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/ricepudding/New()
+ ..()
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/pastatomato
+ name = "Spaghetti"
+ desc = "Spaghetti and crushed tomatoes. Just like your abusive father used to make!"
+ icon_state = "pastatomato"
+ trash = /obj/item/trash/plate
+ filling_color = "#DE4545"
+ center_of_mass = list("x"=16, "y"=10)
+ nutriment_amt = 6
+ nutriment_desc = list("tomato" = 3, "noodles" = 3)
+
+/obj/item/weapon/reagent_containers/food/snacks/pastatomato/New()
+ ..()
+ reagents.add_reagent("tomatojuice", 10)
+ bitesize = 4
+
+/obj/item/weapon/reagent_containers/food/snacks/meatballspagetti
+ name = "Spaghetti & Meatballs"
+ desc = "Now thats a nic'e meatball!"
+ icon_state = "meatballspagetti"
+ trash = /obj/item/trash/plate
+ filling_color = "#DE4545"
+ center_of_mass = list("x"=16, "y"=10)
+ nutriment_amt = 4
+ nutriment_desc = list("noodles" = 4)
+
+/obj/item/weapon/reagent_containers/food/snacks/meatballspagetti/New()
+ ..()
+ reagents.add_reagent("protein", 4)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/spesslaw
+ name = "Spesslaw"
+ desc = "A lawyers favourite"
+ icon_state = "spesslaw"
+ filling_color = "#DE4545"
+ center_of_mass = list("x"=16, "y"=10)
+ nutriment_amt = 4
+ nutriment_desc = list("noodles" = 4)
+
+/obj/item/weapon/reagent_containers/food/snacks/spesslaw/New()
+ ..()
+ reagents.add_reagent("protein", 4)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/carrotfries
+ name = "Carrot Fries"
+ desc = "Tasty fries from fresh Carrots."
+ icon_state = "carrotfries"
+ trash = /obj/item/trash/plate
+ filling_color = "#FAA005"
+ center_of_mass = list("x"=16, "y"=11)
+ nutriment_amt = 3
+ nutriment_desc = list("carrot" = 3, "salt" = 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/carrotfries/New()
+ ..()
+ reagents.add_reagent("imidazoline", 3)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/superbiteburger
+ name = "Super Bite Burger"
+ desc = "This is a mountain of a burger. FOOD!"
+ icon_state = "superbiteburger"
+ filling_color = "#CCA26A"
+ center_of_mass = list("x"=16, "y"=3)
+ nutriment_amt = 25
+ nutriment_desc = list("buns" = 25)
+
+/obj/item/weapon/reagent_containers/food/snacks/superbiteburger/New()
+ ..()
+ reagents.add_reagent("protein", 25)
+ bitesize = 10
+
+/obj/item/weapon/reagent_containers/food/snacks/candiedapple
+ name = "Candied Apple"
+ desc = "An apple coated in sugary sweetness."
+ icon_state = "candiedapple"
+ filling_color = "#F21873"
+ center_of_mass = list("x"=15, "y"=13)
+ nutriment_amt = 3
+ nutriment_desc = list("apple" = 3, "caramel" = 3, "sweetness" = 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/candiedapple/New()
+ ..()
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/applepie
+ name = "Apple Pie"
+ desc = "A pie containing sweet sweet love... or apple."
+ icon_state = "applepie"
+ filling_color = "#E0EDC5"
+ center_of_mass = list("x"=16, "y"=13)
+ nutriment_amt = 4
+ nutriment_desc = list("sweetness" = 2, "apple" = 2, "pie" = 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/applepie/New()
+ ..()
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/cherrypie
+ name = "Cherry Pie"
+ desc = "Taste so good, make a grown man cry."
+ icon_state = "cherrypie"
+ filling_color = "#FF525A"
+ center_of_mass = list("x"=16, "y"=11)
+ nutriment_amt = 4
+ nutriment_desc = list("sweetness" = 2, "cherry" = 2, "pie" = 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/cherrypie/New()
+ ..()
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/twobread
+ name = "Two Bread"
+ desc = "It is very bitter and winy."
+ icon_state = "twobread"
+ filling_color = "#DBCC9A"
+ center_of_mass = list("x"=15, "y"=12)
+ nutriment_amt = 2
+ nutriment_desc = list("sourness" = 2, "bread" = 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/twobread/New()
+ ..()
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/jellysandwich
+ name = "Jelly Sandwich"
+ desc = "You wish you had some peanut butter to go with this..."
+ icon_state = "jellysandwich"
+ trash = /obj/item/trash/plate
+ filling_color = "#9E3A78"
+ center_of_mass = list("x"=16, "y"=8)
+ nutriment_amt = 2
+ nutriment_desc = list("bread" = 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/jellysandwich/New()
+ ..()
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/jellysandwich/slime/New()
+ ..()
+ reagents.add_reagent("slimejelly", 5)
+
+/obj/item/weapon/reagent_containers/food/snacks/jellysandwich/cherry/New()
+ ..()
+ reagents.add_reagent("cherryjelly", 5)
+
+/obj/item/weapon/reagent_containers/food/snacks/boiledslimecore
+ name = "Boiled slime Core"
+ desc = "A boiled red thing."
+ icon_state = "boiledslimecore" //nonexistant?
+
+/obj/item/weapon/reagent_containers/food/snacks/boiledslimecore/New()
+ ..()
+ reagents.add_reagent("slimejelly", 5)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/mint
+ name = "mint"
+ desc = "it is only wafer thin."
+ icon_state = "mint"
+ filling_color = "#F2F2F2"
+ center_of_mass = list("x"=16, "y"=14)
+
+/obj/item/weapon/reagent_containers/food/snacks/mint/New()
+ ..()
+ reagents.add_reagent("mint", 1)
+ bitesize = 1
+
+/obj/item/weapon/reagent_containers/food/snacks/mushroomsoup
+ name = "chantrelle soup"
+ desc = "A delicious and hearty mushroom soup."
+ icon_state = "mushroomsoup"
+ trash = /obj/item/trash/snack_bowl
+ filling_color = "#E386BF"
+ center_of_mass = list("x"=17, "y"=10)
+ nutriment_amt = 8
+ nutriment_desc = list("mushroom" = 8, "milk" = 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/mushroomsoup/New()
+ ..()
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit
+ name = "plump helmet biscuit"
+ desc = "This is a finely-prepared plump helmet biscuit. The ingredients are exceptionally minced plump helmet, and well-minced dwarven wheat flour."
+ icon_state = "phelmbiscuit"
+ filling_color = "#CFB4C4"
+ center_of_mass = list("x"=16, "y"=13)
+ nutriment_amt = 5
+ nutriment_desc = list("mushroom" = 4)
+
+/obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit/New()
+ ..()
+ if(prob(10))
+ name = "exceptional plump helmet biscuit"
+ desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump helmet biscuit!"
+ reagents.add_reagent("nutriment", 8)
+ bitesize = 2
+ else
+ reagents.add_reagent("nutriment", 5)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/chawanmushi
+ name = "chawanmushi"
+ desc = "A legendary egg custard that makes friends out of enemies. Probably too hot for a cat to eat."
+ icon_state = "chawanmushi"
+ trash = /obj/item/trash/snack_bowl
+ filling_color = "#F0F2E4"
+ center_of_mass = list("x"=17, "y"=10)
+
+/obj/item/weapon/reagent_containers/food/snacks/chawanmushi/New()
+ ..()
+ reagents.add_reagent("protein", 5)
+ bitesize = 1
+
+/obj/item/weapon/reagent_containers/food/snacks/beetsoup
+ name = "beet soup"
+ desc = "Wait, how do you spell it again..?"
+ icon_state = "beetsoup"
+ trash = /obj/item/trash/snack_bowl
+ filling_color = "#FAC9FF"
+ center_of_mass = list("x"=15, "y"=8)
+ nutriment_amt = 8
+ nutriment_desc = list("tomato" = 4, "beet" = 4)
+
+/obj/item/weapon/reagent_containers/food/snacks/beetsoup/New()
+ ..()
+ name = pick(list("borsch","bortsch","borstch","borsh","borshch","borscht"))
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/tossedsalad
+ name = "tossed salad"
+ desc = "A proper salad, basic and simple, with little bits of carrot, tomato and apple intermingled. Vegan!"
+ icon_state = "herbsalad"
+ trash = /obj/item/trash/snack_bowl
+ filling_color = "#76B87F"
+ center_of_mass = list("x"=17, "y"=11)
+ nutriment_amt = 8
+ nutriment_desc = list("salad" = 2, "tomato" = 2, "carrot" = 2, "apple" = 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/tossedsalad/New()
+ ..()
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/validsalad
+ name = "valid salad"
+ desc = "It's just a salad of questionable 'herbs' with meatballs and fried potato slices. Nothing suspicious about it."
+ icon_state = "validsalad"
+ trash = /obj/item/trash/snack_bowl
+ filling_color = "#76B87F"
+ center_of_mass = list("x"=17, "y"=11)
+ nutriment_amt = 6
+ nutriment_desc = list("100% real salad")
+
+/obj/item/weapon/reagent_containers/food/snacks/validsalad/New()
+ ..()
+ reagents.add_reagent("protein", 2)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/appletart
+ name = "golden apple streusel tart"
+ desc = "A tasty dessert that won't make it through a metal detector."
+ icon_state = "gappletart"
+ trash = /obj/item/trash/plate
+ filling_color = "#FFFF00"
+ center_of_mass = list("x"=16, "y"=18)
+ nutriment_amt = 8
+ nutriment_desc = list("apple" = 8)
+
+/obj/item/weapon/reagent_containers/food/snacks/appletart/New()
+ ..()
+ reagents.add_reagent("gold", 5)
+ bitesize = 3
+
+/////////////////////////////////////////////////Sliceable////////////////////////////////////////
+// All the food items that can be sliced into smaller bits like Meatbread and Cheesewheels
+
+// sliceable is just an organization type path, it doesn't have any additional code or variables tied to it.
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable
+ w_class = ITEMSIZE_NORMAL //Whole pizzas and cakes shouldn't fit in a pocket, you can slice them if you want to do that.
+
+/**
+ * A food item slice
+ *
+ * This path contains some extra code for spawning slices pre-filled with
+ * reagents.
+ */
+/obj/item/weapon/reagent_containers/food/snacks/slice
+ name = "slice of... something"
+ var/whole_path // path for the item from which this slice comes
+ var/filled = FALSE // should the slice spawn with any reagents
+
+/**
+ * Spawn a new slice of food
+ *
+ * If the slice's filled is TRUE, this will also fill the slice with the
+ * appropriate amount of reagents. Note that this is done by spawning a new
+ * whole item, transferring the reagents and deleting the whole item, which may
+ * have performance implications.
+ */
+/obj/item/weapon/reagent_containers/food/snacks/slice/New()
+ ..()
+ if(filled)
+ var/obj/item/weapon/reagent_containers/food/snacks/whole = new whole_path()
+ if(whole && whole.slices_num)
+ var/reagent_amount = whole.reagents.total_volume/whole.slices_num
+ whole.reagents.trans_to_obj(src, reagent_amount)
+
+ qdel(whole)
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/meatbread
+ name = "meatbread loaf"
+ desc = "The culinary base of every self-respecting eloquent gentleman."
+ icon_state = "meatbread"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/meatbread
+ slices_num = 5
+ filling_color = "#FF7575"
+ center_of_mass = list("x"=19, "y"=9)
+ nutriment_desc = list("bread" = 10)
+ nutriment_amt = 10
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/meatbread/New()
+ ..()
+ reagents.add_reagent("protein", 20)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/slice/meatbread
+ name = "meatbread slice"
+ desc = "A slice of delicious meatbread."
+ icon_state = "meatbreadslice"
+ trash = /obj/item/trash/plate
+ filling_color = "#FF7575"
+ bitesize = 2
+ center_of_mass = list("x"=16, "y"=16)
+ whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/meatbread
+
+/obj/item/weapon/reagent_containers/food/snacks/slice/meatbread/filled
+ filled = TRUE
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/xenomeatbread
+ name = "xenomeatbread loaf"
+ desc = "The culinary base of every self-respecting eloquent gentleman. Extra Heretical."
+ icon_state = "xenomeatbread"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/xenomeatbread
+ slices_num = 5
+ filling_color = "#8AFF75"
+ center_of_mass = list("x"=16, "y"=9)
+ nutriment_desc = list("bread" = 10)
+ nutriment_amt = 10
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/xenomeatbread/New()
+ ..()
+ reagents.add_reagent("protein", 20)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/slice/xenomeatbread
+ name = "xenomeatbread slice"
+ desc = "A slice of delicious meatbread. Extra Heretical."
+ icon_state = "xenobreadslice"
+ trash = /obj/item/trash/plate
+ filling_color = "#8AFF75"
+ bitesize = 2
+ center_of_mass = list("x"=16, "y"=13)
+ whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/xenomeatbread
+
+
+/obj/item/weapon/reagent_containers/food/snacks/slice/xenomeatbread/filled
+ filled = TRUE
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/bananabread
+ name = "Banana-nut bread"
+ desc = "A heavenly and filling treat."
+ icon_state = "bananabread"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/bananabread
+ slices_num = 5
+ filling_color = "#EDE5AD"
+ center_of_mass = list("x"=16, "y"=9)
+ nutriment_desc = list("bread" = 10)
+ nutriment_amt = 10
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/bananabread/New()
+ ..()
+ reagents.add_reagent("banana", 20)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/slice/bananabread
+ name = "Banana-nut bread slice"
+ desc = "A slice of delicious banana bread."
+ icon_state = "bananabreadslice"
+ trash = /obj/item/trash/plate
+ filling_color = "#EDE5AD"
+ bitesize = 2
+ center_of_mass = list("x"=16, "y"=8)
+ whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/bananabread
+
+/obj/item/weapon/reagent_containers/food/snacks/slice/bananabread/filled
+ filled = TRUE
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/tofubread
+ name = "Tofubread"
+ icon_state = "Like meatbread but for vegetarians. Not guaranteed to give superpowers."
+ icon_state = "tofubread"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/tofubread
+ slices_num = 5
+ filling_color = "#F7FFE0"
+ center_of_mass = list("x"=16, "y"=9)
+ nutriment_desc = list("tofu" = 10)
+ nutriment_amt = 10
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/tofubread/New()
+ ..()
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/slice/tofubread
+ name = "Tofubread slice"
+ desc = "A slice of delicious tofubread."
+ icon_state = "tofubreadslice"
+ trash = /obj/item/trash/plate
+ filling_color = "#F7FFE0"
+ bitesize = 2
+ center_of_mass = list("x"=16, "y"=13)
+ whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/tofubread
+
+/obj/item/weapon/reagent_containers/food/snacks/slice/tofubread/filled
+ filled = TRUE
+
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/carrotcake
+ name = "Carrot Cake"
+ desc = "A favorite desert of a certain wascally wabbit. Not a lie."
+ icon_state = "carrotcake"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/carrotcake
+ slices_num = 5
+ filling_color = "#FFD675"
+ center_of_mass = list("x"=16, "y"=10)
+ nutriment_desc = list("cake" = 10, "sweetness" = 10, "carrot" = 15)
+ nutriment_amt = 25
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/carrotcake/New()
+ ..()
+ reagents.add_reagent("imidazoline", 10)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/slice/carrotcake
+ name = "Carrot Cake slice"
+ desc = "Carrotty slice of Carrot Cake, carrots are good for your eyes! Also not a lie."
+ icon_state = "carrotcake_slice"
+ trash = /obj/item/trash/plate
+ filling_color = "#FFD675"
+ bitesize = 2
+ center_of_mass = list("x"=16, "y"=14)
+ whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/carrotcake
+
+/obj/item/weapon/reagent_containers/food/snacks/slice/carrotcake/filled
+ filled = TRUE
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/braincake
+ name = "Brain Cake"
+ desc = "A squishy cake-thing."
+ icon_state = "braincake"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/braincake
+ slices_num = 5
+ filling_color = "#E6AEDB"
+ center_of_mass = list("x"=16, "y"=10)
+ nutriment_desc = list("cake" = 10, "sweetness" = 10, "slime" = 15)
+ nutriment_amt = 5
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/braincake/New()
+ ..()
+ reagents.add_reagent("protein", 25)
+ reagents.add_reagent("alkysine", 10)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/slice/braincake
+ name = "Brain Cake slice"
+ desc = "Lemme tell you something about prions. THEY'RE DELICIOUS."
+ icon_state = "braincakeslice"
+ trash = /obj/item/trash/plate
+ filling_color = "#E6AEDB"
+ bitesize = 2
+ center_of_mass = list("x"=16, "y"=12)
+ whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/braincake
+
+/obj/item/weapon/reagent_containers/food/snacks/slice/braincake/filled
+ filled = TRUE
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesecake
+ name = "Cheese Cake"
+ desc = "DANGEROUSLY cheesy."
+ icon_state = "cheesecake"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/cheesecake
+ slices_num = 5
+ filling_color = "#FAF7AF"
+ center_of_mass = list("x"=16, "y"=10)
+ nutriment_desc = list("cake" = 10, "cream" = 10, "cheese" = 15)
+ nutriment_amt = 10
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesecake/New()
+ ..()
+ reagents.add_reagent("protein", 15)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/slice/cheesecake
+ name = "Cheese Cake slice"
+ desc = "Slice of pure cheestisfaction."
+ icon_state = "cheesecake_slice"
+ trash = /obj/item/trash/plate
+ filling_color = "#FAF7AF"
+ bitesize = 2
+ center_of_mass = list("x"=16, "y"=14)
+ whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesecake
+
+/obj/item/weapon/reagent_containers/food/snacks/slice/cheesecake/filled
+ filled = TRUE
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/plaincake
+ name = "Vanilla Cake"
+ desc = "A plain cake, not a lie."
+ icon_state = "plaincake"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/plaincake
+ slices_num = 5
+ filling_color = "#F7EDD5"
+ center_of_mass = list("x"=16, "y"=10)
+ nutriment_desc = list("cake" = 10, "sweetness" = 10, "vanilla" = 15)
+ nutriment_amt = 20
+
+/obj/item/weapon/reagent_containers/food/snacks/slice/plaincake
+ name = "Vanilla Cake slice"
+ desc = "Just a slice of cake, it is enough for everyone."
+ icon_state = "plaincake_slice"
+ trash = /obj/item/trash/plate
+ filling_color = "#F7EDD5"
+ bitesize = 2
+ center_of_mass = list("x"=16, "y"=14)
+ whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/plaincake
+
+/obj/item/weapon/reagent_containers/food/snacks/slice/plaincake/filled
+ filled = TRUE
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/orangecake
+ name = "Orange Cake"
+ desc = "A cake with added orange."
+ icon_state = "orangecake"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/orangecake
+ slices_num = 5
+ filling_color = "#FADA8E"
+ center_of_mass = list("x"=16, "y"=10)
+ nutriment_desc = list("cake" = 10, "sweetness" = 10, "orange" = 15)
+ nutriment_amt = 20
+
+/obj/item/weapon/reagent_containers/food/snacks/slice/orangecake
+ name = "Orange Cake slice"
+ desc = "Just a slice of cake, it is enough for everyone."
+ icon_state = "orangecake_slice"
+ trash = /obj/item/trash/plate
+ filling_color = "#FADA8E"
+ bitesize = 2
+ center_of_mass = list("x"=16, "y"=14)
+ whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/orangecake
+
+/obj/item/weapon/reagent_containers/food/snacks/slice/orangecake/filled
+ filled = TRUE
+
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/limecake
+ name = "Lime Cake"
+ desc = "A cake with added lime."
+ icon_state = "limecake"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/limecake
+ slices_num = 5
+ filling_color = "#CBFA8E"
+ center_of_mass = list("x"=16, "y"=10)
+ nutriment_desc = list("cake" = 10, "sweetness" = 10, "lime" = 15)
+ nutriment_amt = 20
+
+
+/obj/item/weapon/reagent_containers/food/snacks/slice/limecake
+ name = "Lime Cake slice"
+ desc = "Just a slice of cake, it is enough for everyone."
+ icon_state = "limecake_slice"
+ trash = /obj/item/trash/plate
+ filling_color = "#CBFA8E"
+ bitesize = 2
+ center_of_mass = list("x"=16, "y"=14)
+ whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/limecake
+
+/obj/item/weapon/reagent_containers/food/snacks/slice/limecake/filled
+ filled = TRUE
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/lemoncake
+ name = "Lemon Cake"
+ desc = "A cake with added lemon."
+ icon_state = "lemoncake"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/lemoncake
+ slices_num = 5
+ filling_color = "#FAFA8E"
+ center_of_mass = list("x"=16, "y"=10)
+ nutriment_desc = list("cake" = 10, "sweetness" = 10, "lemon" = 15)
+ nutriment_amt = 20
+
+
+/obj/item/weapon/reagent_containers/food/snacks/slice/lemoncake
+ name = "Lemon Cake slice"
+ desc = "Just a slice of cake, it is enough for everyone."
+ icon_state = "lemoncake_slice"
+ trash = /obj/item/trash/plate
+ filling_color = "#FAFA8E"
+ bitesize = 2
+ center_of_mass = list("x"=16, "y"=14)
+ whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/lemoncake
+
+/obj/item/weapon/reagent_containers/food/snacks/slice/lemoncake/filled
+ filled = TRUE
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/chocolatecake
+ name = "Chocolate Cake"
+ desc = "A cake with added chocolate."
+ icon_state = "chocolatecake"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/chocolatecake
+ slices_num = 5
+ filling_color = "#805930"
+ center_of_mass = list("x"=16, "y"=10)
+ nutriment_desc = list("cake" = 10, "sweetness" = 10, "chocolate" = 15)
+ nutriment_amt = 20
+
+/obj/item/weapon/reagent_containers/food/snacks/slice/chocolatecake
+ name = "Chocolate Cake slice"
+ desc = "Just a slice of cake, it is enough for everyone."
+ icon_state = "chocolatecake_slice"
+ trash = /obj/item/trash/plate
+ filling_color = "#805930"
+ bitesize = 2
+ center_of_mass = list("x"=16, "y"=14)
+ whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/chocolatecake
+
+/obj/item/weapon/reagent_containers/food/snacks/slice/chocolatecake/filled
+ filled = TRUE
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesewheel
+ name = "Cheese wheel"
+ desc = "A big wheel of delcious Cheddar."
+ icon_state = "cheesewheel"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/cheesewedge
+ slices_num = 5
+ filling_color = "#FFF700"
+ center_of_mass = list("x"=16, "y"=10)
+ nutriment_desc = list("cheese" = 10)
+ nutriment_amt = 10
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesewheel/New()
+ ..()
+ reagents.add_reagent("protein", 10)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/cheesewedge
+ name = "Cheese wedge"
+ desc = "A wedge of delicious Cheddar. The cheese wheel it was cut from can't have gone far."
+ icon_state = "cheesewedge"
+ filling_color = "#FFF700"
+ bitesize = 2
+ center_of_mass = list("x"=16, "y"=10)
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/birthdaycake
+ name = "Birthday Cake"
+ desc = "Happy Birthday..."
+ icon_state = "birthdaycake"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/birthdaycake
+ slices_num = 5
+ filling_color = "#FFD6D6"
+ center_of_mass = list("x"=16, "y"=10)
+ nutriment_desc = list("cake" = 10, "sweetness" = 10)
+ nutriment_amt = 20
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/birthdaycake/New()
+ ..()
+ reagents.add_reagent("sprinkles", 10)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/slice/birthdaycake
+ name = "Birthday Cake slice"
+ desc = "A slice of your birthday."
+ icon_state = "birthdaycakeslice"
+ trash = /obj/item/trash/plate
+ filling_color = "#FFD6D6"
+ bitesize = 2
+ center_of_mass = list("x"=16, "y"=14)
+ whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/birthdaycake
+
+/obj/item/weapon/reagent_containers/food/snacks/slice/birthdaycake/filled
+ filled = TRUE
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/bread
+ name = "Bread"
+ icon_state = "Some plain old Earthen bread."
+ icon_state = "bread"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/bread
+ slices_num = 5
+ filling_color = "#FFE396"
+ center_of_mass = list("x"=16, "y"=9)
+ nutriment_desc = list("bread" = 6)
+ nutriment_amt = 6
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/bread/New()
+ ..()
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/slice/bread
+ name = "Bread slice"
+ desc = "A slice of home."
+ icon_state = "breadslice"
+ trash = /obj/item/trash/plate
+ filling_color = "#D27332"
+ bitesize = 2
+ center_of_mass = list("x"=16, "y"=4)
+ whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/bread
+
+/obj/item/weapon/reagent_containers/food/snacks/slice/bread/filled
+ filled = TRUE
+
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/creamcheesebread
+ name = "Cream Cheese Bread"
+ desc = "Yum yum yum!"
+ icon_state = "creamcheesebread"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/creamcheesebread
+ slices_num = 5
+ filling_color = "#FFF896"
+ center_of_mass = list("x"=16, "y"=9)
+ nutriment_desc = list("bread" = 6, "cream" = 3, "cheese" = 3)
+ nutriment_amt = 5
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/creamcheesebread/New()
+ ..()
+ reagents.add_reagent("protein", 15)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/slice/creamcheesebread
+ name = "Cream Cheese Bread slice"
+ desc = "A slice of yum!"
+ icon_state = "creamcheesebreadslice"
+ trash = /obj/item/trash/plate
+ filling_color = "#FFF896"
+ bitesize = 2
+ center_of_mass = list("x"=16, "y"=14)
+ whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/creamcheesebread
+
+
+/obj/item/weapon/reagent_containers/food/snacks/slice/creamcheesebread/filled
+ filled = TRUE
+
+
+/obj/item/weapon/reagent_containers/food/snacks/watermelonslice
+ name = "Watermelon Slice"
+ desc = "A slice of watery goodness."
+ icon_state = "watermelonslice"
+ filling_color = "#FF3867"
+ bitesize = 2
+ center_of_mass = list("x"=16, "y"=10)
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/applecake
+ name = "Apple Cake"
+ desc = "A cake centred with apples."
+ icon_state = "applecake"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/applecake
+ slices_num = 5
+ filling_color = "#EBF5B8"
+ center_of_mass = list("x"=16, "y"=10)
+ nutriment_desc = list("cake" = 10, "sweetness" = 10, "apple" = 15)
+ nutriment_amt = 15
+
+/obj/item/weapon/reagent_containers/food/snacks/slice/applecake
+ name = "Apple Cake slice"
+ desc = "A slice of heavenly cake."
+ icon_state = "applecakeslice"
+ trash = /obj/item/trash/plate
+ filling_color = "#EBF5B8"
+ bitesize = 2
+ center_of_mass = list("x"=16, "y"=14)
+ whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/applecake
+
+/obj/item/weapon/reagent_containers/food/snacks/slice/applecake/filled
+ filled = TRUE
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/pumpkinpie
+ name = "Pumpkin Pie"
+ desc = "A delicious treat for the autumn months."
+ icon_state = "pumpkinpie"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/pumpkinpie
+ slices_num = 5
+ filling_color = "#F5B951"
+ center_of_mass = list("x"=16, "y"=10)
+ nutriment_desc = list("pie" = 5, "cream" = 5, "pumpkin" = 5)
+ nutriment_amt = 15
+
+/obj/item/weapon/reagent_containers/food/snacks/slice/pumpkinpie
+ name = "Pumpkin Pie slice"
+ desc = "A slice of pumpkin pie, with whipped cream on top. Perfection."
+ icon_state = "pumpkinpieslice"
+ trash = /obj/item/trash/plate
+ filling_color = "#F5B951"
+ bitesize = 2
+ center_of_mass = list("x"=16, "y"=12)
+ whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pumpkinpie
+
+/obj/item/weapon/reagent_containers/food/snacks/slice/pumpkinpie/filled
+ filled = TRUE
+
+/obj/item/weapon/reagent_containers/food/snacks/cracker
+ name = "Cracker"
+ desc = "It's a salted cracker."
+ icon_state = "cracker"
+ filling_color = "#F5DEB8"
+ center_of_mass = list("x"=16, "y"=6)
+ nutriment_desc = list("salt" = 1, "cracker" = 2)
+ nutriment_amt = 1
+
+
+
+/////////////////////////////////////////////////PIZZA////////////////////////////////////////
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza
+ slices_num = 6
+ filling_color = "#BAA14C"
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/margherita
+ name = "Margherita"
+ desc = "The golden standard of pizzas."
+ icon_state = "pizzamargherita"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/margherita
+ slices_num = 6
+ center_of_mass = list("x"=16, "y"=11)
+ nutriment_desc = list("pizza crust" = 10, "tomato" = 10, "cheese" = 15)
+ nutriment_amt = 35
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/margherita/New()
+ ..()
+ reagents.add_reagent("protein", 5)
+ reagents.add_reagent("tomatojuice", 6)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/slice/margherita
+ name = "Margherita slice"
+ desc = "A slice of the classic pizza."
+ icon_state = "pizzamargheritaslice"
+ filling_color = "#BAA14C"
+ bitesize = 2
+ center_of_mass = list("x"=16, "y"=13)
+ whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/margherita
+
+/obj/item/weapon/reagent_containers/food/snacks/slice/margherita/filled
+ filled = TRUE
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/meatpizza
+ name = "Meatpizza"
+ desc = "A pizza with meat topping."
+ icon_state = "meatpizza"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/meatpizza
+ slices_num = 6
+ center_of_mass = list("x"=16, "y"=11)
+ nutriment_desc = list("pizza crust" = 10, "tomato" = 10, "cheese" = 15)
+ nutriment_amt = 10
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/meatpizza/New()
+ ..()
+ reagents.add_reagent("protein", 34)
+ reagents.add_reagent("tomatojuice", 6)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/slice/meatpizza
+ name = "Meatpizza slice"
+ desc = "A slice of a meaty pizza."
+ icon_state = "meatpizzaslice"
+ filling_color = "#BAA14C"
+ bitesize = 2
+ center_of_mass = list("x"=16, "y"=13)
+ whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/meatpizza
+
+/obj/item/weapon/reagent_containers/food/snacks/slice/meatpizza/filled
+ filled = TRUE
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/mushroompizza
+ name = "Mushroompizza"
+ desc = "Very special pizza."
+ icon_state = "mushroompizza"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/mushroompizza
+ slices_num = 6
+ center_of_mass = list("x"=16, "y"=11)
+ nutriment_desc = list("pizza crust" = 10, "tomato" = 10, "cheese" = 5, "mushroom" = 10)
+ nutriment_amt = 35
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/mushroompizza/New()
+ ..()
+ reagents.add_reagent("protein", 5)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/slice/mushroompizza
+ name = "Mushroompizza slice"
+ desc = "Maybe it is the last slice of pizza in your life."
+ icon_state = "mushroompizzaslice"
+ filling_color = "#BAA14C"
+ bitesize = 2
+ center_of_mass = list("x"=16, "y"=13)
+ whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/mushroompizza
+
+/obj/item/weapon/reagent_containers/food/snacks/slice/mushroompizza/filled
+ filled = TRUE
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza
+ name = "Vegetable pizza"
+ desc = "No one of Tomato Sapiens were harmed during making this pizza."
+ icon_state = "vegetablepizza"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/vegetablepizza
+ slices_num = 6
+ center_of_mass = list("x"=16, "y"=11)
+ nutriment_desc = list("pizza crust" = 10, "tomato" = 10, "cheese" = 5, "eggplant" = 5, "carrot" = 5, "corn" = 5)
+ nutriment_amt = 25
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza/New()
+ ..()
+ reagents.add_reagent("protein", 5)
+ reagents.add_reagent("tomatojuice", 6)
+ reagents.add_reagent("imidazoline", 12)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/slice/vegetablepizza
+ name = "Vegetable pizza slice"
+ desc = "A slice of the most green pizza of all pizzas not containing green ingredients."
+ icon_state = "vegetablepizzaslice"
+ filling_color = "#BAA14C"
+ bitesize = 2
+ center_of_mass = list("x"=16, "y"=13)
+ whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza
+
+/obj/item/weapon/reagent_containers/food/snacks/slice/vegetablepizza/filled
+ filled = TRUE
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/oldpizza
+ name = "moldy pizza"
+ desc = "This pizza might actually be alive. There's mold all over."
+ icon_state = "oldpizza"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/slice/oldpizza
+ slices_num = 6
+ center_of_mass = list("x"=16, "y"=11)
+ nutriment_desc = list("stale pizza crust" = 10, "moldy tomato" = 10, "moldy cheese" = 5)
+ nutriment_amt = 10
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/oldpizza/New()
+ ..()
+ reagents.add_reagent("protein", 5)
+ reagents.add_reagent("tomatojuice", 6)
+ reagents.add_reagent("mold", 8)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/slice/oldpizza
+ name = "moldy pizza slice"
+ desc = "This used to be pizza..."
+ icon_state = "old_pizza"
+ filling_color = "#BAA14C"
+ bitesize = 2
+ center_of_mass = list("x"=16, "y"=13)
+ whole_path = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/oldpizza
+
+/obj/item/pizzabox
+ name = "pizza box"
+ desc = "A box suited for pizzas."
+ icon = 'icons/obj/food.dmi'
+ icon_state = "pizzabox1"
+
+ var/open = 0 // Is the box open?
+ var/ismessy = 0 // Fancy mess on the lid
+ var/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/pizza // Content pizza
+ var/list/boxes = list() // If the boxes are stacked, they come here
+ var/boxtag = ""
+
+/obj/item/pizzabox/update_icon()
+
+ overlays = list()
+
+ // Set appropriate description
+ if( open && pizza )
+ desc = "A box suited for pizzas. It appears to have a [pizza.name] inside."
+ else if( boxes.len > 0 )
+ desc = "A pile of boxes suited for pizzas. There appears to be [boxes.len + 1] boxes in the pile."
+
+ var/obj/item/pizzabox/topbox = boxes[boxes.len]
+ var/toptag = topbox.boxtag
+ if( toptag != "" )
+ desc = "[desc] The box on top has a tag, it reads: '[toptag]'."
+ else
+ desc = "A box suited for pizzas."
+
+ if( boxtag != "" )
+ desc = "[desc] The box has a tag, it reads: '[boxtag]'."
+
+ // Icon states and overlays
+ if( open )
+ if( ismessy )
+ icon_state = "pizzabox_messy"
+ else
+ icon_state = "pizzabox_open"
+
+ if( pizza )
+ var/image/pizzaimg = image("food.dmi", icon_state = pizza.icon_state)
+ pizzaimg.pixel_y = -3
+ overlays += pizzaimg
+
+ return
+ else
+ // Stupid code because byondcode sucks
+ var/doimgtag = 0
+ if( boxes.len > 0 )
+ var/obj/item/pizzabox/topbox = boxes[boxes.len]
+ if( topbox.boxtag != "" )
+ doimgtag = 1
+ else
+ if( boxtag != "" )
+ doimgtag = 1
+
+ if( doimgtag )
+ var/image/tagimg = image("food.dmi", icon_state = "pizzabox_tag")
+ tagimg.pixel_y = boxes.len * 3
+ overlays += tagimg
+
+ icon_state = "pizzabox[boxes.len+1]"
+
+/obj/item/pizzabox/attack_hand( mob/user as mob )
+
+ if( open && pizza )
+ user.put_in_hands( pizza )
+
+ to_chat(user, "You take \the [src.pizza] out of \the [src].")
+ src.pizza = null
+ update_icon()
+ return
+
+ if( boxes.len > 0 )
+ if( user.get_inactive_hand() != src )
+ ..()
+ return
+
+ var/obj/item/pizzabox/box = boxes[boxes.len]
+ boxes -= box
+
+ user.put_in_hands( box )
+ to_chat(user, "You remove the topmost [src] from your hand.")
+ box.update_icon()
+ update_icon()
+ return
+ ..()
+
+/obj/item/pizzabox/attack_self( mob/user as mob )
+
+ if( boxes.len > 0 )
+ return
+
+ open = !open
+
+ if( open && pizza )
+ ismessy = 1
+
+ update_icon()
+
+/obj/item/pizzabox/attackby( obj/item/I as obj, mob/user as mob )
+ if( istype(I, /obj/item/pizzabox/) )
+ var/obj/item/pizzabox/box = I
+
+ if( !box.open && !src.open )
+ // Make a list of all boxes to be added
+ var/list/boxestoadd = list()
+ boxestoadd += box
+ for(var/obj/item/pizzabox/i in box.boxes)
+ boxestoadd += i
+
+ if( (boxes.len+1) + boxestoadd.len <= 5 )
+ user.drop_item()
+
+ box.loc = src
+ box.boxes = list() // Clear the box boxes so we don't have boxes inside boxes. - Xzibit
+ src.boxes.Add( boxestoadd )
+
+ box.update_icon()
+ update_icon()
+
+ to_chat(user, "You put \the [box] ontop of \the [src]!")
+ else
+ to_chat(user, "The stack is too high!")
+ else
+ to_chat(user, "Close \the [box] first!")
+
+ return
+
+ if( istype(I, /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/) ) // Long ass fucking object name
+
+ if( src.open )
+ user.drop_item()
+ I.loc = src
+ src.pizza = I
+
+ update_icon()
+
+ to_chat(user, "You put \the [I] in \the [src]!")
+ else
+ to_chat(user, "You try to push \the [I] through the lid but it doesn't work!")
+ return
+
+ if( istype(I, /obj/item/weapon/pen/) )
+
+ if( src.open )
+ return
+
+ var/t = sanitize(input("Enter what you want to add to the tag:", "Write", null, null) as text, 30)
+
+ var/obj/item/pizzabox/boxtotagto = src
+ if( boxes.len > 0 )
+ boxtotagto = boxes[boxes.len]
+
+ boxtotagto.boxtag = copytext("[boxtotagto.boxtag][t]", 1, 30)
+
+ update_icon()
+ return
+ ..()
+
+/obj/item/pizzabox/margherita/New()
+ pizza = new /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/margherita(src)
+ boxtag = "Margherita Deluxe"
+
+/obj/item/pizzabox/vegetable/New()
+ pizza = new /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza(src)
+ boxtag = "Gourmet Vegatable"
+
+/obj/item/pizzabox/mushroom/New()
+ pizza = new /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/mushroompizza(src)
+ boxtag = "Mushroom Special"
+
+/obj/item/pizzabox/meat/New()
+ pizza = new /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/meatpizza(src)
+ boxtag = "Meatlover's Supreme"
+
+/obj/item/pizzabox/old/New()
+ pizza = new /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/oldpizza(src)
+ boxtag = "Deluxe Gourmet"
+
+/obj/item/weapon/reagent_containers/food/snacks/dionaroast
+ name = "roast diona"
+ desc = "It's like an enormous, leathery carrot. With an eye."
+ icon_state = "dionaroast"
+ trash = /obj/item/trash/plate
+ filling_color = "#75754B"
+ center_of_mass = list("x"=16, "y"=7)
+ nutriment_amt = 6
+ nutriment_desc = list("a chorus of flavor" = 6)
+
+/obj/item/weapon/reagent_containers/food/snacks/dionaroast/New()
+ ..()
+ reagents.add_reagent("radium", 2)
+ bitesize = 2
+
+///////////////////////////////////////////
+// new old food stuff from bs12
+///////////////////////////////////////////
+/obj/item/weapon/reagent_containers/food/snacks/dough
+ name = "dough"
+ desc = "A piece of dough."
+ icon = 'icons/obj/food_ingredients.dmi'
+ icon_state = "dough"
+ bitesize = 2
+ center_of_mass = list("x"=16, "y"=13)
+ nutriment_amt = 3
+ nutriment_desc = list("uncooked dough" = 3)
+
+/obj/item/weapon/reagent_containers/food/snacks/dough/New()
+ ..()
+ reagents.add_reagent("protein", 1)
+
+// Dough + rolling pin = flat dough
+/obj/item/weapon/reagent_containers/food/snacks/dough/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ if(istype(W,/obj/item/weapon/material/kitchen/rollingpin))
+ new /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough(src)
+ user << "You flatten the dough."
+ qdel(src)
+
+// slicable into 3xdoughslices
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough
+ name = "flat dough"
+ desc = "A flattened dough."
+ icon = 'icons/obj/food_ingredients.dmi'
+ icon_state = "flat dough"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/doughslice
+ slices_num = 3
+ center_of_mass = list("x"=16, "y"=16)
+
+/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough/New()
+ ..()
+ reagents.add_reagent("protein", 1)
+ reagents.add_reagent("nutriment", 3)
+
+/obj/item/weapon/reagent_containers/food/snacks/doughslice
+ name = "dough slice"
+ desc = "A building block of an impressive dish."
+ icon = 'icons/obj/food_ingredients.dmi'
+ icon_state = "doughslice"
+ slice_path = /obj/item/weapon/reagent_containers/food/snacks/spagetti
+ slices_num = 1
+ bitesize = 2
+ center_of_mass = list("x"=17, "y"=19)
+ nutriment_amt = 1
+ nutriment_desc = list("uncooked dough" = 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/doughslice/New()
+ ..()
+
+/obj/item/weapon/reagent_containers/food/snacks/bun
+ name = "bun"
+ desc = "A base for any self-respecting burger."
+ icon = 'icons/obj/food_ingredients.dmi'
+ icon_state = "bun"
+ bitesize = 2
+ center_of_mass = list("x"=16, "y"=12)
+ nutriment_amt = 4
+ nutriment_desc = "bun"
+
+/obj/item/weapon/reagent_containers/food/snacks/bun/New()
+ ..()
+
+/obj/item/weapon/reagent_containers/food/snacks/bun/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ // Bun + meatball = burger
+ if(istype(W,/obj/item/weapon/reagent_containers/food/snacks/meatball))
+ new /obj/item/weapon/reagent_containers/food/snacks/monkeyburger(src)
+ user << "You make a burger."
+ qdel(W)
+ qdel(src)
+
+ // Bun + cutlet = hamburger
+ else if(istype(W,/obj/item/weapon/reagent_containers/food/snacks/cutlet))
+ new /obj/item/weapon/reagent_containers/food/snacks/monkeyburger(src)
+ user << "You make a burger."
+ qdel(W)
+ qdel(src)
+
+ // Bun + sausage = hotdog
+ else if(istype(W,/obj/item/weapon/reagent_containers/food/snacks/sausage))
+ new /obj/item/weapon/reagent_containers/food/snacks/hotdog(src)
+ user << "You make a hotdog."
+ qdel(W)
+ qdel(src)
+
+// Burger + cheese wedge = cheeseburger
+/obj/item/weapon/reagent_containers/food/snacks/monkeyburger/attackby(obj/item/weapon/reagent_containers/food/snacks/cheesewedge/W as obj, mob/user as mob)
+ if(istype(W))// && !istype(src,/obj/item/weapon/reagent_containers/food/snacks/cheesewedge))
+ new /obj/item/weapon/reagent_containers/food/snacks/cheeseburger(src)
+ user << "You make a cheeseburger."
+ qdel(W)
+ qdel(src)
+ return
+ else
+ ..()
+
+// Human Burger + cheese wedge = cheeseburger
+/obj/item/weapon/reagent_containers/food/snacks/human/burger/attackby(obj/item/weapon/reagent_containers/food/snacks/cheesewedge/W as obj, mob/user as mob)
+ if(istype(W))
+ new /obj/item/weapon/reagent_containers/food/snacks/cheeseburger(src)
+ user << "You make a cheeseburger."
+ qdel(W)
+ qdel(src)
+ return
+ else
+ ..()
+
+/obj/item/weapon/reagent_containers/food/snacks/bunbun
+ name = "\improper Bun Bun"
+ desc = "A small bread monkey fashioned from two burger buns."
+ icon_state = "bunbun"
+ bitesize = 2
+ center_of_mass = list("x"=16, "y"=8)
+ nutriment_amt = 8
+ nutriment_desc = list("bun" = 8)
+
+/obj/item/weapon/reagent_containers/food/snacks/bunbun/New()
+ ..()
+
+/obj/item/weapon/reagent_containers/food/snacks/taco
+ name = "taco"
+ desc = "Take a bite!"
+ icon_state = "taco"
+ bitesize = 3
+ center_of_mass = list("x"=21, "y"=12)
+ nutriment_amt = 4
+ nutriment_desc = list("cheese" = 2,"taco shell" = 2)
+/obj/item/weapon/reagent_containers/food/snacks/taco/New()
+ ..()
+ reagents.add_reagent("protein", 3)
+
+/obj/item/weapon/reagent_containers/food/snacks/rawcutlet
+ name = "raw cutlet"
+ desc = "A thin piece of raw meat."
+ icon = 'icons/obj/food_ingredients.dmi'
+ icon_state = "rawcutlet"
+ bitesize = 1
+ center_of_mass = list("x"=17, "y"=20)
+
+/obj/item/weapon/reagent_containers/food/snacks/rawcutlet/New()
+ ..()
+ reagents.add_reagent("protein", 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/cutlet
+ name = "cutlet"
+ desc = "A tasty meat slice."
+ icon = 'icons/obj/food_ingredients.dmi'
+ icon_state = "cutlet"
+ bitesize = 2
+ center_of_mass = list("x"=17, "y"=20)
+
+/obj/item/weapon/reagent_containers/food/snacks/cutlet/New()
+ ..()
+ reagents.add_reagent("protein", 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/rawmeatball
+ name = "raw meatball"
+ desc = "A raw meatball."
+ icon = 'icons/obj/food_ingredients.dmi'
+ icon_state = "rawmeatball"
+ bitesize = 2
+ center_of_mass = list("x"=16, "y"=15)
+
+/obj/item/weapon/reagent_containers/food/snacks/rawmeatball/New()
+ ..()
+ reagents.add_reagent("protein", 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/hotdog
+ name = "hotdog"
+ desc = "Unrelated to dogs, maybe."
+ icon_state = "hotdog"
+ bitesize = 2
+ center_of_mass = list("x"=16, "y"=17)
+
+/obj/item/weapon/reagent_containers/food/snacks/hotdog/New()
+ ..()
+ reagents.add_reagent("protein", 6)
+
+/obj/item/weapon/reagent_containers/food/snacks/hotdog/old
+ name = "old hotdog"
+ desc = "Covered in mold. You're not gonna eat that, are you?"
+
+/obj/item/weapon/reagent_containers/food/snacks/hotdog/old/New()
+ ..()
+ reagents.add_reagent("mold", 6)
+
+/obj/item/weapon/reagent_containers/food/snacks/flatbread
+ name = "flatbread"
+ desc = "Bland but filling."
+ icon = 'icons/obj/food_ingredients.dmi'
+ icon_state = "flatbread"
+ bitesize = 2
+ center_of_mass = list("x"=16, "y"=16)
+ nutriment_amt = 3
+ nutriment_desc = list("bread" = 3)
+
+/obj/item/weapon/reagent_containers/food/snacks/flatbread/New()
+ ..()
+
+// potato + knife = raw sticks
+/obj/item/weapon/reagent_containers/food/snacks/grown/attackby(obj/item/weapon/W, mob/user)
+ if(seed && seed.kitchen_tag && seed.kitchen_tag == "potato" && istype(W,/obj/item/weapon/material/knife))
+ new /obj/item/weapon/reagent_containers/food/snacks/rawsticks(get_turf(src))
+ user << "You cut the potato."
+ qdel(src)
+ else
+ ..()
+
+/obj/item/weapon/reagent_containers/food/snacks/rawsticks
+ name = "raw potato sticks"
+ desc = "Raw fries, not very tasty."
+ icon = 'icons/obj/food_ingredients.dmi'
+ icon_state = "rawsticks"
+ bitesize = 2
+ center_of_mass = list("x"=16, "y"=12)
+ nutriment_amt = 3
+ nutriment_desc = list("raw potato" = 3)
+
+/obj/item/weapon/reagent_containers/food/snacks/rawsticks/New()
+ ..()
+
+/obj/item/weapon/reagent_containers/food/snacks/liquidfood
+ name = "\improper LiquidFood Ration"
+ desc = "A prepackaged grey slurry of all the essential nutrients for a spacefarer on the go. Should this be crunchy?"
+ icon_state = "liquidfood"
+ trash = /obj/item/trash/liquidfood
+ filling_color = "#A8A8A8"
+ center_of_mass = list("x"=16, "y"=15)
+ nutriment_amt = 20
+ nutriment_desc = list("chalk" = 6)
+
+/obj/item/weapon/reagent_containers/food/snacks/liquidfood/New()
+ ..()
+ reagents.add_reagent("iron", 3)
+ bitesize = 4
+
+/obj/item/weapon/reagent_containers/food/snacks/tastybread
+ name = "bread tube"
+ desc = "Bread in a tube. Chewy...and surprisingly tasty."
+ icon_state = "tastybread"
+ trash = /obj/item/trash/tastybread
+ filling_color = "#A66829"
+ center_of_mass = list("x"=17, "y"=16)
+ nutriment_amt = 6
+ nutriment_desc = list("bread" = 2, "sweetness" = 3)
+
+/obj/item/weapon/reagent_containers/food/snacks/tastybread/New()
+ ..()
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/skrellsnacks
+ name = "\improper SkrellSnax"
+ desc = "Cured fungus shipped all the way from Qerr'balak, almost like jerky! Almost."
+ icon_state = "skrellsnacks"
+ filling_color = "#A66829"
+ center_of_mass = list("x"=15, "y"=12)
+ nutriment_amt = 10
+ nutriment_desc = list("mushroom" = 5, "salt" = 5)
+
+/obj/item/weapon/reagent_containers/food/snacks/skrellsnacks/New()
+ ..()
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/unajerky
+ name = "Moghes Imported Sissalik Jerky"
+ icon_state = "unathitinred"
+ desc = "An incredibly well made jerky, shipped in all the way from Moghes."
+ trash = /obj/item/trash/unajerky
+ filling_color = "#631212"
+ center_of_mass = list("x"=15, "y"=9)
+
+/obj/item/weapon/reagent_containers/food/snacks/unajerky/New()
+ ..()
+ reagents.add_reagent("protein", 8)
+ reagents.add_reagent("capsaicin", 2)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/croissant
+ name = "croissant"
+ desc = "True French cuisine."
+ filling_color = "#E3D796"
+ icon_state = "croissant"
+ nutriment_amt = 6
+ nutriment_desc = list("french bread" = 6)
+
+/obj/item/weapon/reagent_containers/food/snacks/croissant/New()
+ ..()
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/meatbun
+ name = "meat bun"
+ desc = "Chinese street food, in neither China nor a street."
+ filling_color = "#DEDEAB"
+ icon_state = "meatbun"
+ nutriment_amt = 4
+
+/obj/item/weapon/reagent_containers/food/snacks/meatbun/New()
+ ..()
+ bitesize = 2
+ reagents.add_reagent("protein", 4)
+
+/obj/item/weapon/reagent_containers/food/snacks/sashimi
+ name = "carp sashimi"
+ desc = "Expertly prepared. Still toxic."
+ filling_color = "#FFDEFE"
+ icon_state = "sashimi"
+ nutriment_amt = 6
+
+/obj/item/weapon/reagent_containers/food/snacks/sashimi/New()
+ ..()
+ reagents.add_reagent("protein", 2)
+ reagents.add_reagent("carpotoxin", 2)
+ bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/benedict
+ name = "eggs benedict"
+ desc = "Hey, there's only one egg in this!"
+ filling_color = "#FFDF78"
+ icon_state = "benedict"
+ nutriment_amt = 4
+
+/obj/item/weapon/reagent_containers/food/snacks/benedict/New()
+ ..()
+ reagents.add_reagent("protein", 2)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/beans
+ name = "baked beans"
+ desc = "Musical fruit in a slightly less musical container."
+ filling_color = "#FC6F28"
+ icon_state = "beans"
+ nutriment_amt = 4
+ nutriment_desc = list("beans" = 4)
+
+/obj/item/weapon/reagent_containers/food/snacks/beans/New()
+ ..()
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/sugarcookie
+ name = "sugar cookie"
+ desc = "Just like your little sister used to make."
+ filling_color = "#DBC94F"
+ icon_state = "sugarcookie"
+ nutriment_amt = 5
+ nutriment_desc = list("sweetness" = 4, "cookie" = 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/sugarcookie/New()
+ ..()
+ bitesize = 1
+
+/obj/item/weapon/reagent_containers/food/snacks/berrymuffin
+ name = "berry muffin"
+ desc = "A delicious and spongy little cake, with berries."
+ icon_state = "berrymuffin"
+ filling_color = "#E0CF9B"
+ center_of_mass = list("x"=17, "y"=4)
+ nutriment_amt = 6
+ nutriment_desc = list("sweetness" = 2, "muffin" = 2, "berries" = 2)
+
+/obj/item/weapon/reagent_containers/food/snacks/berrymuffin/New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/ghostmuffin
+ name = "booberry muffin"
+ desc = "My stomach is a graveyard! No living being can quench my bloodthirst!"
+ icon_state = "berrymuffin"
+ filling_color = "#799ACE"
+ center_of_mass = list("x"=17, "y"=4)
+ nutriment_amt = 6
+ nutriment_desc = list("spookiness" = 4, "muffin" = 1, "berries" = 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/ghostmuffin/New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/eggroll
+ name = "egg roll"
+ desc = "Free with orders over 10 thalers."
+ icon_state = "eggroll"
+ filling_color = "#799ACE"
+ center_of_mass = list("x"=17, "y"=4)
+ nutriment_amt = 4
+ nutriment_desc = list("egg" = 4)
+
+/obj/item/weapon/reagent_containers/food/snacks/eggroll/New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ reagents.add_reagent("protein", 2)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/fruitsalad
+ name = "fruit salad"
+ desc = "Your standard fruit salad."
+ icon_state = "fruitsalad"
+ filling_color = "#FF3867"
+ nutriment_amt = 10
+ nutriment_desc = list("fruit" = 10)
+
+/obj/item/weapon/reagent_containers/food/snacks/fruitsalad/New()
+ ..()
+ reagents.add_reagent("nutriment", 10)
+ bitesize = 4
+
+/obj/item/weapon/reagent_containers/food/snacks/eggbowl
+ name = "egg bowl"
+ desc = "A bowl of fried rice with egg mixed in."
+ icon_state = "eggbowl"
+ trash = /obj/item/trash/snack_bowl
+ filling_color = "#FFFBDB"
+ nutriment_amt = 6
+ nutriment_desc = list("rice" = 2, "egg" = 4)
+
+/obj/item/weapon/reagent_containers/food/snacks/eggbowl/New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ reagents.add_reagent("protein", 4)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/porkbowl
+ name = "pork bowl"
+ desc = "A bowl of fried rice with cuts of meat."
+ icon_state = "porkbowl"
+ trash = /obj/item/trash/snack_bowl
+ filling_color = "#FFFBDB"
+ nutriment_amt = 6
+ nutriment_desc = list("rice" = 2, "meat" = 4)
+
+/obj/item/weapon/reagent_containers/food/snacks/porkbowl/New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ reagents.add_reagent("protein", 4)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/tortilla
+ name = "tortilla"
+ desc = "The base for all your burritos."
+ icon_state = "tortilla"
+ nutriment_amt = 1
+ nutriment_desc = list("bread" = 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/tortilla/New()
+ ..()
+ reagents.add_reagent("nutriment", 2)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/meatburrito
+ name = "carne asada burrito"
+ desc = "The best burrito for meat lovers."
+ icon_state = "carneburrito"
+ nutriment_amt = 6
+ nutriment_desc = list("tortilla" = 3, "meat" = 3)
+
+/obj/item/weapon/reagent_containers/food/snacks/meatburrito/New()
+ ..()
+ reagents.add_reagent("protein", 6)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/cheeseburrito
+ name = "Cheese burrito"
+ desc = "It's a burrito filled with cheese."
+ icon_state = "cheeseburrito"
+ nutriment_amt = 6
+ nutriment_desc = list("tortilla" = 3, "cheese" = 3)
+
+/obj/item/weapon/reagent_containers/food/snacks/cheeseburrito/New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ reagents.add_reagent("protein", 2)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/fuegoburrito
+ name = "fuego phoron burrito"
+ desc = "A super spicy burrito."
+ icon_state = "fuegoburrito"
+ nutriment_amt = 6
+ nutriment_desc = list("chili peppers" = 5, "tortilla" = 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/fuegoburrito/New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ reagents.add_reagent("capsaicin", 4)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/nachos
+ name = "nachos"
+ desc = "Chips from Old Mexico."
+ icon_state = "nachos"
+ nutriment_amt = 2
+ nutriment_desc = list("salt" = 1)
+
+/obj/item/weapon/reagent_containers/food/snacks/nachos/New()
+ ..()
+ reagents.add_reagent("nutriment", 1)
+ bitesize = 1
+
+/obj/item/weapon/reagent_containers/food/snacks/cheesenachos
+ name = "cheesy nachos"
+ desc = "The delicious combination of nachos and melting cheese."
+ icon_state = "cheesenachos"
+ nutriment_amt = 5
+ nutriment_desc = list("salt" = 2, "cheese" = 3)
+
+/obj/item/weapon/reagent_containers/food/snacks/cheesenachos/New()
+ ..()
+ reagents.add_reagent("nutriment", 5)
+ reagents.add_reagent("protein", 2)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/cubannachos
+ name = "cuban nachos"
+ desc = "That's some dangerously spicy nachos."
+ icon_state = "cubannachos"
+ nutriment_amt = 6
+ nutriment_desc = list("salt" = 1, "cheese" = 2, "chili peppers" = 3)
+
+/obj/item/weapon/reagent_containers/food/snacks/cubannachos/New()
+ ..()
+ reagents.add_reagent("nutriment", 5)
+ reagents.add_reagent("capsaicin", 4)
+ bitesize = 2
+
+/obj/item/weapon/reagent_containers/food/snacks/piginblanket
+ name = "pig in a blanket"
+ desc = "A sausage embedded in soft, fluffy pastry. Free this pig from its blanket prison by eating it."
+ icon_state = "piginblanket"
+ nutriment_amt = 6
+ nutriment_desc = list("meat" = 3, "pastry" = 3)
+
+/obj/item/weapon/reagent_containers/food/snacks/piginblanket/New()
+ ..()
+ reagents.add_reagent("nutriment", 6)
+ reagents.add_reagent("protein", 4)
bitesize = 3
\ No newline at end of file
diff --git a/code/modules/reagents/reagent_containers/food/snacks/meat.dm b/code/modules/food/food/snacks/meat.dm
similarity index 94%
rename from code/modules/reagents/reagent_containers/food/snacks/meat.dm
rename to code/modules/food/food/snacks/meat.dm
index 9e1dc52536..d6ecacea48 100644
--- a/code/modules/reagents/reagent_containers/food/snacks/meat.dm
+++ b/code/modules/food/food/snacks/meat.dm
@@ -1,37 +1,37 @@
-/obj/item/weapon/reagent_containers/food/snacks/meat
- name = "meat"
- desc = "A slab of meat."
- icon_state = "meat"
- health = 180
- filling_color = "#FF1C1C"
- center_of_mass = list("x"=16, "y"=14)
-
-/obj/item/weapon/reagent_containers/food/snacks/meat/New()
- ..()
- reagents.add_reagent("protein", 9)
- src.bitesize = 3
-
-/obj/item/weapon/reagent_containers/food/snacks/meat/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if(istype(W,/obj/item/weapon/material/knife))
- new /obj/item/weapon/reagent_containers/food/snacks/rawcutlet(src)
- new /obj/item/weapon/reagent_containers/food/snacks/rawcutlet(src)
- new /obj/item/weapon/reagent_containers/food/snacks/rawcutlet(src)
- user << "You cut the meat into thin strips."
- qdel(src)
- else
- ..()
-
-/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh
- name = "synthetic meat"
- desc = "A synthetic slab of flesh."
-
-// Seperate definitions because some food likes to know if it's human.
-// TODO: rewrite kitchen code to check a var on the meat item so we can remove
-// all these sybtypes.
-/obj/item/weapon/reagent_containers/food/snacks/meat/human
-/obj/item/weapon/reagent_containers/food/snacks/meat/monkey
- //same as plain meat
-
-/obj/item/weapon/reagent_containers/food/snacks/meat/corgi
- name = "Corgi meat"
+/obj/item/weapon/reagent_containers/food/snacks/meat
+ name = "meat"
+ desc = "A slab of meat."
+ icon_state = "meat"
+ health = 180
+ filling_color = "#FF1C1C"
+ center_of_mass = list("x"=16, "y"=14)
+
+/obj/item/weapon/reagent_containers/food/snacks/meat/New()
+ ..()
+ reagents.add_reagent("protein", 9)
+ src.bitesize = 3
+
+/obj/item/weapon/reagent_containers/food/snacks/meat/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ if(istype(W,/obj/item/weapon/material/knife))
+ new /obj/item/weapon/reagent_containers/food/snacks/rawcutlet(src)
+ new /obj/item/weapon/reagent_containers/food/snacks/rawcutlet(src)
+ new /obj/item/weapon/reagent_containers/food/snacks/rawcutlet(src)
+ user << "You cut the meat into thin strips."
+ qdel(src)
+ else
+ ..()
+
+/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh
+ name = "synthetic meat"
+ desc = "A synthetic slab of flesh."
+
+// Seperate definitions because some food likes to know if it's human.
+// TODO: rewrite kitchen code to check a var on the meat item so we can remove
+// all these sybtypes.
+/obj/item/weapon/reagent_containers/food/snacks/meat/human
+/obj/item/weapon/reagent_containers/food/snacks/meat/monkey
+ //same as plain meat
+
+/obj/item/weapon/reagent_containers/food/snacks/meat/corgi
+ name = "Corgi meat"
desc = "Tastes like... well, you know."
\ No newline at end of file
diff --git a/code/modules/reagents/reagent_containers/glass/bottle.dm b/code/modules/food/glass/bottle.dm
similarity index 96%
rename from code/modules/reagents/reagent_containers/glass/bottle.dm
rename to code/modules/food/glass/bottle.dm
index 159ac6acf3..fcf618c201 100644
--- a/code/modules/reagents/reagent_containers/glass/bottle.dm
+++ b/code/modules/food/glass/bottle.dm
@@ -1,175 +1,175 @@
-
-//Not to be confused with /obj/item/weapon/reagent_containers/food/drinks/bottle
-
-/obj/item/weapon/reagent_containers/glass/bottle
- name = "bottle"
- desc = "A small bottle."
- icon = 'icons/obj/chemical.dmi'
- icon_state = null
- item_state = "atoxinbottle"
- amount_per_transfer_from_this = 10
- possible_transfer_amounts = list(5,10,15,25,30,60)
- flags = 0
- volume = 60
-
-/obj/item/weapon/reagent_containers/glass/bottle/on_reagent_change()
- update_icon()
-
-/obj/item/weapon/reagent_containers/glass/bottle/pickup(mob/user)
- ..()
- update_icon()
-
-/obj/item/weapon/reagent_containers/glass/bottle/dropped(mob/user)
- ..()
- update_icon()
-
-/obj/item/weapon/reagent_containers/glass/bottle/attack_hand()
- ..()
- update_icon()
-
-/obj/item/weapon/reagent_containers/glass/bottle/New()
- ..()
- if(!icon_state)
- icon_state = "bottle-[rand(1,4)]"
-
-/obj/item/weapon/reagent_containers/glass/bottle/update_icon()
- overlays.Cut()
-
- if(reagents.total_volume && (icon_state == "bottle-1" || icon_state == "bottle-2" || icon_state == "bottle-3" || icon_state == "bottle-4"))
- var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]10")
-
- var/percent = round((reagents.total_volume / volume) * 100)
- switch(percent)
- if(0 to 9) filling.icon_state = "[icon_state]--10"
- if(10 to 24) filling.icon_state = "[icon_state]-10"
- if(25 to 49) filling.icon_state = "[icon_state]-25"
- if(50 to 74) filling.icon_state = "[icon_state]-50"
- if(75 to 79) filling.icon_state = "[icon_state]-75"
- if(80 to 90) filling.icon_state = "[icon_state]-80"
- if(91 to INFINITY) filling.icon_state = "[icon_state]-100"
-
- filling.color = reagents.get_color()
- overlays += filling
-
- if (!is_open_container())
- var/image/lid = image(icon, src, "lid_bottle")
- overlays += lid
-
-/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline
- name = "inaprovaline bottle"
- desc = "A small bottle. Contains inaprovaline - used to stabilize patients."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle-4"
- prefill = list("inaprovaline" = 60)
-
-/obj/item/weapon/reagent_containers/glass/bottle/toxin
- name = "toxin bottle"
- desc = "A small bottle of toxins. Do not drink, it is poisonous."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle-3"
- prefill = list("toxin" = 60)
-
-/obj/item/weapon/reagent_containers/glass/bottle/cyanide
- name = "cyanide bottle"
- desc = "A small bottle of cyanide. Bitter almonds?"
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle-3"
- prefill = list("cyanide" = 30) //volume changed to match chloral
-
-/obj/item/weapon/reagent_containers/glass/bottle/stoxin
- name = "soporific bottle"
- desc = "A small bottle of soporific. Just the fumes make you sleepy."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle-3"
- prefill = list("stoxin" = 60)
-
-/obj/item/weapon/reagent_containers/glass/bottle/chloralhydrate
- name = "chloral hydrate bottle"
- desc = "A small bottle of Choral Hydrate. Mickey's Favorite!"
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle-3"
- prefill = list("chloralhydrate" = 30) //Intentionally low since it is so strong. Still enough to knock someone out.
-
-/obj/item/weapon/reagent_containers/glass/bottle/antitoxin
- name = "dylovene bottle"
- desc = "A small bottle of dylovene. Counters poisons, and repairs damage. A wonder drug."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle-4"
- prefill = list("anti_toxin" = 60)
-
-/obj/item/weapon/reagent_containers/glass/bottle/mutagen
- name = "unstable mutagen bottle"
- desc = "A small bottle of unstable mutagen. Randomly changes the DNA structure of whoever comes in contact."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle-1"
- prefill = list("mutagen" = 60)
-
-/obj/item/weapon/reagent_containers/glass/bottle/ammonia
- name = "ammonia bottle"
- desc = "A small bottle."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle-1"
- prefill = list("ammonia" = 60)
-
-/obj/item/weapon/reagent_containers/glass/bottle/eznutrient
- name = "\improper EZ NUtrient bottle"
- desc = "A small bottle."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle-4"
- prefill = list("eznutrient" = 60)
-
-/obj/item/weapon/reagent_containers/glass/bottle/left4zed
- name = "\improper Left-4-Zed bottle"
- desc = "A small bottle."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle-4"
- prefill = list("left4zed" = 60)
-
-/obj/item/weapon/reagent_containers/glass/bottle/robustharvest
- name = "\improper Robust Harvest"
- desc = "A small bottle."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle-4"
- prefill = list("robustharvest" = 60)
-
-/obj/item/weapon/reagent_containers/glass/bottle/diethylamine
- name = "diethylamine bottle"
- desc = "A small bottle."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle-4"
- prefill = list("diethylamine" = 60)
-
-/obj/item/weapon/reagent_containers/glass/bottle/pacid
- name = "polytrinic acid bottle"
- desc = "A small bottle. Contains a small amount of Polytrinic Acid"
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle-4"
- prefill = list("pacid" = 60)
-
-/obj/item/weapon/reagent_containers/glass/bottle/adminordrazine
- name = "adminordrazine bottle"
- desc = "A small bottle. Contains the liquid essence of the gods."
- icon = 'icons/obj/drinks.dmi'
- icon_state = "holyflask"
- prefill = list("adminordrazine" = 60)
-
-/obj/item/weapon/reagent_containers/glass/bottle/capsaicin
- name = "capsaicin bottle"
- desc = "A small bottle. Contains hot sauce."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle-4"
- prefill = list("capsaicin" = 60)
-
-/obj/item/weapon/reagent_containers/glass/bottle/frostoil
- name = "frost oil bottle"
- desc = "A small bottle. Contains cold sauce."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle-4"
- prefill = list("frostoil" = 60)
-
-/obj/item/weapon/reagent_containers/glass/bottle/biomass
- name = "biomass bottle"
- desc = "A bottle of raw biomass! Gross!"
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle-3"
+
+//Not to be confused with /obj/item/weapon/reagent_containers/food/drinks/bottle
+
+/obj/item/weapon/reagent_containers/glass/bottle
+ name = "bottle"
+ desc = "A small bottle."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = null
+ item_state = "atoxinbottle"
+ amount_per_transfer_from_this = 10
+ possible_transfer_amounts = list(5,10,15,25,30,60)
+ flags = 0
+ volume = 60
+
+/obj/item/weapon/reagent_containers/glass/bottle/on_reagent_change()
+ update_icon()
+
+/obj/item/weapon/reagent_containers/glass/bottle/pickup(mob/user)
+ ..()
+ update_icon()
+
+/obj/item/weapon/reagent_containers/glass/bottle/dropped(mob/user)
+ ..()
+ update_icon()
+
+/obj/item/weapon/reagent_containers/glass/bottle/attack_hand()
+ ..()
+ update_icon()
+
+/obj/item/weapon/reagent_containers/glass/bottle/New()
+ ..()
+ if(!icon_state)
+ icon_state = "bottle-[rand(1,4)]"
+
+/obj/item/weapon/reagent_containers/glass/bottle/update_icon()
+ overlays.Cut()
+
+ if(reagents.total_volume && (icon_state == "bottle-1" || icon_state == "bottle-2" || icon_state == "bottle-3" || icon_state == "bottle-4"))
+ var/image/filling = image('icons/obj/reagentfillings.dmi', src, "[icon_state]10")
+
+ var/percent = round((reagents.total_volume / volume) * 100)
+ switch(percent)
+ if(0 to 9) filling.icon_state = "[icon_state]--10"
+ if(10 to 24) filling.icon_state = "[icon_state]-10"
+ if(25 to 49) filling.icon_state = "[icon_state]-25"
+ if(50 to 74) filling.icon_state = "[icon_state]-50"
+ if(75 to 79) filling.icon_state = "[icon_state]-75"
+ if(80 to 90) filling.icon_state = "[icon_state]-80"
+ if(91 to INFINITY) filling.icon_state = "[icon_state]-100"
+
+ filling.color = reagents.get_color()
+ overlays += filling
+
+ if (!is_open_container())
+ var/image/lid = image(icon, src, "lid_bottle")
+ overlays += lid
+
+/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline
+ name = "inaprovaline bottle"
+ desc = "A small bottle. Contains inaprovaline - used to stabilize patients."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle-4"
+ prefill = list("inaprovaline" = 60)
+
+/obj/item/weapon/reagent_containers/glass/bottle/toxin
+ name = "toxin bottle"
+ desc = "A small bottle of toxins. Do not drink, it is poisonous."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle-3"
+ prefill = list("toxin" = 60)
+
+/obj/item/weapon/reagent_containers/glass/bottle/cyanide
+ name = "cyanide bottle"
+ desc = "A small bottle of cyanide. Bitter almonds?"
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle-3"
+ prefill = list("cyanide" = 30) //volume changed to match chloral
+
+/obj/item/weapon/reagent_containers/glass/bottle/stoxin
+ name = "soporific bottle"
+ desc = "A small bottle of soporific. Just the fumes make you sleepy."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle-3"
+ prefill = list("stoxin" = 60)
+
+/obj/item/weapon/reagent_containers/glass/bottle/chloralhydrate
+ name = "chloral hydrate bottle"
+ desc = "A small bottle of Choral Hydrate. Mickey's Favorite!"
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle-3"
+ prefill = list("chloralhydrate" = 30) //Intentionally low since it is so strong. Still enough to knock someone out.
+
+/obj/item/weapon/reagent_containers/glass/bottle/antitoxin
+ name = "dylovene bottle"
+ desc = "A small bottle of dylovene. Counters poisons, and repairs damage. A wonder drug."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle-4"
+ prefill = list("anti_toxin" = 60)
+
+/obj/item/weapon/reagent_containers/glass/bottle/mutagen
+ name = "unstable mutagen bottle"
+ desc = "A small bottle of unstable mutagen. Randomly changes the DNA structure of whoever comes in contact."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle-1"
+ prefill = list("mutagen" = 60)
+
+/obj/item/weapon/reagent_containers/glass/bottle/ammonia
+ name = "ammonia bottle"
+ desc = "A small bottle."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle-1"
+ prefill = list("ammonia" = 60)
+
+/obj/item/weapon/reagent_containers/glass/bottle/eznutrient
+ name = "\improper EZ NUtrient bottle"
+ desc = "A small bottle."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle-4"
+ prefill = list("eznutrient" = 60)
+
+/obj/item/weapon/reagent_containers/glass/bottle/left4zed
+ name = "\improper Left-4-Zed bottle"
+ desc = "A small bottle."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle-4"
+ prefill = list("left4zed" = 60)
+
+/obj/item/weapon/reagent_containers/glass/bottle/robustharvest
+ name = "\improper Robust Harvest"
+ desc = "A small bottle."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle-4"
+ prefill = list("robustharvest" = 60)
+
+/obj/item/weapon/reagent_containers/glass/bottle/diethylamine
+ name = "diethylamine bottle"
+ desc = "A small bottle."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle-4"
+ prefill = list("diethylamine" = 60)
+
+/obj/item/weapon/reagent_containers/glass/bottle/pacid
+ name = "polytrinic acid bottle"
+ desc = "A small bottle. Contains a small amount of Polytrinic Acid"
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle-4"
+ prefill = list("pacid" = 60)
+
+/obj/item/weapon/reagent_containers/glass/bottle/adminordrazine
+ name = "adminordrazine bottle"
+ desc = "A small bottle. Contains the liquid essence of the gods."
+ icon = 'icons/obj/drinks.dmi'
+ icon_state = "holyflask"
+ prefill = list("adminordrazine" = 60)
+
+/obj/item/weapon/reagent_containers/glass/bottle/capsaicin
+ name = "capsaicin bottle"
+ desc = "A small bottle. Contains hot sauce."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle-4"
+ prefill = list("capsaicin" = 60)
+
+/obj/item/weapon/reagent_containers/glass/bottle/frostoil
+ name = "frost oil bottle"
+ desc = "A small bottle. Contains cold sauce."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle-4"
+ prefill = list("frostoil" = 60)
+
+/obj/item/weapon/reagent_containers/glass/bottle/biomass
+ name = "biomass bottle"
+ desc = "A bottle of raw biomass! Gross!"
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle-3"
prefill = list("biomass" = 60)
\ No newline at end of file
diff --git a/code/modules/reagents/reagent_containers/glass/bottle/robot.dm b/code/modules/food/glass/bottle/robot.dm
similarity index 97%
rename from code/modules/reagents/reagent_containers/glass/bottle/robot.dm
rename to code/modules/food/glass/bottle/robot.dm
index fec991ab3f..78638235a2 100644
--- a/code/modules/reagents/reagent_containers/glass/bottle/robot.dm
+++ b/code/modules/food/glass/bottle/robot.dm
@@ -1,25 +1,25 @@
-
-/obj/item/weapon/reagent_containers/glass/bottle/robot
- amount_per_transfer_from_this = 10
- possible_transfer_amounts = list(5,10,15,25,30,50,100)
- flags = OPENCONTAINER
- volume = 60
- var/reagent = ""
-
-
-/obj/item/weapon/reagent_containers/glass/bottle/robot/inaprovaline
- name = "internal inaprovaline bottle"
- desc = "A small bottle. Contains inaprovaline - used to stabilize patients."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle-4"
- reagent = "inaprovaline"
- prefill = list("inaprovaline" = 60)
-
-
-/obj/item/weapon/reagent_containers/glass/bottle/robot/antitoxin
- name = "internal anti-toxin bottle"
- desc = "A small bottle of Anti-toxins. Counters poisons, and repairs damage, a wonder drug."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "bottle-4"
- reagent = "anti_toxin"
- prefill = list("anti_toxin" = 60)
+
+/obj/item/weapon/reagent_containers/glass/bottle/robot
+ amount_per_transfer_from_this = 10
+ possible_transfer_amounts = list(5,10,15,25,30,50,100)
+ flags = OPENCONTAINER
+ volume = 60
+ var/reagent = ""
+
+
+/obj/item/weapon/reagent_containers/glass/bottle/robot/inaprovaline
+ name = "internal inaprovaline bottle"
+ desc = "A small bottle. Contains inaprovaline - used to stabilize patients."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle-4"
+ reagent = "inaprovaline"
+ prefill = list("inaprovaline" = 60)
+
+
+/obj/item/weapon/reagent_containers/glass/bottle/robot/antitoxin
+ name = "internal anti-toxin bottle"
+ desc = "A small bottle of Anti-toxins. Counters poisons, and repairs damage, a wonder drug."
+ icon = 'icons/obj/chemical.dmi'
+ icon_state = "bottle-4"
+ reagent = "anti_toxin"
+ prefill = list("anti_toxin" = 60)
diff --git a/code/game/machinery/kitchen/cooking_machines/_cooker.dm b/code/modules/food/kitchen/cooking_machines/_cooker.dm
similarity index 100%
rename from code/game/machinery/kitchen/cooking_machines/_cooker.dm
rename to code/modules/food/kitchen/cooking_machines/_cooker.dm
diff --git a/code/game/machinery/kitchen/cooking_machines/_cooker_output.dm b/code/modules/food/kitchen/cooking_machines/_cooker_output.dm
similarity index 100%
rename from code/game/machinery/kitchen/cooking_machines/_cooker_output.dm
rename to code/modules/food/kitchen/cooking_machines/_cooker_output.dm
diff --git a/code/game/machinery/kitchen/cooking_machines/candy.dm b/code/modules/food/kitchen/cooking_machines/candy.dm
similarity index 100%
rename from code/game/machinery/kitchen/cooking_machines/candy.dm
rename to code/modules/food/kitchen/cooking_machines/candy.dm
diff --git a/code/game/machinery/kitchen/cooking_machines/cereal.dm b/code/modules/food/kitchen/cooking_machines/cereal.dm
similarity index 100%
rename from code/game/machinery/kitchen/cooking_machines/cereal.dm
rename to code/modules/food/kitchen/cooking_machines/cereal.dm
diff --git a/code/game/machinery/kitchen/cooking_machines/fryer.dm b/code/modules/food/kitchen/cooking_machines/fryer.dm
similarity index 100%
rename from code/game/machinery/kitchen/cooking_machines/fryer.dm
rename to code/modules/food/kitchen/cooking_machines/fryer.dm
diff --git a/code/game/machinery/kitchen/cooking_machines/grill.dm b/code/modules/food/kitchen/cooking_machines/grill.dm
similarity index 100%
rename from code/game/machinery/kitchen/cooking_machines/grill.dm
rename to code/modules/food/kitchen/cooking_machines/grill.dm
diff --git a/code/game/machinery/kitchen/cooking_machines/oven.dm b/code/modules/food/kitchen/cooking_machines/oven.dm
similarity index 100%
rename from code/game/machinery/kitchen/cooking_machines/oven.dm
rename to code/modules/food/kitchen/cooking_machines/oven.dm
diff --git a/code/game/machinery/kitchen/gibber.dm b/code/modules/food/kitchen/gibber.dm
similarity index 96%
rename from code/game/machinery/kitchen/gibber.dm
rename to code/modules/food/kitchen/gibber.dm
index d695253aa9..4799002cb5 100644
--- a/code/game/machinery/kitchen/gibber.dm
+++ b/code/modules/food/kitchen/gibber.dm
@@ -1,236 +1,236 @@
-
-/obj/machinery/gibber
- name = "gibber"
- desc = "The name isn't descriptive enough?"
- icon = 'icons/obj/kitchen.dmi'
- icon_state = "grinder"
- density = 1
- anchored = 1
- req_access = list(access_kitchen,access_morgue)
-
- var/operating = 0 //Is it on?
- var/dirty = 0 // Does it need cleaning?
- var/mob/living/occupant // Mob who has been put inside
- var/gib_time = 40 // Time from starting until meat appears
- var/gib_throw_dir = WEST // Direction to spit meat and gibs in.
-
- use_power = 1
- idle_power_usage = 2
- active_power_usage = 500
-
-//auto-gibs anything that bumps into it
-/obj/machinery/gibber/autogibber
- var/turf/input_plate
-
-/obj/machinery/gibber/autogibber/New()
- ..()
- spawn(5)
- for(var/i in cardinal)
- var/obj/machinery/mineral/input/input_obj = locate( /obj/machinery/mineral/input, get_step(src.loc, i) )
- if(input_obj)
- if(isturf(input_obj.loc))
- input_plate = input_obj.loc
- gib_throw_dir = i
- qdel(input_obj)
- break
-
- if(!input_plate)
- log_misc("a [src] didn't find an input plate.")
- return
-
-/obj/machinery/gibber/autogibber/Bumped(var/atom/A)
- if(!input_plate) return
-
- if(ismob(A))
- var/mob/M = A
-
- if(M.loc == input_plate
- )
- M.loc = src
- M.gib()
-
-
-/obj/machinery/gibber/New()
- ..()
- src.overlays += image('icons/obj/kitchen.dmi', "grjam")
-
-/obj/machinery/gibber/update_icon()
- overlays.Cut()
- if (dirty)
- src.overlays += image('icons/obj/kitchen.dmi', "grbloody")
- if(stat & (NOPOWER|BROKEN))
- return
- if (!occupant)
- src.overlays += image('icons/obj/kitchen.dmi', "grjam")
- else if (operating)
- src.overlays += image('icons/obj/kitchen.dmi', "gruse")
- else
- src.overlays += image('icons/obj/kitchen.dmi', "gridle")
-
-/obj/machinery/gibber/relaymove(mob/user as mob)
- src.go_out()
- return
-
-/obj/machinery/gibber/attack_hand(mob/user as mob)
- if(stat & (NOPOWER|BROKEN))
- return
- if(operating)
- user << "The gibber is locked and running, wait for it to finish."
- return
- else
- src.startgibbing(user)
-
-/obj/machinery/gibber/examine()
- ..()
- usr << "The safety guard is [emagged ? "disabled" : "enabled"]."
-
-/obj/machinery/gibber/emag_act(var/remaining_charges, var/mob/user)
- emagged = !emagged
- user << "You [emagged ? "disable" : "enable"] the gibber safety guard."
- return 1
-
-/obj/machinery/gibber/attackby(var/obj/item/W, var/mob/user)
- var/obj/item/weapon/grab/G = W
-
- if(default_unfasten_wrench(user, W, 40))
- return
-
- if(!istype(G))
- return ..()
-
- if(G.state < 2)
- user << "You need a better grip to do that!"
- return
-
- move_into_gibber(user,G.affecting)
- // Grab() process should clean up the grab item, no need to del it.
-
-/obj/machinery/gibber/MouseDrop_T(mob/target, mob/user)
- if(user.stat || user.restrained())
- return
- move_into_gibber(user,target)
-
-/obj/machinery/gibber/proc/move_into_gibber(var/mob/user,var/mob/living/victim)
-
- if(src.occupant)
- user << "The gibber is full, empty it first!"
- return
-
- if(operating)
- user << "The gibber is locked and running, wait for it to finish."
- return
-
- if(!(istype(victim, /mob/living/carbon)) && !(istype(victim, /mob/living/simple_animal)) )
- user << "This is not suitable for the gibber!"
- return
-
- if(istype(victim,/mob/living/carbon/human) && !emagged)
- user << "The gibber safety guard is engaged!"
- return
-
-
- if(victim.abiotic(1))
- user << "Subject may not have abiotic items on."
- return
-
- user.visible_message("[user] starts to put [victim] into the gibber!")
- src.add_fingerprint(user)
- if(do_after(user, 30) && victim.Adjacent(src) && user.Adjacent(src) && victim.Adjacent(user) && !occupant)
- user.visible_message("[user] stuffs [victim] into the gibber!")
- if(victim.client)
- victim.client.perspective = EYE_PERSPECTIVE
- victim.client.eye = src
- victim.loc = src
- src.occupant = victim
- update_icon()
-
-/obj/machinery/gibber/verb/eject()
- set category = "Object"
- set name = "Empty Gibber"
- set src in oview(1)
-
- if (usr.stat != 0)
- return
- src.go_out()
- add_fingerprint(usr)
- return
-
-/obj/machinery/gibber/proc/go_out()
- if(operating || !src.occupant)
- return
- for(var/obj/O in src)
- O.loc = src.loc
- 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
- update_icon()
- return
-
-
-/obj/machinery/gibber/proc/startgibbing(mob/user as mob)
- if(src.operating)
- return
- if(!src.occupant)
- visible_message("You hear a loud metallic grinding sound.")
- return
-
- use_power(1000)
- visible_message("You hear a loud [occupant.isSynthetic() ? "metallic" : "squelchy"] grinding sound.")
- src.operating = 1
- update_icon()
-
- var/slab_name = occupant.name
- var/slab_count = 3
- var/slab_type = /obj/item/weapon/reagent_containers/food/snacks/meat
- var/slab_nutrition = src.occupant.nutrition / 15
-
- // Some mobs have specific meat item types.
- if(istype(src.occupant,/mob/living/simple_animal))
- var/mob/living/simple_animal/critter = src.occupant
- if(critter.meat_amount)
- slab_count = critter.meat_amount
- if(critter.meat_type)
- slab_type = critter.meat_type
- else if(istype(src.occupant,/mob/living/carbon/human))
- var/mob/living/carbon/human/H = occupant
- slab_name = src.occupant.real_name
- slab_type = H.isSynthetic() ? /obj/item/stack/material/steel : H.species.meat_type
-
- // Small mobs don't give as much nutrition.
- if(issmall(src.occupant))
- slab_nutrition *= 0.5
- slab_nutrition /= slab_count
-
- for(var/i=1 to slab_count)
- var/obj/item/weapon/reagent_containers/food/snacks/meat/new_meat = new slab_type(src, rand(3,8))
- if(istype(new_meat))
- new_meat.name = "[slab_name] [new_meat.name]"
- new_meat.reagents.add_reagent("nutriment",slab_nutrition)
- if(src.occupant.reagents)
- src.occupant.reagents.trans_to_obj(new_meat, round(occupant.reagents.total_volume/slab_count,1))
-
- add_attack_logs(user,occupant,"Used [src] to gib")
-
- src.occupant.ghostize()
-
- spawn(gib_time)
-
- src.operating = 0
- src.occupant.gib()
- qdel(src.occupant)
-
- playsound(src.loc, 'sound/effects/splat.ogg', 50, 1)
- operating = 0
- for (var/obj/item/thing in contents)
- // There's a chance that the gibber will fail to destroy some evidence.
- if(istype(thing,/obj/item/organ) && prob(80))
- qdel(thing)
- continue
- thing.forceMove(get_turf(thing)) // Drop it onto the turf for throwing.
- thing.throw_at(get_edge_target_turf(src,gib_throw_dir),rand(0,3),emagged ? 100 : 50) // Being pelted with bits of meat and bone would hurt.
-
- update_icon()
-
-
+
+/obj/machinery/gibber
+ name = "gibber"
+ desc = "The name isn't descriptive enough?"
+ icon = 'icons/obj/kitchen.dmi'
+ icon_state = "grinder"
+ density = 1
+ anchored = 1
+ req_access = list(access_kitchen,access_morgue)
+
+ var/operating = 0 //Is it on?
+ var/dirty = 0 // Does it need cleaning?
+ var/mob/living/occupant // Mob who has been put inside
+ var/gib_time = 40 // Time from starting until meat appears
+ var/gib_throw_dir = WEST // Direction to spit meat and gibs in.
+
+ use_power = 1
+ idle_power_usage = 2
+ active_power_usage = 500
+
+//auto-gibs anything that bumps into it
+/obj/machinery/gibber/autogibber
+ var/turf/input_plate
+
+/obj/machinery/gibber/autogibber/New()
+ ..()
+ spawn(5)
+ for(var/i in cardinal)
+ var/obj/machinery/mineral/input/input_obj = locate( /obj/machinery/mineral/input, get_step(src.loc, i) )
+ if(input_obj)
+ if(isturf(input_obj.loc))
+ input_plate = input_obj.loc
+ gib_throw_dir = i
+ qdel(input_obj)
+ break
+
+ if(!input_plate)
+ log_misc("a [src] didn't find an input plate.")
+ return
+
+/obj/machinery/gibber/autogibber/Bumped(var/atom/A)
+ if(!input_plate) return
+
+ if(ismob(A))
+ var/mob/M = A
+
+ if(M.loc == input_plate
+ )
+ M.loc = src
+ M.gib()
+
+
+/obj/machinery/gibber/New()
+ ..()
+ src.overlays += image('icons/obj/kitchen.dmi', "grjam")
+
+/obj/machinery/gibber/update_icon()
+ overlays.Cut()
+ if (dirty)
+ src.overlays += image('icons/obj/kitchen.dmi', "grbloody")
+ if(stat & (NOPOWER|BROKEN))
+ return
+ if (!occupant)
+ src.overlays += image('icons/obj/kitchen.dmi', "grjam")
+ else if (operating)
+ src.overlays += image('icons/obj/kitchen.dmi', "gruse")
+ else
+ src.overlays += image('icons/obj/kitchen.dmi', "gridle")
+
+/obj/machinery/gibber/relaymove(mob/user as mob)
+ src.go_out()
+ return
+
+/obj/machinery/gibber/attack_hand(mob/user as mob)
+ if(stat & (NOPOWER|BROKEN))
+ return
+ if(operating)
+ user << "The gibber is locked and running, wait for it to finish."
+ return
+ else
+ src.startgibbing(user)
+
+/obj/machinery/gibber/examine()
+ ..()
+ usr << "The safety guard is [emagged ? "disabled" : "enabled"]."
+
+/obj/machinery/gibber/emag_act(var/remaining_charges, var/mob/user)
+ emagged = !emagged
+ user << "You [emagged ? "disable" : "enable"] the gibber safety guard."
+ return 1
+
+/obj/machinery/gibber/attackby(var/obj/item/W, var/mob/user)
+ var/obj/item/weapon/grab/G = W
+
+ if(default_unfasten_wrench(user, W, 40))
+ return
+
+ if(!istype(G))
+ return ..()
+
+ if(G.state < 2)
+ user << "You need a better grip to do that!"
+ return
+
+ move_into_gibber(user,G.affecting)
+ // Grab() process should clean up the grab item, no need to del it.
+
+/obj/machinery/gibber/MouseDrop_T(mob/target, mob/user)
+ if(user.stat || user.restrained())
+ return
+ move_into_gibber(user,target)
+
+/obj/machinery/gibber/proc/move_into_gibber(var/mob/user,var/mob/living/victim)
+
+ if(src.occupant)
+ user << "The gibber is full, empty it first!"
+ return
+
+ if(operating)
+ user << "The gibber is locked and running, wait for it to finish."
+ return
+
+ if(!(istype(victim, /mob/living/carbon)) && !(istype(victim, /mob/living/simple_animal)) )
+ user << "This is not suitable for the gibber!"
+ return
+
+ if(istype(victim,/mob/living/carbon/human) && !emagged)
+ user << "The gibber safety guard is engaged!"
+ return
+
+
+ if(victim.abiotic(1))
+ user << "Subject may not have abiotic items on."
+ return
+
+ user.visible_message("[user] starts to put [victim] into the gibber!")
+ src.add_fingerprint(user)
+ if(do_after(user, 30) && victim.Adjacent(src) && user.Adjacent(src) && victim.Adjacent(user) && !occupant)
+ user.visible_message("[user] stuffs [victim] into the gibber!")
+ if(victim.client)
+ victim.client.perspective = EYE_PERSPECTIVE
+ victim.client.eye = src
+ victim.loc = src
+ src.occupant = victim
+ update_icon()
+
+/obj/machinery/gibber/verb/eject()
+ set category = "Object"
+ set name = "Empty Gibber"
+ set src in oview(1)
+
+ if (usr.stat != 0)
+ return
+ src.go_out()
+ add_fingerprint(usr)
+ return
+
+/obj/machinery/gibber/proc/go_out()
+ if(operating || !src.occupant)
+ return
+ for(var/obj/O in src)
+ O.loc = src.loc
+ 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
+ update_icon()
+ return
+
+
+/obj/machinery/gibber/proc/startgibbing(mob/user as mob)
+ if(src.operating)
+ return
+ if(!src.occupant)
+ visible_message("You hear a loud metallic grinding sound.")
+ return
+
+ use_power(1000)
+ visible_message("You hear a loud [occupant.isSynthetic() ? "metallic" : "squelchy"] grinding sound.")
+ src.operating = 1
+ update_icon()
+
+ var/slab_name = occupant.name
+ var/slab_count = 3
+ var/slab_type = /obj/item/weapon/reagent_containers/food/snacks/meat
+ var/slab_nutrition = src.occupant.nutrition / 15
+
+ // Some mobs have specific meat item types.
+ if(istype(src.occupant,/mob/living/simple_animal))
+ var/mob/living/simple_animal/critter = src.occupant
+ if(critter.meat_amount)
+ slab_count = critter.meat_amount
+ if(critter.meat_type)
+ slab_type = critter.meat_type
+ else if(istype(src.occupant,/mob/living/carbon/human))
+ var/mob/living/carbon/human/H = occupant
+ slab_name = src.occupant.real_name
+ slab_type = H.isSynthetic() ? /obj/item/stack/material/steel : H.species.meat_type
+
+ // Small mobs don't give as much nutrition.
+ if(issmall(src.occupant))
+ slab_nutrition *= 0.5
+ slab_nutrition /= slab_count
+
+ for(var/i=1 to slab_count)
+ var/obj/item/weapon/reagent_containers/food/snacks/meat/new_meat = new slab_type(src, rand(3,8))
+ if(istype(new_meat))
+ new_meat.name = "[slab_name] [new_meat.name]"
+ new_meat.reagents.add_reagent("nutriment",slab_nutrition)
+ if(src.occupant.reagents)
+ src.occupant.reagents.trans_to_obj(new_meat, round(occupant.reagents.total_volume/slab_count,1))
+
+ add_attack_logs(user,occupant,"Used [src] to gib")
+
+ src.occupant.ghostize()
+
+ spawn(gib_time)
+
+ src.operating = 0
+ src.occupant.gib()
+ qdel(src.occupant)
+
+ playsound(src.loc, 'sound/effects/splat.ogg', 50, 1)
+ operating = 0
+ for (var/obj/item/thing in contents)
+ // There's a chance that the gibber will fail to destroy some evidence.
+ if(istype(thing,/obj/item/organ) && prob(80))
+ qdel(thing)
+ continue
+ thing.forceMove(get_turf(thing)) // Drop it onto the turf for throwing.
+ thing.throw_at(get_edge_target_turf(src,gib_throw_dir),rand(0,3),emagged ? 100 : 50) // Being pelted with bits of meat and bone would hurt.
+
+ update_icon()
+
+
diff --git a/code/game/machinery/kitchen/icecream.dm b/code/modules/food/kitchen/icecream.dm
similarity index 100%
rename from code/game/machinery/kitchen/icecream.dm
rename to code/modules/food/kitchen/icecream.dm
diff --git a/code/game/machinery/kitchen/microwave.dm b/code/modules/food/kitchen/microwave.dm
similarity index 100%
rename from code/game/machinery/kitchen/microwave.dm
rename to code/modules/food/kitchen/microwave.dm
diff --git a/code/game/machinery/kitchen/smartfridge.dm b/code/modules/food/kitchen/smartfridge.dm
similarity index 100%
rename from code/game/machinery/kitchen/smartfridge.dm
rename to code/modules/food/kitchen/smartfridge.dm
diff --git a/code/modules/hydroponics/beekeeping/beehive.dm b/code/modules/hydroponics/beekeeping/beehive.dm
index 7f95ac306c..e3da347908 100644
--- a/code/modules/hydroponics/beekeeping/beehive.dm
+++ b/code/modules/hydroponics/beekeeping/beehive.dm
@@ -179,7 +179,7 @@
qdel(H)
spawn(50)
new /obj/item/honey_frame(loc)
- new /obj/item/stack/wax(loc)
+ new /obj/item/stack/material/wax(loc)
honey += processing
processing = 0
icon_state = "centrifuge"
@@ -234,14 +234,14 @@
qdel(src)
return
-/obj/item/stack/wax
+/obj/item/stack/material/wax
name = "wax"
singular_name = "wax piece"
desc = "Soft substance produced by bees. Used to make candles."
icon = 'icons/obj/beekeeping.dmi'
icon_state = "wax"
-/obj/item/stack/wax/New()
+/obj/item/stack/material/wax/New()
..()
recipes = wax_recipes
diff --git a/code/modules/integrated_electronics/core/assemblies.dm b/code/modules/integrated_electronics/core/assemblies.dm
index 4d27f3ccf3..d236dc9da7 100644
--- a/code/modules/integrated_electronics/core/assemblies.dm
+++ b/code/modules/integrated_electronics/core/assemblies.dm
@@ -52,7 +52,6 @@
/obj/item/device/electronic_assembly/proc/resolve_nano_host()
return src
-
/obj/item/device/electronic_assembly/proc/check_interactivity(mob/user)
if(!CanInteract(user, physical_state))
return 0
diff --git a/code/modules/maps/tg/reader.dm b/code/modules/maps/tg/reader.dm
index ff66d4bdd2..30de8067dc 100644
--- a/code/modules/maps/tg/reader.dm
+++ b/code/modules/maps/tg/reader.dm
@@ -157,7 +157,7 @@ var/global/use_preloader = FALSE
++turfsSkipped
#endif
CHECK_TICK
- maxx = max(maxx, ++xcrd)
+ maxx = max(maxx, xcrd++)
key_list[++key_list.len] = line_keys
// Rotate the list according to orientation
diff --git a/code/modules/mining/drilling/scanner.dm b/code/modules/mining/drilling/scanner.dm
index 4a8c3c59b6..0df256c131 100644
--- a/code/modules/mining/drilling/scanner.dm
+++ b/code/modules/mining/drilling/scanner.dm
@@ -9,6 +9,7 @@
/obj/item/weapon/mining_scanner/attack_self(mob/user as mob)
user << "You begin sweeping \the [src] about, scanning for metal deposits."
+ playsound(loc, 'sound/items/goggles_charge.ogg', 50, 1, -6)
if(!do_after(user, 50))
return
diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm
index 03568205c8..5110589942 100644
--- a/code/modules/mining/machine_processing.dm
+++ b/code/modules/mining/machine_processing.dm
@@ -11,6 +11,8 @@
density = TRUE
anchored = TRUE
+ var/obj/item/weapon/card/id/inserted_id // Inserted ID card, for points
+
var/obj/machinery/mineral/processing_unit/machine = null
var/show_all_ores = FALSE
@@ -23,11 +25,27 @@
log_debug("Ore processing machine console at [src.x], [src.y], [src.z] could not find its machine!")
qdel(src)
+/obj/machinery/mineral/processing_unit_console/Destroy()
+ if(inserted_id)
+ inserted_id.forceMove(loc) //Prevents deconstructing from deleting whatever ID was inside it.
+ . = ..()
+
/obj/machinery/mineral/processing_unit_console/attack_hand(mob/user)
if(..())
return
interact(user)
+/obj/machinery/mineral/processing_unit_console/attackby(var/obj/item/I, var/mob/user)
+ if(istype(I, /obj/item/weapon/card/id))
+ if(!powered())
+ return
+ if(!inserted_id && user.unEquip(I))
+ I.forceMove(src)
+ inserted_id = I
+ interact(user)
+ return
+ ..()
+
/obj/machinery/mineral/processing_unit_console/interact(mob/user)
if(..())
return
@@ -40,6 +58,13 @@
var/dat = "Ore processor console
"
+ dat += "Current unclaimed points: [machine.points]
"
+ if(istype(inserted_id))
+ dat += "You have [inserted_id.mining_points] mining points collected. Eject ID.
"
+ dat += "Claim points.
"
+ else
+ dat += "No ID inserted. Insert ID.
"
+
dat += "
"
for(var/ore in machine.ores_processing)
@@ -96,6 +121,26 @@
show_all_ores = !show_all_ores
+ if(href_list["choice"])
+ if(istype(inserted_id))
+ if(href_list["choice"] == "eject")
+ usr.put_in_hands(inserted_id)
+ inserted_id = null
+ if(href_list["choice"] == "claim")
+ if(access_mining_station in inserted_id.access)
+ inserted_id.mining_points += machine.points
+ machine.points = 0
+ else
+ to_chat(usr, "Required access not found.")
+ else if(href_list["choice"] == "insert")
+ var/obj/item/weapon/card/id/I = usr.get_active_hand()
+ if(istype(I))
+ usr.drop_item()
+ I.forceMove(src)
+ inserted_id = I
+ else
+ to_chat(usr, "No valid ID.")
+
src.updateUsrDialog()
return
@@ -118,6 +163,19 @@
var/static/list/alloy_data
var/active = FALSE
+ var/points = 0
+ var/static/list/ore_values = list(
+ "sand" = 1,
+ "hematite" = 1,
+ "carbon" = 1,
+ "phoron" = 15,
+ "silver" = 16,
+ "gold" = 18,
+ "uranium" = 30,
+ "diamond" = 50,
+ "platinum" = 40,
+ "mhydrogen" = 40)
+
/obj/machinery/mineral/processing_unit/New()
..()
// initialize static alloy_data list
@@ -148,7 +206,11 @@
/obj/machinery/mineral/processing_unit/process()
- if (!src.output || !src.input) return
+ if (!src.output || !src.input)
+ return
+
+ if(panel_open || !powered())
+ return
var/list/tick_alloys = list()
@@ -158,7 +220,7 @@
if(!O) break
if(!isnull(ores_stored[O.material]))
ores_stored[O.material]++
-
+ points += ore_values[O.material] // Give Points!
qdel(O)
if(!active)
diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm
index f6315296f1..902694c34d 100644
--- a/code/modules/mining/mine_items.dm
+++ b/code/modules/mining/mine_items.dm
@@ -30,11 +30,6 @@
var/excavation_amount = 200
-/obj/item/weapon/pickaxe/hammer
- name = "sledgehammer"
- //icon_state = "sledgehammer" Waiting on sprite
- desc = "A mining hammer made of reinforced metal. You feel like smashing your boss in the face with this."
-
/obj/item/weapon/pickaxe/silver
name = "silver pickaxe"
icon_state = "spickaxe"
diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm
index 5c441f1e28..ea6f687113 100644
--- a/code/modules/mining/mine_turfs.dm
+++ b/code/modules/mining/mine_turfs.dm
@@ -452,6 +452,8 @@ var/list/mining_overlay_cache = list()
//update overlays displaying excavation level
if( !(excav_overlay && excavation_level > 0) || update_excav_overlay )
var/excav_quadrant = round(excavation_level / 25) + 1
+ if(excav_quadrant > 5)
+ excav_quadrant = 5
cut_overlay(excav_overlay)
excav_overlay = "overlay_excv[excav_quadrant]_[rand(1,3)]"
add_overlay(excav_overlay)
diff --git a/code/modules/mining/ore_redemption_machine/construction.dm b/code/modules/mining/ore_redemption_machine/construction.dm
new file mode 100644
index 0000000000..dbf8a96ffb
--- /dev/null
+++ b/code/modules/mining/ore_redemption_machine/construction.dm
@@ -0,0 +1,12 @@
+#ifndef T_BOARD
+#error T_BOARD macro is not defined but we need it!
+#endif
+
+/obj/item/weapon/circuitboard/mining_equipment_vendor
+ name = T_BOARD("Mining Equipment Vendor")
+ board_type = new /datum/frame/frame_types/machine
+ build_path = /obj/machinery/mineral/equipment_vendor
+ origin_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 3)
+ req_components = list(
+ /obj/item/weapon/stock_parts/console_screen = 1,
+ /obj/item/weapon/stock_parts/matter_bin = 3)
diff --git a/code/modules/mining/ore_redemption_machine/equipment_vendor.dm b/code/modules/mining/ore_redemption_machine/equipment_vendor.dm
new file mode 100644
index 0000000000..2aaf5b3303
--- /dev/null
+++ b/code/modules/mining/ore_redemption_machine/equipment_vendor.dm
@@ -0,0 +1,194 @@
+/**********************Mining Equipment Locker**************************/
+
+/obj/machinery/mineral/equipment_vendor
+ name = "mining equipment vendor"
+ desc = "An equipment vendor for miners, points collected at an ore redemption machine can be spent here."
+ icon = 'icons/obj/machines/mining_machines.dmi'
+ icon_state = "mining"
+ density = TRUE
+ anchored = TRUE
+ circuit = /obj/item/weapon/circuitboard/mining_equipment_vendor
+ var/icon_deny = "mining-deny"
+ var/obj/item/weapon/card/id/inserted_id
+ var/list/prize_list = list(
+ new /datum/data/mining_equipment("1 Marker Beacon", /obj/item/stack/marker_beacon, 10),
+ new /datum/data/mining_equipment("10 Marker Beacons", /obj/item/stack/marker_beacon/ten, 100),
+ new /datum/data/mining_equipment("30 Marker Beacons", /obj/item/stack/marker_beacon/thirty, 300),
+ new /datum/data/mining_equipment("Whiskey", /obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey, 125),
+ new /datum/data/mining_equipment("Absinthe", /obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe, 125),
+ new /datum/data/mining_equipment("Cigar", /obj/item/clothing/mask/smokable/cigarette/cigar/havana, 150),
+ new /datum/data/mining_equipment("Soap", /obj/item/weapon/soap/nanotrasen, 200),
+ new /datum/data/mining_equipment("Laser Pointer", /obj/item/device/laser_pointer, 900),
+ new /datum/data/mining_equipment("Plush Toy", /obj/random/plushie, 300),
+// new /datum/data/mining_equipment("Fulton Beacon", /obj/item/fulton_core, 500),
+ new /datum/data/mining_equipment("Point Transfer Card", /obj/item/weapon/card/mining_point_card, 500),
+// new /datum/data/mining_equipment("Fulton Pack", /obj/item/extraction_pack, 1200),
+ new /datum/data/mining_equipment("Silver Pickaxe", /obj/item/weapon/pickaxe/silver, 1200),
+// new /datum/data/mining_equipment("Space Cash", /obj/item/weapon/spacecash/c1000, 2000),
+// new /datum/data/mining_equipment("Industrial Hardsuit - Control Module", /obj/item/weapon/rig/industrial, 2000),
+// new /datum/data/mining_equipment("Industrial Hardsuit - Plasma Cutter", /obj/item/rig_module/device/plasmacutter, 800),
+// new /datum/data/mining_equipment("Industrial Hardsuit - Drill", /obj/item/rig_module/device/drill, 2000),
+// new /datum/data/mining_equipment("Industrial Hardsuit - Ore Scanner", /obj/item/rig_module/device/orescanner, 1000),
+// new /datum/data/mining_equipment("Industrial Hardsuit - Material Scanner", /obj/item/rig_module/vision/material, 500),
+// new /datum/data/mining_equipment("Industrial Hardsuit - Maneuvering Jets", /obj/item/rig_module/maneuvering_jets, 1250),
+// new /datum/data/mining_equipment("Diamond Pickaxe", /obj/item/weapon/pickaxe/diamond, 2000),
+ )
+
+/datum/data/mining_equipment
+ var/equipment_name = "generic"
+ var/equipment_path = null
+ var/cost = 0
+
+/datum/data/mining_equipment/New(name, path, cost)
+ src.equipment_name = name
+ src.equipment_path = path
+ src.cost = cost
+
+/obj/machinery/power/quantumpad/initialize()
+ . = ..()
+ default_apply_parts()
+
+/obj/machinery/mineral/equipment_vendor/power_change()
+ var/old_stat = stat
+ ..()
+ if(old_stat != stat)
+ update_icon()
+ if(inserted_id && !powered())
+ visible_message("The ID slot indicator light flickers on \the [src] as it spits out a card before powering down.")
+ inserted_id.forceMove(get_turf(src))
+
+/obj/machinery/mineral/equipment_vendor/update_icon()
+ if(panel_open)
+ icon_state = "[initial(icon_state)]-open"
+ else if(powered())
+ icon_state = initial(icon_state)
+ else
+ icon_state = "[initial(icon_state)]-off"
+
+/obj/machinery/mineral/equipment_vendor/attack_hand(mob/user)
+ if(..())
+ return
+ interact(user)
+
+/obj/machinery/mineral/equipment_vendor/attack_ghost(mob/user)
+ interact(user)
+
+/obj/machinery/mineral/equipment_vendor/interact(mob/user)
+ user.set_machine(src)
+
+ var/dat
+ dat +=""
+ if(istype(inserted_id))
+ dat += "You have [inserted_id.mining_points] mining points collected.
Eject ID."
+ else
+ dat += "No ID inserted.
Insert ID."
+ dat += "
"
+ dat += "
Equipment point cost list:
"
+ for(var/datum/data/mining_equipment/prize in prize_list)
+ dat += "| [prize.equipment_name] | [prize.cost] | Purchase |
"
+ dat += "
"
+ var/datum/browser/popup = new(user, "miningvendor", "Mining Equipment Vendor", 400, 600)
+ popup.set_content(dat)
+ popup.open()
+
+/obj/machinery/mineral/equipment_vendor/Topic(href, href_list)
+ if(..())
+ return 1
+
+ if(href_list["choice"])
+ if(istype(inserted_id))
+ if(href_list["choice"] == "eject")
+ to_chat(usr, "You eject the ID from [src]'s card slot.")
+ usr.put_in_hands(inserted_id)
+ inserted_id = null
+ else if(href_list["choice"] == "insert")
+ var/obj/item/weapon/card/id/I = usr.get_active_hand()
+ if(istype(I) && !inserted_id && usr.unEquip(I))
+ I.forceMove(src)
+ inserted_id = I
+ interact(usr)
+ to_chat(usr, "You insert the ID into [src]'s card slot.")
+ else
+ to_chat(usr, "No valid ID.")
+ flick(icon_deny, src)
+
+ if(href_list["purchase"])
+ if(istype(inserted_id))
+ var/datum/data/mining_equipment/prize = locate(href_list["purchase"])
+ if (!prize || !(prize in prize_list))
+ to_chat(usr, "Error: Invalid choice!")
+ flick(icon_deny, src)
+ return
+ if(prize.cost > inserted_id.mining_points)
+ to_chat(usr, "Error: Insufficent points for [prize.equipment_name]!")
+ flick(icon_deny, src)
+ else
+ inserted_id.mining_points -= prize.cost
+ to_chat(usr, "[src] clanks to life briefly before vending [prize.equipment_name]!")
+ new prize.equipment_path(drop_location())
+ else
+ to_chat(usr, "Error: Please insert a valid ID!")
+ flick(icon_deny, src)
+ updateUsrDialog()
+
+/obj/machinery/mineral/equipment_vendor/attackby(obj/item/I, mob/user, params)
+ if(default_deconstruction_screwdriver(user, I))
+ updateUsrDialog()
+ return
+ if(default_part_replacement(user, I))
+ return
+ if(default_deconstruction_crowbar(user, I))
+ return
+ if(istype(I, /obj/item/mining_voucher))
+ if(!powered())
+ return
+ RedeemVoucher(I, user)
+ return
+ if(istype(I,/obj/item/weapon/card/id))
+ if(!powered())
+ return
+ else if(!inserted_id && user.unEquip(I))
+ I.forceMove(src)
+ inserted_id = I
+ interact(user)
+ return
+ ..()
+
+/obj/machinery/mineral/equipment_vendor/dismantle()
+ if(inserted_id)
+ inserted_id.forceMove(loc) //Prevents deconstructing the ORM from deleting whatever ID was inside it.
+ . = ..()
+
+/obj/machinery/mineral/equipment_vendor/proc/RedeemVoucher(obj/item/mining_voucher/voucher, mob/redeemer)
+ var/selection = input(redeemer, "Pick your equipment", "Mining Voucher Redemption") as null|anything in list("Kinetic Accelerator", "Resonator", "Mining Drone", "Advanced Scanner", "Crusher")
+ if(!selection || !Adjacent(redeemer) || voucher.loc != redeemer)
+ return
+// var/drop_location = drop_location()
+// switch(selection)
+// if("Kinetic Accelerator")
+// new /obj/item/weapon/gun/energy/kinetic_accelerator(drop_location)
+// if("Resonator")
+// new /obj/item/resonator(drop_location)
+ // if("Mining Drone")
+ // new /obj/item/storage/box/drone_kit(drop_location)
+ // if("Advanced Scanner")
+ // new /obj/item/device/t_scanner/adv_mining_scanner(drop_location)
+ // if("Crusher")
+ // new /obj/item/twohanded/required/mining_hammer(drop_location)
+ qdel(voucher)
+
+/obj/machinery/mineral/equipment_vendor/proc/new_prize(var/name, var/path, var/cost) // Generic proc for adding new entries. Good for abusing for FUN and PROFIT.
+ if(!cost)
+ cost = 100
+ if(!path)
+ path = /obj/item/stack/marker_beacon
+ if(!name)
+ name = "Generic Entry"
+ prize_list += new /datum/data/mining_equipment(name, path, cost)
+
+/obj/machinery/mineral/equipment_vendor/ex_act(severity, target)
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ s.set_up(5, 1, src)
+ s.start()
+ if(prob(50 / severity) && severity < 3)
+ qdel(src)
diff --git a/code/modules/mining/ore_redemption_machine/mine_point_items.dm b/code/modules/mining/ore_redemption_machine/mine_point_items.dm
new file mode 100644
index 0000000000..da4463842a
--- /dev/null
+++ b/code/modules/mining/ore_redemption_machine/mine_point_items.dm
@@ -0,0 +1,33 @@
+/**********************Mining Equipment Locker Items**************************/
+
+/**********************Mining Equipment Voucher**********************/
+
+/obj/item/mining_voucher
+ name = "mining voucher"
+ desc = "A token to redeem a piece of equipment. Use it on a mining equipment vendor."
+ icon = 'icons/obj/mining.dmi'
+ icon_state = "mining_voucher"
+ w_class = ITEMSIZE_TINY
+
+/**********************Mining Point Card**********************/
+
+/obj/item/weapon/card/mining_point_card
+ name = "mining point card"
+ desc = "A small card preloaded with mining points. Swipe your ID card over it to transfer the points, then discard."
+ icon_state = "data"
+ var/points = 500
+
+/obj/item/weapon/card/mining_point_card/attackby(obj/item/I, mob/user, params)
+ if(istype(I, /obj/item/weapon/card/id))
+ if(points)
+ var/obj/item/weapon/card/id/C = I
+ C.mining_points += points
+ to_chat(user, "You transfer [points] points to [C].")
+ points = 0
+ else
+ to_chat(user, "There's no points left on [src].")
+ ..()
+
+/obj/item/weapon/card/mining_point_card/examine(mob/user)
+ ..(user)
+ to_chat(user, "There's [points] points on the card.")
diff --git a/code/modules/mining/resonator.dm b/code/modules/mining/resonator.dm
new file mode 100644
index 0000000000..1e96dc775b
--- /dev/null
+++ b/code/modules/mining/resonator.dm
@@ -0,0 +1,107 @@
+/**********************Resonator**********************/
+
+/obj/item/resonator
+ name = "resonator"
+ icon = 'icons/obj/mining.dmi'
+ icon_state = "resonator"
+ item_state = "resonator"
+ origin_tech = list(TECH_MAGNET = 3, TECH_ENGINEERING = 3)
+ desc = "A handheld device that creates small fields of energy that resonate until they detonate, crushing rock. It can also be activated without a target to create a field at the user's location, to act as a delayed time trap. It's more effective in low temperature."
+ w_class = ITEMSIZE_NORMAL
+ force = 8
+ throwforce = 10
+ var/cooldown = 0
+ var/fieldsactive = 0
+ var/burst_time = 50
+ var/fieldlimit = 3
+
+/obj/item/resonator/upgraded
+ name = "upgraded resonator"
+ desc = "An upgraded version of the resonator that can produce more fields at once."
+ icon_state = "resonator_u"
+ origin_tech = list(TECH_MATERIAL = 4, TECH_POWER = 3, TECH_MAGNET = 3, TECH_ENGINEERING = 3)
+ fieldlimit = 5
+
+/obj/item/resonator/proc/CreateResonance(var/target, var/creator)
+ var/turf/T = get_turf(target)
+ if(locate(/obj/effect/resonance) in T)
+ return
+ if(fieldsactive < fieldlimit)
+ playsound(src,'sound/weapons/resonator_fire.ogg',50,1)
+ new /obj/effect/resonance(T, creator, burst_time)
+ fieldsactive++
+ spawn(burst_time)
+ fieldsactive--
+
+/obj/item/resonator/attack_self(mob/user)
+ if(burst_time == 50)
+ burst_time = 30
+ to_chat(user, "You set the resonator's fields to detonate after 3 seconds.")
+ else
+ burst_time = 50
+ to_chat(user, "You set the resonator's fields to detonate after 5 seconds.")
+
+/obj/item/resonator/afterattack(atom/target, mob/user, proximity_flag)
+ if(proximity_flag)
+ if(!check_allowed_items(target, 1))
+ return
+ CreateResonance(target, user)
+
+/obj/effect/resonance
+ name = "resonance field"
+ desc = "A resonating field that significantly damages anything inside of it when the field eventually ruptures."
+ icon = 'icons/effects/effects.dmi'
+ icon_state = "shield1"
+ plane = MOB_PLANE
+ layer = ABOVE_MOB_LAYER
+ mouse_opacity = 0
+ var/resonance_damage = 20
+
+/obj/effect/resonance/initialize(mapload, var/creator = null, var/timetoburst)
+ . = ..()
+ // Start small and grow to big size as we are about to burst
+ transform = matrix()*0.75
+ animate(src, transform = matrix()*1.5, time = timetoburst)
+ // Queue the actual bursting
+ spawn(timetoburst)
+ if(!QDELETED(src))
+ burst(creator)
+
+/obj/effect/resonance/proc/burst(var/creator = null)
+ var/turf/T = get_turf(src)
+ if(!T)
+ return
+ playsound(src, 'sound/weapons/resonator_blast.ogg', 50, 1)
+ // Make the collapsing effect
+ new /obj/effect/temp_visual/resonance_crush(T)
+
+ // Mineral turfs get drilled!
+ if(istype(T, /turf/simulated/mineral))
+ var/turf/simulated/mineral/M = T
+ M.GetDrilled()
+ qdel(src)
+ return
+ // Otherwise we damage mobs! Boost damage if low tempreature
+ var/datum/gas_mixture/environment = T.return_air()
+ if(environment.temperature < 250)
+ name = "strong resonance field"
+ resonance_damage = 50
+
+ for(var/mob/living/L in src.loc)
+ if(creator)
+ add_attack_logs(creator, L, "used a resonator field on")
+ to_chat(L, "\The [src] ruptured with you in it!")
+ L.apply_damage(resonance_damage, BRUTE)
+ qdel(src)
+
+
+/obj/effect/temp_visual/resonance_crush
+ icon_state = "shield1"
+ plane = MOB_PLANE
+ layer = ABOVE_MOB_LAYER
+ duration = 4
+
+/obj/effect/temp_visual/resonance_crush/initialize()
+ . = ..()
+ transform = matrix()*1.5
+ animate(src, transform = matrix()*0.1, alpha = 50, time = 4)
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 710bdd12a3..2f3b0646de 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -156,6 +156,7 @@ Works together with spawning an observer, noted above.
if(!client) return 0
handle_regular_hud_updates()
+ handle_vision()
/mob/proc/ghostize(var/can_reenter_corpse = 1)
if(key)
diff --git a/code/modules/mob/death.dm b/code/modules/mob/death.dm
index 49355a1ce5..dfd6846846 100644
--- a/code/modules/mob/death.dm
+++ b/code/modules/mob/death.dm
@@ -103,6 +103,7 @@
updateicon()
handle_regular_hud_updates()
+ handle_vision()
if(ticker && ticker.mode)
ticker.mode.check_win()
diff --git a/code/modules/mob/living/bot/cleanbot.dm b/code/modules/mob/living/bot/cleanbot.dm
index 241993423d..eb2371c329 100644
--- a/code/modules/mob/living/bot/cleanbot.dm
+++ b/code/modules/mob/living/bot/cleanbot.dm
@@ -3,7 +3,7 @@
desc = "A little cleaning robot, it looks so excited!"
icon_state = "cleanbot0"
req_one_access = list(access_robotics, access_janitor)
- botcard_access = list(access_janitor, access_maint_tunnels)
+ botcard_access = list(access_janitor)
locked = 0 // Start unlocked so roboticist can set them to patrol.
wait_if_pulled = 1
diff --git a/code/modules/mob/living/carbon/human/descriptors/_descriptors.dm b/code/modules/mob/living/carbon/human/descriptors/_descriptors.dm
index 95b97f2707..02e57ec3b8 100644
--- a/code/modules/mob/living/carbon/human/descriptors/_descriptors.dm
+++ b/code/modules/mob/living/carbon/human/descriptors/_descriptors.dm
@@ -38,7 +38,8 @@
..()
/datum/mob_descriptor/proc/get_third_person_message_start(var/datum/gender/my_gender)
- return "[my_gender.He] [my_gender.is]"
+ return "They are"
+// return "[my_gender.He] [my_gender.is]" // Doesn't respect ambiguous_genders species var, can't figure out a fix at the moment
/datum/mob_descriptor/proc/get_first_person_message_start()
return "You are"
@@ -105,3 +106,4 @@
var/maxval = LAZYLEN(comparative_value_descriptors_larger)
value = Clamp(ceil(value * maxval), 1, maxval)
return comparative_value_descriptors_larger[value]
+
diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm
index b81f009878..d1ba1f9755 100644
--- a/code/modules/mob/living/carbon/human/emote.dm
+++ b/code/modules/mob/living/carbon/human/emote.dm
@@ -727,7 +727,7 @@
src << "blink, blink_r, blush, bow-(none)/mob, burp, choke, chuckle, clap, collapse, cough, cry, custom, deathgasp, drool, eyebrow, fastsway/qwag, \
frown, gasp, giggle, glare-(none)/mob, grin, groan, grumble, handshake, hug-(none)/mob, laugh, look-(none)/mob, moan, mumble, nod, pale, point-atom, \
raise, salute, scream, sneeze, shake, shiver, shrug, sigh, signal-#1-10, slap-(none)/mob, smile, sneeze, sniff, snore, stare-(none)/mob, stopsway/swag, sway/wag, swish, tremble, twitch, \
- twitch_v, vomit, whimper, wink, yawn. Synthetics: beep, buzz, yes, no, rcough, rsneeze, ping"
+ twitch_v, vomit, whimper, wink, yawn. Synthetics: beep, buzz, yess, no, rcough, rsneeze, ping"
else
src << "Unusable emote '[act]'. Say *help for a list."
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index f5d3e98cc1..08e6254421 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -421,15 +421,16 @@
msg += "*---------*
"
msg += applying_pressure
- if(pose)
- if(!findtext(pose, regex("\[.?!]$"))) // Will be zero if the last character is not a member of [.?!]
- pose = addtext(pose,".") //Makes sure all emotes end with a period.
- msg += "[T.He] [pose]"
var/show_descs = show_descriptors_to(user)
if(show_descs)
msg += "[jointext(show_descs, "
")]"
+ if(pose)
+ if(!findtext(pose, regex("\[.?!]$"))) // Will be zero if the last character is not a member of [.?!]
+ pose = addtext(pose,".") //Makes sure all emotes end with a period.
+ msg += "
[T.He] [pose]"
+
to_chat(user, jointext(msg, null))
//Helper procedure. Called by /mob/living/carbon/human/examine() and /mob/living/carbon/human/Topic() to determine HUD access to security and medical records.
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 1044f0324d..668c468524 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -1066,38 +1066,41 @@
var/obj/machinery/camera/cam = client.eye
client.screen |= cam.client_huds
- if(stat != DEAD)
- if(stat == UNCONSCIOUS && health <= 0)
- //Critical damage passage overlay
+ if(stat == DEAD) //Dead
+ if(!druggy) see_invisible = SEE_INVISIBLE_LEVEL_TWO
+ if(healths) healths.icon_state = "health7" //DEAD healthmeter
+
+ else if(stat == UNCONSCIOUS && health <= 0) //Crit
+ //Critical damage passage overlay
+ var/severity = 0
+ switch(health)
+ if(-20 to -10) severity = 1
+ if(-30 to -20) severity = 2
+ if(-40 to -30) severity = 3
+ if(-50 to -40) severity = 4
+ if(-60 to -50) severity = 5
+ if(-70 to -60) severity = 6
+ if(-80 to -70) severity = 7
+ if(-90 to -80) severity = 8
+ if(-95 to -90) severity = 9
+ if(-INFINITY to -95) severity = 10
+ overlay_fullscreen("crit", /obj/screen/fullscreen/crit, severity)
+ else //Alive
+ clear_fullscreen("crit")
+ //Oxygen damage overlay
+ if(oxyloss)
var/severity = 0
- switch(health)
- if(-20 to -10) severity = 1
- if(-30 to -20) severity = 2
- if(-40 to -30) severity = 3
- if(-50 to -40) severity = 4
- if(-60 to -50) severity = 5
- if(-70 to -60) severity = 6
- if(-80 to -70) severity = 7
- if(-90 to -80) severity = 8
- if(-95 to -90) severity = 9
- if(-INFINITY to -95) severity = 10
- overlay_fullscreen("crit", /obj/screen/fullscreen/crit, severity)
+ switch(oxyloss)
+ if(10 to 20) severity = 1
+ if(20 to 25) severity = 2
+ if(25 to 30) severity = 3
+ if(30 to 35) severity = 4
+ if(35 to 40) severity = 5
+ if(40 to 45) severity = 6
+ if(45 to INFINITY) severity = 7
+ overlay_fullscreen("oxy", /obj/screen/fullscreen/oxy, severity)
else
- clear_fullscreen("crit")
- //Oxygen damage overlay
- if(oxyloss)
- var/severity = 0
- switch(oxyloss)
- if(10 to 20) severity = 1
- if(20 to 25) severity = 2
- if(25 to 30) severity = 3
- if(30 to 35) severity = 4
- if(35 to 40) severity = 5
- if(40 to 45) severity = 6
- if(45 to INFINITY) severity = 7
- overlay_fullscreen("oxy", /obj/screen/fullscreen/oxy, severity)
- else
- clear_fullscreen("oxy")
+ clear_fullscreen("oxy")
//Fire and Brute damage overlay (BSSR)
var/hurtdamage = src.getShockBruteLoss() + src.getShockFireLoss() + damageoverlaytemp //Doesn't call the overlay if you can't actually feel it
@@ -1115,66 +1118,6 @@
else
clear_fullscreen("brute")
- if( stat == DEAD )
- sight |= SEE_TURFS|SEE_MOBS|SEE_OBJS|SEE_SELF
- see_in_dark = 8
- if(!druggy) see_invisible = SEE_INVISIBLE_LEVEL_TWO
- if(healths) healths.icon_state = "health7" //DEAD healthmeter
- if(client)
- if(client.view != world.view) // If mob dies while zoomed in with device, unzoom them.
- for(var/obj/item/item in contents)
- if(item.zoom)
- item.zoom()
- break
-
- else
- sight &= ~(SEE_TURFS|SEE_MOBS|SEE_OBJS)
- see_invisible = see_in_dark>2 ? SEE_INVISIBLE_LEVEL_ONE : see_invisible_default
-
- if(XRAY in mutations)
- sight |= SEE_TURFS|SEE_MOBS|SEE_OBJS
- see_in_dark = 8
- if(!druggy) see_invisible = SEE_INVISIBLE_LEVEL_TWO
-
- if(seer==1)
- var/obj/effect/rune/R = locate() in loc
- if(R && R.word1 == cultwords["see"] && R.word2 == cultwords["hell"] && R.word3 == cultwords["join"])
- see_invisible = SEE_INVISIBLE_CULT
- else
- see_invisible = see_invisible_default
- seer = 0
-
- if(!seedarkness)
- sight = species.get_vision_flags(src)
- see_in_dark = 8
- see_invisible = SEE_INVISIBLE_NOLIGHTING
-
- else
- sight = species.get_vision_flags(src)
- see_in_dark = species.darksight
- see_invisible = see_in_dark>2 ? SEE_INVISIBLE_LEVEL_ONE : see_invisible_default
-
- var/tmp/glasses_processed = 0
- var/obj/item/weapon/rig/rig = back
- if(istype(rig) && rig.visor)
- if(!rig.helmet || (head && rig.helmet == head))
- if(rig.visor && rig.visor.vision && rig.visor.active && rig.visor.vision.glasses)
- glasses_processed = 1
- process_glasses(rig.visor.vision.glasses)
-
- if(glasses && !glasses_processed)
- glasses_processed = 1
- process_glasses(glasses)
- if(XRAY in mutations)
- sight |= SEE_TURFS|SEE_MOBS|SEE_OBJS
- see_in_dark = 8
- if(!druggy) see_invisible = SEE_INVISIBLE_LEVEL_TWO
-
- if(!glasses_processed && (species.get_vision_flags(src) > 0))
- sight |= species.get_vision_flags(src)
- if(!seer && !glasses_processed && seedarkness)
- see_invisible = see_invisible_default
-
if(healths)
if (chem_effects[CE_PAINKILLER] > 100)
healths.icon_state = "health_numb"
@@ -1320,11 +1263,70 @@
if(found_welder)
client.screen |= global_hud.darkMask
+/mob/living/carbon/human/handle_vision()
+ if(stat == DEAD)
+ sight |= SEE_TURFS|SEE_MOBS|SEE_OBJS|SEE_SELF
+ see_in_dark = 8
+ if(client)
+ if(client.view != world.view) // If mob dies while zoomed in with device, unzoom them.
+ for(var/obj/item/item in contents)
+ if(item.zoom)
+ item.zoom()
+ break
+
+ else //We aren't dead
+ sight &= ~(SEE_TURFS|SEE_MOBS|SEE_OBJS)
+ see_invisible = see_in_dark>2 ? SEE_INVISIBLE_LEVEL_ONE : see_invisible_default
+
+ if(XRAY in mutations)
+ sight |= SEE_TURFS|SEE_MOBS|SEE_OBJS
+ see_in_dark = 8
+ if(!druggy) see_invisible = SEE_INVISIBLE_LEVEL_TWO
+
+ if(seer==1)
+ var/obj/effect/rune/R = locate() in loc
+ if(R && R.word1 == cultwords["see"] && R.word2 == cultwords["hell"] && R.word3 == cultwords["join"])
+ see_invisible = SEE_INVISIBLE_CULT
+ else
+ see_invisible = see_invisible_default
+ seer = 0
+
+ if(!seedarkness)
+ sight = species.get_vision_flags(src)
+ see_in_dark = 8
+ see_invisible = SEE_INVISIBLE_NOLIGHTING
+
+ else
+ sight = species.get_vision_flags(src)
+ see_in_dark = species.darksight
+ see_invisible = see_in_dark>2 ? SEE_INVISIBLE_LEVEL_ONE : see_invisible_default
+
+ var/tmp/glasses_processed = 0
+ var/obj/item/weapon/rig/rig = back
+ if(istype(rig) && rig.visor && !looking_elsewhere)
+ if(!rig.helmet || (head && rig.helmet == head))
+ if(rig.visor && rig.visor.vision && rig.visor.active && rig.visor.vision.glasses)
+ glasses_processed = 1
+ process_glasses(rig.visor.vision.glasses)
+
+ if(glasses && !glasses_processed && !looking_elsewhere)
+ glasses_processed = 1
+ process_glasses(glasses)
+ if(XRAY in mutations)
+ sight |= SEE_TURFS|SEE_MOBS|SEE_OBJS
+ see_in_dark = 8
+ if(!druggy) see_invisible = SEE_INVISIBLE_LEVEL_TWO
+
+ if(!glasses_processed && (species.get_vision_flags(src) > 0))
+ sight |= species.get_vision_flags(src)
+ if(!seer && !glasses_processed && seedarkness)
+ see_invisible = see_invisible_default
+
if(machine)
var/viewflags = machine.check_eye(src)
if(viewflags < 0)
reset_view(null, 0)
- else if(viewflags)
+ else if(viewflags && !looking_elsewhere)
sight |= viewflags
else if(eyeobj)
if(eyeobj.owner != src)
diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm
index b5878e41ef..c8e3129fcf 100644
--- a/code/modules/mob/living/carbon/human/species/species.dm
+++ b/code/modules/mob/living/carbon/human/species/species.dm
@@ -237,6 +237,7 @@
var/list/descriptor_datums = list()
for(var/desctype in descriptors)
var/datum/mob_descriptor/descriptor = new desctype
+ descriptor.comparison_offset = descriptors[desctype]
descriptor_datums[descriptor.name] = descriptor
descriptors = descriptor_datums
diff --git a/code/modules/mob/living/carbon/human/species/station/seromi.dm b/code/modules/mob/living/carbon/human/species/station/seromi.dm
index 81deb462a6..448be1af19 100644
--- a/code/modules/mob/living/carbon/human/species/station/seromi.dm
+++ b/code/modules/mob/living/carbon/human/species/station/seromi.dm
@@ -43,6 +43,7 @@
slowdown = -1
snow_movement = -2 // Ignores light snow
+ item_slowdown_mod = 2 // Tiny birds don't like heavy things
total_health = 50
brute_mod = 1.35
burn_mod = 1.35
@@ -122,6 +123,11 @@
/mob/living/proc/hide
)
+ descriptors = list(
+ /datum/mob_descriptor/height = -3,
+ /datum/mob_descriptor/build = -3
+ )
+
/datum/species/teshari/equip_survival_gear(var/mob/living/carbon/human/H)
..()
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H),slot_shoes)
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/species/station/station.dm b/code/modules/mob/living/carbon/human/species/station/station.dm
index 09491f9fbb..1434f9c197 100644
--- a/code/modules/mob/living/carbon/human/species/station/station.dm
+++ b/code/modules/mob/living/carbon/human/species/station/station.dm
@@ -47,7 +47,7 @@
brute_mod = 0.85
burn_mod = 0.85
metabolic_rate = 0.85
- item_slowdown_mod = 0.5
+ item_slowdown_mod = 0.25
mob_size = MOB_LARGE
blood_volume = 840
bloodloss_rate = 0.75
@@ -324,7 +324,7 @@
siemens_coefficient = 0.3
show_ssd = "completely quiescent"
health_hud_intensity = 2.5
- item_slowdown_mod = 0.25
+ item_slowdown_mod = 0.1
num_alternate_languages = 2
name_language = LANGUAGE_ROOTLOCAL
diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm
index 4f3d359256..cf08e5a9ed 100644
--- a/code/modules/mob/living/life.dm
+++ b/code/modules/mob/living/life.dm
@@ -61,6 +61,8 @@
handle_regular_hud_updates()
+ handle_vision()
+
/mob/living/proc/handle_breathing()
return
@@ -178,9 +180,6 @@
return 1
-/mob/living/proc/handle_vision()
- return
-
/mob/living/proc/update_sight()
if(!seedarkness)
see_invisible = SEE_INVISIBLE_NOLIGHTING
diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm
index e3b510e244..318eef4c19 100644
--- a/code/modules/mob/living/living_defines.dm
+++ b/code/modules/mob/living/living_defines.dm
@@ -64,4 +64,7 @@
var/list/hud_list //Holder for health hud, status hud, wanted hud, etc (not like inventory slots)
var/has_huds = FALSE //Whether or not we should bother initializing the above list
- var/makes_dirt = TRUE //FALSE if the mob shouldn't be making dirt on the ground when it walks
\ No newline at end of file
+ var/makes_dirt = TRUE //FALSE if the mob shouldn't be making dirt on the ground when it walks
+
+ var/looking_elsewhere = FALSE //If the mob's view has been relocated to somewhere else, like via a camera or with binocs
+
\ No newline at end of file
diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm
index c8e7dfdada..92d15f7338 100644
--- a/code/modules/mob/living/silicon/ai/life.dm
+++ b/code/modules/mob/living/silicon/ai/life.dm
@@ -152,6 +152,7 @@
process_queued_alarms()
handle_regular_hud_updates()
+ handle_vision()
/mob/living/silicon/ai/proc/lacks_power()
if(APU_power)
diff --git a/code/modules/mob/living/silicon/pai/life.dm b/code/modules/mob/living/silicon/pai/life.dm
index f483921b81..74fad44fb3 100644
--- a/code/modules/mob/living/silicon/pai/life.dm
+++ b/code/modules/mob/living/silicon/pai/life.dm
@@ -14,6 +14,7 @@
src.cable = null
handle_regular_hud_updates()
+ handle_vision()
if(silence_time)
if(world.timeofday >= silence_time)
diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm
index 349432e3d2..e0814d7687 100644
--- a/code/modules/mob/living/silicon/robot/life.dm
+++ b/code/modules/mob/living/silicon/robot/life.dm
@@ -18,6 +18,7 @@
if(client)
handle_regular_hud_updates()
+ handle_vision()
update_items()
if (src.stat != DEAD) //still using power
use_power()
diff --git a/code/modules/mob/living/simple_animal/aliens/statue.dm b/code/modules/mob/living/simple_animal/aliens/statue.dm
index f468403a30..f80181bdb0 100644
--- a/code/modules/mob/living/simple_animal/aliens/statue.dm
+++ b/code/modules/mob/living/simple_animal/aliens/statue.dm
@@ -22,8 +22,8 @@
environment_smash = 2
can_be_antagged = 1
speed = -1
- maxHealth = 50000
- health = 50000
+ maxHealth = 3000
+ health = 3000
status_flags = CANPUSH
// investigates = 1
a_intent = I_HURT
@@ -58,12 +58,23 @@
melee_miss_chance = 0
+ armor = list(
+ "melee" = 30,
+ "bullet" = 60,
+ "laser" = 80,
+ "energy" = 30,
+ "bomb" = 30,
+ "bio" = 100,
+ "rad" = 100)
+
+ resistance = 20
see_invisible = SEE_INVISIBLE_NOLIGHTING
sight = SEE_SELF|SEE_MOBS|SEE_OBJS|SEE_TURFS
var/last_hit = 0
var/cannot_be_seen = 1
var/mob/living/creator = null
+ var/drilled = FALSE
// No movement while seen code.
@@ -92,9 +103,20 @@
else
visible_message("[src] is too strong to be banished!")
Paralyse(rand(8,15))
+ if(istype(O, /obj/item/weapon/pickaxe) || istype(O, /obj/item/weapon/pickaxe/plasmacutter) && !drilled)
+ drilled = TRUE
+ resistance = 0
+ spawn(300)
+ drilled = FALSE
+ resistance = initial(resistance)
+ ..()
/mob/living/simple_animal/hostile/statue/death()
- new /obj/item/stack/material/marble(loc)
+ var/chunks_to_spawn = rand(2,5)
+ for(var/I = 1 to chunks_to_spawn)
+ new /obj/item/stack/material/marble(get_turf(loc))
+ new /obj/item/cursed_marble(get_turf(loc))
+ ..()
/mob/living/simple_animal/hostile/statue/Move(turf/NewLoc)
if(can_be_seen(NewLoc))
@@ -110,6 +132,8 @@
if(target_mob) //if there's a victim, statue will use its powers
if((annoyance + 4) < 800)
annoyance += 4
+ if(drilled && (annoyance + 4) < 800) //Being hit with a drill makes them weaker, and angrier.
+ annoyance += 4
else if ((annoyance - 2) > 0)
annoyance -= 2
@@ -368,20 +392,20 @@
to_chat(user, "You rub the slab in hopes a wandering spirit wishes to inhabit it. [src] starts to sparkle!")
icon_state = "sheet-snowbrick"
searching = 1
- request_player()
+ request_player(user)
spawn(60 SECONDS)
reset_search()
-/obj/item/cursed_marble/proc/request_player()
+/obj/item/cursed_marble/proc/request_player(var/mob/user)
for(var/mob/observer/dead/O in player_list)
if(!O.MayRespawn())
continue
if(O.client)
if(O.client.prefs.be_special & BE_ALIEN)
- question(O.client)
+ question(O.client, user)
-/obj/item/cursed_marble/proc/question(var/client/C)
+/obj/item/cursed_marble/proc/question(var/client/C, var/mob/user)
spawn(0)
if(!C)
return
@@ -391,7 +415,7 @@
if(!C || 2 == searching)
return //handle logouts that happen whilst the alert is waiting for a response, and responses issued after a brain has been located.
if(response == "Yes")
- transfer_personality(C.mob)
+ transfer_personality(C.mob, user)
else if(response == "Never for this round")
C.prefs.be_special ^= BE_ALIEN
@@ -403,12 +427,14 @@
for (var/mob/M in viewers(T))
M.show_message("[src] fades. Maybe it will spark another time.")
-/obj/item/cursed_marble/proc/transfer_personality(var/mob/candidate)
+/obj/item/cursed_marble/proc/transfer_personality(var/mob/candidate, var/mob/user)
announce_ghost_joinleave(candidate, 0, "They are a statue now.")
src.searching = 2
var/mob/living/simple_animal/hostile/statue/S = new(get_turf(src))
S.client = candidate.client
- to_chat(S, "You are \a [S], brought into existence on [station_name()] by [usr]! Obey all their orders.")
+ if(user)
+ S.creator = user
+ to_chat(S, "You are \a [S], brought into existence on [station_name()] by [user]! Obey all their orders.")
S.mind.assigned_role = "The Statue"
visible_message("The slab suddenly takes the shape of a humanoid!")
qdel(src)
diff --git a/code/modules/mob/living/simple_animal/humanoids/kobold.dm b/code/modules/mob/living/simple_animal/humanoids/kobold.dm
deleted file mode 100644
index 7355fce470..0000000000
--- a/code/modules/mob/living/simple_animal/humanoids/kobold.dm
+++ /dev/null
@@ -1,43 +0,0 @@
-//kobold
-/mob/living/simple_animal/kobold
- name = "kobold"
- desc = "A small, rat-like creature."
- icon = 'icons/mob/mob.dmi'
- icon_state = "kobold_idle"
- icon_living = "kobold_idle"
- icon_dead = "kobold_dead"
- intelligence_level = SA_HUMANOID
-
- run_at_them = 0
- cooperative = 1
-
- turns_per_move = 5
- see_in_dark = 6
-
- response_help = "pets"
- response_disarm = "gently pushes aside"
- response_harm = "kicks"
-
- min_oxy = 16 //Require atleast 16kPA oxygen
- minbodytemp = 223 //Below -50 Degrees Celcius
- maxbodytemp = 323 //Above 50 Degrees Celcius
-
- speak_chance = 5
- speak = list("You no take candle!","Ooh, pretty shiny.","Me take?","Where gold here...","Me likey.")
- speak_emote = list("mutters","hisses","grumbles")
- emote_hear = list("mutters under it's breath.","grumbles.", "yips!")
- emote_see = list("looks around suspiciously.", "scratches it's arm.","putters around a bit.")
-
- meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat/monkey
-
-/mob/living/simple_animal/kobold/Life()
- . = ..()
- if(!.) return
-
- if(prob(5))
- flick("kobold_act",src)
-
-/mob/living/simple_animal/kobold/Move(var/dir)
- ..()
- if(!stat)
- flick("kobold_walk",src)
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index 66f7c90d7e..2cf070f713 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -380,7 +380,7 @@
//Resisting out of closets
if(istype(loc,/obj/structure/closet))
var/obj/structure/closet/C = loc
- if(C.welded)
+ if(C.sealed)
handle_resist()
else
C.open()
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 3fbe62a1be..1e8cad5184 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -695,7 +695,10 @@
stat(null)
for(var/datum/controller/subsystem/SS in Master.subsystems)
SS.stat_entry()
-
+
+ if(statpanel("Tickets"))
+ GLOB.ahelp_tickets.stat_entry()
+
if(listed_turf && client)
if(!TurfAdjacent(listed_turf))
listed_turf = null
diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm
index b5cc72fd19..897f7c58c9 100644
--- a/code/modules/mob/mob_grab.dm
+++ b/code/modules/mob/mob_grab.dm
@@ -75,7 +75,7 @@
if(affecting.buckled)
return null
if(state >= GRAB_AGGRESSIVE)
- animate(affecting, pixel_x = 0, pixel_y = 0, 4, 1)
+ animate(affecting, pixel_x = initial(affecting.pixel_x), pixel_y = initial(affecting.pixel_y), 4, 1)
return affecting
return null
@@ -184,10 +184,10 @@
qdel(src)
return
if(affecting.buckled)
- animate(affecting, pixel_x = 0, pixel_y = 0, 4, 1, LINEAR_EASING)
+ animate(affecting, pixel_x = initial(affecting.pixel_x), pixel_y = initial(affecting.pixel_y), 4, 1, LINEAR_EASING)
return
if(affecting.lying && state != GRAB_KILL)
- animate(affecting, pixel_x = 0, pixel_y = 0, 5, 1, LINEAR_EASING)
+ animate(affecting, pixel_x = initial(affecting.pixel_x), pixel_y = initial(affecting.pixel_y), 5, 1, LINEAR_EASING)
if(force_down)
affecting.set_dir(SOUTH) //face up
return
@@ -215,14 +215,14 @@
switch(adir)
if(NORTH)
- animate(affecting, pixel_x = 0, pixel_y =-shift, 5, 1, LINEAR_EASING)
+ animate(affecting, pixel_x = initial(affecting.pixel_x), pixel_y =-shift, 5, 1, LINEAR_EASING)
affecting.layer = BELOW_MOB_LAYER
if(SOUTH)
- animate(affecting, pixel_x = 0, pixel_y = shift, 5, 1, LINEAR_EASING)
+ animate(affecting, pixel_x = initial(affecting.pixel_x), pixel_y = shift, 5, 1, LINEAR_EASING)
if(WEST)
- animate(affecting, pixel_x = shift, pixel_y = 0, 5, 1, LINEAR_EASING)
+ animate(affecting, pixel_x = shift, pixel_y = initial(affecting.pixel_y), 5, 1, LINEAR_EASING)
if(EAST)
- animate(affecting, pixel_x =-shift, pixel_y = 0, 5, 1, LINEAR_EASING)
+ animate(affecting, pixel_x =-shift, pixel_y = initial(affecting.pixel_y), 5, 1, LINEAR_EASING)
/obj/item/weapon/grab/proc/s_click(obj/screen/S)
if(QDELETED(src))
@@ -394,7 +394,7 @@
return mob_size_difference(A.mob_size, B.mob_size)
/obj/item/weapon/grab/Destroy()
- animate(affecting, pixel_x = 0, pixel_y = 0, 4, 1, LINEAR_EASING)
+ animate(affecting, pixel_x = initial(affecting.pixel_x), pixel_y = initial(affecting.pixel_y), 4, 1, LINEAR_EASING)
affecting.reset_plane_and_layer()
if(affecting)
affecting.grabbed_by -= src
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index 4809878edb..a0b63a1173 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -622,6 +622,10 @@ var/list/global/organ_rel_size = list(
/mob/proc/handle_regular_hud_updates()
return
+//Handle eye things like the Byond SEE_TURFS, SEE_OBJS, etc.
+/mob/proc/handle_vision()
+ return
+
//Icon is used to occlude things like huds from the faulty byond context menu.
// http://www.byond.com/forum/?post=2336679
var/global/image/backplane
diff --git a/code/modules/organs/blood.dm b/code/modules/organs/blood.dm
index 50c326277d..8feab6dfbd 100644
--- a/code/modules/organs/blood.dm
+++ b/code/modules/organs/blood.dm
@@ -160,17 +160,17 @@ var/const/CE_STABLE_THRESHOLD = 0.5
for(var/datum/wound/W in temp.wounds)
if(W.bleeding())
if(W.damage_type == PIERCE) //gunshots and spear stabs bleed more
- blood_loss_divisor -= 5
+ blood_loss_divisor = max(blood_loss_divisor - 5, 1)
else if(W.damage_type == BRUISE) //bruises bleed less
- blood_loss_divisor += 5
+ blood_loss_divisor = max(blood_loss_divisor + 5, 1)
//the farther you get from those vital regions, the less you bleed
//depending on how dangerous bleeding turns out to be, it might be better to only apply the reduction to hands and feet
if((temp.organ_tag == BP_L_ARM) || (temp.organ_tag == BP_R_ARM) || (temp.organ_tag == BP_L_LEG) || (temp.organ_tag == BP_R_LEG))
- blood_loss_divisor += 5
+ blood_loss_divisor = max(blood_loss_divisor + 5, 1)
else if((temp.organ_tag == BP_L_HAND) || (temp.organ_tag == BP_R_HAND) || (temp.organ_tag == BP_L_FOOT) || (temp.organ_tag == BP_R_FOOT))
- blood_loss_divisor += 10
+ blood_loss_divisor = max(blood_loss_divisor + 10, 1)
if(CE_STABLE in chem_effects) //Inaprov slows bloodloss
- blood_loss_divisor += 10
+ blood_loss_divisor = max(blood_loss_divisor + 10, 1)
if(temp.applied_pressure)
if(ishuman(temp.applied_pressure))
var/mob/living/carbon/human/H = temp.applied_pressure
@@ -198,6 +198,9 @@ var/const/CE_STABLE_THRESHOLD = 0.5
if(!amt)
return 0
+ if(amt > vessel.get_reagent_amount("blood"))
+ amt = vessel.get_reagent_amount("blood") - 1 // Bit of a safety net; it's impossible to add blood if there's not blood already in the vessel.
+
return vessel.remove_reagent("blood",amt * (src.mob_size/MOB_MEDIUM))
/****************************************************
@@ -208,7 +211,8 @@ var/const/CE_STABLE_THRESHOLD = 0.5
/mob/living/carbon/proc/take_blood(obj/item/weapon/reagent_containers/container, var/amount)
var/datum/reagent/B = get_blood(container.reagents)
- if(!B) B = new /datum/reagent/blood
+ if(!B)
+ B = new /datum/reagent/blood
B.holder = container
B.volume += amount
diff --git a/code/modules/paperwork/faxmachine.dm b/code/modules/paperwork/faxmachine.dm
index a2b72cd2b4..a5960612f4 100644
--- a/code/modules/paperwork/faxmachine.dm
+++ b/code/modules/paperwork/faxmachine.dm
@@ -78,6 +78,9 @@ var/list/adminfaxes = list() //cache for faxes that have been sent to admins
else if(href_list["remove"])
if(copyitem)
+ if(get_dist(usr, src) >= 2)
+ to_chat(usr, "\The [copyitem] is too far away for you to remove it.")
+ return
copyitem.loc = usr.loc
usr.put_in_hands(copyitem)
to_chat(usr, "You take \the [copyitem] out of \the [src].")
diff --git a/code/modules/planet/sif.dm b/code/modules/planet/sif.dm
index 6ec5a9dfe4..740cd36b77 100644
--- a/code/modules/planet/sif.dm
+++ b/code/modules/planet/sif.dm
@@ -279,13 +279,13 @@ var/datum/planet/sif/planet_sif = null
var/obj/item/weapon/melee/umbrella/U = L.get_active_hand()
if(U.open)
if(show_message)
- to_chat(L, "Rain patters softly onto your umbrella")
+ to_chat(L, "Rain patters softly onto your umbrella.")
continue
else if(istype(L.get_inactive_hand(), /obj/item/weapon/melee/umbrella))
var/obj/item/weapon/melee/umbrella/U = L.get_inactive_hand()
if(U.open)
if(show_message)
- to_chat(L, "Rain patters softly onto your umbrella")
+ to_chat(L, "Rain patters softly onto your umbrella.")
continue
L.water_act(1)
@@ -299,6 +299,8 @@ var/datum/planet/sif/planet_sif = null
temp_low = 233.15 // -40c
light_modifier = 0.3
flight_failure_modifier = 10
+ effect_message = "Rain falls on you, drenching you in water."
+
var/next_lightning_strike = 0 // world.time when lightning will strike.
var/min_lightning_cooldown = 5 SECONDS
var/max_lightning_cooldown = 1 MINUTE
@@ -325,22 +327,41 @@ var/datum/planet/sif/planet_sif = null
if(!T.outdoors)
continue // They're indoors, so no need to rain on them.
- // If they have an open umbrella, it'll get stolen by the wind
+ // Lazy wind code
+ if(prob(10))
+ if(istype(L.get_active_hand(), /obj/item/weapon/melee/umbrella))
+ var/obj/item/weapon/melee/umbrella/U = L.get_active_hand()
+ if(U.open)
+ to_chat(L, "You struggle to keep hold of your umbrella!")
+ L.Stun(20) // This is not nearly as long as it seems
+ playsound(L, 'sound/effects/rustle1.ogg', 100, 1) // Closest sound I've got to "Umbrella in the wind"
+ else if(istype(L.get_inactive_hand(), /obj/item/weapon/melee/umbrella))
+ var/obj/item/weapon/melee/umbrella/U = L.get_inactive_hand()
+ if(U.open)
+ to_chat(L, "A gust of wind yanks the umbrella from your hand!")
+ playsound(L, 'sound/effects/rustle1.ogg', 100, 1)
+ L.drop_from_inventory(U)
+ U.toggle_umbrella()
+ U.throw_at(get_edge_target_turf(U, pick(alldirs)), 8, 1, L)
+
+ // If they have an open umbrella, it'll guard from rain
if(istype(L.get_active_hand(), /obj/item/weapon/melee/umbrella))
var/obj/item/weapon/melee/umbrella/U = L.get_active_hand()
if(U.open)
- to_chat(L, "A gust of wind yanks the umbrella from your hand!")
- L.drop_from_inventory(U)
- U.throw_at(get_edge_target_turf(U, pick(alldirs)), 8, 1, L)
+ if(show_message)
+ to_chat(L, "Rain showers loudly onto your umbrella!")
+ continue
else if(istype(L.get_inactive_hand(), /obj/item/weapon/melee/umbrella))
var/obj/item/weapon/melee/umbrella/U = L.get_inactive_hand()
if(U.open)
- to_chat(L, "A gust of wind yanks the umbrella from your hand!")
- L.drop_from_inventory(U)
- U.throw_at(get_edge_target_turf(U, pick(alldirs)), 8, 1, L)
+ if(show_message)
+ to_chat(L, "Rain showers loudly onto your umbrella!")
+ continue
+
L.water_act(2)
- to_chat(L, "Rain falls on you, drenching you in water.")
+ if(show_message)
+ to_chat(L, effect_message)
handle_lightning()
@@ -425,4 +446,4 @@ var/datum/planet/sif/planet_sif = null
observed_message = "Everything is red. Something really wrong is going on."
transition_messages = list(
"The sky turns blood red!"
- )
\ No newline at end of file
+ )
diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm
index 3b208cf629..35a860ec1b 100644
--- a/code/modules/power/port_gen.dm
+++ b/code/modules/power/port_gen.dm
@@ -282,6 +282,7 @@
to_chat(user, "You unsecure the generator from the floor.")
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
anchored = !anchored
+ return
else if(default_deconstruction_screwdriver(user, O))
return
else if(default_deconstruction_crowbar(user, O))
diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm
index 8ac6bfb559..ac4401387a 100644
--- a/code/modules/power/singularity/emitter.dm
+++ b/code/modules/power/singularity/emitter.dm
@@ -65,18 +65,18 @@
/obj/machinery/power/emitter/proc/activate(mob/user as mob)
if(state == 2)
if(!powernet)
- user << "\The [src] isn't connected to a wire."
+ to_chat(user, "\The [src] isn't connected to a wire.")
return 1
if(!src.locked)
if(src.active==1)
src.active = 0
- user << "You turn off [src]."
+ to_chat(user, "You turn off [src].")
message_admins("Emitter turned off by [key_name(user, user.client)](?) in ([x],[y],[z] - JMP)",0,1)
log_game("EMITTER([x],[y],[z]) OFF by [key_name(user)]")
investigate_log("turned off by [user.key]","singulo")
else
src.active = 1
- user << "You turn on [src]."
+ to_chat(user, "You turn on [src].")
src.shot_number = 0
src.fire_delay = get_initial_fire_delay()
message_admins("Emitter turned on by [key_name(user, user.client)](?) in ([x],[y],[z] - JMP)",0,1)
@@ -84,9 +84,9 @@
investigate_log("turned on by [user.key]","singulo")
update_icon()
else
- user << "The controls are locked!"
+ to_chat(user, "The controls are locked!")
else
- user << "\The [src] needs to be firmly secured to the floor first."
+ to_chat(user, "\The [src] needs to be firmly secured to the floor first.")
return 1
@@ -148,7 +148,7 @@
if(W.is_wrench())
if(active)
- user << "Turn off [src] first."
+ to_chat(user, "Turn off [src] first.")
return
switch(state)
if(0)
@@ -167,17 +167,17 @@
src.anchored = 0
disconnect_from_network()
if(2)
- user << "\The [src] needs to be unwelded from the floor."
+ to_chat(user, "\The [src] needs to be unwelded from the floor.")
return
if(istype(W, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = W
if(active)
- user << "Turn off [src] first."
+ to_chat(user, "Turn off [src] first.")
return
switch(state)
if(0)
- user << "\The [src] needs to be wrenched to the floor."
+ to_chat(user, "\The [src] needs to be wrenched to the floor.")
if(1)
if (WT.remove_fuel(0,user))
playsound(loc, WT.usesound, 50, 1)
@@ -187,10 +187,10 @@
if (do_after(user,20 * WT.toolspeed))
if(!src || !WT.isOn()) return
state = 2
- user << "You weld [src] to the floor."
+ to_chat(user, "You weld [src] to the floor.")
connect_to_network()
else
- user << "You need more welding fuel to complete this task."
+ to_chat(user, "You need more welding fuel to complete this task.")
if(2)
if (WT.remove_fuel(0,user))
playsound(loc, WT.usesound, 50, 1)
@@ -200,44 +200,40 @@
if (do_after(user,20 * WT.toolspeed))
if(!src || !WT.isOn()) return
state = 1
- user << "You cut [src] free from the floor."
+ to_chat(user, "You cut [src] free from the floor.")
disconnect_from_network()
else
- user << "You need more welding fuel to complete this task."
+ to_chat(user, "You need more welding fuel to complete this task.")
return
if(istype(W, /obj/item/stack/material) && W.get_material_name() == DEFAULT_WALL_MATERIAL)
var/amt = Ceiling(( initial(integrity) - integrity)/10)
if(!amt)
- user << "\The [src] is already fully repaired."
+ to_chat(user, "\The [src] is already fully repaired.")
return
var/obj/item/stack/P = W
if(P.amount < amt)
- user << "You don't have enough sheets to repair this! You need at least [amt] sheets."
+ to_chat(user, "You don't have enough sheets to repair this! You need at least [amt] sheets.")
return
- user << "You begin repairing \the [src]..."
+ to_chat(user, "You begin repairing \the [src]...")
if(do_after(user, 30))
if(P.use(amt))
- user << "You have repaired \the [src]."
+ to_chat(user, "You have repaired \the [src].")
integrity = initial(integrity)
return
else
- user << "You don't have enough sheets to repair this! You need at least [amt] sheets."
+ to_chat(user, "You don't have enough sheets to repair this! You need at least [amt] sheets.")
return
if(istype(W, /obj/item/weapon/card/id) || istype(W, /obj/item/device/pda))
if(emagged)
- user << "The lock seems to be broken."
+ to_chat(user, "The lock seems to be broken.")
return
if(src.allowed(user))
- if(active)
- src.locked = !src.locked
- user << "The controls are now [src.locked ? "locked." : "unlocked."]"
- else
- src.locked = 0 //just in case it somehow gets locked
- user << "The controls can only be locked when [src] is online."
+ src.locked = !src.locked
+ to_chat(user, "The controls are now [src.locked ? "locked." : "unlocked."]")
else
- user << "Access denied."
+ to_chat(user, "Access denied.")
return
..()
return
@@ -274,11 +270,11 @@
var/integrity_percentage = round((integrity / initial(integrity)) * 100)
switch(integrity_percentage)
if(0 to 30)
- user << "\The [src] is close to falling apart!"
+ to_chat(user, "\The [src] is close to falling apart!")
if(31 to 70)
- user << "\The [src] is damaged."
+ to_chat(user, "\The [src] is damaged.")
if(77 to 99)
- user << "\The [src] is slightly damaged."
+ to_chat(user, "\The [src] is slightly damaged.")
//R-UST port
/obj/machinery/power/emitter/proc/get_initial_fire_delay()
diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm
index d072797366..2e97d735ba 100644
--- a/code/modules/power/smes.dm
+++ b/code/modules/power/smes.dm
@@ -255,7 +255,7 @@
if(istype(W, /obj/item/stack/cable_coil) && !terminal && !building_terminal)
building_terminal = 1
var/obj/item/stack/cable_coil/CC = W
- if (CC.get_amount() <= 10)
+ if (CC.get_amount() < 10)
to_chat(user, "You need more cables.")
building_terminal = 0
return 0
diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm
index 52e02bd7ba..4f27c593c7 100644
--- a/code/modules/projectiles/ammunition.dm
+++ b/code/modules/projectiles/ammunition.dm
@@ -147,6 +147,11 @@
to_chat(user, "[src] is already empty!")
return
to_chat(user, "You empty [src].")
+ playsound(user.loc, "casing_sound", 50, 1)
+ spawn(7)
+ playsound(user.loc, "casing_sound", 50, 1)
+ spawn(10)
+ playsound(user.loc, "casing_sound", 50, 1)
for(var/obj/item/ammo_casing/C in stored_ammo)
C.loc = user.loc
C.set_dir(pick(cardinal))
diff --git a/code/modules/projectiles/ammunition/magazines.dm b/code/modules/projectiles/ammunition/magazines.dm
index 6f88fed227..cfd96ac2aa 100644
--- a/code/modules/projectiles/ammunition/magazines.dm
+++ b/code/modules/projectiles/ammunition/magazines.dm
@@ -327,7 +327,7 @@
/obj/item/ammo_magazine/m9mmR/saber
desc = "A very high capacity double stack magazine made specially for the SABER SMG. Filled with 22 9mm bullets."
- icon_state = "S9mm-22"
+ icon_state = "S9mm"
mag_type = MAGAZINE
ammo_type = /obj/item/ammo_casing/a9mm
matter = list(DEFAULT_WALL_MATERIAL = 1200)
@@ -338,14 +338,9 @@
/obj/item/ammo_magazine/m9mmR/saber/ap
desc = "A high capacity double stack magazine made specially for the SABER SMG. Filled with 22 9mm armor piercing bullets."
- icon_state = "S9mm-22"
- mag_type = MAGAZINE
+ icon_state = "S9mm"
ammo_type = /obj/item/ammo_casing/a9mm/ap
matter = list(DEFAULT_WALL_MATERIAL = 2000)
- caliber = "9mm"
- max_ammo = 22
- origin_tech = list(TECH_COMBAT = 2, TECH_ILLEGAL = 1)
- multiple_sprites = 1
/obj/item/ammo_magazine/m9mmR/saber/empty
initial_ammo = 0
diff --git a/code/modules/projectiles/guns/energy/phase.dm b/code/modules/projectiles/guns/energy/phase.dm
index 7de6ae53ce..b5c06c2fc9 100644
--- a/code/modules/projectiles/guns/energy/phase.dm
+++ b/code/modules/projectiles/guns/energy/phase.dm
@@ -37,6 +37,7 @@ obj/item/weapon/gun/energy/phasegun/rifle
icon_state = "phaserifle"
item_state = "phaserifle"
wielded_item_state = "phaserifle-wielded"
+ w_class = ITEMSIZE_LARGE
slot_flags = SLOT_BACK
charge_cost = 150
projectile_type = /obj/item/projectile/energy/phase/heavy
diff --git a/code/modules/projectiles/guns/projectile/boltaction.dm b/code/modules/projectiles/guns/projectile/boltaction.dm
index 5ebbb4e951..47dbda54d1 100644
--- a/code/modules/projectiles/guns/projectile/boltaction.dm
+++ b/code/modules/projectiles/guns/projectile/boltaction.dm
@@ -47,7 +47,6 @@
else
..()
-
//Lever actions are the same thing, but bigger.
/obj/item/weapon/gun/projectile/shotgun/pump/rifle/lever
name = "lever-action rifle"
@@ -60,4 +59,11 @@
origin_tech = list(TECH_COMBAT = 1)// Old as shit rifle doesn't have very good tech.
ammo_type = /obj/item/ammo_casing/a762
load_method = SINGLE_CASING|SPEEDLOADER
- action_sound = 'sound/weapons/riflebolt.ogg'
\ No newline at end of file
+ action_sound = 'sound/weapons/riflebolt.ogg'
+
+/obj/item/weapon/gun/projectile/shotgun/pump/rifle/lever/vintage
+ name = "vintage repeater"
+ desc = "An iconic manually operated lever action rifle, offering adequate stopping power due to it's still powerful cartridge while at the same time having a rather respectable firing rate due to it's mechanism. It is very probable this is a replica instead of a museum piece, but rifles of this pattern still see usage as colonist guns in some far off regions. Uses 7,62mm ammo."
+ item_state = "levercarabine"
+ icon_state = "levercarabine"
+ animated_pump = 1
diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm
index 183ead39d1..23fd373887 100644
--- a/code/modules/projectiles/guns/projectile/shotgun.dm
+++ b/code/modules/projectiles/guns/projectile/shotgun.dm
@@ -16,6 +16,8 @@
handle_casings = HOLD_CASINGS
var/recentpump = 0 // to prevent spammage
var/action_sound = 'sound/weapons/shotgunpump.ogg'
+ var/animated_pump = 0 //This is for cyling animations.
+ var/empty_sprite = 0 //This is just a dirty var so it doesn't fudge up.
/obj/item/weapon/gun/projectile/shotgun/pump/consume_next_projectile()
if(chambered)
@@ -39,8 +41,20 @@
loaded -= AC //Remove casing from loaded list.
chambered = AC
+ if(animated_pump)//This affects all bolt action and shotguns.
+ flick("[icon_state]-cycling", src)//This plays any pumping
+
update_icon()
+/obj/item/weapon/gun/projectile/shotgun/pump/update_icon()//This adds empty sprite capability for shotguns.
+ ..()
+ if(!empty_sprite)//Just a dirty check
+ return
+ if((loaded.len) || (chambered))
+ icon_state = "[icon_state]"
+ else
+ icon_state = "[icon_state]-empty"
+
/obj/item/weapon/gun/projectile/shotgun/pump/slug
ammo_type = /obj/item/ammo_casing/a12g
diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm
index 3e4b9352ec..99653c4b51 100644
--- a/code/modules/reagents/Chemistry-Machinery.dm
+++ b/code/modules/reagents/Chemistry-Machinery.dm
@@ -31,8 +31,8 @@
/obj/machinery/chem_master/New()
..()
- var/datum/reagents/R = new/datum/reagents(120)
- reagents = R
+ var/datum/reagents/R = new/datum/reagents(900) //Just a huge random number so the buffer should (probably) never dump your reagents.
+ reagents = R //There should be a nano ui thingy to warn of this.
R.my_atom = src
/obj/machinery/chem_master/ex_act(severity)
@@ -55,7 +55,7 @@
src.beaker = B
user.drop_item()
B.loc = src
- to_chat(user, "You add \the [B] to the machine!")
+ to_chat(user, "You add \the [B] to the machine.")
icon_state = "mixer1"
else if(istype(B, /obj/item/weapon/storage/pill_bottle))
@@ -67,7 +67,7 @@
src.loaded_pill_bottle = B
user.drop_item()
B.loc = src
- to_chat(user, "You add \the [loaded_pill_bottle] into the dispenser slot!")
+ to_chat(user, "You add \the [loaded_pill_bottle] into the dispenser slot.")
else if(default_unfasten_wrench(user, B, 20))
return
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm
index 6f2635b3db..ac8d4c0b0a 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm
@@ -499,10 +499,11 @@
var/adj_drowsy = 0
var/adj_sleepy = 0
var/adj_temp = 0
+ var/water_based = TRUE
/datum/reagent/drink/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
var/strength_mod = 1
- if(alien == IS_SLIME)
+ if(alien == IS_SLIME && water_based)
strength_mod = 3
M.adjustToxLoss(removed * strength_mod) // Probably not a good idea; not very deadly though
return
@@ -516,7 +517,7 @@
M.bodytemperature = min(310, M.bodytemperature + (adj_temp * TEMPERATURE_DAMAGE_COEFFICIENT))
if(adj_temp < 0 && M.bodytemperature > 310)
M.bodytemperature = min(310, M.bodytemperature - (adj_temp * TEMPERATURE_DAMAGE_COEFFICIENT))
- if(alien == IS_SLIME)
+ if(alien == IS_SLIME && water_based)
M.adjustToxLoss(removed * 2)
/datum/reagent/drink/overdose(var/mob/living/carbon/M, var/alien) //Add special interactions here in the future if desired.
@@ -1482,6 +1483,73 @@
glass_name = "Love Potion"
glass_desc = "Love me tender, love me sweet."
+/datum/reagent/drink/oilslick
+ name = "Oil Slick"
+ id = "oilslick"
+ description = "A viscous, but sweet, ooze."
+ taste_description = "honey"
+ color = "#FDF5E6" // rgb(253,245,230)
+ water_based = FALSE
+
+ glass_name = "Oil Slick"
+ glass_desc = "A concoction that should probably be in an engine, rather than your stomach."
+ glass_icon = DRINK_ICON_NOISY
+
+/datum/reagent/drink/nuclearwaste
+ name = "Nuclear Waste"
+ id = "nuclearwaste"
+ description = "A viscous, glowing slurry."
+ taste_description = "sour honey drops"
+ color = "#7FFF00" // rgb(127,255,0)
+ water_based = FALSE
+
+ glass_name = "Nuclear Waste"
+ glass_desc = "Sadly, no super powers."
+ glass_icon = DRINK_ICON_NOISY
+ glass_special = list(DRINK_FIZZ)
+
+/datum/reagent/drink/nuclearwaste/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ ..()
+ if(alien == IS_DIONA)
+ return
+ M.bloodstr.add_reagent("radium", 0.3)
+
+/datum/reagent/drink/nuclearwaste/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
+ ..()
+ if(alien == IS_DIONA)
+ return
+ M.ingested.add_reagent("radium", 0.25)
+
+/datum/reagent/drink/sodaoil //Mixed with normal drinks to make a 'potable' version for Prometheans if mixed 1-1. Dilution is key.
+ name = "Soda Oil"
+ id = "sodaoil"
+ description = "A thick, bubbling soda."
+ taste_description = "chewy water"
+ color = "#F0FFF0" // rgb(245,255,250)
+ water_based = FALSE
+
+ glass_name = "Soda Oil"
+ glass_desc = "A pitiful sludge that looks vaguely like a soda.. if you look at it a certain way."
+ glass_icon = DRINK_ICON_NOISY
+ glass_special = list(DRINK_FIZZ)
+
+/datum/reagent/drink/sodaoil/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ ..()
+ if(M.bloodstr) // If, for some reason, they are injected, dilute them as well.
+ for(var/datum/reagent/R in M.ingested.reagent_list)
+ if(istype(R, /datum/reagent/drink))
+ var/datum/reagent/drink/D = R
+ if(D.water_based)
+ M.adjustToxLoss(removed * -3)
+
+/datum/reagent/drink/sodaoil/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
+ ..()
+ if(M.ingested) // Find how many drinks are causing tox, and negate them.
+ for(var/datum/reagent/R in M.ingested.reagent_list)
+ if(istype(R, /datum/reagent/drink))
+ var/datum/reagent/drink/D = R
+ if(D.water_based)
+ M.adjustToxLoss(removed * -2)
/* Alcohol */
@@ -2974,3 +3042,101 @@
glass_name = "Mint Julep"
glass_desc = "Minty and refreshing, perfect for a hot day."
+
+/datum/reagent/ethanol/godsake
+ name = "Gods Sake"
+ id = "godsake"
+ description = "Anime's favorite drink."
+ taste_description = "the power of god and anime"
+ color = "#DDDDDD"
+ strength = 25
+
+ glass_name = "God's Sake"
+ glass_desc = "A glass of sake."
+
+/datum/reagent/ethanol/godka
+ name = "Godka"
+ id = "godka"
+ description = "Number one drink AND fueling choice for Russians multiverse-wide."
+ taste_description = "russian steel and a hint of grain"
+ color = "#0064C8"
+ strength = 50
+
+ glass_name = "Godka"
+ glass_desc = "The glass is barely able to contain the wodka. Xynta."
+ glass_special = list(DRINK_FIZZ)
+
+/datum/reagent/ethanol/godka/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
+ ..()
+ M.apply_effect(max(M.radiation - 5 * removed, 0), IRRADIATE, check_protection = 0)
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ if(H.species.has_organ[O_LIVER])
+ var/obj/item/organ/L = H.internal_organs_by_name[O_LIVER]
+ if(!L)
+ return
+ var/adjust_liver = rand(-3, 2)
+ if(prob(L.damage))
+ to_chat(M, "You feel woozy...")
+ L.damage = max(L.damage + (adjust_liver * removed), 0)
+ var/adjust_tox = rand(-4, 2)
+ M.adjustToxLoss(adjust_tox * removed)
+
+/datum/reagent/ethanol/holywine
+ name = "Angel Ichor"
+ id = "holywine"
+ description = "A premium alchoholic beverage made from distilled angel blood."
+ taste_description = "wings in a glass, and a hint of grape"
+ color = "#C4921E"
+ strength = 20
+
+ glass_name = "Angel Ichor"
+ glass_desc = "A very pious looking drink."
+ glass_icon = DRINK_ICON_NOISY
+
+/datum/reagent/ethanol/holy_mary
+ name = "Holy Mary"
+ id = "holymary"
+ description = "A strange yet pleasurable mixture made of vodka, angel's ichor and lime juice. Or at least you THINK the yellow stuff is angel's ichor."
+ taste_description = "grapes with a hint of lime"
+ color = "#DCAE12"
+ strength = 20
+
+ glass_name = "Holy Mary"
+ glass_desc = "Angel's Ichor, mixed with Vodka and a lil' bit of lime. Tastes like liquid ascension."
+
+/datum/reagent/ethanol/angelswrath
+ name = "Angels Wrath"
+ id = "angelswrath"
+ description = "This thing makes the hair on the back of your neck stand up."
+ taste_description = "sweet victory and sour iron"
+ taste_mult = 1.5
+ color = "#F3C906"
+ strength = 30
+
+ glass_name = "Angels' Wrath"
+ glass_desc = "Just looking at this thing makes you sweat."
+ glass_icon = DRINK_ICON_NOISY
+ glass_special = list(DRINK_FIZZ)
+
+/datum/reagent/ethanol/angelskiss
+ name = "Angels Kiss"
+ id = "angelskiss"
+ description = "Miracle time!"
+ taste_description = "sweet forgiveness and bitter iron"
+ color = "#AD772B"
+ strength = 25
+
+ glass_name = "Angel's Kiss"
+ glass_desc = "Miracle time!"
+
+/datum/reagent/ethanol/ichor_mead
+ name = "Ichor Mead"
+ id = "ichor_mead"
+ description = "A trip to Valhalla."
+ taste_description = "valhalla"
+ color = "#955B37"
+ strength = 30
+
+ glass_name = "Ichor Mead"
+ glass_desc = "A trip to Valhalla."
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm
index 63178e1567..ea9e17d581 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm
@@ -818,6 +818,7 @@
reagent_state = LIQUID
color = "#BF80BF"
metabolism = 0.01
+ ingest_met = 0.25
mrate_static = TRUE
data = 0
@@ -840,6 +841,7 @@
reagent_state = LIQUID
color = "#FF80FF"
metabolism = 0.01
+ ingest_met = 0.25
mrate_static = TRUE
data = 0
@@ -862,6 +864,7 @@
reagent_state = LIQUID
color = "#FF80BF"
metabolism = 0.01
+ ingest_met = 0.25
mrate_static = TRUE
data = 0
@@ -888,6 +891,7 @@
reagent_state = LIQUID
color = "#e6efe3"
metabolism = 0.01
+ ingest_met = 0.25
mrate_static = TRUE
data = 0
diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm
index 5d46650c3f..1c38a2aa57 100644
--- a/code/modules/reagents/Chemistry-Recipes.dm
+++ b/code/modules/reagents/Chemistry-Recipes.dm
@@ -2205,6 +2205,84 @@
required_reagents = list("icecoffee" = 1, "whiskey" = 1, "mint" = 1)
result_amount = 3
+/datum/chemical_reaction/drinks/godsake
+ name = "Gods Sake"
+ id = "godsake"
+ result = "godsake"
+ required_reagents = list("sake" = 2, "holywater" = 1)
+ result_amount = 3
+
+/datum/chemical_reaction/drinks/godka //Why you would put this in your body, I don't know.
+ name = "Godka"
+ id = "godka"
+ result = "godka"
+ required_reagents = list("vodka" = 1, "holywater" = 1, "ethanol" = 1, "carthatoline" = 1)
+ catalysts = list("enzyme" = 5, "holywater" = 5)
+ result_amount = 1
+
+/datum/chemical_reaction/drinks/holywine
+ name = "Angel Ichor"
+ id = "holywine"
+ result = "holywine"
+ required_reagents = list("grapejuice" = 5, "gold" = 5)
+ catalysts = list("holywater" = 5)
+ result_amount = 10
+
+/datum/chemical_reaction/drinks/holy_mary
+ name = "Holy Mary"
+ id = "holymary"
+ result = "holymary"
+ required_reagents = list("vodka" = 2, "holywine" = 3, "limejuice" = 1)
+ result_amount = 6
+
+/datum/chemical_reaction/drinks/angelskiss
+ name = "Angels Kiss"
+ id = "angelskiss"
+ result = "angelskiss"
+ required_reagents = list("holywine" = 1, "kahlua" = 1, "rum" = 1)
+ result_amount = 3
+
+/datum/chemical_reaction/drinks/angelswrath
+ name = "Angels Wrath"
+ id = "angelswrath"
+ result = "angelswrath"
+ required_reagents = list("rum" = 3, "spacemountainwind" = 1, "holywine" = 1, "dr_gibb" = 1)
+ result_amount = 6
+
+/datum/chemical_reaction/drinks/ichor_mead
+ name = "Ichor Mead"
+ id = "ichor_mead"
+ result = "ichor_mead"
+ required_reagents = list("holywine" = 1, "mead" = 1)
+ result_amount = 2
+
+/datum/chemical_reaction/drinks/oilslick
+ name = "Oil Slick"
+ id = "oilslick"
+ result = "oilslick"
+ required_reagents = list("cornoil" = 2, "honey" = 1)
+ result_amount = 3
+
+/datum/chemical_reaction/drinks/nuclearwaste_radium
+ name = "Nuclear Waste"
+ id = "nuclearwasterad"
+ result = "nuclearwaste"
+ required_reagents = list("oilslick" = 1, "radium" = 1, "limejuice" = 1)
+ result_amount = 2
+
+/datum/chemical_reaction/drinks/nuclearwaste_uranium
+ name = "Nuclear Waste"
+ id = "nuclearwasteuran"
+ result = "nuclearwaste"
+ required_reagents = list("oilslick" = 2, "uranium" = 1)
+ result_amount = 3
+
+/datum/chemical_reaction/drinks/sodaoil
+ name = "Soda Oil"
+ id = "sodaoil"
+ result = "sodaoil"
+ required_reagents = list("cornoil" = 4, "sodawater" = 1, "carbon" = 1, "tricordrazine" = 1)
+ result_amount = 6
//R-UST Port
/datum/chemical_reaction/hyrdophoron
diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm
index 724cee9a6f..3cfac06de1 100644
--- a/code/modules/reagents/reagent_containers/hypospray.dm
+++ b/code/modules/reagents/reagent_containers/hypospray.dm
@@ -17,6 +17,7 @@
preserve_item = 1
var/filled = 0
var/list/filled_reagents = list()
+ var/hyposound // What sound do we play on use?
/obj/item/weapon/reagent_containers/hypospray/New()
..()
@@ -55,8 +56,9 @@
user.setClickCooldown(DEFAULT_QUICK_COOLDOWN)
to_chat(user, "You inject [M] with \the [src].")
to_chat(M, "You feel a tiny prick!")
-
- playsound(src, 'sound/effects/hypospray.ogg',25)
+
+ if(hyposound)
+ playsound(src, hyposound,25)
if(M.reagents)
var/contained = reagentlist()
@@ -126,6 +128,7 @@
filled = 1
filled_reagents = list("inaprovaline" = 5)
preserve_item = 0
+ hyposound = 'sound/effects/hypospray.ogg'
/obj/item/weapon/reagent_containers/hypospray/autoinjector/on_reagent_change()
..()
diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm
index 64f5b923ab..59b690f31a 100755
--- a/code/modules/recycling/sortingmachinery.dm
+++ b/code/modules/recycling/sortingmachinery.dm
@@ -284,7 +284,7 @@
if (src.amount > 3 && !O.opened)
var/obj/structure/bigDelivery/P = new /obj/structure/bigDelivery(get_turf(O.loc))
P.wrapped = O
- O.welded = 1
+ O.sealed = 1
O.loc = P
src.amount -= 3
user.visible_message("\The [user] wraps \a [target] with \a [src].",\
@@ -311,7 +311,7 @@
wrapped.forceMove(get_turf(src))
if(istype(wrapped, /obj/structure/closet))
var/obj/structure/closet/O = wrapped
- O.welded = 0
+ O.sealed = 0
wrapped = null
var/turf/T = get_turf(src)
for(var/atom/movable/AM in contents)
diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm
old mode 100644
new mode 100755
index 6872ffba6d..3e8732c423
--- a/code/modules/research/rdconsole.dm
+++ b/code/modules/research/rdconsole.dm
@@ -121,7 +121,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
//Loading a disk into it.
if(istype(D, /obj/item/weapon/disk))
if(t_disk || d_disk)
- user << "A disk is already loaded into the machine."
+ to_chat(user, "A disk is already loaded into the machine.")
return
if(istype(D, /obj/item/weapon/disk/tech_disk))
@@ -129,11 +129,11 @@ won't update every console in existence) but it's more of a hassle to do. Also,
else if (istype(D, /obj/item/weapon/disk/design_disk))
d_disk = D
else
- user << "Machine cannot accept disks in that format."
+ to_chat(user, "Machine cannot accept disks in that format.")
return
user.drop_item()
D.loc = src
- user << "You add \the [D] to the machine."
+ to_chat(user, "You add \the [D] to the machine.")
else
//The construction/deconstruction of the console code.
..()
@@ -145,7 +145,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
if(!emagged)
playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
emagged = 1
- user << "You you disable the security protocols."
+ to_chat(user, "You you disable the security protocols.")
return 1
/obj/machinery/computer/rdconsole/Topic(href, href_list)
@@ -155,12 +155,16 @@ won't update every console in existence) but it's more of a hassle to do. Also,
add_fingerprint(usr)
usr.set_machine(src)
+ if((screen < 1 || (screen == 1.6 && href_list["menu"] != "1.0")) && (!allowed(usr) && !emagged)) //Stops people from HREF exploiting out of the lock screen, but allow it if they have the access.
+ to_chat(usr, "Unauthorized Access")
+ return
+
if(href_list["menu"]) //Switches menu screens. Converts a sent text string into a number. Saves a LOT of code.
var/temp_screen = text2num(href_list["menu"])
if(temp_screen <= 1.1 || (3 <= temp_screen && 4.9 >= temp_screen) || allowed(usr) || emagged) //Unless you are making something, you need access.
screen = temp_screen
else
- usr << "Unauthorized Access."
+ to_chat(usr, "Unauthorized Access.")
else if(href_list["updt_tech"]) //Update the research holder with information from the technology disk.
screen = 0.0
@@ -211,7 +215,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
else if(href_list["eject_item"]) //Eject the item inside the destructive analyzer.
if(linked_destroy)
if(linked_destroy.busy)
- usr << "The destructive analyzer is busy at the moment."
+ to_chat(usr, "The destructive analyzer is busy at the moment.")
else if(linked_destroy.loaded_item)
linked_destroy.loaded_item.loc = linked_destroy.loc
@@ -222,7 +226,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
else if(href_list["deconstruct"]) //Deconstruct the item in the destructive analyzer and update the research holder.
if(linked_destroy)
if(linked_destroy.busy)
- usr << "The destructive analyzer is busy at the moment."
+ to_chat(usr, "The destructive analyzer is busy at the moment.")
else
if(alert("Proceeding will destroy loaded item. Continue?", "Destructive analyzer confirmation", "Yes", "No") == "No" || !linked_destroy)
return
@@ -234,7 +238,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
if(linked_destroy)
linked_destroy.busy = 0
if(!linked_destroy.loaded_item)
- usr <<"The destructive analyzer appears to be empty."
+ to_chat(usr, "The destructive analyzer appears to be empty.")
screen = 1.0
return
@@ -270,12 +274,12 @@ won't update every console in existence) but it's more of a hassle to do. Also,
if(allowed(usr))
screen = text2num(href_list["lock"])
else
- usr << "Unauthorized Access."
+ to_chat(usr, "Unauthorized Access.")
else if(href_list["sync"]) //Sync the research holder with all the R&D consoles in the game that aren't sync protected.
screen = 0.0
if(!sync)
- usr << "You must connect to the network first."
+ to_chat(usr, "You must connect to the network first.")
else
griefProtection() //Putting this here because I dont trust the sync process
spawn(30)
diff --git a/code/modules/vehicles/cargo_train.dm b/code/modules/vehicles/cargo_train.dm
index 508ad2a750..45cbcd7a13 100644
--- a/code/modules/vehicles/cargo_train.dm
+++ b/code/modules/vehicles/cargo_train.dm
@@ -43,7 +43,7 @@
/obj/vehicle/train/engine/New()
..()
cell = new /obj/item/weapon/cell/high(src)
- key = new(key_type)
+ key = new key_type(src)
var/image/I = new(icon = 'icons/obj/vehicles.dmi', icon_state = "cargo_engine_overlay", layer = src.layer + 0.2) //over mobs
overlays += I
turn_off() //so engine verbs are correctly set
diff --git a/code/modules/vehicles/quad.dm b/code/modules/vehicles/quad.dm
index 23a00f6de7..99adccf459 100644
--- a/code/modules/vehicles/quad.dm
+++ b/code/modules/vehicles/quad.dm
@@ -27,11 +27,11 @@
/obj/vehicle/train/engine/quadbike/New()
cell = new /obj/item/weapon/cell/high(src)
- key = new(key_type)
+ key = new key_type(src)
turn_off()
/obj/vehicle/train/engine/quadbike/built/New()
- key = new(key_type)
+ key = new key_type(src)
turn_off()
/obj/vehicle/train/engine/quadbike/random/New()
diff --git a/code/world.dm b/code/world.dm
index bf5a43bb27..abae2c9e4c 100644
--- a/code/world.dm
+++ b/code/world.dm
@@ -62,6 +62,8 @@ var/global/datum/global_init/init = new ()
if(config && config.log_runtime)
log = file("data/logs/runtime/[time2text(world.realtime,"YYYY-MM-DD-(hh-mm-ss)")]-runtime.log")
+ GLOB.timezoneOffset = text2num(time2text(0,"hh")) * 36000
+
callHook("startup")
//Emergency Fix
load_mods()
@@ -167,7 +169,10 @@ var/world_topic_spam_protect_time = world.timeofday
s["players"] = players.len
s["playerlist"] = list2params(players)
- s["admins"] = admins.len
+ var/list/adm = get_admin_counts()
+ var/list/presentmins = adm["present"]
+ var/list/afkmins = adm["afk"]
+ s["admins"] = presentmins.len + afkmins.len //equivalent to the info gotten from adminwho
s["adminlist"] = list2params(admins)
else
var/n = 0
diff --git a/config/names/first_name_skrell.txt b/config/names/first_name_skrell.txt
index 122b093765..964a52dabe 100644
--- a/config/names/first_name_skrell.txt
+++ b/config/names/first_name_skrell.txt
@@ -1,600 +1,600 @@
-Kaexae
-Xaaq'xuer
-Xaaq'taq
-Kae'xer
-Xeq'aeq'qerr
-Ke'xuer
-Xeteq
-Kae'xum
-Kerrker
-Kerrquex'xum
-Taeqxuq
-Kae'quex'xeu
-Keqaeq'xeu
-Ke'ter
-Xue'xerr
-Keqqux'kea
-Qerrqux
-Kerrxae'qer
-Taeqxerr
-Kerr'xum
-Kaexuer
-Qerr'xaeq'xeu
-Xue'xum
-Xeqteq'qerr
-Kerrkeax'qux
-Xaaq'qux
-Xae'xuer
-Xertaq'qux
-Xum'xuer
-Keq'taq'kea
-Keq'quex'xeu
-Qerraeq
-Xeq'xum
-Xeq'qux'xum
-Xer'xuq
-Keq'teq
-Kae'keax
-Keqxer
-Kae'xerr'xeu
-Xaequx
-Ke'teq'xum
-Xaaqxerr
-Xer'keax'kea
-Qerrxae'qux
-Xae'xer
-Qerrteq
-Xeq'xuer
-Xe'xaeq'xum
-Xeteq'qerr
-Xaaq'aeq'xeu
-Xae'xaeq'qer
-Keaeq'xum
-Xaaq'teq
-Keq'ker
-Ke'keax
-Kexum'kea
-Xeq'xum
-Qerr'xaeq'kea
-Xexum
-Taeq'xer'xe
-Qerraeq
-Xeq'keax'qux
-Xuequx
-Kexuq
-Teqxaeq'qer
-Xeqtaq'qer
-Xaexuq
-Xueaeq'qux
-Taeqxae
-Keqxuer
-Xum'aeq
-Xeqkeax'kea
-Kerrxuer
-Xaeteq
-Keqxaeq'qerr
-Xum'quex
-Taeq'teq
-Xer'xaeq
-Teq'taq
-Xe'xuq
-Kerrxer
-Kerr'xaeq'kea
-Xeqteq
-Xeqxuq'qerr
-Kerr'xum'xe
-Xe'qux
-Xexaeq
-Qerrxaeq'qer
-Teqqux'kea
-Ke'xuer
-Xerqux'xeu
-Kaexaeq'xeu
-Xeq'qux
-Xeker
-Ke'xae
-Kerrxae'qux
-Kae'aeq'qerr
-Xeq'qux'xeu
-Xeqquex'xeu
-Kerr'xaeq
-Kerr'aeq
-Xaaqxae
-Xertaq'qux
-Xaaq'ker'xum
-Kae'xuer'xe
-Xue'aeq'xeu
-Qerr'xuq
-Kequex'qerr
-Xer'ter'xe
-Qerr'ter'qerr
-Xeq'keax'qux
-Keq'ker
-Ke'qux'qerr
-Xumter'qux
-Xue'qux'xe
-Xaeaeq
-Xumxuer'xeu
-Kerr'xuq'qux
-Keq'xaeq
-Xum'xuq'xeu
-Kerr'xer
-Xae'keax
-Kequex
-Kae'qux
-Keqkeax
-Qarrker
-Xaaqker'xum
-Xue'xaeq'qux
-Taeq'xaeq'xe
-Xue'xerr
-Teqkeax
-Xaaq'keax
-Ke'xaeq'qer
-Kerrxuer
-Kaeter'qux
-Qarr'xerr
-Xerxum'qux
-Xumqux
-Taeq'teq'xeu
-Qerrxuer'qer
-Xe'ker
-Qerrter'kea
-Kaeteq'qux
-Teq'xuer'xum
-Ke'xae'xeu
-Teqxuq'qer
-Keq'xaeq
-Xaaq'xae
-Xum'xer
-Xeter
-Xaaq'quex'kea
-Kexum
-Qarrkeax'qer
-Keq'xerr
-Qarrxerr'qerr
-Qarrxerr'qer
-Xer'ker
-Xaexum'xe
-Kaexerr'qux
-Xuexum
-Xaaq'xer
-Qerr'quex
-Qerr'ker
-Xum'teq'qerr
-Kerrxaeq
-Xeq'xae
-Xue'aeq'xe
-Qarr'xuer
-Qarr'xerr'qerr
-Kaexerr'xum
-Kaeter'xum
-Xuexuq
-Xuekeax'xeu
-Xaaq'ker
-Keqxer
-Teq'xer
-Qarrker
-Xer'ter
-Xae'ter'kea
-Ke'quex'xe
-Xaeter
-Xer'xae
-Qarr'xae'xum
-Xeqxuq
-Keqter'xum
-Xeker
-Taeqxerr'qer
-Keqxer'kea
-Xumquex
-Xaaq'xuq
-Kerrxum
-Xexerr
-Xerxerr'qerr
-Xaaq'xerr
-Xum'ker'qer
-Xequx
-Xer'xae
-Kaexerr'xe
-Xe'taq
-Xeq'xuer'qerr
-Xue'taq
-Teqxer
-Xaaq'xerr'xe
-Xer'quex'xum
-Xaeaeq
-Taeqaeq
-Xaeter'qer
-Xerkeax
-Xuequex'xe
-Keqxerr
-Taeqxae'qer
-Teqqux
-Xae'quex'qux
-Xe'xum
-Xaaqxer
-Xeq'aeq'xum
-Xuexuq'qerr
-Xe'taq'qux
-Qarr'xae
-Xe'keax'qer
-Qerrxum'qerr
-Xer'xer
-Qarr'quex'qerr
-Taeq'xer'qux
-Taeqtaq
-Ke'aeq'xum
-Xueter
-Kaeker
-Xeter'kea
-Qarrter
-Qerrxae
-Xaaqxum'xeu
-Xum'xuer
-Xe'xae
-Qarrter'qer
-Kequx
-Kerr'aeq'kea
-Teq'taq'kea
-Xexum'qerr
-Qerr'quex'xeu
-Xeker'qux
-Kerr'quex'qerr
-Xum'ker'qer
-Keqxuq'xeu
-Keqxuq'xeu
-Xer'teq'xum
-Kaeker'qerr
-Xumtaq
-Xexuer
-Xueter'xum
-Kaeteq
-Ke'teq
-Qerrxuq
-Teq'xum'qerr
-Xaaq'xae
-Keter'xum
-Xeqqux
-Xae'taq
-Qerrtaq'qux
-Keq'ter
-Xaequex'xum
-Kaeter
-Xaaqtaq
-Kae'xer'qer
-Kaequx
-Kae'xum
-Taeqaeq'qux
-Kexaeq'kea
-Xer'xae'qer
-Xae'ker
-Xue'xuer
-Xeq'taq'xe
-Kaexae'qux
-Teq'xae'xe
-Teq'xuer
-Qerrqux'xeu
-Xuexaeq
-Kerr'xuq'kea
-Xerquex'kea
-Keq'ker
-Kaexum
-Kerrquex
-Kexer
-Keq'quex'qerr
-Xae'xae
-Qerr'ker
-Kexerr
-Xaaqquex
-Keq'quex'xum
-Xerter'qux
-Xuexaeq'xe
-Xae'xuq'kea
-Kae'xuer'kea
-Xer'xum'kea
-Xer'quex'kea
-Kerrxuq'qux
-Qerrxuer
-Xeq'xerr'qerr
-Qarr'xuq'qux
-Xaaq'xuq
-Xerxaeq'qux
-Xertaq
-Kerr'teq'xeu
-Xer'aeq'kea
-Xe'ter'qerr
-Teq'xae
-Kerrxerr
-Taeqxaeq
-Xueker
-Keqxae'qerr
-Taeqkeax
-Kexaeq'xum
-Xuekeax'xe
-Xumxum
-Xeq'ter'xeu
-Taeqquex
-Xer'xer
-Keqxae'xeu
-Kaexum
-Keq'xaeq
-Qerr'quex'xum
-Kaexuq'qux
-Xaequx'xe
-Kae'xum
-Keqkeax
-Kexuer
-Xeter
-Xexuq'xeu
-Xe'aeq
-Xum'keax'xe
-Xer'ker'xum
-Xerxuq'qer
-Xaekeax'xe
-Kaequex'xe
-Keqxer
-Xeker'qer
-Teqker'qerr
-Keqxer
-Teq'xer
-Xaaq'xum
-Qerrter
-Ke'xuer
-Kae'xerr'xeu
-Qarrteq'kea
-Teq'aeq'qux
-Teq'xum'qux
-Xae'xuq
-Xaekeax
-Qerr'teq
-Kerrteq'qer
-Keqxerr
-Qarr'xerr'xum
-Kekeax
-Xae'xae'kea
-Xumteq
-Xuequx'qer
-Qarr'xer
-Taeq'xuq
-Ke'xum
-Kae'xerr
-Xumxum'qerr
-Keqteq'qer
-Teqker'qerr
-Qarr'keax
-Xeqxer
-Qarrxuq'xe
-Keqkeax
-Xaaq'ter'kea
-Xaaq'aeq
-Kerr'keax
-Keqxuer
-Qerr'xerr'kea
-Qarr'teq'qerr
-Kerr'teq'qerr
-Qarr'taq'qer
-Qarrxuer'xeu
-Kae'ter
-Keaeq'xum
-Teqker'xum
-Xaaq'aeq'qux
-Keq'qux'qer
-Xae'xuq'kea
-Ke'xuq'qux
-Qerr'qux
-Xaaq'qux'qer
-Xue'keax
-Xaaqxerr'kea
-Taeqteq'xe
-Xuetaq
-Xaaqxuq'qerr
-Qerrxae'xe
-Xeqxuer
-Xeqxaeq'xum
-Xue'ker'qer
-Kekeax'xeu
-Qarr'xae'qux
-Xae'ker'qux
-Qarr'xum'xum
-Xum'xaeq'xeu
-Qerrxer'qerr
-Xaeaeq'qer
-Xaaq'quex'qerr
-Qerr'aeq
-Xum'taq
-Kerr'xum'xeu
-Xaeaeq'kea
-Taeqxerr'kea
-Taeq'qux'xum
-Xaaq'xae
-Qerr'quex
-Qarrker
-Qarr'qux'xeu
-Xaaqaeq'qux
-Xuetaq
-Xaexum
-Xae'xaeq
-Xaaq'taq'xe
-Kerrxaeq'xe
-Kae'xer'kea
-Kerr'xae'qer
-Keqxum'qer
-Qarr'taq'xe
-Taeq'quex'qer
-Xum'xuer
-Xer'xuq'qerr
-Xeqteq'xum
-Xae'xaeq
-Xaekeax'qer
-Xeq'xum
-Qarr'ter'qer
-Qarr'xerr
-Kae'xae'xum
-Taeq'xuq
-Kae'xuq'kea
-Xue'xum'qux
-Xae'xerr
-Taeq'xaeq
-Xaexuq
-Xaequx
-Keqter
-Kae'xuer
-Xaaqaeq
-Kae'taq'xeu
-Keqter'kea
-Taeqaeq
-Xae'qux
-Qerr'qux
-Qarr'xuq'kea
-Xeq'xuer
-Keqqux
-Xaaq'taq'xum
-Kae'xerr
-Xue'xae'kea
-Qarraeq
-Taeq'xum
-Qerrxer
-Teq'xum
-Xaaq'ker'xeu
-Kerr'xaeq
-Xaaq'xerr'xeu
-Xaaqxuq'xeu
-Taeqter'qer
-Teq'xuer
-Xaaqker
-Qerr'xaeq'qux
-Qerr'quex'qux
-Xaaqxerr
-Keqtaq'xeu
-Kerrxuq
-Taeqxuq'xe
-Taeq'xuq
-Xexuq'qerr
-Taeq'xae'qux
-Kerr'aeq'qer
-Teqtaq
-Qerr'taq'xeu
-Xeqxaeq'kea
-Keteq
-Qarr'quex'xeu
-Kae'xer
-Xaaqxuer
-Xum'xum
-Taeqquex'xeu
-Xue'teq
-Xumxuq
-Teqxer
-Xaeteq'xum
-Kaexum'qerr
-Xaaq'qux
-Xe'xum
-Qerr'xaeq
-Keqxaeq'xe
-Xum'xerr
-Xuexaeq'xum
-Xaaq'xum'kea
-Xumteq
-Teq'keax'xeu
-Xaequex
-Ke'ker'kea
-Xeq'xuq
-Xaaq'quex'xeu
-Teq'teq'qux
-Qarr'keax
-Xequex
-Xeqqux
-Xerxerr'xum
-Kae'teq
-Xaaq'qux'xum
-Xuetaq'qer
-Xaexerr
-Xexuer
-Xaaq'xerr'qer
-Xexae'kea
-Xaexuq'qer
-Xe'ker
-Keq'quex'kea
-Qarrqux'qux
-Xaaqtaq'kea
-Teqxae
-Teq'xuq
-Ke'aeq
-Xae'aeq
-Kerr'ter
-Xue'xuq'qer
-Ke'xaeq
-Taeq'xuer'xeu
-Xeq'xae
-Qerrkeax'kea
-Xae'xuq
-Teq'keax
-Qerr'teq'qer
-Kaexuq'xe
-Qarrxaeq'xeu
-Qerrtaq
-Xe'ker'xum
-Kaexuer
-Teqxuer'xe
-Xumxuer'kea
-Kerr'xuer
-Xer'teq'xum
-Xumteq'qerr
-Ke'quex
-Taeq'aeq'qerr
-Xue'ter'xe
-Xeq'xae'xeu
-Xer'xum
-Qarr'xae
-Qerrker'qux
-Taeq'keax'xeu
-Xum'quex'xeu
-Kae'ter
-Xe'quex'xe
-Keqxum
-Kerr'quex'qer
-Xaaqxae'qer
-Xaaqteq'qer
-Keqqux
-Teq'aeq
-Keteq
-Xumxae'xum
-Xumxum
-Qarrxaeq'kea
-Keker
-Xeq'aeq'qer
-Teqter
-Qarrxaeq'kea
-Teq'quex
-Keqxum
-Teq'xuer
-Xumter'kea
-Qarr'xae
-Xae'xuer'xeu
-Xaaqxaeq'kea
-Qerr'xuq'xeu
-Xum'xae'qux
-Xumxaeq
-Xumxum
-Kexum'xe
-Kae'aeq
-Xer'teq
-Qarrxerr'xum
-Taeq'taq
-Taeq'taq'qux
-Kaexum'xeu
-Xumtaq
-Xae'xer
-Kerr'ker
-Qarr'xum'qer
-Qerr'xuer'qux
-Xue'qux'xe
-Qerr'qux'xum
-Teqquex'qerr
-Taeqquex
-Qarrxerr
-Ketaq
-Xekeax
-Kequex
-Xetaq
-Ke'xae'xe
-Teq'quex'qux
+Kaexae
+Xaaq'xuer
+Xaaq'taq
+Kae'xer
+Xeq'aeq'qerr
+Ke'xuer
+Xeteq
+Kae'xum
+Kerrker
+Kerrquex'xum
+Taeqxuq
+Kae'quex'xeu
+Keqaeq'xeu
+Ke'ter
+Xue'xerr
+Keqqux'kea
+Qerrqux
+Kerrxae'qer
+Taeqxerr
+Kerr'xum
+Kaexuer
+Qerr'xaeq'xeu
+Xue'xum
+Xeqteq'qerr
+Kerrkeax'qux
+Xaaq'qux
+Xae'xuer
+Xertaq'qux
+Xum'xuer
+Keq'taq'kea
+Keq'quex'xeu
+Qerraeq
+Xeq'xum
+Xeq'qux'xum
+Xer'xuq
+Keq'teq
+Kae'keax
+Keqxer
+Kae'xerr'xeu
+Xaequx
+Ke'teq'xum
+Xaaqxerr
+Xer'keax'kea
+Qerrxae'qux
+Xae'xer
+Qerrteq
+Xeq'xuer
+Xe'xaeq'xum
+Xeteq'qerr
+Xaaq'aeq'xeu
+Xae'xaeq'qer
+Keaeq'xum
+Xaaq'teq
+Keq'ker
+Ke'keax
+Kexum'kea
+Xeq'xum
+Qerr'xaeq'kea
+Xexum
+Taeq'xer'xe
+Qerraeq
+Xeq'keax'qux
+Xuequx
+Kexuq
+Teqxaeq'qer
+Xeqtaq'qer
+Xaexuq
+Xueaeq'qux
+Taeqxae
+Keqxuer
+Xum'aeq
+Xeqkeax'kea
+Kerrxuer
+Xaeteq
+Keqxaeq'qerr
+Xum'quex
+Taeq'teq
+Xer'xaeq
+Teq'taq
+Xe'xuq
+Kerrxer
+Kerr'xaeq'kea
+Xeqteq
+Xeqxuq'qerr
+Kerr'xum'xe
+Xe'qux
+Xexaeq
+Qerrxaeq'qer
+Teqqux'kea
+Ke'xuer
+Xerqux'xeu
+Kaexaeq'xeu
+Xeq'qux
+Xeker
+Ke'xae
+Kerrxae'qux
+Kae'aeq'qerr
+Xeq'qux'xeu
+Xeqquex'xeu
+Kerr'xaeq
+Kerr'aeq
+Xaaqxae
+Xertaq'qux
+Xaaq'ker'xum
+Kae'xuer'xe
+Xue'aeq'xeu
+Qerr'xuq
+Kequex'qerr
+Xer'ter'xe
+Qerr'ter'qerr
+Xeq'keax'qux
+Keq'ker
+Ke'qux'qerr
+Xumter'qux
+Xue'qux'xe
+Xaeaeq
+Xumxuer'xeu
+Kerr'xuq'qux
+Keq'xaeq
+Xum'xuq'xeu
+Kerr'xer
+Xae'keax
+Kequex
+Kae'qux
+Keqkeax
+Qarrker
+Xaaqker'xum
+Xue'xaeq'qux
+Taeq'xaeq'xe
+Xue'xerr
+Teqkeax
+Xaaq'keax
+Ke'xaeq'qer
+Kerrxuer
+Kaeter'qux
+Qarr'xerr
+Xerxum'qux
+Xumqux
+Taeq'teq'xeu
+Qerrxuer'qer
+Xe'ker
+Qerrter'kea
+Kaeteq'qux
+Teq'xuer'xum
+Ke'xae'xeu
+Teqxuq'qer
+Keq'xaeq
+Xaaq'xae
+Xum'xer
+Xeter
+Xaaq'quex'kea
+Kexum
+Qarrkeax'qer
+Keq'xerr
+Qarrxerr'qerr
+Qarrxerr'qer
+Xer'ker
+Xaexum'xe
+Kaexerr'qux
+Xuexum
+Xaaq'xer
+Qerr'quex
+Qerr'ker
+Xum'teq'qerr
+Kerrxaeq
+Xeq'xae
+Xue'aeq'xe
+Qarr'xuer
+Qarr'xerr'qerr
+Kaexerr'xum
+Kaeter'xum
+Xuexuq
+Xuekeax'xeu
+Xaaq'ker
+Keqxer
+Teq'xer
+Qarrker
+Xer'ter
+Xae'ter'kea
+Ke'quex'xe
+Xaeter
+Xer'xae
+Qarr'xae'xum
+Xeqxuq
+Keqter'xum
+Xeker
+Taeqxerr'qer
+Keqxer'kea
+Xumquex
+Xaaq'xuq
+Kerrxum
+Xexerr
+Xerxerr'qerr
+Xaaq'xerr
+Xum'ker'qer
+Xequx
+Xer'xae
+Kaexerr'xe
+Xe'taq
+Xeq'xuer'qerr
+Xue'taq
+Teqxer
+Xaaq'xerr'xe
+Xer'quex'xum
+Xaeaeq
+Taeqaeq
+Xaeter'qer
+Xerkeax
+Xuequex'xe
+Keqxerr
+Taeqxae'qer
+Teqqux
+Xae'quex'qux
+Xe'xum
+Xaaqxer
+Xeq'aeq'xum
+Xuexuq'qerr
+Xe'taq'qux
+Qarr'xae
+Xe'keax'qer
+Qerrxum'qerr
+Xer'xer
+Qarr'quex'qerr
+Taeq'xer'qux
+Taeqtaq
+Ke'aeq'xum
+Xueter
+Kaeker
+Xeter'kea
+Qarrter
+Qerrxae
+Xaaqxum'xeu
+Xum'xuer
+Xe'xae
+Qarrter'qer
+Kequx
+Kerr'aeq'kea
+Teq'taq'kea
+Xexum'qerr
+Qerr'quex'xeu
+Xeker'qux
+Kerr'quex'qerr
+Xum'ker'qer
+Keqxuq'xeu
+Keqxuq'xeu
+Xer'teq'xum
+Kaeker'qerr
+Xumtaq
+Xexuer
+Xueter'xum
+Kaeteq
+Ke'teq
+Qerrxuq
+Teq'xum'qerr
+Xaaq'xae
+Keter'xum
+Xeqqux
+Xae'taq
+Qerrtaq'qux
+Keq'ter
+Xaequex'xum
+Kaeter
+Xaaqtaq
+Kae'xer'qer
+Kaequx
+Kae'xum
+Taeqaeq'qux
+Kexaeq'kea
+Xer'xae'qer
+Xae'ker
+Xue'xuer
+Xeq'taq'xe
+Kaexae'qux
+Teq'xae'xe
+Teq'xuer
+Qerrqux'xeu
+Xuexaeq
+Kerr'xuq'kea
+Xerquex'kea
+Keq'ker
+Kaexum
+Kerrquex
+Kexer
+Keq'quex'qerr
+Xae'xae
+Qerr'ker
+Kexerr
+Xaaqquex
+Keq'quex'xum
+Xerter'qux
+Xuexaeq'xe
+Xae'xuq'kea
+Kae'xuer'kea
+Xer'xum'kea
+Xer'quex'kea
+Kerrxuq'qux
+Qerrxuer
+Xeq'xerr'qerr
+Qarr'xuq'qux
+Xaaq'xuq
+Xerxaeq'qux
+Xertaq
+Kerr'teq'xeu
+Xer'aeq'kea
+Xe'ter'qerr
+Teq'xae
+Kerrxerr
+Taeqxaeq
+Xueker
+Keqxae'qerr
+Taeqkeax
+Kexaeq'xum
+Xuekeax'xe
+Xumxum
+Xeq'ter'xeu
+Taeqquex
+Xer'xer
+Keqxae'xeu
+Kaexum
+Keq'xaeq
+Qerr'quex'xum
+Kaexuq'qux
+Xaequx'xe
+Kae'xum
+Keqkeax
+Kexuer
+Xeter
+Xexuq'xeu
+Xe'aeq
+Xum'keax'xe
+Xer'ker'xum
+Xerxuq'qer
+Xaekeax'xe
+Kaequex'xe
+Keqxer
+Xeker'qer
+Teqker'qerr
+Keqxer
+Teq'xer
+Xaaq'xum
+Qerrter
+Ke'xuer
+Kae'xerr'xeu
+Qarrteq'kea
+Teq'aeq'qux
+Teq'xum'qux
+Xae'xuq
+Xaekeax
+Qerr'teq
+Kerrteq'qer
+Keqxerr
+Qarr'xerr'xum
+Kekeax
+Xae'xae'kea
+Xumteq
+Xuequx'qer
+Qarr'xer
+Taeq'xuq
+Ke'xum
+Kae'xerr
+Xumxum'qerr
+Keqteq'qer
+Teqker'qerr
+Qarr'keax
+Xeqxer
+Qarrxuq'xe
+Keqkeax
+Xaaq'ter'kea
+Xaaq'aeq
+Kerr'keax
+Keqxuer
+Qerr'xerr'kea
+Qarr'teq'qerr
+Kerr'teq'qerr
+Qarr'taq'qer
+Qarrxuer'xeu
+Kae'ter
+Keaeq'xum
+Teqker'xum
+Xaaq'aeq'qux
+Keq'qux'qer
+Xae'xuq'kea
+Ke'xuq'qux
+Qerr'qux
+Xaaq'qux'qer
+Xue'keax
+Xaaqxerr'kea
+Taeqteq'xe
+Xuetaq
+Xaaqxuq'qerr
+Qerrxae'xe
+Xeqxuer
+Xeqxaeq'xum
+Xue'ker'qer
+Kekeax'xeu
+Qarr'xae'qux
+Xae'ker'qux
+Qarr'xum'xum
+Xum'xaeq'xeu
+Qerrxer'qerr
+Xaeaeq'qer
+Xaaq'quex'qerr
+Qerr'aeq
+Xum'taq
+Kerr'xum'xeu
+Xaeaeq'kea
+Taeqxerr'kea
+Taeq'qux'xum
+Xaaq'xae
+Qerr'quex
+Qarrker
+Qarr'qux'xeu
+Xaaqaeq'qux
+Xuetaq
+Xaexum
+Xae'xaeq
+Xaaq'taq'xe
+Kerrxaeq'xe
+Kae'xer'kea
+Kerr'xae'qer
+Keqxum'qer
+Qarr'taq'xe
+Taeq'quex'qer
+Xum'xuer
+Xer'xuq'qerr
+Xeqteq'xum
+Xae'xaeq
+Xaekeax'qer
+Xeq'xum
+Qarr'ter'qer
+Qarr'xerr
+Kae'xae'xum
+Taeq'xuq
+Kae'xuq'kea
+Xue'xum'qux
+Xae'xerr
+Taeq'xaeq
+Xaexuq
+Xaequx
+Keqter
+Kae'xuer
+Xaaqaeq
+Kae'taq'xeu
+Keqter'kea
+Taeqaeq
+Xae'qux
+Qerr'qux
+Qarr'xuq'kea
+Xeq'xuer
+Keqqux
+Xaaq'taq'xum
+Kae'xerr
+Xue'xae'kea
+Qarraeq
+Taeq'xum
+Qerrxer
+Teq'xum
+Xaaq'ker'xeu
+Kerr'xaeq
+Xaaq'xerr'xeu
+Xaaqxuq'xeu
+Taeqter'qer
+Teq'xuer
+Xaaqker
+Qerr'xaeq'qux
+Qerr'quex'qux
+Xaaqxerr
+Keqtaq'xeu
+Kerrxuq
+Taeqxuq'xe
+Taeq'xuq
+Xexuq'qerr
+Taeq'xae'qux
+Kerr'aeq'qer
+Teqtaq
+Qerr'taq'xeu
+Xeqxaeq'kea
+Keteq
+Qarr'quex'xeu
+Kae'xer
+Xaaqxuer
+Xum'xum
+Taeqquex'xeu
+Xue'teq
+Xumxuq
+Teqxer
+Xaeteq'xum
+Kaexum'qerr
+Xaaq'qux
+Xe'xum
+Qerr'xaeq
+Keqxaeq'xe
+Xum'xerr
+Xuexaeq'xum
+Xaaq'xum'kea
+Xumteq
+Teq'keax'xeu
+Xaequex
+Ke'ker'kea
+Xeq'xuq
+Xaaq'quex'xeu
+Teq'teq'qux
+Qarr'keax
+Xequex
+Xeqqux
+Xerxerr'xum
+Kae'teq
+Xaaq'qux'xum
+Xuetaq'qer
+Xaexerr
+Xexuer
+Xaaq'xerr'qer
+Xexae'kea
+Xaexuq'qer
+Xe'ker
+Keq'quex'kea
+Qarrqux'qux
+Xaaqtaq'kea
+Teqxae
+Teq'xuq
+Ke'aeq
+Xae'aeq
+Kerr'ter
+Xue'xuq'qer
+Ke'xaeq
+Taeq'xuer'xeu
+Xeq'xae
+Qerrkeax'kea
+Xae'xuq
+Teq'keax
+Qerr'teq'qer
+Kaexuq'xe
+Qarrxaeq'xeu
+Qerrtaq
+Xe'ker'xum
+Kaexuer
+Teqxuer'xe
+Xumxuer'kea
+Kerr'xuer
+Xer'teq'xum
+Xumteq'qerr
+Ke'quex
+Taeq'aeq'qerr
+Xue'ter'xe
+Xeq'xae'xeu
+Xer'xum
+Qarr'xae
+Qerrker'qux
+Taeq'keax'xeu
+Xum'quex'xeu
+Kae'ter
+Xe'quex'xe
+Keqxum
+Kerr'quex'qer
+Xaaqxae'qer
+Xaaqteq'qer
+Keqqux
+Teq'aeq
+Keteq
+Xumxae'xum
+Xumxum
+Qarrxaeq'kea
+Keker
+Xeq'aeq'qer
+Teqter
+Qarrxaeq'kea
+Teq'quex
+Keqxum
+Teq'xuer
+Xumter'kea
+Qarr'xae
+Xae'xuer'xeu
+Xaaqxaeq'kea
+Qerr'xuq'xeu
+Xum'xae'qux
+Xumxaeq
+Xumxum
+Kexum'xe
+Kae'aeq
+Xer'teq
+Qarrxerr'xum
+Taeq'taq
+Taeq'taq'qux
+Kaexum'xeu
+Xumtaq
+Xae'xer
+Kerr'ker
+Qarr'xum'qer
+Qerr'xuer'qux
+Xue'qux'xe
+Qerr'qux'xum
+Teqquex'qerr
+Taeqquex
+Qarrxerr
+Ketaq
+Xekeax
+Kequex
+Xetaq
+Ke'xae'xe
+Teq'quex'qux
diff --git a/config/names/last_name_skrell.txt b/config/names/last_name_skrell.txt
index 5f67fbc536..393c07b6b6 100644
--- a/config/names/last_name_skrell.txt
+++ b/config/names/last_name_skrell.txt
@@ -1,600 +1,600 @@
-Xer'taq'qer
-Xaaq'ter'qux
-Xaaq'xuer
-Xerxuer'xum
-Qarrqux
-Xueaeq'qux
-Xe'aeq
-Keqter
-Xaexer
-Kaeteq
-Ke'aeq'xeu
-Kerrxum
-Teqxuq'xeu
-Xexaeq
-Qerr'xerr'xum
-Xaeker'qux
-Kexer'kea
-Ke'aeq
-Keqxae'kea
-Qarraeq'xe
-Xuekeax
-Keq'quex
-Kae'quex'qux
-Qerr'taq'xum
-Taeq'taq'xum
-Kae'xaeq'xe
-Xaaq'teq'qux
-Teqker
-Qerrxum'xeu
-Xeq'xaeq'xe
-Kae'keax
-Xue'xae
-Taeq'taq
-Keter'xeu
-Xumker'xe
-Teqteq
-Xexuer
-Qerrxerr
-Kaequex'qerr
-Kaequx'xe
-Xum'xaeq
-Xe'taq
-Xuexer
-Xe'qux'xeu
-Xe'xerr'kea
-Qerr'xum
-Xaaqtaq
-Xuexum'xum
-Qerrxer
-Xaexuq
-Xeq'aeq
-Xaaq'xaeq
-Xerqux
-Xeq'xuq'xeu
-Kaexum
-Taeqteq'xeu
-Kerrter'qux
-Xeq'teq
-Teqxae'xe
-Xae'ker'kea
-Keqxuq
-Xumxae'kea
-Xeq'xerr'kea
-Kae'quex
-Kae'ter
-Teqter'xe
-Xeq'xerr'xeu
-Xerxum'qux
-Xe'qux
-Qarr'aeq
-Xue'xum'xe
-Xaaq'ter'qux
-Teq'xer
-Kerrtaq
-Qerr'aeq
-Xaaq'aeq
-Xaaqxuer
-Qerr'quex
-Kaeker
-Xae'taq
-Teq'xaeq
-Xexuq
-Keqqux
-Kaeker
-Xeqxum
-Xae'taq'qerr
-Kexerr
-Ke'xerr'qux
-Xeraeq'xum
-Kae'qux'qux
-Xerkeax'xum
-Qarrxum
-Kaexuer
-Qerrquex
-Kerr'xer
-Xeq'taq
-Xeqker
-Kerrquex'xum
-Xeteq
-Qarrxuer
-Xaaqqux'qerr
-Xae'xer
-Xae'xae
-Taeqxuer'qerr
-Xumqux'qux
-Xuexerr'qerr
-Ke'xae'xum
-Xerxuer
-Xeqtaq
-Xeqquex
-Xuekeax
-Keq'xuq'qerr
-Xaeter
-Xumxerr
-Xeqxaeq'xe
-Xae'ker
-Qerr'ker
-Xeq'aeq
-Kae'keax
-Qerrkeax
-Xeqxerr
-Keqxaeq
-Xae'xuq
-Kerrkeax'qer
-Qarrxum'xum
-Teq'xum'xeu
-Kerrxer
-Xe'xum
-Kexae'xeu
-Xerxerr'xe
-Xum'ter
-Xe'keax
-Qarr'xer'kea
-Xaaq'aeq
-Xaaqker'qerr
-Ke'ker
-Qerr'xum
-Qerr'xae'xe
-Qarr'ter'xum
-Kaexerr
-Qarrtaq'qux
-Xumxaeq
-Xaeaeq'xe
-Qarr'xae'qux
-Xer'xum'qerr
-Kae'xuq
-Xaaq'qux'kea
-Teqtaq
-Kekeax
-Xe'keax'qerr
-Kerr'keax'qerr
-Xeqkeax
-Xer'xaeq
-Xerter'kea
-Xum'xuq'xe
-Teqaeq
-Ke'teq'qux
-Xer'xuq'kea
-Keq'xum'xeu
-Xerxuer'xeu
-Xum'keax'xum
-Xaaq'ter
-Xuetaq
-Taeq'xuer'qux
-Xuexum'xe
-Xeq'quex'kea
-Xum'xer
-Xeqaeq
-Qerr'ker
-Xumxum
-Xeqxum
-Xae'taq'qerr
-Taeq'ker
-Xue'xae'xe
-Xer'taq'xe
-Xum'xaeq
-Kaexuq'xum
-Kaexuq'qux
-Ke'xum'xum
-Qerr'xerr'xum
-Ke'xuq'qux
-Taeq'xaeq
-Xumtaq
-Xetaq
-Kaexerr'xum
-Kequx
-Xuexerr'xeu
-Xeaeq
-Keq'qux'kea
-Xeq'xaeq
-Xuexum
-Ke'xerr'xe
-Xe'xum
-Kerr'xaeq
-Xeqkeax'qux
-Kaeteq
-Xer'quex
-Teqaeq'qerr
-Xaexerr
-Xaeter
-Xumxuer'qer
-Teqxae
-Taeqtaq'qerr
-Kerr'qux
-Xuequex
-Xaaqtaq'kea
-Teq'keax
-Ke'xuer'kea
-Xum'quex'xeu
-Xaexer'kea
-Kerr'quex'xum
-Qarrxaeq'xum
-Kerr'xaeq'xeu
-Xaaq'xerr'xum
-Xeqxaeq
-Xaaqxae'xeu
-Qerrxae
-Xae'xer
-Xexer
-Qarrter'xe
-Xaaq'taq'xum
-Taeq'aeq
-Teq'xer
-Xaexae'xum
-Ke'aeq
-Teqxuer
-Qerrxuq
-Xaaq'ker
-Xeq'quex
-Kerr'qux
-Xekeax'qerr
-Kerr'qux'xum
-Ke'teq
-Qarrxae'xum
-Qerr'ter'qux
-Qerr'keax
-Taeqxuer'kea
-Qerr'xae
-Keqker'xeu
-Xueter
-Xae'teq'kea
-Xumkeax'qux
-Keq'keax
-Qarr'xerr'qux
-Xuekeax'qerr
-Taeq'xuq'xe
-Keq'aeq'xe
-Xue'xuer'qux
-Qerr'quex'qux
-Xaexerr'qux
-Qerrxaeq
-Qerr'xerr
-Qarr'xuer
-Qerrxae
-Taeq'xaeq'xeu
-Kerr'ter
-Kerrker'qux
-Kaexae'xum
-Kerrtaq'qerr
-Xae'aeq'qer
-Xer'xerr
-Kae'xuer'qux
-Qerr'xer'qerr
-Keq'taq'qer
-Taeqxer'xum
-Xaaq'xuq
-Xue'qux
-Taeq'xaeq
-Xe'teq'xe
-Teq'xuq
-Taeq'xum'qux
-Xaaqter'xum
-Taeq'taq
-Xaaqxerr'qer
-Xuetaq'qerr
-Xum'xae
-Qerrxer'xe
-Qerr'xaeq'kea
-Xeq'ker
-Xeqteq'qerr
-Kerr'aeq'qer
-Xum'teq'qerr
-Xuexuq'kea
-Xue'taq
-Xum'qux'xe
-Kerrker
-Xue'ter'xeu
-Xaexaeq
-Xaexerr'kea
-Teqtaq'kea
-Xuexuer'xe
-Xue'xae'xeu
-Taeq'quex
-Keqteq
-Kae'aeq'xum
-Teqaeq'qerr
-Xaaqxum
-Qarr'teq'qux
-Kaexer
-Xue'xum
-Qerrtaq'qer
-Taeq'teq'qux
-Xueter
-Xum'ker'xe
-Xue'keax
-Xum'quex'qerr
-Kaeaeq'qerr
-Xeqxae
-Keqxuer'xeu
-Xeqxum
-Teqxuq
-Kaeker
-Xaaq'taq
-Keqquex'kea
-Xe'ker
-Xeq'aeq'kea
-Xue'qux
-Xerxuq
-Taeq'quex
-Kequx'qux
-Xueker'qux
-Teqxum'qer
-Kerrxuq'qer
-Xerker
-Xue'xuer
-Xue'qux
-Taeq'xuq
-Keq'qux'xum
-Qarr'quex'xe
-Kae'xer'kea
-Qarr'xum'xeu
-Keqker'xum
-Ketaq
-Xue'teq
-Xuexerr
-Xeqker
-Xe'xum'xeu
-Xeq'ter'qerr
-Taeqxuq
-Kaeter
-Keq'taq
-Xum'xum
-Xumxuer'xum
-Teqter'qerr
-Keq'qux'xe
-Keq'xer'qer
-Xueaeq'xeu
-Taeqxuer'kea
-Keqxae'xeu
-Kae'taq
-Xerkeax
-Xeqker
-Kerrxer
-Taeq'xerr'xe
-Qerr'xerr'qerr
-Xe'ker'xe
-Kae'qux'qerr
-Kaequex
-Xaaq'teq'qer
-Xumxerr
-Xe'quex
-Qerr'xum'qux
-Qerrxae
-Qerrquex
-Kae'xae'qerr
-Qarrquex
-Kerrxae
-Xaaq'taq'xeu
-Qarr'xae'qux
-Xeqker
-Xaaqxuq'qer
-Xaaqter
-Xerxerr
-Xue'taq'qer
-Qarrxer'qerr
-Xae'ter'xum
-Kerrter'qerr
-Kerrter'kea
-Xae'aeq
-Xe'xer
-Teq'keax'xeu
-Kexum'xe
-Xueteq
-Kae'keax
-Xaaq'keax
-Xaaq'quex'qux
-Taeqqux
-Taeq'xum
-Xerxuer
-Qerrxer
-Xaexuer
-Teqter
-Qarr'xer
-Qarrxaeq'xum
-Ke'teq
-Teq'xae
-Kaexerr
-Qarr'teq
-Xer'ker
-Xaexuer'qux
-Xeq'qux
-Taeqxer
-Taeqxaeq
-Xumxuer
-Taeqxuer'qerr
-Kae'xuer
-Qerrter
-Taeq'aeq'kea
-Taeq'xer'xum
-Kerrter
-Xum'xuer
-Xue'ker'qux
-Xaaqter'qux
-Xue'ter'xe
-Xueteq
-Xaaq'xae
-Xaexerr'qerr
-Ke'aeq'qerr
-Xaaq'xuq'xeu
-Xuekeax
-Xumteq
-Xexuq
-Taeq'ker'xeu
-Xaaqaeq
-Qarrxum
-Xerxuq'xum
-Kaexerr
-Xeq'ter'xeu
-Keqaeq
-Xeqxuer'xum
-Teqkeax'xeu
-Kae'aeq'kea
-Ke'xerr
-Ke'xuq
-Kae'quex
-Xeqxae
-Kaeter
-Xeqxer
-Kae'xuer
-Taeqtaq'xum
-Teq'qux'xeu
-Xaequex'xum
-Qarrquex
-Xaaq'qux
-Keqquex
-Qerrker'qerr
-Xexae'xe
-Xerxae
-Xaaqker'kea
-Kexer'qerr
-Xaeaeq
-Xaaqqux
-Qarr'xer'qer
-Keq'xuq
-Kae'keax
-Qerr'teq'qer
-Kae'xaeq'qer
-Xaexer
-Kerrxer'xeu
-Kaekeax
-Xaaq'xaeq'xeu
-Xae'xae
-Qarr'keax
-Teqqux'qerr
-Xeq'ter'qerr
-Taeq'ker
-Qerrteq'xeu
-Keqqux'xeu
-Xaaqteq'qerr
-Teqteq'xe
-Xaaqter
-Xaaqkeax
-Xeqqux
-Xaaq'xerr
-Teq'ker'qerr
-Xer'taq'qerr
-Qarrxum'qux
-Xum'taq'qux
-Qarr'xer'xeu
-Xerxerr'qux
-Kerr'teq
-Xum'taq'kea
-Xaequex
-Kaeaeq'xe
-Xe'xaeq'xum
-Xuexuer'qer
-Kerrxuq
-Kerrxuer'qerr
-Kaeteq
-Xaaqxuer
-Xeq'xum'qerr
-Xumxer
-Xe'ter'xeu
-Xueaeq
-Keq'keax
-Xueter
-Xaexaeq
-Keqxaeq
-Ke'aeq
-Xumxum'qerr
-Xumxae'xum
-Xaaqxuer
-Ke'ker
-Ke'xer
-Xuekeax'qerr
-Keq'teq
-Kerr'ter'qux
-Xe'xerr
-Qerrxae
-Ke'quex'xeu
-Keqxuq
-Kerrxuer
-Keq'xae
-Qarr'xuq
-Xumxuq
-Qarr'teq'qer
-Xe'xae'xeu
-Xuexum
-Xequx
-Xaaq'teq'xum
-Xue'xuq
-Kae'quex'qer
-Qarrxer'qerr
-Xumaeq'xeu
-Qarrkeax
-Kae'xer'qux
-Xeq'qux'qer
-Xueker'qux
-Teqquex
-Xae'xaeq'xum
-Taeqkeax
-Xaaq'teq'qux
-Keqxerr'xe
-Xue'ter'xe
-Xe'xaeq
-Qerrker
-Xaexum'qer
-Keqteq'xum
-Taeq'xae'xum
-Kaexuer'qux
-Xe'ter
-Xae'taq'qux
-Qarr'aeq
-Xae'xum
-Qarrxum'xum
-Keqxer'xum
-Qarr'xerr
-Teqxae
-Ke'xae'xe
-Teqkeax'qux
-Xe'taq
-Xaetaq
-Keq'teq'kea
-Keqxaeq
-Xue'xuq
-Qarr'xerr'qer
-Xequex
-Keqxum
-Keqtaq
-Qarr'ker'xum
-Kerr'xer'qer
-Kerrxae'xum
-Xum'xae
-Kaequex'qux
-Xuequx'xe
-Xumquex'qer
-Taeqker
-Xae'quex
-Xer'teq'xe
-Xerxerr
-Ke'xuq'qer
-Taeqxerr'kea
-Xaaq'xaeq'kea
-Keq'teq
-Xue'aeq'xeu
-Xaaqxer'xeu
-Ke'ker'qerr
-Xue'quex
-Taeqtaq
-Teqter
-Kequex'xe
-Xuexuer'qerr
-Xeqxum
-Xue'taq
-Xer'xuq'qerr
-Xeqxaeq'xe
-Qerr'xaeq
-Xeqxae'qer
-Taeqtaq'kea
-Xer'teq
-Qerr'xaeq'xum
-Xaaq'xae
-Xum'xuq
-Xaaqxaeq
-Xaexum
-Xaaqxum'xe
-Xertaq
-Xuexuq'qerr
-Xaaq'xae'kea
-Qerr'teq'qer
+Xer'taq'qer
+Xaaq'ter'qux
+Xaaq'xuer
+Xerxuer'xum
+Qarrqux
+Xueaeq'qux
+Xe'aeq
+Keqter
+Xaexer
+Kaeteq
+Ke'aeq'xeu
+Kerrxum
+Teqxuq'xeu
+Xexaeq
+Qerr'xerr'xum
+Xaeker'qux
+Kexer'kea
+Ke'aeq
+Keqxae'kea
+Qarraeq'xe
+Xuekeax
+Keq'quex
+Kae'quex'qux
+Qerr'taq'xum
+Taeq'taq'xum
+Kae'xaeq'xe
+Xaaq'teq'qux
+Teqker
+Qerrxum'xeu
+Xeq'xaeq'xe
+Kae'keax
+Xue'xae
+Taeq'taq
+Keter'xeu
+Xumker'xe
+Teqteq
+Xexuer
+Qerrxerr
+Kaequex'qerr
+Kaequx'xe
+Xum'xaeq
+Xe'taq
+Xuexer
+Xe'qux'xeu
+Xe'xerr'kea
+Qerr'xum
+Xaaqtaq
+Xuexum'xum
+Qerrxer
+Xaexuq
+Xeq'aeq
+Xaaq'xaeq
+Xerqux
+Xeq'xuq'xeu
+Kaexum
+Taeqteq'xeu
+Kerrter'qux
+Xeq'teq
+Teqxae'xe
+Xae'ker'kea
+Keqxuq
+Xumxae'kea
+Xeq'xerr'kea
+Kae'quex
+Kae'ter
+Teqter'xe
+Xeq'xerr'xeu
+Xerxum'qux
+Xe'qux
+Qarr'aeq
+Xue'xum'xe
+Xaaq'ter'qux
+Teq'xer
+Kerrtaq
+Qerr'aeq
+Xaaq'aeq
+Xaaqxuer
+Qerr'quex
+Kaeker
+Xae'taq
+Teq'xaeq
+Xexuq
+Keqqux
+Kaeker
+Xeqxum
+Xae'taq'qerr
+Kexerr
+Ke'xerr'qux
+Xeraeq'xum
+Kae'qux'qux
+Xerkeax'xum
+Qarrxum
+Kaexuer
+Qerrquex
+Kerr'xer
+Xeq'taq
+Xeqker
+Kerrquex'xum
+Xeteq
+Qarrxuer
+Xaaqqux'qerr
+Xae'xer
+Xae'xae
+Taeqxuer'qerr
+Xumqux'qux
+Xuexerr'qerr
+Ke'xae'xum
+Xerxuer
+Xeqtaq
+Xeqquex
+Xuekeax
+Keq'xuq'qerr
+Xaeter
+Xumxerr
+Xeqxaeq'xe
+Xae'ker
+Qerr'ker
+Xeq'aeq
+Kae'keax
+Qerrkeax
+Xeqxerr
+Keqxaeq
+Xae'xuq
+Kerrkeax'qer
+Qarrxum'xum
+Teq'xum'xeu
+Kerrxer
+Xe'xum
+Kexae'xeu
+Xerxerr'xe
+Xum'ter
+Xe'keax
+Qarr'xer'kea
+Xaaq'aeq
+Xaaqker'qerr
+Ke'ker
+Qerr'xum
+Qerr'xae'xe
+Qarr'ter'xum
+Kaexerr
+Qarrtaq'qux
+Xumxaeq
+Xaeaeq'xe
+Qarr'xae'qux
+Xer'xum'qerr
+Kae'xuq
+Xaaq'qux'kea
+Teqtaq
+Kekeax
+Xe'keax'qerr
+Kerr'keax'qerr
+Xeqkeax
+Xer'xaeq
+Xerter'kea
+Xum'xuq'xe
+Teqaeq
+Ke'teq'qux
+Xer'xuq'kea
+Keq'xum'xeu
+Xerxuer'xeu
+Xum'keax'xum
+Xaaq'ter
+Xuetaq
+Taeq'xuer'qux
+Xuexum'xe
+Xeq'quex'kea
+Xum'xer
+Xeqaeq
+Qerr'ker
+Xumxum
+Xeqxum
+Xae'taq'qerr
+Taeq'ker
+Xue'xae'xe
+Xer'taq'xe
+Xum'xaeq
+Kaexuq'xum
+Kaexuq'qux
+Ke'xum'xum
+Qerr'xerr'xum
+Ke'xuq'qux
+Taeq'xaeq
+Xumtaq
+Xetaq
+Kaexerr'xum
+Kequx
+Xuexerr'xeu
+Xeaeq
+Keq'qux'kea
+Xeq'xaeq
+Xuexum
+Ke'xerr'xe
+Xe'xum
+Kerr'xaeq
+Xeqkeax'qux
+Kaeteq
+Xer'quex
+Teqaeq'qerr
+Xaexerr
+Xaeter
+Xumxuer'qer
+Teqxae
+Taeqtaq'qerr
+Kerr'qux
+Xuequex
+Xaaqtaq'kea
+Teq'keax
+Ke'xuer'kea
+Xum'quex'xeu
+Xaexer'kea
+Kerr'quex'xum
+Qarrxaeq'xum
+Kerr'xaeq'xeu
+Xaaq'xerr'xum
+Xeqxaeq
+Xaaqxae'xeu
+Qerrxae
+Xae'xer
+Xexer
+Qarrter'xe
+Xaaq'taq'xum
+Taeq'aeq
+Teq'xer
+Xaexae'xum
+Ke'aeq
+Teqxuer
+Qerrxuq
+Xaaq'ker
+Xeq'quex
+Kerr'qux
+Xekeax'qerr
+Kerr'qux'xum
+Ke'teq
+Qarrxae'xum
+Qerr'ter'qux
+Qerr'keax
+Taeqxuer'kea
+Qerr'xae
+Keqker'xeu
+Xueter
+Xae'teq'kea
+Xumkeax'qux
+Keq'keax
+Qarr'xerr'qux
+Xuekeax'qerr
+Taeq'xuq'xe
+Keq'aeq'xe
+Xue'xuer'qux
+Qerr'quex'qux
+Xaexerr'qux
+Qerrxaeq
+Qerr'xerr
+Qarr'xuer
+Qerrxae
+Taeq'xaeq'xeu
+Kerr'ter
+Kerrker'qux
+Kaexae'xum
+Kerrtaq'qerr
+Xae'aeq'qer
+Xer'xerr
+Kae'xuer'qux
+Qerr'xer'qerr
+Keq'taq'qer
+Taeqxer'xum
+Xaaq'xuq
+Xue'qux
+Taeq'xaeq
+Xe'teq'xe
+Teq'xuq
+Taeq'xum'qux
+Xaaqter'xum
+Taeq'taq
+Xaaqxerr'qer
+Xuetaq'qerr
+Xum'xae
+Qerrxer'xe
+Qerr'xaeq'kea
+Xeq'ker
+Xeqteq'qerr
+Kerr'aeq'qer
+Xum'teq'qerr
+Xuexuq'kea
+Xue'taq
+Xum'qux'xe
+Kerrker
+Xue'ter'xeu
+Xaexaeq
+Xaexerr'kea
+Teqtaq'kea
+Xuexuer'xe
+Xue'xae'xeu
+Taeq'quex
+Keqteq
+Kae'aeq'xum
+Teqaeq'qerr
+Xaaqxum
+Qarr'teq'qux
+Kaexer
+Xue'xum
+Qerrtaq'qer
+Taeq'teq'qux
+Xueter
+Xum'ker'xe
+Xue'keax
+Xum'quex'qerr
+Kaeaeq'qerr
+Xeqxae
+Keqxuer'xeu
+Xeqxum
+Teqxuq
+Kaeker
+Xaaq'taq
+Keqquex'kea
+Xe'ker
+Xeq'aeq'kea
+Xue'qux
+Xerxuq
+Taeq'quex
+Kequx'qux
+Xueker'qux
+Teqxum'qer
+Kerrxuq'qer
+Xerker
+Xue'xuer
+Xue'qux
+Taeq'xuq
+Keq'qux'xum
+Qarr'quex'xe
+Kae'xer'kea
+Qarr'xum'xeu
+Keqker'xum
+Ketaq
+Xue'teq
+Xuexerr
+Xeqker
+Xe'xum'xeu
+Xeq'ter'qerr
+Taeqxuq
+Kaeter
+Keq'taq
+Xum'xum
+Xumxuer'xum
+Teqter'qerr
+Keq'qux'xe
+Keq'xer'qer
+Xueaeq'xeu
+Taeqxuer'kea
+Keqxae'xeu
+Kae'taq
+Xerkeax
+Xeqker
+Kerrxer
+Taeq'xerr'xe
+Qerr'xerr'qerr
+Xe'ker'xe
+Kae'qux'qerr
+Kaequex
+Xaaq'teq'qer
+Xumxerr
+Xe'quex
+Qerr'xum'qux
+Qerrxae
+Qerrquex
+Kae'xae'qerr
+Qarrquex
+Kerrxae
+Xaaq'taq'xeu
+Qarr'xae'qux
+Xeqker
+Xaaqxuq'qer
+Xaaqter
+Xerxerr
+Xue'taq'qer
+Qarrxer'qerr
+Xae'ter'xum
+Kerrter'qerr
+Kerrter'kea
+Xae'aeq
+Xe'xer
+Teq'keax'xeu
+Kexum'xe
+Xueteq
+Kae'keax
+Xaaq'keax
+Xaaq'quex'qux
+Taeqqux
+Taeq'xum
+Xerxuer
+Qerrxer
+Xaexuer
+Teqter
+Qarr'xer
+Qarrxaeq'xum
+Ke'teq
+Teq'xae
+Kaexerr
+Qarr'teq
+Xer'ker
+Xaexuer'qux
+Xeq'qux
+Taeqxer
+Taeqxaeq
+Xumxuer
+Taeqxuer'qerr
+Kae'xuer
+Qerrter
+Taeq'aeq'kea
+Taeq'xer'xum
+Kerrter
+Xum'xuer
+Xue'ker'qux
+Xaaqter'qux
+Xue'ter'xe
+Xueteq
+Xaaq'xae
+Xaexerr'qerr
+Ke'aeq'qerr
+Xaaq'xuq'xeu
+Xuekeax
+Xumteq
+Xexuq
+Taeq'ker'xeu
+Xaaqaeq
+Qarrxum
+Xerxuq'xum
+Kaexerr
+Xeq'ter'xeu
+Keqaeq
+Xeqxuer'xum
+Teqkeax'xeu
+Kae'aeq'kea
+Ke'xerr
+Ke'xuq
+Kae'quex
+Xeqxae
+Kaeter
+Xeqxer
+Kae'xuer
+Taeqtaq'xum
+Teq'qux'xeu
+Xaequex'xum
+Qarrquex
+Xaaq'qux
+Keqquex
+Qerrker'qerr
+Xexae'xe
+Xerxae
+Xaaqker'kea
+Kexer'qerr
+Xaeaeq
+Xaaqqux
+Qarr'xer'qer
+Keq'xuq
+Kae'keax
+Qerr'teq'qer
+Kae'xaeq'qer
+Xaexer
+Kerrxer'xeu
+Kaekeax
+Xaaq'xaeq'xeu
+Xae'xae
+Qarr'keax
+Teqqux'qerr
+Xeq'ter'qerr
+Taeq'ker
+Qerrteq'xeu
+Keqqux'xeu
+Xaaqteq'qerr
+Teqteq'xe
+Xaaqter
+Xaaqkeax
+Xeqqux
+Xaaq'xerr
+Teq'ker'qerr
+Xer'taq'qerr
+Qarrxum'qux
+Xum'taq'qux
+Qarr'xer'xeu
+Xerxerr'qux
+Kerr'teq
+Xum'taq'kea
+Xaequex
+Kaeaeq'xe
+Xe'xaeq'xum
+Xuexuer'qer
+Kerrxuq
+Kerrxuer'qerr
+Kaeteq
+Xaaqxuer
+Xeq'xum'qerr
+Xumxer
+Xe'ter'xeu
+Xueaeq
+Keq'keax
+Xueter
+Xaexaeq
+Keqxaeq
+Ke'aeq
+Xumxum'qerr
+Xumxae'xum
+Xaaqxuer
+Ke'ker
+Ke'xer
+Xuekeax'qerr
+Keq'teq
+Kerr'ter'qux
+Xe'xerr
+Qerrxae
+Ke'quex'xeu
+Keqxuq
+Kerrxuer
+Keq'xae
+Qarr'xuq
+Xumxuq
+Qarr'teq'qer
+Xe'xae'xeu
+Xuexum
+Xequx
+Xaaq'teq'xum
+Xue'xuq
+Kae'quex'qer
+Qarrxer'qerr
+Xumaeq'xeu
+Qarrkeax
+Kae'xer'qux
+Xeq'qux'qer
+Xueker'qux
+Teqquex
+Xae'xaeq'xum
+Taeqkeax
+Xaaq'teq'qux
+Keqxerr'xe
+Xue'ter'xe
+Xe'xaeq
+Qerrker
+Xaexum'qer
+Keqteq'xum
+Taeq'xae'xum
+Kaexuer'qux
+Xe'ter
+Xae'taq'qux
+Qarr'aeq
+Xae'xum
+Qarrxum'xum
+Keqxer'xum
+Qarr'xerr
+Teqxae
+Ke'xae'xe
+Teqkeax'qux
+Xe'taq
+Xaetaq
+Keq'teq'kea
+Keqxaeq
+Xue'xuq
+Qarr'xerr'qer
+Xequex
+Keqxum
+Keqtaq
+Qarr'ker'xum
+Kerr'xer'qer
+Kerrxae'xum
+Xum'xae
+Kaequex'qux
+Xuequx'xe
+Xumquex'qer
+Taeqker
+Xae'quex
+Xer'teq'xe
+Xerxerr
+Ke'xuq'qer
+Taeqxerr'kea
+Xaaq'xaeq'kea
+Keq'teq
+Xue'aeq'xeu
+Xaaqxer'xeu
+Ke'ker'qerr
+Xue'quex
+Taeqtaq
+Teqter
+Kequex'xe
+Xuexuer'qerr
+Xeqxum
+Xue'taq
+Xer'xuq'qerr
+Xeqxaeq'xe
+Qerr'xaeq
+Xeqxae'qer
+Taeqtaq'kea
+Xer'teq
+Qerr'xaeq'xum
+Xaaq'xae
+Xum'xuq
+Xaaqxaeq
+Xaexum
+Xaaqxum'xe
+Xertaq
+Xuexuq'qerr
+Xaaq'xae'kea
+Qerr'teq'qer
diff --git a/html/changelog.html b/html/changelog.html
index a93c2f038b..f553d99325 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -53,6 +53,37 @@
-->
+
13 October 2018
+
Anewbe updated:
+
+ - You can no longer have ALL of your blood punched out.
+ - Haemophiliacs will no longer spontaneously have ALL of their blood go missing from ~90%.
+ - Emitters can be locked while off, too.
+ - Graves are now a thing in the code, will need some testing and probably more work before they get more common.
+
+
Mechoid updated:
+
+ - Added a RIG customization kit.
+ - RIGs now use a var called suit_state to determine the basis for their component icons, rather than the rig's icon state.
+
+
+
22 September 2018
+
Mechoid updated:
+
+ - Adds two vehicles to Robotics and Cargo, the Quad and Spacebike.
+
+
Poojawa updated:
+
+ - Ported /vg/ instrument code, improved the UI of instruments.
+ - Added a client side pref that mutes instruments being played for you.
+
+
Woodrat updated:
+
+ - Adds two rig suits. Military Rig suit from Bay and PMC rigsuit
+ - Adds four exploration and pilot voidsuits (alternate sprites by Naidh)
+ - Adds exploration and pilot voidsuits
+
+
28 August 2018
Mechoid updated:
diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml
index ca2f07ec1a..f0fe92cc80 100644
--- a/html/changelogs/.all_changelog.yml
+++ b/html/changelogs/.all_changelog.yml
@@ -4218,3 +4218,25 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
- rscadd: Mechs now have multiple equipment slot types, and more slots in total
for greater customization.
- rscadd: A large number of Mech weapon modules and their jury rigged versions.
+2018-09-22:
+ Mechoid:
+ - rscadd: Adds two vehicles to Robotics and Cargo, the Quad and Spacebike.
+ Poojawa:
+ - rscadd: Ported /vg/ instrument code, improved the UI of instruments.
+ - rscadd: Added a client side pref that mutes instruments being played for you.
+ Woodrat:
+ - rscadd: Adds two rig suits. Military Rig suit from Bay and PMC rigsuit
+ - rscadd: Adds four exploration and pilot voidsuits (alternate sprites by Naidh)
+ - rscadd: Adds exploration and pilot voidsuits
+2018-10-13:
+ Anewbe:
+ - bugfix: You can no longer have ALL of your blood punched out.
+ - bugfix: Haemophiliacs will no longer spontaneously have ALL of their blood go
+ missing from ~90%.
+ - rscadd: Emitters can be locked while off, too.
+ - rscadd: Graves are now a thing in the code, will need some testing and probably
+ more work before they get more common.
+ Mechoid:
+ - rscadd: Added a RIG customization kit.
+ - tweak: RIGs now use a var called suit_state to determine the basis for their component
+ icons, rather than the rig's icon state.
diff --git a/html/changelogs/Woodrat - XenoMove.yml b/html/changelogs/Woodrat - XenoMove.yml
new file mode 100644
index 0000000000..1173591076
--- /dev/null
+++ b/html/changelogs/Woodrat - XenoMove.yml
@@ -0,0 +1,37 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+#################################
+
+# Your name.
+author: Woodrat
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - rscadd: "Xenoflora and Xenobio Addition to station, first deck."
+ - bugfix: "Minor bugfixes including mislabeled lockers in robotics and floor decals."
diff --git a/icons/effects/96x96.dmi b/icons/effects/96x96.dmi
index 841c17d3f5..ea6cdc9545 100644
Binary files a/icons/effects/96x96.dmi and b/icons/effects/96x96.dmi differ
diff --git a/icons/effects/beam.dmi b/icons/effects/beam.dmi
index 915b9d8bc6..20d6c5c8f0 100644
Binary files a/icons/effects/beam.dmi and b/icons/effects/beam.dmi differ
diff --git a/icons/mob/custom_items_rig_boots.dmi b/icons/mob/custom_items_rig_boots.dmi
new file mode 100644
index 0000000000..cf74d73796
Binary files /dev/null and b/icons/mob/custom_items_rig_boots.dmi differ
diff --git a/icons/mob/custom_items_rig_gloves.dmi b/icons/mob/custom_items_rig_gloves.dmi
new file mode 100644
index 0000000000..cf74d73796
Binary files /dev/null and b/icons/mob/custom_items_rig_gloves.dmi differ
diff --git a/icons/mob/custom_items_rig_helmet.dmi b/icons/mob/custom_items_rig_helmet.dmi
new file mode 100644
index 0000000000..cf74d73796
Binary files /dev/null and b/icons/mob/custom_items_rig_helmet.dmi differ
diff --git a/icons/mob/custom_items_rig_suit.dmi b/icons/mob/custom_items_rig_suit.dmi
new file mode 100644
index 0000000000..cf74d73796
Binary files /dev/null and b/icons/mob/custom_items_rig_suit.dmi differ
diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi
index 77950aa4a5..b9c1414f19 100644
Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ
diff --git a/icons/obj/ammo.dmi b/icons/obj/ammo.dmi
index e225bf7777..5392f89062 100644
Binary files a/icons/obj/ammo.dmi and b/icons/obj/ammo.dmi differ
diff --git a/icons/obj/closet.dmi b/icons/obj/closet.dmi
index 5fd95e85d7..80fb1712be 100644
Binary files a/icons/obj/closet.dmi and b/icons/obj/closet.dmi differ
diff --git a/icons/obj/contraband.dmi b/icons/obj/contraband.dmi
index b0abd6ec61..7e37655180 100644
Binary files a/icons/obj/contraband.dmi and b/icons/obj/contraband.dmi differ
diff --git a/icons/obj/drinks.dmi b/icons/obj/drinks.dmi
index 51d3f4d369..5adcea97c7 100644
Binary files a/icons/obj/drinks.dmi and b/icons/obj/drinks.dmi differ
diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi
index 0a9ae62c72..1494841bea 100644
Binary files a/icons/obj/gun.dmi and b/icons/obj/gun.dmi differ
diff --git a/icons/obj/machines/mining_machines.dmi b/icons/obj/machines/mining_machines.dmi
index af660e2475..e3a1796377 100644
Binary files a/icons/obj/machines/mining_machines.dmi and b/icons/obj/machines/mining_machines.dmi differ
diff --git a/icons/obj/mining.dmi b/icons/obj/mining.dmi
index 7b00c401d2..b4401c872a 100644
Binary files a/icons/obj/mining.dmi and b/icons/obj/mining.dmi differ
diff --git a/icons/obj/projectiles.dmi b/icons/obj/projectiles.dmi
index d6f6cd0c6f..731346ad0c 100644
Binary files a/icons/obj/projectiles.dmi and b/icons/obj/projectiles.dmi differ
diff --git a/interface/interface.dm b/interface/interface.dm
index 9adcfc965a..6ecfde4e7c 100644
--- a/interface/interface.dm
+++ b/interface/interface.dm
@@ -6,7 +6,7 @@
if(config.wikiurl)
if(query)
if(config.wikisearchurl)
- var/output = replacetext(config.wikisearchurl, "%s", url_encode(query))
+ var/output = replacetext(config.wikisearchurl, "%s", url_encode(query))
src << link(output)
else
src << " The wiki search URL is not set in the server configuration."
diff --git a/maps/northern_star/polaris-5.dmm b/maps/northern_star/polaris-5.dmm
index 96b7a63435..40c415c0a5 100644
--- a/maps/northern_star/polaris-5.dmm
+++ b/maps/northern_star/polaris-5.dmm
@@ -1587,7 +1587,7 @@
"EA" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
"EB" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/blue{d2 = 8; icon_state = "0-8"},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/turf/simulated/floor/tiled,/area/outpost/mining_main/eva)
"EC" = (/obj/structure/table/rack,/obj/item/weapon/pickaxe,/obj/item/weapon/tool/wrench,/obj/item/weapon/tool/crowbar,/obj/item/weapon/shovel,/obj/machinery/light,/turf/simulated/floor/tiled/dark,/area/outpost/mining_main/storage)
-"ED" = (/obj/structure/table/rack,/obj/item/weapon/pickaxe/hammer,/obj/item/weapon/tool/wrench,/obj/item/weapon/tool/crowbar,/obj/item/weapon/shovel,/turf/simulated/floor/tiled/dark,/area/outpost/mining_main/storage)
+"ED" = (/obj/structure/table/rack,/obj/item/weapon/pickaxe,/obj/item/weapon/tool/wrench,/obj/item/weapon/tool/crowbar,/obj/item/weapon/shovel,/turf/simulated/floor/tiled/dark,/area/outpost/mining_main/storage)
"EE" = (/turf/simulated/wall,/area/outpost/mining_main/storage)
"EF" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/machinery/camera/network/mining{c_tag = "OPM - Mining Hallway Aft"; dir = 4},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled,/area/outpost/mining_main/south_hall)
"EG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled,/area/outpost/mining_main/south_hall)
diff --git a/maps/southern_cross/southern_cross-1.dmm b/maps/southern_cross/southern_cross-1.dmm
index 11711d916c..f2fe74d3be 100644
--- a/maps/southern_cross/southern_cross-1.dmm
+++ b/maps/southern_cross/southern_cross-1.dmm
@@ -263,7 +263,7 @@
"afc" = (/obj/effect/floor_decal/borderfloorblack,/obj/effect/floor_decal/industrial/danger,/turf/simulated/floor/tiled,/area/hangar/one)
"afd" = (/obj/effect/floor_decal/borderfloorblack/corner{dir = 8},/obj/effect/floor_decal/industrial/danger/corner{dir = 1},/turf/simulated/floor/tiled,/area/hangar/one)
"afe" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/plating,/area/maintenance/firstdeck/foreport)
-"aff" = (/obj/machinery/atmospherics/pipe/manifold/hidden,/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 9},/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/firstdeck/foreport)
+"aff" = (/obj/effect/landmark{name = "carpspawn"},/turf/space,/area/shuttle/syndicate_elite/station)
"afg" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/simulated/floor/plating,/area/maintenance/firstdeck/foreport)
"afh" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4; icon_state = "map"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/table/rack,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/turf/simulated/floor/plating,/area/maintenance/firstdeck/foreport)
"afi" = (/obj/structure/closet/crate/engineering,/obj/fiftyspawner/steel,/obj/fiftyspawner/glass,/turf/simulated/floor/plating,/area/construction/firstdeck/construction5)
@@ -612,7 +612,7 @@
"alN" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/monotile,/area/hangar/three)
"alO" = (/turf/simulated/floor/plating,/area/maintenance/firstdeck/centralstarboard)
"alP" = (/obj/structure/loot_pile/maint/trash,/turf/simulated/floor/plating,/area/maintenance/firstdeck/centralstarboard)
-"alQ" = (/turf/simulated/wall,/area/maintenance/firstdeck/centralstarboard)
+"alQ" = (/obj/machinery/atmospherics/pipe/manifold/hidden,/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 9},/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/firstdeck/foreport)
"alR" = (/turf/simulated/shuttle/wall/hard_corner,/area/shuttle/large_escape_pod2/station)
"alS" = (/obj/structure/bed/chair,/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/shuttle/floor/white,/area/shuttle/large_escape_pod2/station)
"alT" = (/obj/structure/bed/chair,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/shuttle/floor/white,/area/shuttle/large_escape_pod2/station)
@@ -633,7 +633,7 @@
"ami" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/fscenter)
"amj" = (/obj/structure/closet,/obj/item/device/flashlight,/obj/effect/decal/cleanable/cobweb2,/obj/item/weapon/storage/backpack/satchel/vir,/obj/item/weapon/storage/backpack/virology,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/turf/simulated/floor/plating,/area/maintenance/firstdeck/forestarboard)
"amk" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/monotile,/area/hangar/three)
-"aml" = (/obj/effect/decal/cleanable/blood/oil/streak{amount = 0},/turf/simulated/floor/plating,/area/maintenance/firstdeck/centralstarboard)
+"aml" = (/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/firstdeck/forestarboard)
"amm" = (/obj/structure/grille,/obj/structure/shuttle/window,/turf/simulated/shuttle/plating,/area/shuttle/large_escape_pod2/station)
"amn" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor/white,/area/shuttle/large_escape_pod2/station)
"amo" = (/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod2/station)
@@ -664,7 +664,7 @@
"amN" = (/obj/structure/closet/crate/medical,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/random/maintenance/clean,/turf/simulated/floor,/area/maintenance/firstdeck/forestarboard)
"amO" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/green/border{dir = 8},/obj/structure/closet/crate,/turf/simulated/floor/tiled,/area/hangar/three)
"amP" = (/obj/structure/extinguisher_cabinet{pixel_x = 25},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/green/border{dir = 4},/turf/simulated/floor/tiled,/area/hangar/three)
-"amQ" = (/obj/random/toolbox,/turf/simulated/floor/plating,/area/maintenance/firstdeck/centralstarboard)
+"amQ" = (/turf/simulated/floor/airless,/area/rnd/xenobiology/xenoflora)
"amR" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/vending/wallmed1{layer = 3.3; name = "Emergency NanoMed"; pixel_x = -28; pixel_y = 0},/turf/simulated/shuttle/floor/white,/area/shuttle/large_escape_pod2/station)
"amS" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/ai_status_display{pixel_y = -32},/turf/simulated/shuttle/floor/white,/area/shuttle/large_escape_pod2/station)
"amT" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/light,/turf/simulated/shuttle/floor/white,/area/shuttle/large_escape_pod2/station)
@@ -701,8 +701,8 @@
"any" = (/obj/effect/floor_decal/borderfloorblack/corner{dir = 1},/obj/effect/floor_decal/industrial/danger/corner{dir = 8},/turf/simulated/floor/tiled,/area/hangar/three)
"anz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor/tiled/monotile,/area/hangar/three)
"anA" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/green/border{dir = 4},/obj/structure/closet/emcloset,/turf/simulated/floor/tiled,/area/hangar/three)
-"anB" = (/obj/item/stack/cable_coil/random,/turf/simulated/floor/plating,/area/maintenance/firstdeck/centralstarboard)
-"anC" = (/obj/random/tool,/turf/simulated/floor/plating,/area/maintenance/firstdeck/centralstarboard)
+"anB" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2; external_pressure_bound = 140; external_pressure_bound_default = 140; icon_state = "map_vent_out"; pressure_checks = 1; pressure_checks_default = 1; use_power = 1},/turf/simulated/floor/airless,/area/rnd/xenobiology/xenoflora)
+"anC" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/rnd/xenobiology/xenoflora_isolation)
"anD" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "large_escape_pod_2_hatch"; locked = 1; name = "Large Escape Pod Hatch 2"; req_access = list(13)},/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod2/station)
"anE" = (/turf/simulated/floor/airless,/obj/structure/shuttle/engine/propulsion{dir = 4; icon_state = "propulsion_l"},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/large_escape_pod2/station)
"anF" = (/obj/machinery/space_heater,/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/green/border{dir = 8},/turf/simulated/floor/tiled,/area/hangar/one)
@@ -748,7 +748,7 @@
"aot" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/tiled/monotile,/area/hangar/three)
"aou" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor/tiled/monotile,/area/hangar/three)
"aov" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/green/border{dir = 4},/obj/structure/closet/emcloset,/turf/simulated/floor/tiled,/area/hangar/three)
-"aow" = (/obj/random/technology_scanner,/turf/simulated/floor/plating,/area/maintenance/firstdeck/centralstarboard)
+"aow" = (/turf/simulated/wall/r_wall,/area/rnd/xenobiology/xenoflora_isolation)
"aox" = (/obj/machinery/door/airlock/glass_external{frequency = 1380; icon_state = "door_locked"; id_tag = "large_escape_pod_2_berth_hatch"; locked = 1; name = "Large Escape Pod 2"; req_access = list(13)},/turf/simulated/floor/plating,/area/hallway/secondary/escape/firstdeck/ep_port)
"aoy" = (/turf/simulated/wall/r_wall,/area/hallway/secondary/escape/firstdeck/ep_port)
"aoz" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass_mining{id_tag = "hangar_1_door"; name = "Hangar Bay"},/turf/simulated/floor/tiled/steel_grid,/area/hangar/one)
@@ -786,7 +786,7 @@
"apf" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/door/airlock/glass_mining{name = "Hangar Bay"},/turf/simulated/floor/tiled/steel_grid,/area/hangar/three)
"apg" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass_mining{name = "Hangar Bay"},/turf/simulated/floor/tiled/steel_grid,/area/hangar/three)
"aph" = (/turf/simulated/wall/r_wall,/area/hallway/secondary/escape/firstdeck/ep_starboard1)
-"api" = (/obj/machinery/door/airlock/glass_external{icon_state = "door_locked"; locked = 1; name = "Large Escape Pod 3"},/turf/simulated/floor/plating,/area/hallway/secondary/escape/firstdeck/ep_starboard1)
+"api" = (/turf/simulated/wall/r_wall,/area/rnd/research/firstdeck/hallway)
"apj" = (/obj/structure/table/rack,/obj/item/weapon/extinguisher,/obj/item/weapon/storage/belt/utility,/obj/item/clothing/mask/gas,/turf/simulated/floor/plating,/area/maintenance/firstdeck/centralport)
"apk" = (/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/firstdeck/centralport)
"apl" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/firstdeck/centralport)
@@ -855,7 +855,7 @@
"aqw" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/firstdeck/ep_starboard1)
"aqx" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/firstdeck/ep_starboard1)
"aqy" = (/obj/machinery/light/small{dir = 8},/obj/structure/closet/emcloset,/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/firstdeck/centralstarboard)
-"aqz" = (/obj/item/weapon/extinguisher,/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/firstdeck/centralstarboard)
+"aqz" = (/turf/simulated/wall/r_wall,/area/rnd/xenobiology/xenoflora)
"aqA" = (/obj/machinery/alarm{pixel_y = 22},/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/firstdeck/centralstarboard)
"aqB" = (/obj/machinery/floodlight,/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/firstdeck/centralstarboard)
"aqC" = (/obj/structure/table/rack,/obj/item/weapon/extinguisher,/obj/item/weapon/storage/belt/utility,/obj/item/clothing/mask/gas,/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/firstdeck/centralstarboard)
@@ -920,11 +920,11 @@
"arJ" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/white/border{dir = 8},/obj/effect/floor_decal/borderfloor/corner2{dir = 10},/obj/effect/floor_decal/corner/white/bordercorner2{dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/firstdeck/ep_starboard1)
"arK" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled,/area/hallway/secondary/escape/firstdeck/ep_starboard1)
"arL" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/firstdeck/ep_starboard1)
-"arM" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/firstdeck/ep_starboard1)
+"arM" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/rnd/xenobiology/xenoflora)
"arN" = (/obj/structure/extinguisher_cabinet{pixel_y = -30},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/firstdeck/ep_starboard1)
"arO" = (/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/firstdeck/ep_starboard1)
"arP" = (/obj/effect/floor_decal/steeldecal/steel_decals4,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/firstdeck/ep_starboard1)
-"arQ" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/maintenance{req_access = list(12)},/turf/simulated/floor/plating,/area/maintenance/firstdeck/centralstarboard)
+"arQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/wall/r_wall,/area/rnd/xenobiology/xenoflora)
"arR" = (/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/firstdeck/centralstarboard)
"arS" = (/obj/machinery/space_heater,/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/firstdeck/centralport)
"arT" = (/turf/simulated/wall/r_wall,/area/hallway/primary/firstdeck/port)
@@ -1404,7 +1404,7 @@
"aAZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/extinguisher_cabinet{pixel_y = 30},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/firstdeck/ep_starboard2)
"aBa" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/firealarm{pixel_y = 24},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/firstdeck/ep_starboard2)
"aBb" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals4,/turf/simulated/floor/tiled,/area/hallway/secondary/escape/firstdeck/ep_starboard2)
-"aBc" = (/obj/machinery/door/firedoor/border_only,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/maintenance{req_access = list(12)},/turf/simulated/floor/plating,/area/maintenance/firstdeck/centralstarboard)
+"aBc" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/machinery/atmospherics/portables_connector,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora_isolation)
"aBd" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/firstdeck/centralstarboard)
"aBe" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/firstdeck/centralstarboard)
"aBf" = (/obj/random/obstruction,/turf/simulated/floor/plating,/area/maintenance/firstdeck/centralport)
@@ -1995,7 +1995,7 @@
"aMs" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled/steel_dirty,/area/engineering/auxiliary_engineering)
"aMt" = (/obj/machinery/computer/security/engineering,/obj/machinery/light{dir = 1},/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled/steel_dirty,/area/engineering/auxiliary_engineering)
"aMu" = (/obj/machinery/space_heater,/turf/simulated/floor/tiled/steel_dirty,/area/engineering/auxiliary_engineering)
-"aMv" = (/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/firstdeck/forestarboard)
+"aMv" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/machinery/atmospherics/portables_connector,/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora_isolation)
"aMw" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"},/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled/steel_dirty,/area/engineering/auxiliary_engineering)
"aMx" = (/obj/machinery/atmospherics/binary/pump/high_power/on{dir = 4; name = "Pump station in"; target_pressure = 4500},/obj/machinery/firealarm{pixel_y = 24},/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled/steel_dirty,/area/engineering/auxiliary_engineering)
"aMy" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{dir = 1},/obj/machinery/light{dir = 1},/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled/steel_dirty,/area/engineering/auxiliary_engineering)
@@ -2130,7 +2130,7 @@
"aOX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/binary/pump/on{dir = 8; target_pressure = 200},/turf/simulated/floor/plating,/area/maintenance/firstdeck/aftstarboard)
"aOY" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal{dir = 4},/obj/effect/floor_decal/industrial/warning/corner,/turf/simulated/floor/plating,/area/maintenance/firstdeck/aftstarboard)
"aOZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/maintenance/firstdeck/aftstarboard)
-"aPa" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/firstdeck/foreport)
+"aPa" = (/obj/machinery/camera/network/research{c_tag = "SCI - Xenoflora Isolation Fore"; dir = 2},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora_isolation)
"aPb" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/plating,/area/maintenance/firstdeck/aftstarboard)
"aPc" = (/obj/effect/floor_decal/borderfloor/corner{dir = 8},/obj/effect/floor_decal/corner/green/bordercorner{dir = 8},/turf/simulated/floor/tiled,/area/hangar/two)
"aPd" = (/obj/structure/grille,/obj/structure/window/reinforced/full,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/shuttle/plating,/area/shuttle/shuttle2/start)
@@ -2283,7 +2283,7 @@
"aRU" = (/obj/machinery/camera/network/first_deck{c_tag = "First Deck - Aft Hallway Four"; dir = 8},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/green/border{dir = 4},/obj/structure/closet/medical_wall{pixel_x = 31; pixel_y = 0},/obj/item/roller,/obj/item/bodybag/cryobag,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/pill_bottle/spaceacillin,/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/aft)
"aRV" = (/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/monotile,/area/security/checkpoint3)
"aRW" = (/obj/machinery/deployable/barrier,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/monotile,/area/security/checkpoint3)
-"aRX" = (/obj/structure/catwalk,/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/firstdeck/centralport)
+"aRX" = (/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora_isolation)
"aRY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/firstdeck/ep_aftstarboard)
"aRZ" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning/corner,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/firstdeck/ep_aftstarboard)
"aSa" = (/turf/simulated/wall,/area/hallway/secondary/escape/firstdeck/ep_aftstarboard)
@@ -2325,7 +2325,7 @@
"aSK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/dark,/area/hallway/primary/firstdeck/aft)
"aSL" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/security{name = "Security Checkpoint"; req_access = list(1)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/steel_grid,/area/security/checkpoint3)
"aSM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/security/checkpoint3)
-"aSN" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{icon_state = "intact"; dir = 6},/obj/random/mob/mouse,/turf/simulated/floor/tiled/steel_dirty,/area/engineering/auxiliary_engineering)
+"aSN" = (/turf/simulated/wall,/area/rnd/research/firstdeck/hallway)
"aSO" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/camera/network/security{c_tag = "SEC - Auxiliary Checkpoint"; dir = 8},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/red/border{dir = 4},/obj/effect/floor_decal/borderfloor/corner2{dir = 6},/obj/effect/floor_decal/corner/red/bordercorner2{dir = 6},/turf/simulated/floor/tiled,/area/security/checkpoint3)
"aSP" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/red/border{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/firstdeck/ep_aftstarboard)
"aSQ" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/obj/structure/extinguisher_cabinet{pixel_x = 25},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/firstdeck/ep_aftstarboard)
@@ -2700,7 +2700,7 @@
"aZV" = (/obj/machinery/vending/wallmed1{pixel_y = 32},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/red/border{dir = 1},/turf/simulated/floor/tiled,/area/security/prison)
"aZW" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/borderfloor/corner{dir = 1},/obj/effect/floor_decal/corner/red/bordercorner{dir = 1},/turf/simulated/floor/tiled,/area/security/prison)
"aZX" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/table/steel,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/floor/tiled,/area/security/prison)
-"aZY" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/firstdeck/aftstarboard)
+"aZY" = (/turf/simulated/floor/tiled/dark,/area/rnd/research/firstdeck/hallway)
"aZZ" = (/obj/machinery/washing_machine,/turf/simulated/floor/tiled,/area/security/prison)
"baa" = (/obj/machinery/portable_atmospherics/powered/scrubber/huge,/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 8},/turf/simulated/floor/tiled/dark,/area/security/prison)
"bab" = (/obj/machinery/portable_atmospherics/powered/scrubber/huge,/obj/effect/floor_decal/industrial/warning/cee{icon_state = "warningcee"; dir = 4},/turf/simulated/floor/tiled/dark,/area/security/prison)
@@ -2751,7 +2751,7 @@
"baU" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/security/security_equiptment_storage)
"baV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/security/security_equiptment_storage)
"baW" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals4,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 10},/turf/simulated/floor/tiled,/area/security/security_equiptment_storage)
-"baX" = (/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/firstdeck/aftport)
+"baX" = (/obj/structure/stairs/west,/turf/simulated/floor/tiled/dark,/area/rnd/research/firstdeck/hallway)
"baY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 1},/turf/simulated/floor/tiled,/area/security/brig)
"baZ" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/brig)
"bba" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 10},/obj/effect/floor_decal/steeldecal/steel_decals4,/turf/simulated/floor/tiled,/area/security/brig)
@@ -3342,7 +3342,7 @@
"bmn" = (/obj/effect/landmark{name = "lightsout"},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/red/border{dir = 1},/turf/simulated/floor/tiled,/area/security/lobby)
"bmo" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/red/border{dir = 1},/turf/simulated/floor/tiled,/area/security/lobby)
"bmp" = (/obj/machinery/light{dir = 4},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/red/border{dir = 4},/turf/simulated/floor/tiled,/area/security/lobby)
-"bmq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals5,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/tiled,/area/security/checkpoint3)
+"bmq" = (/turf/simulated/wall,/area/rnd/xenobiology/xenoflora)
"bmr" = (/obj/effect/floor_decal/borderfloorblack{dir = 8},/obj/effect/floor_decal/corner/blue/border{dir = 8},/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/sc/hos)
"bms" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/carpet,/area/crew_quarters/heads/sc/hos)
"bmt" = (/obj/structure/bed/chair,/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{dir = 9},/turf/simulated/floor/carpet,/area/crew_quarters/heads/sc/hos)
@@ -3397,7 +3397,7 @@
"bnq" = (/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/monotile,/area/security/lobby)
"bnr" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/security/lobby)
"bns" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled,/area/security/lobby)
-"bnt" = (/obj/structure/table/steel,/obj/item/device/communicator,/obj/item/device/communicator,/obj/item/device/radio/headset,/obj/item/device/radio/headset,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/security/prison)
+"bnt" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/tiled/steel_grid,/area/rnd/research/firstdeck/hallway)
"bnu" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/obj/effect/floor_decal/borderfloorblack{dir = 8},/obj/effect/floor_decal/corner/blue/border{dir = 8},/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/sc/hos)
"bnv" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/item/device/flashlight/lamp/green{dir = 2; pixel_x = 10; pixel_y = 12},/obj/structure/table/reinforced,/turf/simulated/floor/carpet,/area/crew_quarters/heads/sc/hos)
"bnw" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/folder/red,/obj/item/weapon/stamp/hos,/obj/structure/table/reinforced,/turf/simulated/floor/carpet,/area/crew_quarters/heads/sc/hos)
@@ -3425,7 +3425,7 @@
"bnS" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/engineering/atmos)
"bnT" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/atmos)
"bnU" = (/obj/structure/closet,/obj/random/contraband,/obj/random/contraband,/obj/random/maintenance/security,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor,/area/maintenance/security_port)
-"bnV" = (/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/airlock/security{name = "Equipment Storage"; req_access = list(2)},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled,/area/security/security_equiptment_storage)
+"bnV" = (/obj/machinery/smartfridge/drying_rack,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
"bnW" = (/obj/machinery/atmospherics/binary/pump/on{dir = 8; target_pressure = 200},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/maintenance/security_port)
"bnX" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; icon_state = "intact"},/turf/simulated/floor/plating,/area/maintenance/security_port)
"bnY" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_port)
@@ -3458,7 +3458,7 @@
"boz" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8; icon_state = "map"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
"boA" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/universal,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
"boB" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
-"boC" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/cable/green,/obj/effect/wingrille_spawn/reinforced/polarized{id = "hosoffice"},/turf/simulated/floor/plating,/area/crew_quarters/heads/sc/hos)
+"boC" = (/obj/structure/closet/crate/hydroponics{desc = "All you need to start your own honey farm."; name = "beekeeping crate"},/obj/item/beehive_assembly,/obj/item/bee_smoker,/obj/item/honey_frame,/obj/item/honey_frame,/obj/item/honey_frame,/obj/item/honey_frame,/obj/item/honey_frame,/obj/item/bee_pack,/obj/item/weapon/tool/crowbar,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
"boD" = (/obj/structure/table/rack{dir = 1},/obj/random/maintenance/clean,/obj/random/maintenance/security,/obj/random/maintenance/security,/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 10; icon_state = "intact"},/obj/random/maintenance/security,/obj/random/cash,/turf/simulated/floor,/area/maintenance/security_starboard)
"boE" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
"boF" = (/obj/effect/floor_decal/corner/black/full{dir = 8},/obj/machinery/air_sensor{frequency = 1441; id_tag = "co2_sensor"},/turf/simulated/floor/reinforced/carbon_dioxide,/area/engineering/atmos)
@@ -3628,7 +3628,7 @@
"brN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/turf/simulated/floor,/area/maintenance/substation/atmospherics)
"brO" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/engineering{name = "Atmospherics Substation"; req_one_access = list(11,24)},/turf/simulated/floor,/area/maintenance/substation/atmospherics)
"brP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/blast/regular{density = 0; dir = 1; icon_state = "pdoor0"; id = "atmoslockdown"; name = "Atmospherics Lockdown"; opacity = 0},/turf/simulated/floor,/area/maintenance/engineering)
-"brQ" = (/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green,/obj/effect/wingrille_spawn/reinforced/polarized{id = "hosoffice"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/crew_quarters/heads/sc/hos)
+"brQ" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
"brR" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/turf/simulated/floor/airless,/area/maintenance/security_port)
"brS" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "eva_port_outer"; locked = 1; name = "External Airlock Access"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/maintenance/security_port)
"brT" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 9},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1379; id_tag = "eva_port_pump"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "eva_port_sensor"; pixel_x = 0; pixel_y = 25},/turf/simulated/floor/tiled,/area/maintenance/security_port)
@@ -3993,7 +3993,7 @@
"byO" = (/obj/machinery/atmospherics/pipe/simple/visible/universal{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research)
"byP" = (/obj/machinery/atmospherics/valve/digital/open{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research)
"byQ" = (/obj/machinery/atmospherics/pipe/simple/visible/universal{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/red,/turf/simulated/floor/plating,/area/maintenance/research)
-"byR" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/security_port)
+"byR" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
"byS" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research)
"byT" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plating,/area/maintenance/research)
"byU" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/research)
@@ -4197,7 +4197,7 @@
"bCK" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/maintenance{name = "Research Maintenance Access"; req_one_access = list(47)},/turf/simulated/floor/plating,/area/rnd/research)
"bCL" = (/obj/structure/closet/secure_closet/scientist,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/obj/effect/floor_decal/borderfloorwhite{dir = 9},/obj/effect/floor_decal/corner/purple/border{dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/research_lockerroom)
"bCM" = (/obj/machinery/alarm{pixel_y = 25},/obj/machinery/camera/network/research{c_tag = "SCI - Locker Room"; dir = 2},/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/research_lockerroom)
-"bCN" = (/obj/structure/closet/l3closet/scientist,/obj/structure/extinguisher_cabinet{pixel_x = 28; pixel_y = 0},/obj/effect/floor_decal/borderfloorwhite{dir = 5},/obj/effect/floor_decal/corner/purple/border{dir = 5},/turf/simulated/floor/tiled/white,/area/rnd/research_lockerroom)
+"bCN" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/structure/extinguisher_cabinet{pixel_y = 30},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
"bCO" = (/obj/structure/toilet,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/freezer,/area/rnd/research_restroom_sc)
"bCP" = (/obj/machinery/recharge_station,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/freezer,/area/rnd/research_restroom_sc)
"bCQ" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/effect/floor_decal/borderfloorwhite{dir = 10},/obj/effect/floor_decal/corner/purple/border{dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/research)
@@ -4270,11 +4270,11 @@
"bEf" = (/obj/structure/table/reinforced,/obj/item/device/paicard{pixel_x = 4},/obj/item/device/tape,/obj/item/device/taperecorder{pixel_x = -3},/obj/item/weapon/reagent_containers/food/drinks/jar,/obj/effect/floor_decal/borderfloorwhite{dir = 4},/obj/effect/floor_decal/corner/blue/border{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/sc/hor)
"bEg" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced/polarized{id = "rdoffice"},/turf/simulated/floor/plating,/area/crew_quarters/heads/sc/hor)
"bEh" = (/obj/machinery/vending/cola,/turf/simulated/floor/wood,/area/rnd/research)
-"bEi" = (/obj/machinery/vending/coffee,/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/wood,/area/rnd/research)
+"bEi" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
"bEj" = (/turf/simulated/floor/wood,/area/rnd/research)
"bEk" = (/obj/machinery/vending/snack,/turf/simulated/floor/wood,/area/rnd/research)
"bEl" = (/obj/machinery/disposal,/obj/structure/extinguisher_cabinet{pixel_y = 30},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/structure/disposalpipe/trunk,/turf/simulated/floor/wood,/area/rnd/research)
-"bEm" = (/obj/structure/closet/secure_closet/scientist,/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/purple/border{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/research_lockerroom)
+"bEm" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
"bEn" = (/turf/simulated/floor/tiled/white,/area/rnd/research_lockerroom)
"bEo" = (/obj/structure/closet/wardrobe/science_white,/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/effect/floor_decal/borderfloorwhite/corner{dir = 4},/obj/effect/floor_decal/corner/purple/bordercorner{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/research_lockerroom)
"bEp" = (/obj/machinery/door/airlock{name = "Unit 1"},/turf/simulated/floor/tiled/freezer,/area/rnd/research_restroom_sc)
@@ -4345,7 +4345,7 @@
"bFC" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/research)
"bFD" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/structure/sign/warning/high_voltage{pixel_x = 32; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/research)
"bFE" = (/obj/machinery/power/breakerbox/activated{RCon_tag = "Research Substation Bypass"},/turf/simulated/floor/plating,/area/maintenance/substation/research)
-"bFF" = (/obj/machinery/power/smes/buildable{charge = 0; RCon_tag = "Substation - Research"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/maintenance/substation/research)
+"bFF" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/newscaster{pixel_y = 30},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
"bFG" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/alarm{pixel_y = 23},/obj/structure/table/steel,/obj/machinery/cell_charger,/obj/item/stack/cable_coil,/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/turf/simulated/floor/plating,/area/maintenance/substation/research)
"bFH" = (/obj/machinery/computer/aifixer,/obj/structure/extinguisher_cabinet{pixel_x = -28; pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/crew_quarters/heads/sc/hor)
"bFI" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/blue/border{dir = 8},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/sc/hor)
@@ -4357,8 +4357,8 @@
"bFO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/wood,/area/rnd/research)
"bFP" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/wood,/area/rnd/research)
"bFQ" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 22},/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/rnd/research)
-"bFR" = (/obj/structure/closet/secure_closet/scientist,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/effect/floor_decal/borderfloorwhite/corner{dir = 1},/obj/effect/floor_decal/corner/purple/bordercorner{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/research_lockerroom)
-"bFS" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled/white,/area/rnd/research_lockerroom)
+"bFR" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"bFS" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
"bFT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/steeldecal/steel_decals4,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/research_lockerroom)
"bFU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/research{name = "Toxins Launch Room"; req_access = list(7)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/steel_grid,/area/rnd/toxins_launch)
"bFV" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen/multi,/obj/item/weapon/paper/monitorkey,/obj/effect/floor_decal/borderfloorwhite{dir = 4},/obj/effect/floor_decal/corner/blue/border{dir = 4},/obj/machinery/computer/security/telescreen{desc = "Used for watching the RD's goons from the safety of his office."; name = "Research Monitor"; network = list("Research","Toxins Test Area","Robots","Anomaly Isolation","Research Outpost"); pixel_x = 32; pixel_y = -4},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/sc/hor)
@@ -4438,14 +4438,14 @@
"bHr" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/sc/hor)
"bHs" = (/obj/machinery/papershredder,/obj/effect/floor_decal/borderfloorwhite{dir = 4},/obj/effect/floor_decal/corner/blue/border{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/sc/hor)
"bHt" = (/obj/machinery/camera/network/research{c_tag = "SCI - Break Room"; dir = 4},/turf/simulated/floor/wood,/area/rnd/research)
-"bHu" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/wood,/area/rnd/research)
-"bHv" = (/obj/structure/table/glass,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/turf/simulated/floor/wood,/area/rnd/research)
-"bHw" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/wood,/area/rnd/research)
+"bHu" = (/obj/structure/table/glass,/obj/item/weapon/material/minihoe,/obj/item/weapon/material/minihoe,/obj/item/weapon/material/knife/machete/hatchet,/obj/item/weapon/material/knife/machete/hatchet,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"bHv" = (/obj/structure/sink/kitchen{pixel_y = 28},/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/reagent_containers/glass/bucket,/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"bHw" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/obj/machinery/meter,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora_isolation)
"bHx" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/rnd/research)
"bHy" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/airlock/research{name = "Toxins Storage"; req_access = list(8)},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/steel_grid,/area/rnd/storage)
-"bHz" = (/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/research_lockerroom)
-"bHA" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/rnd/research_lockerroom)
-"bHB" = (/obj/effect/floor_decal/borderfloorwhite/corner,/obj/effect/floor_decal/corner/purple/bordercorner,/turf/simulated/floor/tiled/white,/area/rnd/research_lockerroom)
+"bHz" = (/obj/structure/closet/crate/hydroponics/exotic,/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora_isolation)
+"bHA" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora_isolation)
+"bHB" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 10},/obj/item/weapon/storage/toolbox/mechanical,/obj/structure/extinguisher_cabinet{pixel_y = 30},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora_isolation)
"bHC" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -28},/turf/simulated/floor/tiled/freezer,/area/rnd/research_restroom_sc)
"bHD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/freezer,/area/rnd/research_restroom_sc)
"bHE" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/freezer,/area/rnd/research_restroom_sc)
@@ -4520,11 +4520,11 @@
"bIV" = (/obj/effect/floor_decal/borderfloorwhite/corner,/obj/effect/floor_decal/corner/blue/bordercorner,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/sc/hor)
"bIW" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/effect/floor_decal/borderfloorwhite{dir = 6},/obj/effect/floor_decal/corner/blue/border{dir = 6},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/sc/hor)
"bIX" = (/obj/structure/table/glass,/obj/machinery/recharger{pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/light,/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/wood,/area/rnd/research)
-"bIY" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/rnd/research)
+"bIY" = (/obj/structure/table/glass,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/obj/effect/floor_decal/borderfloorwhite{dir = 9},/obj/effect/floor_decal/corner/purple/border{dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
"bIZ" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/newscaster{pixel_x = 30; pixel_y = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/rnd/research)
-"bJa" = (/obj/machinery/photocopier,/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/purple/border,/turf/simulated/floor/tiled/white,/area/rnd/research_lockerroom)
-"bJb" = (/obj/structure/table/glass,/obj/machinery/recharger,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/machinery/light_switch{pixel_x = 12; pixel_y = -24},/obj/structure/cable/green,/obj/item/weapon/clipboard,/obj/item/weapon/clipboard,/obj/item/weapon/storage/firstaid/regular{pixel_x = 5; pixel_y = 5},/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/purple/border,/turf/simulated/floor/tiled/white,/area/rnd/research_lockerroom)
-"bJc" = (/obj/structure/closet/firecloset,/obj/effect/floor_decal/borderfloorwhite{dir = 6},/obj/effect/floor_decal/corner/purple/border{dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/research_lockerroom)
+"bJa" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"bJb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"bJc" = (/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/obj/machinery/camera/network/research{c_tag = "SCI - First Deck Stair Access"; dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
"bJd" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -28},/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/turf/simulated/floor/tiled/freezer,/area/rnd/research_restroom_sc)
"bJe" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 5},/turf/simulated/floor/tiled/freezer,/area/rnd/research_restroom_sc)
"bJf" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/machinery/light_switch{pixel_x = 12; pixel_y = -24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/tiled/freezer,/area/rnd/research_restroom_sc)
@@ -4555,7 +4555,7 @@
"bJE" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1; icon_state = "map"},/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
"bJF" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"},/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
"bJG" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "eng_port_airlock"; name = "interior access button"; pixel_x = 0; pixel_y = 25; req_one_access = list(11,24)},/obj/structure/table/steel,/obj/item/weapon/storage/fancy/cigarettes,/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/obj/random/maintenance/clean,/obj/structure/extinguisher_cabinet{pixel_x = 28; pixel_y = 0},/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
-"bJH" = (/obj/machinery/atmospherics/valve{dir = 4},/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"bJH" = (/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
"bJI" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/floodlight,/turf/simulated/floor,/area/engineering/storage)
"bJJ" = (/obj/structure/closet/crate,/obj/item/stack/material/phoron{amount = 25},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/engineering/storage)
"bJK" = (/obj/machinery/space_heater,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor,/area/engineering/storage)
@@ -4680,7 +4680,7 @@
"bLZ" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/sortjunction/flipped{dir = 4; name = "Research"; sortType = "Research"},/turf/simulated/floor/tiled/white,/area/rnd/research)
"bMa" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/light{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/obj/effect/floor_decal/borderfloorwhite/corner2{dir = 4},/obj/effect/floor_decal/corner/purple/bordercorner2{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/research)
"bMb" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/research)
-"bMc" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"bMc" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
"bMd" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/research)
"bMe" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/borderfloorwhite/corner{dir = 1},/obj/effect/floor_decal/corner/purple/bordercorner{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/research)
"bMf" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/junction{icon_state = "pipe-j1"; dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/research)
@@ -4717,7 +4717,7 @@
"bMK" = (/obj/machinery/atmospherics/pipe/simple/visible/black{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/engineering/engine_waste)
"bML" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/engineering/engine_waste)
"bMM" = (/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/maintenance{name = "Engine Waste Handling"; req_one_access = list(10,24)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/engineering/engine_waste)
-"bMN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/random/mob/mouse,/turf/simulated/floor,/area/maintenance/engineering)
+"bMN" = (/obj/machinery/requests_console{department = "Science"; departmentType = 2; name = "Science Requests Console"; pixel_x = 30; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
"bMO" = (/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/industrial/warning/corner{dir = 1},/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
"bMP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
"bMQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal,/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 36; pixel_y = 0},/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
@@ -5479,7 +5479,7 @@
"cbs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled/monotile,/area/hallway/primary/seconddeck/fpcenter)
"cbt" = (/obj/machinery/status_display{pixel_x = 32},/obj/structure/disposalpipe/junction{dir = 1; icon_state = "pipe-j2"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/red/border{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/fpcenter)
"cbu" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/wall,/area/maintenance/substation/central)
-"cbv" = (/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/research)
+"cbv" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora_isolation)
"cbw" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/plating,/area/maintenance/substation/central)
"cbx" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light/small,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/substation/central)
"cby" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/substation/central)
@@ -5514,8 +5514,8 @@
"ccb" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/assembly/robotics)
"ccc" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/purple/border,/turf/simulated/floor/tiled/white,/area/assembly/robotics)
"ccd" = (/obj/structure/table/standard,/obj/structure/reagent_dispensers/acid{density = 0; pixel_x = 0; pixel_y = -30},/obj/machinery/recharger{pixel_y = 0},/obj/item/weapon/storage/toolbox/mechanical,/obj/item/weapon/storage/toolbox/mechanical,/obj/item/device/multitool{pixel_x = 3},/obj/item/device/multitool{pixel_x = 3},/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/crowbar,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = 6},/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = 6},/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/purple/border,/turf/simulated/floor/tiled/white,/area/assembly/robotics)
-"cce" = (/obj/structure/closet{name = "robotics parts"},/obj/item/clothing/glasses/welding,/obj/item/clothing/glasses/welding,/obj/item/clothing/head/welding{pixel_x = -3; pixel_y = 5},/obj/item/clothing/head/welding{pixel_x = -3; pixel_y = 5},/obj/machinery/ai_status_display{pixel_y = -32},/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/purple/border,/turf/simulated/floor/tiled/white,/area/assembly/robotics)
-"ccf" = (/obj/structure/closet{name = "welding equipment"},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000; pixel_x = 5; pixel_y = -5},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000; pixel_x = 5; pixel_y = -5},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000; pixel_x = 5; pixel_y = -5},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000; pixel_x = 5; pixel_y = -5},/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/weapon/storage/firstaid/regular{empty = 1; name = "First-Aid (empty)"},/obj/item/weapon/storage/firstaid/regular{empty = 1; name = "First-Aid (empty)"},/obj/item/weapon/storage/firstaid/regular{empty = 1; name = "First-Aid (empty)"},/obj/item/device/healthanalyzer,/obj/item/device/healthanalyzer,/obj/item/device/healthanalyzer,/obj/item/device/flash/synthetic,/obj/item/device/flash/synthetic,/obj/item/device/flash/synthetic,/obj/item/device/flash/synthetic,/obj/item/device/flash/synthetic,/obj/item/device/flash/synthetic,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil,/obj/machinery/light,/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/purple/border,/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"cce" = (/obj/effect/floor_decal/industrial/warning,/obj/structure/closet/crate/hydroponics/prespawned,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora_isolation)
+"ccf" = (/obj/machinery/atmospherics/binary/pump{dir = 2; name = "Isolation to Waste"},/obj/effect/floor_decal/industrial/warning/full,/turf/simulated/floor/plating,/area/rnd/xenobiology/xenoflora_isolation)
"ccg" = (/obj/structure/reagent_dispensers/fueltank,/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/purple/border,/turf/simulated/floor/tiled/white,/area/assembly/robotics)
"cch" = (/obj/machinery/mech_recharger,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/tiled/techmaint,/area/assembly/chargebay)
"cci" = (/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/techfloor,/area/assembly/chargebay)
@@ -5587,10 +5587,10 @@
"cdw" = (/obj/item/stack/cable_coil,/turf/simulated/floor/plating,/area/maintenance/research_medical)
"cdx" = (/obj/structure/table/rack{dir = 1},/obj/random/maintenance/research,/obj/random/maintenance/research,/obj/random/maintenance/clean,/obj/item/stack/cable_coil,/obj/item/weapon/coin/silver,/turf/simulated/floor/plating,/area/maintenance/research_medical)
"cdy" = (/obj/structure/table/rack{dir = 1},/obj/random/maintenance/research,/obj/random/maintenance/research,/obj/random/maintenance/clean,/turf/simulated/floor/plating,/area/maintenance/research_medical)
-"cdz" = (/obj/machinery/floodlight,/turf/simulated/floor/plating,/area/maintenance/research_medical)
+"cdz" = (/obj/structure/table/glass,/obj/machinery/alarm{dir = 4; pixel_x = -22; pixel_y = 0},/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/purple/border{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
"cdA" = (/obj/structure/closet/crate,/obj/random/bomb_supply,/obj/random/bomb_supply,/obj/random/bomb_supply,/obj/random/tech_supply,/obj/random/technology_scanner,/obj/random/tool,/turf/simulated/floor/plating,/area/maintenance/research_medical)
-"cdB" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/research)
-"cdC" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/borderfloorwhite/corner{dir = 1},/obj/effect/floor_decal/corner/purple/bordercorner{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"cdB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"cdC" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
"cdD" = (/obj/machinery/camera/network/research{c_tag = "SCI - Research Hallway Aft"; dir = 8},/obj/effect/floor_decal/borderfloorwhite/corner{dir = 4},/obj/effect/floor_decal/corner/purple/bordercorner{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/research)
"cdE" = (/obj/structure/sign/warning/server_room,/turf/simulated/wall/r_wall,/area/rnd/workshop)
"cdF" = (/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/borderfloorblack/corner{dir = 1},/obj/effect/floor_decal/corner/green/bordercorner{dir = 1},/turf/simulated/floor/tiled/dark,/area/rnd/workshop)
@@ -5679,9 +5679,9 @@
"cfk" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/research_medical)
"cfl" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/research_medical)
"cfm" = (/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/research_medical)
-"cfn" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 22},/turf/simulated/floor/plating,/area/maintenance/research_medical)
-"cfo" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/research)
-"cfp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/rnd/research)
+"cfn" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass_research{name = "Xenoflora Research"; req_access = list(55)},/turf/simulated/floor/tiled/steel_grid,/area/rnd/xenobiology/xenoflora)
+"cfo" = (/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"cfp" = (/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora)
"cfq" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/research{id_tag = "researchdoor"; name = "Research Division Access"; req_access = list(47)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/steel_grid,/area/rnd/research)
"cfr" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/turf/simulated/floor/tiled/dark,/area/rnd/workshop)
"cfs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/dark,/area/rnd/workshop)
@@ -5904,7 +5904,7 @@
"cjB" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/ascenter)
"cjC" = (/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 9},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/ascenter)
"cjD" = (/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/ascenter)
-"cjE" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/meter,/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/research)
+"cjE" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora)
"cjF" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/ascenter)
"cjG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/ascenter)
"cjH" = (/obj/machinery/ai_status_display{pixel_y = 32},/obj/effect/floor_decal/borderfloor/corner{dir = 1},/obj/effect/floor_decal/corner/purple/bordercorner{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/ascenter)
@@ -5927,7 +5927,7 @@
"cjY" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/obj/machinery/atm{pixel_y = 30},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/starboard)
"cjZ" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/starboard)
"cka" = (/obj/machinery/light{dir = 1},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/starboard)
-"ckb" = (/obj/structure/closet/crate/radiation,/obj/item/clothing/glasses/meson,/obj/item/clothing/glasses/meson,/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/light,/obj/item/stack/material/lead{amount = 30},/turf/simulated/floor,/area/engineering/storage)
+"ckb" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 6},/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora)
"ckc" = (/obj/effect/floor_decal/steeldecal/steel_decals4,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 10},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/starboard)
"ckd" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/starboard)
"cke" = (/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 6},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/starboard)
@@ -6023,7 +6023,7 @@
"clQ" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/tiled/monotile,/area/hallway/primary/seconddeck/starboard)
"clR" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/starboard)
"clS" = (/obj/effect/wingrille_spawn/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/hallway/primary/seconddeck/starboard)
-"clT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 9},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
+"clT" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora)
"clU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/starboard)
"clV" = (/obj/effect/floor_decal/borderfloorblack{dir = 4},/obj/effect/floor_decal/industrial/danger{dir = 4},/turf/simulated/floor/tiled/techfloor/grid,/area/hallway/primary/seconddeck/starboard)
"clW" = (/obj/random/obstruction,/turf/simulated/floor/plating,/area/maintenance/research_medical)
@@ -6121,7 +6121,7 @@
"cnK" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/starboard)
"cnL" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/borderfloor/corner,/obj/effect/floor_decal/corner/paleblue/bordercorner,/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/starboard)
"cnM" = (/obj/structure/cable,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/paleblue/border,/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/starboard)
-"cnN" = (/obj/structure/disposalpipe/up{dir = 1},/obj/structure/cable{d1 = 16; d2 = 0; icon_state = "16-0"},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/railing{dir = 4},/obj/machinery/atmospherics/pipe/zpipe/up/supply{dir = 4},/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/substation/central)
+"cnN" = (/obj/machinery/seed_extractor,/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{dir = 1},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora)
"cnO" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/paleblue/border,/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/starboard)
"cnP" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/paleblue/border,/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/starboard)
"cnQ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/paleblue/border,/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/starboard)
@@ -6215,11 +6215,11 @@
"cpA" = (/obj/machinery/status_display,/turf/simulated/wall/r_wall,/area/medical/genetics)
"cpB" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/research{name = "Genetics Lab"; req_one_access = list(5,47)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/steel_grid,/area/hallway/secondary/seconddeck/research_medical)
"cpC" = (/obj/effect/decal/warning_stripes,/obj/machinery/atmospherics/tvalve/mirrored/bypass,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plating,/area/medical/virology)
-"cpD" = (/obj/machinery/camera/network/second_deck{c_tag = "Second Deck - Starboard Hallway One"},/obj/machinery/light{dir = 1},/obj/effect/floor_decal/borderfloor/corner{dir = 4},/obj/effect/floor_decal/corner/purple/bordercorner{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/ascenter)
-"cpE" = (/obj/machinery/camera/network/second_deck{c_tag = "Second Deck - Starboard Hallway Three"},/obj/effect/floor_decal/borderfloor/corner{dir = 1},/obj/effect/floor_decal/corner/purple/bordercorner{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/starboard)
-"cpF" = (/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology)
-"cpG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/black{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/virology)
-"cpH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/camera/network/second_deck{c_tag = "Second Deck - Starboard Hallway Four"; dir = 4},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/starboard)
+"cpD" = (/obj/structure/reagent_dispensers/watertank/high,/obj/item/weapon/reagent_containers/glass/bucket,/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora)
+"cpE" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora)
+"cpF" = (/obj/machinery/biogenerator,/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora)
+"cpG" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora)
+"cpH" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora)
"cpI" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/effect/floor_decal/borderfloorwhite/corner,/obj/effect/floor_decal/corner/lime/bordercorner,/turf/simulated/floor/tiled/white,/area/medical/virology)
"cpJ" = (/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/machinery/requests_console{department = "Virology"; name = "Virology Requests Console"; pixel_x = 32},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/obj/effect/floor_decal/borderfloorwhite{dir = 6},/obj/effect/floor_decal/corner/lime/border{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/virology)
"cpK" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 6},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor,/area/engineering/engine_room)
@@ -6531,7 +6531,7 @@
"cvE" = (/obj/structure/cable/green,/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/machinery/light_switch{pixel_x = -36},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/stairwell)
"cvF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 8},/obj/effect/floor_decal/industrial/warning/corner,/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/stairwell)
"cvG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/stairwell)
-"cvH" = (/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,/area/hallway/primary/seconddeck/stairwell)
+"cvH" = (/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{dir = 1},/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora)
"cvI" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/apcenter)
"cvJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/apcenter)
"cvK" = (/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/apcenter)
@@ -6868,7 +6868,7 @@
"cCd" = (/obj/structure/table/rack{dir = 1},/obj/item/clothing/suit/fire/firefighter,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/gas,/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/clothing/glasses/meson,/obj/random/maintenance/engineering,/obj/random/maintenance/clean,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/plating,/area/storage/emergency_storage/seconddeck/port_emergency)
"cCe" = (/obj/machinery/portable_atmospherics/powered/pump/filled,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/storage/emergency_storage/seconddeck/port_emergency)
"cCf" = (/obj/structure/table/rack{dir = 1},/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/powercell,/turf/simulated/floor/plating,/area/construction/seconddeck/construction1)
-"cCg" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/camera/network/second_deck{c_tag = "Second Deck - Starboard Hallway Two"; dir = 1},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/paleblue/border,/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/starboard)
+"cCg" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/glass_research{name = "Xenoflora Isolation"; req_access = list(55)},/turf/simulated/floor/tiled/steel_grid,/area/rnd/xenobiology/xenoflora)
"cCh" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/maintenance/cargo)
"cCi" = (/obj/structure/table/rack{dir = 1},/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/cash,/turf/simulated/floor,/area/maintenance/apmaint)
"cCj" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/construction/seconddeck/construction1)
@@ -7193,7 +7193,7 @@
"cIq" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/borderfloorwhite/corner{dir = 4},/obj/effect/floor_decal/corner/paleblue/bordercorner{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
"cIr" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light{dir = 1},/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/paleblue/border{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
"cIs" = (/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/borderfloorwhite/corner{dir = 1},/obj/effect/floor_decal/corner/paleblue/bordercorner{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
-"cIt" = (/obj/effect/floor_decal/borderfloorwhite/corner,/obj/effect/floor_decal/corner/lime/bordercorner,/obj/machinery/atmospherics/pipe/simple/hidden/red{icon_state = "intact"; dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"cIt" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora)
"cIu" = (/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/borderfloorwhite/corner{dir = 4},/obj/effect/floor_decal/corner/paleblue/bordercorner{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
"cIv" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/extinguisher_cabinet{pixel_y = 30},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/paleblue/border{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
"cIw" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/effect/floor_decal/borderfloorwhite/corner{dir = 1},/obj/effect/floor_decal/corner/paleblue/bordercorner{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/medbay2)
@@ -7249,7 +7249,7 @@
"cJu" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled/hydro,/area/hallway/primary/seconddeck/ascenter)
"cJv" = (/obj/structure/flora/ausbushes/brflowers,/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/turf/simulated/floor/grass,/area/hallway/primary/seconddeck/ascenter)
"cJw" = (/obj/structure/closet/crate,/obj/item/clothing/shoes/boots/combat,/obj/item/weapon/tank/air,/obj/item/weapon/tank/air,/obj/item/weapon/tank/air,/obj/item/clothing/mask/gas,/obj/effect/decal/cleanable/dirt,/obj/random/maintenance/cargo,/obj/random/maintenance/medical,/turf/simulated/floor/plating,/area/maintenance/medbay)
-"cJx" = (/obj/item/weapon/storage/secure/safe{pixel_x = 5; pixel_y = -29},/obj/machinery/light,/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/lime/border,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"cJx" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora_isolation)
"cJy" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/white,/area/medical/medbay)
"cJz" = (/obj/structure/sign/warning/high_voltage{pixel_y = -32},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/effect/floor_decal/borderfloorwhite/corner,/obj/effect/floor_decal/corner/paleblue/bordercorner,/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 8},/turf/simulated/floor/tiled/white,/area/medical/medbay)
"cJA" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/turf/simulated/floor/tiled/white,/area/medical/medbay)
@@ -7375,8 +7375,8 @@
"cLQ" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/machinery/light_switch{pixel_x = 36; pixel_y = 0},/obj/structure/cable/green,/obj/effect/floor_decal/borderfloor/corner,/obj/effect/floor_decal/corner/brown/bordercorner,/turf/simulated/floor/tiled,/area/quartermaster/warehouse)
"cLR" = (/obj/structure/bed/chair/comfy/brown,/obj/effect/landmark/start{name = "Cargo Technician"},/obj/effect/floor_decal/borderfloor/corner{dir = 8},/obj/effect/floor_decal/corner/brown/bordercorner{dir = 8},/turf/simulated/floor/tiled,/area/quartermaster/office)
"cLS" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/office)
-"cLT" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/vehicle/train/engine{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/quartermaster/office)
-"cLU" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/vehicle/train/trolley{dir = 8},/turf/simulated/floor/tiled,/area/quartermaster/office)
+"cLT" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora_isolation)
+"cLU" = (/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{dir = 1},/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora_isolation)
"cLV" = (/obj/structure/cable/green,/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/machinery/light_switch{pixel_x = 36; pixel_y = 0},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/brown/border{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/office)
"cLW" = (/turf/unsimulated/mask,/area/quartermaster/office)
"cLX" = (/turf/simulated/wall/r_wall,/area/maintenance/substation/cargo)
@@ -7528,7 +7528,7 @@
"cON" = (/obj/structure/ladder/updown,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/plating,/area/storage/emergency_storage/seconddeck/as_emergency)
"cOO" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/catwalk,/turf/simulated/floor/plating,/area/storage/emergency_storage/seconddeck/as_emergency)
"cOP" = (/obj/machinery/space_heater,/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/plating,/area/storage/emergency_storage/seconddeck/as_emergency)
-"cOQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/red{icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/black,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"cOQ" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden/yellow,/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora_isolation)
"cOR" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plating,/area/maintenance/substation/medical)
"cOS" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/substation/medical)
"cOT" = (/obj/machinery/power/breakerbox/activated{RCon_tag = "Medical Substation Bypass"},/turf/simulated/floor/plating,/area/maintenance/substation/medical)
@@ -7589,7 +7589,7 @@
"cPW" = (/obj/structure/table/gamblingtable,/obj/item/clothing/mask/smokable/cigarette/cigar,/obj/machinery/alarm{pixel_y = 22},/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/bar)
"cPX" = (/obj/structure/table/rack{dir = 1},/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/cash,/turf/simulated/floor,/area/maintenance/cargo)
"cPY" = (/obj/structure/bed/chair/wood{dir = 8},/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/bar)
-"cPZ" = (/obj/effect/floor_decal/borderfloorwhite/corner{dir = 8},/obj/effect/floor_decal/corner/lime/bordercorner{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"cPZ" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora_isolation)
"cQa" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/bar)
"cQb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/maintenance{req_access = null; req_one_access = list(12,25,27,28,35)},/turf/simulated/floor/plating,/area/maintenance/bar)
"cQc" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 6},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/apcenter)
@@ -7696,7 +7696,7 @@
"cRZ" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/turf/simulated/floor/airless,/area/maintenance/cargo)
"cSa" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "crg_aft_airlock"; name = "exterior access button"; pixel_x = 0; pixel_y = 25; req_one_access = list(13)},/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 1},/turf/simulated/floor/airless,/area/maintenance/cargo)
"cSb" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/cargo)
-"cSc" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/black,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"cSc" = (/obj/machinery/atmospherics/pipe/manifold/hidden/yellow,/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora_isolation)
"cSd" = (/obj/structure/table/rack{dir = 1},/obj/random/maintenance,/obj/random/maintenance,/obj/random/maintenance,/obj/random/maintenance,/turf/simulated/floor/plating,/area/maintenance/cargo)
"cSe" = (/obj/structure/table/rack{dir = 1},/obj/random/toy,/obj/random/tank,/obj/random/maintenance,/obj/random/maintenance,/obj/random/maintenance,/obj/random/maintenance,/turf/simulated/floor/plating,/area/maintenance/cargo)
"cSf" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/cargo)
@@ -7777,7 +7777,7 @@
"cTC" = (/obj/structure/sink/kitchen{pixel_y = 28},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled/yellow,/area/crew_quarters/coffee_shop)
"cTD" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/light_switch{pixel_x = 11; pixel_y = 22},/obj/machinery/button/holosign{id = "cafeopen"; name = "Open Sign"; pixel_x = 11; pixel_y = 30},/turf/simulated/floor/tiled/yellow,/area/crew_quarters/coffee_shop)
"cTE" = (/obj/structure/table/marble,/obj/item/weapon/reagent_containers/food/drinks/cup{pixel_x = 8; pixel_y = 8},/obj/item/weapon/reagent_containers/food/drinks/cup{pixel_x = -4; pixel_y = 8},/obj/item/weapon/reagent_containers/food/drinks/cup{pixel_x = 8; pixel_y = -4},/obj/item/weapon/reagent_containers/food/drinks/cup{pixel_x = -4; pixel_y = -4},/obj/item/weapon/reagent_containers/food/drinks/cup{pixel_x = 8},/obj/item/weapon/reagent_containers/food/drinks/cup{pixel_x = -4},/obj/item/weapon/reagent_containers/food/drinks/cup{pixel_x = 8; pixel_y = 12},/obj/item/weapon/reagent_containers/food/drinks/cup{pixel_x = -4; pixel_y = 12},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled/yellow,/area/crew_quarters/coffee_shop)
-"cTF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/maintenance/cargo)
+"cTF" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 9; icon_state = "intact"},/obj/machinery/alarm{dir = 8; pixel_x = 22; pixel_y = 0},/turf/simulated/floor/tiled/techmaint,/area/rnd/xenobiology/xenoflora_isolation)
"cTG" = (/obj/structure/table/marble,/obj/machinery/chemical_dispenser/bar_coffee/full,/turf/simulated/floor/tiled/yellow,/area/crew_quarters/coffee_shop)
"cTH" = (/obj/structure/disposalpipe/segment,/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/maintenance/medbay)
"cTI" = (/obj/structure/closet/crate/plastic,/obj/item/weapon/storage/box/donkpockets,/obj/item/weapon/storage/box/donkpockets,/obj/item/weapon/reagent_containers/dropper,/obj/random/maintenance/clean,/obj/random/soap,/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/turf/simulated/floor/plating,/area/maintenance/medbay)
@@ -7983,7 +7983,7 @@
"cXA" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "aft_starboard_pump"},/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/plating,/area/maintenance/medbay)
"cXB" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4; icon_state = "map"},/turf/simulated/wall/r_wall,/area/maintenance/medbay)
"cXC" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 1},/turf/simulated/floor/plating,/area/maintenance/medbay)
-"cXD" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"cXD" = (/obj/structure/closet/emcloset/legacy,/obj/structure/extinguisher_cabinet{pixel_x = -27},/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/purple/border{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
"cXE" = (/obj/structure/table/glass,/obj/item/weapon/reagent_containers/blood/AMinus,/obj/item/weapon/reagent_containers/blood/APlus,/obj/item/weapon/reagent_containers/blood/BMinus,/obj/item/weapon/reagent_containers/blood/BPlus,/obj/item/weapon/reagent_containers/blood/OPlus,/obj/structure/extinguisher_cabinet{pixel_x = -28; pixel_y = 0},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/turf/simulated/floor/tiled/white,/area/medical/ward)
"cXF" = (/obj/structure/table/glass,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/structure/closet/secure_closet/medical_wall{name = "O- Blood Locker"; pixel_x = 0; pixel_y = -32},/obj/item/weapon/reagent_containers/blood/OMinus,/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/turf/simulated/floor/tiled/white,/area/medical/ward)
"cXG" = (/obj/structure/table/glass,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/turf/simulated/floor/tiled/white,/area/medical/ward)
@@ -8006,7 +8006,7 @@
"cXX" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
"cXY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
"cXZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/effect/floor_decal/borderfloorwhite/corner,/obj/effect/floor_decal/corner/paleblue/bordercorner,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
-"cYa" = (/obj/effect/floor_decal/corner/paleblue{dir = 10},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/machinery/light_switch{pixel_x = 11; pixel_y = -24},/obj/structure/cable/green,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"cYa" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
"cYb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/borderfloorwhite/corner{dir = 8},/obj/effect/floor_decal/corner/paleblue/bordercorner{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
"cYc" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
"cYd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/borderfloorwhite/corner,/obj/effect/floor_decal/corner/paleblue/bordercorner,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
@@ -8421,7 +8421,7 @@
"dfW" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/tiled/hydro,/area/hydroponics)
"dfX" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/hydro,/area/hydroponics)
"dfY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled/hydro,/area/hydroponics)
-"dfZ" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"dfZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
"dga" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/camera/network/civilian{c_tag = "CIV - Holodeck Port"; dir = 4},/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/holodeck_control)
"dgb" = (/obj/structure/table/standard,/obj/item/weapon/soap/nanotrasen,/obj/item/weapon/paper{desc = ""; info = "Brusies sustained in the holodeck can be healed simply by sleeping."; name = "Holodeck Disclaimer"},/obj/machinery/camera/network/civilian{c_tag = "CIV - Holodeck Control"; dir = 4},/turf/simulated/floor/tiled,/area/holodeck_control)
"dgc" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled,/area/holodeck_control)
@@ -8602,7 +8602,7 @@
"djv" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass{name = "Library"},/turf/simulated/floor/tiled/steel_grid,/area/library)
"djw" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/camera/network/second_deck{c_tag = "Second Deck - Aft Hallway Four"; dir = 8},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/green/border{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/aft)
"djx" = (/obj/machinery/newscaster{pixel_x = 30; pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/chapel/main)
-"djy" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"djy" = (/obj/effect/floor_decal/borderfloorwhite/corner,/obj/machinery/light,/obj/effect/floor_decal/corner/purple/bordercorner,/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
"djz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{req_access = null; req_one_access = list(12,25,27,28,35)},/turf/simulated/floor/plating,/area/maintenance/chapel)
"djA" = (/turf/simulated/wall/r_wall,/area/chapel/main)
"djB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/bar)
@@ -8644,7 +8644,7 @@
"dkl" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/airlock/maintenance{req_access = null; req_one_access = list(12,25,27,28,35)},/turf/simulated/floor/plating,/area/library)
"dkm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/wood,/area/library)
"dkn" = (/obj/structure/table/woodentable,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/item/weapon/dice/d20,/obj/item/weapon/dice,/turf/simulated/floor/wood,/area/library)
-"dko" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/catwalk,/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/bar)
+"dko" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora)
"dkp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/hologram/holopad,/turf/simulated/floor/wood,/area/library)
"dkq" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/library)
"dkr" = (/obj/structure/bed/chair/comfy/black{dir = 4},/turf/simulated/floor/carpet,/area/library)
@@ -9776,7 +9776,7 @@
"dFZ" = (/obj/machinery/atmospherics/pipe/simple/visible/universal,/obj/structure/largecrate,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/turf/simulated/floor/plating,/area/maintenance/thirddeck/forestarboard)
"dGa" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/thirddeck/forestarboard)
"dGb" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/thirddeck/foreport)
-"dGc" = (/obj/item/glass_jar,/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/cargo)
+"dGc" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora)
"dGd" = (/turf/simulated/wall/r_wall,/area/crew_quarters/heads/sc/hop/quarters)
"dGe" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/heads/sc/hop/quarters)
"dGf" = (/obj/machinery/door/firedoor/glass,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/heads/sc/hop/quarters)
@@ -9798,7 +9798,7 @@
"dGv" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/heads/sc/hor/quarters)
"dGw" = (/obj/machinery/door/firedoor/glass,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/heads/sc/hor/quarters)
"dGx" = (/turf/simulated/wall/r_wall,/area/crew_quarters/heads/sc/hor/quarters)
-"dGy" = (/obj/structure/table/marble,/obj/item/weapon/reagent_containers/food/drinks/glass2/square{pixel_x = 8; pixel_y = 8},/obj/item/weapon/reagent_containers/food/drinks/glass2/square{pixel_x = 0; pixel_y = 8},/obj/item/weapon/reagent_containers/food/drinks/glass2/square{pixel_x = -8; pixel_y = 8},/obj/item/weapon/reagent_containers/food/drinks/glass2/square{pixel_x = 8; pixel_y = 4},/obj/item/weapon/reagent_containers/food/drinks/glass2/square{pixel_x = 0; pixel_y = 4},/obj/item/weapon/reagent_containers/food/drinks/glass2/square{pixel_x = -8; pixel_y = 4},/obj/machinery/camera/network/civilian{c_tag = "CIV - Cafe Back Room"; dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled/yellow,/area/crew_quarters/coffee_shop)
+"dGy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora)
"dGz" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/thirddeck/forestarboard)
"dGA" = (/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,/obj/machinery/light/small{dir = 8},/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/thirddeck/foreport)
"dGB" = (/obj/structure/closet/secure_closet/hop2,/turf/simulated/floor/carpet,/area/crew_quarters/heads/sc/hop/quarters)
@@ -10241,7 +10241,7 @@
"dOW" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/thirddeck/aftstarboard)
"dOX" = (/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green,/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/thirddeck/aftport)
"dOY" = (/obj/structure/table/steel,/obj/random/tech_supply,/turf/simulated/floor/plating,/area/maintenance/thirddeck/aftport)
-"dOZ" = (/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/cargo)
+"dOZ" = (/obj/machinery/botany/extractor,/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora)
"dPa" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/wood,/area/bridge/meeting_room)
"dPb" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/carpet,/area/bridge/meeting_room)
"dPc" = (/obj/structure/bed/chair/comfy/blue{dir = 1},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/carpet,/area/bridge/meeting_room)
@@ -10582,16 +10582,374 @@
"dVz" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/station_map{pixel_y = 32},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/apcenter)
"dVA" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/green/border{dir = 4},/obj/machinery/station_map{dir = 8; pixel_x = 32},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/aft)
"dVB" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/station_map{dir = 1; pixel_y = -32},/turf/simulated/floor/tiled,/area/hallway/primary/thirddeck/central)
-"dVC" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/obj/machinery/light/small,/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/medbay)
-"dVD" = (/obj/machinery/light/small{dir = 8},/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/chapel)
-"dVE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/catwalk,/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/bar)
-"dVF" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock{name = "Chapel Office"; req_access = list(27)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/steel_grid,/area/chapel/office)
-"dVG" = (/obj/structure/table/woodentable,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/item/weapon/deck/cards,/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/turf/simulated/floor/wood,/area/library)
-"dVH" = (/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/locker)
-"dVI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/meter,/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/thirddeck/foreport)
-"dVJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/meter,/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/thirddeck/forestarboard)
-"dVK" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "heads_meeting"; name = "Meeting Room Window Shutters"; opacity = 0},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/bridge/meeting_room)
-
+"dVC" = (/obj/machinery/botany/editor,/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/hydro,/area/rnd/xenobiology/xenoflora)
+"dVD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora)
+"dVE" = (/obj/structure/reagent_dispensers/watertank/high,/obj/item/weapon/reagent_containers/glass/bucket,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora)
+"dVF" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora)
+"dVG" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora)
+"dVH" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/rnd/xenobiology/xenoflora)
+"dVI" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora)
+"dVJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora_isolation)
+"dVK" = (/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/hydro,/area/rnd/xenobiology/xenoflora_isolation)
+"dVL" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora_isolation)
+"dVM" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora_isolation)
+"dVN" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora_isolation)
+"dVO" = (/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora_isolation)
+"dVP" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/simulated/floor/tiled/techmaint,/area/rnd/xenobiology/xenoflora_isolation)
+"dVQ" = (/obj/structure/sign/deck/first,/turf/simulated/wall/r_wall,/area/rnd/research/firstdeck/hallway)
+"dVR" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dVS" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/multi_tile/glass,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dVT" = (/obj/structure/bed/chair/office/dark,/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/green/border{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"dVU" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/beakers{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/box/botanydisk,/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/green/border{dir = 1},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"dVV" = (/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/green/border{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"dVW" = (/obj/effect/floor_decal/borderfloorwhite{dir = 5},/obj/effect/floor_decal/corner/green/border{dir = 5},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"dVX" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora)
+"dVY" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora)
+"dVZ" = (/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/borderfloorwhite{dir = 9},/obj/effect/floor_decal/corner/green/border{dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"dWa" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora)
+"dWb" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/green/border{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"dWc" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora_isolation)
+"dWd" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green,/obj/machinery/light_switch{pixel_x = -36},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora_isolation)
+"dWe" = (/obj/machinery/atmospherics/binary/pump{dir = 1; name = "Isolation to Waste"},/obj/effect/floor_decal/industrial/warning/full,/turf/simulated/floor/plating,/area/rnd/xenobiology/xenoflora_isolation)
+"dWf" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 6},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 9},/turf/simulated/floor/tiled,/area/rnd/xenobiology/xenoflora_isolation)
+"dWg" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/portable_atmospherics/canister,/turf/simulated/floor/tiled,/area/rnd/xenobiology/xenoflora_isolation)
+"dWh" = (/obj/machinery/vending/fitness,/turf/simulated/floor/tiled/dark,/area/rnd/research/firstdeck/hallway)
+"dWi" = (/obj/structure/closet/firecloset,/turf/simulated/floor/tiled/dark,/area/rnd/research/firstdeck/hallway)
+"dWj" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/gloves{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/box/syringes,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"dWk" = (/obj/structure/table/glass,/obj/machinery/reagentgrinder,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"dWl" = (/obj/structure/table/glass,/obj/item/weapon/clipboard,/obj/item/weapon/folder/white,/obj/item/weapon/pen,/obj/machinery/camera/network/research{c_tag = "SCI - Xenoflora Port"; dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"dWm" = (/obj/structure/table/glass,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/hand_labeler,/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"dWn" = (/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/borderfloorwhite{dir = 4},/obj/effect/floor_decal/corner/green/border{dir = 4},/obj/machinery/light_switch{pixel_x = 11; pixel_y = -24},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"dWo" = (/obj/structure/table/glass,/obj/item/device/analyzer/plant_analyzer,/obj/item/weapon/tape_roll,/obj/item/device/analyzer/plant_analyzer,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"dWp" = (/obj/effect/floor_decal/industrial/warning/full,/obj/machinery/atmospherics/tvalve/mirrored,/obj/machinery/light,/turf/simulated/floor/plating,/area/rnd/xenobiology/xenoflora)
+"dWq" = (/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/hydro,/area/rnd/xenobiology/xenoflora)
+"dWr" = (/obj/structure/closet/crate/hydroponics/prespawned,/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/obj/structure/disposalpipe/segment,/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/green/border{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"dWs" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/hydro,/area/rnd/xenobiology/xenoflora)
+"dWt" = (/obj/machinery/seed_storage/xenobotany,/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/obj/machinery/camera/network/research{c_tag = "SCI - Xenoflora Starboard"; dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"dWu" = (/obj/machinery/vending/hydronutrients{categories = 3},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"dWv" = (/obj/structure/closet/secure_closet/hydroponics{req_access = list(47)},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"dWw" = (/obj/structure/closet/secure_closet/hydroponics{req_access = list(47)},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"dWx" = (/obj/structure/closet/emcloset/legacy,/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 9; icon_state = "intact"},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora)
+"dWy" = (/obj/machinery/atmospherics/binary/pump{dir = 4; name = "Port to Isolation"},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora_isolation)
+"dWz" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 6},/obj/machinery/meter,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora_isolation)
+"dWA" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 1},/obj/machinery/meter,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora_isolation)
+"dWB" = (/obj/machinery/atmospherics/pipe/manifold4w/visible,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora_isolation)
+"dWC" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/machinery/meter,/turf/simulated/floor/tiled,/area/rnd/xenobiology/xenoflora_isolation)
+"dWD" = (/obj/machinery/atmospherics/unary/heater{dir = 8; icon_state = "heater"},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled,/area/rnd/xenobiology/xenoflora_isolation)
+"dWE" = (/obj/machinery/vending/cigarette,/turf/simulated/floor/tiled/dark,/area/rnd/research/firstdeck/hallway)
+"dWF" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/borderfloorwhite/corner,/obj/effect/floor_decal/corner/purple/bordercorner,/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dWG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/borderfloorwhite/corner{dir = 8},/obj/effect/floor_decal/corner/purple/bordercorner{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dWH" = (/obj/structure/closet/emcloset/legacy,/turf/simulated/floor/tiled/dark,/area/rnd/research/firstdeck/hallway)
+"dWI" = (/obj/machinery/status_display,/turf/simulated/wall,/area/rnd/xenobiology/xenoflora)
+"dWJ" = (/obj/machinery/door/firedoor/glass,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/rnd/xenobiology/xenoflora)
+"dWK" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/universal,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/rnd/xenobiology/xenoflora)
+"dWL" = (/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/glass_research{name = "Xenoflora Research"; req_access = list(55)},/turf/simulated/floor/tiled/steel_grid,/area/rnd/xenobiology/xenoflora)
+"dWM" = (/obj/machinery/smartfridge,/obj/structure/disposalpipe/segment,/turf/simulated/wall,/area/rnd/xenobiology/xenoflora)
+"dWN" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/glass_research{name = "Xenoflora Research"; req_access = list(55)},/turf/simulated/floor/tiled/steel_grid,/area/rnd/xenobiology/xenoflora)
+"dWO" = (/obj/machinery/ai_status_display,/turf/simulated/wall,/area/rnd/xenobiology/xenoflora)
+"dWP" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora_isolation)
+"dWQ" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/item/weapon/tool/wrench,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora_isolation)
+"dWR" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora_isolation)
+"dWS" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora_isolation)
+"dWT" = (/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 5},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/turf/simulated/floor/tiled,/area/rnd/xenobiology/xenoflora_isolation)
+"dWU" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/camera/network/research{c_tag = "SCI - Xenoflora Isolation Aft"; dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora_isolation)
+"dWV" = (/obj/machinery/atmospherics/unary/freezer{dir = 8; icon_state = "freezer"},/turf/simulated/floor/tiled,/area/rnd/xenobiology/xenoflora_isolation)
+"dWW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/firstdeck/foreport)
+"dWX" = (/obj/machinery/vending/coffee,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/dark,/area/rnd/research/firstdeck/hallway)
+"dWY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/effect/floor_decal/borderfloorwhite/corner{dir = 4},/obj/effect/floor_decal/corner/purple/bordercorner{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dWZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/purple/border{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dXa" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/alarm{pixel_y = 22},/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dXb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dXc" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/obj/machinery/camera/network/research{c_tag = "SCI - First Deck Research Hallway Port"; dir = 2},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dXd" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dXe" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/borderfloorwhite/corner{dir = 1},/obj/effect/floor_decal/corner/purple/bordercorner{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dXf" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dXg" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/door/firedoor/border_only,/obj/effect/floor_decal/borderfloorwhite/corner2{dir = 1},/obj/effect/floor_decal/borderfloorwhite/corner2{dir = 4},/obj/effect/floor_decal/corner/purple/bordercorner2{dir = 4},/obj/effect/floor_decal/corner/purple/bordercorner2{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dXh" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dXi" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dXj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dXk" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/borderfloorwhite/corner{dir = 4},/obj/effect/floor_decal/corner/purple/bordercorner{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dXl" = (/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dXm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/obj/machinery/camera/network/research{c_tag = "SCI - First Deck Research Hallway Starboard"; dir = 2},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dXn" = (/obj/effect/floor_decal/borderfloorwhite{dir = 5},/obj/effect/floor_decal/corner/purple/border{dir = 5},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dXo" = (/turf/simulated/wall/r_wall,/area/rnd/xenobiology)
+"dXp" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/tiled/dark,/area/rnd/research/firstdeck/hallway)
+"dXq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/purple/border,/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dXr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/borderfloorwhite{dir = 10},/obj/effect/floor_decal/corner/purple/border{dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dXs" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/borderfloorwhite/corner{dir = 8},/obj/effect/floor_decal/corner/purple/bordercorner{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dXt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dXu" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dXv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/purple/border,/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dXw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/light_switch{pixel_x = 11; pixel_y = -24},/obj/effect/floor_decal/borderfloorwhite/corner,/obj/effect/floor_decal/corner/purple/bordercorner,/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dXx" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/purple/border,/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dXy" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/purple/border,/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dXz" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/purple/border,/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dXA" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/junction,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/purple/border,/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dXB" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/purple/border,/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dXC" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/purple/border,/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dXD" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/purple/border,/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dXE" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dXF" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/effect/floor_decal/borderfloorwhite/corner{dir = 8},/obj/effect/floor_decal/corner/purple/bordercorner{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dXG" = (/obj/structure/reagent_dispensers/watertank,/obj/item/weapon/extinguisher,/turf/simulated/floor/tiled/dark,/area/rnd/research/firstdeck/hallway)
+"dXH" = (/obj/effect/floor_decal/borderfloorwhite{dir = 4},/obj/effect/floor_decal/corner/purple/border{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dXI" = (/obj/structure/disposalpipe/trunk,/obj/structure/disposaloutlet{dir = 4},/turf/simulated/floor/reinforced,/area/rnd/xenobiology)
+"dXJ" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/turf/simulated/floor/reinforced,/area/rnd/xenobiology)
+"dXK" = (/turf/simulated/floor/reinforced,/area/rnd/xenobiology)
+"dXL" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/turf/simulated/floor/reinforced,/area/rnd/xenobiology)
+"dXM" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/blast/regular{desc = "Blastdoor divider"; id = "xenobioout7station"; name = "Containment Divider"},/turf/simulated/floor/reinforced,/area/rnd/xenobiology)
+"dXN" = (/obj/structure/disposalpipe/trunk,/obj/structure/disposaloutlet{dir = 8},/turf/simulated/floor/reinforced,/area/rnd/xenobiology)
+"dXO" = (/obj/structure/flora/pottedplant/crystal,/obj/structure/extinguisher_cabinet{pixel_x = -27},/turf/simulated/floor/tiled/dark,/area/rnd/research/firstdeck/hallway)
+"dXP" = (/obj/structure/table/glass,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/turf/simulated/floor/tiled/dark,/area/rnd/research/firstdeck/hallway)
+"dXQ" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled/dark,/area/rnd/research/firstdeck/hallway)
+"dXR" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/newscaster{pixel_x = 30; pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/rnd/research/firstdeck/hallway)
+"dXS" = (/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/tiled/steel_grid,/area/rnd/research/firstdeck/hallway)
+"dXT" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/multi_tile/glass{name = "Research Division Access"},/turf/simulated/floor/tiled/steel_grid,/area/rnd/research/firstdeck/hallway)
+"dXU" = (/obj/machinery/recharge_station,/turf/simulated/floor/tiled/dark,/area/rnd/research/firstdeck/hallway)
+"dXV" = (/obj/structure/closet/wardrobe/science_white,/turf/simulated/floor/tiled/dark,/area/rnd/research/firstdeck/hallway)
+"dXW" = (/obj/structure/table/glass,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/tiled/dark,/area/rnd/research/firstdeck/hallway)
+"dXX" = (/obj/machinery/washing_machine,/obj/machinery/light,/turf/simulated/floor/tiled/dark,/area/rnd/research/firstdeck/hallway)
+"dXY" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/maintenance{name = "Research Maintenance Access"; req_one_access = list(47)},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/rnd/research/firstdeck/hallway)
+"dXZ" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/purple/border{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dYa" = (/obj/machinery/floodlight,/obj/machinery/alarm{dir = 8; pixel_x = 22; pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/rnd/research/firstdeck/hallway)
+"dYb" = (/obj/structure/disposalpipe/segment,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/reinforced,/area/rnd/xenobiology)
+"dYc" = (/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/reinforced,/area/rnd/xenobiology)
+"dYd" = (/obj/structure/disposalpipe/segment,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/reinforced,/area/rnd/xenobiology)
+"dYe" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/rnd/xenobiology)
+"dYf" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor/plating,/area/rnd/xenobiology)
+"dYg" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/escape/firstdeck/ep_starboard1)
+"dYh" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/firstdeck/centralstarboard)
+"dYi" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/maintenance/firstdeck/centralstarboard)
+"dYj" = (/obj/effect/floor_decal/borderfloorwhite/corner,/obj/effect/floor_decal/corner/purple/bordercorner,/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dYk" = (/obj/effect/floor_decal/borderfloorwhite{dir = 6},/obj/effect/floor_decal/corner/purple/border{dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dYl" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/reinforced,/area/rnd/xenobiology)
+"dYm" = (/obj/structure/table/glass,/obj/item/clothing/glasses/science,/obj/item/clothing/glasses/science,/obj/item/weapon/weldingtool,/obj/item/clothing/head/welding,/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled,/area/rnd/xenobiology)
+"dYn" = (/obj/machinery/computer/operating{name = "Xenobiology Operating Computer"},/obj/structure/extinguisher_cabinet{pixel_x = 28; pixel_y = 0},/turf/simulated/floor/tiled,/area/rnd/xenobiology)
+"dYo" = (/obj/machinery/optable{name = "Xenobiology Operating Table"},/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/rnd/xenobiology)
+"dYp" = (/obj/item/weapon/extinguisher,/obj/structure/catwalk,/obj/structure/door_assembly/door_assembly_ext,/turf/simulated/floor/plating,/area/maintenance/firstdeck/centralstarboard)
+"dYq" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plating,/area/maintenance/firstdeck/centralstarboard)
+"dYr" = (/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d1 = 16; d2 = 0; icon_state = "16-0"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/disposalpipe/up{dir = 8},/obj/machinery/atmospherics/pipe/zpipe/up/supply{dir = 8},/turf/simulated/floor/plating,/area/maintenance/firstdeck/centralstarboard)
+"dYs" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/obj/effect/floor_decal/borderfloorwhite{dir = 4},/obj/effect/floor_decal/corner/purple/border{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dYt" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/purple/border{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dYu" = (/obj/structure/disposalpipe/segment,/obj/effect/wingrille_spawn/reinforced,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/window/reinforced/full,/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "xenobio6station"; name = "Containment Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/rnd/xenobiology)
+"dYv" = (/obj/effect/wingrille_spawn/reinforced,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced/full,/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "xenobio6station"; name = "Containment Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/rnd/xenobiology)
+"dYw" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/door/window/brigdoor/northleft{name = "Containment Pen"; req_access = list(47)},/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "xenobio6station"; name = "Containment Blast Doors"; opacity = 0},/turf/simulated/floor/tiled/techmaint,/area/rnd/xenobiology)
+"dYx" = (/obj/effect/wingrille_spawn/reinforced,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/window/reinforced/full,/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "xenobio5station"; name = "Containment Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/rnd/xenobiology)
+"dYy" = (/turf/simulated/wall,/area/rnd/xenobiology)
+"dYz" = (/obj/structure/disposalpipe/segment,/obj/effect/wingrille_spawn/reinforced,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced/full,/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "xenobio5station"; name = "Containment Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/rnd/xenobiology)
+"dYA" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/door/window/brigdoor/northleft{name = "Containment Pen"; req_access = list(47)},/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "xenobio5station"; name = "Containment Blast Doors"; opacity = 0},/turf/simulated/floor/tiled/techmaint,/area/rnd/xenobiology)
+"dYB" = (/obj/structure/table/glass,/obj/item/weapon/surgical/scalpel{pixel_y = 12},/obj/item/weapon/surgical/circular_saw,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"dYC" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"dYD" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"dYE" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/rnd/xenobiology)
+"dYF" = (/obj/structure/closet,/obj/item/toy/figure/scientist,/obj/item/clothing/accessory/armband/science,/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/clothing/shoes/galoshes,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/dark,/area/rnd/xenobiology)
+"dYG" = (/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/disposaloutlet{dir = 4},/obj/machinery/shield_diffuser,/turf/simulated/floor/airless,/area/rnd/xenobiology)
+"dYH" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/obj/machinery/light_switch{pixel_x = 11; pixel_y = -24},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/firstdeck/ep_starboard1)
+"dYI" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/maintenance{req_access = null; req_one_access = list(5,12,47)},/turf/simulated/floor/plating,/area/maintenance/firstdeck/centralstarboard)
+"dYJ" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/structure/extinguisher_cabinet{pixel_x = 25},/obj/effect/floor_decal/borderfloorwhite{dir = 4},/obj/effect/floor_decal/corner/purple/border{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dYK" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/purple/border{dir = 8},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dYL" = (/obj/structure/table/standard,/obj/machinery/reagentgrinder,/obj/machinery/vending/wallmed1{name = "Emergency NanoMed"; pixel_x = -28; pixel_y = 0},/obj/machinery/ai_status_display{pixel_y = 32},/turf/simulated/floor/tiled,/area/rnd/xenobiology)
+"dYM" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor/tiled/dark,/area/rnd/xenobiology)
+"dYN" = (/obj/structure/table/standard,/obj/machinery/chemical_dispenser/full{density = 1},/turf/simulated/floor/tiled,/area/rnd/xenobiology)
+"dYO" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/industrial/warning,/obj/machinery/button/remote/blast_door{id = "xenobio6station"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access = list(55)},/turf/simulated/floor/tiled/dark,/area/rnd/xenobiology)
+"dYP" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/window/brigdoor/southleft{name = "Containment Pen"},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/techmaint,/area/rnd/xenobiology)
+"dYQ" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/industrial/warning,/obj/machinery/button/remote/blast_door{id = "xenobio5station"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access = list(55)},/turf/simulated/floor/tiled/dark,/area/rnd/xenobiology)
+"dYR" = (/obj/structure/reagent_dispensers/watertank,/obj/item/weapon/extinguisher,/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for the divider between pens."; id = "xenobioout7station"; name = "Containment Divider Switch"; pixel_x = 0; pixel_y = 28; req_access = list(55)},/obj/effect/floor_decal/industrial/warning,/obj/machinery/light{dir = 1},/obj/machinery/camera/network/research{c_tag = "SCI - Xenobiology Fore"; dir = 2},/turf/simulated/floor/tiled/dark,/area/rnd/xenobiology)
+"dYS" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled/dark,/area/rnd/xenobiology)
+"dYT" = (/turf/simulated/floor/tiled,/area/rnd/xenobiology)
+"dYU" = (/obj/structure/sink{pixel_x = 0; pixel_y = 28},/turf/simulated/floor/tiled,/area/rnd/xenobiology)
+"dYV" = (/obj/machinery/alarm{dir = 8; pixel_x = 22; pixel_y = 0},/turf/simulated/floor/tiled,/area/rnd/xenobiology)
+"dYW" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/rnd/xenobiology)
+"dYX" = (/obj/effect/floor_decal/borderfloorwhite{dir = 9},/obj/effect/floor_decal/corner/purple/border{dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dYY" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/borderfloorwhite/corner{dir = 1},/obj/effect/floor_decal/corner/purple/bordercorner{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dYZ" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/beakers{pixel_x = 2; pixel_y = 2},/turf/simulated/floor/tiled,/area/rnd/xenobiology)
+"dZa" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/regular{density = 0; dir = 1; icon_state = "pdoor0"; id = "xenobiocontainstation"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/rnd/xenobiology)
+"dZb" = (/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"dZc" = (/obj/structure/bed/chair/office/light{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"dZd" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"dZe" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"dZf" = (/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"dZg" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"dZh" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"dZi" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/obj/structure/window/reinforced,/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 9},/turf/simulated/floor/tiled/dark,/area/rnd/xenobiology)
+"dZj" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"dZk" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/reinforced,/area/rnd/xenobiology)
+"dZl" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/wingrille_spawn/reinforced,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio2station"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/window/reinforced/full,/turf/simulated/floor/plating,/area/rnd/xenobiology)
+"dZm" = (/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/disposaloutlet,/turf/simulated/floor/reinforced,/area/rnd/xenobiology)
+"dZn" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/reinforced,/area/rnd/xenobiology)
+"dZo" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/effect/floor_decal/borderfloorwhite/corner{dir = 1},/obj/effect/floor_decal/corner/purple/bordercorner{dir = 1},/obj/machinery/camera/network/research{c_tag = "SCI - First Deck Research Hallway Aft"; dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dZp" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/borderfloorwhite/corner{dir = 4},/obj/effect/floor_decal/corner/purple/bordercorner{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dZq" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dZr" = (/obj/structure/table/standard,/obj/item/weapon/folder/red{pixel_y = 3},/obj/item/weapon/folder/blue{pixel_x = 5},/turf/simulated/floor/tiled,/area/rnd/xenobiology)
+"dZs" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/blast/regular{density = 0; dir = 1; icon_state = "pdoor0"; id = "xenobiocontainstation"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/rnd/xenobiology)
+"dZt" = (/obj/structure/bed/chair/office/light{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"dZu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/rnd/xenobiology)
+"dZv" = (/obj/structure/table/standard,/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/machinery/recharger,/turf/simulated/floor/tiled,/area/rnd/xenobiology)
+"dZw" = (/obj/structure/table/standard,/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/item/weapon/melee/baton/slime/loaded,/obj/item/weapon/gun/energy/taser/xeno,/turf/simulated/floor/tiled,/area/rnd/xenobiology)
+"dZx" = (/obj/structure/table/standard,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/rnd/xenobiology)
+"dZy" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/window/brigdoor/westleft{name = "Containment Pen"; req_access = list(47)},/turf/simulated/floor/tiled/techmaint,/area/rnd/xenobiology)
+"dZz" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"dZA" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/door/window/brigdoor/eastright{name = "Containment Pen"; req_access = list(47)},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio2station"; name = "Containment Blast Doors"; opacity = 0},/turf/simulated/floor/tiled/techmaint,/area/rnd/xenobiology)
+"dZB" = (/mob/living/simple_mob/slime/xenobio,/turf/simulated/floor/reinforced,/area/rnd/xenobiology)
+"dZC" = (/obj/effect/floor_decal/industrial/warning/corner,/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dZD" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dZE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway)
+"dZF" = (/obj/structure/table/standard,/obj/item/weapon/clipboard,/obj/item/weapon/folder,/obj/item/weapon/pen,/turf/simulated/floor/tiled,/area/rnd/xenobiology)
+"dZG" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/regular{density = 0; dir = 1; icon_state = "pdoor0"; id = "xenobiocontainstation"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable/green,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/rnd/xenobiology)
+"dZH" = (/obj/structure/table/standard,/obj/structure/window/reinforced{dir = 1; health = 1e+006},/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/storage/box/syringes,/obj/item/glass_jar,/obj/item/glass_jar,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/rnd/xenobiology)
+"dZI" = (/obj/machinery/processor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/rnd/xenobiology)
+"dZJ" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/machinery/button/remote/blast_door{id = "xenobio2station"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access = list(55)},/turf/simulated/floor/tiled/dark,/area/rnd/xenobiology)
+"dZK" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"dZL" = (/obj/effect/wingrille_spawn/reinforced,/obj/structure/cable/green,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio2station"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/window/reinforced/full,/turf/simulated/floor/plating,/area/rnd/xenobiology)
+"dZM" = (/obj/structure/catwalk,/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/firstdeck/centralport)
+"dZN" = (/obj/structure/sign/warning/biohazard,/turf/simulated/wall/r_wall,/area/rnd/xenobiology)
+"dZO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "xenostation_airlock_control"; name = "Xenobiology Access Button"; pixel_x = -26; pixel_y = 6; req_access = list(55)},/obj/machinery/door/airlock/research{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "xenostation_airlock_exterior"; locked = 1; name = "Xenobiology External Airlock"; req_access = list(55)},/turf/simulated/floor/tiled/steel_grid,/area/rnd/xenobiology)
+"dZP" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_x = -2; pixel_y = 5},/obj/item/weapon/pen/blue{pixel_x = -5; pixel_y = -1},/obj/item/weapon/pen/red{pixel_x = -1; pixel_y = 3},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/light_switch{pixel_x = -36},/turf/simulated/floor/tiled,/area/rnd/xenobiology)
+"dZQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"dZR" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/tiled,/area/rnd/xenobiology)
+"dZS" = (/obj/machinery/smartfridge/secure/extract,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"dZT" = (/obj/machinery/disposal,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"dZU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"dZV" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"dZW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/rnd/xenobiology)
+"dZX" = (/obj/structure/reagent_dispensers/watertank/high,/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/machinery/recharger/wallcharger{pixel_x = 36; pixel_y = 0},/obj/item/weapon/extinguisher,/obj/machinery/camera/network/research{c_tag = "SCI - Xenobiology Starboard"; dir = 8},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled/dark,/area/rnd/xenobiology)
+"dZY" = (/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"dZZ" = (/obj/structure/curtain/open/shower,/obj/effect/floor_decal/steeldecal/steel_decals5{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals10{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals10,/obj/machinery/shower{dir = 4; icon_state = "shower"; pixel_x = 5; pixel_y = 0},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled,/area/rnd/xenobiology)
+"eaa" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"eab" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/embedded_controller/radio/airlock/access_controller{id_tag = "xenostation_airlock_control"; name = "Xenobiology Access Console"; pixel_x = -26; pixel_y = 26; tag_exterior_door = "xenostation_airlock_exterior"; tag_interior_door = "xenostation_airlock_interior"},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"eac" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/item/clothing/shoes/galoshes,/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 8},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/rnd/xenobiology)
+"ead" = (/obj/structure/table/standard,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/item/stack/material/phoron{amount = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/rnd/xenobiology)
+"eae" = (/obj/structure/table/standard,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor/tiled,/area/rnd/xenobiology)
+"eaf" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced,/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/machinery/button/remote/blast_door{id = "xenobio1station"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access = list(55)},/turf/simulated/floor/tiled/dark,/area/rnd/xenobiology)
+"eag" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"eah" = (/obj/effect/wingrille_spawn/reinforced,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio1station"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/window/reinforced/full,/turf/simulated/floor/plating,/area/rnd/xenobiology)
+"eai" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/blast/regular{desc = "By gods, release the hounds!"; id = "xenobiostationext"; name = "Containment Release"},/turf/simulated/floor/reinforced,/area/rnd/xenobiology)
+"eaj" = (/obj/structure/closet/l3closet/scientist,/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 9},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/item/weapon/extinguisher,/obj/machinery/firealarm{dir = 8; pixel_x = -24; pixel_y = 0},/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled/monotile,/area/rnd/xenobiology)
+"eak" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"eal" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"eam" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/rnd/xenobiology)
+"ean" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/airlock/research{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "xenostation_airlock_interior"; locked = 1; name = "Xenobiology Internal Airlock"; req_access = list(55)},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "xenostation_airlock_control"; name = "Xenobiology Access Button"; pixel_x = 0; pixel_y = -26; req_access = list(55)},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/steel_grid,/area/rnd/xenobiology)
+"eao" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"eap" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/rnd/xenobiology)
+"eaq" = (/obj/structure/table/standard,/obj/structure/window/reinforced,/obj/item/clothing/gloves/sterile/latex,/obj/item/weapon/hand_labeler,/obj/item/device/slime_scanner,/obj/item/device/slime_scanner,/turf/simulated/floor/tiled,/area/rnd/xenobiology)
+"ear" = (/obj/structure/table/standard,/obj/structure/window/reinforced,/obj/item/weapon/melee/baton/slime/loaded,/obj/item/weapon/gun/energy/taser/xeno,/turf/simulated/floor/tiled,/area/rnd/xenobiology)
+"eas" = (/obj/structure/table/standard,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor/tiled,/area/rnd/xenobiology)
+"eat" = (/obj/machinery/door/window/brigdoor/westleft{name = "Containment Pen"; req_access = list(47)},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/techmaint,/area/rnd/xenobiology)
+"eau" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"eav" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/window/brigdoor/eastright{name = "Containment Pen"; req_access = list(47)},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio1station"; name = "Containment Blast Doors"; opacity = 0},/turf/simulated/floor/tiled/techmaint,/area/rnd/xenobiology)
+"eaw" = (/obj/structure/closet/l3closet/scientist,/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/item/weapon/extinguisher,/obj/machinery/camera/network/research{c_tag = "SCI - Xenobiology Access"; dir = 1},/turf/simulated/floor/tiled/monotile,/area/rnd/xenobiology)
+"eax" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/structure/extinguisher_cabinet{pixel_y = -30},/turf/simulated/floor/tiled/monotile,/area/rnd/xenobiology)
+"eay" = (/obj/effect/floor_decal/industrial/warning,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/alarm{dir = 1; pixel_y = -22},/mob/living/bot/secbot/slime,/turf/simulated/floor/tiled/monotile,/area/rnd/xenobiology)
+"eaz" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/simulated/floor/tiled,/area/rnd/xenobiology)
+"eaA" = (/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for containment."; id = "xenobiocontainstation"; name = "Containment Switch"; pixel_x = 0; pixel_y = -6; req_access = null},/turf/simulated/wall/r_wall,/area/rnd/xenobiology)
+"eaB" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"eaC" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"eaD" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"eaE" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor/tiled/dark,/area/rnd/xenobiology)
+"eaF" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology)
+"eaG" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/wingrille_spawn/reinforced,/obj/structure/cable/green,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio1station"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/window/reinforced/full,/turf/simulated/floor/plating,/area/rnd/xenobiology)
+"eaH" = (/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/disposaloutlet{dir = 1},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/turf/simulated/floor/reinforced,/area/rnd/xenobiology)
+"eaI" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light/small,/turf/simulated/floor/reinforced,/area/rnd/xenobiology)
+"eaJ" = (/obj/machinery/door/blast/regular{desc = "By gods, release the hounds!"; id = "xenobiostationext"; name = "Containment Release"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/reinforced,/area/rnd/xenobiology)
+"eaK" = (/obj/machinery/door/firedoor/border_only,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/maintenance{req_access = null; req_one_access = list(5,12,47)},/turf/simulated/floor/plating,/area/maintenance/firstdeck/centralstarboard)
+"eaL" = (/obj/structure/reagent_dispensers/fueltank,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/obj/machinery/status_display{pixel_y = -32},/turf/simulated/floor/tiled,/area/rnd/xenobiology)
+"eaM" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 9},/turf/simulated/floor/tiled/dark,/area/rnd/xenobiology)
+"eaN" = (/obj/machinery/requests_console{department = "Science"; departmentType = 2; name = "Science Requests Console"; pixel_x = 0; pixel_y = -30},/obj/structure/reagent_dispensers/watertank/high,/turf/simulated/floor/tiled,/area/rnd/xenobiology)
+"eaO" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/obj/machinery/button/remote/blast_door{id = "xenobio3station"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access = list(55)},/turf/simulated/floor/tiled/dark,/area/rnd/xenobiology)
+"eaP" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/window/brigdoor/northright{name = "Containment Pen"; req_access = list(47)},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/turf/simulated/floor/tiled/techmaint,/area/rnd/xenobiology)
+"eaQ" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/obj/machinery/button/remote/blast_door{id = "xenobio4station"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access = list(55)},/turf/simulated/floor/tiled/dark,/area/rnd/xenobiology)
+"eaR" = (/obj/structure/reagent_dispensers/watertank,/obj/item/weapon/extinguisher,/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/obj/machinery/recharger/wallcharger{pixel_x = 5; pixel_y = -32},/obj/machinery/light,/obj/machinery/camera/network/research{c_tag = "SCI - Xenobiology Aft"; dir = 1},/turf/simulated/floor/tiled/dark,/area/rnd/xenobiology)
+"eaS" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/structure/window/reinforced{dir = 8},/obj/effect/floor_decal/industrial/warning{dir = 5},/turf/simulated/floor/tiled/dark,/area/rnd/xenobiology)
+"eaT" = (/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/obj/structure/closet/emcloset/legacy,/turf/simulated/floor/tiled,/area/rnd/xenobiology)
+"eaU" = (/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for a door to space."; id = "xenobiostationext"; name = "Containment Release Switch"; pixel_x = 28; pixel_y = 0; req_access = list(55)},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/tiled,/area/rnd/xenobiology)
+"eaV" = (/obj/structure/disposalpipe/segment,/obj/effect/wingrille_spawn/reinforced,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/window/reinforced/full,/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "xenobio3station"; name = "Containment Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/rnd/xenobiology)
+"eaW" = (/obj/effect/wingrille_spawn/reinforced,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced/full,/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "xenobio3station"; name = "Containment Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/rnd/xenobiology)
+"eaX" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/door/window/brigdoor/southright{name = "Containment Pen"; req_access = list(47)},/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "xenobio3station"; name = "Containment Blast Doors"; opacity = 0},/turf/simulated/floor/tiled/techmaint,/area/rnd/xenobiology)
+"eaY" = (/obj/effect/wingrille_spawn/reinforced,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/window/reinforced/full,/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "xenobio4station"; name = "Containment Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/rnd/xenobiology)
+"eaZ" = (/obj/structure/disposalpipe/segment,/obj/effect/wingrille_spawn/reinforced,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced/full,/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "xenobio4station"; name = "Containment Blast Doors"; opacity = 0},/turf/simulated/floor/plating,/area/rnd/xenobiology)
+"eba" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/door/window/brigdoor/southright{name = "Containment Pen"; req_access = list(47)},/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "xenobio4station"; name = "Containment Blast Doors"; opacity = 0},/turf/simulated/floor/tiled/techmaint,/area/rnd/xenobiology)
+"ebb" = (/obj/structure/closet/radiation,/turf/simulated/floor/tiled/dark,/area/rnd/xenobiology)
+"ebc" = (/obj/structure/closet/firecloset/full/double,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/turf/simulated/floor/tiled,/area/rnd/xenobiology)
+"ebd" = (/obj/structure/closet/l3closet/general,/obj/structure/extinguisher_cabinet{pixel_x = 28; pixel_y = 0},/turf/simulated/floor/tiled,/area/rnd/xenobiology)
+"ebe" = (/obj/structure/closet/bombcloset,/obj/machinery/light,/turf/simulated/floor/tiled,/area/rnd/xenobiology)
+"ebf" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/structure/disposaloutlet{dir = 4},/turf/simulated/floor/reinforced,/area/rnd/xenobiology)
+"ebg" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/structure/disposaloutlet{dir = 8},/turf/simulated/floor/reinforced,/area/rnd/xenobiology)
+"ebh" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{icon_state = "intact"; dir = 6},/obj/random/mob/mouse,/turf/simulated/floor/tiled/steel_dirty,/area/engineering/auxiliary_engineering)
+"ebi" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/firstdeck/aftstarboard)
+"ebj" = (/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/firstdeck/aftport)
+"ebk" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals5,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/tiled,/area/security/checkpoint3)
+"ebl" = (/obj/structure/table/steel,/obj/item/device/communicator,/obj/item/device/communicator,/obj/item/device/radio/headset,/obj/item/device/radio/headset,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/security/prison)
+"ebm" = (/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/airlock/security{name = "Equipment Storage"; req_access = list(2)},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled,/area/security/security_equiptment_storage)
+"ebn" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/cable/green,/obj/effect/wingrille_spawn/reinforced/polarized{id = "hosoffice"},/turf/simulated/floor/plating,/area/crew_quarters/heads/sc/hos)
+"ebo" = (/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green,/obj/effect/wingrille_spawn/reinforced/polarized{id = "hosoffice"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/crew_quarters/heads/sc/hos)
+"ebp" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/security_port)
+"ebq" = (/obj/machinery/atmospherics/valve{dir = 4},/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
+"ebr" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/random/mob/mouse,/turf/simulated/floor,/area/maintenance/engineering)
+"ebs" = (/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/research)
+"ebt" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/meter,/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/research)
+"ebu" = (/obj/structure/extinguisher_cabinet{pixel_x = 28; pixel_y = 0},/obj/effect/floor_decal/borderfloorwhite{dir = 5},/obj/effect/floor_decal/corner/purple/border{dir = 5},/obj/structure/closet/secure_closet/scientist,/turf/simulated/floor/tiled/white,/area/rnd/research_lockerroom)
+"ebv" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/machinery/photocopier,/turf/simulated/floor/wood,/area/rnd/research)
+"ebw" = (/obj/structure/closet/secure_closet/scientist,/obj/effect/floor_decal/borderfloorwhite/corner{dir = 1},/obj/effect/floor_decal/corner/purple/bordercorner{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/research_lockerroom)
+"ebx" = (/obj/machinery/power/smes/buildable{charge = 1e+007; RCon_tag = "Substation - Research"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/maintenance/substation/research)
+"eby" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/research_lockerroom)
+"ebz" = (/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled/white,/area/rnd/research_lockerroom)
+"ebA" = (/obj/structure/bed/chair{dir = 8},/obj/effect/landmark/start{name = "Scientist"},/turf/simulated/floor/wood,/area/rnd/research)
+"ebB" = (/obj/structure/bed/chair{dir = 4},/obj/effect/landmark/start{name = "Xenobiologist"},/turf/simulated/floor/wood,/area/rnd/research)
+"ebC" = (/obj/structure/table/glass,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/item/weapon/clipboard,/obj/item/weapon/clipboard,/obj/item/weapon/storage/firstaid/regular{pixel_x = 5; pixel_y = 5},/turf/simulated/floor/wood,/area/rnd/research)
+"ebD" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/machinery/light_switch{pixel_x = 12; pixel_y = -24},/obj/structure/cable/green,/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/purple/border,/turf/simulated/floor/tiled/white,/area/rnd/research_lockerroom)
+"ebE" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/purple/border,/turf/simulated/floor/tiled/white,/area/rnd/research_lockerroom)
+"ebF" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/purple/border,/turf/simulated/floor/tiled/white,/area/rnd/research_lockerroom)
+"ebG" = (/obj/structure/sign/warning/compressed_gas,/turf/simulated/wall,/area/rnd/storage)
+"ebH" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/landmark/start{name = "Xenobiologist"},/turf/simulated/floor/wood,/area/rnd/research)
+"ebI" = (/obj/structure/bed/chair{dir = 4},/obj/effect/landmark/start{name = "Scientist"},/turf/simulated/floor/wood,/area/rnd/research)
+"ebJ" = (/obj/structure/closet/crate/radiation,/obj/item/clothing/glasses/meson,/obj/item/clothing/glasses/meson,/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/light,/obj/item/stack/material/lead{amount = 30},/turf/simulated/floor,/area/engineering/storage)
+"ebK" = (/obj/structure/railing,/turf/simulated/open,/area/rnd/research)
+"ebL" = (/turf/simulated/floor/tiled/steel_grid,/area/rnd/research)
+"ebM" = (/obj/effect/floor_decal/borderfloorwhite{dir = 5},/obj/effect/floor_decal/corner/purple/border{dir = 5},/obj/structure/closet/firecloset,/turf/simulated/floor/tiled/white,/area/rnd/research)
+"ebN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 9},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
+"ebO" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/purple/border,/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"ebP" = (/obj/structure/disposalpipe/up{dir = 1},/obj/structure/cable{d1 = 16; d2 = 0; icon_state = "16-0"},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/railing{dir = 4},/obj/machinery/atmospherics/pipe/zpipe/up/supply{dir = 4},/obj/machinery/atmospherics/pipe/zpipe/up/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/substation/central)
+"ebQ" = (/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000; pixel_x = 5; pixel_y = -5},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000; pixel_x = 5; pixel_y = -5},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000; pixel_x = 5; pixel_y = -5},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000; pixel_x = 5; pixel_y = -5},/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/weapon/storage/firstaid/regular{empty = 1; name = "First-Aid (empty)"},/obj/item/weapon/storage/firstaid/regular{empty = 1; name = "First-Aid (empty)"},/obj/item/weapon/storage/firstaid/regular{empty = 1; name = "First-Aid (empty)"},/obj/item/device/healthanalyzer,/obj/item/device/healthanalyzer,/obj/item/device/healthanalyzer,/obj/item/device/flash/synthetic,/obj/item/device/flash/synthetic,/obj/item/device/flash/synthetic,/obj/item/device/flash/synthetic,/obj/item/device/flash/synthetic,/obj/item/device/flash/synthetic,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil,/obj/machinery/light,/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/purple/border,/obj/structure/closet{name = "robotics parts"},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"ebR" = (/obj/item/clothing/glasses/welding,/obj/item/clothing/glasses/welding,/obj/item/clothing/head/welding{pixel_x = -3; pixel_y = 5},/obj/item/clothing/head/welding{pixel_x = -3; pixel_y = 5},/obj/machinery/ai_status_display{pixel_y = -32},/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/purple/border,/obj/structure/closet{name = "welding equipment"},/turf/simulated/floor/tiled/white,/area/assembly/robotics)
+"ebS" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/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/rnd/research)
+"ebT" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/borderfloorwhite/corner{dir = 1},/obj/effect/floor_decal/corner/purple/bordercorner{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/disposalpipe/junction,/turf/simulated/floor/tiled/white,/area/rnd/research)
+"ebU" = (/obj/machinery/door/firedoor/border_only,/obj/structure/lattice,/obj/structure/cable/green{d1 = 32; d2 = 4; icon_state = "32-4"},/obj/structure/disposalpipe/down{dir = 4},/turf/simulated/open,/area/maintenance/research_medical)
+"ebV" = (/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/wall/r_wall,/area/rnd/research)
+"ebW" = (/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/research)
+"ebX" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/tiled/white,/area/rnd/research)
+"ebY" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 22},/obj/machinery/floodlight,/turf/simulated/floor/plating,/area/maintenance/research_medical)
+"ebZ" = (/obj/machinery/camera/network/second_deck{c_tag = "Second Deck - Starboard Hallway One"},/obj/machinery/light{dir = 1},/obj/effect/floor_decal/borderfloor/corner{dir = 4},/obj/effect/floor_decal/corner/purple/bordercorner{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/ascenter)
+"eca" = (/obj/machinery/camera/network/second_deck{c_tag = "Second Deck - Starboard Hallway Three"},/obj/effect/floor_decal/borderfloor/corner{dir = 1},/obj/effect/floor_decal/corner/purple/bordercorner{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/starboard)
+"ecb" = (/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"ecc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/black{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"ecd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/camera/network/second_deck{c_tag = "Second Deck - Starboard Hallway Four"; dir = 4},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/starboard)
+"ece" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/camera/network/second_deck{c_tag = "Second Deck - Starboard Hallway Two"; dir = 1},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/paleblue/border,/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/starboard)
+"ecf" = (/obj/effect/floor_decal/borderfloorwhite/corner,/obj/effect/floor_decal/corner/lime/bordercorner,/obj/machinery/atmospherics/pipe/simple/hidden/red{icon_state = "intact"; dir = 9},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"ecg" = (/obj/item/weapon/storage/secure/safe{pixel_x = 5; pixel_y = -29},/obj/machinery/light,/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/lime/border,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"ech" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/red{icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/black,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"eci" = (/obj/effect/floor_decal/borderfloorwhite/corner{dir = 8},/obj/effect/floor_decal/corner/lime/bordercorner{dir = 8},/turf/simulated/floor/tiled/white,/area/medical/virology)
+"ecj" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/black,/turf/simulated/floor/tiled/white,/area/medical/virology)
+"eck" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/multi_tile/glass{dir = 2},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/stairwell)
+"ecl" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/maintenance/cargo)
+"ecm" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/tiled/white,/area/medical/medbay2)
+"ecn" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"eco" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/vehicle/train/engine{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/quartermaster/office)
+"ecp" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/vehicle/train/trolley{dir = 8},/turf/simulated/floor/tiled,/area/quartermaster/office)
+"ecq" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"ecr" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/catwalk,/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/bar)
+"ecs" = (/obj/item/glass_jar,/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/cargo)
+"ect" = (/obj/structure/table/marble,/obj/item/weapon/reagent_containers/food/drinks/glass2/square{pixel_x = 8; pixel_y = 8},/obj/item/weapon/reagent_containers/food/drinks/glass2/square{pixel_x = 0; pixel_y = 8},/obj/item/weapon/reagent_containers/food/drinks/glass2/square{pixel_x = -8; pixel_y = 8},/obj/item/weapon/reagent_containers/food/drinks/glass2/square{pixel_x = 8; pixel_y = 4},/obj/item/weapon/reagent_containers/food/drinks/glass2/square{pixel_x = 0; pixel_y = 4},/obj/item/weapon/reagent_containers/food/drinks/glass2/square{pixel_x = -8; pixel_y = 4},/obj/machinery/camera/network/civilian{c_tag = "CIV - Cafe Back Room"; dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled/yellow,/area/crew_quarters/coffee_shop)
+"ecu" = (/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/cargo)
+"ecv" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/obj/machinery/light/small,/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/medbay)
+"ecw" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/machinery/light_switch{pixel_x = 11; pixel_y = -24},/obj/structure/cable/green,/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/turf/simulated/floor/tiled/white,/area/medical/patient_wing)
+"ecx" = (/obj/machinery/light/small{dir = 8},/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/chapel)
+"ecy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/catwalk,/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/bar)
+"ecz" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock{name = "Chapel Office"; req_access = list(27)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/steel_grid,/area/chapel/office)
+"ecA" = (/obj/structure/table/woodentable,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/item/weapon/deck/cards,/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/turf/simulated/floor/wood,/area/library)
+"ecB" = (/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/locker)
+"ecC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/meter,/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/thirddeck/foreport)
+"ecD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/meter,/obj/random/mob/mouse,/turf/simulated/floor/plating,/area/maintenance/thirddeck/forestarboard)
+"ecE" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "heads_meeting"; name = "Meeting Room Window Shutters"; opacity = 0},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/bridge/meeting_room)
+
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -10689,61 +11047,61 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaaadaaaaaaaafaaaaaaaaiaavaawaaxaayaaxaawaazaajaaAaaBaaCaaDaaEaaFaaGaaHaaIaaJaaKaalaaLaaMaaLaajaaNaaOaaNaanaaaaaaaafaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaaaaaaaafaafaaaaaaaafaaaaaaaaiaaPaawaawaawaawaawaaQaajaaRaaSaaTaaUaaVaaWaaXaaXaaXaaYaaZaamaaLabaaaLaajaaNabbaaNaanaaaaaaaafaaaaaaaadaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaahaahaahaahaaaaaaaaaabcaaaaaaaaaaaiabdabeaaiabfabgabgabgabgabgabhaajabiabjaajabkablabmabnaboaaJabpabqaalabrabsabrabtabuabvabuaanabwabxaanaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaiabyabyaaiabzabAabAabBabAabAabCaajaajaajaajaajabDabEaaJaajabFaajaajaajaaLabGaaLabtaaNabHaaNaanabIabIaanaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaadaafaafaafabJabKabLabMabNabOabPabQabRabSabTabUabVabWabXabUabYabZacaabtacbaccacdabtaceacfaceabtacgachacgaciacjackaclaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaacmacnacoacpacqacqacracsactacqacqabUacuacvacwabUacxacyaeUabtacAacBacCabtacDacEacFabtacDacGacFacHacIacJacKaaaaaaaaaaadaadaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaagaadaadaadaadaafaagaadaadaadaafaafaaaaaaaafaadaadaadaadaaaaaaaaaaaaacLacMacNacOaapaapaaoacPaaoaapaapabUacQacRacQacSacTacUacVabtacWacXacYacZadaadbadcabtadaaddadeadfadgadhadiaaaaaaaaaaaaaadaadaagaaaaaaaaaaaeaadaadaadaadaadaadaafaagaadaadaadabcaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaiabyabyaaiabzabAabAabBabAabAabCaajaajaajaajaajabDabEaaJaajabFaajaajaajaaLabGaaLabtaaNabHaaNaanabIabIaanaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadIadIadIadIadIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaadaafaafaafabJabKabLabMabNabOabPabQabRabSabTabUabVabWabXabUabYabZacaabtacbaccacdabtaceacfaceabtacgachacgaciacjackaclaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadIadIadIadIadIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaacmacnacoacpacqacqacracsactacqacqabUacuacvacwabUacxacyaeUabtacAacBacCabtacDacEacFabtacDacGacFacHacIacJacKaaaaaaaaaaadaadaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadIadIadIadIadIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaagaadaadaadaadaafaagaadaadaadaafaafaaaaaaaafaadaadaadaadaaaaaaaaaaaaacLacMacNacOaapaapaaoacPaaoaapaapabUacQacRacQacSacTacUacVabtacWacXacYacZadaadbadcabtadaaddadeadfadgadhadiaaaaaaaaaaaaaadaadaagaaaaaaaaaaaeaadaadaadaadaadaadaafaagaadaadaadabcaafaadaaaaaaaaaaaaaaaadIadIadIadIadIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaabaaaaaaaaaaaiadjadkadladmadnadoadpadqadradsadtadsaduadnadnadvadwadnadnadxadnadyadzadAadBadCadDadCadzadEadFadGadHaanaaaaaaaaaaabaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaadaadaaaaaaaaaaaaadIadIadIadIadIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadJadKaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaadLadMadNadOadPadQadRadSadTadUadVadQadWadXadQadQadYadZadQadQaeaadQadQadQaebaecaedaeeadQadUaefaegaehaeiaejaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaadaadaaaaaaaaaadIadIadIadIadIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadJadKaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaadLadMadNadOadPadQadRadSadTadUadVadQadWadXadQadQadYadZadQadQaeaadQadQadQaebaecaedaeeadQadUaefaegaehaeiaejaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaadaadaaaaaaaaaadIadIadIadIadIaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaadLadLaekaelaemaenaenaenaeoaenaenaenaepaeqaczabtaeraesaetaeuaevaewaexaeyaezaeAaeBaeAaezaeCabtabtadFaeDaeEaejaejaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaadaaaaaaaaaadIadIadIadIadIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaeFaeFaeFaeFaeFaeFaeFaeFaeFaeFaeFaeFaeFaeFaeFaeFaeFaaaaaaaaaadLadLaeGaeHaeIaemaeJaeKaeLaeMaeNaeOaenaePaeQaePaeRaeRaeSaeTajdabtabtaaaaaaaaaaeVaeWaeVaaaaaaaaaabtaanaeDaeXaeYaejaejaaaaaaaaaaeZaeZaeZaeZaeZaeZaeZaeZaeZaeZaeZaeZaeZaeZaeZaeZaeZaaaaaaaaaaaaaadaaaaaaaaaadIadIadIadIadIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafaeFaeFafaafbafcafcafcafcafcafcafcafcafcafcafcafdafaaeFaeFaaiadLadLafeaffafgafhaemafiafjafjafkafkaflaenafmafnafoafpaePafqafrafsabtaaaaaaaftaftaftafuaftaftaftaaaaaaaanafvaeXafwafwaejaejaanaeZaeZafxafyafzafzafzafzafzafzafzafzafzafzafzafAafBaeZaeZaafaafaafaadaaaaaaaaaadIadIadIadIadIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaeFafCafDafEafFafFafFafGafHafIafJafGafFafFafFafKafDafLaeFafMafNafOafPafQafRafSaemafTafkafUafjafkaflaenafVafWafXafYaePafZagaagbabtaaaaaaaftagcagdageagfaggaftaaaaaaaanafvaeXaMvagiagjagkaghaeZaglaglaglagmagmagmagmagmagmagmagmagmagmagmagnagoagpaeZaaaaaaaaaaadaaaaaaaaaadIadIadIadIadIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaadaaaaaaaaaaeFafCafDafEafFafFafGagqagragsagtagqafGafFafFafKafDaguagvafMagwagxagyagzagAagBaemagCafkafjafjagDagEaenagFagGagHagIaePagJagKagJabtaaaaaaaftagLagdagMagdagNaftaaaaaaaanagOagPagQagRagSagTaghagUaglafxaglagmagmagmagmagmagmagmagmagmagmagmagVagoagpaeZaaaaaaaaaaadaadaaaaaaadIadIadIadIadIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaeFafCafDafEafFafFagWagXagYagZagYahaagWafFafFafKafDahbaeFahcahdaheaheahfaheaheaemahgahhafkafjafjahiaenaePahjaePahkaePahlahmahlabtaaaaaaaftahnahoahpahqahraftaaaaaaahsahtahtahuahtahtahvahwaeZahxagoahyagmagmagmagmagmagmagmagmagmagmagmagVagoagpaeZaaaaaaaaaaaaaadaaaaaaadIadIadIadIadIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaahcaeFahzahAafEafFafFafGahBagWahCagWahDafGafFafFafKahEahFaeFaeFahGaheahHahIahJahKaemahLahMahNahOafjahPahQaePahRaePahSaePahTahUahVabtaaaaaaaftahWagdahXahYahZaftaaaaaaahsaiaaibaicaidahtaieaeZaeZaifaigaihagmagmagmagmagmagmagmagmagmagmagmagVaiiaijaeZaikaaaaaaaaaaadaaaaaaadIadIadIadIadIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafaeFaeFaeFailafEafFafFagWaimaimagZaimaimagWafFafFafKainaeFaeFahcaioaheaipaiqairaisaemaemaemaemaitaitaitaemaeRaeRaeRaeRaeRaiuahUaivabtabtaafaftaftaftaftaftaftaftaafahsahsahsaibaiwaixahtaiyaikaeZaeZaizaiAagmagmagmagmagmagmagmagmagmagmagmagVaiBaeZaeZaeZaafaafaafaadaaaaaaadIadIadIadIadIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaahcaeFafCaiCafEafFafFaiDaiEagZagZagZaiFaiDafFafFafKaiCaiGaeFafMaioaiHaiIaiqaiJaisaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiKaiLaiMaiNaiOaiPaiKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahsaiQaiwaibaiRaiyaghaeZaiSaiTaiAagmagmagmagmagmagmagmagmagmagmagmagVaiTagpaeZaikaaaaaaaaaaadaadaaaaaaadIadIadIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaadaadaadaadaadaadaaaaaaaaaaaaaaaaeFafCaiUafEafFafFafGaiVaiWagZaiXaiYafGafFafFafKaiUaiGaeFafMaioaheaiZajaaisaisaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiKajbajcahUajdaccaiKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahsahsajeajfahtaiyajgaeZaiSajhaiAagmagmagmagmagmagmagmagmagmagmagmagVajhagpaeZaaaaaaaaaaaaaaaaadaafaafaadaadaadabcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaeFajiajjafEafFafGafGahBagWajkaiDahBafGafGafFafKajlajmaeFajnaioaheaisaisaisaaaaaaaaaaaaaaaaaaajoajoajpajpajpajoajqajrajsahUajtajuajvajwajxajxajxajwajwaaaaaaaaaaaaaaaaaaahsahsahsahtajyajzaeZajAajBaiAagmagmagmagmagmagmagmagmagmagmagmagVajCajDaeZaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaafaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaeFafCajEafEafFajFajGajHajIagZagWajJajKafGafFafKajEaiGaeFajLaioajMadlaaaaaaaaaaabaaaaaaajpajpajoajNajOajPajQajRajSajTajUahUajVajWajXajYajZakaakbakcajwajxajxaaaaaaaabaaaaaaaaaadFakdajyakeaeZaiSakfaiAagmagmagmagmagmagmagmagmagmagmagmagVakfagpaeZaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaeFafCajEakgafFakhagZagZagZagZakiakjakkaklafFafKajEaiGaeFahcakmaknadlaaaaaaaaaaaaaaaajpajpakoakpakqakraksaktakuakvakwakxakyakzakAakBakCakDakEakFakGakHakIajxajxaaaaaaaaaaaaaaaadFakJakKaikaeZaiSakfaiAagmagmagmagmagmagmagmagmagmagmagmagVakfagpaeZaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakLakLakLakLakLakLakLakLakLakLakLakLakLaeFaeFakMakgafFafGakNakOakNakNakPakQakRakSafFafKakTaeFaeFaeFaioakUadlaaaaaaaaaaaaajpajpakoakVakWakWakXakYakZalaalbalcaldalealfalgalhalialjalkallalmalmalnakIajxajxaaaaaaaaaaaaadFaloaiyaeZaeZaeZalpaiAagmagmagmagmagmagmagmagmagmagmagmagValqaeZaeZalralralralralralralralralralralralralraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalsalsaltaltaltalualtaltalualtaltaltalvaeFalwalxakgafFafGalyaiDalzagZalAalBalCafGafFafKalDalEaeFahcaioadladlaaaaaaaaaajpajpakoakoalFakoalGalHalHalHalHalHalHalHalHalHalHalHalHalIalIalIalJakIalKakIakIajxajxaaaaaaaaaadFadFaiyaikaeZalLalMaiAagmagmagmagmagmagmagmagmagmagmagmagValNaijaeZalOalOalOalOalOalPalOalOalOalOalOalPalQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalsaltalRalSalTalUalValWalXalYalZamaambaeFamcajEafEafFaiDaiDahBafFafFafFahBaiDaiDafFafKajEamdaeFameaioadLaaaaaaaaaaaaajpakoakVakWamfamgalHalHalHalHalHalHalHalHalHalHalHalHalHalIalIalIalIamhamialmalnakIajxaaaaaaaaaaaaaejaiyamjaeZaiSamkaiAagmagmagmagmagmagmagmagmagmagmagmagVakfagpaeZalOamlalOalOalOalOalOalOalOalOalOalOalQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalsammamnamoamoamoamoamoamoamoampamaambaeFamqajEafEafFamramsafFafFafFafFafFamramsafFafKajEamtaeFamuaPaadLaaaaaaaaaajoajoamvalFakoamwamxalHalHalHamyamzamAamBamCamDamEamBamFamGamHamIamJalIamKamLakIalKamMajwajwaaaaaaaaaaejaiyamNaeZamOamkaiAagmagmagmagmagmagmagmagmagmagmagmagVakfamPaeZalOalOalOalOalOalOamQalOalOalOalOalOalQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalsaltalRamRamSamTamoamUamVamWamXamaambaeFamYamZanaanbanbanbanbanbanbanbanbanbanbanbancandaneaeFanfaioadLaaaaaaaaaajoanganhalFalGanianianialHalHanjanjanjanjanjankanlanmanmannanoanpanqalIalIalIalJalKanransajwaaaaaaaaaaejaiyantaeZanuanvanwanxanxanxanxanxanxanxanxanxanxanxanyanzanAaeZalOalOalOalOalOanBanCalOalOalOalOalOalQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalsalsaltaltaltaluanDanDalualtaltaltanEaeFanFanGanHanHanIanHanHanJanKanLanManNanNanNanNanOamtaeFanPaioadladlaaaaaaajpanQanRanSanianianTanUanialHanVanWanXanYanZanZaoaaobaocaodaoealIaofalIaogalIalIaohaoiaojajxaaaaaaadFadFaiyaokaeZaolaomaonaonaonaonaooaopaoqaoraosaosaotaosaosaouaovaeZalPalOalOalOaowalOalOalOalOalOalOalOalQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaakLakLakLakLakLakLakLaoxaoxaoyaoyaoyaoyaoyaeFaeFaeFaeFaeFaeFaeFaeFaozahcaoAaeFaoBaoBaoBaeFaeFaeFaeFafMaoCaoDadlaaaaaaajpaoEaoFaoGaoHaoIaoJaoKanialHanjaoLaoMaoNanZanZaoOaoPaoQaoRaoSaoTaoUaoVaoWaoXalIaoYaoZapaajxaaaaaaadFapbapcapdaeZaeZaeZaikapeapeapeaikapfaikapgaikaeZaeZaeZaeZaeZaeZaeZaphaphaphaphaphapiapialralralralralralralraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafakLakLapjapkaplapmapnakLapoapoappapqaprapsaptapuapvapwapxapyapyapzapuapAapAapBapCapDapEapFapCapGafMadlapHapIapJadlaaaaaaajpapKapLapManiapNapOapNanialHanjanjanjanjanjapPapQapQapQapRapSapTapUapVapWapXalIapYapZaqaajxaaaaaaadFaqbaghaqcaqdaqeaqfaqgaqhaqiaqjaqgaqkaqlaqlaqmaqnaqoaqoaqpaqqaqraqmaqsaqtaquaqvaqwaqxaqxalraqyaqzaqAaqBaqCalralraafaafaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaakLakLaqDaqDapkaqEaqFaqFaqGaqHaqIaqJaqKaqLaqMaqNapuapvaqOaqPapyapyapyapuaqQaqQaqRaqSaqTaqUaqVapCaqWaqXaqYaqZaraarbadlaaaaaaajoarcardareaniarfargarfanialHarhariarjarkarlarmarnarkaroarparqarrarsartaruarvalIarwapZarxajwaaaaaaadFaryaghaghaghaghagharzarAarBarCarDarEarFarFaqmarGarHaqoarIaqqaqqaqmarJarKarLarMarNarOarParQarRarRarRarRarRarRalralraaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaakLarSapkakLakLakLakLakLakLarTarUarUarUarVarWarXapuarYapyaqParZasaasbapuascasdaseapCasfasgashapCasiasjaskaslasmasnadlasoasoaspasqasrajSamxarfargarfanialHalHalHalHalHalHalHalHalHalHalHalIalIalIamHassastalIasuasvaswasxasyasyadFaszaghasAasAasAasAaqgasBasCasDaqgasEasFasGaqmasHasIasJarIasKaqqaqmasLasMasNasOasOasOaphalralralralralralralOalPalraaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaakLasPapkakLasQasQasQasQasQarTasRasSasTasUasVasWasXasYapuasZapuapuapuapuataatbatcatdapCapCapCapCateadlarUarUadlatfarUatgathatiatjatkatlatmatmatnatmatmaurauraurauratoatoatoatoatoatpatqatratsattatuatvatwatpatxatyatzatAatBatCatDatEadFatDatDatDatDaqgaqgaqgaqgatFatGatHatIaqmaqmaqmaqmatJaqmatKatLatMatNatOatDatPatQatRatSatSatSatSatSalralOalOalraaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaafaaaaaaaaaatTatUapkakLasQasQasQasQasQatVatWatXatYatZauaaubaucaudatZaueaucaufatWaugauhauiaujaukaukaukaulaumaunauoaupauqauzausautauuaukauvauwauxauyauBauDauCauFauEavLauGavMauratoatoatoatoatoatpauIauJauKattauLauMauNatpauOauPauQauRauSauTauUauVauWauXauYauZavaavbauRavcauSauSavdasFauRaveavfavgavaavhauRaviavaavjavkauRavlavmauSavnatSatSatSatSatSalravoalOavpaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafatTaRXavqakLasQasQasQasQasQavravsavtavuavuavvavwavwavxavyavzavwavAavwavwavBavCavDavwavwavyavwavwavAavwavEavFavGavHavwavIavwavwavJavKavwavNavPavOavRavQawOavSawQauratoatoatoatoatoatpavTavUavVavWavXavYavZatpawaawbawcawdawdaweawdawfawgawhawiawjawkawlawlawmawlawlawnawoawlawlawmawpawlawqawlawrawlawlawsawtawtawuawvawwatSatSatSatSatSalrawxalOavpaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaafaaaaaaaaaatTapkawyakLasQasQasQasQasQawzawAawBawCawDawEawFawGawHawIawJawKaxGawAawLawMatbawNawAawAawPawAawRawAawSawTawUawVawWawXawYawZaxaaxbaxcauyaxdauDaxeaxgaxfaxiaxhaxjauratoatoatoatoatoatpaxkaxlaxmattavZaxnaxoatpaxpaxqaxrasGaxsaxtaxuaxvaxwauXaxxaxyaxzaxAaxBaxsaxDaxsaxEasFasGaxFaxsaUiaxHaxIasGaxJaxzaxKaxLasGaxMaxNaxsaxOatSatSatSatSatSalraxPalOavpaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaakLapkapkakLaxQasQasQasQasQarTaxRaxSarUaxTaxUaxVaxWaxXaxVaxYaxVaxVaxVaxVaxZatbayaarUarUarUarUarUarUarUarUarUaybaycarUaydayeayfaygayhayiaxCatmatnayjatmatmatmatmauraynatoatoatoatoatpayoaypayqattatuazvatuatpayraysaytayuatPayvatDaywayxatDatDatDatDayyayyayyayyayzayAayBayCayDayDayDayDayEayDayFayGayHayIayJayKatPayLatRayMatSatSatSatSalrayNalOalraaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaakLayOapkakLakLakLakLakLakLarTarUarUarUayPapkaxVayQayRaySayTayUayRayVaxVayWayXayYaybayZazaazbazcazcazdazeazfazgazhaybasoasoaziazjazkazlaykazmaznazoazpaykaylaymauHauHazsaztazuauHatpatpatpatpatpatpaAlatpatpazwazxazyazzasyasyayxazAazBazCazDazEazFayyazGazHazIayyazJasFazKayDazLazMayDazNazOazPayDazQazRazSazTazTazTazUalralralralralralrarRalOalraaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaakLakLapkapkapkapkaqDaqDaqDaqDaqDazVazWazWazXaxVayQayRayRazYayRayRayVaxVazZaAaaAaaAbazbazbaAcaAcaAcaAcaAcaAcaAcaAdaybaaaaaaaAeaAfaAgaAhauAazrazqaAjaAiauAaAnaAoaApaAkaAraAsaAtaAuaAvaAwaAxaAyaAzaAAaABaACaAzaADaAEaAFaAGaaaaaaayxaAHazBaAIaAIaAIaAIaAJaAKaALaAMaANaAOaAPaAPayDaAQaARaASazNaATaAUayDaAVaAWaAXaAYaAZaBaaBbaBcaBdaBdaBearRarRarRalralraaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaafaafakLakLaBfaBfaBgaBhaBiaBjaBkaBlaxTaBmaBmaBmaxVayQaBnayRaBoayRaBpaBqaxVaBraBsaBsaBtaBtaBtaBtaBtaBtaBtaBtaBuaBvaBwaybaaaaaaaBxaByaBzaBAaBDaAqaAmaBCaBBaBGaBHaBIaBJaBJaBKaBJaBEaBFaAvaBNaBOaBPaBQaBRaBSaBTaAzaBUaBVaBWaBXaaaaaaayxaBYazBaAIaBZaCaaCaayyaCbaCcaCdayyaqkaqlaqlayDaCeaCfayDaCgaARaChayDaCiaCjaCkaClaCmaCnaCnalraCoalOaCpaCqaCralralraafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaakLakLaBfaCsaCsaCsaCsaCtaCtaCsaCsaCuaCsaCsaCsaCsaCsaCsaCsaCsaCsaCvaCwaCxaCyaBtaCzaCAaCBaCCaCDaCEaBtaybaCFaCGaybaaaaaaaBxaCHaCIaCJauAaBLaBMaCZaCKaCLaCPaCQaCRaCSaCTaCUaCVaCWaAvaCXaCYaDbaDadVsaDcaDdaAzaDeaDfaDgaBXaaaaaaayxaDhaDiaAIaDjaDjaDjaDkaDlaDlaDlaDkaDmaDkaDnaDkaDjaDjaDjaDjaDjaDjaDjazUazUazUazUazUaDoaDoalralralralralralralraaaaaaaaaadJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxTalsaCtaDpaDqaDraDsaDtaDuaDvaDwaDxaDtaDyaDzaDAaDBaDCaDDaDEaDFaDGaDHaDIaDJaDKaDLaDMaDMaDMaDNaBtaDOaDPaybaybaaaaaaaBxaDQaCMaDSaCNaCNaykaykaykaykaDUaDVaDWaDXaDYaDZaEaaEbaEcaEdaEeaEfaAzaEgaEhaAzaAzaEiaEjaEkaBXaaaaaaayxayxaElaEmaDjaEnaEoaEpaEpaEpaEpaEqaEraEsaEtaEuaEuaEvaEuaEuaEwaExaDjaEyaEzaEzaEzaEAaEBaEBaECaEzaEzaEzaEDaEDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxTalsaCtaEEaEFaEGaEHaEHaEIaEJaEJaEKaELaEMaENaENaEOaEPaEQaERaESaETaEUaEVaEWaEXaEYaEZaDMaDMaFaaFbaDOaDPaFcaaaaaaaaaaAeaFdaFeaFfaFgauHauHaFhaFhaDTaFiaFjaCUaCUaCUaFkaCVaFlaFmaFnaFoaFpaAzaAzaAzaAzaFqaFraFsaFtaAGaaaaaaaaaaFuaElaFvaDjaFwaFxaFyaFzaFzaFzaFzaFzaFzaFzaFzaFzaFzaFzaFAaFBaFCaDjaFDaFEaFFaFGaFHaFIaFJaFKaFLaFMaFNaEzaEDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxTalsaCtaEEaFOaFPaFQaFQaFQaFQaFQaFPaFRaFSaEPaEPaFTaEPaEPaFUaFVaFWaFXaFYaFZaGaaDMaGbaGcaGdaGeaBtaDOaDPaFcaaaaaaaaaaAeaAeaGfaFfaFfaGgaDTauHaFhaDTaGhaGiaGjaGkaCUaGlaGmaGnaAvaGoaGpaGpaGqaAzaGraGsaGtaFraGuaAGaAGaaaaaaaaaaFuaElaGvaDjaEnaGwaGxaGyaGzaGAaGyaGyaGyaGyaGyaGzaGAaGyaGBaGwaGCaDjaFDaFEaGDaFJaFJaFJaFJaFJaFJaFJaGEaGFaEDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxTalsaCtaEEaFOaFQaFQaFQaFQaFQaFQaFQaFRaGGaEPaEPaFTaEPaEPaGHaCxaGIaGJaGKaGLaGMaGNaGOaGPaGQaGRaBtaybaGSaFcaaaaaaaaaaaaaBxaFfaFfaFfaFfaGTauHauHauHaGUauHaGVaGWaGXaCUaGYaGZaHaaHbaHcaHdaAvaAvaHeaHfaHgaHhaGtaBXaaaaaaaaaaaaaFuaElaHiaDjaHjaGwaGxaGyaHkaHkaHlaGyaGyaGyaHlaHkaHkaGyaGBaGwaHmaDjaFDaFEaHnaHoaHpaHqaHraHsaHtaHuaFNaEzaEDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxTalsaCtaHvaFOaFQaFQaFQaFQaFQaFQaFQaHwaHxaHxaHxaFTaEPaEPaHyaCxaHzaHAaHBaEWaEWaGLaHCaEWaEWaEWaEWaHDazhaybaybaaaaaaaaaaBxaBxaFfaFfaFfaFfaFgaHEaHFaHFaHFaHGaHHaHIaHJaHKaHLaAvaAvaAvaAvaAvaFqaGtaFraGtaGtaBXaBXaaaaaaaaaayxayxaElaDkaDjaHMaHNaGxaGyaHOaHPaHQaHRaHSaHTaHUaHVaHOaGyaGBaHWaHXaDjaHYaEzaEzaEzaEAaEzaEzaECaEzaEzaEzaEDaEDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaeFaeFaeFaeFaeFaeFaeFaeFaeFaeFaeFaeFaeFaeFaeFaeFaeFaaaaaaaaaadLadLaeGaeHaeIaemaeJaeKaeLaeMaeNaeOaenaePaeQaePaeRaeRaeSaeTajdabtabtaaaaaaaaaaeVaeWaeVaaaaaaaaaabtaanaeDaeXaeYaejaejaaaaaaaaaaeZaeZaeZaeZaeZaeZaeZaeZaeZaeZaeZaeZaeZaeZaeZaeZaeZaaaaaaaaaaaaaadaaaaaaaaaaffadIadIadIadIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafaeFaeFafaafbafcafcafcafcafcafcafcafcafcafcafcafdafaaeFaeFaaiadLadLafealQafgafhaemafiafjafjafkafkaflaenafmafnafoafpaePafqafrafsabtaaaaaaaftaftaftafuaftaftaftaaaaaaaanafvaeXafwafwaejaejaanaeZaeZafxafyafzafzafzafzafzafzafzafzafzafzafzafAafBaeZaeZaafaafaafaadaaaaaaaaaadIadIadIadIadIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaeFafCafDafEafFafFafFafGafHafIafJafGafFafFafFafKafDafLaeFafMafNafOafPafQafRafSaemafTafkafUafjafkaflaenafVafWafXafYaePafZagaagbabtaaaaaaaftagcagdageagfaggaftaaaaaaaanafvaeXamlagiagjagkaghaeZaglaglaglagmagmagmagmagmagmagmagmagmagmagmagnagoagpaeZaaaaaaaaaaadaaaaaaaaaadIadIadIadIadIaaaaaaaaaaaaaaaaafaafaadaadaadaadaadaafaadaadaadaadaadabcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaadaaaaaaaaaaeFafCafDafEafFafFafGagqagragsagtagqafGafFafFafKafDaguagvafMagwagxagyagzagAagBaemagCafkafjafjagDagEaenagFagGagHagIaePagJagKagJabtaaaaaaaftagLagdagMagdagNaftaaaaaaaanagOagPagQagRagSagTaghagUaglafxaglagmagmagmagmagmagmagmagmagmagmagmagVagoagpaeZaaaaaaaaaaadaadaafaafaadaadaadaadaadaafaadaadaadaadaadaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaeFafCafDafEafFafFagWagXagYagZagYahaagWafFafFafKafDahbaeFahcahdaheaheahfaheaheaemahgahhafkafjafjahiaenaePahjaePahkaePahlahmahlabtaaaaaaaftahnahoahpahqahraftaaaaaaahsahtahtahuahtahtahvahwaeZahxagoahyagmagmagmagmagmagmagmagmagmagmagmagVagoagpaeZaaaaaaaaaaaaaadaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaadaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaahcaeFahzahAafEafFafFafGahBagWahCagWahDafGafFafFafKahEahFaeFaeFahGaheahHahIahJahKaemahLahMahNahOafjahPahQaePahRaePahSaePahTahUahVabtaaaaaaaftahWagdahXahYahZaftaaaaaaahsaiaaibaicaidahtaieaeZaeZaifaigaihagmagmagmagmagmagmagmagmagmagmagmagVaiiaijaeZaikaaaaaaaaaaadaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafaeFaeFaeFailafEafFafFagWaimaimagZaimaimagWafFafFafKainaeFaeFahcaioaheaipaiqairaisaemaemaemaemaitaitaitaemaeRaeRaeRaeRaeRaiuahUaivabtabtaafaftaftaftaftaftaftaftaafahsahsahsaibaiwaixahtaiyaikaeZaeZaizaiAagmagmagmagmagmagmagmagmagmagmagmagVaiBaeZaeZaeZaafaafaafaagaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaanBamQaowanCanCanCanCanCaowaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaahcaeFafCaiCafEafFafFaiDaiEagZagZagZaiFaiDafFafFafKaiCaiGaeFafMaioaiHaiIaiqaiJaisaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiKaiLaiMaiNaiOaiPaiKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahsaiQaiwaibaiRaiyaghaeZaiSaiTaiAagmagmagmagmagmagmagmagmagmagmagmagVaiTagpaeZaikapiapiapiaqzaqzarMarMarMaqzaqzarMarMarMaqzaqzarMarMarMarQaqzaowaBcaPaaMvaRXaBcaowaowaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaadaadaadaadaadaadaaaaaaaaaaaaaaaaeFafCaiUafEafFafFafGaiVaiWagZaiXaiYafGafFafFafKaiUaiGaeFafMaioaheaiZajaaisaisaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiKajbajcahUajdaccaiKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahsahsajeajfahtaiyajgaeZaiSajhaiAagmagmagmagmagmagmagmagmagmagmagmagVajhagpaeZaSNbaXaZYbntbmqboCbnVbyRbrQbEibCNbrQbEmbFRbFFbFSbrQbyRbHubHvbmqbHzbHwbHAbHwbHAbHwbHBaowaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaeFajiajjafEafFafGafGahBagWajkaiDahBafGafGafFafKajlajmaeFajnaioaheaisaisaisaaaaaaaaaaaaaaaaaaajoajoajpajpajpajoajqajrajsahUajtajuajvajwajxajxajxajwajwaaaaaaaaaaaaaaaaaaahsahsahsahtajyajzaeZajAajBaiAagmagmagmagmagmagmagmagmagmagmagmagVajCajDaeZbIYbJbbJabJcarMbJHbJHbJHbJHbJHbJHbJHbJHbJHbMcbJHbJHbJHbJHbMNbmqccecbvccfcbvccfcbvccfaowaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaeFafCajEafEafFajFajGajHajIagZagWajJajKafGafFafKajEaiGaeFajLaioajMadlaaaaaaaaaaabaaaaaaajpajpajoajNajOajPajQajRajSajTajUahUajVajWajXajYajZakaakbakcajwajxajxaaaaaaaabaaaaaaaaaadFakdajyakeaeZaiSakfaiAagmagmagmagmagmagmagmagmagmagmagmagVakfagpaeZcdzcdCcdBcfocfncfpcfpckbcjEclTclTcpDcnNcpFcpEcpHcpGcvHcpHcItcCgcLTcJxcOQcLUcSccPZcTFaowaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaeFafCajEakgafFakhagZagZagZagZakiakjakkaklafFafKajEaiGaeFahcakmaknadlaaaaaaaaaaaaaaaajpajpakoakpakqakraksaktakuakvakwakxakyakzakAakBakCakDakEakFakGakHakIajxajxaaaaaaaaaaaaaaaadFakJakKaikaeZaiSakfaiAagmagmagmagmagmagmagmagmagmagmagmagVakfagpaeZcXDdfZcYadjyarMcfpcfpdGcdkodGydGydVCdOZdVEdVDdGydVFdVGdGydVIdVHdVKdVJdVMdVLdVOdVNdVPaowaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakLakLakLakLakLakLakLakLakLakLakLakLakLaeFaeFakMakgafFafGakNakOakNakNakPakQakRakSafFafKakTaeFaeFaeFaioakUadlaaaaaaaaaaaaajpajpakoakVakWakWakXakYakZalaalbalcaldalealfalgalhalialjalkallalmalmalnakIajxajxaaaaaaaaaaaaadFaloaiyaeZaeZaeZalpaiAagmagmagmagmagmagmagmagmagmagmagmagValqaeZaeZdVQdVSdVRapiaqzdVUdVTdVVdVTdVVdVWdVYdVXdWadVZdVVdVVdVVdVVdWbbmqdWddWcdWedWcdWcdWfdWgaowaafaafaafaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalsalsaltaltaltalualtaltalualtaltaltalvaeFalwalxakgafFafGalyaiDalzagZalAalBalCafGafFafKalDalEaeFahcaioadladlaaaaaaaaaajpajpakoakoalFakoalGalHalHalHalHalHalHalHalHalHalHalHalHalIalIalIalJakIalKakIakIajxajxaaaaaaaaaadFadFaiyaikaeZalLalMaiAagmagmagmagmagmagmagmagmagmagmagmagValNaijaeZdWhdfZcYadWibmqdWkdWjdWmdWldWodWndWqdWpdWsdWrdWudWtdWwdWvdWxbmqdWzdWydWBdWAbHAdWCdWDaowaaaaaaaaaaaaaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalsaltalRalSalTalUalValWalXalYalZamaambaeFamcajEafEafFaiDaiDahBafFafFafFahBaiDaiDafFafKajEamdaeFameaioadLaaaaaaaaaaaaajpakoakVakWamfamgalHalHalHalHalHalHalHalHalHalHalHalHalHalIalIalIalIamhamialmalnakIajxaaaaaaaaaaaaaejaiyamjaeZaiSamkaiAagmagmagmagmagmagmagmagmagmagmagmagVakfagpaeZdWEdWGdWFdWHbmqdWIarMdWJarMbmqbmqdWLdWKdWNdWMbmqarMdWJarMdWObmqdWQdWPdWSdWRdWUdWTdWVaowaaaaaaaaaaaaaafaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalsammamnamoamoamoamoamoamoamoampamaambaeFamqajEafEafFamramsafFafFafFafFafFamramsafFafKajEamtaeFamudWWadLaaaaaaaaaajoajoamvalFakoamwamxalHalHalHamyamzamAamBamCamDamEamBamFamGamHamIamJalIamKamLakIalKamMajwajwaaaaaaaaaaejaiyamNaeZamOamkaiAagmagmagmagmagmagmagmagmagmagmagmagVakfamPaeZdWXdWZdWYdXbdXadXddXcdXbdXbdXfdXedXhdXgdXjdXidXkdXbdXmdXldXnaSNdXodXodXodXodXodXodXodXodXoaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalsaltalRamRamSamTamoamUamVamWamXamaambaeFamYamZanaanbanbanbanbanbanbanbanbanbanbanbancandaneaeFanfaioadLaaaaaaaaaajoanganhalFalGanianianialHalHanjanjanjanjanjankanlanmanmannanoanpanqalIalIalIalJalKanransajwaaaaaaaaaaejaiyantaeZanuanvanwanxanxanxanxanxanxanxanxanxanxanxanyanzanAaeZdXpdXrdXqdXqdXsdXudXtdXwdXvdXxdXvdXzdXydXBdXAdXDdXCdXFdXEdXHdXGdXodXIdXKdXJdXMdXLdXKdXNdXobhgbhgaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalsalsaltaltaltaluanDanDalualtaltaltanEaeFanFanGanHanHanIanHanHanJanKanLanManNanNanNanNanOamtaeFanPaioadladlaaaaaaajpanQanRanSanianianTanUanialHanVanWanXanYanZanZaoaaobaocaodaoealIaofalIaogalIalIaohaoiaojajxaaaaaaadFadFaiyaokaeZaolaomaonaonaonaonaooaopaoqaoraosaosaotaosaosaouaovaeZdXOdXQdXPdXRapidXTdXSapidXUdXWdXVdXXaSNaSNdXYaSNaZYdXZcfodXHdYadXodYbdYcdXJdXMdXLdXKdYddXodXodYfdYedXoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaakLatTatTakLakLakLakLaoxaoxaoyaoyaoyaoyaoyaeFaeFaeFaeFaeFaeFaeFaeFaozahcaoAaeFaoBaoBaoBaeFaeFaeFaeFafMaoCaoDadlaaaaaaajpaoEaoFaoGaoHaoIaoJaoKanialHanjaoLaoMaoNanZanZaoOaoPaoQaoRaoSaoTaoUaoVaoWaoXalIaoYaoZapaajxaaaaaaadFapbapcapdaeZaeZaeZaikapeapeapeaikapfaikapgaikaeZaeZaeZaeZaeZaeZaeZaphaphaphaphaphdYgdYgalralralralralralrdYidYhalralrdXZdYjdYkdWHdXodYldXKdXJdXMdXLdXKdYldXodYmdYodYndXodXoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafakLakLapjapkaplapmapnakLapoapoappapqaprapsaptapuapvapwapxapyapyapzapuapAapAapBapCapDapEapFapCapGafMadlapHapIapJadlaaaaaaajpapKapLapManiapNapOapNanialHanjanjanjanjanjapPapQapQapQapRapSapTapUapVapWapXalIapYapZaqaajxaaaaaaadFaqbaghaqcaqdaqeaqfaqgaqhaqiaqjaqgaqkaqlaqlaqmaqnaqoaqoaqpaqqaqraqmaqsaqtaquaqvaqwaqxaqxalraqydYpaqAaqBaqCalOdYqdYralrdYtdYsdXodXodXodYudYwdYvdYydYxdYAdYzdXodYBdYDdYCdYFdYEdYGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaakLakLaqDaqDapkaqEaqFaqFaqGaqHaqIaqJaqKaqLaqMaqNapuapvaqOaqPapyapyapyapuaqQaqQaqRaqSaqTaqUaqVapCaqWaqXaqYaqZaraarbadlaaaaaaajoarcardareaniarfargarfanialHarhariarjarkarlarmarnarkaroarparqarrarsartaruarvalIarwapZarxajwaaaaaaadFaryaghaghaghaghagharzarAarBarCarDarEarFarFaqmarGarHaqoarIaqqaqqaqmarJarKarLdYHarNarOarPdYIarRarRarRarRarRarRalOalralrdYKdYJdXodYLdYNdYMdYPdYOdYRdYQdYPdYSdYUdYTdYWdYVdXodXodXodXodXoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaakLarSapkakLakLakLakLakLakLarTarUarUarUarVarWarXapuarYapyaqParZasaasbapuascasdaseapCasfasgashapCasiasjaskaslasmasnadlasoasoaspasqasrajSamxarfargarfanialHalHalHalHalHalHalHalHalHalHalHalIalIalIamHassastalIasuasvaswasxasyasyadFaszaghasAasAasAasAaqgasBasCasDaqgasEasFasGaqmasHasIasJarIasKaqqaqmasLasMasNasOasOasOaphalralralralralralralOalPalrdYXdYYdXHdZadYZdZcdZbdZedZddZfdZddZgdZddZhdZddZjdZidZldZkdZndZmdXoaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaakLasPapkakLasQasQasQasQasQarTasRasSasTasUasVasWasXasYapuasZapuapuapuapuataatbatcatdapCapCapCapCateadlarUarUadlatfarUatgathatiatjatkatlatmatmatnatmatmaurauraurauratoatoatoatoatoatpatqatratsattatuatvatwatpatxatyatzatAatBatCatDatEadFatDatDatDatDaqgaqgaqgaqgatFatGatHatIaqmaqmaqmaqmatJaqmatKatLatMatNatOatDatPatQatRatSatSatSatSatSalralOalOalrdZodZqdZpdZsdZrdZtdZbdZudYTdYTdYTdZwdZvdZxdZbdZzdZydZAdXKdZBdXKdXoaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaafaaaaaaaaaatTatUapkakLasQasQasQasQasQatVatWatXatYatZauaaubaucaudatZaueaucaufatWaugauhauiaujaukaukaukaulaumaunauoaupauqauzausautauuaukauvauwauxauyauBauDauCauFauEavLauGavMauratoatoatoatoatoatpauIauJauKattauLauMauNatpauOauPauQauRauSauTauUauVauWauXauYauZavaavbauRavcauSauSavdasFauRaveavfavgavaavhauRaviavaavjavkauRavlavmauSavnatSatSatSatSatSalravoalOalrdZCdZEdZDdZGdZFdZbdZbdZHdZbdZbdZbdZbdZbdZIdZbdZKdZJdZLdXKdXKdXKdXoaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafatTdZMavqakLasQasQasQasQasQavravsavtavuavuavvavwavwavxavyavzavwavAavwavwavBavCavDavwavwavyavwavwavAavwavEavFavGavHavwavIavwavwavJavKavwavNavPavOavRavQawOavSawQauratoatoatoatoatoatpavTavUavVavWavXavYavZatpawaawbawcawdawdaweawdawfawgawhawiawjawkawlawlawmawlawlawnawoawlawlawmawpawlawqawlawrawlawlawsawtawtawuawvawwatSatSatSatSatSalrawxalOalrdXodZOdZNdXodZPdZbdZbdZRdZQdZTdZSdZVdZUdZWdYCdZYdZXdYydYydYydYydXoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaafaaaaaaaaaatTapkawyakLasQasQasQasQasQawzawAawBawCawDawEawFawGawHawIawJawKaxGawAawLawMatbawNawAawAawPawAawRawAawSawTawUawVawWawXawYawZaxaaxbaxcauyaxdauDaxeaxgaxfaxiaxhaxjauratoatoatoatoatoatpaxkaxlaxmattavZaxnaxoatpaxpaxqaxrasGaxsaxtaxuaxvaxwauXaxxaxyaxzaxAaxBaxsaxDaxsaxEasFasGaxFaxsaUiaxHaxIasGaxJaxzaxKaxLasGaxMaxNaxsaxOatSatSatSatSatSalraxPalOalrdZZeabeaadZNeacdZbdZbeaddZbdZbdZbdZbdZbeaedZbeageafeahdXKdXKdXJeaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaakLapkapkakLaxQasQasQasQasQarTaxRaxSarUaxTaxUaxVaxWaxXaxVaxYaxVaxVaxVaxVaxZatbayaarUarUarUarUarUarUarUarUarUaybaycarUaydayeayfaygayhayiaxCatmatnayjatmatmatmatmauraynatoatoatoatoatpayoaypayqattatuazvatuatpayraysaytayuatPayvatDaywayxatDatDatDatDayyayyayyayyayzayAayBayCayDayDayDayDayEayDayFayGayHayIayJayKatPayLatRayMatSatSatSatSalrayNalOalreajealeakeaneameaoeaoeapdYTdYTdYTeareaqeasdZbeaueateavdXKdXKdXJeaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaakLayOapkakLakLakLakLakLakLarTarUarUarUayPapkaxVayQayRaySayTayUayRayVaxVayWayXayYaybayZazaazbazcazcazdazeazfazgazhaybasoasoaziazjazkazlaykazmaznazoazpaykaylaymauHauHazsaztazuauHatpatpatpatpatpatpaAlatpatpazwazxazyazzasyasyayxazAazBazCazDazEazFayyazGazHazIayyazJasFazKayDazLazMayDazNazOazPayDazQazRazSazTazTazTazUalralralralralralrarRalOalreaweayeaxeaAeazdZbdZbeaBdZddZfdZdeaCdZdeaDdZdeaFeaEeaGdZkeaIeaHeaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaakLakLapkapkapkapkaqDaqDaqDaqDaqDazVazWazWazXaxVayQayRayRazYayRayRayVaxVazZaAaaAaaAbazbazbaAcaAcaAcaAcaAcaAcaAcaAdaybaaaaaaaAeaAfaAgaAhauAazrazqaAjaAiauAaAnaAoaApaAkaAraAsaAtaAuaAvaAwaAxaAyaAzaAAaABaACaAzaADaAEaAFaAGaaaaaaayxaAHazBaAIaAIaAIaAIaAJaAKaALaAMaANaAOaAPaAPayDaAQaARaASazNaATaAUayDaAVaAWaAXaAYaAZaBaaBbeaKaBdaBdaBearRarRarRalralrdXodXodXodXoeaLeaNeaMeaPeaOeaReaQeaPeaSeaTdYTdYTeaUdXodXodXodXodXoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaafaafakLakLaBfaBfaBgaBhaBiaBjaBkaBlaxTaBmaBmaBmaxVayQaBnayRaBoayRaBpaBqaxVaBraBsaBsaBtaBtaBtaBtaBtaBtaBtaBtaBuaBvaBwaybaaaaaaaBxaByaBzaBAaBDaAqaAmaBCaBBaBGaBHaBIaBJaBJaBKaBJaBEaBFaAvaBNaBOaBPaBQaBRaBSaBTaAzaBUaBVaBWaBXaaaaaaayxaBYazBaAIaBZaCaaCaayyaCbaCcaCdayyaqkaqlaqlayDaCeaCfayDaCgaARaChayDaCiaCjaCkaClaCmaCnaCnalraCoalOaCpaCqaCralralraafaaaaaaaaadXodXodXoeaVeaXeaWdYyeaYebaeaZdXodZbdZbdZbebbdXoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaakLakLaBfaCsaCsaCsaCsaCtaCtaCsaCsaCuaCsaCsaCsaCsaCsaCsaCsaCsaCsaCvaCwaCxaCyaBtaCzaCAaCBaCCaCDaCEaBtaybaCFaCGaybaaaaaaaBxaCHaCIaCJauAaBLaBMaCZaCKaCLaCPaCQaCRaCSaCTaCUaCVaCWaAvaCXaCYaDbaDadVsaDcaDdaAzaDeaDfaDgaBXaaaaaaayxaDhaDiaAIaDjaDjaDjaDkaDlaDlaDlaDkaDmaDkaDnaDkaDjaDjaDjaDjaDjaDjaDjazUazUazUazUazUaDoaDoalralralralravpavpalraaaaaaaaaaaaaaaaaaaaadXodYldXKdXKdYydXKdXKdYldXoebcebeebddXodXoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxTalsaCtaDpaDqaDraDsaDtaDuaDvaDwaDxaDtaDyaDzaDAaDBaDCaDDaDEaDFaDGaDHaDIaDJaDKaDLaDMaDMaDMaDNaBtaDOaDPaybaybaaaaaaaBxaDQaCMaDSaCNaCNaykaykaykaykaDUaDVaDWaDXaDYaDZaEaaEbaEcaEdaEeaEfaAzaEgaEhaAzaAzaEiaEjaEkaBXaaaaaaayxayxaElaEmaDjaEnaEoaEpaEpaEpaEpaEqaEraEsaEtaEuaEuaEvaEuaEuaEwaExaDjaEyaEzaEzaEzaEAaEBaEBaECaEzaEzaEzaEDaEDaaaaaaaaaaaaaaaaaaaaaaaadXodYbdZBdXKdYydXKdXKdYddXodXodYfdYedXoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxTalsaCtaEEaEFaEGaEHaEHaEIaEJaEJaEKaELaEMaENaENaEOaEPaEQaERaESaETaEUaEVaEWaEXaEYaEZaDMaDMaFaaFbaDOaDPaFcaaaaaaaaaaAeaFdaFeaFfaFgauHauHaFhaFhaDTaFiaFjaCUaCUaCUaFkaCVaFlaFmaFnaFoaFpaAzaAzaAzaAzaFqaFraFsaFtaAGaaaaaaaaaaFuaElaFvaDjaFwaFxaFyaFzaFzaFzaFzaFzaFzaFzaFzaFzaFzaFzaFAaFBaFCaDjaFDaFEaFFaFGaFHaFIaFJaFKaFLaFMaFNaEzaEDaaaaaaaaaaaaaaaaaaaaaaaadXoebfdXKdXKdYydXKdXKebgdXobhgbhgaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxTalsaCtaEEaFOaFPaFQaFQaFQaFQaFQaFPaFRaFSaEPaEPaFTaEPaEPaFUaFVaFWaFXaFYaFZaGaaDMaGbaGcaGdaGeaBtaDOaDPaFcaaaaaaaaaaAeaAeaGfaFfaFfaGgaDTauHaFhaDTaGhaGiaGjaGkaCUaGlaGmaGnaAvaGoaGpaGpaGqaAzaGraGsaGtaFraGuaAGaAGaaaaaaaaaaFuaElaGvaDjaEnaGwaGxaGyaGzaGAaGyaGyaGyaGyaGyaGzaGAaGyaGBaGwaGCaDjaFDaFEaGDaFJaFJaFJaFJaFJaFJaFJaGEaGFaEDaaaaaaaaaaaaaaaaaaaaaaaadXodXodXodXodXodXodXodXodXoaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxTalsaCtaEEaFOaFQaFQaFQaFQaFQaFQaFQaFRaGGaEPaEPaFTaEPaEPaGHaCxaGIaGJaGKaGLaGMaGNaGOaGPaGQaGRaBtaybaGSaFcaaaaaaaaaaaaaBxaFfaFfaFfaFfaGTauHauHauHaGUauHaGVaGWaGXaCUaGYaGZaHaaHbaHcaHdaAvaAvaHeaHfaHgaHhaGtaBXaaaaaaaaaaaaaFuaElaHiaDjaHjaGwaGxaGyaHkaHkaHlaGyaGyaGyaHlaHkaHkaGyaGBaGwaHmaDjaFDaFEaHnaHoaHpaHqaHraHsaHtaHuaFNaEzaEDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxTalsaCtaHvaFOaFQaFQaFQaFQaFQaFQaFQaHwaHxaHxaHxaFTaEPaEPaHyaCxaHzaHAaHBaEWaEWaGLaHCaEWaEWaEWaEWaHDazhaybaybaaaaaaaaaaBxaBxaFfaFfaFfaFfaFgaHEaHFaHFaHFaHGaHHaHIaHJaHKaHLaAvaAvaAvaAvaAvaFqaGtaFraGtaGtaBXaBXaaaaaaaaaayxayxaElaDkaDjaHMaHNaGxaGyaHOaHPaHQaHRaHSaHTaHUaHVaHOaGyaGBaHWaHXaDjaHYaEzaEzaEzaEAaEzaEzaECaEzaEzaEzaEDaEDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakLakLaCsaEEaFOaFQaFQaFQaFQaFQaFQaFQaHZaHZaHZaIaaFTaEPaEPaIbaESaIcaHAaIdaIeaIfaDHaIgaESaDOaIhaIiaAcazhaIjaybaaaaaaaaaaaaaBxaBxaFfaFfaFfaFfaIkaIlaImaInazlaIoaIpaIqaIraIsaItaIuaIvaIwaIxaHgaHgaHhaGtaBXaBXaaaaaaaaaaaaayxaIyaElaDjaDjaDjaIzaGxaGyaIAaIBaICaIDaIEaIEaIFaIEaHOaGyaGBaIGaDjaDjalralralralralralralralralralralralralraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCOaEEaFOaFQaFQaFQaFQaFQaFQaFQaIHaIIaIJaIIaIKaENaENaILaIMaINaIOaIPaIQaIRaIQaISaITaDOaIhaAcaAcaIUaIVaybaaaaaaaaaaaaaaaaBxaBxaFfaIWaIXaIYaIZaJaaJbaJcaJdaJeaJfaJgaJhaJiaJjaJkaJlaJmaJnaJoaGtaBXaBXaaaaaaaaaaaaaaaayxaJpaJqaDkaDjaJraGwaGxaGyaJsaJtaJuaJvaJwaJwaJwaJwaJxaGyaGBaGwaJyaDjaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaDRaJzaFOaFQaFQaFQaFQaFQaFQaFQaFRaEPaEPaJAaFTaJBaJCaJDaJEaJFaJGaJHaJIaJJaJKaJLaESaDOaJMaJNaAcazhaJOaybaaaaaaaaaaabaaaaaaaBxaBxaAeaJPaJQaJRaJSaInazlaIoaJTaJUaJVaJWaJXaJYaJZaKaaKbaKcaAGaBXaBXaaaaaaaabaaaaaaaaaayxaKdaElaKeaDjaJraGwaGxaGyaHOaKfaKgaKhaJwaKiaKjaKkaKlaGyaGBaGwaJyaDjaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaKmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaDRaJzaFOaFQaFQaFQaFQaFQaFQaFQaFRaEPaEPaJAaFTaJBaJCaJDaJEaJFaJGaJHaJIaJJaJKaJLaESaDOaJMaJNaAcazhaJOaybaaaaaaaaaaabaaaaaaaBxaBxaAeaJPaJQaJRaJSaInazlaIoaJTaJUaJVaJWaJXaJYaJZaKaaKbaKcaAGaBXaBXaaaaaaaabaaaaaaaaaayxaKdaElaKeaDjaJraGwaGxaGyaHOaKfaKgaKhaJwaKiaKjaKkaKlaGyaGBaGwaJyaDjaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaKmaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaCOaEEaFOaFQaFQaFQaFQaFQaFQaFQaHwaHxaKnaHxaKoaCsaCsaCsaCvaCvaCvaKpaKqaKraKqaKqaESaybaybaybaybazhaKsaKtaKtaKtaaaaaaaaaaaaaaaaaaaAeaAeaBxaBxaBxaAeaAeaKuaKvaJUaKwaKxaAGaAGaBXaBXaBXaAGaAGaaaaaaaaaaaaaaaaaaaKyaKyaKyaKzaElaKAaDjaKBaKCaGxaGyaHOaHOaHlaHkaKDaKhaHlaHOaHOaGyaGBaKEaKFaDjaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafaCsaEEaFOaFQaFQaFQaFQaFQaFQaFQaKGaKGaKGaKHaKIaCsaKJaKJaKJaKJaKJaKpaKKaKLaKMaKqaKNaKNaKNaKNaybazhaKsaKOaKPaKtaKtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaKQaKRaKSaJUaKTaKUaKQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaKyaKyaKVaKWaKzaElaKXaDjaJraKYaGxaGyaGyaHOaKZaLaaJwaLbaLcaHOaGyaGyaGBaKYaJyaDjaaaaaaaaaaaaaaaaadaadaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaCsaEEaFOaFQaFQaFQaFQaFQaFQaFQaIHaIIaIIaIIaFTaLdaKJaKJaKJaKJaKJaKpaLeaLfaLgaKqaLhaAcaAcaAcaLiazhaLjaLkaLlaLmaKtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaKQaLnaLoaLpaLqaLraKQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaKyaLsaLtaLuaLvaElaLwaDjaJraLxaGxaGyaGyaHkaLyaJwaJwaJwaLzaHkaGyaGyaGBaLxaJyaDjaDkaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaCsaLAaFOaFQaFQaFQaFQaFQaFQaFQaFRaEPaEPaEPaLBaLCaKJaKJaKJaKJaKJaKpaLDaLEaLFaKqaAcaAcaAcaLGaybaLHaKsaLIaLlaLJaKtaaaaaaaaaaaaaLKaLLaLMaLLaLNaaaaaaaLOaLOaLPaJUaLQaLRaLRaLRaLRaLRaLRaLSaLSaLSaLRaLRaLRaLRaKyaLTaLtaLUaKzaElaDkaDjaDjaLVaLWaGyaGyaKhaLXaLXaJwaLXaLXaKhaGyaGyaGBaLYaDjaDjaDjaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaCsaEEaFOaFQaFQaFQaFQaFQaFQaFQaFRaLZaEPaEPaFTaMaaKJaKJaKJaKJaKJaKpaKqaMbaKqaKqaMcaMdaMeaMfaMfaMgaKsaMhaLlaMiaKtaaaaaaaaaaaaaMjaMkaMlaMmaMjaaaaaaaaaaLOaMnaJUaMoaMpaMqaMraMsaMtaLSaMuaSNaMwaMxaMyaMzaLRaMAaMBaLtaLuaKzaMCaDjaDjaMDaMEaLWaGyaGyaHOaMFaKhaMGaKhaHlaHOaGyaGyaGBaMHaMIaDjaDkaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaCsaEEaFOaFQaFQaFQaFQaFQaFQaFQaFRaLZaEPaEPaFTaMaaKJaKJaKJaKJaKJaKpaKqaMbaKqaKqaMcaMdaMeaMfaMfaMgaKsaMhaLlaMiaKtaaaaaaaaaaaaaMjaMkaMlaMmaMjaaaaaaaaaaLOaMnaJUaMoaMpaMqaMraMsaMtaLSaMuebhaMwaMxaMyaMzaLRaMAaMBaLtaLuaKzaMCaDjaDjaMDaMEaLWaGyaGyaHOaMFaKhaMGaKhaHlaHOaGyaGyaGBaMHaMIaDjaDkaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaCsaEEaFOaFPaFQaFQaFQaFQaFQaFPaFRaMJaMKaMLaMMaCsaMNaKJaKJaKJaKJaMfaDOaDOaDOaybaybaybaybaMfaMOaLHaKsaKsaMPaKsaKtaMQaMQaMQaMRaMjaMSaMTaMUaMjaMVaMQaMQaMQaMWaMXaMWaLRaMqaMYaMZaNbaNaaNdaNcaNfaNeaNgaMzaLRaKzaKzaNhaKzaKzaNiaDkaDjaNjaNkaLWaGyaGyaKhaNlaNmaJwaNmaNnaKhaGyaGyaGBaNkaJyaDjaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaCsaNoaNpaNqaNraNraNsaNtaNtaNuaNvaNwaCtaCtaCtaCsaMfaMfaMfaMfaMfaMfaNxaNxaNxaNyaNzaybaNAaNBaAcaNCaNDaNEaNFaNGaNHaMQaNIaNJaNKaNLaNMaNNaNMaNLaNOaNPaNQaMQaNRaNSaNRaLRaNTaNUaNVaNWaNXaNYaNZaOaaObaOcaMzaLRaOdaOeaOfaOgaOhaOiaAIaOjaOkaNkaGxaGyaGyaHOaHUaOlaOmaOnaHUaHOaGyaGyaGBaNkaJyaDjaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafaCsaCsaOoaOpaOqaOqaOraOqaOqaOsaOtaOuaCuaDOaOvaAcaAcaAcaOwaAcaAcaAcaAcaAcaOxaAcaAcaOyaAcaAcaAcaAcaAcaAcaAcaLHaOzaMQaOAaOAaOBaOCaODaOEaOFaOGaOHaOAaOIaMQaIpaOJaOKaLRaOLaOMaONaOOaOPaOQaORaOSaOTaOUaOVaLRaOWaOXaOYaOZaZYaPbaAIaDjaPcaNkaGxaGyaGyaGyaHOaPdaPeaPfaHOaGyaGyaGyaGBaNkaJyaDjaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaCsaCsaCOaDRaCOaCsaCOaDRaCOaCsaCsaCsaDOaOvaMfaFcaFcaFcaFcaFcaMfaPgaPhaMfaMfaMfaMfaMfaMfaMfaFcaFcbaXaAcazhaPiaMQaPjaOAaPkaPlaPlaPmaPnaPnaPoaOAaPpaMQaPqaPraPsaLRaPtaPuaPvaPwaPxaPyaPzaPAaPBaPCaPDaLRaPEaPFaPGaPHaFuaFuaPIaDjaDjaNkaPJaPKaPKaPKaPKaPKaPKaPKaPKaPKaPKaPKaPLaPMaDjaDjaafaafaafaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafaCsaCsaOoaOpaOqaOqaOraOqaOqaOsaOtaOuaCuaDOaOvaAcaAcaAcaOwaAcaAcaAcaAcaAcaOxaAcaAcaOyaAcaAcaAcaAcaAcaAcaAcaLHaOzaMQaOAaOAaOBaOCaODaOEaOFaOGaOHaOAaOIaMQaIpaOJaOKaLRaOLaOMaONaOOaOPaOQaORaOSaOTaOUaOVaLRaOWaOXaOYaOZebiaPbaAIaDjaPcaNkaGxaGyaGyaGyaHOaPdaPeaPfaHOaGyaGyaGyaGBaNkaJyaDjaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaCsaCsaCOaDRaCOaCsaCOaDRaCOaCsaCsaCsaDOaOvaMfaFcaFcaFcaFcaFcaMfaPgaPhaMfaMfaMfaMfaMfaMfaMfaFcaFcebjaAcazhaPiaMQaPjaOAaPkaPlaPlaPmaPnaPnaPoaOAaPpaMQaPqaPraPsaLRaPtaPuaPvaPwaPxaPyaPzaPAaPBaPCaPDaLRaPEaPFaPGaPHaFuaFuaPIaDjaDjaNkaPJaPKaPKaPKaPKaPKaPKaPKaPKaPKaPKaPKaPLaPMaDjaDjaafaafaafaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaCsaMfaMfaMfaaaaaaaaaaaaaaaaMfaMfaMfaMfaaaaaaaaaaafaaaaaaaaaaFcaFcaAcazhazcaMQaPNaPOaPPaPQaPRaPSaPTaPUaPVaPWaNMaPXaPYaPZaKTaLRaLRaQaaQbaQcaLSaQdaQeaQfaQgaQhaQiaLRaQjaQkaQlaFuaFuaaaaaaaaaaDjaDjaDjaDjaDjaDjaDjaDjaDjaDjaDjaDjaDjaDjaDjaDjaDjaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaFcaFcazhaQmaMQaNMaNMaQnaNMaNMaQoaNMaNMaQpaNMaNMaQqaQraPZaQsaQtaQuaQuaQvaQuaQuaQuaQuaQuaQwaQuaQuaLRaQxaQyaFuaFuaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaFcaQzaQAaQBaQCaQDaQDaQEaQFaQGaQHaQDaQIaQDaQJaQKaQLaQMaQNaQKaQOaQPaQQaQRaQSaQKaQTaQUaQVaQVaQWaQXaQYaQZaFuaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -10751,7 +11109,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaafaadaadaadaafaaeaagaadaadaadaafaaaaafaagaadaadaadaadaafaaeaaaaMfaMfaMfaMfaLOaLOaLOaRvaRwaRxaRyaRzaRAaRzaRzaRBaKvaRCaKwaKxaRDaRDaRDaRDaREaRFaRGaRHaLOaLOaLOaPIaPIaPIaPIaafaafaadaadaadaadaKmaaaaadaafaadaadaadaadaadaadaadaaaaaeaKmaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaRIaRJaRJaRKaRJaRLaRMaRNaROaRMaRPaRQaRRaRzaRSaRTaRCaRUaRSaRDaRVaRWaRWaREaRYaRZaSaaSbaScaSdaScaScaSeaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSfaSfaSfaSfaaaaaaaaaaSfaaaaaaaaaaaaaaaaSfaaaaaaaaaaSfaSfaSfaSfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRIaSgaShaSiaSjaSkaSlaSmaSnaRMaSoaSpaSqaSraRSaSsaStaKTaKRaRDaSuaRVaSvaSwaSxaSyaSzaSAaSBaSCaSDaSEaSeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSfaSfaSfaSfaaaaaaaaaaSfaSfaSfaSfaSfaSfaSfaaaaaaaaaaSfaSfaSfaSfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRIaRJaRJaRKaRJaRLaRMaSFaSGaRyaRzaRzaRzaRzaRSaSHaSIaSJaSKaSLaSMbmqaSOaREaSPaSQaSaaSbaScaSdaScaScaSeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSfaSfaSfaSfaaaaaaaaaaSfaSfaSfaSfaSfaSfaSfaaaaaaaaaaSfaSfaSfaSfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRIaRJaRJaRKaRJaRLaRMaSFaSGaRyaRzaRzaRzaRzaRSaSHaSIaSJaSKaSLaSMebkaSOaREaSPaSQaSaaSbaScaSdaScaScaSeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSfaSfaSfaSfaaaaaaaSfaSfaSfaSfaSfaSfaSfaSfaSfaaaaaaaSfaSfaSfaSfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSRaRyaRyaRyaRyaRyaRyaSSaSTaRyaSUaSVaSWaSXaSYaSZaTaaTbaTcaTdaTeaTfaTgaREaThaTiaREaREaREaREaREaREaTjaaaaaaaaaaTkaaaaaaaaaaTkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSfaSfaSfaSfaaaaaaaSfaSfaSfaSfaSfaSfaSfaSfaSfaaaaaaaSfaSfaSfaSfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRIaTlaTlaTmaTlaTnaRMaToaTpaTqaTraTbaTbaTbaTsaTbaTtaTuaTvaTwaTxaTyaTzaTAaTBaTCaSaaTDaTEaTFaTEaTEaSeaaaaaaaaaaTkaaaaaaaaaaTkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaSfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaRIaTGaTHaTIaTJaTKaTLaTMaTNaRyaTOaTPaTQaTRaRnaTSaTTaTUaTcaTdaTVaTWaTXaREaTYaTZaUaaUbaUcaUdaUeaUfaSeaaaaaaaaaaTkaaaaaaaaaaTkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -10928,8 +11286,8 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaWBaYmaYnaYoaXaaYpaXLaXMaXIaXLaYqaXhaYraXjaYsaWnaYtaWNaYuaYvaYwaYxaYyaYzaYAaYBaYCaYDaYEaXvaYFaWoaYGaYHaYIaYJaYKaXAaYLaYMaYNaWXaXEaXFaXFaXFaYiaYjaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaWsaWsaWtaWtaWtaWtaYkaWtaWtaWtaYlaWtaWtaWtaWtaWsaWsaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcaaaaaaaaaaWBaYOaYPaXJaXaaYQaYRaYSaYTaYUaYVaXhaYWaXjaYXaWnaYYaYZaZaaZbaWnaZcaZdaZeaZfaZgaWoaZhaZiaZjaWoaWoaXAaXAaZkaZlaZmaZnaZoaZpaZqaWXaXEaZraZsaZtaYiaYjaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcaaaaaaaaaaWsaWtaWtaWtaWtaWtaWtaYkaWuaYlaWtaWtaWtaWtaWtaWtaWsaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaWCaXaaZuaXaaXhaZvaXLaZwaZxaXLaZyaXhaXhaZzaXhaWnaZAaWnaZBaWnaWnaWnaZCaZDaZCaWnaWoaWoaWoaWoaWoaWoaZEaZFaYbaZGaZHaXAaZIaZJaZKaWXaZLaXFaZMaXFaZNaWXaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcaafaafaafaWsaWuaZOaWtaWtaWtaWtaWtaZPaWtaWtaWtaWtaWtaZQaWuaWsaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaZRaZSaZTaZUaZVaZWaXLaZXbntaXLaZZbaababbacbadbaebafbagbahbaibajbakbalbambanbaobapbaqbarbasbatbauaXAaXAaXAbavaXAaXAbawbaxbawaWXbaybazbaAbazbaBaWXaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaWsaWtaWtaWtaWtaWtaWtbaCbaDbaEaWtaWtaWtaWtaWtaWtaWsaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaabaaaaaabaFbaGbaHbaIbaJbaKbaLbaMbaNbaLbaObaPbaLbaQbaRbakbaSbaTbaUbaVbaWbnVbaYbaZbbabbbbbcbbdbbebbfbbgbaobbhbbibbjbbkbblbbmbbnbbkbbobbpbbqaXFbbraXFbbsaWXaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaWsaWsaWtaWtaWtaWtbaCaWtbaDaWtbaEaWtaWtaWtaWtaWsaWsaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaZRaZSaZTaZUaZVaZWaXLaZXeblaXLaZZbaababbacbadbaebafbagbahbaibajbakbalbambanbaobapbaqbarbasbatbauaXAaXAaXAbavaXAaXAbawbaxbawaWXbaybazbaAbazbaBaWXaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaWsaWtaWtaWtaWtaWtaWtbaCbaDbaEaWtaWtaWtaWtaWtaWtaWsaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaabaaaaaabaFbaGbaHbaIbaJbaKbaLbaMbaNbaLbaObaPbaLbaQbaRbakbaSbaTbaUbaVbaWebmbaYbaZbbabbbbbcbbdbbebbfbbgbaobbhbbibbjbbkbblbbmbbnbbkbbobbpbbqaXFbbraXFbbsaWXaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaWsaWsaWtaWtaWtaWtbaCaWtbaDaWtbaEaWtaWtaWtaWtaWsaWsaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaabbtbbubbvaXMbbwbbxbbybbzbbAbbBbbCbbDbbEbbFbbGbakbaSbbHbbIbbJbbKbbLbbMbbNbbObaobbPbbQbbRbbSbapbaobbTbbUbbVbbWbbXbbXbbYbbZbcabcbbccbcdbcebcdbcfaYjaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaWsaWtaWtaWtbaCaWtbcgbaDbchaWtbaEaWtaWtaWtaWsaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafaWBaWBbcibcjbckaXhbclbcmbcnaXhbcobcpaXhaXLbcqbcrbcrbcrbcsbctbcubcvbcwbcxbcybczbaobaobcAbaobaobaobcBbcCbcDbcEbcFbbUbcGbbUbcHaYjbcIbcJbcKbcJbcLaYjaaaaaaaaaaadbcMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaWsaWsaWtaWtaWtaWtbcgbaDbchaWtaWtaWtaWtaWsaWsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaafaagaadaadaadaadaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaabcNbcObcPbcQbcRbcSbcPbcTbcRbcUbcVaXhbcWbcXbcrbcYbcZbdabdbbdcbcrbddbdebdfbdgbdhbdibdjbdkbdlbdmbdnbdobdpbdqbdrbbUbbUbbUbdsbdtbdubdvbdwbdxbduaYjaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaWsaWtaWtaWtaWtbcgbaDbchaWtaWtaWtaWtaWsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -10943,28 +11301,28 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaafaaaaaaaabaaaaaaaaabgvbjabjbbgvbjabjbbgvbjcbjdbgvbgwbgvbjabjebgvaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaabgxbjfbjgbjhbgybjibjjbcRbjkbjlbcRbjmbjnbjmbjmbjobjpbjqbjmbjrbjsbjtbjubjvbjwbjxbjubjybjsbjzbjAbjBbjCbfgbjDbjEbjFbjGbjHbjIbjJbjKbjLbjMbjNbjObjPbjQbjRbjSaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabhgaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaabhhbjTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaabjUbgwaaabjUbgwaaabjVbjVaaabgwaaabjUbjWaaaaaaaaaaaaaaaaaaaafbfGaaaaaaaaaaaaaaaaaabgxbjXbjgbjYbgxbcNbcNbcNbcNbcRbcRbjZbkabkbbkcbkdbkebkfbkgbjrbkhbkibkjbkkbklbkmbknbkobkpbkqbkrbksbktbkubkqbkvbkvbkvbkvbkvbkvbkvbkvbkwbkxbkybkybkybEBbkyaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabhgaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaabhhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaafaaaaaaaaaaaaaaabkAbkCbkEbkDbkBbkEbkFbkGbkHbkIbkJbkFbkGbkKbkLbkMbkAbkAaaaaaaaaaaaaaadaaaaaaaadaaaaaaaaabgxbgxbkNbgxbgxbkObkPbkQbjrbkRbkSbkTbkUbkVbkWbkXbkYbkZblablbblcbldbleblfblgblhblibljblkbllblmblnbloblpblqbkvblrblsbltblublvblwbkvblxblybkyblzblAblBbkyaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbhgaafaafaafaafaaaaaaaaaaafaafaafaafbhhaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaafaaaaaaaaaaaabkAblCblDblEblFblGblHblIblJblKblLblMblNblOblPblQblRblSblTbkAaafaafaafaadaafabcaadaafaafaafblUblVblVblVblWblXblYblZbjrbmabmbbmcbmdbmebkZbmfbmgbmhbmibmjbmkbldbmlbmmbmnbmoblcbljbmpboCbmrbmsbmtbmubmvbkvbmwbmxbmybmzbmAbmBbmCbmDbmEbmFbmGbmHbmIbkyaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabmJbhgbmJaaaaaaaafaaaaaaaaaaafaaaaaabmJbhhbmJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaafaaaaaaaaaaaabkAbmKbmLbmMbmNbmLbmObmPbmQbmRbmLbmSbmNbmTbmMbmUbmLbmVbmWbkAaaaaaaaaaaafaaaaaaaaaaaaaaaaaablUbmXbmYbmZblWblWbnablWbjrbnbbncbndbnebnfbngbnhbnibnjbnkbnlbnmbnnbnobnpbnqbnrbnobnsblkbrQbnubnvbnwbnxbnybkvbnzbnAbmAbnBbmAbnCbmCbnDbnEbkybkybkybkybkyaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbhgaafaafaafaafaaaaaaaaaaafaafaafaafbhhaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafaafbgvbgvbgvbgvaaabkGbnFbnGbmObmPbnHbnIbnJbnKbnLbnMbnNbnObnPbnQbnRbmQbnSbnTbkGaaaaaaaaaaafaaaaaaaaaaaaaaaaaablUblUbnUbyRbnWbnXbnYblVbjrbnZboabmbbobbocbkZbodbmfboebofbjrbogbohboibojbokbolbombonboobkqbopboqborbosbotbkvboubovbowboxbmyboybmCbozboAboBbJHboDboEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabhgaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaabhhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaafaaaaaaaaaaaabkAblCblDblEblFblGblHblIblJblKblLblMblNblOblPblQblRblSblTbkAaafaafaafaadaafabcaadaafaafaafblUblVblVblVblWblXblYblZbjrbmabmbbmcbmdbmebkZbmfbmgbmhbmibmjbmkbldbmlbmmbmnbmoblcbljbmpebnbmrbmsbmtbmubmvbkvbmwbmxbmybmzbmAbmBbmCbmDbmEbmFbmGbmHbmIbkyaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabmJbhgbmJaaaaaaaafaaaaaaaaaaafaaaaaabmJbhhbmJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaafaaaaaaaaaaaabkAbmKbmLbmMbmNbmLbmObmPbmQbmRbmLbmSbmNbmTbmMbmUbmLbmVbmWbkAaaaaaaaaaaafaaaaaaaaaaaaaaaaaablUbmXbmYbmZblWblWbnablWbjrbnbbncbndbnebnfbngbnhbnibnjbnkbnlbnmbnnbnobnpbnqbnrbnobnsblkebobnubnvbnwbnxbnybkvbnzbnAbmAbnBbmAbnCbmCbnDbnEbkybkybkybkybkyaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbhgaafaafaafaafaaaaaaaaaaafaafaafaafbhhaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafaafbgvbgvbgvbgvaaabkGbnFbnGbmObmPbnHbnIbnJbnKbnLbnMbnNbnObnPbnQbnRbmQbnSbnTbkGaaaaaaaaaaafaaaaaaaaaaaaaaaaaablUblUbnUebpbnWbnXbnYblVbjrbnZboabmbbobbocbkZbodbmfboebofbjrbogbohboibojbokbolbombonboobkqbopboqborbosbotbkvboubovbowboxbmyboybmCbozboAboBebqboDboEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabhgaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaabhhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaabgvboFboGboJboKboHboIboLboMboNboLboQboPboOboQboRboSboTboUbmMbmUboVboWboXbkGaaaaaaaaaaafaaaaaaaaaaabaaaaaaaaaboYboZbpablYbpbbnYblVbpcbpdbpebpfbpgbphbkZbpibkZbpjbpkbjrbjubjubjubplbpmbpnbjubpobjubkqbppbpqbprbpsbptbkvbpubpvbmAbpwbmxbpxbmCbpybpzbpAbpBbpCboEaaaaaaaaaaabaagaaaaaaaaaaaaaaaaafabcaadaadaadaadaadaagaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabhgaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaabhhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaabgvbpDbpEbpFbpGbpHbpIbpJbpKbmPbpLbpMbpMbpNbnHbpObpPbmPbpQbpRbpSbpTbpUbpVbpWbpWbpWbpWbpWaaaaaaaaaaaaaaaaaaaaaboYboZbpXbpYbpZbqablVbjrbqbbqcbqdbqebqfbqgbqhbqibqjbqkbjrbqlbjubqmbqnbqobqpbqmbqqbjubqrbkqbkqbkqbkqbkqbkvbqsbqtbqubqvbqwbqxbmCbqybqzbqAbqBbqBboEaaaaaaaaaaaaaadaaaaaaaaaaaaaafaafaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabhgaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaabhhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadKaafaafaafaafbgvbgvbgvbgvaaabqCbqDbqEbmMbmNbqFbqGbqJbqIbqHbqKbqLbqMbqHbqNbpTbmTbqObqPbpWbqQbqRbqSbpWbqTbqUbqUaaaaaabqVblUbqWbqXbqYbqZbrabrbbrbbrbbrbbrbbrbbrcbrbbrbbrbbrbbrbbrbbrbbrbbrbbrdbrebrfbrfbrgbrhbribribrjbrkbrlbrmbrnbmCbrobrpbrqbrobrobmCbmCbrrbrsbrtbrubrvbrwbrxaafaafaafaadaaaaaaaaaaafaafaaaaaaaafaaaaaaaafaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaabhgaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaabhhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaabgvbrybrzboJboKboHbrAboLbrBbrCboUbrDbmLbmTbmUbmLbrEbnJbrFbnJbrGbrHbrIbrJbrKbrLbrMbrNbrObrPbMNbqUbqUaaabrRbrSbrTbrUbrVbrWbrXbrYbrZbsabsbbscbsdbsebsfbsgbshbsibsjbskbslbsmbsnbsobspbsqbsrbssbsubsvbtPbswbsxbsybszbsAbsBbsCbsDbsEbsFbsGbsHbsIbsJbsKbsLbsMbsNbsObsPaaaaaaaaaabcaadaadaadaagaabaaaaaaaafaaaaaaaafaaaaafaafbsQaafaafaaaaaaaaaaaeaaaaaaaaaaaabhgaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaabhhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaabgvbrybrzboJboKboHbrAboLbrBbrCboUbrDbmLbmTbmUbmLbrEbnJbrFbnJbrGbrHbrIbrJbrKbrLbrMbrNbrObrPebrbqUbqUaaabrRbrSbrTbrUbrVbrWbrXbrYbrZbsabsbbscbsdbsebsfbsgbshbsibsjbskbslbsmbsnbsobspbsqbsrbssbsubsvbtPbswbsxbsybszbsAbsBbsCbsDbsEbsFbsGbsHbsIbsJbsKbsLbsMbsNbsObsPaaaaaaaaaabcaadaadaadaagaabaaaaaaaafaaaaaaaafaaaaafaafbsQaafaafaaaaaaaaaaaeaaaaaaaaaaaabhgaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaabhhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaabgvbsRbsSbpFbpGbsTbsUbmTbsVbsWbsXbsYbqHbsZbpTbtabtbbtcbtdbtebtfbtgbthbtibtjbtkbtlbtmbtnbtobtpbtqbqUaaabtrbrSbtsbttbtubtvbtwbtxbtybtzbtAbtzbtBbtzbtCbtDbtzbtEbtFbtGbtHbtIbtJbtKbtLbtMbtNbtObtQbtRbuTbtSbvkbtTbtUbtVbtWbtVbtXbtVbtYbtZbuabubbucbudbsLbuebufbsObugaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaabuhbuibujbukaaaaafaaabulaaaaafaaaaaaaagaaaaaaaaaaaaaaabhgaaaaaaaaaaafaaaaaaaaaaafaabaaaaaabhhaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafaafbgvbgvbgvbgvaaabqCbumbqEbmMbmNbunbuobupbuqburbsWbusbutbutbutbuubutbutbuvbuwbuwbuwbuwbuwbuxbuybuzbqTbqTblUblUbuAbuBbuCbuDbuEbrbbuFbuGbuHbuGbuIbuJbuGbuKbuLbuHbuKbuMbuNbuObuPbuQbspbuRbuSbuUbuVbvXbvYbuWbuXbuWbuYbuWbuWbuWbuZbvabvbbvabuZbuZbvcbvdbrtbvebvfbrwbrwaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaabvgbvhbvhbvgbvgbvgbvibvjaaaaafaaaaaaaafaaaaaaaaaaaaaabbhgaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaabhhaaaaaaaadabcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaabgvbvmbvlboJboKbvnbvqboLbrBbvobvpbwvboQbvrboQboTbvsbutbvtbvubvvbvwbvxbuvbvybvzbvAbvBbuwbvCbvDbvEbvFbvGbvHbvIbvJbvKblUblUbvLbrbbvMbvNbvObvNbvPbrbbvQbuPbrbbvRbuPbrbbvSbuPbrYbvTbvUbvVbvWbxhbxjbzybxjbuWbwabwbbwcbwdbwebuWbwfbwgbwhbwibwjbuZbwkbvZbvZbwlbwmbwnbvgaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaabwobwpbwqbwrbwsbwsbwtbvjbvibviaaaaaaaafaaaaaaaaaaaaaaabhgaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaabhhaaaaaaaaaaafaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaabgvbwubBUbpFbpGbwwbwxbwybwzbwAbwBbwCbwBbwDbwBbwEbwFbwGbwHbwIbwJbwKbwLbuvbwMbwNbwObwPbwQbwRbwSbwTbwUbwUbwUbwUbwUbwUbwVbwWbwXbrbbwYbvNbwZbvNbvPbrbbvNbxabrbbvNbxbbrbbvNbxcbrbbxdbxebxfbxgbxhclfclgcnebuWbxkbxlbxmbxnbxobuWbxpbxqbxrbxsbxtbuZbxubxvbvZbxwbxibxxbvgaaaaaaaaaaaaaaabvgbvgbvibvibvibvgbxybxzbxAbxBbxCbxDbxEbxFbxGbvibvgbxHbxHbxIbxIaafaafaafbhgaafaafaafaafbxJbxKbxLbhgbxMbxNbxObxPbxQaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafaafbgvbgvbgvbgvaaabxRbxSbqEbxTbxUbxVbxWbxXbxYbmTbxZbyabwGbybbycbydbyebyfbuvbygbyhbyibyjbuwbvCbykbylbuxbuxbuxbuxbuxbuxbuxbymbynbrbbyobvNbypbyqbvPbrbbyrbysbrbbyrbytbrbbyrbyubrbbyvbywbyxbxgbxhcnfcoUcJZbuWbyybyzbyAbyBbyCbuWbyDbxqbyEbxqbyFbuZbyGbxvbvZbvZbyHbvZbvZbvgbvgbvgbvgbvgbvgcbvbyIbyJbyKbyKbyLbyMbyMbyLbyNbyObyPbyQcjEbySbyTbxHbyUbyVbxIbxIaaaaaabhgaaaaaaaaaaafbyWbyXbyYbyZbzabyZbyWbzbbyWaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafaafbgvbgvbgvbgvaaabxRbxSbqEbxTbxUbxVbxWbxXbxYbmTbxZbyabwGbybbycbydbyebyfbuvbygbyhbyibyjbuwbvCbykbylbuxbuxbuxbuxbuxbuxbuxbymbynbrbbyobvNbypbyqbvPbrbbyrbysbrbbyrbytbrbbyrbyubrbbyvbywbyxbxgbxhcnfcoUcJZbuWbyybyzbyAbyBbyCbuWbyDbxqbyEbxqbyFbuZbyGbxvbvZbvZbyHbvZbvZbvgbvgbvgbvgbvgbvgebsbyIbyJbyKbyKbyLbyMbyMbyLbyNbyObyPbyQebtbySbyTbxHbyUbyVbxIbxIaaaaaabhgaaaaaaaaaaafbyWbyXbyYbyZbzabyZbyWbzbbyWaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadJaaaaaaaaaaaaaaaaaaaaaaaaaaabkAbzcbzdbzebkAbkAbzfbzgbzhbzgbzibzjbzkbuvbutbzlbutbuvbuvbuwbuwbzmbuwbuwbuxbznbzobzpbuxbzqbzrbzsbztbuxbymbynbrbbrbbrbbrbbrbbrbbrbbrbbrbbrbbrbbrbbrbbrbbrbbrbbzubzvbzwbzxbxhcOBdcSdfrbuWbzAbzBbzCbzDbzEbuWbzFbzGbzHbxqbzIbuZbzJbzKbzLbzMbzNbzNbzNbzNbzNbzNbzObzNbzNbzNbzNbzPbzQbzRbzSbzTbzUbzVbzWbyObyPbzXbyObzYbzZbAabAbbAcbAdbxIaaaaaabhgaaaaaaaaaaaabyWbAebyZbAfbAgbAhbyWbAibyWaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjaaaaaaaaabAjaaaaaaaaaaaaaaabAjaaaaaaaaabAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaafaaaaaaaaaaaaaaaaaabAkbAkbAkbAkbAkbAkbAkbAkbAkbAlbAmbAnbAobApbAqbArbAsbAtbAtbAubAvbAwbAxbAybAzbAAbABbACbvCbADbAEbAFbuxbDJbymbymbymbAGbAHbAIbwUbAJbAKbALbAMbwUbwUbwUbwUbwUbwUbANbAObwUbAPbAQbuxbARbASbATbxhbxhbxhbxhbuWbAVbAWbAXbAYbAZbuWbBabBbbBcbBdbBebuZbBfbxibBgbBhbBibBjbBkbxibxibBlbBlbBlbBlbBlbBlbBlbBmbBnbBobBpbBqbBrbBrbBrbBrbBsbBsbBsbBsbBsbBtbBubBvbBwbBwbBxbBwbBxbBwbBxbBwbBwbBybBzbBAbBBbBCbyWbBDbyWbyWaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjaaaaaaaaabAjbAjbAjbAjbAjbAjbAjaaaaaaaaabAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaafaafaaaaaabBEbBFbBGbBHbAkbBIbBJbBKbBLbBMbBMbBNbAkbBObBPbBQbBRbBSbBTbDpbBVbDpbBWbBXbBYbBZbCabCbbCcbCdbCebCfbvCbCgbzobChbuxbCibCjbymbymbuxbCkbClbymbCmbCnbuxbuxbCobuxbuxbCpbymbymbAQbCqbymbCrbuxbuxbCsbCtbCubvZbvZbCvbyJbuWbCwbCxbuWbuWbuWbuWbuZbuZbCybuZbuZbuZbBfbxibCzbCAbBibwnbCBbCCbCDbBlbCEbCFbCGbCHbCIbBlbCJbCJbCKbCJbCJbBrbCLbCMbCNbBsbCObBsbCPbBsbCQbCRbCSbBwbCTbCUbCVbCVbCWbCXbCYbBwbCZbDabDbbDcbDdbDebDfbDgbyWaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaabAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaagaadaadaaaaabaaaaaaaaabBEbDhbDhbDibAkbDjbDjbDjbDkbBMbDlbDmbAkbDnbDobELbDqbDrbDsbDtbCfbDubDvbDwbDxbDubDybDybDzbDAbDBbDybuxbDCbDDbDEbuxbuxbuxbDFbymbuxbCrbDGbDGbDHbDGbDGbDIbymbImbuxbDKbymbDLbuxbvFbymbCrbymbuxbDMbDNbDObvZbxibxibzzbDPbxibDQbAUbAUbAUbAUbBgbDRbDSbDTbDUbDVbDWbDXbDYbvZbDZbDZbDZbDZbEabBlbEbbEcbEdbEebEfbFMbEhbEibEjbEkbElbBrbEmbEnbEobBsbEpbBsbEqbBsbBsbErbEsbEtbEubEvbCVbEwbExbEybEzbBwbEAbEAbEAbFUbEAbEAbEAbEAbEAbEAaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaabAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaagaadaadaadaagaafaaaaafaaaaaaaaaaaaaaaaaaaaabBEbECbEDbEEbAkbEFbEGbEGbEHbEGbEIbEJbAkbEKbGmbEMbENbEObEPbEQbERbESbETbEUbEVbEWbEXbEYbEZbFabFbbFcbuxbFdbFebFfbFgbFhbuxbvGbvFbuxbFibDGbFjbFkbFlbDGbFmbFnbChbuxbzpbymbFobuxbvGbymbFpbFqbFrbFsbFtbFubFvbDTbFwbDTbFxbDTbFybDTbDTbDTbDTbFzbFAbFBbFBbFBbFBbFBbFBbFCbFDbDZbFEbFFbFGbEabFHbFIbFJbFKbFLbFVbFMbFNbFObFPbEjbFQbBrbFRbFSbFTbGbbGibFWbFXbFYbBsbFZbGabHybGcbGdbGebGdbGfbGgbGhbKrbGjbGkbGlbGpbGqbGnbGobJpbGrbGsaaaaaaaaaabcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaafaaaaaaaaaaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaabBEbGtbGubGvbAkbGwbEGbEGbGxbGybGzbGAbGBbGCbGDbGEbGFbEObGGbGHbERbGIbGJbGKbGLbGMbEXbGNbGObGPbGQbGRbuxbGSbGTbGUbGVbFhbuxbAQbAQbuxbGWbDGbGXbFkbGYbDGbuxbuxbuxbuxbGZbGZbGZbuxbuxbuxbuxbuxbHabHbbHcbHdbHabvZbvZbvZbvZbvZbvibvibvibvZbvZbvZbvZbFBbHebHfbHgbHhbFBbHibHjbHkbHlbHmbHnbEabHobHpbEcbHqbHrbHsbEgbHtbHubHvbHwbHxbKtbHzbHAbHBbBsbHCbHDbHEbHFbBsbHGbHHbBwbHIbHJbHKbHJbHKbHJbHLbEtbHMbHNbHObHPbHQbHRbHSbHTbHUbHVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaafaaaaaaaaaaaaaafaaabHWbHWbHWbHWbHWbHWbHWbHXbHXbBEbHYbHZbDibAkbIabIabIbbIcbIdbIebIfbAkbIgbIhbIibIjbIkbIlccMbCfbInbIobIpbIqbIrbDybIsbItbIubIvbIwbIxbIxbIybIxbIxbIxbIxbuxbuxbuxbIzbDGbIAbIBbICbDGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIDbIEbIFbIGbIHbIIbIDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFBbIJbIKbILbILbIMbINbBqbDZbIObIPbIQbEabIRbISbITbIUbIVbIWbEgbEjbHubIXbIYbIZbBrbJabJbbJcbBsbJdbJebJfbJgbBsbJhbJibBwbBwbJjbJkbJlbJjbJmbJjbBwbJnbJobKFbJqbJrbJsbJtbJqbJubJvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaaaaafbHWbHWbJwbJxbJybJzbJAbHWbJBbJCbJDbJEbJFbJGbAkbIabIackbbJIbJJbJKbJLbAkbJMbJNbJObJPbCfbERbJQbCfbJRbJSbJTbJUbJVbDybGNbJWbJXbJYbJZbIxbKabKbbKcbKdbKebIxbKfbKgbuxbCrbDGbKhbKibDGbDGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIDbKjbKkbHcbKlbKmbIDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFBbFBbKnbKobKpbFBbKqbvZbEabDZbKzbDZbEabBlbEgbKsbOobKsbKubBlbKvbxIbKwbxIbKxbBrbBrbBrbBrbKybBsbPEbBsbBsbBsbHGbKAbyVbBwbBwbBwbBwbBwbBwbBwbBwbKBbKCbKDbKEbLkbKBbKGbKBbKHbKIbKJbKKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaafaafaafbKLbKMbKMbKMbKMbKNbKObKPbKQbKRbKSbKTbKUbHWbKVbKWbKXbKYbKZbBEbAkbAkbAkbAkbAkbAkbAkbAkbAkbLabLbbLcbLdbLebLfbLgbLhbLibLjbPTbLlbLmbEXbLnbLobLpbLqbLrbLsbLtbLubLvbLwbLxbIxbLybLzbLAbCrbDGbDGbDGbDGaaaaaaaaaaaaaaaaaabLBbLBbLCbLCbLCbLBbLBbLDbLEbHcbLFbLGbLHbLHbIDbIDbIDbLHbLHaaaaaaaaaaaaaaaaaabFBbFBbFBbFBbFBbLIbBqbLJbLKbLLbLMbLNbLObLPbLQbLRbLSbLTbLUbLVbLWbLXbLYbLZbMabMbbMcbMbbMdbMebMfbMgbMhbMibMjbMkbMlbMmbMmbMnbMobMpbMmbMqbMrbJvbMsbMtbMubMvbMwbMxbMybMzbMAbMAbMBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaabaaaaadaadaadaadaadaadaadaagaadaaaaaaaaaaaabMCbMDbMEbKMbMDbKNbMFbMGbMHbMIbMJbMKbMLbMMclTbMObMPbMQbBEbMRbMSbMTbMUbMVbMWbMXbMYbMZbNabNbbNcbNdbNebNfbNgbNhbNibNjbNkbPTbLlbLmbEXbNlbJWbNmbNnbNobIxbNpbNqbNrbNsbNtbIxbNubNvbuxbCrbymbuxaaaaaaaaaaabaaaaaabLCbLCbLBbNwbNxbNybNzbNAbNBbNCbNDbHcbNEbNFbNGbNHbNIbNJbNKbNLbLHbIDbIDaaaaaaaabaaaaaaaaabvZbNMbDXbNNbBqbCKbNObNPbNQbNRbNSbNTbNUbNVbNWbNXbNYbNXbNZbOabObbNXbOabNXbOcbOdbOebNXbOfbOgbNWbNYbOabOhbNZbNXbOibOjbOkbOhbOlbOmbOnbPGbOpbOqbOrbOsbOtbOubOvbOwbOxbOxdgpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjaaaaaaaaabAjbAjbAjbAjbAjbAjbAjaaaaaaaaabAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaafaafaaaaaabBEbBFbBGbBHbAkbBIbBJbBKbBLbBMbBMbBNbAkbBObBPbBQbBRbBSbBTbDpbBVbDpbBWbBXbBYbBZbCabCbbCcbCdbCebCfbvCbCgbzobChbuxbCibCjbymbymbuxbCkbClbymbCmbCnbuxbuxbCobuxbuxbCpbymbymbAQbCqbymbCrbuxbuxbCsbCtbCubvZbvZbCvbyJbuWbCwbCxbuWbuWbuWbuWbuZbuZbCybuZbuZbuZbBfbxibCzbCAbBibwnbCBbCCbCDbBlbCEbCFbCGbCHbCIbBlbCJbCJbCKbCJbCJbBrbCLbCMebubBsbCObBsbCPbBsbCQbCRbCSbBwbCTbCUbCVbCVbCWbCXbCYbBwbCZbDabDbbDcbDdbDebDfbDgbyWaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaabAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaagaadaadaaaaabaaaaaaaaabBEbDhbDhbDibAkbDjbDjbDjbDkbBMbDlbDmbAkbDnbDobELbDqbDrbDsbDtbCfbDubDvbDwbDxbDubDybDybDzbDAbDBbDybuxbDCbDDbDEbuxbuxbuxbDFbymbuxbCrbDGbDGbDHbDGbDGbDIbymbImbuxbDKbymbDLbuxbvFbymbCrbymbuxbDMbDNbDObvZbxibxibzzbDPbxibDQbAUbAUbAUbAUbBgbDRbDSbDTbDUbDVbDWbDXbDYbvZbDZbDZbDZbDZbEabBlbEbbEcbEdbEebEfbFMbEhebvbEjbEkbElbBrebwbEnbEobBsbEpbBsbEqbBsbBsbErbEsbEtbEubEvbCVbEwbExbEybEzbBwbEAbEAbEAbFUbEAbEAbEAbEAbEAbEAaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaabAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaagaadaadaadaagaafaaaaafaaaaaaaaaaaaaaaaaaaaabBEbECbEDbEEbAkbEFbEGbEGbEHbEGbEIbEJbAkbEKbGmbEMbENbEObEPbEQbERbESbETbEUbEVbEWbEXbEYbEZbFabFbbFcbuxbFdbFebFfbFgbFhbuxbvGbvFbuxbFibDGbFjbFkbFlbDGbFmbFnbChbuxbzpbymbFobuxbvGbymbFpbFqbFrbFsbFtbFubFvbDTbFwbDTbFxbDTbFybDTbDTbDTbDTbFzbFAbFBbFBbFBbFBbFBbFBbFCbFDbDZbFEebxbFGbEabFHbFIbFJbFKbFLbFVbFMbFNbFObFPbEjbHxbKtebzebybFTbGbbGibFWbFXbFYbBsbFZbGabHybGcbGdbGebGdbGfbGgbGhbKrbGjbGkbGlbGpbGqbGnbGobJpbGrbGsaaaaaaaaaabcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaafaaaaaaaaaaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaabBEbGtbGubGvbAkbGwbEGbEGbGxbGybGzbGAbGBbGCbGDbGEbGFbEObGGbGHbERbGIbGJbGKbGLbGMbEXbGNbGObGPbGQbGRbuxbGSbGTbGUbGVbFhbuxbAQbAQbuxbGWbDGbGXbFkbGYbDGbuxbuxbuxbuxbGZbGZbGZbuxbuxbuxbuxbuxbHabHbbHcbHdbHabvZbvZbvZbvZbvZbvibvibvibvZbvZbvZbvZbFBbHebHfbHgbHhbFBbHibHjbHkbHlbHmbHnbEabHobHpbEcbHqbHrbHsbEgbHtebBebCebAbFQbBrebFebDebEbBsbHCbHDbHEbHFbBsbHGbHHbBwbHIbHJbHKbHJbHKbHJbHLebGbHMbHNbHObHPbHQbHRbHSbHTbHUbHVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaafaaaaaaaaaaaaaafaaabHWbHWbHWbHWbHWbHWbHWbHXbHXbBEbHYbHZbDibAkbIabIabIbbIcbIdbIebIfbAkbIgbIhbIibIjbIkbIlccMbCfbInbIobIpbIqbIrbDybIsbItbIubIvbIwbIxbIxbIybIxbIxbIxbIxbuxbuxbuxbIzbDGbIAbIBbICbDGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIDbIEbIFbIGbIHbIIbIDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFBbIJbIKbILbILbIMbINbBqbDZbIObIPbIQbEabIRbISbITbIUbIVbIWbEgbEjebIbIXebHbIZbBrbBrbBrbBrbBsbJdbJebJfbJgbBsbJhbJibBwbBwbJjbJkbJlbJjbJmbJjbBxbJnbJobKFbJqbJrbJsbJtbJqbJubJvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaaaaafbHWbHWbJwbJxbJybJzbJAbHWbJBbJCbJDbJEbJFbJGbAkbIabIaebJbJIbJJbJKbJLbAkbJMbJNbJObJPbCfbERbJQbCfbJRbJSbJTbJUbJVbDybGNbJWbJXbJYbJZbIxbKabKbbKcbKdbKebIxbKfbKgbuxbCrbDGbKhbKibDGbDGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIDbKjbKkbHcbKlbKmbIDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFBbFBbKnbKobKpbFBbKqbvZbEabDZbKzbDZbEabBlbEgbKsbOobKsbKubBlbKvbxIbKwbxIbKxbCJebLebKebKbKybBsbPEbBsbBsbBsbHGbKAebMbBwbBwbBwbBwbBwbBwbBwbBwbKBbKCbKDbKEbLkbKBbKGbKBbKHbKIbKJbKKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaafaafaafbKLbKMbKMbKMbKMbKNbKObKPbKQbKRbKSbKTbKUbHWbKVbKWbKXbKYbKZbBEbAkbAkbAkbAkbAkbAkbAkbAkbAkbLabLbbLcbLdbLebLfbLgbLhbLibLjbPTbLlbLmbEXbLnbLobLpbLqbLrbLsbLtbLubLvbLwbLxbIxbLybLzbLAbCrbDGbDGbDGbDGaaaaaaaaaaaaaaaaaabLBbLBbLCbLCbLCbLBbLBbLDbLEbHcbLFbLGbLHbLHbIDbIDbIDbLHbLHaaaaaaaaaaaaaaaaaabFBbFBbFBbFBbFBbLIbBqbLJbLKbLLbLMbLNbLObLPbLQbLRbLSbLTbLUbLVbLWbLXbLYbLZbMabMbbMbbMbbMdbMebMfbMgbMhbMibMjbMkbMlbMmbMmbMnbMobMpbMmbMqbMrbJvbMsbMtbMubMvbMwbMxbMybMzbMAbMAbMBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaabaaaaadaadaadaadaadaadaadaagaadaaaaaaaaaaaabMCbMDbMEbKMbMDbKNbMFbMGbMHbMIbMJbMKbMLbMMebNbMObMPbMQbBEbMRbMSbMTbMUbMVbMWbMXbMYbMZbNabNbbNcbNdbNebNfbNgbNhbNibNjbNkbPTbLlbLmbEXbNlbJWbNmbNnbNobIxbNpbNqbNrbNsbNtbIxbNubNvbuxbCrbymbuxaaaaaaaaaaabaaaaaabLCbLCbLBbNwbNxbNybNzbNAbNBbNCbNDbHcbNEbNFbNGbNHbNIbNJbNKbNLbLHbIDbIDaaaaaaaabaaaaaaaaabvZbNMbDXbNNbBqbCKbNObNPbNQbNRbNSbNTbNUbNVbNWbNXbNYbNXbNZbOabObbNXbOabNXbOcbOdbOeebObOfbOgbNWbNYbOabOhbNZbNXbOibOjbOkbOhbOlbOmbOnbPGbOpbOqbOrbOsbOtbOubOvbOwbOxbOxdgpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaadaadaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabKLbMDbMDbKMbMDbKNbMFbOybOzbOAbOBbOCbODbHWbOEbKXbOFbOGbOHbOIbOJbOKbOLbOMbONbOObOPbOQbORbOSbOTbOKbOUbOVbLgbNhbOWbNjbOXbOYbOZbPabDybDybDzbPbbDzbDybIxbIxbPcbPdbNsbPebIxbPfbPgbAQbCrbymbuxaaaaaaaaaaaaaaabLCbLCbPhbPibPhbPjbPkbPlbNAbNAbPmbNDbHcbNEbPmbNHbNHbPnbPobPpbPqbPrbPqbIDbIDaaaaaaaaaaaaaaabvZbPsbPtbPubPvbPvbPwbPxbPwbPwbPwbPwbPybPzbCSbPAbPAbPAbPAbPBbPAbPAbPAbPAbPAbPAbPAbPCbPDbSWbPFbPFbPFbPFbPFbPFbPFbTabPHbPIbPJbPKbPLbJvbPMbPNbMubPObPPbPQbMybPRbPSbTCbMBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaadaadaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabMCbKMbKMbKMbKMbKNbKObPUbPVbPVbPWbPXbPYbHWbPZbQabQbbQcbDibQdbQebQfbQgbQhbQibQhbQhbQjbQhbQgbQkbQlbQmbQnbQobQpbQkbQqbQrbQsbOZbQtbQubQvbQwbQxbQybQzbQAbQBbQCbQDbNsbQEbIxbQFbPgbAQbCrbQGbuxaaaaaaaaaaaabLCbLCbQHbQIbQJbQKbQLbQMbQNbQJbQObQPbQQbHcbQRbQPbQSbNEbQTbQUbQVbQWbNEbQXbQYbIDbIDaaaaaaaaaaaabvZbQZbvZbvZbPvbRabRbbRcbRdbRebRfbRgbRhbRibEsbRjbRkbRlbRmbRnbRobRpbRqbRrbRsbRtbPAbPCbRubRvbRwbRxbPFbRybRzbRAbPFbRBbRCbPIbPIbRDbREbRFbRGbRHbRIbRJbKBbKKbKBbKBbKBbKBbKGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaadaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaabHWbRKbRLbRMbRNbRObRPbHWbRQbRRbQbbRSbDibRTbRUbQgbQgbRVbRWbRXbRYbRZbSabSbbQkbScbSdbSebSfbSgbShbSibSjbSkbEVbSlbSmbSnbSobSpbSqbSrbSsbStbStbSubStbStbStbStbuxbuxbCrbSvbuxaaaaaaaaabLCbLCbQHbQIbSwbSwbSxbSybSzbSAbSAbSBbSCbSDbSEbSFbSGbSHbSIbSJbSJbSKbSLbSMbSMbQXbQYbIDbIDaaaaaaaaabvZbSNbSObSPbPvbSQbSRbSSbSTbSUbSVbWObSXbSYbSZcdnbTbbTcbTdbTdbTdbTebTfbTgbThbTibTjbPCbTkbTlbTmbTnbTobTobTobTobPFbTpbTqbTrbPIbTsbTtbKBbTubTvbTwbTxbTybTzbTAbTBbJvaaaaaaaabaaaaaaaaaabcaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -10972,38 +11330,38 @@ aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbA
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaabVvbVwbVAbVwbVAbVwbVAbVwbVAbVwbVAbVwbVybVzbVEbVBbVCbVDbVBbXpbVBbVFbVGbVHbVIbBEbVJbVKbVLbVMbVNbVObQgbVPbTMbVQbVRbVSbVTbTRbVUbQkbVVbVWbVXbVYbVZbWabNjbWbbWcbWdbWebWfbWgbWhbWibWjbUhbWkbWlbWmbWnbWobWpbWqbStbWrbymbCrbWsbGZaaaaaabLBbLBbWtbQJbSwbWubWvbWwbWxbWybWxbWxbWzbWAbKjbWBbWCbWDbWDbWEbWFbWGbWDbWDbWHbUHbSMbNEbWIbLHbLHaaaaaabvibUKbxibWJbPvbWKbWLbWMbUPbWNbPvbPvbxHcfqbxHbPCbPCbWPbWQbWRbWSbVabWTbWUbWVbWWbWXbPCbWYbWZbXabXbbVjbXcbTobXdbPFbXebXfbXgbPIbXhbBvbKBbVrbXibXjbXkbXlbXmbXnbVubGsaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaabMCbKMbKMbKMbKMbKMbKMbKMbKMbKMbKMbKMbVybXoccAbXqbXrbXsbXtbXrbXsbXubXvbXwbXxbBEbXybXzbKZbDibXAbXBbQgbXCbTMbTObXDbXEbTObTRbXFbQkbXGbXHbXIbXJbXKbXLbXMbXNbXObGLbXPbUcbQwbXQbXRbXRbXSbQwbStbXTbXUbXVbXWbXXbStbWrbymbCrbDLbGZaaaaaabLBbXYbXZbYabYbbYcbWwbWwbYdbYebYfbWwbYgbWAbWAbYhbWDbWDbYibYjbYkbYlbYmbWDbWDbYnbYobYpbYqbYrbLHaaaaaabvibUKbYscvCbPvbYtbYubYubYvbYwbUSbYxbYybYzbYAbYBbRjbYCbYDbYDbYDbYEbYFbYFbYGbYHbYFbYIbYJbYKbYLbYMbTobTobTobYNbPFbYObYPbYQbPIbRDbREbKBbYRbKBbKBbKBbKBbKBbKBbKBbKBbYSbYSaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaabKLbVibKLbVibKLbVibKLbVibKLbVibKLbViaadbYTbYUbYVbYWbYXbYVbYWbYXbXubYYbYZbZabBEbZbbZcbZbbDibZdbZebQgbZfbZgbZhbZibXEbZhbZjbZkbQkbZlbZmbZnbZobZpbZqbSibOXbEVbEVbSlbZrbZsbQwbQwbQwbQwbZtbStbZubStbZvbStbStbStbuxbymbCrbZwbuxaaaaaabLCbZxbZybZzbZAbZBbZCbZDbZEbZFbZGbWwbZHbZHbZIbZJbWDbZKbZLbZMbZMbZNbZObZPbWDbZQbZRbZSbYqbZTbIDaaaaaabvZbUKbAUbvZbPvbZUbZVbZWbZWbZXbZYbZZcaacabcaccadcaecafcagcagcagcahcaicajcakcalcambYIcancaocapcaqbPFcarcascatbPFcaucavcawbPIbRDbREcaxcaycazcaAcaBcaCcaDcaEcaFcaGcaHcaIcaIcaHcaHcaHcaHcaHaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaabVvbVwbVAbVwbVAbVwbVAbVwbVAbVwbVAbVwbVycaJbTDcaKbYWbYXbYVbYWbYXbXucaLcaMcaMcaMcaMcaMcaMcaMcaNcaObQgcaPcaQcaRcaScaTcaUcaVcaWbQkbQkcaXbQkcaYcaZbQkcbacbbbEVcbccbdbQucbecbfcbgcbhcbicbjbStcbkbStcblbStcbmcbncbobymbCrbymbuxaaaaaabLCcbpcbqcbrcbscbtcbucnNcbwcbxcbycbzcbAcbBcbCcbDbWDcbEcbFcbGcbHcbIbZOcbJcbKcbLcbMcbNcbOcbPbIDaaaaaabvZbUKcbQcbRbPvbPvcbScbTcbUcbVbUScbWcbXcbYcbZccaccbcccccdcceccfccgcaicchcciccjcckbYIbPFcclbPFbPFbPFbPFbPFbPFbPFbPIbPIbPIbPIccmccncaxccoccpccqccrccscctcaCcaFcaFcaHccuccvccwcaHccxccycaHcaHaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafbVvcczcdQcczcdQcczcdQcczcdQcczcdQcczbVyccBbTDccCbYWccDccEbYWccDbXuccFcaMccGccHccIccJccKcaMbXAccLcaWcaWcaWcaWcaWcaWcaWcaWcaWcCibQkbQkbQkbQkbQkbQkccNccObDxccPccNccQccQccQccQccQccQccQccRccRccRccRbStccSccTbuxccUccVccWbuxaaaaaabLCccXccYccZcdacdbbWwbWwbWwbWwbWwbWwcdccddcddcdebWDbWDbWDbWDbWDcdfbZOcdgbWDcdhcbMcdicbOcdjbIDaaaaaabvZcdkbxibxicdlbPvbPvbPvbPvbPvbPvcdmcipcdocipcdmbPCbPCbPCbPCbPCbPCbYIcdpcdqcdqcdrbYIcdscdscdscdtcducdvcdwcdxcdycdzcdAbxHcdBcdCcdDcdEcdFcdGcdHccrccscdIcaCcdJcaFcdKcdLcdMcdNcaIcdOcdMcdPcaHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaabMCcdRbMCcdRbMCcdRbMCcdRbMCcdRbMCcdRaafaafbTDcehcdScdTcdUcdVcdTcdWcdXcdYcdZceacebceccedceebXAcefcegcfEceicejcekcekcekcekcekcekcekcekcekcelcemcenceocepceqceqcerbuxcescescetbDLceubymbAQbAQbvFbvGbuxcevbuxbuxbymbCrcewbuxaaaaaabLBcexccYbQJceycezceAceBceCceDceEceFceGceHceHceIceHceHceHceJceKceLceMceNbWDbNEceObNEcbObNGbLHaaaaaabvZcePceQceQceQceRceSbxiceTceUbvZceVceWceXceWceYceZcfacfbcfccfdcfebYIbYIcffcfgbYIbYIcfhcficficfjcfkcflcfmcfmcfmcdvcfnbxHcfocfpbOncoHcfrcfscftccrccsccscdIcdIcaFcaHcfucfvcfwcfxcfycfzcfAcfBcfCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaabVvbVwbVAbVwbVAbVwbVAbVwbVAbVwbVAbVwbVycaJbTDcaKbYWbYXbYVbYWbYXbXucaLcaMcaMcaMcaMcaMcaMcaMcaNcaObQgcaPcaQcaRcaScaTcaUcaVcaWbQkbQkcaXbQkcaYcaZbQkcbacbbbEVcbccbdbQucbecbfcbgcbhcbicbjbStcbkbStcblbStcbmcbncbobymbCrbymbuxaaaaaabLCcbpcbqcbrcbscbtcbuebPcbwcbxcbycbzcbAcbBcbCcbDbWDcbEcbFcbGcbHcbIbZOcbJcbKcbLcbMcbNcbOcbPbIDaaaaaabvZbUKcbQcbRbPvbPvcbScbTcbUcbVbUScbWcbXcbYcbZccaccbcccccdebRebQccgcaicchcciccjcckbYIbPFcclbPFbPFbPFbPFbPFbPFbPFbPIbPIbPIbPIccmccncaxccoccpccqccrccscctcaCcaFcaFcaHccuccvccwcaHccxccycaHcaHaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafbVvcczcdQcczcdQcczcdQcczcdQcczcdQcczbVyccBbTDccCbYWccDccEbYWccDbXuccFcaMccGccHccIccJccKcaMbXAccLcaWcaWcaWcaWcaWcaWcaWcaWcaWcCibQkbQkbQkbQkbQkbQkccNccObDxccPccNccQccQccQccQccQccQccQccRccRccRccRbStccSccTbuxccUccVccWbuxaaaaaabLCccXccYccZcdacdbbWwbWwbWwbWwbWwbWwcdccddcddcdebWDbWDbWDbWDbWDcdfbZOcdgbWDcdhcbMcdicbOcdjbIDaaaaaabvZcdkbxibxicdlbPvbPvbPvbPvbPvbPvcdmcipcdocipcdmbPCbPCbPCbPCbPCbPCbYIcdpcdqcdqcdrbYIcdscdscdscdtcducdvcdwcdxcdycdAebUebVebSebTcdDcdEcdFcdGcdHccrccscdIcaCcdJcaFcdKcdLcdMcdNcaIcdOcdMcdPcaHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaabMCcdRbMCcdRbMCcdRbMCcdRbMCcdRbMCcdRaafaafbTDcehcdScdTcdUcdVcdTcdWcdXcdYcdZceacebceccedceebXAcefcegcfEceicejcekcekcekcekcekcekcekcekcekcelcemcenceocepceqceqcerbuxcescescetbDLceubymbAQbAQbvFbvGbuxcevbuxbuxbymbCrcewbuxaaaaaabLBcexccYbQJceycezceAceBceCceDceEceFceGceHceHceIceHceHceHceJceKceLceMceNbWDbNEceObNEcbObNGbLHaaaaaabvZcePceQceQceQceRceSbxiceTceUbvZceVceWceXceWceYceZcfacfbcfccfdcfebYIbYIcffcfgbYIbYIcfhcficficfjcfkcflcfmcfmcfmcdvebYbxHebWebXbOncoHcfrcfscftccrccsccscdIcdIcaFcaHcfucfvcfwcfxcfycfzcfAcfBcfCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaaaaabTDcfDbXrcfFciGcfGcfHbXucfIcaMcaMcaMcaMcfJcfKcfLcfMcfNcfOcfOcfPcfQcfRcfRcfRcfRcfRcfRcfRcencencencfScfTcfUcfVcfWcfXcfYcfZcgacgbcgacgacgacgacgacgccgccgccgccgdcgccgccgccgecgfbuxbLCbLCbLBcggccYcghcgicgjcgkcglcglcgmceEcgnbWAbWAbWAbWAbWAbWAbWAcgnbWEcgocgpcgqbWDcgrcgscgtcgucgvbLHcgwcgwbvZbUKbxibAUbCCbCDcgxbxicgybxicgzcgAcgBcgCcgDcgAcgEcfacgFcgGcgHcgIcgJcgKcgLcgMcgNcgNcgOcdtcdtcdtcdtcdtcdtcdtcfmcdvcgPbxHcgQcgRcgScaxcgTcgUcgVccrccscdIcgWcgXcaFcaHcgYcgZchacaHcaIchbcaIcaHcaHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaabTEbTDchcchcbTDchdchechfbXuchgchhchichjchkchlchmchnchochpchqchrchschtcfRchuchuchuchuchuchvchwchxcenchychzchAchBchCchDchEbuxbuxbuxbuxbuxbuxbuxbuxbuxbuxbuxbuxbuxbuxbuxbuxbuxchFchGchHchIbLBchJchKchLchMchNcgkcgkchOchPceEchQbWAchRchRchRchRchRbWAchSbWDchTchUbWDbWDchVchWchVchXchYchZciacibciccidbvgbvZbvZbvZbvZbvZbvZbvZbvZciecifcigcihcieceZceZceZciiceZceZceZceZcijcikcgNcilcimcinciociociociociocdtcdvcdvcaGbxHcoIbxHbxHcaxciqcaxcaxccrcaFcaGcaHcaHcaHcaHcircgZciscitciucivciwcixcaHcaHaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafciybTDcizciAciBciCciDciEciFcmCciHciIciJciKciLciMciNciOciPciQciRcfOciSciTcfRchuchuchuchuchuciUciVciWciXciYciZcjacjbcjccjdcjecjfcjgdVxcjdcjhcjicjbcjjcjkcjlcjmcjbcjncjociWcjpcjqcjrcjscjtcjucjvbUwbUwcjwcjxcjycjzcgkceEceEceEcdcbWAchRchRchRchRchRbWAcgnbWDbWDbWDbWDciacjAcjBcjCcjDcjDcpDcjFcjGcjHcjIcjJcjKcjLcjMcjNcjOcjPcjQcjRcjNcjOcjScjTcjUcjVcjWcjXcjTcjYcjZckacpEcijckcckdckeckfckgciociociociociocdtckhcdvckickjckkcklcaGckmcknckockpcaCckqckrcaHckscktcaHckucpGcpFcpFcpFcopcdMckvckwcaIaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaackxckyckzckAckBckCckDckEckFckGckHckIckJckKckLckMchnbLgckNcfOcfOckOcencfRchuchuchuchuchuckPckQckRckSckTckUckVckWckXckWckYckUckZckUckUclaclbckUckUclccldcledhndhpdhqclhclicljclkcllclmcllcllcllcllcllclncloclpbYhclqclrceHclsbWAchRchRchRchRchRbWAcltbZJcluclvclwclxclyclzclAclAclAclAclAclBclCclDclEclFclGclHclIclHclHclJclKclHclIclLclHclMclHclHclNclHclHclOclPclJclQclRclScpHclUclVciociociociociocdtclWcdvclXclYclZcmacmbcmccmdcmecmfcmgcmhcmicmjcmkcmlcmmcmncmocmpcmqcmrcmscmtcdMcmucmvaafaafaafaadaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafaafaafaafaaabTDcmwciAcmxcmycmzcmAcmBcrAcmDcmEcmFcmGcmHcmIcmJcmKcfOcfOcfOcmLcmMcmNcfRchuchuchuchuchucmOcmPciWciXcmQcmRcmScmTcjccmUcmVcmWcmXchCdhscmYcmZcmTcnacnbcnccndcngdhSdiqcnhcnicnjcnkcnlcnmcnncnobUwbUwcnpcnqcnrcnsbWAcntcnucddcddbWAchRchRchRchRchRbWAcnvcnwcnxcnybWAcnzcnAcnBcnCcnDcnDcnEcnFcnGcnHcnIcnJcjKcjLcjPcnKcjPcjPcnLcnMcCgcnOcnPcnQdVycnRcnScnTcnLcnRcnUcnVcnWcnXckcckdcnYcnZcoaciociociociociocdtcobcoccaGcodcoecofcaGcogcohcogcoicojcokcolcaHcomconcaHcoocopcoqcdMcorcgZcdMcoscotcaIaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaabTEbTDchcchcbTDcoucovcowbXucoxchhcoycozcoAcoBcoCcoDcoEcoFcoGcmLcrQcrOcfRchuchuchuchuchuchvcoJcoKcencencoLchEcoMchCcoNcoOcoPcoPcoPcoPcoPcoPcoQcoQcoRcoScoQdirdwgdwqditcoTcoVcoWchGcoXcnsbLBcoYchKchLcoZchNbLBbWAcgncpacpbcpcbWAchRchRchRchRchRcpdcpdcpecpdcpdcpdcpdcpfchWchVchXcpgchZcphcpiciccpjcpkcpkcpkcplcpmcpncpncpncpncpncpocpncpncpncpncpncpncppcpqcprcnVcpsciecptcgNcpuciecinciociociociociocdtcpvcdvcaGcpwcpxcpycpzcpzcpzcpAcpzcpBcpzcpzcaHcaHcaHcaHcpCcOQcItcJxcPZcSccpIcpJcaHcaHaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafciybTDcizciAciBciCciDciEciFcmCciHciIciJciKciLciMciNciOciPciQciRcfOciSciTcfRchuchuchuchuchuciUciVciWciXciYciZcjacjbcjccjdcjecjfcjgdVxcjdcjhcjicjbcjjcjkcjlcjmcjbcjncjociWcjpcjqcjrcjscjtcjucjvbUwbUwcjwcjxcjycjzcgkceEceEceEcdcbWAchRchRchRchRchRbWAcgnbWDbWDbWDbWDciacjAcjBcjCcjDcjDebZcjFcjGcjHcjIcjJcjKcjLcjMcjNcjOcjPcjQcjRcjNcjOcjScjTcjUcjVcjWcjXcjTcjYcjZckaecacijckcckdckeckfckgciociociociociocdtckhcdvckickjckkcklcaGckmcknckockpcaCckqckrcaHckscktcaHckueccecbecbecbcopcdMckvckwcaIaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaackxckyckzckAckBckCckDckEckFckGckHckIckJckKckLckMchnbLgckNcfOcfOckOcencfRchuchuchuchuchuckPckQckRckSckTckUckVckWckXckWckYckUckZckUckUclaclbckUckUclccldcledhndhpdhqclhclicljclkcllclmcllcllcllcllcllclncloclpbYhclqclrceHclsbWAchRchRchRchRchRbWAcltbZJcluclvclwclxclyclzclAclAclAclAclAclBclCclDclEclFclGclHclIclHclHclJclKclHclIclLclHclMclHclHclNclHclHclOclPclJclQclRclSecdclUclVciociociociociocdtclWcdvclXclYclZcmacmbcmccmdcmecmfcmgcmhcmicmjcmkcmlcmmcmncmocmpcmqcmrcmscmtcdMcmucmvaafaafaafaadaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafaafaafaafaaabTDcmwciAcmxcmycmzcmAcmBcrAcmDcmEcmFcmGcmHcmIcmJcmKcfOcfOcfOcmLcmMcmNcfRchuchuchuchuchucmOcmPciWciXcmQcmRcmScmTcjccmUcmVcmWcmXchCdhscmYcmZcmTcnacnbcnccndcngdhSdiqcnhcnicnjcnkcnlcnmcnncnobUwbUwcnpcnqcnrcnsbWAcntcnucddcddbWAchRchRchRchRchRbWAcnvcnwcnxcnybWAcnzcnAcnBcnCcnDcnDcnEcnFcnGcnHcnIcnJcjKcjLcjPcnKcjPcjPcnLcnMececnOcnPcnQdVycnRcnScnTcnLcnRcnUcnVcnWcnXckcckdcnYcnZcoaciociociociociocdtcobcoccaGcodcoecofcaGcogcohcogcoicojcokcolcaHcomconcaHcoocopcoqcdMcorcgZcdMcoscotcaIaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaabTEbTDchcchcbTDcoucovcowbXucoxchhcoycozcoAcoBcoCcoDcoEcoFcoGcmLcrQcrOcfRchuchuchuchuchuchvcoJcoKcencencoLchEcoMchCcoNcoOcoPcoPcoPcoPcoPcoPcoQcoQcoRcoScoQdirdwgdwqditcoTcoVcoWchGcoXcnsbLBcoYchKchLcoZchNbLBbWAcgncpacpbcpcbWAchRchRchRchRchRcpdcpdcpecpdcpdcpdcpdcpfchWchVchXcpgchZcphcpiciccpjcpkcpkcpkcplcpmcpncpncpncpncpncpocpncpncpncpncpncpncppcpqcprcnVcpsciecptcgNcpuciecinciociociociociocdtcpvcdvcaGcpwcpxcpycpzcpzcpzcpAcpzcpBcpzcpzcaHcaHcaHcaHcpCechecfecgeciecjcpIcpJcaHcaHaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaaaaabTDcpKcpLcpMcpNchecmDbXucpOcpPcpPcpQcpPcpRcpScpPcoEcmLcmLcmLcpUcpTcfRcfRcfRcfRcfRcfRcfRcencencencpVcpWcpXcpYcpZcqacpXcqbcqccqdcqecqfcqgcqhcqicqjcqkcqlcoQdwTdwWdwTdwUcqncqocoVbLCbLCcqpcqqcqrcqscqtcqubWzcqvcqwcqxcqxcqxcqycqycqzcqAcqBcqpcpdcqCcqDcqEcqFcqGcpdcqHcqIcjCcqJcqKchZcgwcgwcpkcqLcqMcqNcqOcqPcqPcqQcqRcqScqTcqUcqVcqWcqXcqYcqZcracracrbcrccrdcrecrfcrgcrhcrhcrhcricdtcdtcdtcdtcdtcdtcdtcfmcdvcrjcpwcrkcrlcrmcrncrocrpcrqcrrcrscrtcrucrvcrvcaHcrwcgZcrxcaHcaIcrycaIcaHcaHaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaabKLbVibKLbVibKLbVibKLbVibKLbVibKLbViaafaafbTDcrzbXrctqcrBcrCcrDcrEcrFcrGcrHcrIcrJcrKcrLcpPcuXcrMcrNcrNcrPcuZcrRcrRcrRcrScrTcrUcrVcpVcpVcrWcpVcencrXcrXcrXcrXcrXcoPcrYcrZcsacsbcsccoQcsdcsecsfcsgcoQdyidypdybdwUcshcqocoVaaaaaacqpcsicqrcsjcskcslbWzcsmcsncqxcsocspcsqcsrcsjcsjcsjcsscstcsucsvcswcsxcsycpdcszcsAcjDcsBcsCchZaaaaaacpkcsDcsEcsFcpkcsGcsHcpncsIcsJcsKcsLcsMcsNcsOcsPcsQcsRcsScpncsTcsUcsVcsVcsWcrhcdvcdvcsXcfmcfmcfmcfmcfmcfmcfmcfmcdvcsYcpwcsZctacrmctbctcctdctectfctgcthcticrvcrvctjctkctlctmcaIctnctoctpcaHaaaaaaaaaaaaaadabcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafbVvbVwbVAbVwbVAbVwbVAbVwbVAbVwbVAbVwbVybVzbTDcttctrctscwRctrctuctvctwcpPctxctyctzctActBcpPcuXctCctDctDctFctEctDctGctGctHctHctIctJctIctKctIctIctLctLctMctNctMctLctLctOctOctOctPctOctOctQctRctScoQcoQdUPdUQdBMdwUctTcqocoVaaaaaactUctVctWctXcskctYbWzctZcuacubcuccudcuecufcugcuhcsjcuicujcukculcumcuncuocpdcupcsAcuqcurcuscgwaaaaaacpkcutcuucuucuucuvcuwcuucuucuxcuxcuxcuycuzcuAcuzcuzcuzcuzcuBcuCcuDcuEcuFcuCcuGcuGcuGcuGcuGcuGcuGcuHcuHcuHcuHcuIcuIcuIcuIcuJcuKcuLctbcuMcrqcrqcrqcrqcrqcrvcrvcrvcaHcuNcorcuOcaIcdOcdMcdPcaHaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaabVvcczcdQcczcdQcczcdQcczcdQcczcdQcczbVycaJbTDcaKcuPcuQcuRcuScuQcuTcuUcpPcpPcpPcpPcpPcpPcpPcuXcuVctDcuWcuYcxbctDcvacvbcvccvcctIcvdctIcvecvfcvgcvhcvicvjcvkcvjcvlcvmcvncvocvpcvqcvrctOcvscvtcvucvvcoQdUSdUTdURdwUcvwcqocoVaaaaaactUcvxcvycvzcvAcvBbWzcDQcvDcqxcvEcvFcvGcvHcvIcvJcsjcvKcvLcvMcvNcumcvOcvPcvQcvRcsAcvScvTcvUcgwaaaaaacpkcsDcuucvVcvWcvXcvYcvZcwacwbcwccwdcuycwecwfcwgcwhcwicwjcwkcwlcwmcwncwocwpcwqcwrcwscwtcwucwvcwwcwxcwycwzcwAcwBcwCcwDcwEcwFcwGcrmcwHcwIcwJcrqcrqcrqcwKcwLcwIcrvcaHcwMcwNcwOcaHccxcwPcaHcaHaafaafaafaadaXGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaabVvcczcdQcczcdQcczcdQcczcdQcczcdQcczbVycaJbTDcaKcuPcuQcuRcuScuQcuTcuUcpPcpPcpPcpPcpPcpPcpPcuXcuVctDcuWcuYcxbctDcvacvbcvccvcctIcvdctIcvecvfcvgcvhcvicvjcvkcvjcvlcvmcvncvocvpcvqcvrctOcvscvtcvucvvcoQdUSdUTdURdwUcvwcqocoVaaaaaactUcvxcvycvzcvAcvBbWzcDQcvDcqxcvEcvFcvGeckcvIcvJcsjcvKcvLcvMcvNcumcvOcvPcvQcvRcsAcvScvTcvUcgwaaaaaacpkcsDcuucvVcvWcvXcvYcvZcwacwbcwccwdcuycwecwfcwgcwhcwicwjcwkcwlcwmcwncwocwpcwqcwrcwscwtcwucwvcwwcwxcwycwzcwAcwBcwCcwDcwEcwFcwGcrmcwHcwIcwJcrqcrqcrqcwKcwLcwIcrvcaHcwMcwNcwOcaHccxcwPcaHcaHaafaafaafaadaXGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaabMCcdRbMCcdRbMCcdRbMCcdRbMCcdRbMCcdRaadbYTcwQcwUcwScwTcxtcwScwTcwVcwWcwXcwYbTDcfRcrMcrNcrNcrNcwZctDcxacxccxdctDcvacxectHctHctIcxfcxgcxhcxicxjcxkcxlcxlcxlcxmcxncxocxpcxqcxrcxscFGcxucxvcxwcxxcvvcoQdwUdwUdwUdwUcoVcqocoVaaaaaactUcxycqrcxzcxAcxBbWzcxCcxDcqxcxEcxFcxGcsrcxHcxIcxJcvKcxKcxLcxMcxNcxOcxPcpdcvRcxQcxRcxScxTcgwaaaaaacpkcsDcuucxUcxVcxWcxXcxYcxZcyacybcyccuzcydcyecyfcygcyhcyicyjcykcylcymcyncyocypcyqcyrcyscyrcytcwwcyucyvcywcwAcyxcyycyzcwEcyAcyBcrmcrmcrmcrmcrmcrmcrmcrmcrmcpzcpzcaHcyCcaIcaHcaHcaHcaHcaHaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaadaaaaaaaaabKLbKMbKMbKMbKMbKMbKMbKMcyDbKMbKMbKMbVybXocyEcyFcyGcyHcyIcyJcyHcyKcyLcyLcyMbTDcfRcyNcmLcyOcyOcyPcyOctDcyRcyQctDctDcyTcyUcyVctIcyWcyXcyYcyZczaczbcxlcxlczcczdczeczfctOczgczhcziczjctOcoQcoQczkcoQcoQcqmcqmcqmcqmcoVcqoczlaaaaaacqpcsicqrczmcznczobWAbWAczpcqxcxEczqczrcsrcsjcvAcsjczscpdcztczuczvczwcpdcpdczxczyczzczAczBchZaaaaaaczCcsDcuuczDczEcxWczFczGcxZczHczIczJcuzczKcyeczLczMczNczOczPczQczRczSczTczUczVczWczXczYczXczZcAacAbcAccAdcwAcAecAfcAgcwEcAhcAicAjcAkcAlcAmcAncAocApcAqcArcAsbYScAtcAuaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaabVvcczcdQcczcdQcczcdQcczcdQcczcdQcczbVyccBbTDbTDcAvcAwcAxbXpcAxcAycyLcyLcAzbTDcfRcyNcmLcyOcAAcABcACctDcAEcyScAFctDcAGcAHcAIctIcAJcAKcALcAMcANcAOcAPcAQcAQcARczecAScATcAUcAVcAWcAXctOcAYcAZcBacBbcBccqmcBdcqmcBecoVcqoczlaaaaaacqpcqpcBfcsjcuhcBgcBhbWAcBicqxcqxcqxcqxcBjcBkcBlcBkcBmcpdcpdcBncBocpdcpdcBpcBqcBrcjDcBschZchZaaaaaaczCcsDcuucuucBtcBucBvcBwcxZcBxcBycBzcuzcBAcBBcBCcBCcBDcBEcBFcBGcBHcBIcwocBJcypcBKcBLcBMcBNcBOcuGcBPcBQcBRcwAcBScBTcBUcwEcBVcBWcBXcBYcBYcAmcBZcCacCbcAmcAmcAsaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaabMCcdRbMCcdRbMCcdRbMCcdRbMCcdRbMCcdRaafaafaafbTEbTDbTDbTDbTDbTDbTDbTDbTDbTDbTDcfRcCccencyOcCdcABcCectDcCfcADcNpcCjcCkcClcCmctIcCncCocCpcCqctIcCrcCscCtcCtcCucCvcCwcxpcCxcCycxrcCzctOcAYcCAcCBcCCcBbcBbcqmcBdcqmcoVcqoczlaaaaaaaaactUcCDcCEcuhcCFcCGcCHcCIcCJdVzcCKcCLcCMcCNcskcCOcCMcCPcnDcCQcCRcCScCTcCUcCVcBrcCWcCXcgwaaaaaaaaaczCcsDcCYcuucCZcDacDbcDccxZcDdcDecDdcuzcDfcyecDgcDhcDicDjcDkcDlcwmcDmcwocDncypcDoczXcDpczXcDqcuGcDrcDscDtcwAcDucDvcDwcwEcDxcDycDzcDAcDBcDCcDDcDEcApcDFcDGcAsaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaacDHcDIcDJcDKcDLcDLcDMcDNcXVcChcTFcPXcyOcDRcDScDTctDctDctDctDcDUcDVcDWcDUctIcDXctIcDYcDZctIcEacEbcEccEccEdcEecEactOcEfcEgcEhcEictOcEjcEjcEjcEkcEjcBbcBbcBbcqmcoVcqocoVaaaaaaaaactUctUcElcCEcuhcuhcEmcEncEocEocEpcEqcErcEscEtcEucErcEvcEwcExcExcEycEzcBrcBrcCWcEAcgwcgwaaaaaaaaacpkcsDcEBcuucuucECcEDcEEcxZcEFcEGcEHcuzcEIcEJcEKcELcEMcENcEOcEPcEQcERcEScETcuGcEUcEVcEWcEXcEYcuGcDOcFacFbcwAcFccFdcFecwEcFfcFgcFhcFicFjcAmcFkcFlcFmcAscAscAsaafaafaafabcaafaaaaaaaagaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaacDHcDIcDJcDKcDLcDLcDMcDNcXVcCheclcPXcyOcDRcDScDTctDctDctDctDcDUcDVcDWcDUctIcDXctIcDYcDZctIcEacEbcEccEccEdcEecEactOcEfcEgcEhcEictOcEjcEjcEjcEkcEjcBbcBbcBbcqmcoVcqocoVaaaaaaaaactUctUcElcCEcuhcuhcEmcEncEocEocEpcEqcErcEscEtcEucErcEvcEwcExcExcEycEzcBrcBrcCWcEAcgwcgwaaaaaaaaacpkcsDcEBcuucuucECcEDcEEcxZcEFcEGcEHcuzcEIcEJcEKcELcEMcENcEOcEPcEQcERcEScETcuGcEUcEVcEWcEXcEYcuGcDOcFacFbcwAcFccFdcFecwEcFfcFgcFhcFicFjcAmcFkcFlcFmcAscAscAsaafaafaafabcaafaaaaaaaagaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaacDHcFncFocFpcFqcDHcDHcDHcMXcEZcDPcFtcyOcyOcyOcyOcGTcFvcFwcFxcDUcFycFzcFAcFBcFCcFDcFEcFFctIcOlcFHcFIcFJcFKcFLcFMctOcxpcFNcxpcFOctOcFPcFQcFRcFScEjcoVcoVcFTcoVcoVcFUcoVaaaaaaaaaaaactUctUcElcCEcsjcFVcFWcFXcFYcsjcFZcGacGbcskcGccGacGdcjDcGecGfcGgcGhcjDcCWcEAcgwcgwaaaaaaaaaaaacpkcsDcGicGjcGkcGlcGmcGncGocGpcGqcGrcuzcGscuzcuzcGtcGucGtcuycuEcGvcuEcGwcuEcuGcwwcGxcGycwwcuGcuGcGzcGAcFrcwAcwEcGCcwEcwEcFfcFgcFhcGDcGEcAmcGFcGGcGHcAsaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaacFpcGIcFpcGJcGKcGLcDHcGMcGBcLFcFscGPcGQcGRcGScGTcFucGUcGVcFxcDUcGWcGXcGYcGZcHacDUcHbcHccHdcHecHfcHgcHgcHhcHicHjcHkcHlcHmcHncHocEjcHpcHqcHrcHscEjcHtcHucBbcHvcHwcHxcoVaaaaaaaaaaaaaaactUctUcHycHzcHycHAcHBcHCcHDcHDcHEcslcskcslcHEcHFcHFcHGcHHcHIcHJcHKcHJcgwcgwaaaaaaaaaaaaaaacpkcHLcHMcGjcHNcHOcHPcHQcHRcHScHTcHUcHVcHWcHXcHYcHZcIacHUcIbcIccIdcIecIfcIgcIhcIicIjcIkcIlcImcIncIocIpcIqcIrcIscXDcIucIvcIwcIxcIycIzcIAcAmcAmcIBcAmcAsaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaagaafaafaafaagaadaadaadaadaadaadaagaaaaaaaaacFpcICcIDcIEcGKcIFcIGcIHcGNcKtcIJcIKcGQcGRcGScGTcGTcILcIMcFxcDUcINcIOcIPcIQcIRcIScITcIUcIVcIWcIXcIVcIVcIYcIZcJacJbcJccITcJdcJecJfcJgcJhcJicJjcJkcHtcHucBbcFUcBbcJlcoVaaaaaaaaaaabaaaaaactUctUcqpcJmcJncJocJpcHDcsicJqcslcskcslcJrczBcHFcJscJtcJucJvchZcgwcgwaaaaaaaabaaaaaaaaacpkcJwdfZcGjcGkcJycJzcJAcJBcJCcJDcJEcJFcJGcJHcJIcJJcJIcJEcJKcJLcJMcJNcJOcJPcJQcJRcJScJTcJUcJVcJWcJXcJYdUUcKacJXcKbcJXcKccJXcKdcKecKfcKgcKhcKicKjcKkcKlaaaaaaaabaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaacFpcGIcFpcGJcGKcGLcDHcGMcGBcLFcFscGPcGQcGRcGScGTcFucGUcGVcFxcDUcGWcGXcGYcGZcHacDUcHbcHccHdcHecHfcHgcHgcHhcHicHjcHkcHlcHmcHncHocEjcHpcHqcHrcHscEjcHtcHucBbcHvcHwcHxcoVaaaaaaaaaaaaaaactUctUcHycHzcHycHAcHBcHCcHDcHDcHEcslcskcslcHEcHFcHFcHGcHHcHIcHJcHKcHJcgwcgwaaaaaaaaaaaaaaacpkcHLcHMcGjcHNcHOcHPcHQcHRcHScHTcHUcHVcHWcHXcHYcHZcIacHUcIbcIccIdcIecIfcIgcIhcIicIjcIkcIlcImcIncIocIpcIqcIrcIsecmcIucIvcIwcIxcIycIzcIAcAmcAmcIBcAmcAsaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaagaafaafaafaagaadaadaadaadaadaadaagaaaaaaaaacFpcICcIDcIEcGKcIFcIGcIHcGNcKtcIJcIKcGQcGRcGScGTcGTcILcIMcFxcDUcINcIOcIPcIQcIRcIScITcIUcIVcIWcIXcIVcIVcIYcIZcJacJbcJccITcJdcJecJfcJgcJhcJicJjcJkcHtcHucBbcFUcBbcJlcoVaaaaaaaaaaabaaaaaactUctUcqpcJmcJncJocJpcHDcsicJqcslcskcslcJrczBcHFcJscJtcJucJvchZcgwcgwaaaaaaaabaaaaaaaaacpkcJwecncGjcGkcJycJzcJAcJBcJCcJDcJEcJFcJGcJHcJIcJJcJIcJEcJKcJLcJMcJNcJOcJPcJQcJRcJScJTcJUcJVcJWcJXcJYdUUcKacJXcKbcJXcKccJXcKdcKecKfcKgcKhcKicKjcKkcKlaaaaaaaabaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaacDHcKmcKncKocGKcKpcDHcKqcKrcGOcKscKtcKucKtcKucKvcKwcKxcIMcIMcDUcKycKzcKzcKAcKBcKCcHgcKDcHgcKEcHgcHgcHgcKDcKFcKGcKGcKGcKGcKGcKGcKHcKIcKJcKKcKLcEjcHtcHucBbcKMcKNcKNcKNcKNcKNaaaaaaaaaaaaaaaaaacqpcqpctUctUctUcqpcqpcqpcKOcKPcKQcqpchZchZcgwcgwcgwchZchZaaaaaaaaaaaaaaaaaacKRcKRcKRcKRcKScKTcKTcIIcKVcKTcKWcKXcKYcKXcKZcLacLbcLccLdcLccLbcLbcLbcLecLfcLgcLbcLhcLicLjcLkcLjcLhcLhcLlcLmcLncLmcLlcAjcLocLpcLqcLrcAjcLscLtcLucLvcLwcLxcLyaaaaaaaaaaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafcLzcLAcDHcLBcLCcLDcDHcKqcLEcLFcLGcLHcLIcLJcLKcLLcGTcLMcIMcIMcDUcLNcLOcKzcLPcLQcDUcLRcLScHgcLTcLUcLUcLUcLScLVcKGcLWcLWcLWcLWcLWcLXcLYcLYcLZcLYcoVcoVcoVcBbcFUcKNcMacMbcMccKNcKNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactUcMdcMecMfcMgcMhctUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacKRcKRcMicMjcKRcMkcKVcMlcMmcMncKTcMocMpcMqcMrcMscKZcMtcMucMvcMwcMxcLbcMycMzcMAcMBcMCcLhcMDcMEcMFcMGcMHcMIcMJcMKcMLcMMcMNcMOcMOcMOcMOcMOcMOcMPcMQcMRcMScMTcMUcMVaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafcLzcLAcDHcLBcLCcLDcDHcKqcLEcLFcLGcLHcLIcLJcLKcLLcGTcLMcIMcIMcDUcLNcLOcKzcLPcLQcDUcLRcLScHgecoecpecpecpcLScLVcKGcLWcLWcLWcLWcLWcLXcLYcLYcLZcLYcoVcoVcoVcBbcFUcKNcMacMbcMccKNcKNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactUcMdcMecMfcMgcMhctUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacKRcKRcMicMjcKRcMkcKVcMlcMmcMncKTcMocMpcMqcMrcMscKZcMtcMucMvcMwcMxcLbcMycMzcMAcMBcMCcLhcMDcMEcMFcMGcMHcMIcMJcMKcMLcMMcMNcMOcMOcMOcMOcMOcMOcMPcMQcMRcMScMTcMUcMVaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaacMWcDHcFpcFpcDHcDHcMXcMYcMYcMXcMZcNacMXcMXcLLcGTcIMcIMcIMcDUcNbcNccNdcNecNfcDUcNgcHgcHgcNhcNicHgcHgcHgcNjcNkcLWcLWcLWcLWcLWcLXcNlcNmcNncLYcNocQkcoVcBbcNqcNrcNscNscNtcNucKNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactUcNvcNwcNxcNycNzctUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacKRcNAcNBcNCcKRcNDcKVcNEcNFcNGcKTcNHcNIcNJcNKcNLcNMcNNcNOcNPcNQcNRcLccNScNTcNUcNVcNWcNXcNYcNZcOacObcOccLhcOdcOecOfcOgcOhcMOcOicOjcOkcPucMOcOmcOncLucOocOpcOqcLyaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaacMXcOrcOscOtcMXcLLcGTcIMcIMcIMcDUcDUcDUcDUcDUcDUcDUcOucOvcHgcHgcOwcOwcOwcHgcOxcOycLWcLWcLWcLWcLWcLXcOzcOAdUVcLYcOCcBbcODcOEcOFcKNcOGcOHcOIcOJcKNcoVcoVcoVcoVczlczlczlcoVcoVcoVcoVcoVcOKcOLcMfcOMcOKcpkcpkcpkcpkcpkczCczCczCcpkcpkcpkcpkcKRcONcOOcOPcKRdjycKVcORcOScOTcKTcOUcOVcOWcOXcOYcKZcOZcPacPbcPccPdcLfcNScNTcPecPfcPgcPhcPicPjcPkcPlcPmcLhcPncPocPpcPqcPrcMOcPscPtcPtcSLcMOcPvcPwcPxcPycPzcPAcKlaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaacMXcPBcPCcPDcMXcLLcGTcGTcPEcIMcFucFucIMcIMcIMcPFcGTcEacPGcEacEacPHcPIcPJcPKcPLcPMcLWcLWcLWcLWcLWcLXcPNcPOcPPcLYcPQcPRcoVcPScPTcKNcKNcKNcKNcKNcKNcPUcPVcPWcQZcPYdkocQacQacQacQacQacQacQbcQccQdcQecQfcQgcQgcQgcQgcQgcQgcQhcQicpkcQjcSpcQlcKRcQmcOOcQncKRcQocKVcKVcQpcKVcKTcQqcQrcQscQtcQucKXcQvcQwcQxcQycPdcLccNScQzcQAcQBcQCcQDcQEcQFcQGcQHcQIcLhcLlcLlcLlcLlcLlcMOcPscQJcQKcSLcMOcQLcQMcKlcKlcKlcKlcKlaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaacMXcOrcOscOtcMXcLLcGTcIMcIMcIMcDUcDUcDUcDUcDUcDUcDUcOucOvcHgcHgcOwcOwcOwcHgcOxcOycLWcLWcLWcLWcLWcLXcOzcOAdUVcLYcOCcBbcODcOEcOFcKNcOGcOHcOIcOJcKNcoVcoVcoVcoVczlczlczlcoVcoVcoVcoVcoVcOKcOLcMfcOMcOKcpkcpkcpkcpkcpkczCczCczCcpkcpkcpkcpkcKRcONcOOcOPcKRecqcKVcORcOScOTcKTcOUcOVcOWcOXcOYcKZcOZcPacPbcPccPdcLfcNScNTcPecPfcPgcPhcPicPjcPkcPlcPmcLhcPncPocPpcPqcPrcMOcPscPtcPtcSLcMOcPvcPwcPxcPycPzcPAcKlaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaacMXcPBcPCcPDcMXcLLcGTcGTcPEcIMcFucFucIMcIMcIMcPFcGTcEacPGcEacEacPHcPIcPJcPKcPLcPMcLWcLWcLWcLWcLWcLXcPNcPOcPPcLYcPQcPRcoVcPScPTcKNcKNcKNcKNcKNcKNcPUcPVcPWcQZcPYecrcQacQacQacQacQacQacQbcQccQdcQecQfcQgcQgcQgcQgcQgcQgcQhcQicpkcQjcSpcQlcKRcQmcOOcQncKRcQocKVcKVcQpcKVcKTcQqcQrcQscQtcQucKXcQvcQwcQxcQycPdcLccNScQzcQAcQBcQCcQDcQEcQFcQGcQHcQIcLhcLlcLlcLlcLlcLlcMOcPscQJcQKcSLcMOcQLcQMcKlcKlcKlcKlcKlaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaafaaaaaaaaaaaacMXcQNcQNcMXcMXcLLcIMcGTcGTcFucFucGTcGTcGTcGTcGTcGTcQOcQOcQOcEacEacEacEacQPcQQcKGcLWcLWcLWcLWcLWcLXcLYcKUcLYcLYcoVcoVcoVcQScQTcQUcHwcQVcQWcQXcHwcQacQYdFLcRacRbcRccPUcAYcPUcPUcRdcRecoVcRfcRgcRhcpkcRicRjcRicRkcRlcRmcRncQocRmcsFcsFcRocKRcKRcRpcKRcKRcQocpkcGjcRqcRrcLacRscRtcRucRvcRwcKZcRxcRycRzcRAcRBcLbcRCcRDcREcRFcRGcRHcRIcRJcRKcRLcRMcRNcROcRPcRQcRRcRScMOcRTcRUcPtcRVcMOcRWcRXcpwaaaaaaaaaaaaaaaaaaaaaabcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcaadaadaaaaaaaaacMXcRYcRZcSacMXcSbcKvdGccSdcSecSfcSgcShcIMcSicIMcSjcSkcSkcSkcSlcSmcSmcEacEacEacKGcKGcKGcKGcKGcKGcKGcQOcSncQOcGTcSocGTdTdcBbcFUcBbcSqcSrcPScSscBbcPUcPUcRdcPUcPUcStcAYcSucSvcSwcSucSucSucSxcSycSzcSAcSAcSAcSAcSAcSAcSAcSBcSCcSDcSDcSDcSEcSFcSGcSHcSDcSDcSIcSJcSKcVacSMcLacLacLacLacLacLacLacSNcLbcLbcLbcSOcLbcSPcSQcSRcSScSPcLhcSTcLhcLhcLhcMIcSUcSVcSWcSXcSYcSZcTacPtcTbcTccTdcTecTfcTgcpwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfGaafaafaafaafaaaaaaaaacMXcMXcSbcKucKucKucThcTicTicTicTjcTicTicTicTkcKucKucKucKucThcKucKucKucKucKucKucKucKucTlcTmcTncTocTpcKucTqcTrcTscTtcTucTucTucTucTucTucTucSucSucSucSucSucSucSucTvcTwcTxcTycSucTzcTAcTBcSAcTCcTDcTEdGycTGcSAcTHcsFcsEcsFcsFcTIcTJcTJcTJcTJcTJcTJcTKcTLcsFcTMcTNcTOcTPcTQcTQcTRcTScTTcTUcTVcTWcTXcSRcTYcTZcUacUbcUccSRcUdcTWcTVcTUcUecSUcUfcUgcUhcUicUjcMOcUkcUlcUmcUncUocUpcUqcpwaaaaaaaaaabcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaafaaaaaaaaaaaacMXcMXcMYcMYcMYcMXcMXcMXcMYcMYcMYcMXcMXcMXcMXcMXcMXcMXcMXcIMcIMcIMdOZcIMcIMcIMcIMcIMcIMcIMcMXcMXcMXcMXcUrcUscUtcTucUucUvcUwcUxcUycTucUzcUAcUBcUCcUDcUEcUFcUGcUGcUHcUIcSucUJcUKcULcUMcUNcUOcUPcUQcURcSAcUScUTcpkcUUcUVcRmcTJcUWcUXcUYcUZcVYcsFcTLcVbcVccVdcVecVfcVgcVhcGjcTScVicUacVjcVkcVlcSRcVmcVncVocVpcVqcSRcVrcVkcVjcUacVscSUcSUcSUcSUcVtcSUcMOcMOcMOcMOcMOcMOcVucVvcVwaafaafaafabcaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcaadaadaaaaaaaaacMXcRYcRZcSacMXcSbcKvecscSdcSecSfcSgcShcIMcSicIMcSjcSkcSkcSkcSlcSmcSmcEacEacEacKGcKGcKGcKGcKGcKGcKGcQOcSncQOcGTcSocGTdTdcBbcFUcBbcSqcSrcPScSscBbcPUcPUcRdcPUcPUcStcAYcSucSvcSwcSucSucSucSxcSycSzcSAcSAcSAcSAcSAcSAcSAcSBcSCcSDcSDcSDcSEcSFcSGcSHcSDcSDcSIcSJcSKcVacSMcLacLacLacLacLacLacLacSNcLbcLbcLbcSOcLbcSPcSQcSRcSScSPcLhcSTcLhcLhcLhcMIcSUcSVcSWcSXcSYcSZcTacPtcTbcTccTdcTecTfcTgcpwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfGaafaafaafaafaaaaaaaaacMXcMXcSbcKucKucKucThcTicTicTicTjcTicTicTicTkcKucKucKucKucThcKucKucKucKucKucKucKucKucTlcTmcTncTocTpcKucTqcTrcTscTtcTucTucTucTucTucTucTucSucSucSucSucSucSucSucTvcTwcTxcTycSucTzcTAcTBcSAcTCcTDcTEectcTGcSAcTHcsFcsEcsFcsFcTIcTJcTJcTJcTJcTJcTJcTKcTLcsFcTMcTNcTOcTPcTQcTQcTRcTScTTcTUcTVcTWcTXcSRcTYcTZcUacUbcUccSRcUdcTWcTVcTUcUecSUcUfcUgcUhcUicUjcMOcUkcUlcUmcUncUocUpcUqcpwaaaaaaaaaabcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaafaaaaaaaaaaaacMXcMXcMYcMYcMYcMXcMXcMXcMYcMYcMYcMXcMXcMXcMXcMXcMXcMXcMXcIMcIMcIMecucIMcIMcIMcIMcIMcIMcIMcMXcMXcMXcMXcUrcUscUtcTucUucUvcUwcUxcUycTucUzcUAcUBcUCcUDcUEcUFcUGcUGcUHcUIcSucUJcUKcULcUMcUNcUOcUPcUQcURcSAcUScUTcpkcUUcUVcRmcTJcUWcUXcUYcUZcVYcsFcTLcVbcVccVdcVecVfcVgcVhcGjcTScVicUacVjcVkcVlcSRcVmcVncVocVpcVqcSRcVrcVkcVjcUacVscSUcSUcSUcSUcVtcSUcMOcMOcMOcMOcMOcMOcVucVvcVwaafaafaafabcaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaacMXcMXcVxcVycVzcVAcVBcVCcVDcVEcVFcMXcMXaaaaaaaaaczlcVGcVHcTucTucTucVIcVJcVKcTucVLcVMcVNcVOcVPcVQcSucVRcVScVTcVUcSucVVcVWcVXcSAcXjcVZcWacWbcWccSAcWdcWecTJcTJcTJcTJcTJcWfcWgcWhcWicWjcqMcWkcWlcWmcWmcWlcWncWocWpcWqcWrcWscWtcWucWvcWwcWxcWycWzcWAcWycWycWxcWAcWBcWCcWycWDcWEcQRcWGcWHcWIcWJcWKcWLcWMcWNcWOcWPcWQcWRcWSaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaagaadaadaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaacMXcMXcMXcMYcMYcMYcMYcMYcMXcMXcMXaaaaaaaaaaaaczlcWTcWUcTucWVcWWcWXcWYcWZcTucXacXbcXccXdcXecXfcSucSucXgcSucSucSucXhcUKcXicSAcSAdbNcXkcXlcXmcSAcXncXocXpcXqcXrcXscTJcXtcXucXvcXwcTJcXxcQocXycXzcXAcXBcXCcXCdVCcGjcTScXEcXFcXGcXHcXIcXJcXKcXLcXMcXNcXKcXOcXPcXQcXRcXScXTcXUcWFcXWcXXcXYcXZcYacYbcYccYdcYecYfcYgcYhcYiaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaagaadaadaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaacMXcMXcMXcMYcMYcMYcMYcMYcMXcMXcMXaaaaaaaaaaaaczlcWTcWUcTucWVcWWcWXcWYcWZcTucXacXbcXccXdcXecXfcSucSucXgcSucSucSucXhcUKcXicSAcSAdbNcXkcXlcXmcSAcXncXocXpcXqcXrcXscTJcXtcXucXvcXwcTJcXxcQocXycXzcXAcXBcXCcXCecvcGjcTScXEcXFcXGcXHcXIcXJcXKcXLcXMcXNcXKcXOcXPcXQcXRcXScXTcXUcWFcXWcXXcXYcXZecwcYbcYccYdcYecYfcYgcYhcYiaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaabaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaacUrcVGcVHcTucTucTucTucYjcTucYkcYlcYlcYmcYlcYlcYncYocYpcYqcYrcYscYtcYucUKcYvcYwcYxcYycYzcYAcYBcYCcYDcYEcYFcYGcYHcYIcTJcTJcTJcYJcTJcTJcpkcYKcYLcYMcYNcYOcTRczCczCcTRcTScTScYPcYQcYRcYScYRcSPcYTcYUcYVcSPcYWcYXcYYcYZcYYcZacZbcZbcZbcZccZdcZccZecZfcZgcZfcZhcZicZjcZicWSaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaagaadaadabcaagaagaadaadaadaadaafaaeaaaaafaagaadaadaadaadaadaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaacUrcUscZkcZlcZmcZncSucZocTwcZpcZqcZqcZrcZqcZqcZscTwcZtcZucZvcZwcYtcZxcZycZzcZAcZBcZCcXocZDcZEcXocZFcZGcZHcZIcZJcZKcZLcZMcZNcZOcZPcTJcZQcZRcZScZTcZTcTRaaaaaaaafaaaaaaaaacYPcZUcZVcZWcZXcZYcZYcZZcZYcZYdaadabdacdaddaedafdagdahcZbdaidajdakcZedaldamdancZhcWScYicWScVwaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaacUrcUrdaodapdaqdaqdaqdardasdatdatdaudatdavdatdawdaxdaydazdaAdazdaBdaCdaDdaEdaFdaGdaHdaIdaJdaKdaJdaJdaLdaMdaNdaOdaPdaQdaRdaQdaQdaSdaTcTJdaUcZRdaVdaWdaXdaYaaaaaaaafaaaaaaaaacYPdaZdbadbbdbcdbddbedbfdbgdbhdbidbjdbkdblcYYdbmdbndbocZbdbpdbqdbrcZedbsdbtdbucZhaaaaaaaaaaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -11014,17 +11372,17 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaczlddXdekddZddZddZddZddZddZddZddZddZddZddYdeldemddrdendeodepdeqdercSudescVWdetcYwdeudevdewdexdeydezdeAdeBdeCdeDdeEdeFdeGdeHdeIcZKdeJcTJdeKdeLcZSaaaaaaaaaaagaadaaaaaaaaaaaaaagaaaaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcaaaaaaaaaczlddXdeMddZddZddZddZddZddZddZddZddZddZddYdeNdeOddrcSucSudePcSucSucSudeQcUKdeRdeSdeTdeTdeUdeUdeUdeVdeWdeXdeTdeYdeZdeTdeUdeUdeUdeUdeTdeTdfadcZcZSaafaafaafaadaaaaabaaaaaaaaaaadaaaaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaafaafaadaadaadaafaaeaagaadaadaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaafaafcUrddXddYddZddZddZddZddZddZddZddZddZddZdfbdfcdfddfeddrdffdfgdfgdfhdfidfjcUKdfkdfkdeUdfldfmdfndfodfpdfqdUXdfsdftdfudfvdfwdfxdfydfzdfAdhXdaUdcZcZSaaaaaaaaaaadaaaaaaaaaaaaaaaaadaadaaaaaaaaaaafaaaaaaaaaaafaaaaadaadaafaadaadaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaczlddXddYddZddZddZddZddZddZddZddZddZddZdfCdfDdfEdfFdfGdfHdfIdfJdfKdfLdfMcZydfNcULdfOdfPdfQdfRdfSdfQdfTdfUdfUdfUdfVdfWdfUdfUdfXdfUdfYdeTdVDdcZdaVaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaadaagaaaaadaadaadaagaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaczlddXddYddZddZddZddZddZddZddZddZddZddZdfCdfDdfEdfFdfGdfHdfIdfJdfKdfLdfMcZydfNcULdfOdfPdfQdfRdfSdfQdfTdfUdfUdfUdfVdfWdfUdfUdfXdfUdfYdeTecxdcZdaVaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaadaagaaaaadaadaadaagaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaczlddXdgaddZddZddZddZddZddZddZddZddZddZddYdgbdgcdgddgedgfdggdghcULcSzdgidgjdgkdgldgmdgndgodUYdgqdgqdgrdgqdgsdgqdgtdgudgvdgwdgxdgvdgydgzdgAdgBdaVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafcUrddXddYddZddZddZddZddZddZddZddZddZddZdfbdfcdgCdgDddrdgEdgFdgGdgHdfidgIcTAdgJdfkdeUdgKdgLdgMdgNdgOdgPdgQdgRdgSdgTdgNdgOdgUdgVdgVdgWdeTdgXdcZdaVaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaczlddXdeMddZddZddZddZddZddZddZddZddZddZddYdgYdgZddrdhadhbdhadhadhadfidhcdhddhedeTdeTdhfdeTdeTdeTdeTdhgdeTdeTdeTdeTdeTdeTdeTdeTdeTdeTdeTdhhdhicZSaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhjdhjdhjdhjdhjdhjdhjdhjdhjdhjdhjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaczldVEdekddZddZddZddZddZddZddZddZddZddZddYdeldhldhmdVadhodUZdVcdhrdVbcTBcTAdhtdhudhvdhwdhxdhydhzdhxdhAdhvdhBdhCdhDdhEdhFdhGdhBdhHdhIdhJdhKdhLcZSaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhjdhjdhjdhjdhjdhjdhjdhjdhjdhjdhjdhjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaczlecydekddZddZddZddZddZddZddZddZddZddZddYdeldhldhmdVadhodUZdVcdhrdVbcTBcTAdhtdhudhvdhwdhxdhydhzdhxdhAdhvdhBdhCdhDdhEdhFdhGdhBdhHdhIdhJdhKdhLcZSaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhjdhjdhjdhjdhjdhjdhjdhjdhjdhjdhjdhjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaczldhkddYddZddZddZddZddZddZddZddZddZddZddYdhMdhNdhmdhOdhPdhQdhRdVddhTdhUdhVdhWdhudhxdhYdibdhZdiadicdizdhxdhBdiddiedifdigdihdhBdiidijdikdildimcZSaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhjdhjdhjdhjdhjdhjdhjdhjdhjdhjdhjdhjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaadaafaafaafcUrdhkddrddrdindiodipddrddrddrddrddrddrddrddrddrddrdVfdVedisdVgdhrdiudivcVWdiwdixdiydiBdiAdhydhydjRdiCdhxdiDdiEdiFdiGdiHdiIdhBdiJdiKdikdiLdimcZSaaaaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhjdhjdhjdhjdhjdhjdhjdhjdhjdhjdhjdhjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaacUrdhkcvwdiMdiNdiMdiOdiMdiPdiQdiRdiQdiSdiTdiUdiVdiMdiWdhadhadhadhadiXdfkcUKdiYdixdiZdjadiZdhydjbdiZdjcdjddjedjfdjfdjgdjfdjhdhBdjidjjdjkdjldjmcZSaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhjdhjdhjdhjdhjdhjdhjdhjdhjdhjdhjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaacUrdhkctTdiMdjndjodjpdjqdiPdjrdiRdjsdiSdjtdjsdjsdjudjsdjsdiQdjsdjvdbKdfkcUKdjwdhudhxdhYdibdhydhydicdizdjxdhBdiDdiDdVFdiDdiDdhBdixdixdixdhhdjzdjAdjAdjAaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaacUrdhkctTdiMdjndjodjpdjqdiPdjrdiRdjsdiSdjtdjsdjsdjudjsdjsdiQdjsdjvdbKdfkcUKdjwdhudhxdhYdibdhydhydicdizdjxdhBdiDdiDeczdiDdiDdhBdixdixdixdhhdjzdjAdjAdjAaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUrdjBdjCdiMdjDdjEdjFdjsdjGdjHdjIdjJdjIdjKdjLdjMdjNdjLdjOdjLdjLdjPdhTdhUdhVdjQdhudiZdjUdjSdjTdjTdnhdjVdjWdjXdjYdjYdjZdkadkbdkcdkddkbdkbdkedkfdkgdkhdkiaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUrdkjdkkdkldkmdkndVGdkpdkqdkrdksdktdkudkvdjsdjsdjsdkwdiMdkxdiMdiMdiMdkycZydkzdixdkAdkBdkCdkDdkEdkFdkGdkHdkIdkJdkHdkKdkLdkMdkNdkOdkNdkNdkPdkQdkRdkSdkiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUrdkjdkkdkldkmdknecAdkpdkqdkrdksdktdkudkvdjsdjsdjsdkwdiMdkxdiMdiMdiMdkycZydkzdixdkAdkBdkCdkDdkEdkFdkGdkHdkIdkJdkHdkKdkLdkMdkNdkOdkNdkNdkPdkQdkRdkSdkiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUrdkTdkUdiMdkVdkWdkXdjsdkYdjsdjsdkZdjsdkvdladlbdlcdlddkxdledlfdlgdiMdlhcUKdlidixdhudhudixdljdlkdixdlldhudixdixdlmdixdlndixdlodlpdlqdhxdlrdlsdixdjAdjAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUrcAYdltdiMdludjsdlvdjsdkYdlwdlxdlydlzdlAdlBdlCdlDdlDdlEdlFdlGdlHdiMdfkdlIdlJdlKdlLdlMdlNdlOdlPdlQdlRddzdlSdixdlTdlUdlVdixdlWdlWdlXdlYdlZdmadmbdmcdmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUrcUrcUrcUrcUrcUrcUrdmediMdiMdmfdmgdmhdkYdmidlxdmjdlzdmkdmldmjdmmdmndkxdmodmpdmqdiMdmrdmsdmtdmudmvdmwdmxdmydmzdmAdmBdmCdmDdixdixdixdixdixdixdixdixdixdmEdmFdmFdmFdmGdmGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -11033,7 +11391,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmIdnPdnQdnRdnRdnSdmIdnTdnUdnVdnWdnXdnYdnZdoadobdocdoddoedofdogdohdoidojdokdoldomdomdomdondoodopdmUdmUdmUdoqdordosdotdoudovdowdmUdoxdoydozdoAdoBdoCdoDdmXdnbdnMdmFdoEdoFdnfaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmHdngdoGdoHdoHdoIdoJdoKdoLdoMdoNdoOdoPdoQdoRdoPdoPdoOdoSdoTdoUdoVdoWdoXdoYdoZdpadpbdoYdfkdpcdpddmUdpedpfdpgdphdpidpjdmUdpkdnKdmUdpldpmdpndpodppdpqdprdmXdnbdpsdmFdmFdmGdmGaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmHdngdptdoHdoHdoIdoJdoKdoLdpudpvdoOdpwdpxdpydpzdpAdoOdpBdpBdpCdpBdpDdpEdpFdpGdpFdpHdpIdpJdpcdpKdmUdmUdmUdmUdpLdmUdmUdmUdmUdmUdmUdpMdpmdpndpNdpOdpmdpPdmXdpQdnMdVtdpRdmGaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmIdpSdpTdpUdpUdnSdmIdmKdpVdpudpWdoPdpXdpYdpZdpXdpXdqadqbdqcdqddqcdqedpEdqfdqgdqhdpFdqidfkdpcdqjdqkdqldqmdqndqodqpdqqdqrdqsdqtdqudqvdqvdqvdqwdqxdqxdqydqzdqAdqBdVHdqCdnfaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmIdpSdpTdpUdpUdnSdmIdmKdpVdpudpWdoPdpXdpYdpZdpXdpXdqadqbdqcdqddqcdqedpEdqfdqgdqhdpFdqidfkdpcdqjdqkdqldqmdqndqodqpdqqdqrdqsdqtdqudqvdqvdqvdqwdqxdqxdqydqzdqAdqBecBdqCdnfaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmHdngdqDdqDdqDdnidnidmKdqEdpudqFdoPdqGdqHdqIdqJdqKdoOdqLdqMdqNdqcdqOdpEdqPdqQdqRdpFdqidfkdqSdqjdqkdqldqTdqUdqUdqVdqWdqUdqXdqUdqYdqZdradrbdqYdqUdrcdqUdmXdrddrednMdrfdnfaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmHdmHdmHdmIdmHdmHdxodmKdrhdridrjdoOdrkdrldrmdrndrodoOdrpdrqdrrdqcdrsdpEdrtdrudrvdrwdrxdfkdrydrzdrAdrBdrCdrDdrEdqUdqWdrFdrGdrGdrHdrGdrIdrIdrJdrIdrIdmXdmXdrKdrLdnMdrMdnfaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmKdmKdmKdmKdmKdmKdmKdrNdrOdpWdoPdrPdrQdrRdrSdrTdoOdrUdqcdrVdrWdrXdpEdrYdrZdsadpFdqidfkcUKdsbdscdsddqTdsedsfdqUdqWdsgdrGdshdsidsjdrIdskdsldsmdrIdsndmXdsodspdmGdmGdmGaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -11229,7 +11587,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadEndEndEndE
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadEndEndEndEndEndEndEndEndEndEndEnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaafdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdCcdFmdFndFoaaaaaaaaadAVdAVdAVdAVdAVdCLdAVdAVdFpdFpdFqdFpdFpdErdFrdErdFsdFsdFtdFsdFsdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaadFudFvdFwdCfdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaadaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadEndEndEndEndEndEndEndEndEndEndEnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdCcdFxdFydFoaaaaaadAVdAVdAVdAVdAVdAVdCLdAVdFpdFpdFzdFAdFBdFpdFCdFDdFEdFsdFFdFGdFHdFsdFsdAVdAVdAVdAVdAVdAVdAVdAVaaaaaadFudFIdFJdCfdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadEndEndEndEndEndEndEndEndEndEndEnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdCcdFKdVudFoaaaaaadAVdAVdAVdAVdAVdAVdCLdAVdFpdFMdFNdFOdFPdFQdFRdFSdFTdFUdFVdFWdFXdFYdFsdAVdAVdAVdAVdAVdAVdAVdAVaaaaaadFudFZdGadCfdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadEndEndEndEndEndEndEndEndEndEndEnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdCcdGbdVIdCcaaaaaadGddGedGfdGedGgdGgdGhdGgdGgdGidGjdGkdGldFpdGmdGndGmdFsdGodGpdGqdGrdGsdGtdGudGtdGsdGvdGwdGvdGxaaaaaadCfdVJdGzdCfdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadBrdBrdBrdBrdBrdBrdBrdBrdBraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadEndEndEndEndEndEndEndEndEndEndEnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdCcdGbecCdCcaaaaaadGddGedGfdGedGgdGgdGhdGgdGgdGidGjdGkdGldFpdGmdGndGmdFsdGodGpdGqdGrdGsdGtdGudGtdGsdGvdGwdGvdGxaaaaaadCfecDdGzdCfdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadBrdBrdBrdBrdBrdBrdBrdBrdBraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadEndEndEndEndEndEndEndEndEnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdCcdGAdCldCcaaaaaadGddGBdGCdGDdGEdGFdGGdGHdGgdFpdFpdFpdGIdGJdGKdGLdGMdGNdGOdFsdFsdFsdGsdGPdGQdGRdGSdGTdGUdGVdGxaaaaaadCfdCUdGWdCfdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadBrdBrdBrdBrdBrdBrdBraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadEndEndEndEndEndEndEnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdCcdGXdGYdCcaaaaaadGddGZdHadHbdGEdHcdHddHedGgdHfdHgdHgdHhdHgdHgdHidHgdHgdHjdHgdHgdHkdGsdHldHmdHndGSdHodHpdHqdGxaaaaaadCfdHrdHsdCfdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadEndEndEndEndEnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdCcdCcdHtdEqdCcaaaaaadGddHudHvdHwdGEdHxdHydHzdGgdHAdHBdHCdHDdHEdHFdHGdHEdHEdHHdHIdHBdHAdGsdHJdHKdHLdGSdHMdHNdHOdGxaaaaaadCfdEvdHPdCfdCfdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -11245,7 +11603,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdMxdNrdNsdMxaaaaaadNtdNudNvdNwdNxdNydNzdNAdNtdNBdNCdNDdNEdNFdNGdNHdNGdNEdNEdNDdNIdNJdNKdNLdNMdNNdNOdNKdNPdNQdNKaaaaaadMYdNRdNSdMYdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaafaafaafaadaXGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdMxdNbdNTdMxaaaaaadNtdNUdNVdNWdNXdNYdNZdOadNtdObdOcdIedOddOedHBdHAdHBdOfdOgdIedOhdOidNKdOjdOkdOldOmdOndOodOpdNKaaaaaadMYdOqdOrdMYdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdMxdNbdOsdOtaaaaaadOudNydOvdOwdOxdOydOzdOAdOBdOCdODdOEdOddOFdOGdOHdOIdHBdOJdOKdOLdOMdONdOOdOPdOQdORdNKdOSdOTdNKaaaaaadOUdOVdOWdMYdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdMxdOXdOYdOtaaaaaadVKdPadPbdPcdPddPcdPedPfdNtdPgdPhdIedPidPjdPkdPldPmdPndPodIedPpdPqdNKdNKdNKdPrdNKdNKdNKdNKdNKaaaaaadOUdPsdPtdMYdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdMxdOXdOYdOtaaaaaaecEdPadPbdPcdPddPcdPedPfdNtdPgdPhdIedPidPjdPkdPldPmdPndPodIedPpdPqdNKdNKdNKdPrdNKdNKdNKdNKdNKaaaaaadOUdPsdPtdMYdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaafaafdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdMxdPudPvdOtaaaaaadPwdPxdNydNydPydNydNydPzdNtdObdOcdPAdPAdPAdPBdPCdPDdPAdPAdPAdOhdOidNKdPEdPFdPGdPHdPIdPJdPKdNKaaaaaadOUdPLdPMdMYdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaafaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdPNdPOdPPdAVdPNdPOdPPdAVdPNdPOdPPdAVdPNdPOdPPdAVdPNdPOdPPdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdMxdPudPQdMxaaaaaadPRdPSdPTdNydPUdPVdPWdPXdPYdPZdQadQbdQcdQddQedQfdQgdQhdQidQjdQkdQldQmdQndQodQpdQqdQrdQsdQtdNKaaaaaadMYdQudPMdMYdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdQvdQwdQxdAVdQvdQwdQxdAVdQvdQwdQxdAVdQvdQwdQxdAVdQvdQwdQxdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaafaafaafabcaafaaaaaaaagaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaafaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdPNdQydPPdAVdPNdQydPPdAVdPNdQydPPdAVdPNdQydPPdAVdPNdQydPPdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdMxdPudQzdMxdMxdNtdNtdNtdQAdQBdQCdQBdQAdNtdNtdQDdQEdQFdQGdQHdQGdQIdQGdQHdQGdQGdQJdQKdNKdNKdQLdQMdQNdQOdQPdQQdNKdNKdMYdMYdQRdPMdMYdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdQvdQSdQxdAVdQvdQSdQxdAVdQvdQSdQxdAVdQvdQSdQxdAVdQvdQSdQxdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -11365,4 +11723,3 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
dUOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
"}
-
diff --git a/maps/southern_cross/southern_cross-3.dmm b/maps/southern_cross/southern_cross-3.dmm
index 38b01c00cc..98f2bd55f7 100644
--- a/maps/southern_cross/southern_cross-3.dmm
+++ b/maps/southern_cross/southern_cross-3.dmm
@@ -98,8 +98,8 @@
"bT" = (/obj/structure/ore_box,/obj/effect/floor_decal/corner/brown{dir = 10},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/storage)
"bU" = (/obj/structure/reagent_dispensers/watertank,/obj/effect/floor_decal/corner/brown{dir = 10},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/storage)
"bV" = (/obj/structure/reagent_dispensers/fueltank,/obj/effect/floor_decal/corner/brown{dir = 10},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/storage)
-"bW" = (/obj/structure/table/rack,/obj/item/weapon/pickaxe/hammer,/obj/item/weapon/tool/wrench,/obj/item/weapon/tool/crowbar,/obj/item/weapon/shovel,/obj/effect/floor_decal/corner/brown{dir = 10},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/storage)
-"bX" = (/obj/structure/table/rack,/obj/item/weapon/pickaxe/hammer,/obj/item/weapon/tool/wrench,/obj/item/weapon/tool/crowbar,/obj/item/weapon/shovel,/obj/effect/floor_decal/corner/brown{dir = 10},/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/storage)
+"bW" = (/obj/structure/table/rack,/obj/item/weapon/pickaxe,/obj/item/weapon/tool/wrench,/obj/item/weapon/tool/crowbar,/obj/item/weapon/shovel,/obj/effect/floor_decal/corner/brown{dir = 10},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/storage)
+"bX" = (/obj/structure/table/rack,/obj/item/weapon/pickaxe,/obj/item/weapon/tool/wrench,/obj/item/weapon/tool/crowbar,/obj/item/weapon/shovel,/obj/effect/floor_decal/corner/brown{dir = 10},/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main/storage)
"bY" = (/obj/effect/floor_decal/corner/brown{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
"bZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
"ca" = (/obj/effect/floor_decal/industrial/warning/corner,/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
diff --git a/maps/southern_cross/southern_cross_areas.dm b/maps/southern_cross/southern_cross_areas.dm
index 92766ce1ab..9333279dce 100644
--- a/maps/southern_cross/southern_cross_areas.dm
+++ b/maps/southern_cross/southern_cross_areas.dm
@@ -898,6 +898,14 @@
name = "\improper Research - Toxins Launch Room"
icon_state = "toxtest"
+/area/rnd/research/firstdeck/hallway
+ name = "\improper Research - First Deck Hallway"
+ icon_state = "research"
+
+/area/rnd/xenobiology/xenoflora_isolation
+ name = "\improper Xenoflora Isolation"
+ icon_state = "xeno_f_store"
+
/area/quartermaster/lockerroom
name = "\improper Cargo Locker Room"
icon_state = "quart"
diff --git a/nano/templates/chem_master.tmpl b/nano/templates/chem_master.tmpl
index 1b8315154a..8799bb05e0 100644
--- a/nano/templates/chem_master.tmpl
+++ b/nano/templates/chem_master.tmpl
@@ -72,6 +72,11 @@
{{:helper.link('', 'pill pill' + data.pillSprite, {'tab_select' : 'pill'}, null, 'link32')}}
{{:helper.link('', 'pill bottle' + data.bottleSprite, {'tab_select' : 'bottle'}, null, 'link32')}}
+ {{else}}
+
+
+ {{:helper.link('Create bottle (50 units max)', null, {'createbottle' : 1})}}
+
{{/if}}
{{/if}}
diff --git a/polaris.dme b/polaris.dme
index d15b34e9b0..3faa983527 100644
--- a/polaris.dme
+++ b/polaris.dme
@@ -55,6 +55,7 @@
#include "code\__defines\supply.dm"
#include "code\__defines\targeting.dm"
#include "code\__defines\turfs.dm"
+#include "code\__defines\typeids.dm"
#include "code\__defines\unit_tests.dm"
#include "code\__defines\xenoarcheaology.dm"
#include "code\__defines\ZAS.dm"
@@ -754,17 +755,6 @@
#include "code\game\machinery\embedded_controller\embedded_controller_base.dm"
#include "code\game\machinery\embedded_controller\embedded_program_base.dm"
#include "code\game\machinery\embedded_controller\simple_docking_controller.dm"
-#include "code\game\machinery\kitchen\gibber.dm"
-#include "code\game\machinery\kitchen\icecream.dm"
-#include "code\game\machinery\kitchen\microwave.dm"
-#include "code\game\machinery\kitchen\smartfridge.dm"
-#include "code\game\machinery\kitchen\cooking_machines\_cooker.dm"
-#include "code\game\machinery\kitchen\cooking_machines\_cooker_output.dm"
-#include "code\game\machinery\kitchen\cooking_machines\candy.dm"
-#include "code\game\machinery\kitchen\cooking_machines\cereal.dm"
-#include "code\game\machinery\kitchen\cooking_machines\fryer.dm"
-#include "code\game\machinery\kitchen\cooking_machines\grill.dm"
-#include "code\game\machinery\kitchen\cooking_machines\oven.dm"
#include "code\game\machinery\pipe\construction.dm"
#include "code\game\machinery\pipe\pipe_dispenser.dm"
#include "code\game\machinery\pipe\pipe_recipes.dm"
@@ -845,6 +835,8 @@
#include "code\game\objects\effects\decals\posters\polarisposters.dm"
#include "code\game\objects\effects\spawners\bombspawner.dm"
#include "code\game\objects\effects\spawners\gibspawner.dm"
+#include "code\game\objects\effects\temporary_visuals\miscellaneous.dm"
+#include "code\game\objects\effects\temporary_visuals\temproary_visual.dm"
#include "code\game\objects\items\antag_spawners.dm"
#include "code\game\objects\items\apc_frame.dm"
#include "code\game\objects\items\blueprints.dm"
@@ -1576,8 +1568,40 @@
#include "code\modules\flufftext\Hallucination.dm"
#include "code\modules\flufftext\look_up.dm"
#include "code\modules\flufftext\TextFilters.dm"
+#include "code\modules\food\food.dm"
#include "code\modules\food\recipe_dump.dm"
#include "code\modules\food\recipes_microwave.dm"
+#include "code\modules\food\drinkingglass\drinkingglass.dm"
+#include "code\modules\food\drinkingglass\extras.dm"
+#include "code\modules\food\drinkingglass\glass_boxes.dm"
+#include "code\modules\food\drinkingglass\glass_types.dm"
+#include "code\modules\food\drinkingglass\metaglass.dm"
+#include "code\modules\food\drinkingglass\shaker.dm"
+#include "code\modules\food\food\cans.dm"
+#include "code\modules\food\food\condiment.dm"
+#include "code\modules\food\food\drinks.dm"
+#include "code\modules\food\food\lunch.dm"
+#include "code\modules\food\food\sandwich.dm"
+#include "code\modules\food\food\snacks.dm"
+#include "code\modules\food\food\drinks\bottle.dm"
+#include "code\modules\food\food\drinks\cup.dm"
+#include "code\modules\food\food\drinks\drinkingglass.dm"
+#include "code\modules\food\food\drinks\jar.dm"
+#include "code\modules\food\food\drinks\bottle\robot.dm"
+#include "code\modules\food\food\snacks\meat.dm"
+#include "code\modules\food\glass\bottle.dm"
+#include "code\modules\food\glass\bottle\robot.dm"
+#include "code\modules\food\kitchen\gibber.dm"
+#include "code\modules\food\kitchen\icecream.dm"
+#include "code\modules\food\kitchen\microwave.dm"
+#include "code\modules\food\kitchen\smartfridge.dm"
+#include "code\modules\food\kitchen\cooking_machines\_cooker.dm"
+#include "code\modules\food\kitchen\cooking_machines\_cooker_output.dm"
+#include "code\modules\food\kitchen\cooking_machines\candy.dm"
+#include "code\modules\food\kitchen\cooking_machines\cereal.dm"
+#include "code\modules\food\kitchen\cooking_machines\fryer.dm"
+#include "code\modules\food\kitchen\cooking_machines\grill.dm"
+#include "code\modules\food\kitchen\cooking_machines\oven.dm"
#include "code\modules\gamemaster\controller.dm"
#include "code\modules\gamemaster\defines.dm"
#include "code\modules\gamemaster\game_master.dm"
@@ -1725,6 +1749,9 @@
#include "code\modules\mining\satchel_ore_boxdm.dm"
#include "code\modules\mining\drilling\drill.dm"
#include "code\modules\mining\drilling\scanner.dm"
+#include "code\modules\mining\ore_redemption_machine\construction.dm"
+#include "code\modules\mining\ore_redemption_machine\equipment_vendor.dm"
+#include "code\modules\mining\ore_redemption_machine\mine_point_items.dm"
#include "code\modules\mob\animations.dm"
#include "code\modules\mob\death.dm"
#include "code\modules\mob\emote.dm"
@@ -2310,31 +2337,11 @@
#include "code\modules\reagents\reagent_containers\blood_pack.dm"
#include "code\modules\reagents\reagent_containers\borghydro.dm"
#include "code\modules\reagents\reagent_containers\dropper.dm"
-#include "code\modules\reagents\reagent_containers\food.dm"
#include "code\modules\reagents\reagent_containers\glass.dm"
#include "code\modules\reagents\reagent_containers\hypospray.dm"
#include "code\modules\reagents\reagent_containers\pill.dm"
#include "code\modules\reagents\reagent_containers\spray.dm"
#include "code\modules\reagents\reagent_containers\syringes.dm"
-#include "code\modules\reagents\reagent_containers\drinkingglass\drinkingglass.dm"
-#include "code\modules\reagents\reagent_containers\drinkingglass\extras.dm"
-#include "code\modules\reagents\reagent_containers\drinkingglass\glass_boxes.dm"
-#include "code\modules\reagents\reagent_containers\drinkingglass\glass_types.dm"
-#include "code\modules\reagents\reagent_containers\drinkingglass\metaglass.dm"
-#include "code\modules\reagents\reagent_containers\drinkingglass\shaker.dm"
-#include "code\modules\reagents\reagent_containers\food\cans.dm"
-#include "code\modules\reagents\reagent_containers\food\condiment.dm"
-#include "code\modules\reagents\reagent_containers\food\drinks.dm"
-#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\drinks\bottle.dm"
-#include "code\modules\reagents\reagent_containers\food\drinks\cup.dm"
-#include "code\modules\reagents\reagent_containers\food\drinks\jar.dm"
-#include "code\modules\reagents\reagent_containers\food\drinks\bottle\robot.dm"
-#include "code\modules\reagents\reagent_containers\food\snacks\meat.dm"
-#include "code\modules\reagents\reagent_containers\glass\bottle.dm"
-#include "code\modules\reagents\reagent_containers\glass\bottle\robot.dm"
#include "code\modules\recycling\conveyor2.dm"
#include "code\modules\recycling\disposal-construction.dm"
#include "code\modules\recycling\disposal.dm"
diff --git a/sound/weapons/resonator_blast.ogg b/sound/weapons/resonator_blast.ogg
new file mode 100644
index 0000000000..7110a716b1
Binary files /dev/null and b/sound/weapons/resonator_blast.ogg differ
diff --git a/sound/weapons/resonator_fire.ogg b/sound/weapons/resonator_fire.ogg
new file mode 100644
index 0000000000..20665e5dd0
Binary files /dev/null and b/sound/weapons/resonator_fire.ogg differ