diff --git a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm index 43cab4f6ec7..632803cd3bd 100644 --- a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm @@ -27,6 +27,8 @@ active_power_usage = 7500 //This also doubles as a measure of how powerful the pump is, in Watts. 7500 W ~ 10 HP var/last_power_draw = 0 + connect_types = list(1,2,3) //connects to regular, supply and scrubbers pipes + var/on = 0 var/pump_direction = 1 //0 = siphoning, 1 = releasing @@ -62,7 +64,7 @@ return overlays.Cut() - + var/vent_icon = "vent" var/turf/T = get_turf(src) @@ -71,7 +73,7 @@ if(T.intact && node1 && node2 && node1.level == 1 && node2.level == 1 && istype(node1, /obj/machinery/atmospherics/pipe) && istype(node2, /obj/machinery/atmospherics/pipe)) vent_icon += "h" - + if(!powered()) vent_icon += "off" else @@ -88,8 +90,14 @@ if(T.intact && node1 && node2 && node1.level == 1 && node2.level == 1 && istype(node1, /obj/machinery/atmospherics/pipe) && istype(node2, /obj/machinery/atmospherics/pipe)) return else - add_underlay(T, node1, turn(dir, -180)) - add_underlay(T, node2, dir) + if (node1) + add_underlay(T, node1, turn(dir, -180), node1.icon_connect_type) + else + add_underlay(T, node1, turn(dir, -180)) + if (node2) + add_underlay(T, node2, dir, node2.icon_connect_type) + else + add_underlay(T, node2, dir) /obj/machinery/atmospherics/binary/dp_vent_pump/hide(var/i) update_icon() @@ -97,7 +105,7 @@ /obj/machinery/atmospherics/binary/dp_vent_pump/process() ..() - + if(stat & (NOPOWER|BROKEN) || !on) update_use_power(0) //usually we get here because a player turned a pump off - definitely want to update. last_power_draw = 0 @@ -107,19 +115,19 @@ var/datum/gas_mixture/environment = loc.return_air() var/power_draw = -1 - + //Figure out the target pressure difference var/pressure_delta = get_pressure_delta(environment) if(pressure_delta > 0.5) - if(pump_direction) //internal -> external + if(pump_direction) //internal -> external if (node1 && (environment.temperature || air1.temperature)) var/output_volume = environment.volume * environment.group_multiplier var/air_temperature = environment.temperature? environment.temperature : air1.temperature var/transfer_moles = pressure_delta*output_volume/(air_temperature * R_IDEAL_GAS_EQUATION) - + power_draw = pump_gas(src, air1, environment, transfer_moles, active_power_usage) - + if(power_draw >= 0 && network1) network1.update = 1 else //external -> internal @@ -127,15 +135,15 @@ var/output_volume = air2.volume + (network2? network2.volume : 0) var/air_temperature = air2.temperature? air2.temperature : environment.temperature var/transfer_moles = pressure_delta*output_volume/(air_temperature * R_IDEAL_GAS_EQUATION) - + //limit flow rate from turfs transfer_moles = min(transfer_moles, environment.total_moles*air2.volume/environment.volume) //group_multiplier gets divided out here - + power_draw = pump_gas(src, environment, air2, transfer_moles, active_power_usage) - + if(power_draw >= 0 && network2) network2.update = 1 - + if (power_draw < 0) last_power_draw = 0 last_flow_rate = 0 @@ -149,7 +157,7 @@ /obj/machinery/atmospherics/binary/dp_vent_pump/proc/get_pressure_delta(datum/gas_mixture/environment) var/pressure_delta = DEFAULT_PRESSURE_DELTA var/environment_pressure = environment.return_pressure() - + if(pump_direction) //internal -> external if(pressure_checks & PRESSURE_CHECK_EXTERNAL) pressure_delta = min(pressure_delta, external_pressure_bound - environment_pressure) //increasing the pressure here @@ -160,9 +168,9 @@ pressure_delta = min(pressure_delta, environment_pressure - external_pressure_bound) //decreasing the pressure here if(pressure_checks & PRESSURE_CHECK_OUTPUT) pressure_delta = min(pressure_delta, output_pressure_max - air2.return_pressure()) //increasing the pressure here - + return pressure_delta - + //Radio remote control @@ -204,6 +212,7 @@ if(..(user, 1)) user << "A small gauge in the corner reads [round(last_flow_rate, 0.1)] L/s; [round(last_power_draw)] W" + /obj/machinery/atmospherics/unary/vent_pump/power_change() var/old_stat = stat ..() diff --git a/code/WorkInProgress/Cib/meme.dm b/code/WorkInProgress/Cib/meme.dm index 880f21bad51..cbd536da936 100644 --- a/code/WorkInProgress/Cib/meme.dm +++ b/code/WorkInProgress/Cib/meme.dm @@ -292,8 +292,12 @@ mob/living/parasite/meme/verb/Agony() spawn // backup the host incase we switch hosts after using the verb - var/mob/host = src.host + var/mob/living/carbon/host = src.host + if (host.species && (host.species.flags & NO_PAIN)) + usr << "Nothing seems to happen." + return + host.paralysis = max(host.paralysis, 2) host.flash_weak_pain() diff --git a/code/WorkInProgress/kilakk/fax.dm b/code/WorkInProgress/kilakk/fax.dm index 8be1e9679d6..bbec494ea41 100644 --- a/code/WorkInProgress/kilakk/fax.dm +++ b/code/WorkInProgress/kilakk/fax.dm @@ -183,12 +183,16 @@ var/list/alldepartments = list("Central Command") var/msg = "\blue CENTCOMM FAX: [key_name(Sender, 1)] (PP) (VV) (SM) (JMP) (CA) (RPLY): Receiving '[sentname]' via secure connection ... view message" - admins << msg + for(var/client/C in admins) + if(R_ADMIN & C.holder.rights) + C << msg /proc/Solgov_fax(var/originfax, var/sent, var/sentname, var/mob/Sender) var/msg = "\blue SOL GOVERNMENT FAX: [key_name(Sender, 1)] (PP) (VV) (SM) (JMP) (CA) (RPLY): Receiving '[sentname]' via secure connection ... view message" - admins << msg + for(var/client/C in admins) + if(R_ADMIN & C.holder.rights) + C << msg proc/SendFax(var/sent, var/sentname, var/mob/Sender, var/dpt) diff --git a/code/controllers/voting.dm b/code/controllers/voting.dm index 02780f31b6e..27b1b7558b9 100644 --- a/code/controllers/voting.dm +++ b/code/controllers/voting.dm @@ -290,9 +290,9 @@ datum/controller/vote var/admin = 0 var/trialmin = 0 if(C.holder) - admin = 1 if(C.holder.rights & R_ADMIN) - trialmin = 1 + admin = 1 + trialmin = 1 // don't know why we use both of these it's really weird, but I'm 2 lasy to refactor this all to use just admin. voting |= C . = "Voting Panel" diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index fdbc1e35fd3..fb6476bf07a 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -104,9 +104,13 @@ var/list/sacrificed = list() if(M.stat==2) continue usr.say("Mah[pick("'","`")]weyh pleggh at e'ntrath!") - M.visible_message("\red [M] writhes in pain as the markings below \him glow a bloody red.", \ - "\red AAAAAAHHHH!", \ - "\red You hear an anguished scream.") + + if (M.species && (M.species.flags & NO_PAIN)) + M.visible_message("\red The markings below [M] glow a bloody red.") + else + M.visible_message("\red [M] writhes in pain as the markings below \him glow a bloody red.", \ + "\red AAAAAAHHHH!", \ + "\red You hear an anguished scream.") if(is_convertable_to_cult(M.mind) && !jobban_isbanned(M, "cultist"))//putting jobban check here because is_convertable uses mind as argument // Mostly for the benefit of those who resist, but it makes sense for even those who join to have some.. effect. diff --git a/code/game/machinery/autolathe_datums.dm b/code/game/machinery/autolathe_datums.dm index 04ce0401628..b94f42d0c6f 100644 --- a/code/game/machinery/autolathe_datums.dm +++ b/code/game/machinery/autolathe_datums.dm @@ -89,7 +89,7 @@ /datum/autolathe/recipe/rglass name = "reinforced glass sheets" - path = /obj/item/stack/sheet/rglass + path = /obj/item/stack/sheet/glass/reinforced category = "General" is_stack = 1 diff --git a/code/game/machinery/computer/ai_core.dm b/code/game/machinery/computer/ai_core.dm index 5e3c29996f1..259012f4dbc 100644 --- a/code/game/machinery/computer/ai_core.dm +++ b/code/game/machinery/computer/ai_core.dm @@ -87,8 +87,8 @@ var/obj/item/stack/cable_coil/A = new /obj/item/stack/cable_coil( loc ) A.amount = 5 - if(istype(P, /obj/item/stack/sheet/rglass)) - var/obj/item/stack/sheet/rglass/RG = P + if(istype(P, /obj/item/stack/sheet/glass/reinforced)) + var/obj/item/stack/sheet/glass/reinforced/RG = P if (RG.get_amount() < 2) user << "You need two sheets of glass to put in the glass panel." return @@ -161,7 +161,7 @@ icon_state = "3b" else icon_state = "3" - new /obj/item/stack/sheet/rglass( loc, 2 ) + new /obj/item/stack/sheet/glass/reinforced( loc, 2 ) return if(istype(P, /obj/item/weapon/screwdriver)) @@ -388,4 +388,4 @@ That prevents a few funky behaviors. U << "\red ERROR: \black [A_T.name] data core is corrupted. Unable to install." else U << "\red ERROR: \black AI flush is in progress, cannot execute transfer protocol." - return \ No newline at end of file + return diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 4f015975fed..bb23176478c 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -1026,7 +1026,10 @@ About the new airlock wires panel: S.loc = M.loc spawn(20) del(S) - M.emote("scream") + if (iscarbon(M)) + var/mob/living/carbon/C = M + if (!(C.species && (C.species.flags & NO_PAIN))) + M.emote("scream") var/turf/location = src.loc if(istype(location, /turf/simulated)) location.add_blood(M) diff --git a/code/game/machinery/doors/airlock_electronics.dm b/code/game/machinery/doors/airlock_electronics.dm index d9a3efe9594..0a22aa0dd94 100644 --- a/code/game/machinery/doors/airlock_electronics.dm +++ b/code/game/machinery/doors/airlock_electronics.dm @@ -16,7 +16,7 @@ var/locked = 1 attack_self(mob/user as mob) - if (!ishuman(user) && !istype(user,/mob/living/silicon/robot/drone)) + if (!ishuman(user) && !istype(user,/mob/living/silicon/robot)) return ..(user) var/mob/living/carbon/human/H = user diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index 68da5f0ef11..7dc7ba75a58 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -330,14 +330,18 @@ for(i=0,i<4,i++) sleep(50) if(src.OCCUPANT) - if(src.issuperUV) - var/burndamage = rand(28,35) - OCCUPANT.take_organ_damage(0,burndamage) - OCCUPANT.emote("scream") - else - var/burndamage = rand(6,10) - OCCUPANT.take_organ_damage(0,burndamage) - OCCUPANT.emote("scream") + var/datum/organ/internal/diona/nutrients/rad_organ = locate() in OCCUPANT.internal_organs + if (!rad_organ) + if(src.issuperUV) + var/burndamage = rand(28,35) + OCCUPANT.take_organ_damage(0,burndamage) + if (!(OCCUPANT.species && (OCCUPANT.species.flags & NO_PAIN))) + OCCUPANT.emote("scream") + else + var/burndamage = rand(6,10) + OCCUPANT.take_organ_damage(0,burndamage) + if (!(OCCUPANT.species && (OCCUPANT.species.flags & NO_PAIN))) + OCCUPANT.emote("scream") if(i==3) //End of the cycle if(!src.issuperUV) if(src.HELMET) diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 814b3044966..d68250c815e 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -135,23 +135,6 @@ A.ai_actual_track(target) return - else if (href_list["faketrack"]) - var/mob/target = locate(href_list["track"]) - var/mob/living/silicon/ai/A = locate(href_list["track2"]) - if(A && target) - - A:cameraFollow = target - A << text("Now tracking [] on camera.", target.name) - if (usr.machine == null) - usr.machine = usr - - while (usr:cameraFollow == target) - usr << "Target is not on or near any active cameras on the station. We'll check again in 5 seconds (unless you use the cancel-camera verb)." - sleep(40) - continue - - return - else if (href_list["freq"]) var/new_frequency = (frequency + text2num(href_list["freq"])) if (!freerange || (frequency < 1200 || frequency > 1600)) diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index f65442e4622..ee0aa22a708 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -18,6 +18,8 @@ matter = list("glass" = 3750) origin_tech = "materials=1" var/created_window = /obj/structure/window/basic + var/is_reinforced = 0 + var/list/construction_options = list("One Direction", "Full Window") /obj/item/stack/sheet/glass/cyborg name = "glass" @@ -32,19 +34,24 @@ /obj/item/stack/sheet/glass/attackby(obj/item/W, mob/user) ..() - if(istype(W,/obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/CC = W - if (get_amount() < 1 || CC.get_amount() < 5) - user << "You attach wire to the [name]." - new /obj/item/stack/light_w(user.loc) - else if(istype(W, /obj/item/stack/rods)) - var/obj/item/stack/rods/V = W - if (V.get_amount() >= 1 && get_amount() >= 1) - var/obj/item/stack/sheet/rglass/RG = new (user.loc) + if(!is_reinforced) + if(istype(W,/obj/item/stack/cable_coil)) + var/obj/item/stack/cable_coil/CC = W + if (get_amount() < 1 || CC.get_amount() < 5) + user << "You attach wire to the [name]." + new /obj/item/stack/light_w(user.loc) + else if(istype(W, /obj/item/stack/rods)) + var/obj/item/stack/rods/V = W + if (V.get_amount() < 1 || get_amount() < 1) + user << "You need one rod and one sheet of glass to make reinforced glass." + return + + var/obj/item/stack/sheet/glass/reinforced/RG = new (user.loc) RG.add_fingerprint(user) RG.add_to_stacks(user) var/obj/item/stack/sheet/glass/G = src @@ -54,20 +61,15 @@ G.use(1) if (!G && replace) user.put_in_hands(RG) - else - user << "You need one rod and one sheet of glass to make reinforced glass." - return - else - return ..() /obj/item/stack/sheet/glass/proc/construct_window(mob/user as mob) if(!user || !src) return 0 if(!istype(user.loc,/turf)) return 0 if(!user.IsAdvancedToolUser()) return 0 - var/title = "Sheet-Glass" + var/title = "Sheet-[name]" title += " ([src.amount] sheet\s left)" - switch(alert(title, "Would you like full tile glass or one direction?", "One Direction", "Full Window", "Cancel", null)) + switch(input(title, "What would you like to construct?") as null|anything in construction_options) if("One Direction") if(!src) return 1 if(src.loc != user) return 1 @@ -80,7 +82,7 @@ user << "\red There are too many windows in this location." return 1 directions-=win.dir - if(!(win.ini_dir in cardinal)) + if(!(win.dir in cardinal)) user << "\red Can't let you do that." return 1 @@ -94,112 +96,23 @@ if(!found) dir_to_set = direction break - var/obj/structure/window/W - W = new created_window( user.loc, 0 ) - W.dir = dir_to_set - W.ini_dir = W.dir - W.anchored = 0 + new created_window( user.loc, dir_to_set, 1 ) src.use(1) if("Full Window") if(!src) return 1 if(src.loc != user) return 1 - if(src.amount < 2) + if(src.amount < 4) user << "\red You need more glass to do that." return 1 if(locate(/obj/structure/window) in user.loc) user << "\red There is a window in the way." return 1 - var/obj/structure/window/W - W = new created_window( user.loc, 0 ) - W.dir = SOUTHWEST - W.ini_dir = SOUTHWEST - W.anchored = 0 - src.use(2) - return 0 - - -/* - * Reinforced glass sheets - */ -/obj/item/stack/sheet/rglass - name = "reinforced glass" - desc = "Glass which seems to have rods or something stuck in them." - singular_name = "reinforced glass sheet" - icon_state = "sheet-rglass" - - matter = list("metal" = 1875,"glass" = 3750) - - origin_tech = "materials=2" - -/obj/item/stack/sheet/rglass/cyborg - name = "reinforced glass" - desc = "Glass which seems to have rods or something stuck in them." - singular_name = "reinforced glass sheet" - icon_state = "sheet-rglass" - -/obj/item/stack/sheet/rglass/attack_self(mob/user as mob) - construct_window(user) - -/obj/item/stack/sheet/rglass/proc/construct_window(mob/user as mob) - if(!user || !src) return 0 - if(!istype(user.loc,/turf)) return 0 - if(!user.IsAdvancedToolUser()) - return 0 - var/title = "Sheet Reinf. Glass" - title += " ([src.amount] sheet\s left)" - switch(input(title, "Would you like full tile glass a one direction glass pane or a windoor?") in list("One Direction", "Full Window", "Windoor", "Cancel")) - if("One Direction") - if(!src) return 1 - if(src.loc != user) return 1 - var/list/directions = new/list(cardinal) - var/i = 0 - for (var/obj/structure/window/win in user.loc) - i++ - if(i >= 4) - user << "\red There are too many windows in this location." - return 1 - directions-=win.dir - if(!(win.ini_dir in cardinal)) - user << "\red Can't let you do that." - return 1 - - //Determine the direction. It will first check in the direction the person making the window is facing, if it finds an already made window it will try looking at the next cardinal direction, etc. - var/dir_to_set = 2 - for(var/direction in list( user.dir, turn(user.dir,90), turn(user.dir,180), turn(user.dir,270) )) - var/found = 0 - for(var/obj/structure/window/WT in user.loc) - if(WT.dir == direction) - found = 1 - if(!found) - dir_to_set = direction - break - - var/obj/structure/window/W - W = new /obj/structure/window/reinforced( user.loc, 1 ) - W.state = 0 - W.dir = dir_to_set - W.ini_dir = W.dir - W.anchored = 0 - src.use(1) - - if("Full Window") - if(!src) return 1 - if(src.loc != user) return 1 - if(src.amount < 2) - user << "\red You need more glass to do that." - return 1 - if(locate(/obj/structure/window) in user.loc) - user << "\red There is a window in the way." - return 1 - var/obj/structure/window/W - W = new /obj/structure/window/reinforced( user.loc, 1 ) - W.state = 0 - W.dir = SOUTHWEST - W.ini_dir = SOUTHWEST - W.anchored = 0 - src.use(2) - + new created_window( user.loc, SOUTHWEST, 1 ) + src.use(4) if("Windoor") + if(!is_reinforced) return 1 + + if(!src || src.loc != user) return 1 if(isturf(user.loc) && locate(/obj/structure/windoor_assembly/, user.loc)) @@ -214,31 +127,33 @@ user << "\red You need more glass to do that." return 1 - var/obj/structure/windoor_assembly/WD - WD = new /obj/structure/windoor_assembly(user.loc) - WD.state = "01" - WD.anchored = 0 + new /obj/structure/windoor_assembly(user.loc, user.dir, 1) src.use(5) - switch(user.dir) - if(SOUTH) - WD.dir = SOUTH - WD.ini_dir = SOUTH - if(EAST) - WD.dir = EAST - WD.ini_dir = EAST - if(WEST) - WD.dir = WEST - WD.ini_dir = WEST - else//If the user is facing northeast. northwest, southeast, southwest or north, default to north - WD.dir = NORTH - WD.ini_dir = NORTH - else - return 1 - return 0 +/* + * Reinforced glass sheets + */ +/obj/item/stack/sheet/glass/reinforced + name = "reinforced glass" + desc = "Glass which has been reinforced with metal rods." + singular_name = "reinforced glass sheet" + icon_state = "sheet-rglass" + + matter = list("metal" = 1875,"glass" = 3750) + origin_tech = "materials=2" + + created_window = /obj/structure/window/reinforced + is_reinforced = 1 + construction_options = list("One Direction", "Full Window", "Windoor") + +/obj/item/stack/sheet/glass/reinforced/cyborg + name = "reinforced glass" + desc = "Glass which has been reinforced with metal rods." + singular_name = "reinforced glass sheet" + icon_state = "sheet-rglass" /* * Phoron Glass sheets @@ -252,9 +167,6 @@ origin_tech = "materials=3;phorontech=2" created_window = /obj/structure/window/phoronbasic -/obj/item/stack/sheet/glass/phoronglass/attack_self(mob/user as mob) - construct_window(user) - /obj/item/stack/sheet/glass/phoronglass/attackby(obj/item/W, mob/user) ..() if( istype(W, /obj/item/stack/rods) ) @@ -277,13 +189,11 @@ */ /obj/item/stack/sheet/glass/phoronrglass name = "reinforced phoron glass" - desc = "Phoron glass which seems to have rods or something stuck in them." + desc = "Phoron glass which has been reinforced with metal rods." singular_name = "reinforced phoron glass sheet" icon_state = "sheet-phoronrglass" matter = list("glass" = 7500,"metal" = 1875) origin_tech = "materials=4;phorontech=2" created_window = /obj/structure/window/phoronreinforced - -/obj/item/stack/sheet/glass/phoronrglass/attack_self(mob/user as mob) - construct_window(user) \ No newline at end of file + is_reinforced = 1 diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index da7549fe343..17e34e4efd2 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -159,7 +159,7 @@ obj/structure/door_assembly if(do_after(user, 40)) if(!src || !WT.isOn()) return user << "\blue You welded the glass panel out!" - new /obj/item/stack/sheet/rglass(src.loc) + new /obj/item/stack/sheet/glass/reinforced(src.loc) glass = 0 else if(!anchored) user.visible_message("[user] dissassembles the airlock assembly.", "You start to dissassemble the airlock assembly.") @@ -239,7 +239,7 @@ obj/structure/door_assembly var/obj/item/stack/sheet/S = W if (S) if (S.get_amount() >= 1) - if(istype(S, /obj/item/stack/sheet/rglass)) + if(istype(S, /obj/item/stack/sheet/glass/reinforced)) playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1) user.visible_message("[user] adds [S.name] to the airlock assembly.", "You start to install [S.name] into the airlock assembly.") if(do_after(user, 40) && !glass) @@ -303,4 +303,4 @@ obj/structure/door_assembly name = "Wired " if(2) name = "Near Finished " - name += "[glass == 1 ? "Window " : ""][istext(glass) ? "[glass] Airlock" : base_name] Assembly" \ No newline at end of file + name += "[glass == 1 ? "Window " : ""][istext(glass) ? "[glass] Airlock" : base_name] Assembly" diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 716fca45031..6d033dd2b72 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -85,8 +85,8 @@ return //window placing begin - else if(istype(W,/obj/item/stack/sheet/rglass) || istype(W,/obj/item/stack/sheet/glass)) - var/obj/item/stack/sheet/ST = W + else if(istype(W,/obj/item/stack/sheet/glass)) + var/obj/item/stack/sheet/glass/ST = W var/dir_to_set = 1 if(loc == user.loc) dir_to_set = user.dir @@ -115,16 +115,10 @@ if(WINDOW.dir == dir_to_set)//checking this for a 2nd time to check if a window was made while we were waiting. user << "There is already a window facing this way there." return + + var/wtype = ST.created_window if (ST.use(1)) - var/obj/structure/window/WD - if(istype(W, /obj/item/stack/sheet/rglass)) - WD = new/obj/structure/window/reinforced(loc) //reinforced window - else - WD = new/obj/structure/window/basic(loc) //normal window - WD.dir = dir_to_set - WD.ini_dir = dir_to_set - WD.anchored = 0 - WD.state = 0 + var/obj/structure/window/WD = new wtype(loc, dir_to_set, 1) user << "You place the [WD] on [src]." WD.update_icon() return @@ -193,4 +187,4 @@ visible_message("[user] [attack_verb] the [src]!") health -= damage spawn(1) healthcheck() - return 1 \ No newline at end of file + return 1 diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 538149688cb..3db68575c98 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -310,7 +310,13 @@ for(var/mob/living/M in contents) if (M.stat!=2) - M.emote("scream") + if (!iscarbon(M)) + M.emote("scream") + else + var/mob/living/carbon/C = M + if (!(C.species && (C.species.flags & NO_PAIN))) + C.emote("scream") + //Logging for this causes runtimes resulting in the cremator locking up. Commenting it out until that's figured out. //M.attack_log += "\[[time_stamp()]\] Has been cremated by [user]/[user.ckey]" //No point in this when the mob's about to be deleted //user.attack_log +="\[[time_stamp()]\] Cremated [M]/[M.ckey]" diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm index ac2bac7e1bb..915bbbf684c 100644 --- a/code/game/objects/structures/windoor_assembly.dm +++ b/code/game/objects/structures/windoor_assembly.dm @@ -18,7 +18,6 @@ obj/structure/windoor_assembly density = 0 dir = NORTH - var/ini_dir var/obj/item/weapon/airlock_electronics/electronics = null //Vars to help with the icon's name @@ -26,9 +25,17 @@ obj/structure/windoor_assembly var/secure = "" //Whether or not this creates a secure windoor var/state = "01" //How far the door assembly has progressed in terms of sprites -obj/structure/windoor_assembly/New(dir=NORTH) +obj/structure/windoor_assembly/New(Loc, start_dir=NORTH, constructed=0) ..() - src.ini_dir = src.dir + if(constructed) + state = "01" + anchored = 0 + switch(start_dir) + if(NORTH, SOUTH, EAST, WEST) + dir = start_dir + else //If the user is facing northeast. northwest, southeast, southwest or north, default to north + dir = NORTH + update_nearby_tiles(need_rebuild=1) obj/structure/windoor_assembly/Del() @@ -70,7 +77,7 @@ obj/structure/windoor_assembly/Del() if(do_after(user, 40)) if(!src || !WT.isOn()) return user << "\blue You dissasembled the windoor assembly!" - new /obj/item/stack/sheet/rglass(get_turf(src), 5) + new /obj/item/stack/sheet/glass/reinforced(get_turf(src), 5) if(secure) new /obj/item/stack/rods(get_turf(src), 4) del(src) @@ -270,7 +277,6 @@ obj/structure/windoor_assembly/Del() if(src.state != "01") update_nearby_tiles(need_rebuild=1) - src.ini_dir = src.dir update_icon() return diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 4df313fe91e..7c7429d76e9 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -18,7 +18,6 @@ // var/silicate = 0 // number of units of silicate // var/icon/silicateIcon = null // the silicated icon - /obj/structure/window/proc/take_damage(var/damage = 0, var/sound_effect = 1) var/initialhealth = src.health src.health = max(0, src.health - damage) @@ -85,11 +84,16 @@ /obj/structure/window/meteorhit() shatter() +//TODO: Make full windows a separate type of window. +//Once a full window, it will always be a full window, so there's no point +//having the same type for both. +/obj/structure/window/proc/is_full_window() + return (dir == SOUTHWEST || dir == SOUTHEAST || dir == NORTHWEST || dir == NORTHEAST) /obj/structure/window/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) if(istype(mover) && mover.checkpass(PASSGLASS)) return 1 - if(dir == SOUTHWEST || dir == SOUTHEAST || dir == NORTHWEST || dir == NORTHEAST) + if(is_full_window()) return 0 //full tile window, you can't move into it! if(get_dir(loc, target) == dir) return !density @@ -245,7 +249,6 @@ dir = turn(dir, 90) // updateSilicate() update_nearby_tiles(need_rebuild=1) - ini_dir = dir return @@ -262,7 +265,6 @@ dir = turn(dir, 270) // updateSilicate() update_nearby_tiles(need_rebuild=1) - ini_dir = dir return @@ -282,10 +284,15 @@ */ -/obj/structure/window/New(Loc,re=0) +/obj/structure/window/New(Loc, start_dir=null, constructed=0) ..() -// if(re) reinf = re + //player-constructed windows + if (constructed) + anchored = 0 + + if (start_dir) + dir = start_dir health = maxhealth @@ -294,8 +301,6 @@ update_nearby_tiles(need_rebuild=1) update_nearby_icons() - return - /obj/structure/window/Del() density = 0 @@ -305,6 +310,7 @@ /obj/structure/window/Move() + var/ini_dir = dir update_nearby_tiles(need_rebuild=1) ..() dir = ini_dir @@ -406,7 +412,14 @@ basestate = "rwindow" maxhealth = 40 reinf = 1 - glasstype = /obj/item/stack/sheet/rglass + glasstype = /obj/item/stack/sheet/glass/reinforced + +/obj/structure/window/New(Loc, constructed=0) + ..() + + //player-constructed windows + if (constructed) + state = 0 /obj/structure/window/reinforced/tinted name = "tinted window" diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 670d52fced3..615eaeb9b5d 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -281,7 +281,7 @@ var/global/floorIsLava = 0 I.rank = "N/A" update_file = 1 dat += "[I.content] by [I.author] ([I.rank]) on [I.timestamp] " - if(I.author == usr.key || I.author == "Adminbot") + if(I.author == usr.key || I.author == "Adminbot" || ishost(usr)) dat += "Remove" dat += "

" if(update_file) info << infos @@ -1141,9 +1141,25 @@ var/global/floorIsLava = 0 if(2) var/ref_mob = "\ref[M]" return "[key_name(C, link, name, highlight_special)](?) (PP) (VV) (SM) (JMP) (CA)" + if(3) + var/ref_mob = "\ref[M]" + return "[key_name(C, link, name, highlight_special)](VV)(JMP)" - +/proc/ishost(whom) + if(!whom) + return 0 + var/client/C + var/mob/M + if(istype(whom, /client)) + C = whom + if(istype(whom, /mob)) + M = whom + C = M.client + if(R_HOST & C.holder.rights) + return 1 + else + return 0 // // //ALL DONE diff --git a/code/modules/admin/admin_ranks.dm b/code/modules/admin/admin_ranks.dm index a9e428953b8..5d1f5db452e 100644 --- a/code/modules/admin/admin_ranks.dm +++ b/code/modules/admin/admin_ranks.dm @@ -37,7 +37,7 @@ var/list/admin_ranks = list() //list of all ranks with associated rights if("stealth") rights |= R_STEALTH if("rejuv","rejuvinate") rights |= R_REJUVINATE if("varedit") rights |= R_VAREDIT - if("everything","host","all") rights |= R_HOST + if("everything","host","all") rights |= (R_HOST | R_BUILDMODE | R_ADMIN | R_BAN | R_FUN | R_SERVER | R_DEBUG | R_PERMISSIONS | R_POSSESS | R_STEALTH | R_REJUVINATE | R_VAREDIT | R_SOUNDS | R_SPAWN | R_MOD| R_MENTOR) if("sound","sounds") rights |= R_SOUNDS if("spawn","create") rights |= R_SPAWN if("mod") rights |= R_MOD diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 073ad330fa5..6825c07df3c 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -3,7 +3,7 @@ //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") -/client/verb/adminhelp(msg as text) +/client/verb/adminhelp() set category = "Admin" set name = "Adminhelp" @@ -15,8 +15,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey"," if(prefs.muted & MUTE_ADMINHELP) src << "Error: Admin-PM: You cannot send adminhelps (Muted)." return - if(src.handle_spam_prevention(msg,MUTE_ADMINHELP)) - return + adminhelped = 1 //Determines if they get the message to reply by clicking the name. @@ -26,6 +25,17 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey"," src.verbs += /client/verb/adminhelp // 2 minute cool-down for adminhelps src.verbs += /client/verb/adminhelp // 2 minute cool-down for adminhelps//Go to hell **/ + var/msg + var/list/type = list ("Gameplay/Roleplay question", "Rule/Gameplay issue", "Bug report") + var/selected_type = input("Pick a category.", "Admin Help", null, null) as null|anything in type + if(selected_type) + msg = input("Please enter your message:", "Admin Help", null, null) as text + + var/selected_upper = uppertext(selected_type) + + if(src.handle_spam_prevention(msg,MUTE_ADMINHELP)) + return + //clean the input msg if(!msg) return @@ -33,7 +43,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey"," if(!msg) return var/original_msg = msg - + //explode the input msg into a list var/list/msglist = text2list(msg, " ") @@ -91,11 +101,68 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey"," if(!mob) return //this doesn't happen var/ref_mob = "\ref[mob]" - var/mentor_msg = "\blue HELP: [get_options_bar(mob, 2, 1, 1, 0)][ai_found ? " (CL)" : ""]: [msg]" - msg = "\blue HELP: [get_options_bar(mob, 2, 1, 1)][ai_found ? " (CL)" : ""]: [msg]" - //send this msg to all admins + var/mentor_msg = "\blue [selected_upper]: [get_options_bar(mob, 0, 0, 1, 0)][ai_found ? " (CL)" : ""]: [msg]" + var/dev_msg = "\blue [selected_upper]: [get_options_bar(mob, 3, 0, 1, 0)][ai_found ? " (CL)" : ""]: [msg]" + msg = "\blue [selected_upper]: [get_options_bar(mob, 2, 1, 1)][ai_found ? " (CL)" : ""]: [msg]" + + + var/admin_number_afk = 0 + + var/list/mentorholders = list() + var/list/debugholders = list() + var/list/adminholders = list() for(var/client/X in admins) + if(R_MENTOR & X.holder.rights && !(R_ADMIN & X.holder.rights)) // we don't want to count admins twice. This list should be JUST mentors + mentorholders += X + if(X.is_afk()) + admin_number_afk++ + if(R_DEBUG & X.holder.rights) // Looking for anyone with +Debug which will be admins, developers, and developer mentors + debugholders += X + if(!(R_ADMIN & X.holder.rights)) + if(X.is_afk()) + admin_number_afk++ + if(R_ADMIN & X.holder.rights) // just admins here please + adminholders += X + if(X.is_afk()) + admin_number_afk++ + + switch(selected_type) + if("Gameplay/Roleplay question") + if(mentorholders.len) + for(var/client/X in mentorholders) // Mentors get a message without buttons and no character name + if(X.prefs.toggles & SOUND_ADMINHELP) + X << 'sound/effects/adminhelp.ogg' + X << mentor_msg + if(adminholders.len) + for(var/client/X in adminholders) // Admins get the full monty + if(X.prefs.toggles & SOUND_ADMINHELP) + X << 'sound/effects/adminhelp.ogg' + X << msg + if("Rule/Gameplay issue") + if(adminholders.len) + for(var/client/X in adminholders) // Admins of course get everything in their helps + if(X.prefs.toggles & SOUND_ADMINHELP) + X << 'sound/effects/adminhelp.ogg' + X << msg + if("Bug report") + if(debugholders.len) + for(var/client/X in debugholders) + if(R_ADMIN & X.holder.rights) // Admins get every button & special highlights in theirs + if(X.prefs.toggles & SOUND_ADMINHELP) + X << 'sound/effects/adminhelp.ogg' + X << msg + else + if (R_DEBUG & X.holder.rights) // Just devs or devmentors get non-highlighted names, but they do get JMP and VV for their bug reports. + if(X.prefs.toggles & SOUND_ADMINHELP) + X << 'sound/effects/adminhelp.ogg' + X << dev_msg + + + + + + /*for(var/client/X in admins) if((R_ADMIN|R_MOD|R_MENTOR) & X.holder.rights) if(X.is_afk()) admin_number_afk++ @@ -104,19 +171,19 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey"," if(X.holder.rights == R_MENTOR) X << mentor_msg // Mentors won't see coloring of names on people with special_roles (Antags, etc.) else - X << msg + X << msg*/ //show it to the person adminhelping too - src << "PM to-Admins: [original_msg]" + src << "PM to-Staff ([selected_type]): [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) if(!admin_number_afk) - send2adminirc("ADMINHELP from [key_name(src)]: [html_decode(original_msg)] - !!No admins online!!") + send2adminirc("[selected_upper] from [key_name(src)]: [html_decode(original_msg)] - !!No admins online!!") else - send2adminirc("ADMINHELP from [key_name(src)]: [html_decode(original_msg)] - !!All admins AFK ([admin_number_afk])!!") + send2adminirc("[selected_upper] from [key_name(src)]: [html_decode(original_msg)] - !!All admins AFK ([admin_number_afk])!!") else - send2adminirc("ADMINHELP from [key_name(src)]: [html_decode(original_msg)]") + send2adminirc("[selected_upper] 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 diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index bdc93347fff..5e26498a2b7 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -43,7 +43,7 @@ if(!istype(C,/client)) if(holder) src << "Error: Private-Message: Client not found." - else adminhelp(msg) //admin we are replying to left. adminhelp instead + else src << "Error: Private-Message: Client not found. They may have lost connection, so try using an adminhelp!" return //get message text, limit it's length.and clean/escape html @@ -53,7 +53,7 @@ if(!msg) return if(!C) if(holder) src << "Error: Admin-PM: Client not found." - else adminhelp(msg) //admin we are replying to has vanished, adminhelp instead + else src << "Error: Private-Message: Client not found. They may have lost connection, so try using an adminhelp!" return if (src.handle_spam_prevention(msg,MUTE_ADMINHELP)) @@ -78,7 +78,7 @@ else recieve_color = "maroon" send_pm_type = holder.rank + " " - if(!C.holder && holder && holder.fakekey) + if(!C.holder && holder && holder.fakekey) recieve_pm_type = "Admin" else recieve_pm_type = holder.rank diff --git a/code/modules/admin/verbs/adminsay.dm b/code/modules/admin/verbs/adminsay.dm index a312416ccc7..83254f6e0d0 100644 --- a/code/modules/admin/verbs/adminsay.dm +++ b/code/modules/admin/verbs/adminsay.dm @@ -9,8 +9,12 @@ log_admin("[key_name(src)] : [msg]") + var/color = "adminsay" + if(ishost(usr)) + color = "headminsay" + if(check_rights(R_ADMIN,0)) - msg = "ADMIN: [key_name(usr, 1)] (JMP): [msg]" + msg = "ADMIN: [key_name(usr, 1)] (JMP): [msg]" for(var/client/C in admins) if(R_ADMIN & C.holder.rights) C << msg diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm index e3028097128..48681c93a3e 100644 --- a/code/modules/admin/verbs/pray.dm +++ b/code/modules/admin/verbs/pray.dm @@ -20,8 +20,9 @@ msg = "\blue \icon[cross] PRAY: [key_name(src, 1)] (?) (PP) (VV) (SM) (JMP) (CA) (SC): [msg]" for(var/client/C in admins) - if(C.prefs.toggles & CHAT_PRAYER) - C << msg + if(R_ADMIN & C.holder.rights) + if(C.prefs.toggles & CHAT_PRAYER) + C << msg usr << "Your prayers have been received by the gods." feedback_add_details("admin_verb","PR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -30,9 +31,13 @@ /proc/Centcomm_announce(var/text , var/mob/Sender , var/iamessage) var/msg = copytext(sanitize(text), 1, MAX_MESSAGE_LEN) msg = "\blue CENTCOMM[iamessage ? " IA" : ""]:[key_name(Sender, 1)] (PP) (VV) (SM) (JMP) (CA) (BSA) (RPLY): [msg]" - admins << msg + for(var/client/C in admins) + if(R_ADMIN & C.holder.rights) + C << msg /proc/Syndicate_announce(var/text , var/mob/Sender) var/msg = copytext(sanitize(text), 1, MAX_MESSAGE_LEN) msg = "\blue ILLEGAL:[key_name(Sender, 1)] (PP) (VV) (SM) (JMP) (CA) (BSA) (RPLY): [msg]" - admins << msg + for(var/client/C in admins) + if(R_ADMIN & C.holder.rights) + C << msg diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm index 221863ce3c7..05ea07dd016 100644 --- a/code/modules/mob/hear_say.dm +++ b/code/modules/mob/hear_say.dm @@ -8,7 +8,19 @@ //Does the speaker have a client? It's either random stuff that observers won't care about (Experiment 97B says, 'EHEHEHEHEHEHEHE') //Or someone snoring. So we make it where they won't hear it. return - + + //make sure the air can transmit speech - hearer's side + var/turf/T = get_turf(src) + if (T) + var/datum/gas_mixture/environment = T.return_air() + var/pressure = (environment)? environment.return_pressure() : 0 + if(pressure < SOUND_MINIMUM_PRESSURE && get_dist(speaker, src) > 1) + return + + if (pressure < ONE_ATMOSPHERE*0.4) //sound distortion pressure, to help clue people in that the air is thin, even if it isn't a vacuum yet + italics = 1 + sound_vol *= 0.5 //muffle the sound a bit, so it's like we're actually talking through contact + if(sleeping || stat == 1) hear_sleep(message) return diff --git a/code/modules/mob/language.dm b/code/modules/mob/language.dm index b49374cecdf..b9fcefbddec 100755 --- a/code/modules/mob/language.dm +++ b/code/modules/mob/language.dm @@ -230,7 +230,7 @@ if(drone_only && !istype(S,/mob/living/silicon/robot/drone)) continue else if(istype(S , /mob/living/silicon/ai)) - message_start = "[name], [speaker.name]" + message_start = "[name], [speaker.name]" else if (!S.binarycheck()) continue diff --git a/code/modules/mob/living/carbon/alien/diona/diona.dm b/code/modules/mob/living/carbon/alien/diona/diona.dm index 3f4bc2105d8..a91f55d4b6b 100644 --- a/code/modules/mob/living/carbon/alien/diona/diona.dm +++ b/code/modules/mob/living/carbon/alien/diona/diona.dm @@ -19,6 +19,7 @@ /mob/living/carbon/alien/diona/New() ..() + species = all_species["Diona"] verbs += /mob/living/carbon/proc/eat_weeds verbs += /mob/living/carbon/proc/fertilize_plant verbs += /mob/living/carbon/alien/diona/proc/steal_blood diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index c915b6f7b5f..eb96d51512d 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -499,7 +499,8 @@ if (!( AM.anchored )) var/t = get_dir(src, AM) if (istype(AM, /obj/structure/window)) - if(AM:ini_dir == NORTHWEST || AM:ini_dir == NORTHEAST || AM:ini_dir == SOUTHWEST || AM:ini_dir == SOUTHEAST) + var/obj/structure/window/W = AM + if(W.is_full_window()) for(var/obj/structure/window/win in get_step(AM,t)) now_pushing = 0 return diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm index feed242bef0..bf72360399f 100644 --- a/code/modules/mob/living/carbon/carbon_defines.dm +++ b/code/modules/mob/living/carbon/carbon_defines.dm @@ -1,5 +1,6 @@ /mob/living/carbon/ gender = MALE + var/datum/species/species //Contains icon generation and language information, set during New(). var/list/stomach_contents = list() var/list/datum/disease2/disease/virus2 = list() var/antibodies = 0 diff --git a/code/modules/mob/living/carbon/carbon_powers.dm b/code/modules/mob/living/carbon/carbon_powers.dm index f4bc6e4d68f..7dc0f45087a 100644 --- a/code/modules/mob/living/carbon/carbon_powers.dm +++ b/code/modules/mob/living/carbon/carbon_powers.dm @@ -72,7 +72,12 @@ if(B.host_brain.ckey) src << "\red You send a punishing spike of psychic agony lancing into your host's brain." - B.host_brain << "\red Horrific, burning agony lances through you, ripping a soundless scream from your trapped mind!" + + if (species && (species.flags & NO_PAIN)) + B.host_brain << "\red You feel a strange sensation as a foreign influence prods your mind." + src << "\red It doesn't seem to be as effective as you hoped." + else + B.host_brain << "\red Horrific, burning agony lances through you, ripping a soundless scream from your trapped mind!" /mob/living/carbon/proc/spawn_larvae() set category = "Abilities" diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 2b6ec75ac05..9966af75722 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -6,7 +6,6 @@ icon_state = "body_m_s" var/list/hud_list[9] - var/datum/species/species //Contains icon generation and language information, set during New(). var/embedded_flag //To check if we've need to roll for damage on movement while an item is imbedded in us. /mob/living/carbon/human/New(var/new_loc, var/new_species = null) diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index 0c21befe295..579927ec04b 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -351,7 +351,7 @@ This function restores all organs. //Handle other types of damage if((damagetype != BRUTE) && (damagetype != BURN)) - if(damagetype == HALLOSS) + if(damagetype == HALLOSS && !(species && (species.flags & NO_PAIN))) if ((damage > 25 && prob(20)) || (damage > 50 && prob(60))) emote("scream") diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 0f0e4484cb8..95b600ed5f0 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -17,7 +17,8 @@ var/health_deficiency = (100 - health) if(health_deficiency >= 40) tally += (health_deficiency / 25) - if(halloss >= 10) tally += (halloss / 10) + if (!(species && (species.flags & NO_PAIN))) + if(halloss >= 10) tally += (halloss / 10) //halloss shouldn't slow you down if you can't even feel it var/hungry = (500 - nutrition)/5 // So overeat would be 100 and default level would be 80 if (hungry >= 70) tally += hungry/50 diff --git a/code/modules/mob/living/carbon/metroid/metroid.dm b/code/modules/mob/living/carbon/metroid/metroid.dm index b5f9cf970f2..47c35b488f4 100644 --- a/code/modules/mob/living/carbon/metroid/metroid.dm +++ b/code/modules/mob/living/carbon/metroid/metroid.dm @@ -147,7 +147,8 @@ if (!( AM.anchored )) var/t = get_dir(src, AM) if (istype(AM, /obj/structure/window)) - if(AM:ini_dir == NORTHWEST || AM:ini_dir == NORTHEAST || AM:ini_dir == SOUTHWEST || AM:ini_dir == SOUTHEAST) + var/obj/structure/window/W = AM + if(W.is_full_window()) for(var/obj/structure/window/win in get_step(AM,t)) now_pushing = 0 return diff --git a/code/modules/mob/living/carbon/metroid/powers.dm b/code/modules/mob/living/carbon/metroid/powers.dm index 15fdb60349f..23ca8acbf69 100644 --- a/code/modules/mob/living/carbon/metroid/powers.dm +++ b/code/modules/mob/living/carbon/metroid/powers.dm @@ -61,13 +61,15 @@ loc = M.loc if(prob(15) && M.client && istype(M, /mob/living/carbon)) - M << "[pick("You can feel your body becoming weak!", \ - "You feel like you're about to die!", \ - "You feel every part of your body screaming in agony!", \ - "A low, rolling pain passes through your body!", \ - "Your body feels as if it's falling apart!", \ - "You feel extremely weak!", \ - "A sharp, deep pain bathes every inch of your body!")]" + var/mob/living/carbon/C = M + if (!(C.species && (C.species.flags & NO_PAIN))) + M << "[pick("You can feel your body becoming weak!", \ + "You feel like you're about to die!", \ + "You feel every part of your body screaming in agony!", \ + "A low, rolling pain passes through your body!", \ + "Your body feels as if it's falling apart!", \ + "You feel extremely weak!", \ + "A sharp, deep pain bathes every inch of your body!")]" if(istype(M, /mob/living/carbon)) Victim.adjustCloneLoss(rand(5,6)) diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index 9e337e5f803..b955109b286 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -41,6 +41,9 @@ reagents = R R.my_atom = src + species = all_species[greaterform] + add_language(species.language) + if(name == initial(name)) //To stop Pun-Pun becoming generic. name = "[name] ([rand(1, 1000)])" real_name = name @@ -78,24 +81,22 @@ /mob/living/carbon/monkey/unathi/New() - ..() dna.mutantrace = "lizard" greaterform = "Unathi" - add_language("Sinta'unathi") + ..() /mob/living/carbon/monkey/skrell/New() - ..() + dna.mutantrace = "skrell" greaterform = "Skrell" - add_language("Skrellian") + ..() /mob/living/carbon/monkey/tajara/New() - ..() dna.mutantrace = "tajaran" greaterform = "Tajara" - add_language("Siik'tajr") + ..() /mob/living/carbon/monkey/movement_delay() var/tally = 0 @@ -287,4 +288,4 @@ message = capitalize(trim_left(message)) - ..(message, speaking, verb, alt_name, italics, message_range, used_radios) \ No newline at end of file + ..(message, speaking, verb, alt_name, italics, message_range, used_radios) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index b4125f6f59d..f883ce46ff1 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -436,7 +436,8 @@ else if (pulling) if (istype(pulling, /obj/structure/window)) - if(pulling:ini_dir == NORTHWEST || pulling:ini_dir == NORTHEAST || pulling:ini_dir == SOUTHWEST || pulling:ini_dir == SOUTHEAST) + var/obj/structure/window/W = pulling + if(W.is_full_window()) for(var/obj/structure/window/win in get_step(pulling,get_dir(pulling.loc, T))) stop_pulling() if (pulling) diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 4ff66b3403d..28404b3d8a9 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -91,22 +91,21 @@ proc/get_radio_key_from_channel(var/channel) if (speaking.flags & SIGNLANG) return say_signlang(message, pick(speaking.signlang_verb), speaking) - - //make sure the air can transmit speech - var/datum/gas_mixture/environment = T.return_air() - if(environment) - var/pressure = environment.return_pressure() - if(pressure < SOUND_MINIMUM_PRESSURE) - italics = 1 - message_range = 1 - - if (speech_sound) - sound_vol *= 0.5 //muffle the sound a bit, so it's like we're actually talking through contact - + var/list/listening = list() var/list/listening_obj = list() if(T) + //make sure the air can transmit speech - speaker's side + var/datum/gas_mixture/environment = T.return_air() + var/pressure = (environment)? environment.return_pressure() : 0 + if(pressure < SOUND_MINIMUM_PRESSURE) + message_range = 1 + + if (pressure < ONE_ATMOSPHERE*0.4) //sound distortion pressure, to help clue people in that the air is thin, even if it isn't a vacuum yet + italics = 1 + sound_vol *= 0.5 //muffle the sound a bit, so it's like we're actually talking through contact + var/list/hear = hear(message_range, T) var/list/hearturfs = list() diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index ded0990e208..5a041888448 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -506,24 +506,7 @@ var/list/ai_verbs_default = list( else src << "\red System error. Cannot locate [html_decode(href_list["trackname"])]." return - - else if (href_list["faketrack"]) - var/mob/target = locate(href_list["track"]) in mob_list - var/mob/living/silicon/ai/A = locate(href_list["track2"]) in mob_list - if(A && target) - - A.cameraFollow = target - A << text("Now tracking [] on camera.", target.name) - if (usr.machine == null) - usr.machine = usr - - while (src.cameraFollow == target) - usr << "Target is not on or near any active cameras on the station. We'll check again in 5 seconds (unless you use the cancel-camera verb)." - sleep(40) - continue - - return - + return /mob/living/silicon/ai/meteorhit(obj/O as obj) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index c7abbb3d5a6..ac9710220d9 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -594,7 +594,8 @@ var/list/robot_verbs_default = list( if (!AM.anchored) var/t = get_dir(src, AM) if (istype(AM, /obj/structure/window)) - if(AM:ini_dir == NORTHWEST || AM:ini_dir == NORTHEAST || AM:ini_dir == SOUTHWEST || AM:ini_dir == SOUTHEAST) + var/obj/structure/window/W = AM + if(W.is_full_window()) for(var/obj/structure/window/win in get_step(AM,t)) now_pushing = 0 return diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index c1af68c8dfa..57cf8b1c620 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -167,7 +167,7 @@ stacktypes = list( /obj/item/stack/sheet/metal = 50, /obj/item/stack/sheet/plasteel = 10, - /obj/item/stack/sheet/rglass = 50, + /obj/item/stack/sheet/glass/reinforced = 50, /obj/item/stack/rods = 50 ) @@ -188,7 +188,7 @@ stacktypes = list( /obj/item/stack/sheet/metal = 50, /obj/item/stack/sheet/glass = 50, - /obj/item/stack/sheet/rglass = 50, + /obj/item/stack/sheet/glass/reinforced = 50, /obj/item/stack/cable_coil = 50, /obj/item/stack/rods = 15, /obj/item/stack/tile/plasteel = 15 @@ -217,7 +217,7 @@ M.amount = 50 src.modules += M - var/obj/item/stack/sheet/rglass/cyborg/R = new /obj/item/stack/sheet/rglass/cyborg(src) + var/obj/item/stack/sheet/glass/reinforced/cyborg/R = new (src) R.amount = 50 src.modules += R @@ -400,7 +400,7 @@ stacktypes = list( /obj/item/stack/sheet/wood = 1, /obj/item/stack/sheet/mineral/plastic = 1, - /obj/item/stack/sheet/rglass = 5, + /obj/item/stack/sheet/glass/reinforced = 5, /obj/item/stack/tile/wood = 5, /obj/item/stack/rods = 15, /obj/item/stack/tile/plasteel = 15, diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index ffcc48bd400..444c98ea387 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -79,7 +79,8 @@ if (!( AM.anchored )) var/t = get_dir(src, AM) if (istype(AM, /obj/structure/window)) - if(AM:ini_dir == NORTHWEST || AM:ini_dir == NORTHEAST || AM:ini_dir == SOUTHWEST || AM:ini_dir == SOUTHEAST) + var/obj/structure/window/W = AM + if(W.is_full_window()) for(var/obj/structure/window/win in get_step(AM,t)) now_pushing = 0 return diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm index 1e41a1d5d15..2b632c70f57 100644 --- a/code/modules/mob/living/simple_animal/friendly/corgi.dm +++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm @@ -350,7 +350,8 @@ if (!( AM.anchored )) var/t = get_dir(src, AM) if (istype(AM, /obj/structure/window)) - if(AM:ini_dir == NORTHWEST || AM:ini_dir == NORTHEAST || AM:ini_dir == SOUTHWEST || AM:ini_dir == SOUTHEAST) + var/obj/structure/window/W = AM + if(W.is_full_window()) for(var/obj/structure/window/win in get_step(AM,t)) now_pushing = 0 return diff --git a/code/modules/mob/living/simple_animal/friendly/slime.dm b/code/modules/mob/living/simple_animal/friendly/slime.dm index 2a1f9f43470..9674517a4ce 100644 --- a/code/modules/mob/living/simple_animal/friendly/slime.dm +++ b/code/modules/mob/living/simple_animal/friendly/slime.dm @@ -41,7 +41,8 @@ if (!( AM.anchored )) var/t = get_dir(src, AM) if (istype(AM, /obj/structure/window)) - if(AM:ini_dir == NORTHWEST || AM:ini_dir == NORTHEAST || AM:ini_dir == SOUTHWEST || AM:ini_dir == SOUTHEAST) + var/obj/structure/window/W = AM + if(W.is_full_window()) for(var/obj/structure/window/win in get_step(AM,t)) now_pushing = 0 return diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 6bbf2553c9b..c0c23975188 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -98,7 +98,8 @@ brute -= brute / 2 if(status & ORGAN_BROKEN && prob(40) && brute) - owner.emote("scream") //getting hit on broken hand hurts + if (!(owner.species && (owner.species.flags & NO_PAIN))) + owner.emote("scream") //getting hit on broken hand hurts if(used_weapon) add_autopsy_data("[used_weapon]", brute + burn) @@ -648,7 +649,7 @@ Note that amputating the affected organ does in fact remove the infection from t if(status & ORGAN_ROBOT && !no_explode && sabotaged) owner.visible_message("\red \The [owner]'s [display_name] explodes violently!",\ "\red Your [display_name] explodes!",\ - "You hear an explosion followed by a scream!") + "You hear an explosion!") explosion(get_turf(owner),-1,-1,2,3) var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() spark_system.set_up(5, 0, owner) diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 46e8f309547..04009c47442 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -50,7 +50,7 @@ var/list/solars_list = list() S.glass_type = /obj/item/stack/sheet/glass S.anchored = 1 S.loc = src - if(S.glass_type == /obj/item/stack/sheet/rglass) //if the panel is in reinforced glass + if(S.glass_type == /obj/item/stack/sheet/glass/reinforced) //if the panel is in reinforced glass health *= 2 //this need to be placed here, because panels already on the map don't have an assembly linked to update_icon() @@ -248,7 +248,7 @@ var/list/solars_list = list() playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) return 1 - if(istype(W, /obj/item/stack/sheet/glass) || istype(W, /obj/item/stack/sheet/rglass)) + if(istype(W, /obj/item/stack/sheet/glass)) var/obj/item/stack/sheet/S = W if(S.use(2)) glass_type = W.type @@ -557,4 +557,4 @@ var/list/solars_list = list() var/href = "-[href]=-[Min]'>- [(C?C : 0)] [href]=[Min]'>+[href]=[Max]'>+" if(Limit) return "[href]=-[Limit]'>-"+rate+"[href]=[Limit]'>+" - return rate \ No newline at end of file + return rate diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index 2054095660a..c6176f2b867 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -1984,7 +1984,8 @@ datum if(affecting.take_damage(4*toxpwr, 2*toxpwr)) H.UpdateDamageIcon() if(prob(meltprob)) //Applies disfigurement - H.emote("scream") + if (!(H.species && (H.species.flags & NO_PAIN))) + H.emote("scream") H.status_flags |= DISFIGURED else M.take_organ_damage(min(6*toxpwr, volume * toxpwr)) // uses min() and volume to make sure they aren't being sprayed in trace amounts (1 unit != insta rape) -- Doohl @@ -2146,7 +2147,7 @@ datum if ( eyes_covered && mouth_covered ) victim << "\red Your [safe_thing] protects you from the pepperspray!" return - else if ( mouth_covered ) // Reduced effects if partially protected + else if ( eyes_covered ) // Reduced effects if partially protected victim << "\red Your [safe_thing] protect you from most of the pepperspray!" victim.eye_blurry = max(M.eye_blurry, 15) victim.eye_blind = max(M.eye_blind, 5) @@ -2155,13 +2156,15 @@ datum //victim.Paralyse(10) //victim.drop_item() return - else if ( eyes_covered ) // Eye cover is better than mouth cover - victim << "\red Your [safe_thing] protects your eyes from the pepperspray!" - victim.emote("scream") + else if ( mouth_covered ) // Mouth cover is better than eye cover + victim << "\red Your [safe_thing] protects your face from the pepperspray!" + if (!(victim.species && (victim.species.flags & NO_PAIN))) + victim.emote("scream") victim.eye_blurry = max(M.eye_blurry, 5) return else // Oh dear :D - victim.emote("scream") + if (!(victim.species && (victim.species.flags & NO_PAIN))) + victim.emote("scream") victim << "\red You're sprayed directly in the eyes with pepperspray!" victim.eye_blurry = max(M.eye_blurry, 25) victim.eye_blind = max(M.eye_blind, 10) diff --git a/code/modules/research/xenoarchaeology/finds/finds.dm b/code/modules/research/xenoarchaeology/finds/finds.dm index 343e54a3bf3..4861a53ffc5 100644 --- a/code/modules/research/xenoarchaeology/finds/finds.dm +++ b/code/modules/research/xenoarchaeology/finds/finds.dm @@ -235,7 +235,7 @@ possible_spawns += /obj/item/stack/sheet/metal possible_spawns += /obj/item/stack/sheet/plasteel possible_spawns += /obj/item/stack/sheet/glass - possible_spawns += /obj/item/stack/sheet/rglass + possible_spawns += /obj/item/stack/sheet/glass/reinforced possible_spawns += /obj/item/stack/sheet/mineral/phoron possible_spawns += /obj/item/stack/sheet/mineral/gold possible_spawns += /obj/item/stack/sheet/mineral/silver diff --git a/code/setup.dm b/code/setup.dm index 34bb33cf03e..035f2d679f2 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -633,10 +633,9 @@ var/list/liftable_structures = list(\ #define R_SPAWN 4096 #define R_MOD 8192 #define R_MENTOR 16384 +#define R_HOST 32768 -#define R_MAXPERMISSION 16384 //This holds the maximum value for a permission. It is used in iteration, so keep it updated. - -#define R_HOST 65535 +#define R_MAXPERMISSION 32768 //This holds the maximum value for a permission. It is used in iteration, so keep it updated. //Preference toggles #define SOUND_ADMINHELP 1 diff --git a/code/stylesheet.dm b/code/stylesheet.dm index 67e13f8e328..2e7427c3439 100644 --- a/code/stylesheet.dm +++ b/code/stylesheet.dm @@ -20,6 +20,7 @@ em {font-style: normal; font-weight: bold;} .adminobserver {color: #996600; font-weight: bold;} .admin {color: #386aff; font-weight: bold;} .adminsay {color: #9611D4; font-weight: bold;} +.headminsay {color: #5A0A7F; font-weight: bold;} .name { font-weight: bold;} diff --git a/code/unused/hivebot/hive_modules.dm b/code/unused/hivebot/hive_modules.dm index c0ae3196ca9..09a0207ec61 100644 --- a/code/unused/hivebot/hive_modules.dm +++ b/code/unused/hivebot/hive_modules.dm @@ -48,7 +48,7 @@ M.amount = 50 src.modules += M - var/obj/item/stack/sheet/rglass/G = new /obj/item/stack/sheet/rglass(src) + var/obj/item/stack/sheet/glass/reinforced/G = new (src) G.amount = 50 src.modules += G diff --git a/code/unused/mining/machine_craftlathe_unused.dm b/code/unused/mining/machine_craftlathe_unused.dm index 0607c14632f..564e3a1f715 100644 --- a/code/unused/mining/machine_craftlathe_unused.dm +++ b/code/unused/mining/machine_craftlathe_unused.dm @@ -170,7 +170,7 @@ proc/check_craftlathe_recipe(var/list/param_recipe) CRAFT_ITEMS += new/datum/craftlathe_item("METAL","Metal",1,1,list("","","","","","","","",""),/obj/item/stack/sheet/metal) CRAFT_ITEMS += new/datum/craftlathe_item("R METAL","Reinforced Metal",1,1,list("","","","","","","","",""),/obj/item/stack/sheet/r_metal) CRAFT_ITEMS += new/datum/craftlathe_item("GLASS","Glass",1,1,list("","","","","","","","",""),/obj/item/stack/sheet/glass) - CRAFT_ITEMS += new/datum/craftlathe_item("R GLASS","Reinforced Glass",1,1,list("","","","","","","","",""),/obj/item/stack/sheet/rglass) + CRAFT_ITEMS += new/datum/craftlathe_item("R GLASS","Reinforced Glass",1,1,list("","","","","","","","",""),/obj/item/stack/sheet/glass/reinforced) CRAFT_ITEMS += new/datum/craftlathe_item("GOLD","Gold",1,1,list("","","","","","","","",""),/obj/item/stack/sheet/mineral/gold) CRAFT_ITEMS += new/datum/craftlathe_item("SILVER","Silver",1,1,list("","","","","","","","",""),/obj/item/stack/sheet/mineral/silver) CRAFT_ITEMS += new/datum/craftlathe_item("DIAMOND","Diamond",1,1,list("","","","","","","","",""),/obj/item/stack/sheet/mineral/diamond) @@ -230,4 +230,4 @@ proc/check_craftlathe_recipe(var/list/param_recipe) - return \ No newline at end of file + return diff --git a/maps/tgstation2.dmm b/maps/tgstation2.dmm index d278725b4ff..634b296dfbb 100644 --- a/maps/tgstation2.dmm +++ b/maps/tgstation2.dmm @@ -2071,7 +2071,7 @@ "aNQ" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/bridge) "aNR" = (/obj/machinery/light_switch{pixel_x = 27},/turf/simulated/floor{icon_state = "green"; dir = 4},/area/hydroponics) "aNS" = (/obj/machinery/light_switch{pixel_y = -25},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/bridge) -"aNT" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/table/reinforced,/obj/item/stack/sheet/rglass{amount = 50},/obj/item/stack/rods{amount = 50},/obj/machinery/camera{c_tag = "EVA East"; dir = 8},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/ai_monitored/storage/eva) +"aNT" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/table/reinforced,/obj/item/stack/sheet/glass/reinforced{amount = 50},/obj/item/stack/rods{amount = 50},/obj/machinery/camera{c_tag = "EVA East"; dir = 8},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/ai_monitored/storage/eva) "aNU" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/mime,/obj/machinery/light/small,/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms/two) "aNV" = (/obj/machinery/bookbinder{pixel_y = 0},/turf/simulated/floor/wood,/area/library) "aNW" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/library) @@ -3213,10 +3213,10 @@ "bjO" = (/obj/machinery/computer/card,/obj/item/weapon/card/id/captains_spare,/turf/simulated/floor/wood,/area/crew_quarters/captain) "bjP" = (/obj/structure/table/woodentable,/obj/item/weapon/book/manual/security_space_law,/turf/simulated/floor/wood,/area/crew_quarters/captain) "bjQ" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/rnd/research) -"bjR" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/mixing) +"bjR" = (/obj/item/stack/sheet/glass/reinforced,/obj/effect/decal/cleanable/cobweb,/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/maintenance/locker) "bjS" = (/turf/simulated/floor/airless,/area/rnd/test_area) -"bjT" = (/obj/effect/landmark/start{name = "Scientist"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/mixing) -"bjU" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/rnd/mixing) +"bjT" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/mixing) +"bjU" = (/obj/effect/landmark/start{name = "Scientist"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/mixing) "bjV" = (/obj/machinery/door/airlock{name = "Unisex Restrooms"; req_access_txt = "0"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet) "bjW" = (/obj/machinery/lapvend,/turf/simulated/floor,/area/storage/primary) "bjX" = (/turf/simulated/floor/airless{dir = 4; icon_state = "warning"},/area/rnd/test_area) @@ -3338,10 +3338,10 @@ "bmj" = (/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/obj/machinery/door/airlock/research{name = "Toxins Storage"; req_access_txt = "8"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/rnd/research) "bmk" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 8},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/research_starboard) "bml" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "white"},/area/rnd/research) -"bmm" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor{icon_state = "white"},/area/rnd/mixing) +"bmm" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/rnd/mixing) "bmn" = (/obj/structure/closet/emcloset,/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/hallway/secondary/entry/aft) "bmo" = (/turf/simulated/wall,/area/medical/patient_a) -"bmp" = (/obj/item/device/transfer_valve{pixel_x = -5},/obj/item/device/transfer_valve{pixel_x = -5},/obj/item/device/transfer_valve{pixel_x = 0},/obj/item/device/transfer_valve{pixel_x = 0},/obj/item/device/transfer_valve{pixel_x = 5},/obj/item/device/transfer_valve{pixel_x = 5},/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/floor{dir = 1; icon_state = "whitepurple"},/area/rnd/mixing) +"bmp" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor{icon_state = "white"},/area/rnd/mixing) "bmq" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft) "bmr" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/storage/emergency) "bms" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/storage/emergency) @@ -3414,7 +3414,7 @@ "bnH" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor{dir = 2; icon_state = "yellowcorner"},/area/hallway/primary/aft) "bnI" = (/turf/simulated/wall/r_wall,/area/maintenance/cargo) "bnJ" = (/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor{icon_state = "white"},/area/rnd/research) -"bnK" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan,/turf/simulated/wall/r_wall,/area/rnd/mixing) +"bnK" = (/obj/item/device/transfer_valve{pixel_x = -5},/obj/item/device/transfer_valve{pixel_x = -5},/obj/item/device/transfer_valve{pixel_x = 0},/obj/item/device/transfer_valve{pixel_x = 0},/obj/item/device/transfer_valve{pixel_x = 5},/obj/item/device/transfer_valve{pixel_x = 5},/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/floor{dir = 1; icon_state = "whitepurple"},/area/rnd/mixing) "bnL" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor{dir = 1; icon_state = "whiteredcorner"},/area/medical/patient_wing) "bnM" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/turf/simulated/floor{dir = 1; icon_state = "whitered_b"; tag = "icon-whitered_b (WEST)"},/area/medical/patient_wing) "bnN" = (/obj/machinery/camera{c_tag = "Medbay Patient Hallway - Port"; dir = 4; network = list("SS13")},/turf/simulated/floor{icon_state = "white"},/area/medical/patient_wing) @@ -3678,7 +3678,7 @@ "bsL" = (/obj/machinery/light{dir = 4},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/hallway/secondary/entry/aft) "bsM" = (/obj/item/weapon/screwdriver,/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/locker) "bsN" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "toxin_test_inner"; locked = 1; name = "Engineering External Access"; req_access = null; req_access_txt = "13"},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/research_starboard) -"bsO" = (/obj/item/stack/sheet/rglass,/obj/effect/decal/cleanable/cobweb,/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/maintenance/locker) +"bsO" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan,/turf/simulated/wall/r_wall,/area/rnd/mixing) "bsP" = (/obj/structure/closet/crate,/obj/item/weapon/coin/silver,/turf/simulated/floor/plating,/area/storage/emergency) "bsQ" = (/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/space,/area/shuttle/research/station) "bsR" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/shuttle/engine/heater{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating/airless,/area/shuttle/research/station) @@ -5369,7 +5369,7 @@ "bZm" = (/obj/machinery/computer/drone_control,/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/engine/drone_fabrication) "bZn" = (/obj/machinery/door/airlock/maintenance_hatch{frequency = 1379; icon_state = "door_closed"; id_tag = "engine_airlock_interior"; locked = 0; name = "Engine Airlock Interior"; req_access_txt = "10"},/turf/simulated/floor/plating,/area/engine/engine_room) "bZo" = (/obj/machinery/door/airlock/command{name = "Captain's Quarters"; req_access = null; req_access_txt = "20"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/crew_quarters/captain) -"bZp" = (/obj/machinery/door_control{desc = "A remote control switch for the medbay foyer."; id = "MedbayFoyerStar"; name = "Medbay Doors Control"; normaldoorcontrol = 1; pixel_x = 6; pixel_y = 28},/obj/structure/stool/bed/chair/office/dark{dir = 1},/obj/effect/landmark/start{name = "Medical Doctor"},/turf/simulated/floor{tag = "icon-vault (EAST)"; icon_state = "vault"; dir = 4},/area/medical/reception) +"bZp" = (/obj/machinery/cryopod/robot/right,/turf/simulated/floor/plating,/area/engine/drone_fabrication) "bZq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/locker) "bZr" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/locker) "bZs" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/medical/reception) @@ -5765,7 +5765,7 @@ "cgS" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "white"},/area/medical/reception) "cgT" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/maintenance/medbay) "cgU" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/maintenance/medbay) -"cgV" = (/obj/machinery/door_control{desc = "A remote control switch for the medbay foyer."; id = "MedbayFoyerPort"; name = "Medbay Doors Control"; normaldoorcontrol = 1; pixel_x = -16; pixel_y = 28; req_access_txt = null},/obj/structure/stool/bed/chair/office/dark{dir = 1},/obj/effect/landmark/start{name = "Medical Doctor"},/turf/simulated/floor{tag = "icon-vault (NORTH)"; icon_state = "vault"; dir = 1},/area/medical/reception) +"cgV" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/engine/drone_fabrication) "cgW" = (/obj/machinery/ai_status_display{layer = 4; pixel_y = 32},/obj/machinery/light{dir = 1},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 5},/area/engine/drone_fabrication) "cgX" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/reinforced,/obj/machinery/door_control{id = "xenobio5"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access_txt = "55"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/rnd/xenobiology) "cgY" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/rnd/xenobiology) @@ -5783,7 +5783,7 @@ "chk" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = 25},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/engine/engine_hallway) "chl" = (/obj/machinery/light{dir = 1},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor,/area/engine/engine_hallway) "chm" = (/obj/machinery/computer/drone_control,/turf/simulated/floor/plating,/area/engine/drone_fabrication) -"chn" = (/obj/machinery/light{dir = 1},/obj/effect/landmark{name = "JoinLateCyborg"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 9},/area/engine/drone_fabrication) +"chn" = (/obj/machinery/computer/cryopod/robot{pixel_y = 30},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engine/drone_fabrication) "cho" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/reception) "chp" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/engine/engine_hallway) "chq" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos) @@ -5937,7 +5937,7 @@ "cki" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/turf/simulated/floor,/area/atmos) "ckj" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/engine/engine_monitoring) "ckk" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "research_dock_inner"; locked = 1; name = "Shuttle Airlock"; req_access_txt = "13"},/turf/simulated/floor{icon_state = "white"},/area/rnd/docking) -"ckl" = (/obj/structure/closet/emcloset,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 5},/area/engine/engine_airlock) +"ckl" = (/obj/machinery/light{dir = 1},/obj/effect/landmark{name = "JoinLateCyborg"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 9},/area/engine/drone_fabrication) "ckm" = (/turf/simulated/floor,/area/engine/engine_monitoring) "ckn" = (/obj/machinery/shower{icon_state = "shower"; dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor,/area/engine/engine_airlock) "cko" = (/obj/machinery/light/small{dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/engine/engine_waste) @@ -6704,7 +6704,7 @@ "cyV" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor{icon_state = "blue"; dir = 6},/area/medical/surgeryobs) "cyW" = (/turf/simulated/floor/engine/nitrogen{dir = 4; icon_state = "warnplate"; name = "plating"},/area/engine/engine_room) "cyX" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engine/engine_room) -"cyY" = (/obj/machinery/computer/cryopod/robot{pixel_y = 30},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engine/drone_fabrication) +"cyY" = (/obj/machinery/door_control{desc = "A remote control switch for the medbay foyer."; id = "MedbayFoyerStar"; name = "Medbay Doors Control"; normaldoorcontrol = 1; pixel_x = 6; pixel_y = 28},/obj/structure/stool/bed/chair/office/dark{dir = 1},/obj/effect/landmark/start{name = "Medical Doctor"},/turf/simulated/floor{tag = "icon-vault (EAST)"; icon_state = "vault"; dir = 4},/area/medical/reception) "cyZ" = (/turf/simulated/floor/holofloor{dir = 10; icon_state = "green"},/area/holodeck/source_basketball) "cza" = (/obj/structure/holohoop{dir = 1},/turf/simulated/floor/holofloor{dir = 2; icon_state = "green"},/area/holodeck/source_basketball) "czb" = (/turf/simulated/floor/holofloor{dir = 6; icon_state = "green"},/area/holodeck/source_basketball) @@ -7538,7 +7538,7 @@ "cOX" = (/turf/simulated/wall,/area/maintenance/engi_engine) "cOY" = (/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) "cOZ" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) -"cPa" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/engine/drone_fabrication) +"cPa" = (/obj/machinery/door_control{desc = "A remote control switch for the medbay foyer."; id = "MedbayFoyerPort"; name = "Medbay Doors Control"; normaldoorcontrol = 1; pixel_x = -16; pixel_y = 28; req_access_txt = null},/obj/structure/stool/bed/chair/office/dark{dir = 1},/obj/effect/landmark/start{name = "Medical Doctor"},/turf/simulated/floor{tag = "icon-vault (NORTH)"; icon_state = "vault"; dir = 1},/area/medical/reception) "cPb" = (/turf/unsimulated/beach/sand{tag = "icon-desert"; icon_state = "desert"},/area/centcom/ferry) "cPc" = (/turf/unsimulated/floor{tag = "icon-whitehall (EAST)"; icon_state = "whitehall"; dir = 4},/area/centcom/holding) "cPd" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/engi_engine) @@ -7623,7 +7623,7 @@ "cQE" = (/obj/structure/table/woodentable{dir = 5},/obj/machinery/chem_dispenser/beer,/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/holding) "cQF" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/book/manual/barman_recipes,/obj/item/weapon/reagent_containers/glass/rag,/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/holding) "cQG" = (/obj/structure/table/woodentable{dir = 5},/obj/machinery/chem_dispenser/soda,/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/holding) -"cQH" = (/obj/machinery/cryopod/robot/right,/turf/simulated/floor/plating,/area/engine/drone_fabrication) +"cQH" = (/obj/machinery/door_control{desc = "A remote control-switch for Surgery."; id = "Surgery"; name = "Surgery"; normaldoorcontrol = 1; pixel_x = -24; pixel_y = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 9; icon_state = "blue"},/area/medical/surgeryprep) "cQI" = (/turf/unsimulated/floor{dir = 8; icon_state = "whitegreen"},/area/centcom/holding) "cQJ" = (/obj/machinery/atmospherics/tvalve/digital/bypass{dir = 1; icon_state = "map_tvalve0"; state = 0},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator) "cQK" = (/obj/machinery/power/terminal,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/substation/engineering) @@ -8576,7 +8576,7 @@ "diV" = (/obj/machinery/door/airlock/external{frequency = 1380; glass = 1380; icon_state = "door_locked"; id_tag = "centcom_shuttle_bay_door"; locked = 1; name = "Transport Airlock"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/ferry) "diW" = (/obj/machinery/computer/shuttle_control{req_access = null; req_access_txt = "101"; shuttle_tag = "Centcom"},/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom) "diX" = (/obj/structure/table/reinforced,/obj/item/device/megaphone,/obj/item/clothing/glasses/sunglasses/sechud,/obj/item/weapon/storage/box/trackimp,/obj/item/weapon/storage/box/cdeathalarm_kit,/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom/specops) -"diY" = (/obj/structure/table/reinforced,/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/metal{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/sheet/metal{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/sheet/metal{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/sheet/metal{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/sheet/plasteel{amount = 50},/obj/item/stack/sheet/plasteel{amount = 50},/obj/item/stack/sheet/plasteel{amount = 50},/obj/item/stack/sheet/plasteel{amount = 50},/obj/item/stack/sheet/rglass{amount = 50},/obj/item/stack/sheet/rglass{amount = 50},/obj/item/stack/sheet/rglass{amount = 50},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 3},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom) +"diY" = (/obj/structure/closet/emcloset,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 5},/area/engine/engine_airlock) "diZ" = (/obj/machinery/computer/shuttle_control/emergency,/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) "dja" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "specops_shuttle_fore_hatch"; locked = 1; name = "Forward Docking Hatch"; req_access_txt = "13"},/turf/simulated/shuttle/plating,/area/shuttle/specops/centcom) "djb" = (/obj/structure/table/reinforced,/obj/item/device/flash,/obj/item/device/flash,/obj/item/device/flash,/obj/item/device/flash,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/storage/belt/security/tactical,/obj/item/weapon/storage/belt/security/tactical,/obj/item/weapon/storage/belt/security/tactical,/obj/item/weapon/storage/belt/security/tactical,/obj/item/taperoll/police,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops) @@ -10534,11 +10534,11 @@ "dUD" = (/obj/machinery/door/airlock/atmos{name = "Outpost Atmospherics"; req_access_txt = "0"; req_one_access_txt = "65;10;24"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/universal{dir = 4},/turf/simulated/floor/plating,/area/research_outpost/atmos) "dUE" = (/obj/structure/table,/obj/machinery/bunsen_burner,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/research_outpost/sample) "dUF" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/filingcabinet/medical{pixel_y = 0},/turf/simulated/floor{icon_state = "blue"; dir = 4},/area/medical/reception) -"dUG" = (/obj/machinery/door_control{desc = "A remote control-switch for Surgery."; id = "Surgery"; name = "Surgery"; normaldoorcontrol = 1; pixel_x = -24; pixel_y = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 9; icon_state = "blue"},/area/medical/surgeryprep) +"dUG" = (/obj/machinery/door/airlock/hatch{icon_state = "door_locked"; id_tag = "engine_access_hatch"; locked = 1; req_access_txt = "10"},/obj/machinery/atmospherics/pipe/simple/visible/yellow,/turf/simulated/floor/plating,/area/engine/engine_room) "dUH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/research_outpost/maintstore1) "dUI" = (/obj/machinery/artifact_analyser,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/bluegrid,/area/research_outpost/anomaly) "dUJ" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/computer/crew,/turf/simulated/floor{icon_state = "blue"; dir = 8},/area/medical/reception) -"dUK" = (/obj/machinery/door/airlock/hatch{icon_state = "door_locked"; id_tag = "engine_access_hatch"; locked = 1; req_access_txt = "10"},/obj/machinery/atmospherics/pipe/simple/visible/yellow,/turf/simulated/floor/plating,/area/engine/engine_room) +"dUK" = (/obj/machinery/door/airlock/hatch{icon_state = "door_locked"; id_tag = "engine_access_hatch"; locked = 1; req_access_txt = "10"},/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor/plating,/area/engine/engine_room) "dUL" = (/obj/structure/table,/obj/item/device/radio{anchored = 1; broadcasting = 0; canhear_range = 1; frequency = 1487; icon = 'icons/obj/items.dmi'; icon_state = "red_phone"; listening = 1; name = "Reception Emergency Phone"},/turf/simulated/floor,/area/medical/reception) "dUM" = (/obj/structure/window/shuttle{icon_state = "window2"},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/centcom/evac) "dUN" = (/obj/structure/table,/obj/item/weapon/flame/lighter/random,/obj/item/weapon/crowbar,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/research_outpost/anomaly) @@ -10554,6 +10554,7 @@ "dUX" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/storage/box/cups,/obj/item/weapon/storage/box/cups{pixel_x = 2; pixel_y = 5},/turf/simulated/floor{dir = 9; icon_state = "blue"},/area/medical/reception) "dUY" = (/obj/structure/table,/obj/machinery/door/window/northright{name = "Medbay Lobby"; req_access_txt = "5"},/obj/item/weapon/reagent_containers/spray/cleaner{pixel_x = -5},/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/medical/reception) "dUZ" = (/obj/machinery/door/airlock/glass{name = "Central Access"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/hallway/primary/central_two) +"dVa" = (/obj/structure/table/reinforced,/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/metal{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/sheet/metal{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/sheet/metal{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/sheet/metal{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/sheet/plasteel{amount = 50},/obj/item/stack/sheet/plasteel{amount = 50},/obj/item/stack/sheet/plasteel{amount = 50},/obj/item/stack/sheet/plasteel{amount = 50},/obj/item/stack/sheet/glass/reinforced{amount = 50},/obj/item/stack/sheet/glass/reinforced{amount = 50},/obj/item/stack/sheet/glass/reinforced{amount = 50},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 3},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom) "dVb" = (/obj/machinery/meter,/obj/machinery/light/small,/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact (EAST)"},/turf/simulated/floor/plating,/area/research_outpost/atmos) "dVc" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/obj/machinery/door/airlock/research{name = "Spectrometry Lab"; req_access_txt = "65"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/research_outpost/spectro) "dVd" = (/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 5},/turf/simulated/floor/plating,/area/research_outpost/atmos) @@ -10999,6 +11000,7 @@ "edB" = (/obj/machinery/camera{c_tag = "SMES"; dir = 8; network = list("SS13","Supermatter")},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor,/area/engine/engine_smes) "edC" = (/obj/structure/table/reinforced,/obj/machinery/camera{c_tag = "Engine Monitoring Room"; dir = 4; network = list("SS13","Supermatter")},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor,/area/engine/engine_monitoring) "edD" = (/obj/machinery/portable_atmospherics/hydroponics/soil,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/grass,/area/research_outpost/maintstore1) +"edE" = (/obj/item/weapon/table_parts,/obj/item/weapon/rack_parts,/obj/item/stack/sheet/glass/reinforced{amount = 8},/obj/item/stack/rods{amount = 6},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/north_outpost) "edF" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/atmospherics/binary/pump/on{dir = 8; name = "Filter to Waste"; target_pressure = 4500},/turf/simulated/floor/plating,/area/research_outpost/atmos) "edG" = (/obj/machinery/atmospherics/binary/dp_vent_pump/high_volume{dir = 8; frequency = 1379; id = "engine_airlock_pump"},/turf/simulated/floor/plating,/area/engine/engine_airlock) "edH" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 32; pixel_y = 0},/turf/space,/area/space) @@ -11202,7 +11204,6 @@ "ehy" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 8; initialize_directions = 0; level = 1},/turf/simulated/floor/plating,/area/mine/north_outpost) "ehz" = (/obj/effect/decal/cleanable/dirt,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/north_outpost) "ehA" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{dir = 8; icon_state = "loadingarea"},/area/mine/north_outpost) -"ehB" = (/obj/item/weapon/table_parts,/obj/item/weapon/rack_parts,/obj/item/stack/sheet/rglass{amount = 8},/obj/item/stack/rods{amount = 6},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/north_outpost) "ehC" = (/obj/structure/plasticflaps/mining,/obj/machinery/conveyor{backwards = 2; dir = 2; forwards = 1; id = "mining_north"},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/north_outpost) "ehD" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored) "ehE" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'MOVING PARTS'."; name = "\improper MOVING PARTS"; pixel_y = 32},/obj/machinery/conveyor_switch{id = "mining_nort"; pixel_y = 10},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 1},/area/mine/explored) @@ -11258,7 +11259,6 @@ "eiE" = (/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = 32},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom) "eiF" = (/obj/structure/window/reinforced{dir = 5},/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/turf/simulated/floor/wood,/area/research_outpost/entry) "eiG" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/camera{c_tag = "Research Outpost Expedition Airlock"; dir = 4; network = list("Research","SS13")},/turf/simulated/floor/plating,/area/research_outpost/gearstore) -"eiH" = (/obj/machinery/door/airlock/hatch{icon_state = "door_locked"; id_tag = "engine_access_hatch"; locked = 1; req_access_txt = "10"},/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor/plating,/area/engine/engine_room) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -11390,11 +11390,11 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaaaaaeboqbhBbosboOboNboPboPboPboPboPboRboSaFNaFUaFTaFSaFRaYyaYyaYybdXaEvaYyaPEaPEaPEaPEaDGaHhaFZbpfaPEaGbbphbalaJfaJlbpqbcQbeebalbbJbefbPhbcSbcSbcSbehatFbvdaMabcmbvqaGvaGwaGraGsaGpaGqaGlaGmbaAbaBberbprbetbetbetaNPbevbaBbaDbexaGibclbdpbeyaGeaGdaGcbqlbwybwxbwJbwIaGKaGEaGDaGDaGMaGLaGNaGzaGzaGzaGPaGzaGzaGzaGzaGzaGAaGBaGBaGBaGCaGDaGDaGEaGDaGDaGFaGBaGBaHiaGzaHeaHpaHlaGzaHjaGDaGDaGDaGDaGDaGDaGDaGDaGDaGDaGDaGDaGDaGRaGPaGQaGzaGXaGSaGTaHaaHaaGYaGZaKQaStbeLaTMaTMaTNaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQbdQbijbiebpxbpwbpzbnAbePbePbeQbePbePbePbUVaNlaNlaNlaNlaDBaYyaZYbeSbeTaHvaYybVdbVebVdaPEaPEaPEaPEbpAaPEbVcblDbalbTpcnLbcQbRAbVabalbbJbarbUXbcSbcSbcSbfeatFbwKaMabcmbxHblvbgCbembfibfjbepbVtbhZbaAbpGbpSbpRbetbpTbetbobbqsbqrbaDbfrbVibVjbVgbVgbVgbVhbVfbqlbxJbxIbyybyxcxRdPwdPxdTPbmZcFsbVFcegceibVGbVHctbctbctaaZFaZFaZFaZFaZFbfDbVwbEuaZFctcbVybVxbVBaZFbfDbfybVIbVJbdzaZFaZFbVKaZFaZFcejbfOaZFbfDaZFaZFaZFaZFaZFaZFaZFaZFaZFaBDaZFaZFbdzbfQbfRbfSbfTbfUcGxcGybfWaaeaaaaaeaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQbdQbqvbqubqzbqwbqEbnAbfYbfZbgabgabgbbgcbqYbqUbrabrabrjbrhaYyaYyaYybcJbUgaYyaNlaNlaNlaNlbUfaEtaEtbrBbUdbUcbrGbUCbMpbYMbUqbUBbUjbalbTKbarbUibcSbKabcSbgzbyzbyAaMabcmasMbUsbUrbUubUtbUobUnbUpbfkbaAbaBbgFbsfbsBbshbsCbsfbgKbaBbaDbaDbUybUDbgObgPbclbUwbUxbqlbyCbyBbyDbqlbTqbTqbTqbTqbTqbTqbcqbcqbUMbUNbUJbUKbUNbUMbcqbcqbcqbcqbcqbcqbcqbcqbcqbcqbUObcqbcqbcqbcqbcqbcqcuObcqaZFaZFbURbhkbhkbTqbTqbTqbTqbTqbhmbhnbhnbhobhnaZFbhnbhobUSbhnbhpbTqcuRcuRcuRcvMaPtcBhaPtaPtaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQbdQbkUbkRbpxbpwbsLbnAbhtbePbhubhvbePbePbePauUbSSbSRbSRbRuaYyaZYbhzbcJbTzaYybsObsMbtdbsZbtobtebtebtpbtebtebtqbalaFibLsbbHbLwbTtbUCbTibarbTjbcSbcSbTkbhUbyEbyAaMabyHasMbTbbTbbTbbTbbTbbTbbtxbTbbaAbaBbtHbtEbtVbtMbtVbtWbunbaBbaDbaDbimbuCbiobipbclaGdbSVbqlbffaLXaLYbqlcqlcqncqSbTncrDcrGcrMcrFcqUcqVbTTbTUcqVbTOcpscoYcmTbTMbTNcmUcpMckbcrscpNbTRbTPbTScktcktclSbktbSibTqbTqbTJbTqbTLbTLbTqbiVbiWbiXbTqbTEbTFbTEbTqbhmbhnbhpbTqbTDbTIbTDbTqbThbTgbNtbTHbTGbkebhgaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQbdQbkUbkRbpxbpwbsLbnAbhtbePbhubhvbePbePbePauUbSSbSRbSRbRuaYyaZYbhzbcJbTzaYybjRbsMbtdbsZbtobtebtebtpbtebtebtqbalaFibLsbbHbLwbTtbUCbTibarbTjbcSbcSbTkbhUbyEbyAaMabyHasMbTbbTbbTbbTbbTbbTbbtxbTbbaAbaBbtHbtEbtVbtMbtVbtWbunbaBbaDbaDbimbuCbiobipbclaGdbSVbqlbffaLXaLYbqlcqlcqncqSbTncrDcrGcrMcrFcqUcqVbTTbTUcqVbTOcpscoYcmTbTMbTNcmUcpMckbcrscpNbTRbTPbTScktcktclSbktbSibTqbTqbTJbTqbTLbTLbTqbiVbiWbiXbTqbTEbTFbTEbTqbhmbhnbhpbTqbTDbTIbTDbTqbThbTgbNtbTHbTGbkebhgaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaaacbCbuQbuRbmdbvjbnAbjibePbjjbjkbjlbRxbePbRybRobRrbRsbRuaYyaYyaYyaYyaYyaYybSebSdbScbSbbvnbalbalbalbalbalbalbalbShbalbalbalbMVbalbSgbRFbSfbcSbcSbcSbjAbyzbyAaMabyJasMbRPbRObRRbRQbREbLrbRKbRIaaebaBbRMbRLbRUbvrbRWbRYbRZbaBaaebaDbjNbRSbjObjPbclaGdbRTbqlbyLbyKaLYbyMcqOcgPbSwbSxbSKbSLbSGbSIchochocgRcgScjtcjtbSOciEciDbSNbSMciAckcckbcjDbSQbSPcgecjvcjucgecgfbktbSibiSbkwbkxcgdbSlbkAbkBbkCbkDbkCbSjbkFbSsbkHbTqbcqbSrbSmbTqbSzbSEbSDbSvbNHbSAbNtbSubkSbkTbhgaaaaaaaaaaafaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabmRbmQbnxbnvbkRbvubvubvubvLbvubvWbikbwcbwkbnAbkWbkXbkYbkZblacaHcaGaJaaEtaEtaEtbwmbrabwqbrabrabrabrabwFbZXbZXbZZbwSbalbljblkcrwblmblnbloboAbZVblrblschfckRbTibgAbSfbcSbcSbZWbaratFbyAbztbzubxabxdbxcbxcbxfbxCbxhbxRcazbzmbaBbaBbaBbaBbznbaBbaBbaBbaBaaebaDcaqbRScahcajcaecafcadbqlbzEaLXaLYbqldVHdVIdVJcaXcaVbgUcUZbZscjtcjtcjtcjtcjtcjtbZNcaLcaQbSNcaUcaScaJckbdVwbZDcaKcgecjvcjucgedVLbktbSibiScbtbLZbLZcbpcbqcbmcbncbncbncbrcbncbhcbgbhlcbfcbkcbjbNtcbibNHcbdcbabXbbXfbNtbmPbkSbmsbhgaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaateaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabzwbzHbzBbzRbzObzYbzYbAjbAibApbnAbmSbmTbkZbmUbePbePbePaNlbZqbZrbYsbYtbYsbYsbYsbYtbYsaNlaNlbalbalbalbYubalblpblpblpblpblpblpboAbIwbnbbVobndbYwbYJbYLbYHbYIbqfbYFbYxbzFbzWbzVbAAbAzbABcwZbYSbTscDdbUkbRKbRIbAIbACbnybnzbBgbBdbnCbnzbnDbACaaebaDbnFbZobnFbaDbaDbaDbBobqlbzZaLXaLYbyMcqOcgPbZzbZAbZubgUdUSbZsdUXdUYdUVdUWdVnbZObZNbZMcmTdVpbZRbZQbZIckbbZGbZDbSPcgecjvcjucgecgfbktbSibiSdTXbnYdTYbXPbkxbocbodboebofbZSbpDbZTbohbhlbZUbsqchDbNtbVZbVAbVzbXBbVVbVXbNtbmPbkSborbhgaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaabzwbBCbBybBGbBEbBEbBEbBNbBEbBEbnAbotboubovbkZbePaaaaaaaaaaaeaaebowbowbowbowbowbowbowaaaaaaboxbXzbXybXAboBblpblpblpblpblpblpbXobXrbXsbqebXtbXvbPNboFbarbarbXwbarbarbAabAcbAbbAdbOxbXibTbbTbbTbbTbbTbbBQbTbbAIbCfbCUbCSbCXbCWbCXbCSbDbbCZaaebnFboVbXdbXabXcbXebnFbDdauWbAeaXObAfbqlbWmcqnbYlbYnbYjbixdUObYkdUJcgVdULbVWbZpdUFbYibYfcmTckbbYebYcbXYckbdUCbYbbXWbXVdUzdUzbXUdUwbktbSibiSdUubkxbkxbXPbXQbXNbXObXLbXMbXIbXJbXHbpFbhlbXGbXFbXEbNtbUYbUTbUPbXBbNHbUIbNtbSubkSbpMbhgaaaaaaaaaaaaaaebpNbpObMebpObMebpObpQaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaabzwbBCbBybBGbBEbBEbBEbBNbBEbBEbnAbotboubovbkZbePaaaaaaaaaaaeaaebowbowbowbowbowbowbowaaaaaaboxbXzbXybXAboBblpblpblpblpblpblpbXobXrbXsbqebXtbXvbPNboFbarbarbXwbarbarbAabAcbAbbAdbOxbXibTbbTbbTbbTbbTbbBQbTbbAIbCfbCUbCSbCXbCWbCXbCSbDbbCZaaebnFboVbXdbXabXcbXebnFbDdauWbAeaXObAfbqlbWmcqnbYlbYnbYjbixdUObYkdUJcPadULbVWcyYdUFbYibYfcmTckbbYebYcbXYckbdUCbYbbXWbXVdUzdUzbXUdUwbktbSibiSdUubkxbkxbXPbXQbXNbXObXLbXMbXIbXJbXHbpFbhlbXGbXFbXEbNtbUYbUTbUPbXBbNHbUIbNtbSubkSbpMbhgaaaaaaaaaaaaaaebpNbpObMebpObMebpObpQaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaceTbmcbDnbDnbDobvubEFbmRbmQbFibEFbnAbpUbpVbpWbpXbePaaaaaaaaaaaaaaabowbowbowbowbowbowbowaaaaaabpYbpZblpbWrbWqbWqbWqbWqbWqbWtbWubWqbWsbWxbWybWvbWwbWzbWAbarbqjbcSbWCbWBbBabBfbFnbCubOxbOxbInbGtbFubGRbGybTrbInbHvbGUbWbbWabWcbHGbWebWgbWhbHObHQbWkbWnbWobqFbaDbqGbnFbHSauWbCzbeibCBbqldUjdUkbWPdUibWObixdUebWNbWLbWMbWKbWKbWVbWUbWTbWSdUpbPZbWRbHJbPZbPZbPZbPZbWQbPZbPZbPZbktbktbktbSibiSdTXbnYdTYbWDbWEbrcbrdbrebrebrebpDbKEbrfbrgbtCbWJbWIbNtbUEbUzbWGbWHbNHbUvbNtbWFbmrbhgbhgaaaaaaaaaaaaaaebrobrpbrqbrrbrrbrsbroaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbrubrvbrwbrxblpbIyblpbZKbZKbZKccZbIvbIwblpblpbnbbqgbqTbMlbJXbrCbrDbrEbcSbcSbMkbCCbBfbFnbIibHYbIpbIkbIqbMrbMqbJNbRbbInaaebrQbMnbnzbqybIUbqybnzbMDbrUaaebnFbMBbMCbMvbaDbrZbnFbDdauWbDSbeiaLYbqlbLFbLGbLHbLIbLKbIVbJfbJabIVbLDbPubWfbLDbPZbLNbLMbPZbPZbLPbLObQFbJhbQIbQHbLSbLQbQVbPZbLWbLYbLUbLVbiSbMabLZbLZbMbbMcbkBbsFbrebrebrebpDbKEbsHbtCbStbMfbMdbtCbNEbMibNJbMhbNHbMjbNtbmPbsPbhgaaaaaaaaaaaaaaaaaebsQbsRbrqbrrbrqcfLbMeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowcfDbsUcfDbsVbsWbIyblpblpblpbJjblpbIvbIwbsXbalbalbsYbcSbndbJXbtabtbbLebSWbSWbKZbFcbFpbFobIhbBabLBbJobJmbJNbDNbCHbHWbInaaebrUbrUbJpbCSbJqbnzbJwbrUbrUaaebtvbtvbtvbtvbtvbtvbtvbJEbqlbKubyBbyDbqlbKvbMmbMmbHMbCGbIVbKbbJPbKfbKcbKBbKCbKebHJbKdbJWbKlbKkbKjbKmbKmbKnbKqbKmbKsbKrbKzbKxbKDbKAbKRbKQcuBbrbbKVbKWbKXbKYbkBbzPbkCbkCbucbpDbKEbuebuqbUAbKHbKGbuqbKIbKMbKLbKObGwbtCbtCbKPbhgbhgbRDbSpbSpbSpbSqbKSbrobrrbrqbrrbrrcfjbroaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -11409,18 +11409,18 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGpbGqbEHbEIbGpbGsbTybGubASbDZbwHbwGbwAbwzbwCbwBbwDbwDbwEbAabAabAabUQbAabAabAabAabAabAabAabAabAabAabAabAabAaecmeclecpbAabAabAabAabAabTAbAaauWauWauWauWbNiauWaxoaBsecvauWbzXbBxbBxbwXbxebTCbTWbTQbIVbwYbxbbwZbwQbPZbwRbTXbwMbwNbwObwPbwTbwVbwWbEMbEKbAgbAybAybATbAgbAqboobhQbhQbhQbhQbhQbhQbhQbhQbhQbhQbBRbxkbBqbBqbuqbxibxgbFjbtCbjfbjfbjfbFCbFDbFybjfbjfbjfbjfbjfbxmbxlbxnbTYbTYbTYbTYbTYbTYbTYbTYbTYbTYbTYbTYbTYbTYbTYbTYbTYbTYbTYbTYbTYbTYbTYbxXbmNbmNbtnbjBbjBbjSbjSbBSbjSbjSbjBbjBaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBTbHBbHCbHBbBTbHDbFSbFMbFPbTfbHHbEWbxrbxpbAUbxobHLbxtbFLbAUbxxbxybnqbkiaaaaaaaaaaaabGFbGfbHRbxwbHTblObQCbCtbxEbHXbBYbCtbxKbxFbxMbxLbxAbxzbLqbxBbTZbkLbxDbmvbmvbmvbmvbymbBmbBlbBlbBkbymbUabUebUbbubbxbbxObxNbykbxPbyibyjbygbyhbxZbyabyqbyrbwWbGebAybAybypbAgbAgbGebAqboobhQbGkbGrbCxbUUbCMbHEbGObGvbhQbCLbysbDpbDpbuqbyubytbGlbGwbDjbDMbDObDTbGMbGEbDsbDHbDJbDXbjfbywbyvbywbngbngbngbngbngaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaabxYbjBbxXbjBbjBbjSbjSbjSbjSbjSbjSbjSbjBbjBaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGpbHBbHBbHBbNvbNnbEWbOgbNdbNcbEWbEWbEsbJibAUbAUbAUbAUbAUbAUbEgbEhbEebEfaaabEdbnmbnmbErbJsbHVbEnbEjbHVbEibCtbDRbDQbDPbCtbDLbDBbDAbDzbEcbDYbDWbGHbGHbkLbDVbDUcjhbClbFtbymbzXbFvbBxbBxbFkbUlbOmbUmbIVbFqbFsbFrbENbPZbEYbFabPZbFebFfbFhbEEbEJbwWbAqbAqbAqbAqbAqbAqbAqbAqbpjbhQbKFbUGbUFbCxbCxbCxbCxbEDbhQbKtbAlbKpbKpbuqbSnbECbOWbEBbKgbKgbKgbKgbKhbIYbIYbKibKobJYbjfbEzbBJbEvbngbExbEwbJAbJzaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaebtybjBbptbpubpubjSbjSbjSbjSbjSbjSbjSbjSbjBbjBaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBTbHCbHCbHCbBTbKKbQvbQebKNbOUbEWbEWbFYbFWbFUbFxbFxbFxbFxbFxbFxbFzbFAbBtaaabCObLabFwbLcbLdbHVbFEbFBbHUbLgbCtbFHbYpbFIbCtbLlbLmbLnbFFbFObFNbFTbGHbFJbClbFKbmvbClbClbGSbymbFmbCgbFlbETbBxbUWbVbbTcbVkbGQbGPbGNbGWbGXbzzbmKbGYbFebFhbFhbEEbGTbwWbKwbVlbGVbmobKybVmbGxbkybpjbhQbCxbCxbLEbCxbCxbCxbCxbRqbhQbLCbAlbHPbHPbuqbGGbGJbGKbGLbGzbGBbjRbjRbjTbjUbjRbjRbjRbmmbGmbGibGgbGdbGcbGbbGabFZbKJaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabVnaaaaaeaaaaaabjBbjBbkQbjSbjSbjSbjSbjSbjSbjSbjSbjSbjSbjSbjBbjBaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaabGpbMwbMxbMybGpbMzbTybGubASbASbMAbMAbMAbASbASbkibBhbBhbkgbkgbkgbkgbnqbBtaaabBzbBubBwcdrbBDbBAbBBbVsbVpbVpbVMbBnbBjbBibCtbGHbGHbGHbGHbGHbVNbGHbGHbBsbBrbBpbmvbClbCjbCpbymbEbbCgbBxbCibHdbUWbVObSTbVQbCcbCebCdbCabLtbCbbtKbLhbBWbBXbBZbVUbBUbwWbBVbBMbBObmobBPbCEbCDbkybpjbhQbhQbhQbLEbCxbCxbCxbhQbhQbhQbCAbCybHPbHPbuqbCwbmlbGlbGwbHAbHybHzbHtbHubmpbCvbIYbCrbBIbjfbBKbBJbBLbngbHlbHkbBHbGnaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaebjBbjSbjSbjSbjSbjSbjSbjXbjSbHmbjSbjSbjSbjSbjSbjBbjBaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNObESbNPbESbNQbMoaaeaaaaaabASbNRbNSbNTbASaaabkibCKbCJbCIbCFbCFbCFbCNbBtaaabCObNWbCPbNYbNZbHVbMQbCQbMSbOdbCtbCRbqLbCTbVYbWdbWdbWdbWibWibWjbCYbClbClbClboJbmvbmvbmvbmvbymbymbDfbHwbDebymbWpbWXbWWbWZbWYbWpbXjbXmbXkbYzbXnbWpbwWbwWbwWbwWbwWbwWbDmbDibDlbmobDgbDvbDubkybpjbhQblzbYGbYAbIRbIQbITbISblzblUbDtbDrbOcblTbuqbDybmlbOabtCbjfbjfbjfbjfbjfbnKbjfbvgbIYbDabjfbnfcfdbnfbngbMYbIJbIGbngaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaabjBbulbulbulbulbulbulbILbjSbuPbulbHmbjSbjSbjSbjSbjBaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBTbHCbHCbHCbBTbKKbQvbQebKNbOUbEWbEWbFYbFWbFUbFxbFxbFxbFxbFxbFxbFzbFAbBtaaabCObLabFwbLcbLdbHVbFEbFBbHUbLgbCtbFHbYpbFIbCtbLlbLmbLnbFFbFObFNbFTbGHbFJbClbFKbmvbClbClbGSbymbFmbCgbFlbETbBxbUWbVbbTcbVkbGQbGPbGNbGWbGXbzzbmKbGYbFebFhbFhbEEbGTbwWbKwbVlbGVbmobKybVmbGxbkybpjbhQbCxbCxbLEbCxbCxbCxbCxbRqbhQbLCbAlbHPbHPbuqbGGbGJbGKbGLbGzbGBbjTbjTbjUbmmbjTbjTbjTbmpbGmbGibGgbGdbGcbGbbGabFZbKJaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabVnaaaaaeaaaaaabjBbjBbkQbjSbjSbjSbjSbjSbjSbjSbjSbjSbjSbjSbjBbjBaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaabGpbMwbMxbMybGpbMzbTybGubASbASbMAbMAbMAbASbASbkibBhbBhbkgbkgbkgbkgbnqbBtaaabBzbBubBwcdrbBDbBAbBBbVsbVpbVpbVMbBnbBjbBibCtbGHbGHbGHbGHbGHbVNbGHbGHbBsbBrbBpbmvbClbCjbCpbymbEbbCgbBxbCibHdbUWbVObSTbVQbCcbCebCdbCabLtbCbbtKbLhbBWbBXbBZbVUbBUbwWbBVbBMbBObmobBPbCEbCDbkybpjbhQbhQbhQbLEbCxbCxbCxbhQbhQbhQbCAbCybHPbHPbuqbCwbmlbGlbGwbHAbHybHzbHtbHubnKbCvbIYbCrbBIbjfbBKbBJbBLbngbHlbHkbBHbGnaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaebjBbjSbjSbjSbjSbjSbjSbjXbjSbHmbjSbjSbjSbjSbjSbjBbjBaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNObESbNPbESbNQbMoaaeaaaaaabASbNRbNSbNTbASaaabkibCKbCJbCIbCFbCFbCFbCNbBtaaabCObNWbCPbNYbNZbHVbMQbCQbMSbOdbCtbCRbqLbCTbVYbWdbWdbWdbWibWibWjbCYbClbClbClboJbmvbmvbmvbmvbymbymbDfbHwbDebymbWpbWXbWWbWZbWYbWpbXjbXmbXkbYzbXnbWpbwWbwWbwWbwWbwWbwWbDmbDibDlbmobDgbDvbDubkybpjbhQblzbYGbYAbIRbIQbITbISblzblUbDtbDrbOcblTbuqbDybmlbOabtCbjfbjfbjfbjfbjfbsObjfbvgbIYbDabjfbnfcfdbnfbngbMYbIJbIGbngaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaabjBbulbulbulbulbulbulbILbjSbuPbulbHmbjSbjSbjSbjSbjBaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaebnIbkibkibkibkibkgbnubnqbntaaabnnbnmbnmbnkbnlbHVbHVbnibHVbnhbCtbkpbkobnHbCtbgXbgXbgXbgXbgXbgXbgXbgXbnGbnBbZebYObZkbZibmvbymblCbmwbvJbmxbvMbZlbZYbZFcaccabcatbZYcavcaucaAcaycaEbmVbmWbmibmXbmYbidbnabncbnabmoblYbmbblYbkybpjbhQbmecaIcaFbmhbmgbplbmfbDqblUbuqbmjbuqbuqbuZbsabmlbsabvaaaebjcblZbvfbswbCqbswbCsbmtbnEbjfbriblSbpPbngbnwbnjbnjbolaaLaaLaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabombmNbmNbmNbmNbmNbmNbmNcbvbmLbjSbjSbjSbjSbmObmLbEOaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaBcaCcaCcaDbpbbkiboZbkgbpabkiaaaaaaaaaaaabGFbQybQzbQAbQBefBbHVbCtboWboUbBYbCtbgXbmEbmGbmFbmCcbFbmDbgXccbccbccbccbccbboJbnZbnXcclboMbpkboLboQccNcdlccWcdscdmcdscducdscdycdDcdAcdGbokbojbokbozboCbrkboyboGboIboDboEbnMbnLcefcedbnQbnPbnSbnRbicbnTbnUbicbicbiabnWbnVbvYbnJbsabsabmlbsabwtaaebjcbjdcekbopcelboKbDxboYcepbjfbrXblSblXbngbngbngbngbngaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaabjBbpubpubpubpubpubpubpvbjSbptbpubkabjSbjSbjSbjSbjBaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkfbrKcbobrPbkgbkdbkjbkgbkhbkiaaMaaaaaaaaabGFbGFbGFbGFbGFbGFbCtbCtbkpbkobkmbCtbCtceqbgwbgxbgxbgwbgvbgXceWceuceuceYccbbisbymbymbqxbirbrlbfEbiAceZcfWcflcfYcfXcgacfZcgccgbcghcggcgibiFbiIbiJbiIbjgbjhbjnbiZbjabjbbjeblybjwblxblwblubqDbqDbjqbjIbjHbjGbjFbjEbjCbjzcgjbjMbjQbjLbjMcgmbjKbrWaaebjcbjdbszbswbGobswbGAcgnbjmbjfblXblSbnebmkbnfaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaebjBbjSbjSbjSbjSbjSbjSbjXbjSbkabjSbjSbjSbjSbjSbjBbjBaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccecaCcaCcaDblBblAblRbkibpibkiblJcgtcgDblJblJblKcgGblMblNblPblQecQblGblFblHbllblIbgwbugbjDbiNbiMchecgLchwchiciBchTccbbkMbkLbkKbkJbkIbiTbiTbldciFcjbciPbWpbWpcjCcjcbWpbWpckvcjQckwbidbnNbksbhebiKbkGbiKbiGbiHbkEbiHbiGbliblxbooblubknbkrblhbtYbtTbltbkNbhQbhQbtCbtCbtCbtCbtCblgbleblfbtCbjfbjfbjfbjfbjfbnKbjfbjfbjfbjfbjfbpdboTbpgbpebnfaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaabjBbjBbkQbjSbjSbjSbjSbjSbjSbjSbjSbjSbjSbjSbjBbjBaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccecaCcaCcaDblBblAblRbkibpibkiblJcgtcgDblJblJblKcgGblMblNblPblQecQblGblFblHbllblIbgwbugbjDbiNbiMchecgLchwchiciBchTccbbkMbkLbkKbkJbkIbiTbiTbldciFcjbciPbWpbWpcjCcjcbWpbWpckvcjQckwbidbnNbksbhebiKbkGbiKbiGbiHbkEbiHbiGbliblxbooblubknbkrblhbtYbtTbltbkNbhQbhQbtCbtCbtCbtCbtCblgbleblfbtCbjfbjfbjfbjfbjfbsObjfbjfbjfbjfbjfbpdboTbpgbpebnfaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaabjBbjBbkQbjSbjSbjSbjSbjSbjSbjSbjSbjSbjSbjSbjBbjBaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaambCVaamaamaamaamaamaaaaaaaaaaaaaaaaaaaaeaaeaaabxWbxTbxTbxTbxVbxTbxTbupburblJbuockzblJbuIbuJbuGbuHckAbuEbuAbuBbuObuMbuLbxUbuKbgwbugbwLbxjbiMclnbgXclwclwclwclwclwbtQbkLbymbCnbvlbtSbtRbtIclDcnwcnpbWpbtNbtPbtObuibiDbujbukbumbwUbhebksaJzbiKbtUbtXbiGbtZbuabufbiGbtcblxbpjblublubsIbsIbsIbsIbsIbsIblubuScovcnAcowbvkbtCbtCbtFbtCbtCbvsbuUbvcbuTblXbGCblXblXbvebtlbtkcpwcpabtjbnfbnfbnfaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaebtybjBbuPbulbulbjSbjSbjSbjSbjSbjSbjSbjSbjBbjBaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeecwecxbsKcrecqfbthcrfbwnbwoblJbwlcrhblJblJbwubwvbwwcribwrbwsbAkblGblFblHbwibwgbgwbgwbwhbwjbgwcrlbgXcrncrmclwcrAclwboJbqZbqZbqZbqZbqZbqZbqZbWpcrQcrHbWpbrAbwfbqJbtDbiDbvTbvUbvVbwUbhebksbhebiKbvObvPbiGbvSbvQbvRbiGbvAbGIcrUcrWbKUbvIbvHbsrbvtbvvbqhcsmcshcsybBFcsBcshctsbvobvpeczctWctScuacuacuacuabGDcuacuacuacuacuabvFbvzbvxbvwcucbnfbnfbnfbnfaaaaaeaaaaaaaaaaajaajaajaaeaaaaaaaaeaaaaaaaaeaaaaaabxYbjBbxXbjBbjBbjSbjSbjSbjSbjSbjSbjSbjBbjBaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeecCecCbsKcuHcukbthcuKbqpbqqblJbqtcwzcwacwJcwAcwXcwKcxabqHbqAbqCbqNbqLbqKbqIbqSbqQbqPbqObqVbqXcxdcxccxxcxeczecyRclwboJbqZbpEbqWbqRbpCbpBbpycBpcCKcBycCNbppbpscCTbsmbiDbsnbsobsibwUbhebksbhebiKbpKbpLbiGbrOcCVbpJbiGbqiblxblxbsTblxbqbbqcbqbbqbbqbbqabsSbybbybbxSbqobybbudecGbqkecHbuddfTbyobxsbxqdfTdfTdfTdfTbylbxsbxqdfTdfTblXbsGcDfbsNcDpcDobsEcExcEycEycEycEycEycEycEycEycEycEycEycEycEycEycEycEybpmbpnbpnbpobjBbjBbjSbjSbqmbjSbjSbjBbjBaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaeaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabsgbsgbsgbsgbsgbsgbsgbsjbsscvgcvgcvgcvgcvgbstbsubsvbsvbsvbsAbuNblGblFblHbtsblIbttbslbtucECbspbtGbgXcHMcEKclwcHTclwbrNbqZbzxbzsbzsbzsbrMbrLbWpcIncHYbWpbrAbqJbrzbtDbiDbtAbtBbtzbwUbhebksbtJbiKbrmbrnbiGbiGbiGbiGbiGbsecIHblxbsTblxbrYbsdbrYbqdbsbbscbtibybcJabBvbrVctibudbuhbrRbrSbudbrTbADbADbADbAGbzJbzQbAsbAvbzibzabyXdfTcMgcLFcNTbnfbnfbnfbnfaaaaaeaaaaaaaaaaajaajaajaaeaaaaaaaaeaaaaaaaaeaaeaaebtrbtwbtmbtnbtybjBbjBbjSbmLbjSbjBbjBaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaeaaeaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaebsgctYctZcOfctXcRbbsgcufcvZdgkdgjcwYcrCcrrcrrbuKcBVcBVcBUcBZbAkblGblFblHcnCbuKcnzcRScnBcVhcnxcnybgXcWqcWiclwcWtclwboJbqZdZLdZOdZOdZOcyVbqZdYtdUGczmdYtczHdZRczodZHbiDdZGbtBcrVbwUcylcxUbxQbiKcyIcypbiKcONcdnbidcBbcugcuDcRdcRecRdcuSbqccvGbqdcvFcvEbsTbybcBrcAEcAEczIcALcAHcAMcAHcAOcANcCQcCPcCPcCRdfQdfQdgBcCUdgodgodgndfTbYUcxPbYWbYUaaaaaaaaaaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaecrLbEQbEQbFgbtybtybjBbjBbjBbjBbEOaaeaaeaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaeaaeaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaebsgctYctZcOfctXcRbbsgcufcvZdgkdgjcwYcrCcrrcrrbuKcBVcBVcBUcBZbAkblGblFblHcnCbuKcnzcRScnBcVhcnxcnybgXcWqcWiclwcWtclwboJbqZdZLdZOdZOdZOcyVbqZdYtcQHczmdYtczHdZRczodZHbiDdZGbtBcrVbwUcylcxUbxQbiKcyIcypbiKcONcdnbidcBbcugcuDcRdcRecRdcuSbqccvGbqdcvFcvEbsTbybcBrcAEcAEczIcALcAHcAMcAHcAOcANcCQcCPcCPcCRdfQdfQdgBcCUdgodgodgndfTbYUcxPbYWbYUaaaaaaaaaaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaecrLbEQbEQbFgbtybtybjBbjBbjBbjBbEOaaeaaeaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaeaaeaaebTebTebTebTebTebTebTebTebTebTebTebTebTeaaaaaacnmcnjcnjcnjcnlcWxbsgcqqcpdcnWcnQcEzcnnctVctRctIctHctCctBctActzcujcWCcuhcuibCtbgXbgXbgXbgXbgXbgXbgXclwclwclwclwclwboJbqZbqZdZrdZscuobqZbqZcupcutcuxdYtbiDbiDbiDbiDbiDbwUdZydZzbwUcqXcuycqXbiKcuAcuzbiKcJLcNGbiddZVbidearblxbsTblxcWKcuEctubqbcttcvEbsTbybcvKcvLcvLcvPcvOcvNcvUcvTcvRcvQcvWcblcBDcBzdgicBJdfQdfQdfQdfRdfSdfTculcumcunbYUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaaaaaaaaaaaaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaabTecnScqacnSbTecnOcpYcnObTecnMcpZcnMbTeaaaaaacBvcnjcnjcnlcnlcWMbsgcDacxbcvgdcVddhcFHcFlcFkcFnbYpbYpcFobYpbAkblGcEUblHcpCcBscEZcpucpEcpucEPbskcBIcCncWrcCEcCJbskboJbEaeaxbMXbMXcNicNkcNEcNFcmCcNDcNmcNscNleaeeaeeaudXBbwUbwUbwUcLscKZcLubiKbiKbiKbiKcNGcNGbidcWPbidcIfblxbsTblxcWUcDxcDxcERcEScFpcUBbybcJCcGecGecFXcGlcGjcFTcFRcFVcFUcGtcGmdfQdfQcWZdhndfQdhpdfQdfRdghdfTcFKcFMcFJbYUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaabTecnScnRcnSbTecnOcnPcnObTecnMcnNcnMbTeaaaaaacBvcnjcnlcnlcnlcYCcXdcYGcvYcvgclOcClbpIcsMcsEcBscoycoEcoDdgFbAkblGdaHcuhdaRdcHdcBdeCdeCdeCdeEdeZdeKdfNcBqcBmcBnbskboJbEaeabbMXbOscEpeaaeageahcEscEtcEqeadcEreafeaeeandXBdfXdgadfZcEBdgGcEBdgHdgRdgRdgYdgRdhabidbidbidbidblxcRfblxdhodhdcDzcDJcDybqhcUBbybdgPdgQdgQdgQccQbudcEebuddgTcDKcEfdgMdgMdgXdgWdgWdgVdgMdgMcDndgOdfTdhBdhzdhCbYUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -11441,11 +11441,11 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciHeaOaaaaaaaaaaamaaaaaaaaaeaTdvqdwHdvqdwGeckeblectecsecIeblectecsecIecJecteblectecsectecKbQGbQGcgxcdfcdgcdhceabQGcgvcgwbQGbQGbQGbQGbQGcddcrgcgucrgcaOcaOcaOcaOcaOcaOcaOcaOcWpcVTcVTcgocglcVFbClcgQbTBbsJbsDecTecNecUbYdbsybTBecWecVceLaaaaaaaaaaaaaaaaaabVubXKcgIcfwcaZccKcgKdXbcaZcgJdXadWUdWTchdchcdWXbVuaaeaaeaaaaaaaaaaaaciMaaabudcWucdCcgZcdIcgYcdCcgXcdFcgYcdCchabudaaaaaabCVaaaaaeaaaaaeaaaaaeaaadDdaaaaaeaaaaaeaaeaaeaaeciHaaacmdcmdcmdcmdaaacmdcmdcmdcmdcmdcmdcmdcmdcmdaaacmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaateaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciHciQecXecXecXecYedaedaedaecXedaedbedaedcedaedbedaedcedaedbedaedcedaecXedaedbedaedcedaeddaaabQGchqchtchychzcffcmgedfedeedkchgchlchpchjchkchpchOchpchNchUchSchRchJchJchIchFchCchMchMchKcWycVFbClchZbTBbTBbVPcoicohcoibVPcojbTBceLciiceLaaaaaaaaaaaaaaaaaabVucaZcimdWPcaZdXicincWzcaZceQceRceXcthbYXciobYTbZJaaaaaaaaaaaaaaaaaactyaaebudcWAcficitcfcciscfecircfcciqcfsciubudaaaaaaciHaaachWchWchWchWchWaaedDdaaechWchWchWchWchWaaeciHaaacmdcmdcmdcmdaaacmdcmdcmdcmdcmdcmdcmdcmdcmdaaacmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciHaaeaaeaaaaaaaamaaaaaaaaaaaebTecdXcdMcdWbTecdXcdMcdWbTecdNcdMcdLbTeaaabTecdNcdMcdLbTeaaaaaabQGbQGcfRcfRcfRcfRcfRciNcfRcgpciOciyceociLceoceocizceoceociwceociycixcdPciJcWRedledoedmedpciCcVFcjhcjfcjecjibVPctGbYdctFbVPctEaaeecPecOecPaaaaaaaaaaaaaaaaaabVucjacexbXKciVciUbXKciZcbNcgOaaeaaaciXaaLciQclJaaaaaaaaaaafaaaaaaaaaaaaaaabudcWSccCccCcfccgsccCccCcfccgsccCccCbudaaeaaeciHaaedNWdNYdNYdNYdNYdORdOPdSHdOSdOSdOSdOSdTTaaeciHaaacmdcmdcmdcmdaaacmdcmdcmdcmdcmdcmdcmdcmdcmdaaacmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciHaaaaaeaaeaaaaamaaaaaaaaaaaabTectJcgMctKbTectNchPctObTectLcemctMbTeaaabTectQbVqctPbTeaaaaaaaaacPacQHchncyYchbcgWcjmdDUcrjcrjcjkedqcgEcdYcehcjpcdYcehcgEbYocjocjnbYocgpcgpcVFcVvcWWcWVedrcVFbmvcjrcjqcjsbVPcoicqmcoibVPctEaaeaaaaaeaaaaaaaaaaaaaaaaaaaaabVucjacjzcjxcjycjycjxcfvdXybVuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabudcWXccCccCcfcchQccCccCcfcchQccCccCbudaaaaaaciHaaecfqcfqcfqcfqcfqaaadDdaaacfqcfqcfqcfqcfqaaaciHaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciHaaaaaeaaeaaaaamaaaaaaaaaaaabTectJcgMctKbTectNchPctObTectLcemctMbTeaaabTectQbVqctPbTeaaaaaaaaacgVbZpcklchnchbcgWcjmdDUcrjcrjcjkedqcgEcdYcehcjpcdYcehcgEbYocjocjnbYocgpcgpcVFcVvcWWcWVedrcVFbmvcjrcjqcjsbVPcoicqmcoibVPctEaaeaaaaaeaaaaaaaaaaaaaaaaaaaaabVucjacjzcjxcjycjycjxcfvdXybVuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabudcWXccCccCcfcchQccCccCcfcchQccCccCbudaaaaaaciHaaecfqcfqcfqcfqcfqaaadDdaaacfqcfqcfqcfqcfqaaaciHaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaamaaaaaaaaaaaabTecfBcgNcfBbTechVciechVbTebUhcesbUhbTeaaabTebUhbUhbVrbTeaaaaaaaaabYmcifbXTchmdYKcigcjmbYKcrjcjJcjKcjLbYrceDcakcjEcewcjFbYrcjGcjIcjHbYoaaaaaecVFedveducXaaaeaaabmvbClbClbCjbVPctUcpoctTbVPctEaaeaaeaaaaaaaaaaaaaaaaaaaaaaaabVucjOcjPdVQciGciGdVQbXKdVSbVuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabudccCccCccCcfccihccCccCcfccihccCccCbudaafaaaciHaaaaaaaaeaaeaaeaaaaaaedwaaeaaaaaaaaeaaeaaaaaaciHaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaAaaaaaaaaaaaebTecfBceGcfBbTechVcijchVbTebUhceIbUhbTeaaabTebUhbUhbUhbTeaaaaaaaaabYmbXZcikbYNbXZcigcjTcivcrjcjRcjWckabYrcjUckmckjckeckdbYrckrckpcknbYoaaaaaacVFedyedxcXbaaaaaabmvbClbClbmvbVPcrJcrJcrJbVPcubctmaaaaaaaaaaaaaaaaaaaaaaaaaaabVudVTckubXKbXKbXKbXKbXKdVUbVuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccQbudbudbudbudbudbudbudbudciKciKciKccQaaaaaaciHciHciHciHciHaaaaaaaaadyPaaaaaaaaaciHciHciHbCVciHaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaebTebTebTebTebTebTebTebTebTebTebTebTebTeaaabYybTebTebTebTeaaaaaaaaabYmcVjbXTbXZbXZbYacbHcbIcbKcbLcbycbAcbEcbGcbScbRcbVcbTcbOcbMcbQcbPbYoaaeaaaedzcVvcVucVFciWaaabmvcbwbClcbxciIaaeaaeaaeaaaciMaaeaaeaaaaaaaaaaaaaaaaaaaaaaaabZJbVubVubXCdVZdVQdVQdVQdVYbXCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXlbXlbXlaaaaaaaaaaaaaaaaaaaaaaaaaaaciHaaeedAaaeciHaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYmbYQbXTbYNbXZcigbXRbYKcrjccoccjedBbYredCccicchccgbYvbYrccfedGcklbYoaaLcVGcVGcVGcVGcVGcVGcVGbmvcbZcbYccaaaeaaaaaaaaeedHciXaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYCciGciGciGciGciGbYCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciHaaaaaeaaaciHaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYmbYQbXTbYNbXZcigbXRbYKcrjccoccjedBbYredCccicchccgbYvbYrccfedGdiYbYoaaLcVGcVGcVGcVGcVGcVGcVGbmvcbZcbYccaaaeaaaaaaaaeedHciXaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYCciGciGciGciGciGbYCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciHaaaaaeaaaciHaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaamaaaaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaacjgaaaaaaaaaaaaaaaaaaaaaaaabZbbZdbZfbZmdYLccAccvbYKcrjccwccxccycczcjjccGccFccHcjwbYrcjAedIcjBbYoaaacVGcVGcVGcVGcVGcVGcVGedKccsccpbmvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabVubYXbYRbYRbYRbYTbVuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciHciHciHciHciHaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaacfRcfRcfRcfRcfRcjSbZjbZjbZjbZjedLbZjccUccMccPccMccLbZjbZjbZnbZjbZjbZjcVGcVGcVGcVGcVGcVGcVGaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdaaaaaacmdcmdcmdcmdcmdcmdcmdaaaaaacmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaaaaaaaaeaaeaaaaaeaaeaaaaaaaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaacjYcaacaacaaclQclMclRclzclVcjZckoctkckqcksccXcdbcdecyUcCucBEcCucCucBobZCbZHckWbZEbZjcVGcVGcVGcVGcVGcVGcVGaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -11453,7 +11453,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaacdzedTcdwaaacdzedTcdwaaacdzedTcdwaaeaaeaaeaaeaaaaaacmnaaacjYcaacaacaaclQclMcolcoecRicotcRJcRIcSfcagcdBdyNcagefhcmGcEGcmObZCbZCbZCedVcmPcmQbZjeeaaaeaaDaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDaaecdzedTcdwaaacdzedTcdwaaecdzedTcdwaaeaaaaaaaaeaaecdEaaaaaacmpcaacaacaaclQclMeflefkefnefmefocRIcSfcagcdBefpefrefqefscEJeftcascascascnEcmPcQNbZjaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaacdzedTcdwaaecdzedTcdwaaacdzedTcdwaaaaaaaaaaaaaaeaaeaaaaaaaaaaaaaaaaaaaaecjVclzefucSJefvefwctkcPDbZCdmsdmndmfdlWdlhdlidlbdlcdlxckSdlqcmPcRDbZjaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaamaaDaaeaaacdzedTcdwaaecdzedTcdwaaacdzedTcdwaaeaaaaaaaaaaaaaaeaaecjMcjNcjNcjNcjNcOGcOGcOGcOGcOGcOxcOGbZjbZCbZCdkRbZjbZjbZjdUKcPWeiHbZjbZjbZjdkVcRccPSbZjaaeaaabCVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaamaaDaaeaaacdzedTcdwaaecdzedTcdwaaacdzedTcdwaaeaaaaaaaaaaaaaaeaaecjMcjNcjNcjNcjNcOGcOGcOGcOGcOGcOxcOGbZjbZCbZCdkRbZjbZjbZjdUGcPWdUKbZjbZjbZjdkVcRccPSbZjaaeaaabCVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaeaaaaaeaaeeedaaeaaeaaeeedaaeaaaaaeeedaaeaaaaaaaaaaaaaaackBckCckDeeedktdjecPqeegdgEdigdicdihdpKdicbZjcOWbZCdhrdhidhmcIGcLCcLDcLBcIGdhhdhidhybZCcFabZjaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDaaeeejeeheeleekeemeekeekeekeemeekeekeekeemeekeeoeeheeheeheepdideeqdhNeerdhGdhsclEeesdyKdyKdyKdyMefyefzbZjbZCbZCdhrdhidhmcwIcyWcKrcKQcwIdhhdhidhybZCcyhbZjaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactvctvctvctvctvaaactvctvctvctvctvaaactvctvctvctvctvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaeaaaaaeaaeeetaaeaaaaaeeetaaeaaaaaeeetaaeaaaaaaaaaaaaaaackBckCcmfeeDcmhdhlcjNeeEdyOdicdicdyQdyQdyRbZjbZCbZCdhqdhidhmctocyWcJFctDctodhhdhidhebZCbZCbZjaaaaaaaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -11650,7 +11650,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFYeidcFYaaaaaaaaaaaacFYeiBeizeiAcJHcJHcFYcJfcJjcIQcJfcJkcIQcJlcJmcIQcJfcJjcIQcJncIRdRcdRbdRadQZcJqcGrcIScITcIScGrcJrcJscJtcJucJucIRaaaaaacGFcHbcHbcHbcHbcHbcHbcHbcHbcHccHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeeJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqLdqLdqLdqLdqLdqLdqLdqLdqLdqL aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFYeiicFYcFYcFYcFYcFYcFYefLcJEcJEcJEeiCcFYcJGcJmcIQcJGcJgcIQcJGcJjcIQcJGcJicIQcJncIRcJIcJJcJJcJJcJJcGrcIScITcIScGrcJucJucJucJucJucIRaaaaaacJKcJKcJKcJKcJKcJKcJKcJKcJKcJKcJKcIRcIRcIRcIRcIRcIRcIRcIRcIRcIRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeeJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqLdqLdqLdqLdqLdqLdqLdqLdqL aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacIPcIPcIPcIPcIPcFYcLteieeigeihcJceifcFYeiDcJEcJEcJEeiCcFYcIQcIQcIQcIQcIQcIQcIQcIQcIQcIQcIQcIQcJncIRcJIcJJcJJcJJcJJcGrcGrcIKcGrcGrcJucJucJucJucJucIRcJKcJKcJKcJKcJKcJKcJNcJOcJPcIRcJQcJQcJQcIRcJQcJQcJQcJQcJQcJQcJQcJQcIRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeeJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqLdqLdqLdqLdqLdqLdqLdqL -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacIXcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIYcIZcJbcJTdmScLtcJEcJEcJEcJEefPcFYdiYcJEcJEcJEehVcFYcJYcJicIQcJfcJicIQcJZcJjcIQcJfcJmcIQcJncIRcKadQYdPKcKccKdcIRcKecKecKecIRcJucJucJucJucJucIRcKfcKgcKfcKhcKicJKcKjcKjcKjcKkcJQcJQcJQcKkcJQcKlcKmcKlcJQcKncKocKpcIRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeeJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqLdqLdqLdqLdqLdqLdqL +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacIXcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIYcIZcJbcJTdmScLtcJEcJEcJEcJEefPcFYdVacJEcJEcJEehVcFYcJYcJicIQcJfcJicIQcJZcJjcIQcJfcJmcIQcJncIRcKadQYdPKcKccKdcIRcKecKecKecIRcJucJucJucJucJucIRcKfcKgcKfcKhcKicJKcKjcKjcKjcKkcJQcJQcJQcKkcJQcKlcKmcKlcJQcKncKocKpcIRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeeJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqLdqLdqLdqLdqLdqLdqL aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacJvcJwcJwcJwcJwcJwcJwcJwcJwcJwcJwcJwcJwcJwcJxcJycJwcJwcJwcJzcJxcJAcJBcJDefMcFYefNcJEcJEcJEcJEcJVcFYeeBcJEcJEcJEefjcFYcJGcJjcJhcJGcJjcIQcJGcJXcIQcJGcKtcIQcJncIRcKucIRcKvcKwcKxcIRcJJcJJcJJcIRcKvcKwcKycIRcKzcIRcKAcKBcKAcKBcKAcJKcIRcIRcIRcIRcJQcJQcJQcIRcKCcKDcKlcKEcKCcKFcKGcKGcIRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeeJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqLdqLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqLdqLdqLdqLdqLdqL aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacIXcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcFYdjbcJEcJEcJEcJEeiacFYeibcJEcJEeiccFYcFYcFYcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcJncIRcJJcJJcKKcKbcKbcKbcKbcKbcKbcKbcKbcKbcKLcJJcJJcKMcKAcKAcKAcKAcKAcJKcKNcKjcJNcIRcJQcJQcJQcIRcKOcKOcKPcKOcKOcKFcKGcKGcIRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeeJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqLdqLdqLdqLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqLdqLdqLdqLdqL aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacIXcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIYdpicJDehWcFYehXefCefCdvmcJEcFYcFYehYcJEcJEcKScFYefJefKcFYdmUdmUdmUdmUdmUdmUdmTcLacLbcIPcJncIRcJJcJJcLccLdcLecLecLecLecLecLecLecLfcJIcJJcJJcJKcLgcLhcLicLjcLkcJKcLlcKjcJOcIRcJQcJQcJQcIRcLmcLmcKjcLmcLmcKFcKGcKGcIRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeeOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqLdqLdqLdqLdqLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqLdqLdqLdqLdqL @@ -12379,7 +12379,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadHndHndHndHndHndH aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadHndHndHndHndHndHndHndHndHndHndHndHndHVdHVdHndHndHndHndHndHndHndHndHndHndHndHndHndHndHndHndHndHndsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadGpdGpdGpdGpdGpdGpdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsaaaaaaaaaaaaaaaaaaaaaaaaaaaadsadsadsadsadsadsadsadqTdqTdBvdCidCidCidHSdCidCidCidCidIeegPegOegRegQegVegUegXegWegMegSegTegMdsadsadsadsadsadsadsadsadsadsadqTdqTdqTdsadsadsadsadqTdqTdqTdqTdqTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadHndHndHndHndHndHndHndHndHndHndHndHndHVdHVdHndHndHndHndHndHndHndHVdHVdHVdHndHndHndHndHndHndHndHndHndsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadGpdGpdGpdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsaaaaaaaaaaaaaaaaaaaaaaaaadsadsadsadsadsadsadsadqTdqTdBvdBvdCidCidHSdCidCidCidCiehcegZegYehbehaehhehgehjehieheehdehfegMdsadsadsadsadsadsadsadsadsadsadsadsadqTdqTdsadsadsadsadqTdqTdqTdqTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadHndHndHndHndHndHndHndHndHndHndHndHndHndHndHndHndHndHndHndHndHndHVdHVdHVdHVdHndHndHndHndHndHndHndHndHndHndsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsaaaaaaaaaadqTaaaaaaaaaaaadsadsadsadsadsadsadsadqTdqTdqTdBvdCidCidHSdCidCidCidCiegMegMegMegMegMegMehmehoehnegMehkehlegMdsadsadsadsadsadsadsadsadsadsadsadsadsadsadqTdqTdsadsadsadqTdqTdqTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadHndHndHndHndHndHndHndHndHndHndHndHndHndHndHndHndHndHndHndHndHndHVdHVdHVdHVdHndHndHndHndHndHndHndHndHndHndsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsaaaaaaaaaadsadsadsaaaaaaadsadsadsadsadsadsadsadsadsadqTdBvdCidCidIadIcehuehtehtehvehqehpehsehrehAehzehgehBehxehwehyegMdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadqTdqTdqTdsadsadqTdqTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadHndHndHndHndHndHndHndHndHndHndHndHndHndHndHndHndHndHndHndHndHndHVdHVdHVdHVdHndHndHndHndHndHndHndHndHndHndsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsaaaaaaaaaadsadsadsaaaaaaadsadsadsadsadsadsadsadsadsadqTdBvdCidCidIadIcehuehtehtehvehqehpehsehrehAehzehgedEehxehwehyegMdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadqTdqTdqTdsadsadqTdqTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadHndHndHndHndHndHndHndHndHVdHndHndHndHndHndHndHndHndHndHndHndHndHndHVdHVdHVdHVdHndHndHndHndHndHndHndHndHndHndHndsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsaaaaaaaaaadsadsadsaaaaaaaaaadsadsadsadsadsadsadsadsadqTdBvdCidCidCidCidHSdCidCiegMegMegMegMehCegMegMegMegMegMegMegMegMdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadqTdqTdqTdqTdqTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadHndHndHndHndHndHndHndHndHVdHVdHVdHndHndHndHndHndHndHndHndHndHndHndHndHndHVdHVdHVdHndHndHndHndHndHndHndHndHndHndHndHndsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsaaaaaaaaaaaaaaaaaaaaaaaaaaaadsadsadsadsadsadsadsadsadqTdBvdBvdCidCidCidHSdCidCidCidCiehDehEdMCdMCduDdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadqTdqTdqTdqTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadHndHndHndHndHndHndHndHndHVdHVdHVdHndHndHndHndHndHndHndHndHndHndHndHndHndHVdHVdHVdHndHndHndHndHndHndHndHndHndHndHndHndsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsadsadsadsadsadsadsadqTdqTdBvdCidCidIedHIdHJdCidCidCidCidCidCidCiduDdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadqTdqTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa