diff --git a/baystation12.dme b/baystation12.dme index ce8c26ee09..faa5547d4b 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -78,6 +78,7 @@ #include "code\controllers\autotransfer.dm" #include "code\controllers\configuration.dm" #include "code\controllers\failsafe.dm" +#include "code\controllers\hooks-defs.dm" #include "code\controllers\hooks.dm" #include "code\controllers\lighting_controller.dm" #include "code\controllers\master_controller.dm" @@ -178,8 +179,13 @@ #include "code\game\area\areas.dm" #include "code\game\area\Space Station 13 areas.dm" #include "code\game\dna\dna2.dm" +#include "code\game\dna\dna2_domutcheck.dm" #include "code\game\dna\dna2_helpers.dm" #include "code\game\dna\dna_modifier.dm" +#include "code\game\dna\genes\disabilities.dm" +#include "code\game\dna\genes\gene.dm" +#include "code\game\dna\genes\monkey.dm" +#include "code\game\dna\genes\powers.dm" #include "code\game\gamemodes\events.dm" #include "code\game\gamemodes\factions.dm" #include "code\game\gamemodes\game_mode.dm" @@ -439,6 +445,7 @@ #include "code\game\objects\effects\decals\Cleanable\humans.dm" #include "code\game\objects\effects\decals\Cleanable\misc.dm" #include "code\game\objects\effects\decals\Cleanable\robots.dm" +#include "code\game\objects\effects\decals\Cleanable\tracks.dm" #include "code\game\objects\effects\spawners\bombspawner.dm" #include "code\game\objects\effects\spawners\gibspawner.dm" #include "code\game\objects\effects\spawners\vaultspawner.dm" @@ -612,6 +619,7 @@ #include "code\game\objects\structures\crates_lockers\closets\secure\cargo.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\engineering.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\freezer.dm" +#include "code\game\objects\structures\crates_lockers\closets\secure\guncabinet.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\hydroponics.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\medical.dm" #include "code\game\objects\structures\crates_lockers\closets\secure\personal.dm" @@ -781,6 +789,7 @@ #include "code\modules\economy\TradeDestinations.dm" #include "code\modules\events\alien_infestation.dm" #include "code\modules\events\blob.dm" +#include "code\modules\events\borers.dm" #include "code\modules\events\brand_intelligence.dm" #include "code\modules\events\carp_migration.dm" #include "code\modules\events\comms_blackout.dm" @@ -1100,6 +1109,7 @@ #include "code\modules\projectiles\guns\projectile\pistol.dm" #include "code\modules\projectiles\guns\projectile\pneumatic.dm" #include "code\modules\projectiles\guns\projectile\revolver.dm" +#include "code\modules\projectiles\guns\projectile\rocket.dm" #include "code\modules\projectiles\guns\projectile\shotgun.dm" #include "code\modules\projectiles\projectile\animate.dm" #include "code\modules\projectiles\projectile\beams.dm" @@ -1130,6 +1140,7 @@ #include "code\modules\reagents\reagent_containers\robodropper.dm" #include "code\modules\reagents\reagent_containers\spray.dm" #include "code\modules\reagents\reagent_containers\syringes.dm" +#include "code\modules\reagents\reagent_containers\food\cans.dm" #include "code\modules\reagents\reagent_containers\food\condiment.dm" #include "code\modules\reagents\reagent_containers\food\drinks.dm" #include "code\modules\reagents\reagent_containers\food\snacks.dm" @@ -1301,6 +1312,7 @@ #include "code\WorkInProgress\Cael_Aislinn\Supermatter\LaserComputer.dm" #include "code\WorkInProgress\Cael_Aislinn\Supermatter\ZeroPointLaser.dm" #include "code\WorkInProgress\Chinsky\ashtray.dm" +#include "code\WorkInProgress\Chinsky\guestpass.dm" #include "code\WorkInProgress\Cib\MedicalSideEffects.dm" #include "code\WorkInProgress\kilakk\fax.dm" #include "code\WorkInProgress\Mini\atmos_control.dm" diff --git a/code/WorkInProgress/Cael_Aislinn/Jungle/jungle_temple.dm b/code/WorkInProgress/Cael_Aislinn/Jungle/jungle_temple.dm index 43292f02f2..20009c0a64 100644 --- a/code/WorkInProgress/Cael_Aislinn/Jungle/jungle_temple.dm +++ b/code/WorkInProgress/Cael_Aislinn/Jungle/jungle_temple.dm @@ -204,7 +204,7 @@ var/obj/structure/closet/crate/freezer/C = new(src.loc) var/num = rand(2,6) var/new_type = pick( - /obj/item/weapon/reagent_containers/food/drinks/beer, \ + /obj/item/weapon/reagent_containers/food/drinks/cans/beer, \ /obj/item/weapon/reagent_containers/food/drinks/tea, \ /obj/item/weapon/reagent_containers/food/drinks/dry_ramen, \ /obj/item/weapon/reagent_containers/food/snacks/candiedapple, \ diff --git a/code/WorkInProgress/Chinsky/ashtray.dm b/code/WorkInProgress/Chinsky/ashtray.dm index ab3a636251..5ec88ac8bd 100644 --- a/code/WorkInProgress/Chinsky/ashtray.dm +++ b/code/WorkInProgress/Chinsky/ashtray.dm @@ -17,35 +17,34 @@ /obj/item/ashtray/attackby(obj/item/weapon/W as obj, mob/user as mob) if (health < 1) return - if (istype(W,/obj/item/clothing/mask/cigarette) || istype(W, /obj/item/weapon/match)) - if(user) - if (contents.len >= max_butts) - user << "This ashtray is full." - return - user.u_equip(W) - W.loc = src - if ((user.client && user.s_active != src)) - user.client.screen -= W + if (istype(W,/obj/item/weapon/cigbutt) || istype(W,/obj/item/clothing/mask/cigarette) || istype(W, /obj/item/weapon/match)) + if (contents.len >= max_butts) + user << "This ashtray is full." + return + user.u_equip(W) + W.loc = src + + if (istype(W,/obj/item/clothing/mask/cigarette)) var/obj/item/clothing/mask/cigarette/cig = W if (cig.lit == 1) src.visible_message("[user] crushes [cig] in [src], putting it out.") - cig.smoketime = 0 + processing_objects.Remove(cig) + var/obj/item/butt = new cig.type_butt(src) + cig.transfer_fingerprints_to(butt) + del(cig) else if (cig.lit == 0) - if(istype(cig, /obj/item/weapon/match)) - user << "You place [cig] in [src] without even lighting it. Why would you do that?" - else - user << "You place [cig] in [src] without even smoking it. Why would you do that?" - else if (cig.lit == -1) - src.visible_message("[user] places [cig] in [src].") - user.update_inv_l_hand() - user.update_inv_r_hand() - add_fingerprint(user) - if (contents.len == max_butts) - icon_state = icon_full - desc = empty_desc + " It's stuffed full." - else if (contents.len > max_butts/2) - icon_state = icon_half - desc = empty_desc + " It's half-filled." + user << "You place [cig] in [src] without even smoking it. Why would you do that?" + + src.visible_message("[user] places [W] in [src].") + user.update_inv_l_hand() + user.update_inv_r_hand() + add_fingerprint(user) + if (contents.len == max_butts) + icon_state = icon_full + desc = empty_desc + " It's stuffed full." + else if (contents.len > max_butts/2) + icon_state = icon_half + desc = empty_desc + " It's half-filled." else health = max(0,health - W.force) user << "You hit [src] with [W]." @@ -62,7 +61,6 @@ if (contents.len) src.visible_message("\red [src] slams into [hit_atom] spilling its contents!") for (var/obj/item/clothing/mask/cigarette/O in contents) - contents -= O O.loc = src.loc icon_state = icon_empty return ..() @@ -70,7 +68,6 @@ /obj/item/ashtray/proc/die() src.visible_message("\red [src] shatters spilling its contents!") for (var/obj/item/clothing/mask/cigarette/O in contents) - contents -= O O.loc = src.loc icon_state = icon_broken diff --git a/code/WorkInProgress/Chinsky/guestpass.dm b/code/WorkInProgress/Chinsky/guestpass.dm new file mode 100644 index 0000000000..8a959c5b76 --- /dev/null +++ b/code/WorkInProgress/Chinsky/guestpass.dm @@ -0,0 +1,186 @@ +///////////////////////////////////////////// +//Guest pass //////////////////////////////// +///////////////////////////////////////////// +/obj/item/weapon/card/id/guest + name = "guest pass" + desc = "Allows temporary access to station areas." + icon_state = "guest" + + var/temp_access = list() //to prevent agent cards stealing access as permanent + var/expiration_time = 0 + var/reason = "NOT SPECIFIED" + +/obj/item/weapon/card/id/guest/GetAccess() + if (world.time > expiration_time) + return access + else + return temp_access + +/obj/item/weapon/card/id/guest/examine() + ..() + if (world.time < expiration_time) + usr << "\blue This pass expires at [worldtime2text(expiration_time)]." + else + usr << "\red It expired at [worldtime2text(expiration_time)]." + +/obj/item/weapon/card/id/guest/read() + if (world.time > expiration_time) + usr << "This pass expired at [worldtime2text(expiration_time)]." + else + usr << "This pass expires at [worldtime2text(expiration_time)]." + + usr << "It grants access to following areas:" + for (var/A in temp_access) + usr << "[get_access_desc(A)]." + usr << "Issuing reason: [reason]." + return + +///////////////////////////////////////////// +//Guest pass terminal//////////////////////// +///////////////////////////////////////////// + +/obj/machinery/computer/guestpass + name = "guest pass terminal" + icon_state = "guest" + density = 0 + + + var/obj/item/weapon/card/id/giver + var/list/accesses = list() + var/giv_name = "NOT SPECIFIED" + var/reason = "NOT SPECIFIED" + var/duration = 0 + + var/list/internal_log = list() + var/mode = 0 // 0 - making pass, 1 - viewing logs + +/obj/machinery/computer/guestpass/New() + ..() + uid = "[rand(100,999)]-G[rand(10,99)]" + +/obj/machinery/computer/guestpass/attackby(obj/O, mob/user) + if(istype(O, /obj/item/weapon/card/id)) + user.drop_item() + O.loc = src + giver = O + updateUsrDialog() + +/obj/machinery/computer/guestpass/attack_ai(var/mob/user as mob) + return attack_hand(user) + +/obj/machinery/computer/guestpass/attack_paw(var/mob/user as mob) + return attack_hand(user) + +/obj/machinery/computer/guestpass/attack_hand(var/mob/user as mob) + if(..()) + return + + user.set_machine(src) + var/dat + + if (mode == 1) //Logs + dat += "

Activity log


" + for (var/entry in internal_log) + dat += "[entry]

" + dat += "Print
" + dat += "Back
" + else + dat += "

Guest pass terminal #[uid]


" + dat += "View activity log

" + dat += "Issuing ID: [giver]
" + dat += "Issued to: [giv_name]
" + dat += "Reason: [reason]
" + dat += "Duration (minutes): [duration] m
" + dat += "Access to areas:
" + if (giver && giver.access) + for (var/A in giver.access) + var/area = get_access_desc(A) + if (A in accesses) + area = "[area]" + dat += "[area]
" + dat += "
Issue pass
" + + user << browse(dat, "window=guestpass;size=400x520") + onclose(user, "guestpass") + + +/obj/machinery/computer/guestpass/Topic(href, href_list) + if(..()) + return + usr.set_machine(src) + if (href_list["mode"]) + mode = text2num(href_list["mode"]) + + if (href_list["choice"]) + switch(href_list["choice"]) + if ("giv_name") + var/nam = input("Person pass is issued to", "Name", name) + if (nam) + giv_name = nam + if ("reason") + var/reas = input("Reason why pass is issued", "Reason", reason) + reason = reas + if ("duration") + var/dur = input("Duration (in minutes) during which pass is valid.", "Duration") as num + if (dur > 0 && dur < 30) + duration = dur + else + usr << "\red Invalid duration." + if ("access") + var/A = text2num(href_list["access"]) + if (A in accesses) + accesses.Remove(A) + else + accesses.Add(A) + if (href_list["action"]) + switch(href_list["action"]) + if ("id") + if (giver) + if(ishuman(usr)) + giver.loc = usr.loc + if(!usr.get_active_hand()) + usr.put_in_hands(giver) + giver = null + else + giver.loc = src.loc + giver = null + else + var/obj/item/I = usr.get_active_hand() + if (istype(I, /obj/item/weapon/card/id)) + usr.drop_item() + I.loc = src + giver = I + updateUsrDialog() + + if ("print") + var/dat = "

Activity log of guest pass terminal #[uid]


" + for (var/entry in internal_log) + dat += "[entry]

" + //usr << "Printing the log, standby..." + //sleep(50) + var/obj/item/weapon/paper/P = new/obj/item/weapon/paper( loc ) + P.name = "activity log" + P.info = dat + + if ("issue") + if (giver) + var/number = add_zero("[rand(0,9999)]", 4) + var/entry = "\[[worldtime2text()]\] Pass #[number] issued by [giver.registered_name] ([giver.assignment]) to [giv_name]. Reason: [reason]. Grants access to following areas: " + for (var/i=1 to accesses.len) + var/A = accesses[i] + if (A) + var/area = get_access_desc(A) + entry += "[i > 1 ? ", [area]" : "[area]"]" + entry += ". Expires at [worldtime2text(world.time + duration*10*60)]." + internal_log.Add(entry) + + var/obj/item/weapon/card/id/guest/pass = new(src.loc) + pass.temp_access = accesses.Copy() + pass.registered_name = giv_name + pass.expiration_time = world.time + duration*10*60 + pass.reason = reason + pass.name = "guest pass #[number]" + else + usr << "\red Cannot issue pass without issuing ID." + updateUsrDialog() + return \ No newline at end of file diff --git a/code/ZAS/Fire.dm b/code/ZAS/Fire.dm index a40746f52f..ddc06106f3 100644 --- a/code/ZAS/Fire.dm +++ b/code/ZAS/Fire.dm @@ -75,12 +75,12 @@ turf/simulated/hotspot_expose(exposed_temperature, exposed_volume, soh) //since the air is processed in fractions, we need to make sure not to have any minuscle residue or //the amount of moles might get to low for some functions to catch them and thus result in wonky behaviour - if(air_contents.oxygen < 0.001) + if(air_contents.oxygen < 0.1) air_contents.oxygen = 0 - if(air_contents.toxins < 0.001) + if(air_contents.toxins < 0.1) air_contents.toxins = 0 if(fuel) - if(fuel.moles < 0.001) + if(fuel.moles < 0.1) air_contents.trace_gases.Remove(fuel) //check if there is something to combust @@ -200,7 +200,7 @@ datum/gas_mixture/proc/zburn(obj/effect/decal/cleanable/liquid_fuel/liquid, forc if(liquid) //Liquid Fuel - if(liquid.amount <= 0) + if(liquid.amount <= 0.1) del liquid else total_fuel += liquid.amount @@ -257,9 +257,9 @@ datum/gas_mixture/proc/check_recombustability(obj/effect/decal/cleanable/liquid_ if(oxygen && (toxins || fuel || liquid)) if(liquid) return 1 - if (toxins) + if(toxins >= 0.1) return 1 - if(fuel) + if(fuel && fuel.moles >= 0.1) return 1 return 0 @@ -272,9 +272,9 @@ datum/gas_mixture/proc/check_combustability(obj/effect/decal/cleanable/liquid_fu if(oxygen && (toxins || fuel || liquid)) if(liquid) return 1 - if (toxins >= 0.7) + if (toxins >= 0.1) return 1 - if(fuel && fuel.moles >= 1.4) + if(fuel && fuel.moles >= 0.1) return 1 return 0 diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index 8da220bf67..7cfa15e53a 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -142,7 +142,7 @@ if(ismob(A)) var/mob/M = A if(client_check && !M.client) - L = recursive_mob_check(A, L, recursion_limit - 1, client_check, sight_check, include_radio) + L |= recursive_mob_check(A, L, recursion_limit - 1, client_check, sight_check, include_radio) continue if(sight_check && !isInSight(A, O)) continue @@ -155,7 +155,7 @@ L |= A if(isobj(A) || ismob(A)) - L = recursive_mob_check(A, L, recursion_limit - 1, client_check, sight_check, include_radio) + L |= recursive_mob_check(A, L, recursion_limit - 1, client_check, sight_check, include_radio) return L // The old system would loop through lists for a total of 5000 per function call, in an empty server. @@ -182,7 +182,7 @@ hear += A if(isobj(A) || ismob(A)) - hear = recursive_mob_check(A, hear, 3, 1, 0, 1) + hear |= recursive_mob_check(A, hear, 3, 1, 0, 1) return hear diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index cfca598adb..0ca515486b 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -773,4 +773,14 @@ proc for(var/O in A.overlays) var/image/I = O composite.Blend(icon(I.icon, I.icon_state, I.dir, 1), ICON_OVERLAY) - return composite \ No newline at end of file + return composite + +proc/adjust_brightness(var/color, var/value) + if (!color) return "#FFFFFF" + if (!value) return color + + var/list/RGB = ReadRGB(color) + RGB[1] = Clamp(RGB[1]+value,0,255) + RGB[2] = Clamp(RGB[2]+value,0,255) + RGB[3] = Clamp(RGB[3]+value,0,255) + return rgb(RGB[1],RGB[2],RGB[3]) \ No newline at end of file diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm index 20eb15d6af..261e8c6d75 100644 --- a/code/__HELPERS/type2type.dm +++ b/code/__HELPERS/type2type.dm @@ -164,6 +164,19 @@ proc/tg_list2text(list/list, glue=",") return text2list(return_file_text(filename),seperator) +//Turns a direction into text + +/proc/num2dir(direction) + switch(direction) + if(1.0) return NORTH + if(2.0) return SOUTH + if(4.0) return EAST + if(8.0) return WEST + else + world.log << "UNKNOWN DIRECTION: [direction]" + + + //Turns a direction into text /proc/dir2text(direction) switch(direction) diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm index cb840a1d90..112c3431e5 100644 --- a/code/_onclick/ai.dm +++ b/code/_onclick/ai.dm @@ -55,6 +55,7 @@ RestrainedClickOn(A) else */ + A.add_hiddenprint(src) A.attack_ai(src) /* diff --git a/code/_onclick/cyborg.dm b/code/_onclick/cyborg.dm index 640a09d045..d86faacbd1 100644 --- a/code/_onclick/cyborg.dm +++ b/code/_onclick/cyborg.dm @@ -48,6 +48,7 @@ // Cyborgs have no range-checking unless there is item use if(!W) + A.add_hiddenprint(src) A.attack_robot(src) return diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index b5b6cf7423..5f11d9f623 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -18,6 +18,7 @@ var/log_adminwarn = 0 // log warnings admins get about bomb construction and such var/log_pda = 0 // log pda messages var/log_hrefs = 0 // logs all links clicked in-game. Could be used for debugging and tracking down exploits + var/log_runtime = 0 // logs world.log to a file var/sql_enabled = 1 // for sql switching var/allow_admin_ooccolor = 0 // Allows admins with relevant permissions to have their own ooc colour var/allow_vote_restart = 0 // allow votes to restart @@ -62,6 +63,9 @@ var/automute_on = 0 //enables automuting/spam prevention var/jobs_have_minimal_access = 0 //determines whether jobs use minimal access or expanded access. + var/cult_ghostwriter = 1 //Allows ghosts to write in blood in cult rounds... + var/cult_ghostwriter_req_cultists = 10 //...so long as this many cultists are active. + var/disable_player_mice = 0 var/uneducated_mice = 0 //Set to 1 to prevent newly-spawned mice from understanding human speech @@ -242,6 +246,9 @@ if ("log_hrefs") config.log_hrefs = 1 + if ("log_runtime") + config.log_runtime = 1 + if("allow_admin_ooccolor") config.allow_admin_ooccolor = 1 @@ -455,10 +462,15 @@ else //probably windows, if not this should work anyway config.python_path = "python" + if("allow_cult_ghostwriter") + config.cult_ghostwriter = 1 + + if("req_cult_ghostwriter") + config.cult_ghostwriter_req_cultists = value + else diary << "Unknown setting in configuration: '[name]'" - else if(type == "game_options") if(!value) diary << "Unknown value for setting [name] in [filename]." diff --git a/code/controllers/hooks-defs.dm b/code/controllers/hooks-defs.dm new file mode 100644 index 0000000000..cb51229c9f --- /dev/null +++ b/code/controllers/hooks-defs.dm @@ -0,0 +1,17 @@ +/** + * Startup hook. + * Called in world.dm when the server starts. + */ +/hook/startup + +/** + * Roundstart hook. + * Called in gameticker.dm when a round starts. + */ +/hook/roundstart + +/** + * Roundend hook. + * Called in gameticker.dm when a round ends. + */ +/hook/roundend diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index 1e141a2ac2..d4e9258422 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -107,13 +107,13 @@ var/datum/data/record/L = new() L.fields["id"] = md5("[H.real_name][H.mind.assigned_role]") L.fields["name"] = H.real_name - L.fields["rank"] = H.mind.assigned_role + L.fields["rank"] = H.mind.assigned_role L.fields["age"] = H.age L.fields["sex"] = H.gender L.fields["b_type"] = H.b_type L.fields["b_dna"] = H.dna.unique_enzymes - L.fields["enzymes"] = H.dna.SE - L.fields["identity"] = H.dna.UI + L.fields["enzymes"] = H.dna.SE // Used in respawning + L.fields["identity"] = H.dna.UI // " L.fields["image"] = getFlatIcon(H,0) //This is god-awful locked += L return diff --git a/code/datums/diseases/appendicitis.dm b/code/datums/diseases/appendicitis.dm index 16b4008fef..502ce1e734 100644 --- a/code/datums/diseases/appendicitis.dm +++ b/code/datums/diseases/appendicitis.dm @@ -45,7 +45,7 @@ H.op_stage.appendix = 2.0 var/datum/organ/external/groin = H.get_organ("groin") - var/datum/wound/W = new /datum/wound/internal_bleeding(25) + var/datum/wound/W = new /datum/wound/internal_bleeding(20) H.adjustToxLoss(25) groin.wounds += W src.cure() diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 7cebf4f6ba..bdde89fc94 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -74,6 +74,8 @@ datum/mind current.mind = null if(new_character.mind) //remove any mind currently in our new body's mind variable new_character.mind.current = null + + nanomanager.user_transferred(current, new_character) // transfer active NanoUI instances to new user current = new_character //link ourself to our new body new_character.mind = src //and link our new body to ourself diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 9b1ccf64b0..58388c26a0 100755 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -128,12 +128,12 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee /obj/item/weapon/reagent_containers/food/drinks/bottle/goldschlager, /obj/item/weapon/storage/fancy/cigarettes/dromedaryco, /obj/item/weapon/lipstick/random, - /obj/item/weapon/reagent_containers/food/drinks/ale, - /obj/item/weapon/reagent_containers/food/drinks/ale, - /obj/item/weapon/reagent_containers/food/drinks/beer, - /obj/item/weapon/reagent_containers/food/drinks/beer, - /obj/item/weapon/reagent_containers/food/drinks/beer, - /obj/item/weapon/reagent_containers/food/drinks/beer) + /obj/item/weapon/reagent_containers/food/drinks/cans/ale, + /obj/item/weapon/reagent_containers/food/drinks/cans/ale, + /obj/item/weapon/reagent_containers/food/drinks/cans/beer, + /obj/item/weapon/reagent_containers/food/drinks/cans/beer, + /obj/item/weapon/reagent_containers/food/drinks/cans/beer, + /obj/item/weapon/reagent_containers/food/drinks/cans/beer) cost = 20 containertype = /obj/structure/closet/crate containername = "Party equipment" diff --git a/code/defines/obj.dm b/code/defines/obj.dm index 6c6269d301..e6a4a7a4cb 100644 --- a/code/defines/obj.dm +++ b/code/defines/obj.dm @@ -51,122 +51,194 @@ //This list tracks characters spawned in the world and cannot be modified in-game. Currently referenced by respawn_character(). var/locked[] = list() - proc/get_manifest(monochrome, OOC) - var/list/heads = new() - var/list/sec = new() - var/list/eng = new() - var/list/med = new() - var/list/sci = new() - var/list/civ = new() - var/list/bot = new() - var/list/misc = new() - var/list/isactive = new() - var/dat = {" - - - - "} - var/even = 0 - - // sort mobs - for(var/datum/data/record/t in data_core.general) - var/name = t.fields["name"] - var/rank = t.fields["rank"] - var/real_rank = t.fields["real_rank"] - if(OOC) - var/active = 0 - for(var/mob/M in player_list) - if(M.real_name == name && M.client && M.client.inactivity <= 10 * 60 * 10) - active = 1 - break - isactive[name] = active ? "Active" : "Inactive" - else - isactive[name] = t.fields["p_stat"] - +/obj/effect/datacore/proc/get_manifest(monochrome, OOC) + var/list/heads = new() + var/list/sec = new() + var/list/eng = new() + var/list/med = new() + var/list/sci = new() + var/list/civ = new() + var/list/bot = new() + var/list/misc = new() + var/list/isactive = new() + var/dat = {" + +
NameRankActivity
+ + "} + var/even = 0 + // sort mobs + for(var/datum/data/record/t in data_core.general) + var/name = t.fields["name"] + var/rank = t.fields["rank"] + var/real_rank = t.fields["real_rank"] + if(OOC) + var/active = 0 + for(var/mob/M in player_list) + if(M.real_name == name && M.client && M.client.inactivity <= 10 * 60 * 10) + active = 1 + break + isactive[name] = active ? "Active" : "Inactive" + else + isactive[name] = t.fields["p_stat"] //world << "[name]: [rank]" - //cael - to prevent multiple appearances of a player/job combination, add a continue after each line - var/department = 0 - if(real_rank in command_positions) - heads[name] = rank - department = 1 - if(real_rank in security_positions) - sec[name] = rank - department = 1 - if(real_rank in engineering_positions) - eng[name] = rank - department = 1 - if(real_rank in medical_positions) - med[name] = rank - department = 1 - if(real_rank in science_positions) - sci[name] = rank - department = 1 - if(real_rank in civilian_positions) - civ[name] = rank - department = 1 - if(real_rank in nonhuman_positions) - bot[name] = rank - department = 1 + var/department = 0 + if(real_rank in command_positions) + heads[name] = rank + department = 1 + if(real_rank in security_positions) + sec[name] = rank + department = 1 + if(real_rank in engineering_positions) + eng[name] = rank + department = 1 + if(real_rank in medical_positions) + med[name] = rank + department = 1 + if(real_rank in science_positions) + sci[name] = rank + department = 1 + if(real_rank in civilian_positions) + civ[name] = rank + department = 1 + if(real_rank in nonhuman_positions) + bot[name] = rank + department = 1 + if(!department && !(name in heads)) + misc[name] = rank + if(heads.len > 0) + dat += "" + for(name in heads) + dat += "" + even = !even + if(sec.len > 0) + dat += "" + for(name in sec) + dat += "" + even = !even + if(eng.len > 0) + dat += "" + for(name in eng) + dat += "" + even = !even + if(med.len > 0) + dat += "" + for(name in med) + dat += "" + even = !even + if(sci.len > 0) + dat += "" + for(name in sci) + dat += "" + even = !even + if(civ.len > 0) + dat += "" + for(name in civ) + dat += "" + even = !even + // in case somebody is insane and added them to the manifest, why not + if(bot.len > 0) + dat += "" + for(name in bot) + dat += "" + even = !even + // misc guys + if(misc.len > 0) + dat += "" + for(name in misc) + dat += "" + even = !even - if(!department && !(name in heads)) - misc[name] = rank - - if(heads.len > 0) - dat += "" - for(name in heads) - dat += "" - even = !even - if(sec.len > 0) - dat += "" - for(name in sec) - dat += "" - even = !even - if(eng.len > 0) - dat += "" - for(name in eng) - dat += "" - even = !even - if(med.len > 0) - dat += "" - for(name in med) - dat += "" - even = !even - if(sci.len > 0) - dat += "" - for(name in sci) - dat += "" - even = !even - if(civ.len > 0) - dat += "" - for(name in civ) - dat += "" - even = !even - // in case somebody is insane and added them to the manifest, why not - if(bot.len > 0) - dat += "" - for(name in bot) - dat += "" - even = !even - // misc guys - if(misc.len > 0) - dat += "" - for(name in misc) - dat += "" - even = !even + dat += "
NameRankActivity
Heads
[name][heads[name]][isactive[name]]
Security
[name][sec[name]][isactive[name]]
Engineering
[name][eng[name]][isactive[name]]
Medical
[name][med[name]][isactive[name]]
Science
[name][sci[name]][isactive[name]]
Civilian
[name][civ[name]][isactive[name]]
Silicon
[name][bot[name]][isactive[name]]
Miscellaneous
[name][misc[name]][isactive[name]]
Heads
[name][heads[name]][isactive[name]]
Security
[name][sec[name]][isactive[name]]
Engineering
[name][eng[name]][isactive[name]]
Medical
[name][med[name]][isactive[name]]
Science
[name][sci[name]][isactive[name]]
Civilian
[name][civ[name]][isactive[name]]
Silicon
[name][bot[name]][isactive[name]]
Miscellaneous
[name][misc[name]][isactive[name]]
" + dat = replacetext(dat, "\n", "") // so it can be placed on paper correctly + dat = replacetext(dat, "\t", "") + return dat + + +/* +We can't just insert in HTML into the nanoUI so we need the raw data to play with. +*/ + +/obj/effect/datacore/proc/get_manifest_json() + var/heads[0] + var/sec[0] + var/eng[0] + var/med[0] + var/sci[0] + var/civ[0] + var/bot[0] + var/misc[0] + for(var/datum/data/record/t in data_core.general) + var/name = sanitize(t.fields["name"]) + var/rank = sanitize(t.fields["rank"]) + var/real_rank = t.fields["real_rank"] + var/isactive = t.fields["p_stat"] + var/department = 0 + var/depthead = 0 // Department Heads will be placed at the top of their lists. + if(real_rank in command_positions) + heads[++heads.len] = list("name" = name, "rank" = rank, "active" = isactive) + department = 1 + depthead = 1 + if(rank=="Captain" && heads.len != 1) + heads.Swap(1,heads.len) + + if(real_rank in security_positions) + sec[++sec.len] = list("name" = name, "rank" = rank, "active" = isactive) + department = 1 + if(depthead && sec.len != 1) + sec.Swap(1,sec.len) + + if(real_rank in engineering_positions) + eng[++eng.len] = list("name" = name, "rank" = rank, "active" = isactive) + department = 1 + if(depthead && eng.len != 1) + eng.Swap(1,eng.len) + + if(real_rank in medical_positions) + med[++med.len] = list("name" = name, "rank" = rank, "active" = isactive) + department = 1 + if(depthead && med.len != 1) + med.Swap(1,med.len) + + if(real_rank in science_positions) + sci[++sci.len] = list("name" = name, "rank" = rank, "active" = isactive) + department = 1 + if(depthead && sci.len != 1) + sci.Swap(1,sci.len) + + if(real_rank in civilian_positions) + civ[++civ.len] = list("name" = name, "rank" = rank, "active" = isactive) + department = 1 + if(depthead && civ.len != 1) + civ.Swap(1,civ.len) + + if(real_rank in nonhuman_positions) + bot[++bot.len] = list("name" = name, "rank" = rank, "active" = isactive) + department = 1 + + if(!department && !(name in heads)) + misc[++misc.len] = list("name" = name, "rank" = rank, "active" = isactive) + + return list(\ + "heads" = heads,\ + "sec" = sec,\ + "eng" = eng,\ + "med" = med,\ + "sci" = sci,\ + "civ" = civ,\ + "bot" = bot,\ + "misc" = misc\ + ) - dat += "" - dat = replacetext(dat, "\n", "") // so it can be placed on paper correctly - dat = replacetext(dat, "\t", "") - return dat /obj/effect/laser name = "laser" diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index b84388f583..d48e2e10c6 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -325,6 +325,13 @@ icon = 'icons/obj/wizard.dmi' icon_state = "broom" +/obj/item/weapon/staff/gentcane + name = "Gentlemans Cane" + desc = "An ebony can with an ivory tip." + icon = 'icons/obj/weapons.dmi' + icon_state = "cane" + item_state = "stick" + /obj/item/weapon/staff/stick name = "stick" desc = "A great tool to drag someone else's drinks across the bar." diff --git a/code/game/atoms.dm b/code/game/atoms.dm index f5870a2499..109a95fe72 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -6,6 +6,7 @@ var/list/fingerprintshidden var/fingerprintslast = null var/list/blood_DNA + var/blood_color var/last_bumped = 0 var/pass_flags = 0 var/throwpass = 0 @@ -361,7 +362,9 @@ its easier to just keep the beam vertical. return 0 if(!blood_DNA || !istype(blood_DNA, /list)) //if our list of DNA doesn't exist yet (or isn't a list) initialise it. blood_DNA = list() - + blood_color = "#A10808" + if (M.species) + blood_color = M.species.blood_color //adding blood to humans else if (istype(src, /mob/living/carbon/human)) var/mob/living/carbon/human/H = src diff --git a/code/game/dna/dna2.dm b/code/game/dna/dna2.dm index 60da3893fa..e8f4ddc4a8 100644 --- a/code/game/dna/dna2.dm +++ b/code/game/dna/dna2.dm @@ -25,6 +25,8 @@ var/global/list/dna_activity_bounds[STRUCDNASIZE] // Used to determine what each block means (admin hax and species stuff on /vg/, mostly) var/global/list/assigned_blocks[STRUCDNASIZE] +var/global/list/datum/dna/gene/dna_genes[0] + // UI Indices (can change to mutblock style, if desired) #define DNA_UI_HAIR_R 1 #define DNA_UI_HAIR_G 2 @@ -41,21 +43,13 @@ var/global/list/assigned_blocks[STRUCDNASIZE] #define DNA_UI_HAIR_STYLE 13 #define DNA_UI_LENGTH 13 // Update this when you add something, or you WILL break shit. +///////////////// +// GENE DEFINES +///////////////// -/* Note RE: unassigned blocks - - Many genes in baycode are currently sitting unused - (compare setupgame.dm to the number of *BLOCK variables). - - This datum will return 0 (or equivalent) if asked about - a block 0 (which means the gene was unassigned). Setters - will silently return without performing any action. - - I have code to assign these genes in a streamlined manner, - but in order to avoid breaking things, I've left the - existing setupgame.dm intact. Please let me know if you - need this behavior changed. - */ +// Skip checking if it's already active. +// Used for genes that check for value rather than a binary on/off. +#define GENE_ALWAYS_ACTIVATE 1 /datum/dna // READ-ONLY, GETS OVERWRITTEN @@ -77,6 +71,27 @@ var/global/list/assigned_blocks[STRUCDNASIZE] var/b_type = "A+" // Should probably change to an integer => string map but I'm lazy. var/mutantrace = null // The type of mutant race the player is, if applicable (i.e. potato-man) var/real_name // Stores the real name of the person who originally got this dna datum. Used primarily for changelings, + + // New stuff + var/species = "Human" + +// Make a copy of this strand. +// USE THIS WHEN COPYING STUFF OR YOU'LL GET CORRUPTION! +/datum/dna/proc/Clone() + var/datum/dna/new_dna = new() + new_dna.unique_enzymes=unique_enzymes + new_dna.b_type=b_type + new_dna.mutantrace=mutantrace + new_dna.real_name=real_name + new_dna.species=species + for(var/b=1;b<=STRUCDNASIZE;b++) + new_dna.SE[b]=SE[b] + if(b<=DNA_UI_LENGTH) + new_dna.UI[b]=UI[b] + new_dna.UpdateUI() + new_dna.UpdateSE() + return new_dna + /////////////////////////////////////// // UNIQUE IDENTITY /////////////////////////////////////// @@ -84,7 +99,11 @@ var/global/list/assigned_blocks[STRUCDNASIZE] // Create random UI. /datum/dna/proc/ResetUI(var/defer=0) for(var/i=1,i<=DNA_UI_LENGTH,i++) - UI[i]=rand(0,4095) + switch(i) + if(DNA_UI_SKIN_TONE) + SetUIValueRange(DNA_UI_SKIN_TONE,rand(1,220),220,1) // Otherwise, it gets fucked + else + UI[i]=rand(0,4095) if(!defer) UpdateUI() @@ -110,13 +129,13 @@ var/global/list/assigned_blocks[STRUCDNASIZE] SetUIValueRange(DNA_UI_BEARD_G, character.g_facial, 255, 1) SetUIValueRange(DNA_UI_BEARD_B, character.b_facial, 255, 1) - SetUIValueRange(DNA_UI_EYES_R, character.r_eyes, 255, 1) - SetUIValueRange(DNA_UI_EYES_G, character.g_eyes, 255, 1) - SetUIValueRange(DNA_UI_EYES_B, character.b_eyes, 255, 1) + SetUIValueRange(DNA_UI_EYES_R, character.r_eyes, 255, 1) + SetUIValueRange(DNA_UI_EYES_G, character.g_eyes, 255, 1) + SetUIValueRange(DNA_UI_EYES_B, character.b_eyes, 255, 1) - SetUIValueRange(DNA_UI_SKIN_TONE, -character.s_tone+35, 220, 1) // WARNING: MATH. Blame the person that setup line 944 in modules/client/preferences.dm + SetUIValueRange(DNA_UI_SKIN_TONE, 35-character.s_tone, 220, 1) // Value can be negative. - SetUIState(DNA_UI_GENDER, character.gender!=MALE, 1) + SetUIState(DNA_UI_GENDER, character.gender!=MALE, 1) SetUIValueRange(DNA_UI_HAIR_STYLE, hair, hair_styles_list.len, 1) SetUIValueRange(DNA_UI_BEARD_STYLE, beard, facial_hair_styles_list.len,1) @@ -140,22 +159,18 @@ var/global/list/assigned_blocks[STRUCDNASIZE] // Set a DNA UI block's value, given a value and a max possible value. // Used in hair and facial styles (value being the index and maxvalue being the len of the hairstyle list) -/datum/dna/proc/SetUIValueRange(var/block,var/value,var/maxvalue,var/minvalue) +/datum/dna/proc/SetUIValueRange(var/block,var/value,var/maxvalue,var/defer=0) if (block<=0) return - if(value < minvalue) - value=minvalue - else if(value > maxvalue) - value=maxvalue ASSERT(maxvalue<=4095) var/range = (4095 / maxvalue) if(value) - SetUIValue(block,round(value * range)) + SetUIValue(block,round(value * range),defer) // Getter version of above. /datum/dna/proc/GetUIValueRange(var/block,var/maxvalue) if (block<=0) return 0 var/value = GetUIValue(block) - return round(1+(value / 4096)*maxvalue) + return round(1 +(value / 4096)*maxvalue) // Is the UI gene "on" or "off"? // For UI, this is simply a check of if the value is > 2050. @@ -238,6 +253,12 @@ var/global/list/assigned_blocks[STRUCDNASIZE] if(value) SetSEValue(block, value * range - rand(1,range-1)) +// Getter version of above. +/datum/dna/proc/GetSEValueRange(var/block,var/maxvalue) + if (block<=0) return 0 + var/value = GetSEValue(block) + return round(1 +(value / 4096)*maxvalue) + // Is the block "on" (1) or "off" (0)? (Un-assigned genes are always off.) /datum/dna/proc/GetSEState(var/block) if (block<=0) return 0 @@ -253,7 +274,7 @@ var/global/list/assigned_blocks[STRUCDNASIZE] if(on) val=rand(BOUNDS[DNA_ON_LOWERBOUND],BOUNDS[DNA_ON_UPPERBOUND]) else - val=rand(BOUNDS[DNA_OFF_LOWERBOUND],BOUNDS[DNA_OFF_UPPERBOUND]) + val=rand(1,BOUNDS[DNA_OFF_UPPERBOUND]) SetSEValue(block,val,defer) // Get hex-encoded SE block. diff --git a/code/game/dna/dna2_domutcheck.dm b/code/game/dna/dna2_domutcheck.dm new file mode 100644 index 0000000000..a53fc49c29 --- /dev/null +++ b/code/game/dna/dna2_domutcheck.dm @@ -0,0 +1,358 @@ +// (Re-)Apply mutations. +// TODO: Turn into a /mob proc, change inj to a bitflag for various forms of differing behavior. +// M: Mob to mess with +// connected: Machine we're in, type unchecked so I doubt it's used beyond monkeying +// flags: See below, bitfield. +#define MUTCHK_FORCED 1 +/proc/domutcheck(var/mob/living/M, var/connected=null, var/flags=0) + for(var/datum/dna/gene/gene in dna_genes) + if(!M) + return + if(!gene.block) + continue + + // Sanity checks, don't skip. + if(!gene.can_activate(M,flags)) + //testing("[M] - Failed to activate [gene.name] (can_activate fail).") + continue + + // Current state + var/gene_active = (gene.flags & GENE_ALWAYS_ACTIVATE) + if(!gene_active) + gene_active = M.dna.GetSEState(gene.block) + + // Prior state + var/gene_prior_status = (gene.type in M.active_genes) + + if((gene_active && !gene_prior_status) || (gene.flags & GENE_ALWAYS_ACTIVATE)) + //testing("[gene.name] activated!") + gene.activate(M,connected,flags) + if(M) + if(!(gene.flags & GENE_ALWAYS_ACTIVATE)) + M.active_genes |= gene.type + M.update_icon=1 + else if(!gene_active && gene_prior_status) + //testing("[gene.name] deactivated!") + gene.deactivate(M,connected,flags) + if(M) + M.active_genes -= gene.type + M.update_icon = 1 + //else + // testing("[M] - Failed to activate [gene.name] - [gene_active?"+":"-"]active, [gene_prior_status?"+":"-"]prior") + + + // PROC CONTINUES BELOW AFTER COMMENTED CODE. + +/* Old, inflexibile +/proc/domutcheck(var/mob/living/M, var/connected, var/flags) + if (!M) return + + M.dna.check_integrity() + + M.disabilities = 0 + M.sdisabilities = 0 + var/old_mutations = M.mutations + M.mutations = list() + M.pass_flags = 0 +// M.see_in_dark = 2 +// M.see_invisible = 0 + + if(PLANT in old_mutations) + M.mutations.Add(PLANT) + if(SKELETON in old_mutations) + M.mutations.Add(SKELETON) + if(FAT in old_mutations) + M.mutations.Add(FAT) + if(HUSK in old_mutations) + M.mutations.Add(HUSK) + + var/inj = (flags & MUTCHK_FROM_INJECTOR) == MUTCHK_FROM_INJECTOR + var/forced = (flags & MUTCHK_FORCED) == MUTCHK_FORCED + + if(M.dna.GetSEState(NOBREATHBLOCK)) + if(forced || probinj(45,inj) || (mNobreath in old_mutations)) + M << "\blue You feel no need to breathe." + M.mutations.Add(mNobreath) + if(M.dna.GetSEState(REMOTEVIEWBLOCK)) + if(forced || probinj(45,inj) || (mRemote in old_mutations)) + M << "\blue Your mind expands" + M.mutations.Add(mRemote) + M.verbs += /mob/living/carbon/human/proc/remoteobserve + if(M.dna.GetSEState(REGENERATEBLOCK)) + if(forced || probinj(45,inj) || (mRegen in old_mutations)) + M << "\blue You feel better" + M.mutations.Add(mRegen) + if(M.dna.GetSEState(INCREASERUNBLOCK)) + if(forced || probinj(45,inj) || (mRun in old_mutations)) + M << "\blue Your leg muscles pulsate." + M.mutations.Add(mRun) + if(M.dna.GetSEState(REMOTETALKBLOCK)) + if(forced || probinj(45,inj) || (mRemotetalk in old_mutations)) + M << "\blue You expand your mind outwards" + M.mutations.Add(mRemotetalk) + M.verbs += /mob/living/carbon/human/proc/remotesay + if(M.dna.GetSEState(MORPHBLOCK)) + if(forced || probinj(45,inj) || (mMorph in old_mutations)) + M.mutations.Add(mMorph) + M << "\blue Your skin feels strange" + M.verbs += /mob/living/carbon/human/proc/morph + if(M.dna.GetSEState(COLDBLOCK)) + if(!(COLD_RESISTANCE in old_mutations)) + if(forced || probinj(15,inj) || (mHeatres in old_mutations)) + M.mutations.Add(mHeatres) + M << "\blue Your skin is icy to the touch" + else + if(forced || probinj(5,inj) || (mHeatres in old_mutations)) + M.mutations.Add(mHeatres) + M << "\blue Your skin is icy to the touch" + if(M.dna.GetSEState(HALLUCINATIONBLOCK)) + if(forced || probinj(45,inj) || (mHallucination in old_mutations)) + M.mutations.Add(mHallucination) + M << "\red Your mind says 'Hello'" + if(M.dna.GetSEState(NOPRINTSBLOCK)) + if(forced || probinj(45,inj) || (mFingerprints in old_mutations)) + M.mutations.Add(mFingerprints) + M << "\blue Your fingers feel numb" + if(M.dna.GetSEState(SHOCKIMMUNITYBLOCK)) + if(forced || probinj(45,inj) || (mShock in old_mutations)) + M.mutations.Add(mShock) + M << "\blue Your skin feels strange" + if(M.dna.GetSEState(SMALLSIZEBLOCK)) + if(forced || probinj(45,inj) || (mSmallsize in old_mutations)) + M << "\blue Your skin feels rubbery" + M.mutations.Add(mSmallsize) + M.pass_flags |= 1 + + + + if (M.dna.GetSEState(HULKBLOCK)) + if(forced || probinj(5,inj) || (HULK in old_mutations)) + M << "\blue Your muscles hurt." + M.mutations.Add(HULK) + if (M.dna.GetSEState(HEADACHEBLOCK)) + M.disabilities |= EPILEPSY + M << "\red You get a headache." + if (M.dna.GetSEState(FAKEBLOCK)) + M << "\red You feel strange." + if (prob(95)) + if(prob(50)) + randmutb(M) + else + randmuti(M) + else + randmutg(M) + if (M.dna.GetSEState(COUGHBLOCK)) + M.disabilities |= COUGHING + M << "\red You start coughing." + if (M.dna.GetSEState(CLUMSYBLOCK)) + M << "\red You feel lightheaded." + M.mutations.Add(CLUMSY) + if (M.dna.GetSEState(TWITCHBLOCK)) + M.disabilities |= TOURETTES + M << "\red You twitch." + if (M.dna.GetSEState(XRAYBLOCK)) + if(forced || probinj(30,inj) || (XRAY in old_mutations)) + M << "\blue The walls suddenly disappear." +// M.sight |= (SEE_MOBS|SEE_OBJS|SEE_TURFS) +// M.see_in_dark = 8 +// M.see_invisible = 2 + M.mutations.Add(XRAY) + if (M.dna.GetSEState(NERVOUSBLOCK)) + M.disabilities |= NERVOUS + M << "\red You feel nervous." + if (M.dna.GetSEState(FIREBLOCK)) + if(!(mHeatres in old_mutations)) + if(forced || probinj(30,inj) || (COLD_RESISTANCE in old_mutations)) + M << "\blue Your body feels warm." + M.mutations.Add(COLD_RESISTANCE) + else + if(forced || probinj(5,inj) || (COLD_RESISTANCE in old_mutations)) + M << "\blue Your body feels warm." + M.mutations.Add(COLD_RESISTANCE) + if (M.dna.GetSEState(BLINDBLOCK)) + M.sdisabilities |= BLIND + M << "\red You can't seem to see anything." + if (M.dna.GetSEState(TELEBLOCK)) + if(forced || probinj(15,inj) || (TK in old_mutations)) + M << "\blue You feel smarter." + M.mutations.Add(TK) + if (M.dna.GetSEState(DEAFBLOCK)) + M.sdisabilities |= DEAF + M.ear_deaf = 1 + M << "\red Its kinda quiet.." + if (M.dna.GetSEState(GLASSESBLOCK)) + M.disabilities |= NEARSIGHTED + M << "Your eyes feel weird..." + + /* If you want the new mutations to work, UNCOMMENT THIS. + if(istype(M, /mob/living/carbon)) + for (var/datum/mutations/mut in global_mutations) + mut.check_mutation(M) + */ + +//////////////////////////////////////////////////////////// Monkey Block + if (M.dna.GetSEState(MONKEYBLOCK) && istype(M, /mob/living/carbon/human)) + // human > monkey + var/mob/living/carbon/human/H = M + H.monkeyizing = 1 + var/list/implants = list() //Try to preserve implants. + for(var/obj/item/weapon/implant/W in H) + implants += W + W.loc = null + + if(!connected) + for(var/obj/item/W in (H.contents-implants)) + if (W==H.w_uniform) // will be teared + continue + H.drop_from_inventory(W) + M.monkeyizing = 1 + M.canmove = 0 + M.icon = null + M.invisibility = 101 + var/atom/movable/overlay/animation = new( M.loc ) + animation.icon_state = "blank" + animation.icon = 'icons/mob/mob.dmi' + animation.master = src + flick("h2monkey", animation) + sleep(48) + del(animation) + + + var/mob/living/carbon/monkey/O = null + if(H.species.primitive) + O = new H.species.primitive(src) + else + H.gib() //Trying to change the species of a creature with no primitive var set is messy. + return + + if(M) + if (M.dna) + O.dna = M.dna + M.dna = null + + if (M.suiciding) + O.suiciding = M.suiciding + M.suiciding = null + + + for(var/datum/disease/D in M.viruses) + O.viruses += D + D.affected_mob = O + M.viruses -= D + + + for(var/obj/T in (M.contents-implants)) + del(T) + + O.loc = M.loc + + if(M.mind) + M.mind.transfer_to(O) //transfer our mind to the cute little monkey + + if (connected) //inside dna thing + var/obj/machinery/dna_scannernew/C = connected + O.loc = C + C.occupant = O + connected = null + O.real_name = text("monkey ([])",copytext(md5(M.real_name), 2, 6)) + O.take_overall_damage(M.getBruteLoss() + 40, M.getFireLoss()) + O.adjustToxLoss(M.getToxLoss() + 20) + O.adjustOxyLoss(M.getOxyLoss()) + O.stat = M.stat + O.a_intent = "hurt" + for (var/obj/item/weapon/implant/I in implants) + I.loc = O + I.implanted = O +// O.update_icon = 1 //queue a full icon update at next life() call + del(M) + return + + if (!M.dna.GetSEState(MONKEYBLOCK) && !istype(M, /mob/living/carbon/human)) + // monkey > human, + var/mob/living/carbon/monkey/Mo = M + Mo.monkeyizing = 1 + var/list/implants = list() //Still preserving implants + for(var/obj/item/weapon/implant/W in Mo) + implants += W + W.loc = null + if(!connected) + for(var/obj/item/W in (Mo.contents-implants)) + Mo.drop_from_inventory(W) + M.monkeyizing = 1 + M.canmove = 0 + M.icon = null + M.invisibility = 101 + var/atom/movable/overlay/animation = new( M.loc ) + animation.icon_state = "blank" + animation.icon = 'icons/mob/mob.dmi' + animation.master = src + flick("monkey2h", animation) + sleep(48) + del(animation) + + var/mob/living/carbon/human/O = new( src ) + if(Mo.greaterform) + O.set_species(Mo.greaterform) + + if (M.dna.GetUIState(DNA_UI_GENDER)) + O.gender = FEMALE + else + O.gender = MALE + + if (M) + if (M.dna) + O.dna = M.dna + M.dna = null + + if (M.suiciding) + O.suiciding = M.suiciding + M.suiciding = null + + for(var/datum/disease/D in M.viruses) + O.viruses += D + D.affected_mob = O + M.viruses -= D + + //for(var/obj/T in M) + // del(T) + + O.loc = M.loc + + if(M.mind) + M.mind.transfer_to(O) //transfer our mind to the human + + if (connected) //inside dna thing + var/obj/machinery/dna_scannernew/C = connected + O.loc = C + C.occupant = O + connected = null + + var/i + while (!i) + var/randomname + if (O.gender == MALE) + randomname = capitalize(pick(first_names_male) + " " + capitalize(pick(last_names))) + else + randomname = capitalize(pick(first_names_female) + " " + capitalize(pick(last_names))) + if (findname(randomname)) + continue + else + O.real_name = randomname + i++ + O.UpdateAppearance() + O.take_overall_damage(M.getBruteLoss(), M.getFireLoss()) + O.adjustToxLoss(M.getToxLoss()) + O.adjustOxyLoss(M.getOxyLoss()) + O.stat = M.stat + for (var/obj/item/weapon/implant/I in implants) + I.loc = O + I.implanted = O +// O.update_icon = 1 //queue a full icon update at next life() call + del(M) + return +//////////////////////////////////////////////////////////// Monkey Block + if(M) + M.update_icon = 1 //queue a full icon update at next life() call + return null +/////////////////////////// DNA MISC-PROCS +*/ diff --git a/code/game/dna/dna2_helpers.dm b/code/game/dna/dna2_helpers.dm index 44ab4301cf..216832f3cf 100644 --- a/code/game/dna/dna2_helpers.dm +++ b/code/game/dna/dna2_helpers.dm @@ -172,308 +172,4 @@ /proc/probinj(var/pr, var/inj) return prob(pr+inj*pr) -// (Re-)Apply mutations. -// TODO: Turn into a /mob proc, change inj to a bitflag for various forms of differing behavior. -// M: Mob to mess with -// connected: Machine we're in, type unchecked so I doubt it's used beyond monkeying -// inj: 1 for if we're checking this from an injector, screws with manifestation probability calc. -/proc/domutcheck(mob/living/M as mob, connected, inj) - if (!M) return - - M.dna.check_integrity() - - M.disabilities = 0 - M.sdisabilities = 0 - var/old_mutations = M.mutations - M.mutations = list() - M.pass_flags = 0 -// M.see_in_dark = 2 -// M.see_invisible = 0 - - if(PLANT in old_mutations) - M.mutations.Add(PLANT) - if(SKELETON in old_mutations) - M.mutations.Add(SKELETON) - if(FAT in old_mutations) - M.mutations.Add(FAT) - if(HUSK in old_mutations) - M.mutations.Add(HUSK) - - ///////////////////////////////////// - // IMPORTANT REMINDER - // IF A BLOCK IS SET TO 0 (unused) - // GetSEState(block) WILL RETURN 0 - ///////////////////////////////////// - - if(M.dna.GetSEState(NOBREATHBLOCK)) - if(probinj(45,inj) || (mNobreath in old_mutations)) - M << "\blue You feel no need to breathe." - M.mutations.Add(mNobreath) - if(M.dna.GetSEState(REMOTEVIEWBLOCK)) - if(probinj(45,inj) || (mRemote in old_mutations)) - M << "\blue Your mind expands" - M.mutations.Add(mRemote) - M.verbs += /mob/living/carbon/human/proc/remoteobserve - if(M.dna.GetSEState(REGENERATEBLOCK)) - if(probinj(45,inj) || (mRegen in old_mutations)) - M << "\blue You feel better" - M.mutations.Add(mRegen) - if(M.dna.GetSEState(INCREASERUNBLOCK)) - if(probinj(45,inj) || (mRun in old_mutations)) - M << "\blue Your leg muscles pulsate." - M.mutations.Add(mRun) - if(M.dna.GetSEState(REMOTETALKBLOCK)) - if(probinj(45,inj) || (mRemotetalk in old_mutations)) - M << "\blue You expand your mind outwards" - M.mutations.Add(mRemotetalk) - M.verbs += /mob/living/carbon/human/proc/remotesay - if(M.dna.GetSEState(MORPHBLOCK)) - if(probinj(45,inj) || (mMorph in old_mutations)) - M.mutations.Add(mMorph) - M << "\blue Your skin feels strange" - M.verbs += /mob/living/carbon/human/proc/morph - if(M.dna.GetSEState(HALLUCINATIONBLOCK)) - if(probinj(45,inj) || (mHallucination in old_mutations)) - M.mutations.Add(mHallucination) - M << "\red Your mind says 'Hello'" - if(M.dna.GetSEState(NOPRINTSBLOCK)) - if(probinj(45,inj) || (mFingerprints in old_mutations)) - M.mutations.Add(mFingerprints) - M << "\blue Your fingers feel numb" - if(M.dna.GetSEState(SHOCKIMMUNITYBLOCK)) - if(probinj(45,inj) || (mShock in old_mutations)) - M.mutations.Add(mShock) - M << "\blue Your skin feels strange" - if(M.dna.GetSEState(SMALLSIZEBLOCK)) - if(probinj(45,inj) || (mSmallsize in old_mutations)) - M << "\blue Your skin feels rubbery" - M.mutations.Add(mSmallsize) - M.pass_flags |= 1 - - - - if (M.dna.GetSEState(HULKBLOCK)) - if(probinj(5,inj) || (HULK in old_mutations)) - M << "\blue Your muscles hurt." - M.mutations.Add(HULK) - if (M.dna.GetSEState(HEADACHEBLOCK)) - M.disabilities |= EPILEPSY - M << "\red You get a headache." - if (M.dna.GetSEState(FAKEBLOCK)) - M << "\red You feel strange." - if (prob(95)) - if(prob(50)) - randmutb(M) - else - randmuti(M) - else - randmutg(M) - if (M.dna.GetSEState(COUGHBLOCK)) - M.disabilities |= COUGHING - M << "\red You start coughing." - if (M.dna.GetSEState(CLUMSYBLOCK)) - M << "\red You feel lightheaded." - M.mutations.Add(CLUMSY) - if (M.dna.GetSEState(TWITCHBLOCK)) - M.disabilities |= TOURETTES - M << "\red You twitch." - if (M.dna.GetSEState(XRAYBLOCK)) - if(probinj(30,inj) || (XRAY in old_mutations)) - M << "\blue The walls suddenly disappear." -// M.sight |= (SEE_MOBS|SEE_OBJS|SEE_TURFS) -// M.see_in_dark = 8 -// M.see_invisible = 2 - M.mutations.Add(XRAY) - if (M.dna.GetSEState(NERVOUSBLOCK)) - M.disabilities |= NERVOUS - M << "\red You feel nervous." - if (M.dna.GetSEState(FIREBLOCK)) - if(probinj(30,inj) || (COLD_RESISTANCE in old_mutations)) - M << "\blue Your body feels warm." - M.mutations.Add(COLD_RESISTANCE) - if (M.dna.GetSEState(BLINDBLOCK)) - M.sdisabilities |= BLIND - M << "\red You can't seem to see anything." - if (M.dna.GetSEState(TELEBLOCK)) - if(probinj(15,inj) || (TK in old_mutations)) - M << "\blue You feel smarter." - M.mutations.Add(TK) - if (M.dna.GetSEState(DEAFBLOCK)) - M.sdisabilities |= DEAF - M.ear_deaf = 1 - M << "\red Its kinda quiet.." - if (M.dna.GetSEState(GLASSESBLOCK)) - M.disabilities |= NEARSIGHTED - M << "Your eyes feel weird..." - - /* If you want the new mutations to work, UNCOMMENT THIS. - if(istype(M, /mob/living/carbon)) - for (var/datum/mutations/mut in global_mutations) - mut.check_mutation(M) - */ - -//////////////////////////////////////////////////////////// Monkey Block - if (M.dna.GetSEState(MONKEYBLOCK) && istype(M, /mob/living/carbon/human)) - // human > monkey - var/mob/living/carbon/human/H = M - H.monkeyizing = 1 - var/list/implants = list() //Try to preserve implants. - for(var/obj/item/weapon/implant/W in H) - implants += W - W.loc = null - - if(!connected) - for(var/obj/item/W in (H.contents-implants)) - if (W==H.w_uniform) // will be teared - continue - H.drop_from_inventory(W) - M.monkeyizing = 1 - M.canmove = 0 - M.icon = null - M.invisibility = 101 - var/atom/movable/overlay/animation = new( M.loc ) - animation.icon_state = "blank" - animation.icon = 'icons/mob/mob.dmi' - animation.master = src - flick("h2monkey", animation) - sleep(48) - del(animation) - - - var/mob/living/carbon/monkey/O = null - if(H.species.primitive) - O = new H.species.primitive(src) - else - H.gib() //Trying to change the species of a creature with no primitive var set is messy. - return - - if(M) - if (M.dna) - O.dna = M.dna - M.dna = null - - if (M.suiciding) - O.suiciding = M.suiciding - M.suiciding = null - - - for(var/datum/disease/D in M.viruses) - O.viruses += D - D.affected_mob = O - M.viruses -= D - - - for(var/obj/T in (M.contents-implants)) - del(T) - - O.loc = M.loc - - if(M.mind) - M.mind.transfer_to(O) //transfer our mind to the cute little monkey - - if (connected) //inside dna thing - var/obj/machinery/dna_scannernew/C = connected - O.loc = C - C.occupant = O - connected = null - O.real_name = text("monkey ([])",copytext(md5(M.real_name), 2, 6)) - O.take_overall_damage(M.getBruteLoss() + 40, M.getFireLoss()) - O.adjustToxLoss(M.getToxLoss() + 20) - O.adjustOxyLoss(M.getOxyLoss()) - O.stat = M.stat - O.a_intent = "hurt" - for (var/obj/item/weapon/implant/I in implants) - I.loc = O - I.implanted = O -// O.update_icon = 1 //queue a full icon update at next life() call - del(M) - return - - if (!M.dna.GetSEState(MONKEYBLOCK) && !istype(M, /mob/living/carbon/human)) - // monkey > human, - var/mob/living/carbon/monkey/Mo = M - Mo.monkeyizing = 1 - var/list/implants = list() //Still preserving implants - for(var/obj/item/weapon/implant/W in Mo) - implants += W - W.loc = null - if(!connected) - for(var/obj/item/W in (Mo.contents-implants)) - Mo.drop_from_inventory(W) - M.monkeyizing = 1 - M.canmove = 0 - M.icon = null - M.invisibility = 101 - var/atom/movable/overlay/animation = new( M.loc ) - animation.icon_state = "blank" - animation.icon = 'icons/mob/mob.dmi' - animation.master = src - flick("monkey2h", animation) - sleep(48) - del(animation) - - var/mob/living/carbon/human/O = new( src ) - if(Mo.greaterform) - O.set_species(Mo.greaterform) - - if (M.dna.GetUIState(DNA_UI_GENDER)) - O.gender = FEMALE - else - O.gender = MALE - - if (M) - if (M.dna) - O.dna = M.dna - M.dna = null - - if (M.suiciding) - O.suiciding = M.suiciding - M.suiciding = null - - for(var/datum/disease/D in M.viruses) - O.viruses += D - D.affected_mob = O - M.viruses -= D - - //for(var/obj/T in M) - // del(T) - - O.loc = M.loc - - if(M.mind) - M.mind.transfer_to(O) //transfer our mind to the human - - if (connected) //inside dna thing - var/obj/machinery/dna_scannernew/C = connected - O.loc = C - C.occupant = O - connected = null - - var/i - while (!i) - var/randomname - if (O.gender == MALE) - randomname = capitalize(pick(first_names_male) + " " + capitalize(pick(last_names))) - else - randomname = capitalize(pick(first_names_female) + " " + capitalize(pick(last_names))) - if (findname(randomname)) - continue - else - O.real_name = randomname - i++ - O.UpdateAppearance() - O.take_overall_damage(M.getBruteLoss(), M.getFireLoss()) - O.adjustToxLoss(M.getToxLoss()) - O.adjustOxyLoss(M.getOxyLoss()) - O.stat = M.stat - for (var/obj/item/weapon/implant/I in implants) - I.loc = O - I.implanted = O -// O.update_icon = 1 //queue a full icon update at next life() call - del(M) - return -//////////////////////////////////////////////////////////// Monkey Block - if(M) - M.update_icon = 1 //queue a full icon update at next life() call - return null /////////////////////////// DNA MISC-PROCS diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm index 37ad94e3f5..6be58f811d 100644 --- a/code/game/dna/dna_modifier.dm +++ b/code/game/dna/dna_modifier.dm @@ -1,5 +1,37 @@ #define DNA_BLOCK_SIZE 3 +// Buffer datatype flags. +#define DNA2_BUF_UI 1 +#define DNA2_BUF_UE 2 +#define DNA2_BUF_SE 4 + +//list("data" = null, "owner" = null, "label" = null, "type" = null, "ue" = 0), +/datum/dna2/record + var/datum/dna/dna = null + var/types=0 + var/name="Empty" + + // Stuff for cloners + var/id=null + var/implant=null + var/ckey=null + var/mind=null + +/datum/dna2/record/proc/GetData() + var/list/ser=list("data" = null, "owner" = null, "label" = null, "type" = null, "ue" = 0) + ser["ue"] = (types & DNA2_BUF_UE) == DNA2_BUF_UE + if(types & DNA2_BUF_SE) + ser["data"] = dna.SE + else + ser["data"] = dna.UI + ser["owner"] = src.dna.real_name + ser["label"] = name + if(types & DNA2_BUF_UI) + ser["type"] = "ui" + else + ser["type"] = "se" + return ser + /////////////////////////// DNA MACHINES /obj/machinery/dna_scannernew name = "\improper DNA modifier" @@ -14,6 +46,7 @@ var/locked = 0 var/mob/living/carbon/occupant = null var/obj/item/weapon/reagent_containers/glass/beaker = null + var/opened = 0 /obj/machinery/dna_scannernew/New() ..() @@ -80,12 +113,6 @@ usr.loc = src src.occupant = usr src.icon_state = "scanner_1" - /* - for(var/obj/O in src) // THIS IS P. STUPID -- LOVE, DOOHL - //O = null - del(O) - //Foreach goto(124) - */ src.add_fingerprint(usr) return @@ -111,7 +138,12 @@ if (G.affecting.abiotic()) user << "\blue Subject cannot have abiotic items on." return - var/mob/M = G.affecting + put_in(G.affecting) + src.add_fingerprint(user) + del(G) + return + +/obj/machinery/dna_scannernew/proc/put_in(var/mob/M) if(M.client) M.client.perspective = EYE_PERSPECTIVE M.client.eye = src @@ -119,8 +151,6 @@ src.occupant = M src.icon_state = "scanner_1" - src.add_fingerprint(user) - // search for ghosts, if the corpse is empty and the scanner is connected to a cloner if(locate(/obj/machinery/computer/cloning, get_step(src, NORTH)) \ || locate(/obj/machinery/computer/cloning, get_step(src, SOUTH)) \ @@ -132,19 +162,11 @@ if(ghost.mind == M.mind) ghost << "Your corpse has been placed into a cloning scanner. Return to your body if you want to be resurrected/cloned! (Verbs -> Ghost -> Re-enter corpse)" break - del(G) return /obj/machinery/dna_scannernew/proc/go_out() if ((!( src.occupant ) || src.locked)) return -/* -// it's like this was -just- here to break constructed dna scanners -Pete -// if that's not the case, slap my shit and uncomment this. -// for(var/obj/O in src) -// O.loc = src.loc -*/ - //Foreach goto(30) if (src.occupant.client) src.occupant.client.eye = src.occupant.client.mob src.occupant.client.perspective = MOB_PERSPECTIVE @@ -205,11 +227,7 @@ var/selected_ui_target_hex = 1 var/radiation_duration = 2.0 var/radiation_intensity = 1.0 - var/list/buffers = list( - list("data" = null, "owner" = null, "label" = null, "type" = null, "ue" = 0), - list("data" = null, "owner" = null, "label" = null, "type" = null, "ue" = 0), - list("data" = null, "owner" = null, "label" = null, "type" = null, "ue" = 0) - ) + var/list/datum/dna2/record/buffers[3] var/irradiating = 0 var/injector_ready = 0 //Quick fix for issue 286 (screwdriver the screen twice to restore injector) -Pete var/obj/machinery/dna_scannernew/connected = null @@ -219,6 +237,7 @@ use_power = 1 idle_power_usage = 10 active_power_usage = 400 + var/waiting_for_user_input=0 // Fix for #274 (Mash create block injector without answering dialog to make unlimited injectors) - N3X /obj/machinery/computer/scan_consolenew/attackby(obj/item/I as obj, mob/user as mob) if(istype(I, /obj/item/weapon/screwdriver)) @@ -308,13 +327,13 @@ arr += "[i]:[EncodeDNABlock(buffer[i])]" return arr -/obj/machinery/computer/scan_consolenew/proc/setInjectorBlock(var/obj/item/weapon/dnainjector/I, var/blk, var/list/buffer) +/obj/machinery/computer/scan_consolenew/proc/setInjectorBlock(var/obj/item/weapon/dnainjector/I, var/blk, var/datum/dna2/record/buffer) var/pos = findtext(blk,":") if(!pos) return 0 var/id = text2num(copytext(blk,1,pos)) if(!id) return 0 I.block = id - I.dna = list(buffer[id]) + I.buf = buffer return 1 /obj/machinery/computer/scan_consolenew/attackby(obj/item/W as obj, mob/user as mob) @@ -336,6 +355,7 @@ ui_interact(user) /obj/machinery/computer/scan_consolenew/attack_ai(user as mob) + src.add_hiddenprint(user) ui_interact(user) /obj/machinery/computer/scan_consolenew/attack_hand(user as mob) @@ -363,27 +383,26 @@ data["selectedMenuKey"] = selected_menu_key data["locked"] = src.connected.locked data["hasOccupant"] = connected.occupant ? 1 : 0 - + data["isInjectorReady"] = injector_ready data["hasDisk"] = disk ? 1 : 0 var/diskData[0] - if (!disk) + if (!disk || !disk.buf) diskData["data"] = null diskData["owner"] = null diskData["label"] = null diskData["type"] = null diskData["ue"] = null else - diskData["data"] = disk.data - diskData["owner"] = disk.owner - diskData["label"] = disk.name - diskData["type"] = disk.data_type - diskData["ue"] = disk.ue + diskData = disk.buf.GetData() data["disk"] = diskData - data["buffers"] = buffers + var/list/new_buffers = list() + for(var/datum/dna2/record/buf in buffers) + new_buffers.Add(buf.GetData()) + data["buffers"]=new_buffers data["radiationIntensity"] = radiation_intensity data["radiationDuration"] = radiation_duration @@ -624,10 +643,13 @@ src.selected_se_block = select_block if ((select_subblock <= DNA_BLOCK_SIZE) && (select_subblock >= 1)) src.selected_se_subblock = select_subblock + //testing("User selected block [selected_se_block] (sent [select_block]), subblock [selected_se_subblock] (sent [select_block]).") return 1 // return 1 forces an update to all Nano uis attached to src if (href_list["pulseSERadiation"]) var/block = src.connected.occupant.dna.GetSESubBlock(src.selected_se_block,src.selected_se_subblock) + //var/original_block=block + //testing("Irradiating SE block [src.selected_se_block]:[src.selected_se_subblock] ([block])...") irradiating = src.radiation_duration var/lock_state = src.connected.locked @@ -650,23 +672,27 @@ else if (src.selected_se_block > STRUCDNASIZE/2 && src.selected_se_block < STRUCDNASIZE) real_SE_block-- + //testing("Irradiated SE block [real_SE_block]:[src.selected_se_subblock] ([original_block] now [block]) [(real_SE_block!=selected_se_block) ? "(SHIFTED)":""]!") connected.occupant.dna.SetSESubBlock(real_SE_block,selected_se_subblock,block) - domutcheck(src.connected.occupant,src.connected) src.connected.occupant.radiation += (src.radiation_intensity+src.radiation_duration) + domutcheck(src.connected.occupant,src.connected) else + src.connected.occupant.radiation += ((src.radiation_intensity*2)+src.radiation_duration) if (prob(80-src.radiation_duration)) + //testing("Random bad mut!") randmutb(src.connected.occupant) domutcheck(src.connected.occupant,src.connected) else randmuti(src.connected.occupant) + //testing("Random identity mut!") src.connected.occupant.UpdateAppearance() - src.connected.occupant.radiation += ((src.radiation_intensity*2)+src.radiation_duration) src.connected.locked = lock_state return 1 // return 1 forces an update to all Nano uis attached to src if(href_list["ejectBeaker"]) if(connected.beaker) - connected.beaker.loc = connected.loc + var/obj/item/weapon/reagent_containers/glass/B = connected.beaker + B.loc = connected.loc connected.beaker = null return 1 @@ -677,18 +703,14 @@ // Transfer Buffer Management if(href_list["bufferOption"]) var/bufferOption = href_list["bufferOption"] - + // These bufferOptions do not require a bufferId if (bufferOption == "wipeDisk") if ((isnull(src.disk)) || (src.disk.read_only)) //src.temphtml = "Invalid disk. Please try again." return 0 - src.disk.data = null - src.disk.data_type = null - src.disk.ue = null - src.disk.owner = null - src.disk.name = null + src.disk.buf=null //src.temphtml = "Data saved." return 1 @@ -702,7 +724,7 @@ // All bufferOptions from here on require a bufferId if (!href_list["bufferId"]) return 0 - + var/bufferId = text2num(href_list["bufferId"]) if (bufferId < 1 || bufferId > 3) @@ -710,56 +732,46 @@ if (bufferOption == "saveUI") if(src.connected.occupant && src.connected.occupant.dna) - src.buffers[bufferId]["ue"] = 0 - src.buffers[bufferId]["data"] = src.connected.occupant.dna.UI - if (!istype(src.connected.occupant,/mob/living/carbon/human)) - src.buffers[bufferId]["owner"] = src.connected.occupant.name - else - src.buffers[bufferId]["owner"] = src.connected.occupant.real_name - src.buffers[bufferId]["label"] = "Unique Identifier" - src.buffers[bufferId]["type"] = "ui" + var/datum/dna2/record/databuf=new + databuf.types = DNA2_BUF_UE + databuf.dna = src.connected.occupant.dna + databuf.name = "Unique Identifier" + src.buffers[bufferId] = databuf return 1 if (bufferOption == "saveUIAndUE") if(src.connected.occupant && src.connected.occupant.dna) - src.buffers[bufferId]["data"] = src.connected.occupant.dna.UI - if (!istype(src.connected.occupant,/mob/living/carbon/human)) - src.buffers[bufferId]["owner"] = src.connected.occupant.name - else - src.buffers[bufferId]["owner"] = src.connected.occupant.real_name - src.buffers[bufferId]["label"] = "Unique Identifier + Unique Enzymes" - src.buffers[bufferId]["type"] = "ui" - src.buffers[bufferId]["ue"] = 1 + var/datum/dna2/record/databuf=new + databuf.types = DNA2_BUF_UI|DNA2_BUF_UE + databuf.dna = src.connected.occupant.dna + databuf.name = "Unique Identifier + Unique Enzymes" + src.buffers[bufferId] = databuf return 1 if (bufferOption == "saveSE") if(src.connected.occupant && src.connected.occupant.dna) - src.buffers[bufferId]["ue"] = 0 - src.buffers[bufferId]["data"] = src.connected.occupant.dna.SE - if (!istype(src.connected.occupant,/mob/living/carbon/human)) - src.buffers[bufferId]["owner"] = src.connected.occupant.name - else - src.buffers[bufferId]["owner"] = src.connected.occupant.real_name - src.buffers[bufferId]["label"] = "Structural Enzymes" - src.buffers[bufferId]["type"] = "se" + var/datum/dna2/record/databuf=new + databuf.types = DNA2_BUF_SE + databuf.dna = src.connected.occupant.dna + databuf.name = "Structural Enzymes" + src.buffers[bufferId] = databuf return 1 if (bufferOption == "clear") - src.buffers[bufferId]["data"] = null - src.buffers[bufferId]["owner"] = null - src.buffers[bufferId]["label"] = null - src.buffers[bufferId]["ue"] = null + src.buffers[bufferId]=null return 1 if (bufferOption == "changeLabel") - var/label = src.buffers[bufferId]["label"] ? src.buffers[bufferId]["label"] : "New Label" - src.buffers[bufferId]["label"] = sanitize(input("New Label:", "Edit Label", label)) + var/datum/dna2/record/buf = src.buffers[bufferId] + buf.name = buf.name ? src.buffers[bufferId]["label"] : "New Label" + buf.name = sanitize(input("New Label:", "Edit Label", buf.name)) + src.buffers[bufferId] = buf return 1 if (bufferOption == "transfer") if (!src.connected.occupant || (NOCLONE in src.connected.occupant.mutations) || !src.connected.occupant.dna) return - + irradiating = 2 var/lock_state = src.connected.locked src.connected.locked = 1//lock it @@ -769,33 +781,37 @@ irradiating = 0 src.connected.locked = lock_state - - if (src.buffers[bufferId]["type"] == "ui") - if (src.buffers[bufferId]["ue"]) - src.connected.occupant.real_name = src.buffers[bufferId]["owner"] - src.connected.occupant.name = src.buffers[bufferId]["owner"] - src.connected.occupant.UpdateAppearance(src.buffers[bufferId]["data"]) - else if (src.buffers[bufferId]["type"] == "se") - src.connected.occupant.dna.SE = src.buffers[bufferId]["data"] + + var/datum/dna2/record/buf = src.buffers[bufferId] + + if ((buf.types & DNA2_BUF_UI)) + if ((buf.types & DNA2_BUF_UE)) + src.connected.occupant.real_name = buf.dna.real_name + src.connected.occupant.name = buf.dna.real_name + src.connected.occupant.UpdateAppearance(buf.dna.UI) + else if (buf.types & DNA2_BUF_SE) + src.connected.occupant.dna.SE = buf.dna.SE src.connected.occupant.dna.UpdateSE() domutcheck(src.connected.occupant,src.connected) src.connected.occupant.radiation += rand(20,50) return 1 if (bufferOption == "createInjector") - if (src.injector_ready) + if (src.injector_ready || waiting_for_user_input) + var/success = 1 var/obj/item/weapon/dnainjector/I = new /obj/item/weapon/dnainjector - I.dnatype = src.buffers[bufferId]["type"] + var/datum/dna2/record/buf = src.buffers[bufferId] if(href_list["createBlockInjector"]) - var/blk = input(usr,"Select Block","Block") in all_dna_blocks(src.buffers[bufferId]["data"]) - success = setInjectorBlock(I,blk,src.buffers[bufferId]["data"]) + waiting_for_user_input=1 + var/blk = input(usr,"Select Block","Block") in all_dna_blocks(buf.GetData()) + success = setInjectorBlock(I,blk,buf) else - I.dna = src.buffers[bufferId]["data"] + I.buf = buf + waiting_for_user_input=0 if(success) I.loc = src.loc - I.name += " ([src.buffers[bufferId]["label"]])" - if (src.buffers[bufferId]["ue"]) I.ue = src.buffers[bufferId]["owner"] //lazy haw haw + I.name += " ([buf.name])" //src.temphtml = "Injector created." src.injector_ready = 0 spawn(300) @@ -807,14 +823,11 @@ return 1 if (bufferOption == "loadDisk") - if ((isnull(src.disk)) || (!src.disk.data) || (src.disk.data == "")) + if ((isnull(src.disk)) || (!src.disk.buf)) //src.temphtml = "Invalid disk. Please try again." return 0 - src.buffers[bufferId]["data"] = src.disk.data - src.buffers[bufferId]["type"] = src.disk.data_type - src.buffers[bufferId]["ue"] = src.disk.ue - src.buffers[bufferId]["owner"] = src.disk.owner + src.buffers[bufferId]=src.disk.buf //src.temphtml = "Data loaded." return 1 @@ -823,11 +836,10 @@ //src.temphtml = "Invalid disk. Please try again." return 0 - src.disk.data = buffers[bufferId]["data"] - src.disk.data_type = src.buffers[bufferId]["type"] - src.disk.ue = src.buffers[bufferId]["ue"] - src.disk.owner = src.buffers[bufferId]["owner"] - src.disk.name = "data disk - '[src.buffers[bufferId]["owner"]]'" + var/datum/dna2/record/buf = src.buffers[bufferId] + + src.disk.buf = buf + src.disk.name = "data disk - '[buf.dna.real_name]'" //src.temphtml = "Data saved." return 1 diff --git a/code/game/dna/genes/disabilities.dm b/code/game/dna/genes/disabilities.dm new file mode 100644 index 0000000000..e312111f6f --- /dev/null +++ b/code/game/dna/genes/disabilities.dm @@ -0,0 +1,125 @@ +///////////////////// +// DISABILITY GENES +// +// These activate either a mutation, disability, or sdisability. +// +// Gene is always activated. +///////////////////// + +/datum/dna/gene/disability + name="DISABILITY" + + // Mutation to give (or 0) + var/mutation=0 + + // Disability to give (or 0) + var/disability=0 + + // SDisability to give (or 0) + var/sdisability=0 + + // Activation message + var/activation_message="" + + // Yay, you're no longer growing 3 arms + var/deactivation_message="" + +/datum/dna/gene/disability/can_activate(var/mob/M,var/flags) + return 1 // Always set! + +/datum/dna/gene/disability/activate(var/mob/M, var/connected, var/flags) + if(mutation && !(mutation in M.mutations)) + M.mutations.Add(mutation) + if(disability) + M.disabilities|=disability + if(sdisability) + M.sdisabilities|=sdisability + if(activation_message) + M << "\red [activation_message]" + +/datum/dna/gene/disability/deactivate(var/mob/M, var/connected, var/flags) + if(mutation && (mutation in M.mutations)) + M.mutations.Remove(mutation) + if(disability) + M.disabilities &= ~disability + if(sdisability) + M.sdisabilities &= ~sdisability + if(deactivation_message) + M << "\red [deactivation_message]" + +// Note: Doesn't seem to do squat, at the moment. +/datum/dna/gene/disability/hallucinate + name="Hallucinate" + activation_message="Your mind says 'Hello'." + mutation=mHallucination + + New() + block=HALLUCINATIONBLOCK + +/datum/dna/gene/disability/epilepsy + name="Epilepsy" + activation_message="You get a headache." + disability=EPILEPSY + + New() + block=HEADACHEBLOCK + +/datum/dna/gene/disability/cough + name="Coughing" + activation_message="You start coughing." + disability=COUGHING + + New() + block=COUGHBLOCK + +/datum/dna/gene/disability/clumsy + name="Clumsiness" + activation_message="You feel lightheaded." + mutation=CLUMSY + + New() + block=CLUMSYBLOCK + +/datum/dna/gene/disability/tourettes + name="Tourettes" + activation_message="You twitch." + disability=TOURETTES + + New() + block=TWITCHBLOCK + +/datum/dna/gene/disability/nervousness + name="Nervousness" + activation_message="You feel nervous." + disability=NERVOUS + + New() + block=NERVOUSBLOCK + +/datum/dna/gene/disability/blindness + name="Blindness" + activation_message="You can't seem to see anything." + sdisability=BLIND + + New() + block=BLINDBLOCK + +/datum/dna/gene/disability/deaf + name="Deafness" + activation_message="It's kinda quiet." + sdisability=DEAF + + New() + block=DEAFBLOCK + + activate(var/mob/M, var/connected, var/flags) + ..(M,connected,flags) + M.ear_deaf = 1 + +/datum/dna/gene/disability/nearsighted + name="Nearsightedness" + activation_message="Your eyes feel weird..." + disability=NEARSIGHTED + + New() + block=GLASSESBLOCK \ No newline at end of file diff --git a/code/game/dna/genes/gene.dm b/code/game/dna/genes/gene.dm new file mode 100644 index 0000000000..3bf5b5e5f7 --- /dev/null +++ b/code/game/dna/genes/gene.dm @@ -0,0 +1,88 @@ +/** +* Gene Datum +* +* domutcheck was getting pretty hairy. This is the solution. +* +* All genes are stored in a global variable to cut down on memory +* usage. +* +* @author N3X15 +*/ + +/datum/dna/gene + // Display name + var/name="BASE GENE" + + // Probably won't get used but why the fuck not + var/desc="Oh god who knows what this does." + + // Set in initialize()! + // What gene activates this? + var/block=0 + + // Any of a number of GENE_ flags. + var/flags=0 + +// Return 1 if we can activate. +// HANDLE MUTCHK_FORCED HERE! +/datum/dna/gene/proc/can_activate(var/mob/M, var/flags) + return 0 + +// Called when the gene activates. Do your magic here. +/datum/dna/gene/proc/activate(var/mob/M, var/connected, var/flags) + return + +// Called when the gene deactivates. Undo your magic here. +// Only called when the block is deactivated. +/datum/dna/gene/proc/deactivate(var/mob/M, var/connected, var/flags) + return + + +///////////////////// +// BASIC GENES +// +// These just chuck in a mutation and display a message. +// +// Gene is activated: +// 1. If mutation already exists in mob +// 2. If the probability roll succeeds +// 3. Activation is forced (done in domutcheck) +///////////////////// + + +/datum/dna/gene/basic + name="BASIC GENE" + + // Mutation to give + var/mutation=0 + + // Activation probability + var/activation_prob=45 + + // Possible activation messages + var/list/activation_messages=list() + + // Possible deactivation messages + var/list/deactivation_messages=list() + +/datum/dna/gene/basic/can_activate(var/mob/M,var/flags) + if(mutation==0) + return 0 + + // Probability check + if(flags & MUTCHK_FORCED || probinj(activation_prob,(flags&MUTCHK_FORCED))) + return 1 + + return 0 + +/datum/dna/gene/basic/activate(var/mob/M) + M.mutations.Add(mutation) + if(activation_messages.len) + var/msg = pick(activation_messages) + M << "\blue [msg]" + +/datum/dna/gene/basic/deactivate(var/mob/M) + M.mutations.Remove(mutation) + if(deactivation_messages.len) + var/msg = pick(deactivation_messages) + M << "\red [msg]" \ No newline at end of file diff --git a/code/game/dna/genes/monkey.dm b/code/game/dna/genes/monkey.dm new file mode 100644 index 0000000000..952f7df0f4 --- /dev/null +++ b/code/game/dna/genes/monkey.dm @@ -0,0 +1,170 @@ +/datum/dna/gene/monkey + name="Monkey" + +/datum/dna/gene/monkey/New() + block=MONKEYBLOCK + +/datum/dna/gene/monkey/can_activate(var/mob/M,var/flags) + return istype(M, /mob/living/carbon/human) || istype(M,/mob/living/carbon/monkey) + +/datum/dna/gene/monkey/activate(var/mob/living/M, var/connected, var/flags) + if(!istype(M,/mob/living/carbon/human)) + return + var/mob/living/carbon/human/H = M + H.monkeyizing = 1 + var/list/implants = list() //Try to preserve implants. + for(var/obj/item/weapon/implant/W in H) + implants += W + W.loc = null + + if(!connected) + for(var/obj/item/W in (H.contents-implants)) + if (W==H.w_uniform) // will be teared + continue + H.drop_from_inventory(W) + M.monkeyizing = 1 + M.canmove = 0 + M.icon = null + M.invisibility = 101 + var/atom/movable/overlay/animation = new( M.loc ) + animation.icon_state = "blank" + animation.icon = 'icons/mob/mob.dmi' + animation.master = src + flick("h2monkey", animation) + sleep(48) + del(animation) + + + var/mob/living/carbon/monkey/O = null + if(H.species.primitive) + O = new H.species.primitive(src) + else + H.gib() //Trying to change the species of a creature with no primitive var set is messy. + return + + if(M) + if (M.dna) + O.dna = M.dna + M.dna = null + + if (M.suiciding) + O.suiciding = M.suiciding + M.suiciding = null + + + for(var/datum/disease/D in M.viruses) + O.viruses += D + D.affected_mob = O + M.viruses -= D + + + for(var/obj/T in (M.contents-implants)) + del(T) + + O.loc = M.loc + + if(M.mind) + M.mind.transfer_to(O) //transfer our mind to the cute little monkey + + if (connected) //inside dna thing + var/obj/machinery/dna_scannernew/C = connected + O.loc = C + C.occupant = O + connected = null + O.real_name = text("monkey ([])",copytext(md5(M.real_name), 2, 6)) + O.take_overall_damage(M.getBruteLoss() + 40, M.getFireLoss()) + O.adjustToxLoss(M.getToxLoss() + 20) + O.adjustOxyLoss(M.getOxyLoss()) + O.stat = M.stat + O.a_intent = "hurt" + for (var/obj/item/weapon/implant/I in implants) + I.loc = O + I.implanted = O +// O.update_icon = 1 //queue a full icon update at next life() call + del(M) + return + +/datum/dna/gene/monkey/deactivate(var/mob/living/M, var/connected, var/flags) + if(!istype(M,/mob/living/carbon/monkey)) + return + var/mob/living/carbon/monkey/Mo = M + Mo.monkeyizing = 1 + var/list/implants = list() //Still preserving implants + for(var/obj/item/weapon/implant/W in Mo) + implants += W + W.loc = null + if(!connected) + for(var/obj/item/W in (Mo.contents-implants)) + Mo.drop_from_inventory(W) + M.monkeyizing = 1 + M.canmove = 0 + M.icon = null + M.invisibility = 101 + var/atom/movable/overlay/animation = new( M.loc ) + animation.icon_state = "blank" + animation.icon = 'icons/mob/mob.dmi' + animation.master = src + flick("monkey2h", animation) + sleep(48) + del(animation) + + var/mob/living/carbon/human/O = new( src ) + if(Mo.greaterform) + O.set_species(Mo.greaterform) + + if (M.dna.GetUIState(DNA_UI_GENDER)) + O.gender = FEMALE + else + O.gender = MALE + + if (M) + if (M.dna) + O.dna = M.dna + M.dna = null + + if (M.suiciding) + O.suiciding = M.suiciding + M.suiciding = null + + for(var/datum/disease/D in M.viruses) + O.viruses += D + D.affected_mob = O + M.viruses -= D + + //for(var/obj/T in M) + // del(T) + + O.loc = M.loc + + if(M.mind) + M.mind.transfer_to(O) //transfer our mind to the human + + if (connected) //inside dna thing + var/obj/machinery/dna_scannernew/C = connected + O.loc = C + C.occupant = O + connected = null + + var/i + while (!i) + var/randomname + if (O.gender == MALE) + randomname = capitalize(pick(first_names_male) + " " + capitalize(pick(last_names))) + else + randomname = capitalize(pick(first_names_female) + " " + capitalize(pick(last_names))) + if (findname(randomname)) + continue + else + O.real_name = randomname + i++ + O.UpdateAppearance() + O.take_overall_damage(M.getBruteLoss(), M.getFireLoss()) + O.adjustToxLoss(M.getToxLoss()) + O.adjustOxyLoss(M.getOxyLoss()) + O.stat = M.stat + for (var/obj/item/weapon/implant/I in implants) + I.loc = O + I.implanted = O +// O.update_icon = 1 //queue a full icon update at next life() call + del(M) + return \ No newline at end of file diff --git a/code/game/dna/genes/powers.dm b/code/game/dna/genes/powers.dm new file mode 100644 index 0000000000..a8a9eefee7 --- /dev/null +++ b/code/game/dna/genes/powers.dm @@ -0,0 +1,167 @@ +/////////////////////////////////// +// POWERS +/////////////////////////////////// + +/datum/dna/gene/basic/nobreath + name="No Breathing" + activation_messages=list("You feel no need to breathe.") + mutation=mNobreath + + New() + block=NOBREATHBLOCK + +/datum/dna/gene/basic/remoteview + name="Remote Viewing" + activation_messages=list("Your mind expands.") + mutation=mRemote + + New() + block=REMOTEVIEWBLOCK + + activate(var/mob/M, var/connected, var/flags) + ..(M,connected,flags) + M.verbs += /mob/living/carbon/human/proc/remoteobserve + +/datum/dna/gene/basic/regenerate + name="Regenerate" + activation_messages=list("You feel better.") + mutation=mRegen + + New() + block=REGENERATEBLOCK + +/datum/dna/gene/basic/increaserun + name="Super Speed" + activation_messages=list("Your leg muscles pulsate.") + mutation=mRun + + New() + block=INCREASERUNBLOCK + +/datum/dna/gene/basic/remotetalk + name="Telepathy" + activation_messages=list("You expand your mind outwards.") + mutation=mRemotetalk + + New() + block=REMOTETALKBLOCK + + activate(var/mob/M, var/connected, var/flags) + ..(M,connected,flags) + M.verbs += /mob/living/carbon/human/proc/remotesay + +/datum/dna/gene/basic/morph + name="Morph" + activation_messages=list("Your skin feels strange.") + mutation=mMorph + + New() + block=MORPHBLOCK + + activate(var/mob/M) + ..(M) + M.verbs += /mob/living/carbon/human/proc/morph + +/* Not used on bay +/datum/dna/gene/basic/heat_resist + name="Heat Resistance" + activation_messages=list("Your skin is icy to the touch.") + mutation=mHeatres + + New() + block=COLDBLOCK + + can_activate(var/mob/M,var/flags) + // Probability check + var/_prob = 15 + if(COLD_RESISTANCE in M.mutations) + _prob=5 + if(probinj(_prob,(flags&MUTCHK_FORCED))) + return 1 +*/ + +/datum/dna/gene/basic/cold_resist + name="Cold Resistance" + activation_messages=list("Your body is filled with warmth.") + mutation=COLD_RESISTANCE + + New() + block=FIREBLOCK + + can_activate(var/mob/M,var/flags) + + // Probability check + var/_prob=30 + //if(mHeatres in M.mutations) + // _prob=5 + if(probinj(_prob,(flags&MUTCHK_FORCED))) + return 1 + +/datum/dna/gene/basic/noprints + name="No Prints" + activation_messages=list("Your fingers feel numb.") + mutation=mFingerprints + + New() + block=NOPRINTSBLOCK + +/datum/dna/gene/basic/noshock + name="Shock Immunity" + activation_messages=list("Your skin feels strange.") + mutation=mShock + + New() + block=SHOCKIMMUNITYBLOCK + +/datum/dna/gene/basic/midget + name="Midget" + activation_messages=list("Your skin feels rubbery.") + mutation=mSmallsize + + New() + block=SMALLSIZEBLOCK + + can_activate(var/mob/M,var/flags) + // Can't be big and small. + if(HULK in M.mutations) + return 0 + return ..(M,flags) + + activate(var/mob/M, var/connected, var/flags) + ..(M,connected,flags) + M.pass_flags |= 1 + + deactivate(var/mob/M, var/connected, var/flags) + ..(M,connected,flags) + M.pass_flags &= ~1 //This may cause issues down the track, but offhand I can't think of any other way for humans to get passtable short of varediting so it should be fine. ~Z + +/datum/dna/gene/basic/hulk + name="Hulk" + activation_messages=list("Your muscles hurt.") + mutation=HULK + + New() + block=HULKBLOCK + + can_activate(var/mob/M,var/flags) + // Can't be big and small. + if(mSmallsize in M.mutations) + return 0 + return ..(M,flags) + +/datum/dna/gene/basic/xray + name="X-Ray Vision" + activation_messages=list("The walls suddenly disappear.") + mutation=XRAY + + New() + block=XRAYBLOCK + +/datum/dna/gene/basic/tk + name="Telekenesis" + activation_messages=list("You feel smarter.") + mutation=TK + activation_prob=15 + + New() + block=TELEBLOCK \ No newline at end of file diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm index 96deb59554..a552ac1cd7 100644 --- a/code/game/gamemodes/changeling/changeling_powers.dm +++ b/code/game/gamemodes/changeling/changeling_powers.dm @@ -205,6 +205,10 @@ var/datum/changeling/changeling = changeling_power(1,0,0) if(!changeling) return + if(src.has_brain_worms()) + src << "We cannot perform this ability at the present time!" + return + var/mob/living/carbon/C = src changeling.chem_charges-- C.remove_changeling_powers() @@ -370,24 +374,24 @@ if(changeling_power(20,1,100,DEAD)) // charge the changeling chemical cost for stasis changeling.chem_charges -= 20 - + // restore us to health C.rejuvenate() - + // remove our fake death flag C.status_flags &= ~(FAKEDEATH) - + // let us move again C.update_canmove() - + // re-add out changeling powers - C.make_changeling() - + C.make_changeling() + // sending display messages C << "We have regenerated." C.visible_message("[src] appears to wake from the dead, having healed all wounds.") - - + + feedback_add_details("changeling_powers","FD") return 1 diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 39be77978e..26497410fa 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -213,7 +213,7 @@ Implants; for(var/mob/living/carbon/human/man in player_list) if(man.client && man.mind) // NT relation option var/special_role = man.mind.special_role - if (special_role == "Wizard" || special_role == "Ninja" || special_role == "Syndicate") + if (special_role == "Wizard" || special_role == "Ninja" || special_role == "Syndicate" || special_role == "Vox Raider") continue //NT intelligence ruled out possiblity that those are too classy to pretend to be a crew. if(man.client.prefs.nanotrasen_relation == "Opposed" && prob(50) || \ man.client.prefs.nanotrasen_relation == "Skeptical" && prob(20)) diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index c8c50fd09b..595dfe0226 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -129,7 +129,6 @@ var/nuke_code = "[rand(10000, 99999)]" var/leader_selected = 0 - var/agent_number = 1 var/spawnpos = 1 for(var/datum/mind/synd_mind in syndicates) @@ -137,6 +136,10 @@ spawnpos = 1 synd_mind.current.loc = synd_spawn[spawnpos] + synd_mind.current.real_name = "[syndicate_name()] Operative" // placeholder while we get their actual name + spawn(0) + NukeNameAssign(synd_mind) + forge_syndicate_objectives(synd_mind) greet_syndicate(synd_mind) equip_syndicate(synd_mind.current) @@ -144,9 +147,7 @@ if(!leader_selected) prepare_syndicate_leader(synd_mind, nuke_code) leader_selected = 1 - else - synd_mind.current.real_name = "[syndicate_name()] Operative #[agent_number]" - agent_number++ + spawnpos++ update_synd_icons_added(synd_mind) @@ -165,10 +166,6 @@ /datum/game_mode/proc/prepare_syndicate_leader(var/datum/mind/synd_mind, var/nuke_code) -// var/leader_title = pick("Czar", "Boss", "Commander", "Chief", "Kingpin", "Director", "Overlord") - spawn(1) -// NukeNameAssign(nukelastname(synd_mind.current),syndicates) //allows time for the rest of the syndies to be chosen - synd_mind.current.real_name = "[pick(first_names_male)] [pick(last_names)]" if (nuke_code) synd_mind.store_memory("Syndicate Nuclear Bomb Code: [nuke_code]", 0, 0) synd_mind.current << "The nuclear authorization code is: [nuke_code]" @@ -370,12 +367,14 @@ return newname */ -/proc/NukeNameAssign(var/lastname,var/list/syndicates) - for(var/datum/mind/synd_mind in syndicates) - switch(synd_mind.current.gender) - if(MALE) - synd_mind.name = "[pick(first_names_male)] [pick(last_names)]" - if(FEMALE) - synd_mind.name = "[pick(first_names_female)] [pick(last_names)]" - synd_mind.current.real_name = synd_mind.name - return \ No newline at end of file + +/proc/NukeNameAssign(var/datum/mind/synd_mind) + var/choose_name = input(synd_mind.current, "You are a [syndicate_name()] agent! What is your name?", "Choose a name") as text + + if(!choose_name) + return + + else + synd_mind.current.name = choose_name + synd_mind.current.real_name = choose_name + return \ No newline at end of file diff --git a/code/game/gamemodes/setupgame.dm b/code/game/gamemodes/setupgame.dm index c72f56f8cf..813bbbabf2 100644 --- a/code/game/gamemodes/setupgame.dm +++ b/code/game/gamemodes/setupgame.dm @@ -2,7 +2,7 @@ // (mostly) DNA2 SETUP ///////////////////////// -// Randomize block, assign a reference name, and optionally define difficulty (by making activation zone smaller or bigger) +// Randomize block, assign a reference name, and optionally define difficulty (by making activation zone smaller or bigger) // The name is used on /vg/ for species with predefined genetic traits, // and for the DNA panel in the player panel. /proc/getAssignedBlock(var/name,var/list/blocksLeft, var/activity_bounds=DNA_DEFAULT_BOUNDS) @@ -74,7 +74,7 @@ XRAYBLOCK = getAssignedBlock("XRAY", numsToAssign, DNA_HARDER_BOUNDS) CLUMSYBLOCK = getAssignedBlock("CLUMSY", numsToAssign) FAKEBLOCK = getAssignedBlock("FAKE", numsToAssign) - + // UNUSED! //COUGHBLOCK = getAssignedBlock("COUGH", numsToAssign) //GLASSESBLOCK = getAssignedBlock("GLASSES", numsToAssign) @@ -96,8 +96,20 @@ //SHOCKIMMUNITYBLOCK = getAssignedBlock("SHOCKIMMUNITY", numsToAssign) //SMALLSIZEBLOCK = getAssignedBlock("SMALLSIZE", numsToAssign, DNA_HARD_BOUNDS) - - + // And the genes that actually do the work. (domutcheck improvements) + var/list/blocks_assigned[STRUCDNASIZE] + for(var/gene_type in typesof(/datum/dna/gene)) + var/datum/dna/gene/G = new gene_type + if(G.block) + if(G.block in blocks_assigned) + warning("DNA2: Gene [G.name] trying to use already-assigned block [G.block] (used by [english_list(blocks_assigned[G.block])])") + dna_genes.Add(G) + var/list/assignedToBlock[0] + if(blocks_assigned[G.block]) + assignedToBlock=blocks_assigned[G.block] + assignedToBlock.Add(G.name) + blocks_assigned[G.block]=assignedToBlock + testing("DNA2: Gene [G.name] assigned to block [G.block].") // HIDDEN MUTATIONS / SUPERPOWERS INITIALIZTION diff --git a/code/game/gamemodes/wizard/soulstone.dm b/code/game/gamemodes/wizard/soulstone.dm index 70c655ce57..ddda65952e 100644 --- a/code/game/gamemodes/wizard/soulstone.dm +++ b/code/game/gamemodes/wizard/soulstone.dm @@ -19,6 +19,10 @@ if(istype(M, /mob/living/carbon/human/dummy)) return..() + if(M.has_brain_worms()) //Borer stuff - RR + user << "This being is corrupted by an alien intelligence and cannot be soul trapped." + return..() + M.attack_log += text("\[[time_stamp()]\] Has had their soul captured with [src.name] by [user.name] ([user.ckey])") user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to capture the soul of [M.name] ([M.ckey])") msg_admin_attack("[user.name] ([user.ckey]) used the [src.name] to capture the soul of [M.name] ([M.ckey]) (JMP)") diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index 4b2fb50c54..bd44ba4e7d 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -250,6 +250,9 @@ dat += text("Paralysis Summary %: [] ([] seconds left!)
", occupant.paralysis, round(occupant.paralysis / 4)) dat += text("Body Temperature: [occupant.bodytemperature-T0C]°C ([occupant.bodytemperature*1.8-459.67]°F)

") + if(occupant.has_brain_worms()) + dat += "Large growth detected in frontal lobe, possibly cancerous. Surgical removal is recommended.
" + if(occupant.vessel) var/blood_volume = round(occupant.vessel.get_reagent_amount("blood")) var/blood_percent = blood_volume / 560 diff --git a/code/game/machinery/bots/bots.dm b/code/game/machinery/bots/bots.dm index 8ef8c76f62..6b7038a38e 100644 --- a/code/game/machinery/bots/bots.dm +++ b/code/game/machinery/bots/bots.dm @@ -56,7 +56,7 @@ src.visible_message("\red [user] has slashed [src]!") playsound(src.loc, 'sound/weapons/slice.ogg', 25, 1, -1) if(prob(10)) - new /obj/effect/decal/cleanable/oil(src.loc) + new /obj/effect/decal/cleanable/blood/oil(src.loc) healthcheck() @@ -66,7 +66,7 @@ src.visible_message("\red [M] has [M.attacktext] [src]!") M.attack_log += text("\[[time_stamp()]\] attacked [src.name]") if(prob(10)) - new /obj/effect/decal/cleanable/oil(src.loc) + new /obj/effect/decal/cleanable/blood/oil(src.loc) healthcheck() diff --git a/code/game/machinery/bots/cleanbot.dm b/code/game/machinery/bots/cleanbot.dm index 7b5e18413f..c66842d592 100644 --- a/code/game/machinery/bots/cleanbot.dm +++ b/code/game/machinery/bots/cleanbot.dm @@ -296,19 +296,15 @@ text("[src.oddbutton ? "Yes" : "No" /obj/machinery/bot/cleanbot/proc/get_targets() src.target_types = new/list() - target_types += /obj/effect/decal/cleanable/oil + target_types += /obj/effect/decal/cleanable/blood/oil target_types += /obj/effect/decal/cleanable/vomit - target_types += /obj/effect/decal/cleanable/robot_debris target_types += /obj/effect/decal/cleanable/crayon target_types += /obj/effect/decal/cleanable/liquid_fuel target_types += /obj/effect/decal/cleanable/mucus + target_types += /obj/effect/decal/cleanable/dirt if(src.blood) - target_types += /obj/effect/decal/cleanable/xenoblood/ - target_types += /obj/effect/decal/cleanable/xenoblood/xgibs target_types += /obj/effect/decal/cleanable/blood/ - target_types += /obj/effect/decal/cleanable/blood/gibs/ - target_types += /obj/effect/decal/cleanable/dirt /obj/machinery/bot/cleanbot/proc/clean(var/obj/effect/decal/cleanable/target) src.anchored = 1 diff --git a/code/game/machinery/bots/ed209bot.dm b/code/game/machinery/bots/ed209bot.dm index d71a43c083..59b77c54fd 100644 --- a/code/game/machinery/bots/ed209bot.dm +++ b/code/game/machinery/bots/ed209bot.dm @@ -796,7 +796,7 @@ Auto Patrol: []"}, s.set_up(3, 1, src) s.start() - new /obj/effect/decal/cleanable/oil(src.loc) + new /obj/effect/decal/cleanable/blood/oil(src.loc) del(src) diff --git a/code/game/machinery/bots/mulebot.dm b/code/game/machinery/bots/mulebot.dm index 3496b6723a..68d9888d5e 100644 --- a/code/game/machinery/bots/mulebot.dm +++ b/code/game/machinery/bots/mulebot.dm @@ -964,6 +964,6 @@ s.set_up(3, 1, src) s.start() - new /obj/effect/decal/cleanable/oil(src.loc) + new /obj/effect/decal/cleanable/blood/oil(src.loc) unload(0) del(src) diff --git a/code/game/machinery/bots/secbot.dm b/code/game/machinery/bots/secbot.dm index fb3646653c..c4de96f5e9 100644 --- a/code/game/machinery/bots/secbot.dm +++ b/code/game/machinery/bots/secbot.dm @@ -726,7 +726,7 @@ Auto Patrol: []"}, s.set_up(3, 1, src) s.start() - new /obj/effect/decal/cleanable/oil(src.loc) + new /obj/effect/decal/cleanable/blood/oil(src.loc) del(src) /obj/machinery/bot/secbot/attack_alien(var/mob/living/carbon/alien/user as mob) diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index 40a0aa4c6c..1503ff6ebe 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -30,25 +30,42 @@ icon_state = "datadisk0" //Gosh I hope syndies don't mistake them for the nuke disk. item_state = "card-id" w_class = 1.0 - var/data = "" - var/ue = 0 - var/data_type = "ui" //ui|se - var/owner = "God Emperor of Mankind" + var/datum/dna2/record/buf=null var/read_only = 0 //Well,it's still a floppy disk +/obj/item/weapon/disk/data/proc/Initialize() + buf = new + buf.dna=new + /obj/item/weapon/disk/data/demo name = "data disk - 'God Emperor of Mankind'" - data = "066000033000000000AF00330660FF4DB002690" - //data = "0C80C80C80C80C80C8000000000000161FBDDEF" - Farmer Jeff - ue = 1 read_only = 1 + New() + Initialize() + buf.types=DNA2_BUF_UE|DNA2_BUF_UI + //data = "066000033000000000AF00330660FF4DB002690" + //data = "0C80C80C80C80C80C8000000000000161FBDDEF" - Farmer Jeff + buf.dna.real_name="God Emperor of Mankind" + buf.dna.unique_enzymes = md5(buf.dna.real_name) + buf.dna.UI=list(0x066,0x000,0x033,0x000,0x000,0x000,0xAF0,0x033,0x066,0x0FF,0x4DB,0x002,0x690) + //buf.dna.UI=list(0x0C8,0x0C8,0x0C8,0x0C8,0x0C8,0x0C8,0x000,0x000,0x000,0x000,0x161,0xFBD,0xDEF) // Farmer Jeff + buf.dna.UpdateUI() + /obj/item/weapon/disk/data/monkey name = "data disk - 'Mr. Muggles'" - data_type = "se" - data = "0983E840344C39F4B059D5145FC5785DC6406A4FFF" read_only = 1 + New() + Initialize() + buf.types=DNA2_BUF_SE + var/list/new_SE=list(0x098,0x3E8,0x403,0x44C,0x39F,0x4B0,0x59D,0x514,0x5FC,0x578,0x5DC,0x640,0x6A4) + for(var/i=new_SE.len;i<=STRUCDNASIZE;i++) + new_SE += rand(1,1024) + buf.dna.SE=new_SE + buf.dna.SetSEValue(MONKEYBLOCK,0xFFF) + + //Find a dead mob with a brain and client. /proc/find_dead_player(var/find_key) if (isnull(find_key)) @@ -102,6 +119,7 @@ return src.healthstring /obj/machinery/clonepod/attack_ai(mob/user as mob) + src.add_hiddenprint(user) return attack_hand(user) /obj/machinery/clonepod/attack_paw(mob/user as mob) return attack_hand(user) @@ -116,20 +134,20 @@ //Clonepod //Start growing a human clone in the pod! -/obj/machinery/clonepod/proc/growclone(var/ckey, var/clonename, var/list/ui, var/list/se, var/mindref, var/datum/species/mrace, var/languages) +/obj/machinery/clonepod/proc/growclone(var/datum/dna2/record/R) if(mess || attempting) return 0 - var/datum/mind/clonemind = locate(mindref) + var/datum/mind/clonemind = locate(R.mind) if(!istype(clonemind,/datum/mind)) //not a mind return 0 if( clonemind.current && clonemind.current.stat != DEAD ) //mind is associated with a non-dead body return 0 if(clonemind.active) //somebody is using that mind - if( ckey(clonemind.key)!=ckey ) + if( ckey(clonemind.key)!=R.ckey ) return 0 else for(var/mob/dead/observer/G in player_list) - if(G.ckey == ckey) + if(G.ckey == R.ckey) if(G.can_reenter_corpse) break else @@ -147,9 +165,9 @@ var/mob/living/carbon/human/H = new /mob/living/carbon/human(src) occupant = H - if(!clonename) //to prevent null names - clonename = "clone ([rand(0,999)])" - H.real_name = clonename + if(!R.dna.real_name) //to prevent null names + R.dna.real_name = "clone ([rand(0,999)])" + H.real_name = R.dna.real_name src.icon_state = "pod_1" //Get the clone body ready @@ -161,7 +179,7 @@ H.updatehealth() clonemind.transfer_to(H) - H.ckey = ckey + H.ckey = R.ckey H << "Consciousness slowly creeps over you as your body regenerates.
So this is what cloning feels like?
" // -- Mode/mind specific stuff goes here @@ -180,24 +198,24 @@ // -- End mode specific stuff - if(!H.dna) + if(!R.dna) H.dna = new /datum/dna() H.dna.real_name = H.real_name - if(ui) - H.UpdateAppearance(ui) - if(se) - H.dna.SE = se - H.dna.UpdateSE() - randmutb(H) //Sometimes the clones come out wrong. + else + H.dna=R.dna + H.UpdateAppearance() + randmutb(H) //Sometimes the clones come out wrong. + H.dna.UpdateSE() + H.dna.UpdateUI() H.f_style = "Shaved" - if(mrace.name == "Human") //no more xenos losing ears/tentacles + if(R.dna.species == "Human") //no more xenos losing ears/tentacles H.h_style = pick("Bedhead", "Bedhead 2", "Bedhead 3") - H.species = mrace - for(var/datum/language/L in languages) - H.add_language(L.name) - H.update_mutantrace() + H.set_species(R.dna.species) + + //for(var/datum/language/L in languages) + // H.add_language(L.name) H.suiciding = 0 src.attempting = 0 return 1 diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index f5e3cf0fe3..293046b076 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -10,7 +10,7 @@ var/scantemp = "Scanner unoccupied" var/menu = 1 //Which menu screen to display var/list/records = list() - var/datum/data/record/active_record = null + var/datum/dna2/record/active_record = null var/obj/item/weapon/disk/data/diskette = null //Mostly so the geneticist can steal everything. var/loading = 0 // Nice loading text @@ -136,8 +136,8 @@ if(2) dat += "

Current records

" dat += "
Back

" - for(var/datum/data/record/R in src.records) - dat += "[R.fields["id"]]-[R.fields["name"]]
" + for(var/datum/dna2/record/R in src.records) + dat += "
  • [R.dna.real_name]
  • " if(3) dat += "

    Selected Record

    " @@ -146,10 +146,11 @@ if (!src.active_record) dat += "ERROR: Record not found." else - dat += "
    Delete Record
    " - dat += "Name: [src.active_record.fields["name"]]
    " - - var/obj/item/weapon/implant/health/H = locate(src.active_record.fields["imp"]) + dat += {"
    Delete Record
    + Name: [src.active_record.dna.real_name]
    "} + var/obj/item/weapon/implant/health/H = null + if(src.active_record.implant) + H=locate(src.active_record.implant) if ((H) && (istype(H))) dat += "Health: [H.sensehealth()] | OXY-BURN-TOX-BRUTE
    " @@ -166,13 +167,13 @@ else dat += "
    " //Keeping a line empty for appearances I guess. - dat += {"UI: [src.active_record.fields["UI"]]
    - SE: [src.active_record.fields["SE"]]

    "} + dat += {"UI: [src.active_record.dna.uni_identity]
    + SE: [src.active_record.dna.struc_enzymes]

    "} if(pod1 && pod1.biomass >= CLONE_BIOMASS) dat += {"Clone
    "} else - dat += {"Unsufficient biomass
    "} + dat += {"Insufficient biomass
    "} if(4) if (!src.active_record) @@ -217,8 +218,8 @@ else if (href_list["view_rec"]) src.active_record = locate(href_list["view_rec"]) - if(istype(src.active_record,/datum/data/record)) - if ((isnull(src.active_record.fields["ckey"])) || (src.active_record.fields["ckey"] == "")) + if(istype(src.active_record,/datum/dna2/record)) + if ((isnull(src.active_record.ckey))) del(src.active_record) src.temp = "ERROR: Record Corrupt" else @@ -248,7 +249,7 @@ else if (href_list["disk"]) //Load or eject. switch(href_list["disk"]) if("load") - if ((isnull(src.diskette)) || (src.diskette.data == "")) + if ((isnull(src.diskette)) || isnull(src.diskette.buf)) src.temp = "Load error." src.updateUsrDialog() return @@ -258,12 +259,7 @@ src.updateUsrDialog() return - if (src.diskette.data_type == "ui") - src.active_record.fields["UI"] = src.diskette.data - if (src.diskette.ue) - src.active_record.fields["name"] = src.diskette.owner - else if (src.diskette.data_type == "se") - src.active_record.fields["SE"] = src.diskette.data + src.active_record = src.diskette.buf src.temp = "Load successful." if("eject") @@ -277,28 +273,24 @@ src.updateUsrDialog() return + // DNA2 makes things a little simpler. + src.diskette.buf=src.active_record + src.diskette.buf.types=0 switch(href_list["save_disk"]) //Save as Ui/Ui+Ue/Se if("ui") - src.diskette.data = src.active_record.fields["UI"] - src.diskette.ue = 0 - src.diskette.data_type = "ui" + src.diskette.buf.types=DNA2_BUF_UI if("ue") - src.diskette.data = src.active_record.fields["UI"] - src.diskette.ue = 1 - src.diskette.data_type = "ui" + src.diskette.buf.types=DNA2_BUF_UI|DNA2_BUF_UE if("se") - src.diskette.data = src.active_record.fields["SE"] - src.diskette.ue = 0 - src.diskette.data_type = "se" - src.diskette.owner = src.active_record.fields["name"] - src.diskette.name = "data disk - '[src.diskette.owner]'" + src.diskette.buf.types=DNA2_BUF_SE + src.diskette.name = "data disk - '[src.active_record.dna.real_name]'" src.temp = "Save \[[href_list["save_disk"]]\] successful." else if (href_list["refresh"]) src.updateUsrDialog() else if (href_list["clone"]) - var/datum/data/record/C = locate(href_list["clone"]) + var/datum/dna2/record/C = locate(href_list["clone"]) //Look for that player! They better be dead! if(istype(C)) //Can't clone without someone to clone. Or a pod. Or if the pod is busy. Or full of gibs. @@ -313,17 +305,17 @@ else if(!config.revival_cloning) temp = "Error: Unable to initiate cloning cycle." - else if(pod1.growclone(C.fields["ckey"], C.fields["name"], C.fields["UI"], C.fields["SE"], C.fields["mind"], C.fields["mrace"], C.fields["languages"])) + else if(pod1.growclone(C)) temp = "Initiating cloning cycle..." records.Remove(C) del(C) menu = 1 else - var/mob/selected = find_dead_player("[C.fields["ckey"]]") + var/mob/selected = find_dead_player("[C.ckey]") selected << 'sound/machines/chime.ogg' //probably not the best sound but I think it's reasonable var/answer = alert(selected,"Do you want to return to life?","Cloning","Yes","No") - if(answer != "No" && pod1.growclone(C.fields["ckey"], C.fields["name"], C.fields["UI"], C.fields["SE"], C.fields["mind"], C.fields["mrace"], C.fields["languages"], C.fields["interface"])) + if(answer != "No" && pod1.growclone(C)) temp = "Initiating cloning cycle..." records.Remove(C) del(C) @@ -363,27 +355,25 @@ subject.dna.check_integrity() - var/datum/data/record/R = new /datum/data/record( ) - R.fields["mrace"] = subject.species - R.fields["ckey"] = subject.ckey - R.fields["name"] = subject.real_name - R.fields["id"] = copytext(md5(subject.real_name), 2, 6) - R.fields["UI"] = subject.dna.UI - R.fields["SE"] = subject.dna.SE - R.fields["languages"] = subject.languages + var/datum/dna2/record/R = new /datum/dna2/record() + R.dna=subject.dna + R.ckey = subject.ckey + R.id= copytext(md5(subject.real_name), 2, 6) + R.name=R.dna.real_name + R.types=DNA2_BUF_UI|DNA2_BUF_UE|DNA2_BUF_SE //Add an implant if needed var/obj/item/weapon/implant/health/imp = locate(/obj/item/weapon/implant/health, subject) if (isnull(imp)) imp = new /obj/item/weapon/implant/health(subject) imp.implanted = subject - R.fields["imp"] = "\ref[imp]" + R.implant = "\ref[imp]" //Update it if needed else - R.fields["imp"] = "\ref[imp]" + R.implant = "\ref[imp]" if (!isnull(subject.mind)) //Save that mind so traitors can continue traitoring after cloning. - R.fields["mind"] = "\ref[subject.mind]" + R.mind = "\ref[subject.mind]" src.records += R scantemp = "Subject successfully scanned." @@ -391,8 +381,8 @@ //Find a specific record by key. /obj/machinery/computer/cloning/proc/find_record(var/find_key) var/selected_record = null - for(var/datum/data/record/R in src.records) - if (R.fields["ckey"] == find_key) + for(var/datum/dna2/record/R in src.records) + if (R.ckey == find_key) selected_record = R break return selected_record diff --git a/code/game/machinery/computer/message.dm b/code/game/machinery/computer/message.dm index ed16489636..71a545cd55 100644 --- a/code/game/machinery/computer/message.dm +++ b/code/game/machinery/computer/message.dm @@ -443,7 +443,6 @@ //Sender isn't faking as someone who exists if(isnull(PDARec)) src.linkedServer.send_pda_message("[customrecepient.owner]", "[customsender]","[custommessage]") - customrecepient.tnote += "← From [customsender] ([customjob]):
    [custommessage]
    " if (!customrecepient.silent) playsound(customrecepient.loc, 'sound/machines/twobeep.ogg', 50, 1) for (var/mob/O in hearers(3, customrecepient.loc)) @@ -456,8 +455,13 @@ customrecepient.overlays += image('icons/obj/pda.dmi', "pda-r") //Sender is faking as someone who exists else + src.linkedServer.send_pda_message("[customrecepient.owner]", "[PDARec.owner]","[custommessage]") - customrecepient.tnote += "← From [PDARec.owner] ([customjob]):
    [custommessage]
    " + customrecepient.tnote.Add(list(list("sent" = 0, "owner" = "[PDARec.owner]", "job" = "[customjob]", "message" = "[custommessage]", "target" ="\ref[PDARec]"))) + + if(!customrecepient.conversations.Find("\ref[PDARec]")) + customrecepient.conversations.Add("\ref[PDARec]") + if (!customrecepient.silent) playsound(customrecepient.loc, 'sound/machines/twobeep.ogg', 50, 1) for (var/mob/O in hearers(3, customrecepient.loc)) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 62e7376c4d..f09abfeefe 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -173,7 +173,7 @@ if(D) var/transaction_amount = currently_vending.price if(transaction_amount <= D.money) - + //transfer the money D.money -= transaction_amount vendor_account.money += transaction_amount @@ -611,11 +611,11 @@ /obj/item/weapon/reagent_containers/food/drinks/bottle/tequilla = 5,/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka = 5, /obj/item/weapon/reagent_containers/food/drinks/bottle/vermouth = 5,/obj/item/weapon/reagent_containers/food/drinks/bottle/rum = 5, /obj/item/weapon/reagent_containers/food/drinks/bottle/wine = 5,/obj/item/weapon/reagent_containers/food/drinks/bottle/cognac = 5, - /obj/item/weapon/reagent_containers/food/drinks/bottle/kahlua = 5,/obj/item/weapon/reagent_containers/food/drinks/beer = 6, - /obj/item/weapon/reagent_containers/food/drinks/ale = 6,/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice = 4, + /obj/item/weapon/reagent_containers/food/drinks/bottle/kahlua = 5,/obj/item/weapon/reagent_containers/food/drinks/cans/beer = 6, + /obj/item/weapon/reagent_containers/food/drinks/cans/ale = 6,/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice = 4, /obj/item/weapon/reagent_containers/food/drinks/bottle/tomatojuice = 4,/obj/item/weapon/reagent_containers/food/drinks/bottle/limejuice = 4, - /obj/item/weapon/reagent_containers/food/drinks/bottle/cream = 4,/obj/item/weapon/reagent_containers/food/drinks/tonic = 8, - /obj/item/weapon/reagent_containers/food/drinks/cola = 8, /obj/item/weapon/reagent_containers/food/drinks/sodawater = 15, + /obj/item/weapon/reagent_containers/food/drinks/bottle/cream = 4,/obj/item/weapon/reagent_containers/food/drinks/cans/tonic = 8, + /obj/item/weapon/reagent_containers/food/drinks/cans/cola = 8, /obj/item/weapon/reagent_containers/food/drinks/cans/sodawater = 15, /obj/item/weapon/reagent_containers/food/drinks/drinkingglass = 30,/obj/item/weapon/reagent_containers/food/drinks/ice = 9, /obj/item/weapon/reagent_containers/food/drinks/bottle/melonliquor = 2,/obj/item/weapon/reagent_containers/food/drinks/bottle/bluecuracao = 2, /obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe = 2,/obj/item/weapon/reagent_containers/food/drinks/bottle/grenadine = 5) @@ -667,15 +667,15 @@ icon_state = "Cola_Machine" product_slogans = "Robust Softdrinks: More robust than a toolbox to the head!" product_ads = "Refreshing!;Hope you're thirsty!;Over 1 million drinks sold!;Thirsty? Why not cola?;Please, have a drink!;Drink up!;The best drinks in space." - products = list(/obj/item/weapon/reagent_containers/food/drinks/cola = 10,/obj/item/weapon/reagent_containers/food/drinks/space_mountain_wind = 10, - /obj/item/weapon/reagent_containers/food/drinks/dr_gibb = 10,/obj/item/weapon/reagent_containers/food/drinks/starkist = 10, - /obj/item/weapon/reagent_containers/food/drinks/waterbottle = 10,/obj/item/weapon/reagent_containers/food/drinks/space_up = 10, - /obj/item/weapon/reagent_containers/food/drinks/iced_tea = 10, /obj/item/weapon/reagent_containers/food/drinks/grape_juice = 10) - contraband = list(/obj/item/weapon/reagent_containers/food/drinks/thirteenloko = 5) - prices = list(/obj/item/weapon/reagent_containers/food/drinks/cola = 1,/obj/item/weapon/reagent_containers/food/drinks/space_mountain_wind = 1, - /obj/item/weapon/reagent_containers/food/drinks/dr_gibb = 1,/obj/item/weapon/reagent_containers/food/drinks/starkist = 1, - /obj/item/weapon/reagent_containers/food/drinks/waterbottle = 2,/obj/item/weapon/reagent_containers/food/drinks/space_up = 1, - /obj/item/weapon/reagent_containers/food/drinks/iced_tea = 1,/obj/item/weapon/reagent_containers/food/drinks/grape_juice = 1) + products = list(/obj/item/weapon/reagent_containers/food/drinks/cans/cola = 10,/obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind = 10, + /obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb = 10,/obj/item/weapon/reagent_containers/food/drinks/cans/starkist = 10, + /obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle = 10,/obj/item/weapon/reagent_containers/food/drinks/cans/space_up = 10, + /obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea = 10, /obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice = 10) + contraband = list(/obj/item/weapon/reagent_containers/food/drinks/cans/thirteenloko = 5) + prices = list(/obj/item/weapon/reagent_containers/food/drinks/cans/cola = 1,/obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind = 1, + /obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb = 1,/obj/item/weapon/reagent_containers/food/drinks/cans/starkist = 1, + /obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle = 2,/obj/item/weapon/reagent_containers/food/drinks/cans/space_up = 1, + /obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea = 1,/obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice = 1) //This one's from bay12 /obj/machinery/vending/cart diff --git a/code/game/mecha/medical/odysseus.dm b/code/game/mecha/medical/odysseus.dm index 008b5d819a..5c188802e3 100644 --- a/code/game/mecha/medical/odysseus.dm +++ b/code/game/mecha/medical/odysseus.dm @@ -108,6 +108,13 @@ holder.icon_state = "hudxeno" else if(foundVirus) holder.icon_state = "hudill" + else if(patient.has_brain_worms()) + var/mob/living/simple_animal/borer/B = patient.has_brain_worms() + if(B.controlling) + holder.icon_state = "hudbrainworm" + else + holder.icon_state = "hudhealthy" else holder.icon_state = "hudhealthy" + C.images += holder diff --git a/code/game/objects/effects/decals/Cleanable/aliens.dm b/code/game/objects/effects/decals/Cleanable/aliens.dm index 7ee6aaa3b5..1df3acb2b7 100644 --- a/code/game/objects/effects/decals/Cleanable/aliens.dm +++ b/code/game/objects/effects/decals/Cleanable/aliens.dm @@ -1,63 +1,33 @@ -// Note: BYOND is object oriented. There is no reason for this to be copy/pasted blood code. - -/obj/effect/decal/cleanable/xenoblood +/obj/effect/decal/cleanable/blood/xeno name = "xeno blood" desc = "It's green and acidic. It looks like... blood?" - gender = PLURAL - density = 0 - anchored = 1 - layer = 2 icon = 'icons/effects/blood.dmi' - icon_state = "xfloor1" - random_icon_states = list("xfloor1", "xfloor2", "xfloor3", "xfloor4", "xfloor5", "xfloor6", "xfloor7") - var/list/viruses = list() - blood_DNA = list() + basecolor = "#05EE05" - Del() - for(var/datum/disease/D in viruses) - D.cure(0) - ..() - -/obj/effect/decal/cleanable/xenoblood/xgibs/proc/streak(var/list/directions) - spawn (0) - var/direction = pick(directions) - for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++) - sleep(3) - if (i > 0) - var/obj/effect/decal/cleanable/xenoblood/b = new /obj/effect/decal/cleanable/xenoblood/xsplatter(src.loc) - for(var/datum/disease/D in src.viruses) - var/datum/disease/ND = D.Copy(1) - b.viruses += ND - ND.holder = b - if (step_to(src, get_step(src, direction), 0)) - break - -/obj/effect/decal/cleanable/xenoblood/xsplatter - random_icon_states = list("xgibbl1", "xgibbl2", "xgibbl3", "xgibbl4", "xgibbl5") - -/obj/effect/decal/cleanable/xenoblood/xgibs +/obj/effect/decal/cleanable/blood/gibs/xeno name = "xeno gibs" desc = "Gnarly..." - gender = PLURAL - icon = 'icons/effects/blood.dmi' icon_state = "xgib1" random_icon_states = list("xgib1", "xgib2", "xgib3", "xgib4", "xgib5", "xgib6") + basecolor = "#05EE05" -/obj/effect/decal/cleanable/xenoblood/xgibs/up +/obj/effect/decal/cleanable/blood/gibs/xeno/update_icon() + color = "#FFFFFF" + +/obj/effect/decal/cleanable/blood/gibs/xeno/up random_icon_states = list("xgib1", "xgib2", "xgib3", "xgib4", "xgib5", "xgib6","xgibup1","xgibup1","xgibup1") -/obj/effect/decal/cleanable/xenoblood/xgibs/down +/obj/effect/decal/cleanable/blood/gibs/xeno/down random_icon_states = list("xgib1", "xgib2", "xgib3", "xgib4", "xgib5", "xgib6","xgibdown1","xgibdown1","xgibdown1") -/obj/effect/decal/cleanable/xenoblood/xgibs/body +/obj/effect/decal/cleanable/blood/gibs/xeno/body random_icon_states = list("xgibhead", "xgibtorso") -/obj/effect/decal/cleanable/xenoblood/xgibs/limb +/obj/effect/decal/cleanable/blood/gibs/xeno/limb random_icon_states = list("xgibleg", "xgibarm") -/obj/effect/decal/cleanable/xenoblood/xgibs/core +/obj/effect/decal/cleanable/blood/gibs/xeno/core random_icon_states = list("xgibmid1", "xgibmid2", "xgibmid3") /obj/effect/decal/cleanable/blood/xtracks - icon_state = "xtracks" - random_icon_states = null \ No newline at end of file + basecolor = "#05EE05" \ No newline at end of file diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm index 0187d0a9af..af0a3e65e1 100644 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ b/code/game/objects/effects/decals/Cleanable/humans.dm @@ -1,16 +1,21 @@ -#define DRYING_TIME 5 * 60*10 //for 1 unit of depth in puddle (amount var) +#define DRYING_TIME 5 * 60*10 //for 1 unit of depth in puddle (amount var) + +var/global/list/image/splatter_cache=list() + /obj/effect/decal/cleanable/blood name = "blood" - desc = "It's red and gooey. Perhaps it's the chef's cooking?" + desc = "It's thick and gooey. Perhaps it's the chef's cooking?" gender = PLURAL density = 0 anchored = 1 layer = 2 icon = 'icons/effects/blood.dmi' - icon_state = "floor1" - random_icon_states = list("floor1", "floor2", "floor3", "floor4", "floor5", "floor6", "floor7") + icon_state = "mfloor1" + random_icon_states = list("mfloor1", "mfloor2", "mfloor3", "mfloor4", "mfloor5", "mfloor6", "mfloor7") + var/base_icon = 'icons/effects/blood.dmi' var/list/viruses = list() blood_DNA = list() + var/basecolor="#A10808" // Color when wet. var/list/datum/disease2/disease/virus2 = list() var/amount = 5 @@ -21,8 +26,11 @@ /obj/effect/decal/cleanable/blood/New() ..() + update_icon() if(istype(src, /obj/effect/decal/cleanable/blood/gibs)) return + if(istype(src, /obj/effect/decal/cleanable/blood/tracks)) + return // We handle our own drying. if(src.type == /obj/effect/decal/cleanable/blood) if(src.loc && isturf(src.loc)) for(var/obj/effect/decal/cleanable/blood/B in src.loc) @@ -33,61 +41,92 @@ spawn(DRYING_TIME * (amount+1)) dry() +/obj/effect/decal/cleanable/blood/update_icon() + if(basecolor == "rainbow") basecolor = "#[pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF"))]" + color = basecolor + /obj/effect/decal/cleanable/blood/HasEntered(mob/living/carbon/human/perp) - if (!istype(perp)) - return - if(amount < 1) - return + if (!istype(perp)) + return + if(amount < 1) + return - if(perp.shoes) - perp.shoes:track_blood = max(amount,perp.shoes:track_blood) //Adding blood to shoes - if(!perp.shoes.blood_overlay) - perp.shoes.generate_blood_overlay() - if(!perp.shoes.blood_DNA) - perp.shoes.blood_DNA = list() - perp.shoes.overlays += perp.shoes.blood_overlay - perp.update_inv_shoes(1) - perp.shoes.blood_DNA |= blood_DNA.Copy() - else - perp.track_blood = max(amount,perp.track_blood) //Or feet - if(!perp.feet_blood_DNA) - perp.feet_blood_DNA = list() - perp.feet_blood_DNA |= blood_DNA.Copy() + if(perp.shoes) + perp.shoes:track_blood = max(amount,perp.shoes:track_blood) //Adding blood to shoes + if(!perp.shoes.blood_overlay) + perp.shoes.generate_blood_overlay() + if(!perp.shoes.blood_DNA) + perp.shoes.blood_DNA = list() + perp.shoes.blood_overlay.color = basecolor + perp.shoes.overlays += perp.shoes.blood_overlay + perp.update_inv_shoes(1) + perp.shoes.blood_DNA |= blood_DNA.Copy() + perp.shoes.blood_color=basecolor + else + perp.track_blood = max(amount,perp.track_blood) //Or feet + if(!perp.feet_blood_DNA) + perp.feet_blood_DNA = list() + perp.feet_blood_DNA |= blood_DNA.Copy() + perp.feet_blood_color=basecolor - amount-- + amount-- /obj/effect/decal/cleanable/blood/proc/dry() - name = "dried [src.name]" - desc = "It's dark red and crusty. Someone is not doing their job." - color = "#999999" - amount = 0 + name = "dried [src.name]" + desc = "It's dry and crusty. Someone is not doing their job." + color = adjust_brightness(color, -50) + amount = 0 + +/obj/effect/decal/cleanable/blood/attack_hand(mob/living/carbon/human/user) + ..() + if (amount && istype(user)) + add_fingerprint(user) + if (user.gloves) + return + var/taken = rand(1,amount) + amount -= taken + user << "You get some of \the [src] on your hands." + if (!user.blood_DNA) + user.blood_DNA = list() + user.blood_DNA |= blood_DNA.Copy() + user.bloody_hands += taken + user.hand_blood_color = basecolor + user.update_inv_gloves(1) + user.verbs += /mob/living/carbon/human/proc/bloody_doodle /obj/effect/decal/cleanable/blood/splatter - random_icon_states = list("gibbl1", "gibbl2", "gibbl3", "gibbl4", "gibbl5") - amount = 2 - -/obj/effect/decal/cleanable/blood/footprints - name = "bloody footprints" - desc = "Whoops..." - icon='icons/effects/footprints.dmi' - icon_state = "blood1" - amount = 0 - random_icon_states = null - -/obj/effect/decal/cleanable/blood/tracks - icon_state = "tracks" - desc = "They look like tracks left by wheels." - gender = PLURAL - random_icon_states = null - amount = 0 + random_icon_states = list("mgibbl1", "mgibbl2", "mgibbl3", "mgibbl4", "mgibbl5") + amount = 2 /obj/effect/decal/cleanable/blood/drip - name = "drips of blood" - desc = "It's red." - gender = PLURAL - icon = 'icons/effects/drip.dmi' - icon_state = "1" + name = "drips of blood" + desc = "It's red." + gender = PLURAL + icon = 'icons/effects/drip.dmi' + icon_state = "1" + random_icon_states = list("1","2","3","4","5") + amount = 0 + +/obj/effect/decal/cleanable/blood/writing + icon_state = "tracks" + desc = "It looks like a writing in blood." + gender = NEUTER + random_icon_states = list("writing1","writing2","writing3","writing4","writing5") amount = 0 + var/message + +/obj/effect/decal/cleanable/blood/writing/New() + ..() + if(random_icon_states.len) + for(var/obj/effect/decal/cleanable/blood/writing/W in loc) + random_icon_states.Remove(W.icon_state) + icon_state = pick(random_icon_states) + else + icon_state = "writing1" + +/obj/effect/decal/cleanable/blood/writing/examine() + ..() + usr << "It reads: \"[message]\"" /obj/effect/decal/cleanable/blood/gibs name = "gibs" @@ -99,6 +138,22 @@ icon = 'icons/effects/blood.dmi' icon_state = "gibbl5" random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6") + var/fleshcolor = "#FFFFFF" + +/obj/effect/decal/cleanable/blood/gibs/update_icon() + + var/image/giblets = new(base_icon, "[icon_state]_flesh", dir) + if(!fleshcolor || fleshcolor == "rainbow") + fleshcolor = "#[pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF"))]" + giblets.color = fleshcolor + + var/icon/blood = new(base_icon,"[icon_state]",dir) + if(basecolor == "rainbow") basecolor = "#[pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF"))]" + blood.Blend(basecolor,ICON_MULTIPLY) + + icon = blood + overlays.Cut() + overlays += giblets /obj/effect/decal/cleanable/blood/gibs/up random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6","gibup1","gibup1","gibup1") @@ -117,19 +172,21 @@ /obj/effect/decal/cleanable/blood/gibs/proc/streak(var/list/directions) - spawn (0) - var/direction = pick(directions) - for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++) - sleep(3) - if (i > 0) - var/obj/effect/decal/cleanable/blood/b = new /obj/effect/decal/cleanable/blood/splatter(src.loc) - for(var/datum/disease/D in src.viruses) - var/datum/disease/ND = D.Copy(1) - b.viruses += ND - ND.holder = b + spawn (0) + var/direction = pick(directions) + for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++) + sleep(3) + if (i > 0) + var/obj/effect/decal/cleanable/blood/b = new /obj/effect/decal/cleanable/blood/splatter(src.loc) + b.basecolor = src.basecolor + b.update_icon() + for(var/datum/disease/D in src.viruses) + var/datum/disease/ND = D.Copy(1) + b.viruses += ND + ND.holder = b - if (step_to(src, get_step(src, direction), 0)) - break + if (step_to(src, get_step(src, direction), 0)) + break /obj/effect/decal/cleanable/mucus @@ -142,4 +199,10 @@ icon = 'icons/effects/blood.dmi' icon_state = "mucus" random_icon_states = list("mucus") + var/list/datum/disease2/disease/virus2 = list() + var/dry=0 // Keeps the lag down + +/obj/effect/decal/cleanable/mucus/New() + spawn(DRYING_TIME * 2) + dry=1 diff --git a/code/game/objects/effects/decals/Cleanable/robots.dm b/code/game/objects/effects/decals/Cleanable/robots.dm index fa3aa3bfa9..150197347d 100644 --- a/code/game/objects/effects/decals/Cleanable/robots.dm +++ b/code/game/objects/effects/decals/Cleanable/robots.dm @@ -1,25 +1,26 @@ -// Note: BYOND is object oriented. There is no reason for this to be copy/pasted blood code. - -/obj/effect/decal/cleanable/robot_debris +/obj/effect/decal/cleanable/blood/gibs/robot name = "robot debris" desc = "It's a useless heap of junk... or is it?" - gender = PLURAL - density = 0 - anchored = 1 - layer = 2 icon = 'icons/mob/robots.dmi' icon_state = "gib1" + basecolor="#030303" random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7") -/obj/effect/decal/cleanable/robot_debris/proc/streak(var/list/directions) +/obj/effect/decal/cleanable/blood/gibs/robot/update_icon() + color = "#FFFFFF" + +/obj/effect/decal/cleanable/blood/gibs/robot/dry() //pieces of robots do not dry up like + return + +/obj/effect/decal/cleanable/blood/gibs/robot/streak(var/list/directions) spawn (0) var/direction = pick(directions) for (var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++) sleep(3) if (i > 0) if (prob(40)) - /*var/obj/effect/decal/cleanable/oil/o =*/ - new /obj/effect/decal/cleanable/oil/streak(src.loc) + var/obj/effect/decal/cleanable/blood/oil/streak = new(src.loc) + streak.update_icon() else if (prob(10)) var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread s.set_up(3, 1, src) @@ -27,31 +28,23 @@ if (step_to(src, get_step(src, direction), 0)) break -/obj/effect/decal/cleanable/robot_debris/limb +/obj/effect/decal/cleanable/blood/gibs/robot/limb random_icon_states = list("gibarm", "gibleg") -/obj/effect/decal/cleanable/robot_debris/up +/obj/effect/decal/cleanable/blood/gibs/robot/up random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7","gibup1","gibup1") //2:7 is close enough to 1:4 -/obj/effect/decal/cleanable/robot_debris/down +/obj/effect/decal/cleanable/blood/gibs/robot/down random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7","gibdown1","gibdown1") //2:7 is close enough to 1:4 -/obj/effect/decal/cleanable/oil +/obj/effect/decal/cleanable/blood/oil name = "motor oil" desc = "It's black and greasy. Looks like Beepsky made another mess." - gender = PLURAL - density = 0 - anchored = 1 - layer = 2 - icon = 'icons/mob/robots.dmi' - icon_state = "floor1" - var/viruses = list() - random_icon_states = list("floor1", "floor2", "floor3", "floor4", "floor5", "floor6", "floor7") + basecolor="#030303" - Del() - for(var/datum/disease/D in viruses) - D.cure(0) - ..() +/obj/effect/decal/cleanable/blood/oil/dry() + return -/obj/effect/decal/cleanable/oil/streak - random_icon_states = list("streak1", "streak2", "streak3", "streak4", "streak5") \ No newline at end of file +/obj/effect/decal/cleanable/blood/oil/streak + random_icon_states = list("mgibbl1", "mgibbl2", "mgibbl3", "mgibbl4", "mgibbl5") + amount = 2 \ No newline at end of file diff --git a/code/game/objects/effects/decals/Cleanable/tracks.dm b/code/game/objects/effects/decals/Cleanable/tracks.dm new file mode 100644 index 0000000000..0382e3dbc9 --- /dev/null +++ b/code/game/objects/effects/decals/Cleanable/tracks.dm @@ -0,0 +1,161 @@ +// Stolen en masse from N3X15 of /vg/station with much gratitude. + +// The idea is to have 4 bits for coming and 4 for going. +#define TRACKS_COMING_NORTH 1 +#define TRACKS_COMING_SOUTH 2 +#define TRACKS_COMING_EAST 4 +#define TRACKS_COMING_WEST 8 +#define TRACKS_GOING_NORTH 16 +#define TRACKS_GOING_SOUTH 32 +#define TRACKS_GOING_EAST 64 +#define TRACKS_GOING_WEST 128 + +// 5 seconds +#define TRACKS_CRUSTIFY_TIME 50 + +// color-dir-dry +var/global/list/image/fluidtrack_cache=list() + +/datum/fluidtrack + var/direction=0 + var/basecolor="#A10808" + var/wet=0 + var/fresh=1 + var/crusty=0 + var/image/overlay + + New(_direction,_color,_wet) + src.direction=_direction + src.basecolor=_color + src.wet=_wet + +// Footprints, tire trails... +/obj/effect/decal/cleanable/blood/tracks + amount = 0 + random_icon_states = null + var/dirs=0 + icon = 'icons/effects/fluidtracks.dmi' + icon_state = "" + var/coming_state="blood1" + var/going_state="blood2" + var/updatedtracks=0 + + // dir = id in stack + var/list/setdirs=list( + "1"=0, + "2"=0, + "4"=0, + "8"=0, + "16"=0, + "32"=0, + "64"=0, + "128"=0 + ) + + // List of laid tracks and their colors. + var/list/datum/fluidtrack/stack=list() + + /** + * Add tracks to an existing trail. + * + * @param DNA bloodDNA to add to collection. + * @param comingdir Direction tracks come from, or 0. + * @param goingdir Direction tracks are going to (or 0). + * @param bloodcolor Color of the blood when wet. + */ + proc/AddTracks(var/list/DNA, var/comingdir, var/goingdir, var/bloodcolor="#A10808") + var/updated=0 + // Shift our goingdir 4 spaces to the left so it's in the GOING bitblock. + var/realgoing=goingdir<<4 + + // Current bit + var/b=0 + + // When tracks will start to dry out + var/t=world.time + TRACKS_CRUSTIFY_TIME + + var/datum/fluidtrack/track + + // Process 4 bits + for(var/bi=0;bi<4;bi++) + b=1<>4 + + if(track.overlay) + track.overlay=null + var/image/I = image(icon, icon_state=state, dir=num2dir(truedir)) + I.color = track.basecolor + + track.fresh=0 + track.overlay=I + stack[stack_idx]=track + overlays += I + updatedtracks=0 // Clear our memory of updated tracks. + +/obj/effect/decal/cleanable/blood/tracks/footprints + name = "wet footprints" + desc = "Whoops..." + coming_state = "human1" + going_state = "human2" + amount = 0 + +/obj/effect/decal/cleanable/blood/tracks/wheels + name = "wet tracks" + desc = "Whoops..." + coming_state = "wheels" + going_state = "" + desc = "They look like tracks left by wheels." + gender = PLURAL + random_icon_states = null + amount = 0 \ No newline at end of file diff --git a/code/game/objects/effects/gibs.dm b/code/game/objects/effects/gibs.dm index ae8fc7220a..619935b8b2 100644 --- a/code/game/objects/effects/gibs.dm +++ b/code/game/objects/effects/gibs.dm @@ -1,8 +1,8 @@ /proc/gibs(atom/location, var/list/viruses, var/datum/dna/MobDNA) //CARN MARKER new /obj/effect/gibspawner/generic(get_turf(location),viruses,MobDNA) -/proc/hgibs(atom/location, var/list/viruses, var/datum/dna/MobDNA) - new /obj/effect/gibspawner/human(get_turf(location),viruses,MobDNA) +/proc/hgibs(atom/location, var/list/viruses, var/datum/dna/MobDNA, var/fleshcolor, var/bloodcolor) + new /obj/effect/gibspawner/human(get_turf(location),viruses,MobDNA,fleshcolor,bloodcolor) /proc/xgibs(atom/location, var/list/viruses) new /obj/effect/gibspawner/xeno(get_turf(location),viruses) @@ -16,10 +16,15 @@ var/list/gibtypes = list() var/list/gibamounts = list() var/list/gibdirections = list() //of lists + var/fleshcolor //Used for gibbed humans. + var/bloodcolor //Used for gibbed humans. - New(location, var/list/viruses, var/datum/dna/MobDNA) + New(location, var/list/viruses, var/datum/dna/MobDNA, var/fleshcolor, var/bloodcolor) ..() + if(fleshcolor) src.fleshcolor = fleshcolor + if(bloodcolor) src.bloodcolor = bloodcolor + if(istype(loc,/turf)) //basically if a badmin spawns it Gib(loc,viruses,MobDNA) @@ -44,6 +49,14 @@ var/gibType = gibtypes[i] gib = new gibType(location) + // Apply human species colouration to masks. + if(fleshcolor) + gib.fleshcolor = fleshcolor + if(bloodcolor) + gib.basecolor = bloodcolor + + gib.update_icon() + if(viruses.len > 0) for(var/datum/disease/D in viruses) if(prob(virusProb)) diff --git a/code/game/objects/effects/spawners/gibspawner.dm b/code/game/objects/effects/spawners/gibspawner.dm index c519439237..5446ba348e 100644 --- a/code/game/objects/effects/spawners/gibspawner.dm +++ b/code/game/objects/effects/spawners/gibspawner.dm @@ -17,7 +17,7 @@ ..() xeno - gibtypes = list(/obj/effect/decal/cleanable/xenoblood/xgibs/up,/obj/effect/decal/cleanable/xenoblood/xgibs/down,/obj/effect/decal/cleanable/xenoblood/xgibs,/obj/effect/decal/cleanable/xenoblood/xgibs,/obj/effect/decal/cleanable/xenoblood/xgibs/body,/obj/effect/decal/cleanable/xenoblood/xgibs/limb,/obj/effect/decal/cleanable/xenoblood/xgibs/core) + gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/xeno/up,/obj/effect/decal/cleanable/blood/gibs/xeno/down,/obj/effect/decal/cleanable/blood/gibs/xeno,/obj/effect/decal/cleanable/blood/gibs/xeno,/obj/effect/decal/cleanable/blood/gibs/xeno/body,/obj/effect/decal/cleanable/blood/gibs/xeno/limb,/obj/effect/decal/cleanable/blood/gibs/xeno/core) gibamounts = list(1,1,1,1,1,1,1) New() @@ -27,7 +27,7 @@ robot sparks = 1 - gibtypes = list(/obj/effect/decal/cleanable/robot_debris/up,/obj/effect/decal/cleanable/robot_debris/down,/obj/effect/decal/cleanable/robot_debris,/obj/effect/decal/cleanable/robot_debris,/obj/effect/decal/cleanable/robot_debris,/obj/effect/decal/cleanable/robot_debris/limb) + gibtypes = list(/obj/effect/decal/cleanable/blood/gibs/robot/up,/obj/effect/decal/cleanable/blood/gibs/robot/down,/obj/effect/decal/cleanable/blood/gibs/robot,/obj/effect/decal/cleanable/blood/gibs/robot,/obj/effect/decal/cleanable/blood/gibs/robot,/obj/effect/decal/cleanable/blood/gibs/robot/limb) gibamounts = list(1,1,1,1,1,1) New() diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 16e5ef3a9a..e93c1846c1 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -1,7 +1,7 @@ /obj/item name = "item" icon = 'icons/obj/items.dmi' - var/icon/blood_overlay = null //this saves our blood splatter overlay, which will be processed not to go over the edges of the sprite + var/image/blood_overlay = null //this saves our blood splatter overlay, which will be processed not to go over the edges of the sprite var/abstract = 0 var/item_state = null var/r_speed = 1.0 @@ -569,6 +569,7 @@ //apply the blood-splatter overlay if it isn't already in there if(!blood_DNA.len) + blood_overlay.color = blood_color overlays += blood_overlay //if this blood isn't already in the list, add it @@ -589,4 +590,17 @@ //not sure if this is worth it. It attaches the blood_overlay to every item of the same type if they don't have one already made. for(var/obj/item/A in world) if(A.type == type && !A.blood_overlay) - A.blood_overlay = I \ No newline at end of file + A.blood_overlay = image(I) + +/obj/item/proc/showoff(mob/user) + for (var/mob/M in view(user)) + M.show_message("[user] holds up [src]. Take a closer look.",1) + +/mob/living/carbon/verb/showoff() + set name = "Show Held Item" + set category = "Object" + + var/obj/item/I = get_active_hand() + if(I && !I.abstract) + I.showoff(src) + diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index ad757325b9..ee73d537d8 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -80,6 +80,7 @@ if(instant || do_after(user, 50)) new /obj/effect/decal/cleanable/crayon(target,colour,shadeColour,drawtype) user << "You finish drawing." + target.add_fingerprint(user) // Adds their fingerprints to the floor the crayon is drawn on. if(uses) uses-- if(!uses) @@ -97,4 +98,4 @@ user << "\red You ate your crayon!" del(src) else - ..() \ No newline at end of file + ..() diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 2750af1b05..b875ed8076 100755 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -26,7 +26,7 @@ var/global/list/obj/item/device/pda/PDAs = list() var/f_lum = 2 //Luminosity for the flashlight function var/silent = 0 //To beep or not to beep, that is the question var/toff = 0 //If 1, messenger disabled - var/tnote = null //Current Texts + var/tnote[0] //Current Texts var/last_text //No text spamming var/last_honk //Also no honk spamming that's bad too var/ttone = "beep" //The ringtone! @@ -38,7 +38,10 @@ var/global/list/obj/item/device/pda/PDAs = list() var/cart = "" //A place to stick cartridge menu information var/detonate = 1 // Can the PDA be blown up? var/hidden = 0 // Is the PDA hidden from the PDA list? - + var/active_conversation = null // New variable that allows us to only view a single conversation. + var/list/conversations = list() // For keeping up with who we have PDA messsages from. + var/newmessage = 0 //To remove hackish overlay check + var/obj/item/weapon/card/id/id = null //Making it possible to slot an ID card into the PDA so it can function as both. var/ownjob = null //related to above @@ -243,7 +246,13 @@ var/global/list/obj/item/device/pda/PDAs = list() if(usr.stat == 2) usr << "You can't do that because you are dead!" return - var/HTML = "AI PDA Message Log[tnote]" + var/HTML = "AI PDA Message Log" + for(var/index in tnote) + if(index["sent"]) + HTML += addtext("→ To ", index["owner"],":
    ", index["message"], "
    ") + else + HTML += addtext("← From ", index["owner"],":
    ", index["message"], "
    ") + HTML +="" usr << browse(HTML, "window=log;size=400x444;border=1;can_resize=1;can_close=1;can_minimize=0") @@ -310,6 +319,180 @@ var/global/list/obj/item/device/pda/PDAs = list() return attack_self(M) return + + + +/* Notes for those wanting to modify this code or even understand it. + There are two modes: New UI and a UI already existing. + If the UI is new, you define your variables, if the ui already exists if it didn't have variables in data for what you want to add + then it won't add it even if you make a data["blahblah"] for it. That's the reason for the = null all over the place, so that. + ui.push_data(data) proc has to have the var structure already setup otherwise it can't push the update. + + The exception to the "YOU HAVE TO DEFINE IT" rule is cartridges, we later force + the ui to close if a cartridge is inserted so that never will be a problem. + So there will never be a time a UI creation causes that to be a problem. +*/ + +/obj/item/device/pda/ui_interact(mob/user, ui_key = "main") + var/title = "Personal Data Assistant" + var/datum/nanoui/ui = nanomanager.get_open_ui(user, src, ui_key) + + var/data[0] // This is the data that will be sent to the PDA + + + data["owner"] = owner // Who is your daddy... + data["ownjob"] = ownjob // ...and what does he do? + + data["mode"] = mode // The current view + data["scanmode"] = scanmode // Scanners + data["fon"] = fon // Flashlight on? + data["pai"] = (isnull(pai) ? 0 : 1) // pAI inserted? + data["note"] = note // current pda notes + data["silent"] = silent // does the pda make noise when it receives a message? + data["toff"] = toff // is the messenger function turned off? + data["active_conversation"] = active_conversation // Which conversation are we following right now? + + + data["idInserted"] = (id ? 1 : 0) + data["idLink"] = (id ? text("[id.registered_name], [id.assignment]") : "--------") + + + if(cartridge) + var/cartdata[0] + + + data["records"] = cartridge.create_NanoUI_values() + + + cartdata["name"] = cartridge.name + cartdata["access"] = list(\ + "access_security" = cartridge.access_security,\ + "access_engine" = cartridge.access_engine,\ + "access_atmos" = cartridge.access_atmos,\ + "access_medical" = cartridge.access_medical,\ + "access_clown" = cartridge.access_clown,\ + "access_mime" = cartridge.access_mime,\ + "access_janitor" = cartridge.access_janitor,\ + "access_quartermaster" = cartridge.access_quartermaster,\ + "access_hydroponics" = cartridge.access_hydroponics,\ + "access_reagent_scanner" = cartridge.access_reagent_scanner,\ + "access_remote_door" = cartridge.access_remote_door,\ + "access_status_display" = cartridge.access_status_display\ + ) + if(isnull(cartridge.radio)) + cartdata["radio"] = 0 + else + if(istype(cartridge.radio, /obj/item/radio/integrated/beepsky)) + cartdata["radio"] = 1 + if(istype(cartridge.radio, /obj/item/radio/integrated/signal)) + cartdata["radio"] = 2 + if(istype(cartridge.radio, /obj/item/radio/integrated/mule)) + cartdata["radio"] = 3 + + cartdata["type"] = cartridge.type + cartdata["charges"] = cartridge.charges ? cartridge.charges : 0 + data["cartridge"] = cartdata + + + + + + data["stationTime"] = worldtime2text() + data["newMessage"] = newmessage + + + + var/convopdas[0] + var/pdas[0] + var/count = 0 + for (var/obj/item/device/pda/P in sortAtom(PDAs)) + if (!P.owner||P.toff||P == src||P.hidden) continue + if(conversations.Find("\ref[P]")) + convopdas.Add(list(list("Name" = "[P]", "Reference" = "\ref[P]", "Detonate" = "[P.detonate]", "inconvo" = "1"))) + else + pdas.Add(list(list("Name" = "[P]", "Reference" = "\ref[P]", "Detonate" = "[P.detonate]", "inconvo" = "0"))) + count++ + + data["convopdas"] = convopdas + data["pdas"] = pdas + data["pda_count"] = count + + if(mode==21) + data["messagescount"] = tnote.len + data["messages"] = tnote + else + data["messagescount"] = null + data["messages"] = null + + var/found = 0 + if(active_conversation) + for(var/c in tnote) + if(c["target"] == active_conversation) + data["convo_name"] = sanitize(c["owner"]) + data["convo_job"] = sanitize(c["job"]) + found = 1 + break + if(!found) + data["convo_name"] = null + data["convo_job"] = null + + if(!ui || mode==41) + data["manifest"] = data_core.get_manifest_json() + + + if(!ui || mode==3) + var/turf/T = get_turf_or_move(user.loc) + if(!isnull(T) || mode!=3) + var/datum/gas_mixture/environment = T.return_air() + + var/pressure = environment.return_pressure() + var/total_moles = environment.total_moles() + + if (total_moles) + var/o2_level = environment.oxygen/total_moles + var/n2_level = environment.nitrogen/total_moles + var/co2_level = environment.carbon_dioxide/total_moles + var/plasma_level = environment.toxins/total_moles + var/unknown_level = 1-(o2_level+n2_level+co2_level+plasma_level) + data["aircontents"] = list(\ + "pressure" = "[round(pressure,0.1)]",\ + "nitrogen" = "[round(n2_level*100,0.1)]",\ + "oxygen" = "[round(o2_level*100,0.1)]",\ + "carbon_dioxide" = "[round(co2_level*100,0.1)]",\ + "plasma" = "[round(plasma_level*100,0.01)]",\ + "other" = "[round(unknown_level, 0.01)]",\ + "temp" = "[round(environment.temperature-T0C,0.1)]",\ + "reading" = 1\ + ) + if(isnull(data["aircontents"])) + data["aircontents"] = list(\ + "pressure" = null,\ + "nitrogen" = null,\ + "oxygen" = null,\ + "carbon_dioxide" = null,\ + "plasma" = null,\ + "other" = null,\ + "temp" = null,\ + "reading" = 0\ + ) + + + + + if (!ui) + // the ui does not exist, so we'll create a new one + ui = new(user, src, ui_key, "pda.tmpl", title, 630, 600) + // When the UI is first opened this is the data it will use + ui.set_initial_data(data) + ui.open() + ui.set_auto_update(1) + else + // The UI is already open so push the new data to it + ui.push_data(data) + return + + + //NOTE: graphic resources are loaded on client login /obj/item/device/pda/attack_self(mob/user as mob) @@ -318,203 +501,21 @@ var/global/list/obj/item/device/pda/PDAs = list() if(active_uplink_check(user)) return - var/dat = "Personal Data Assistant" - - dat += " Close" - - if ((!isnull(cartridge)) && (mode == 0)) - dat += " | Eject [cartridge]" - if (mode) - dat += " | Return" - dat += " | Refresh" - - dat += "
    " - - if (!owner) - dat += "Warning: No owner information entered. Please swipe card.

    " - dat += " Retry" - else - switch (mode) - if (0) - dat += "

    PERSONAL DATA ASSISTANT v.1.2

    " - dat += "Owner: [owner], [ownjob]
    " - dat += text("ID: [id ? "[id.registered_name], [id.assignment]" : "----------"]") - dat += text("
    [id ? "Update PDA Info" : ""]
    ") - - dat += "Station Time: [worldtime2text()]"//:[world.time / 100 % 6][world.time / 100 % 10]" - - dat += "

    " - - dat += "

    General Functions

    " - dat += "" - if (cartridge.access_engine) - dat += "

    Engineering Functions

    " - dat += "" - if (cartridge.access_medical) - dat += "

    Medical Functions

    " - dat += "" - if (cartridge.access_security) - dat += "

    Security Functions

    " - dat += "" - else dat += "" - if(cartridge.access_quartermaster) - dat += "

    Quartermaster Functions:

    " - dat += "" - dat += "" - - dat += "

    Utilities

    " - dat += "" - - if (1) - dat += "

    Notekeeper V2.1

    " - dat += " Edit
    " - dat += note - - if (2) - dat += "

    SpaceMessenger V3.9.4

    " - dat += " Ringer: [silent == 1 ? "Off" : "On"] | " - dat += " Send / Receive: [toff == 1 ? "Off" : "On"] | " - dat += " Set Ringtone | " - dat += " Messages
    " - - if (istype(cartridge, /obj/item/weapon/cartridge/syndicate)) - dat += "[cartridge:shock_charges] detonation charges left.
    " - if (istype(cartridge, /obj/item/weapon/cartridge/clown)) - dat += "[cartridge:honk_charges] viral files left.
    " - if (istype(cartridge, /obj/item/weapon/cartridge/mime)) - dat += "[cartridge:mime_charges] viral files left.
    " - - dat += "

    Detected PDAs

    " - - dat += "
      " - - var/count = 0 - - if (!toff) - for (var/obj/item/device/pda/P in sortAtom(PDAs)) - if (!P.owner||P.toff||P == src||P.hidden) continue - dat += "
    • [P]" - if (istype(cartridge, /obj/item/weapon/cartridge/syndicate) && P.detonate) - dat += " (*Detonate*)" - if (istype(cartridge, /obj/item/weapon/cartridge/clown)) - dat += " (*Send Virus*)" - if (istype(cartridge, /obj/item/weapon/cartridge/mime)) - dat += " (*Send Virus*)" - dat += "
    • " - count++ - dat += "
    " - if (count == 0) - dat += "None detected.
    " - - if(21) - dat += "

    SpaceMessenger V3.9.4

    " - dat += " Clear Messages" - - dat += "

    Messages

    " - - dat += tnote - dat += "
    " - - if (3) - dat += "

    Atmospheric Readings

    " - - var/turf/T = get_turf_or_move(user.loc) - if (isnull(T)) - dat += "Unable to obtain a reading.
    " - else - var/datum/gas_mixture/environment = T.return_air() - - var/pressure = environment.return_pressure() - var/total_moles = environment.total_moles() - - dat += "Air Pressure: [round(pressure,0.1)] kPa
    " - - if (total_moles) - var/o2_level = environment.oxygen/total_moles - var/n2_level = environment.nitrogen/total_moles - var/co2_level = environment.carbon_dioxide/total_moles - var/plasma_level = environment.toxins/total_moles - var/unknown_level = 1-(o2_level+n2_level+co2_level+plasma_level) - dat += "Nitrogen: [round(n2_level*100)]%
    " - dat += "Oxygen: [round(o2_level*100)]%
    " - dat += "Carbon Dioxide: [round(co2_level*100)]%
    " - dat += "Plasma: [round(plasma_level*100)]%
    " - if(unknown_level > 0.01) - dat += "OTHER: [round(unknown_level)]%
    " - dat += "Temperature: [round(environment.temperature-T0C)]°C
    " - dat += "
    " - - if (5) - dat += "

    Nanotrasen Relay Chat

    " - - dat += "

    Detected Channels

    :
  • " - for(var/datum/chatroom/C in chatrooms) - dat += "#[html_encode(lowertext(C.name))]" - if(C.password != "") - dat += " " - dat += "
  • " - - if (41) //crew manifest - dat += "

    Crew Manifest

    " - dat += "Entries cannot be modified from this terminal.

    " - if(data_core) - dat += data_core.get_manifest(1) // make it monochrome - dat += "
    " - - else//Else it links to the cart menu proc. Although, it really uses menu hub 4--menu 4 doesn't really exist as it simply redirects to hub. - dat += cart - - dat += "" - user << browse(dat, "window=pda;size=400x444;border=1;can_resize=1;can_close=0;can_minimize=0") - onclose(user, "pda", src) + ui_interact(user) //NanoUI requires this proc + return /obj/item/device/pda/Topic(href, href_list) + if(href_list["cartmenu"] && !isnull(cartridge)) + cartridge.Topic(href, href_list) + return 1 + if(href_list["radiomenu"] && !isnull(cartridge) && !isnull(cartridge.radio)) + cartridge.radio.Topic(href, href_list) + return 1 + + ..() + var/mob/user = usr + var/datum/nanoui/ui = nanomanager.get_open_ui(user, src, "main") var/mob/living/U = usr //Looking for master was kind of pointless since PDAs don't appear to have one. //if ((src in U.contents) || ( istype(loc, /turf) && in_range(src, U) ) ) @@ -531,7 +532,7 @@ var/global/list/obj/item/device/pda/PDAs = list() if("Close")//Self explanatory U.unset_machine() - U << browse(null, "window=pda") + ui.close() return if("Refresh")//Refresh, goes to the end of the proc. if("Return")//Return @@ -539,11 +540,12 @@ var/global/list/obj/item/device/pda/PDAs = list() mode = 0 else mode = round(mode/10) + if(mode==2) + active_conversation = null if(mode==4)//Fix for cartridges. Redirects to hub. mode = 0 else if(mode >= 40 && mode <= 49)//Fix for cartridges. Redirects to refresh the menu. cartridge.mode = mode - cartridge.unlock() if ("Authenticate")//Checks for ID id_check(U, 1) if("UpdateInfo") @@ -555,6 +557,8 @@ var/global/list/obj/item/device/pda/PDAs = list() if(ismob(T)) T = T.loc cartridge.loc = T + ui.close() + mode = 0 scanmode = 0 if (cartridge.radio) cartridge.radio.hostpda = null @@ -623,60 +627,85 @@ var/global/list/obj/item/device/pda/PDAs = list() if (in_range(src, U) && loc == U) n = copytext(adminscrub(n), 1, MAX_MESSAGE_LEN) if (mode == 1) - note = replacetext(n, "\n", "
    ") - notehtml = n + note = html_decode(n) + notehtml = note + note = replacetext(note, "\n", "
    ") else - U << browse(null, "window=pda") - return + ui.close() if("Toggle Messenger") toff = !toff if("Toggle Ringer")//If viewing texts then erase them, if not then toggle silent status silent = !silent if("Clear")//Clears messages - tnote = null + if(href_list["option"] == "All") + tnote.Cut() + conversations.Cut() + if(href_list["option"] == "Convo") + var/new_tnote[0] + for(var/i in tnote) + if(i["target"] != active_conversation) + new_tnote[++new_tnote.len] = i + tnote = new_tnote + conversations.Remove(active_conversation) + + active_conversation = null + if(mode==21) + mode=2 + if("Ringtone") var/t = input(U, "Please enter new ringtone", name, ttone) as text if (in_range(src, U) && loc == U) if (t) if(src.hidden_uplink && hidden_uplink.check_trigger(U, lowertext(t), lowertext(lock_code))) U << "The PDA softly beeps." - U << browse(null, "window=pda") + ui.close() else t = copytext(sanitize(t), 1, 20) ttone = t else - U << browse(null, "window=pda") + ui.close() return if("Message") + var/obj/item/device/pda/P = locate(href_list["target"]) src.create_message(U, P) + if(mode == 2) + if(href_list["target"] in conversations) // Need to make sure the message went through, if not welp. + active_conversation = href_list["target"] + mode = 21 + if("Select Conversation") + var/P = href_list["convo"] + for(var/n in conversations) + if(P == n) + active_conversation=P + mode=21 if("Send Honk")//Honk virus if(istype(cartridge, /obj/item/weapon/cartridge/clown))//Cartridge checks are kind of unnecessary since everything is done through switch. var/obj/item/device/pda/P = locate(href_list["target"])//Leaving it alone in case it may do something useful, I guess. if(!isnull(P)) - if (!P.toff && cartridge:honk_charges > 0) - cartridge:honk_charges-- + if (!P.toff && cartridge.charges > 0) + cartridge.charges-- U.show_message("\blue Virus sent!", 1) P.honkamt = (rand(15,20)) else U << "PDA not found." else - U << browse(null, "window=pda") + ui.close() return if("Send Silence")//Silent virus if(istype(cartridge, /obj/item/weapon/cartridge/mime)) var/obj/item/device/pda/P = locate(href_list["target"]) if(!isnull(P)) - if (!P.toff && cartridge:mime_charges > 0) - cartridge:mime_charges-- + if (!P.toff && cartridge.charges > 0) + cartridge.charges-- U.show_message("\blue Virus sent!", 1) P.silent = 1 P.ttone = "silence" else U << "PDA not found." else - U << browse(null, "window=pda") + ui.close() return @@ -695,8 +724,8 @@ var/global/list/obj/item/device/pda/PDAs = list() if(istype(cartridge, /obj/item/weapon/cartridge/syndicate)) var/obj/item/device/pda/P = locate(href_list["target"]) if(!isnull(P)) - if (!P.toff && cartridge:shock_charges > 0) - cartridge:shock_charges-- + if (!P.toff && cartridge.charges > 0) + cartridge.charges-- var/difficulty = 0 @@ -713,7 +742,7 @@ var/global/list/obj/item/device/pda/PDAs = list() U.show_message("\red An error flashes on your [src].", 1) else if (prob(difficulty * 3)) U.show_message("\red Energy feeds back into your [src]!", 1) - U << browse(null, "window=pda") + ui.close() explode() log_admin("[key_name(U)] just attempted to blow up [P] with the Detomatix cartridge but failed, blowing themselves up") message_admins("[key_name_admin(U)] just attempted to blow up [P] with the Detomatix cartridge but failed, blowing themselves up", 1) @@ -726,7 +755,7 @@ var/global/list/obj/item/device/pda/PDAs = list() U << "PDA not found." else U.unset_machine() - U << browse(null, "window=pda") + ui.close() return //pAI FUNCTIONS=================================== @@ -738,33 +767,31 @@ var/global/list/obj/item/device/pda/PDAs = list() var/turf/T = get_turf_or_move(src.loc) if(T) pai.loc = T + pai = null -//LINK FUNCTIONS=================================== - - else//Cartridge menu linking + else mode = text2num(href_list["choice"]) - cartridge.mode = mode - cartridge.unlock() + if(cartridge) + cartridge.mode = mode + + else//If not in range or not using the pda. U.unset_machine() - U << browse(null, "window=pda") + ui.close() return //EXTRA FUNCTIONS=================================== if (mode == 2||mode == 21)//To clear message overlays. overlays.Cut() + newmessage = 0 if ((honkamt > 0) && (prob(60)))//For clown virus. honkamt-- playsound(loc, 'sound/items/bikehorn.ogg', 30, 1) - if(U.machine == src && href_list["skiprefresh"]!="1")//Final safety. - attack_self(U)//It auto-closes the menu prior if the user is not in range and so on. - else - U.unset_machine() - U << browse(null, "window=pda") - return + src.updateUsrDialog() + return 1 // return 1 tells it to refresh the UI in NanoUI /obj/item/device/pda/proc/remove_id() if (id) @@ -793,7 +820,7 @@ var/global/list/obj/item/device/pda/PDAs = list() if(!can_use()) return - + last_text = world.time // check if telecomms I/O route 1459 is stable //var/telecomms_intact = telecomms_process(P.owner, owner, t) @@ -823,19 +850,24 @@ var/global/list/obj/item/device/pda/PDAs = list() U << "ERROR: Cannot reach recepient." return useMS.send_pda_message("[P.owner]","[owner]","[t]") + tnote.Add(list(list("sent" = 1, "owner" = "[P.owner]", "job" = "[P.ownjob]", "message" = "[t]", "target" = "\ref[P]"))) + P.tnote.Add(list(list("sent" = 0, "owner" = "[owner]", "job" = "[ownjob]", "message" = "[t]", "target" = "\ref[src]"))) + if(!conversations.Find("\ref[P]")) + conversations.Add("\ref[P]") + if(!P.conversations.Find("\ref[src]")) + P.conversations.Add("\ref[src]") - tnote += "→ To [P.owner]:
    [t]
    " - P.tnote += "← From
    [owner] ([ownjob]):
    [t]
    " if (prob(15)) //Give the AI a chance of intercepting the message var/who = src.owner if(prob(50)) - who = P:owner + who = P.owner for(var/mob/living/silicon/ai/ai in mob_list) // Allows other AIs to intercept the message but the AI won't intercept their own message. if(ai.aiPDA != P && ai.aiPDA != src) ai.show_message("Intercepted message from [who]: [t]") + if (!P.silent) playsound(P.loc, 'sound/machines/twobeep.ogg', 50, 1) for (var/mob/O in hearers(3, P.loc)) @@ -848,12 +880,17 @@ var/global/list/obj/item/device/pda/PDAs = list() else L = get(P, /mob/living/silicon) + if(L) L << "\icon[P] Message from [src.owner] ([ownjob]), \"[t]\" (Reply)" + nanomanager.update_user_uis(L, P) // Update the recieving user's PDA UI so that they can see the new message + + nanomanager.update_user_uis(U, P) // Update the sending user's PDA UI so that they can see the new message log_pda("[usr] (PDA: [src.name]) sent \"[t]\" to [P.name]") P.overlays.Cut() P.overlays += image('icons/obj/pda.dmi', "pda-r") + P.newmessage = 1 else U << "ERROR: Messaging server is not responding." @@ -923,12 +960,15 @@ var/global/list/obj/item/device/pda/PDAs = list() /obj/item/device/pda/attackby(obj/item/C as obj, mob/user as mob) ..() if(istype(C, /obj/item/weapon/cartridge) && !cartridge) + var/datum/nanoui/ui = nanomanager.get_open_ui(user, src, "main") cartridge = C user.drop_item() cartridge.loc = src user << "You insert [cartridge] into [src]." if(cartridge.radio) cartridge.radio.hostpda = src + if(ui) + ui.close() else if(istype(C, /obj/item/weapon/card/id)) var/obj/item/weapon/card/id/idcard = C @@ -1042,9 +1082,6 @@ var/global/list/obj/item/device/pda/PDAs = list() if(5) if((istype(A, /obj/item/weapon/tank)) || (istype(A, /obj/machinery/portable_atmospherics))) - if(istype(A, /obj/item/weapon/tank)) - var/obj/item/weapon/tank/t = A - t.manipulated_by = user.real_name var/obj/icon = A for (var/mob/O in viewers(user, null)) O << "\red [user] has used [src] on \icon[icon] [A]" @@ -1135,8 +1172,8 @@ var/global/list/obj/item/device/pda/PDAs = list() return if ((istype(M, /mob/living/carbon/human) && (M.real_name != src.owner) && (istype(src.cartridge, /obj/item/weapon/cartridge/clown)))) - if (src.cartridge:honk_charges < 5) - src.cartridge:honk_charges++ + if (src.cartridge.charges < 5) + src.cartridge.charges++ M.stop_pulling() M << "\blue You slipped on the PDA!" diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm index f0e3ee98f1..d27b744ca8 100644 --- a/code/game/objects/items/devices/PDA/cart.dm +++ b/code/game/objects/items/devices/PDA/cart.dm @@ -21,6 +21,7 @@ var/access_status_display = 0 var/access_quartermaster = 0 var/access_hydroponics = 0 + var/charges = 0 var/mode = null var/menu var/datum/data/record/active1 = null //General @@ -32,575 +33,518 @@ var/message2 var/list/stored_data = list() - engineering - name = "Power-ON Cartridge" - icon_state = "cart-e" - access_engine = 1 +/obj/item/weapon/cartridge/engineering + name = "Power-ON Cartridge" + icon_state = "cart-e" + access_engine = 1 - atmos - name = "BreatheDeep Cartridge" - icon_state = "cart-a" - access_atmos = 1 +/obj/item/weapon/cartridge/atmos + name = "BreatheDeep Cartridge" + icon_state = "cart-a" + access_atmos = 1 - medical - name = "Med-U Cartridge" - icon_state = "cart-m" - access_medical = 1 +/obj/item/weapon/cartridge/medical + name = "Med-U Cartridge" + icon_state = "cart-m" + access_medical = 1 - chemistry - name = "ChemWhiz Cartridge" - icon_state = "cart-chem" - access_reagent_scanner = 1 +/obj/item/weapon/cartridge/chemistry + name = "ChemWhiz Cartridge" + icon_state = "cart-chem" + access_reagent_scanner = 1 - security - name = "R.O.B.U.S.T. Cartridge" - icon_state = "cart-s" - access_security = 1 +/obj/item/weapon/cartridge/security + name = "R.O.B.U.S.T. Cartridge" + icon_state = "cart-s" + access_security = 1 - New() - ..() - spawn(5) - radio = new /obj/item/radio/integrated/beepsky(src) +/obj/item/weapon/cartridge/security/New() + ..() + spawn(5) + radio = new /obj/item/radio/integrated/beepsky(src) - detective - name = "D.E.T.E.C.T. Cartridge" - icon_state = "cart-s" - access_security = 1 - access_medical = 1 +/obj/item/weapon/cartridge/detective + name = "D.E.T.E.C.T. Cartridge" + icon_state = "cart-s" + access_security = 1 + access_medical = 1 - janitor - name = "CustodiPRO Cartridge" - desc = "The ultimate in clean-room design." - icon_state = "cart-j" - access_janitor = 1 +/obj/item/weapon/cartridge/janitor + name = "CustodiPRO Cartridge" + desc = "The ultimate in clean-room design." + icon_state = "cart-j" + access_janitor = 1 - lawyer - name = "P.R.O.V.E. Cartridge" - icon_state = "cart-s" - access_security = 1 +/obj/item/weapon/cartridge/lawyer + name = "P.R.O.V.E. Cartridge" + icon_state = "cart-s" + access_security = 1 - clown - name = "Honkworks 5.0" - icon_state = "cart-clown" - access_clown = 1 - var/honk_charges = 5 +/obj/item/weapon/cartridge/clown + name = "Honkworks 5.0" + icon_state = "cart-clown" + access_clown = 1 + charges = 5 - mime - name = "Gestur-O 1000" - icon_state = "cart-mi" - access_mime = 1 - var/mime_charges = 5 +/obj/item/weapon/cartridge/mime + name = "Gestur-O 1000" + icon_state = "cart-mi" + access_mime = 1 + charges = 5 /* - botanist - name = "Green Thumb v4.20" - icon_state = "cart-b" - access_flora = 1 +/obj/item/weapon/cartridge/botanist + name = "Green Thumb v4.20" + icon_state = "cart-b" + access_flora = 1 */ - signal - name = "generic signaler cartridge" - desc = "A data cartridge with an integrated radio signaler module." - - toxins - name = "Signal Ace 2" - desc = "Complete with integrated radio signaler!" - icon_state = "cart-tox" - access_reagent_scanner = 1 - access_atmos = 1 - - New() - ..() - spawn(5) - radio = new /obj/item/radio/integrated/signal(src) - - - - quartermaster - name = "Space Parts & Space Vendors Cartridge" - desc = "Perfect for the Quartermaster on the go!" - icon_state = "cart-q" - access_quartermaster = 1 - - New() - ..() - spawn(5) - radio = new /obj/item/radio/integrated/mule(src) - - head - name = "Easy-Record DELUXE" - icon_state = "cart-h" - access_status_display = 1 - - hop - name = "HumanResources9001" - icon_state = "cart-h" - access_status_display = 1 - access_quartermaster = 1 - access_janitor = 1 - access_security = 1 - - New() - ..() - spawn(5) - radio = new /obj/item/radio/integrated/mule(src) - - hos - name = "R.O.B.U.S.T. DELUXE" - icon_state = "cart-hos" - access_status_display = 1 - access_security = 1 - - New() - ..() - spawn(5) - radio = new /obj/item/radio/integrated/beepsky(src) - - ce - name = "Power-On DELUXE" - icon_state = "cart-ce" - access_status_display = 1 - access_engine = 1 - access_atmos = 1 - - cmo - name = "Med-U DELUXE" - icon_state = "cart-cmo" - access_status_display = 1 - access_reagent_scanner = 1 - access_medical = 1 - - rd - name = "Signal Ace DELUXE" - icon_state = "cart-rd" - access_status_display = 1 - access_reagent_scanner = 1 - access_atmos = 1 - - New() - ..() - spawn(5) - radio = new /obj/item/radio/integrated/signal(src) - - captain - name = "Value-PAK Cartridge" - desc = "Now with 200% more value!" - icon_state = "cart-c" - access_engine = 1 - access_security = 1 - access_medical = 1 - access_reagent_scanner = 1 - access_status_display = 1 - access_atmos = 1 - - syndicate - name = "Detomatix Cartridge" - icon_state = "cart" - access_remote_door = 1 - remote_door_id = "smindicate" //Make sure this matches the syndicate shuttle's shield/door id!! //don't ask about the name, testing. - var/shock_charges = 4 - - proc/unlock() - if (!istype(loc, /obj/item/device/pda)) - return - - generate_menu() - print_to_host(menu) - return - - proc/print_to_host(var/text) - if (!istype(loc, /obj/item/device/pda)) - return - loc:cart = text - - for (var/mob/M in viewers(1, loc.loc)) - if (M.client && M.machine == loc) - loc:attack_self(M) - - return - - proc/post_status(var/command, var/data1, var/data2) - - var/datum/radio_frequency/frequency = radio_controller.return_frequency(1435) - - if(!frequency) return - - var/datum/signal/status_signal = new - status_signal.source = src - status_signal.transmission_method = 1 - status_signal.data["command"] = command - - switch(command) - if("message") - status_signal.data["msg1"] = data1 - status_signal.data["msg2"] = data2 - if(loc) - var/obj/item/PDA = loc - var/mob/user = PDA.fingerprintslast - if(istype(PDA.loc,/mob/living)) - name = PDA.loc - log_admin("STATUS: [user] set status screen with [PDA]. Message: [data1] [data2]") - message_admins("STATUS: [user] set status screen with [PDA]. Message: [data1] [data2]") - - if("alert") - status_signal.data["picture_state"] = data1 - - frequency.post_signal(src, status_signal) - - proc/generate_menu() - switch(mode) - if(40) //signaller - menu = "

    Remote Signaling System

    " - - menu += {" -Send Signal
    -Frequency: -- -- -[format_frequency(radio:frequency)] -+ -+
    -
    -Code: -- -- -[radio:code] -+ -+
    "} - - if (42) //status displays - menu = "

    Station Status Display Interlink

    " - - menu += "\[ Clear \]
    " - menu += "\[ Shuttle ETA \]
    " - menu += "\[ Message \]" - menu += "
    " - menu += "\[ Alert: None |" - menu += " Red Alert |" - menu += " Lockdown |" - menu += " Biohazard \]
    " - - if (43) //Muskets' and Rockdtben's power monitor :D - menu = "

    Power Monitors - Please select one


    " - powmonitor = null - powermonitors = list() - var/powercount = 0 - - - - for(var/obj/machinery/power/monitor/pMon in world) - if(!(pMon.stat & (NOPOWER|BROKEN)) ) - powercount++ - powermonitors += pMon - - - if(!powercount) - menu += "\red No connection
    " - else - - menu += "" - var/count = 0 - for(var/obj/machinery/power/monitor/pMon in powermonitors) - count++ - menu += " [pMon]
    " - - menu += "
    " - - if (433) //Muskets' and Rockdtben's power monitor :D - menu = "

    Power Monitor


    " - if(!powmonitor) - menu += "\red No connection
    " - else - var/list/L = list() - for(var/obj/machinery/power/terminal/term in powmonitor.powernet.nodes) - if(istype(term.master, /obj/machinery/power/apc)) - var/obj/machinery/power/apc/A = term.master - L += A - - menu += "
    Total power: [powmonitor.powernet.avail] W
    Total load: [num2text(powmonitor.powernet.viewload,10)] W
    " - - menu += "" - - if(L.len > 0) - menu += "Area Eqp./Lgt./Env. Load Cell
    " - - var/list/S = list(" Off","AOff"," On", " AOn") - var/list/chg = list("N","C","F") - - for(var/obj/machinery/power/apc/A in L) - menu += copytext(add_tspace(A.area.name, 30), 1, 30) - menu += " [S[A.equipment+1]] [S[A.lighting+1]] [S[A.environ+1]] [add_lspace(A.lastused_total, 6)] [A.cell ? "[add_lspace(round(A.cell.percent()), 3)]% [chg[A.charging+1]]" : " N/C"]
    " - - menu += "
    " - - if (44) //medical records //This thing only displays a single screen so it's hard to really get the sub-menu stuff working. - menu = "

    Medical Record List

    " - if(!isnull(data_core.general)) - for (var/datum/data/record/R in sortRecord(data_core.general)) - menu += "[R.fields["id"]]: [R.fields["name"]]
    " - menu += "
    " - if(441) - menu = "

    Medical Record

    " - - if (istype(active1, /datum/data/record) && (active1 in data_core.general)) - menu += "Name: [active1.fields["name"]] ID: [active1.fields["id"]]
    " - menu += "Sex: [active1.fields["sex"]]
    " - menu += "Age: [active1.fields["age"]]
    " - menu += "Rank: [active1.fields["rank"]]
    " - menu += "Fingerprint: [active1.fields["fingerprint"]]
    " - menu += "Physical Status: [active1.fields["p_stat"]]
    " - menu += "Mental Status: [active1.fields["m_stat"]]
    " - else - menu += "Record Lost!
    " - - menu += "
    " - - menu += "

    Medical Data

    " - if (istype(active2, /datum/data/record) && (active2 in data_core.medical)) - menu += "Blood Type: [active2.fields["b_type"]]

    " - - menu += "Minor Disabilities: [active2.fields["mi_dis"]]
    " - menu += "Details: [active2.fields["mi_dis_d"]]

    " - - menu += "Major Disabilities: [active2.fields["ma_dis"]]
    " - menu += "Details: [active2.fields["ma_dis_d"]]

    " - - menu += "Allergies: [active2.fields["alg"]]
    " - menu += "Details: [active2.fields["alg_d"]]

    " - - menu += "Current Diseases: [active2.fields["cdi"]]
    " - menu += "Details: [active2.fields["cdi_d"]]

    " - - menu += "Important Notes: [active2.fields["notes"]]
    " - else - menu += "Record Lost!
    " - - menu += "
    " - if (45) //security records - menu = "

    Security Record List

    " - if(!isnull(data_core.general)) - for (var/datum/data/record/R in sortRecord(data_core.general)) - menu += "
    [R.fields["id"]]: [R.fields["name"]]
    " - - menu += "
    " - if(451) - menu = "

    Security Record

    " - - if (istype(active1, /datum/data/record) && (active1 in data_core.general)) - menu += "Name: [active1.fields["name"]] ID: [active1.fields["id"]]
    " - menu += "Sex: [active1.fields["sex"]]
    " - menu += "Age: [active1.fields["age"]]
    " - menu += "Rank: [active1.fields["rank"]]
    " - menu += "Fingerprint: [active1.fields["fingerprint"]]
    " - menu += "Physical Status: [active1.fields["p_stat"]]
    " - menu += "Mental Status: [active1.fields["m_stat"]]
    " - else - menu += "Record Lost!
    " - - menu += "
    " - - menu += "

    Security Data

    " - if (istype(active3, /datum/data/record) && (active3 in data_core.security)) - menu += "Criminal Status: [active3.fields["criminal"]]
    " - - menu += "Minor Crimes: [active3.fields["mi_crim"]]
    " - menu += "Details: [active3.fields["mi_crim"]]

    " - - menu += "Major Crimes: [active3.fields["ma_crim"]]
    " - menu += "Details: [active3.fields["ma_crim_d"]]

    " - - menu += "Important Notes:
    " - menu += "[active3.fields["notes"]]" - else - menu += "Record Lost!
    " - - menu += "
    " - if (46) //beepsky control - var/obj/item/radio/integrated/beepsky/SC = radio - if(!SC) - menu = "Interlink Error - Please reinsert cartridge." - return - - menu = "

    Securitron Interlink

    " - - if(!SC.active) - // list of bots - if(!SC.botlist || (SC.botlist && SC.botlist.len==0)) - menu += "No bots found.
    " - - else - for(var/obj/machinery/bot/B in SC.botlist) - if (B) - menu += "
    [B] at [B.loc.loc]
    " - - menu += "
    Scan for active bots
    " - - else // bot selected, control it - - menu += "[SC.active]
    Status: (refresh)
    " - - if(!SC.botstatus) - menu += "Waiting for response...
    " - else - - menu += "Location: [SC.botstatus["loca"] ]
    " - menu += "Mode: " - - switch(SC.botstatus["mode"]) - if(0) - menu += "Ready" - if(1) - menu += "Apprehending target" - if(2,3) - menu += "Arresting target" - if(4) - menu += "Starting patrol" - if(5) - menu += "On patrol" - if(6) - menu += "Responding to summons" - - menu += "
    \[Stop Patrol\] " - menu += "\[Start Patrol\] " - menu += "\[Summon Bot\]
    " - menu += "
    Return to bot list" - - if (47) //quartermaster order records - menu = "

    Supply Record Interlink

    " - - menu += "
    Supply shuttle
    " - menu += "Location: [supply_shuttle.moving ? "Moving to station ([supply_shuttle.eta] Mins.)":supply_shuttle.at_station ? "Station":"Dock"]
    " - menu += "Current approved orders:
      " - for(var/S in supply_shuttle.shoppinglist) - var/datum/supply_order/SO = S - menu += "
    1. #[SO.ordernum] - [SO.object.name] approved by [SO.orderedby] [SO.comment ? "([SO.comment])":""]
    2. " - menu += "
    " - - menu += "Current requests:
      " - for(var/S in supply_shuttle.requestlist) - var/datum/supply_order/SO = S - menu += "
    1. #[SO.ordernum] - [SO.object.name] requested by [SO.orderedby]
    2. " - menu += "
    Upgrade NOW to Space Parts & Space Vendors PLUS for full remote order control and inventory management." - - if (48) //mulebot control - var/obj/item/radio/integrated/mule/QC = radio - if(!QC) - menu = "Interlink Error - Please reinsert cartridge." - return - - menu = "

    M.U.L.E. bot Interlink V0.8

    " - - if(!QC.active) - // list of bots - if(!QC.botlist || (QC.botlist && QC.botlist.len==0)) - menu += "No bots found.
    " - - else - for(var/obj/machinery/bot/mulebot/B in QC.botlist) - menu += "[B] at [get_area(B)]
    " - menu += "
    Scan for active bots
    " - - else // bot selected, control it - - menu += "[QC.active]
    Status: (refresh)
    " - - if(!QC.botstatus) - menu += "Waiting for response...
    " - else - - menu += "Location: [QC.botstatus["loca"] ]
    " - menu += "Mode: " - - switch(QC.botstatus["mode"]) - if(0) - menu += "Ready" - if(1) - menu += "Loading/Unloading" - if(2) - menu += "Navigating to Delivery Location" - if(3) - menu += "Navigating to Home" - if(4) - menu += "Waiting for clear path" - if(5,6) - menu += "Calculating navigation path" - if(7) - menu += "Unable to locate destination" - var/obj/structure/closet/crate/C = QC.botstatus["load"] - menu += "
    Current Load: [ !C ? "none" : "[C.name] (unload)" ]
    " - menu += "Destination: [!QC.botstatus["dest"] ? "none" : QC.botstatus["dest"] ] (set)
    " - menu += "Power: [QC.botstatus["powr"]]%
    " - menu += "Home: [!QC.botstatus["home"] ? "none" : QC.botstatus["home"] ]
    " - menu += "Auto Return Home: [QC.botstatus["retn"] ? "On Off" : "(On) Off"]
    " - menu += "Auto Pickup Crate: [QC.botstatus["pick"] ? "On Off" : "(On) Off"]

    " - - menu += "\[Stop\] " - menu += "\[Proceed\] " - menu += "\[Return Home\]
    " - menu += "
    Return to bot list" - - if (49) //janitorial locator - menu = "

    Persistent Custodial Object Locator

    " - - var/turf/cl = get_turf(src) - if (cl) - menu += "Current Orbital Location: \[[cl.x],[cl.y]\]" - - menu += "

    Located Mops:

    " - - var/ldat - for (var/obj/item/weapon/mop/M in world) - var/turf/ml = get_turf(M) - - if(ml) - if (ml.z != cl.z) - continue - var/direction = get_dir(src, M) - ldat += "Mop - \[[ml.x],[ml.y] ([uppertext(dir2text(direction))])\] - [M.reagents.total_volume ? "Wet" : "Dry"]
    " - - if (!ldat) - menu += "None" - else - menu += "[ldat]" - - menu += "

    Located Mop Buckets:

    " - - ldat = null - for (var/obj/structure/mopbucket/B in world) - var/turf/bl = get_turf(B) - - if(bl) - if (bl.z != cl.z) - continue - var/direction = get_dir(src, B) - ldat += "Bucket - \[[bl.x],[bl.y] ([uppertext(dir2text(direction))])\] - Water level: [B.reagents.total_volume]/100
    " - - if (!ldat) - menu += "None" - else - menu += "[ldat]" - - menu += "

    Located Cleanbots:

    " - - ldat = null - for (var/obj/machinery/bot/cleanbot/B in world) - var/turf/bl = get_turf(B) - - if(bl) - if (bl.z != cl.z) - continue - var/direction = get_dir(src, B) - ldat += "Cleanbot - \[[bl.x],[bl.y] ([uppertext(dir2text(direction))])\] - [B.on ? "Online" : "Offline"]
    " - - if (!ldat) - menu += "None" - else - menu += "[ldat]" - - else - menu += "ERROR: Unable to determine current location." - menu += "

    Refresh GPS Locator" +/obj/item/weapon/cartridge/signal + name = "generic signaler cartridge" + desc = "A data cartridge with an integrated radio signaler module." + +/obj/item/weapon/cartridge/signal/toxins + name = "Signal Ace 2" + desc = "Complete with integrated radio signaler!" + icon_state = "cart-tox" + access_reagent_scanner = 1 + access_atmos = 1 + +/obj/item/weapon/cartridge/signal/New() + ..() + spawn(5) + radio = new /obj/item/radio/integrated/signal(src) + + + +/obj/item/weapon/cartridge/quartermaster + name = "Space Parts & Space Vendors Cartridge" + desc = "Perfect for the Quartermaster on the go!" + icon_state = "cart-q" + access_quartermaster = 1 + +/obj/item/weapon/cartridge/quartermaster/New() + ..() + spawn(5) + radio = new /obj/item/radio/integrated/mule(src) + +/obj/item/weapon/cartridge/head + name = "Easy-Record DELUXE" + icon_state = "cart-h" + access_status_display = 1 + +/obj/item/weapon/cartridge/hop + name = "HumanResources9001" + icon_state = "cart-h" + access_status_display = 1 + access_quartermaster = 1 + access_janitor = 1 + access_security = 1 + +/obj/item/weapon/cartridge/hop/New() + ..() + spawn(5) + radio = new /obj/item/radio/integrated/mule(src) + +/obj/item/weapon/cartridge/hos + name = "R.O.B.U.S.T. DELUXE" + icon_state = "cart-hos" + access_status_display = 1 + access_security = 1 + +/obj/item/weapon/cartridge/hos/New() + ..() + spawn(5) + radio = new /obj/item/radio/integrated/beepsky(src) + +/obj/item/weapon/cartridge/ce + name = "Power-On DELUXE" + icon_state = "cart-ce" + access_status_display = 1 + access_engine = 1 + access_atmos = 1 + +/obj/item/weapon/cartridge/cmo + name = "Med-U DELUXE" + icon_state = "cart-cmo" + access_status_display = 1 + access_reagent_scanner = 1 + access_medical = 1 + +/obj/item/weapon/cartridge/rd + name = "Signal Ace DELUXE" + icon_state = "cart-rd" + access_status_display = 1 + access_reagent_scanner = 1 + access_atmos = 1 + +/obj/item/weapon/cartridge/rd/New() + ..() + spawn(5) + radio = new /obj/item/radio/integrated/signal(src) + +/obj/item/weapon/cartridge/captain + name = "Value-PAK Cartridge" + desc = "Now with 200% more value!" + icon_state = "cart-c" + access_quartermaster = 1 + access_janitor = 1 + access_engine = 1 + access_security = 1 + access_medical = 1 + access_reagent_scanner = 1 + access_status_display = 1 + access_atmos = 1 + +/obj/item/weapon/cartridge/syndicate + name = "Detomatix Cartridge" + icon_state = "cart" + access_remote_door = 1 + remote_door_id = "smindicate" //Make sure this matches the syndicate shuttle's shield/door id!! //don't ask about the name, testing. + charges = 4 + +/obj/item/weapon/cartridge/proc/post_status(var/command, var/data1, var/data2) + + var/datum/radio_frequency/frequency = radio_controller.return_frequency(1435) + if(!frequency) return + + var/datum/signal/status_signal = new + status_signal.source = src + status_signal.transmission_method = 1 + status_signal.data["command"] = command + + switch(command) + if("message") + status_signal.data["msg1"] = data1 + status_signal.data["msg2"] = data2 + if(loc) + var/obj/item/PDA = loc + var/mob/user = PDA.fingerprintslast + if(istype(PDA.loc,/mob/living)) + name = PDA.loc + log_admin("STATUS: [user] set status screen with [PDA]. Message: [data1] [data2]") + message_admins("STATUS: [user] set status screen with [PDA]. Message: [data1] [data2]") + + if("alert") + status_signal.data["picture_state"] = data1 + + frequency.post_signal(src, status_signal) + + +/* + This generates the nano values of the cart menus. + Because we close the UI when we insert a new cart + we don't have to worry about null values on items + the user can't access. Well, unless they are href hacking. + But in that case their UI will just lock up. +*/ + + +/obj/item/weapon/cartridge/proc/create_NanoUI_values(mob/user as mob) + var/obj/item/device/pda/PDA = loc + var/datum/nanoui/ui = nanomanager.get_open_ui(user, PDA, "main") + var/values[0] + + /* Signaler (Mode: 40) */ + + + if(istype(radio,/obj/item/radio/integrated/signal) && (mode==40 || !ui )) + var/obj/item/radio/integrated/signal/R = radio + values["signal_freq"] = format_frequency(R.frequency) + values["signal_code"] = R.code + + + /* Station Display (Mode: 42) */ + + if(mode==42 || (!ui && access_status_display)) + values["message1"] = message1 ? message1 : "(none)" + values["message2"] = message2 ? message2 : "(none)" + + + + /* Power Monitor (Mode: 43 / 433) */ + if(mode==43 || mode==433 || (!ui && access_engine)) + var/pMonData[0] + for(var/obj/machinery/power/monitor/pMon in world) + if(!(pMon.stat & (NOPOWER|BROKEN)) ) + pMonData[++pMonData.len] = list ("Name" = pMon.name, "ref" = "\ref[pMon]") + if(isnull(powmonitor)) powmonitor = pMon + + values["powermonitors"] = pMonData + + values["poweravail"] = powmonitor.powernet.avail + values["powerload"] = num2text(powmonitor.powernet.viewload,10) + + var/list/L = list() + for(var/obj/machinery/power/terminal/term in powmonitor.powernet.nodes) + if(istype(term.master, /obj/machinery/power/apc)) + var/obj/machinery/power/apc/A = term.master + L += A + + var/list/Status = list(0,0,1,1) // Status: off, auto-off, on, auto-on + var/list/chg = list(0,1,1) // Charging: nope, charging, full + var/apcData[0] + for(var/obj/machinery/power/apc/A in L) + apcData[++apcData.len] = list("Name" = html_encode(A.area.name), "Equipment" = Status[A.equipment+1], "Lights" = Status[A.lighting+1], "Environment" = Status[A.environ+1], "CellPct" = A.cell ? round(A.cell.percent(),1) : -1, "CellStatus" = A.cell ? chg[A.charging+1] : 0) + + values["apcs"] = apcData + + + + + + /* General Records (Mode: 44 / 441 / 45 / 451) */ + if(mode == 44 || mode == 441 || mode == 45 || mode ==451 || (!ui && (access_medical || access_security))) + if(istype(active1, /datum/data/record) && (active1 in data_core.general)) + values["general"] = active1.fields + values["general_exists"] = 1 + + else + + values["general"] = list("name" = null,\ + "id" = null,\ + "sex" = null,\ + "species" = null,\ + "age" = null,\ + "rank" = null,\ + "fingerprint" = null,\ + "p_stat" = null,\ + "m_stat" = null,\ + ) + values["general_exists"] = 0 + + + + /* Medical Records (Mode: 44 / 441) */ + + if(mode == 44 || mode == 441 || (!ui && access_medical)) + var/medData[0] + for(var/datum/data/record/R in sortRecord(data_core.general)) + medData[++medData.len] = list(Name = R.fields["name"],"ref" = "\ref[R]") + values["medical_records"] = medData + + if(istype(active2, /datum/data/record) && (active2 in data_core.medical)) + values["medical"] = active2.fields + values["medical_exists"] = 1 + else + values["medical"] = list(\ + "b_type" = null,\ + "mi_dis" = null,\ + "mi_dis_d" = null,\ + "ma_dis" = null,\ + "ma_dis_d" = null,\ + "alg" = null,\ + "alg_d" = null,\ + "cdi" = null,\ + "cdi_d" = null,\ + "notes" = null,\ + ) + values["medical_exists"] = 0 + + /* Security Records (Mode:45 / 451) */ + + if(mode == 45 || mode == 451 || (!ui && access_security)) + var/secData[0] + for (var/datum/data/record/R in sortRecord(data_core.general)) + secData[++secData.len] = list(Name = R.fields["name"], "ref" = "\ref[R]") + values["security_records"] = secData + + if(istype(active3, /datum/data/record) && (active3 in data_core.security)) + values["security"] = active3.fields + values["security_exists"] = 1 + else + values["security"] = list(\ + "criminal" = null,\ + "mi_crim" = null,\ + "ma_crim" = null,\ + "ma_crim_d" = null,\ + "notes"\ + ) + values["security_exists"] = 0 + + /* Security Bot Control (Mode: 46) */ + + if(mode==46 || !ui) + var/botsData[0] + var/beepskyData[0] + if(istype(radio,/obj/item/radio/integrated/beepsky)) + var/obj/item/radio/integrated/beepsky/SC = radio + beepskyData["active"] = SC.active + if(SC.active && !isnull(SC.botstatus)) + var/area/loca = SC.botstatus["loca"] + var/loca_name = sanitize(loca.name) + beepskyData["botstatus"] = list("loca" = loca_name, "mode" = SC.botstatus["mode"]) + else + beepskyData["botstatus"] = list("loca" = null, "mode" = -1) + var/botsCount=0 + if(SC.botlist && SC.botlist.len) + for(var/obj/machinery/bot/B in SC.botlist) + botsCount++ + if(B.loc) + botsData[++botsData.len] = list("Name" = sanitize(B.name), "Location" = sanitize(B.loc.loc.name), "ref" = "\ref[B]") + + if(!botsData.len) + botsData[++botsData.len] = list("Name" = "No bots found", "Location" = "Invalid", "ref"= null) + + beepskyData["bots"] = botsData + beepskyData["count"] = botsCount + + else + beepskyData["active"] = 0 + botsData[++botsData.len] = list("Name" = "No bots found", "Location" = "Invalid", "ref"= null) + beepskyData["botstatus"] = list("loca" = null, "mode" = null) + beepskyData["bots"] = botsData + beepskyData["count"] = 0 + + values["beepsky"] = beepskyData + + + /* MULEBOT Control (Mode: 48) */ + + if(mode==48 || !ui) + var/muleData[0] + var/mulebotsData[0] + if(istype(radio,/obj/item/radio/integrated/mule)) + var/obj/item/radio/integrated/mule/QC = radio + muleData["active"] = QC.active + if(QC.active && !isnull(QC.botstatus)) + var/area/loca = QC.botstatus["loca"] + var/loca_name = sanitize(loca.name) + muleData["botstatus"] = list("loca" = loca_name, "mode" = QC.botstatus["mode"],"home"=QC.botstatus["home"],"powr" = QC.botstatus["powr"],"retn" =QC.botstatus["retn"], "pick"=QC.botstatus["pick"], "load" = QC.botstatus["load"], "dest" = sanitize(QC.botstatus["dest"])) + + else + muleData["botstatus"] = list("loca" = null, "mode" = -1,"home"=null,"powr" = null,"retn" =null, "pick"=null, "load" = null, "dest" = null) + + + var/mulebotsCount=0 + for(var/obj/machinery/bot/B in QC.botlist) + mulebotsCount++ + if(B.loc) + mulebotsData[++mulebotsData.len] = list("Name" = sanitize(B.name), "Location" = sanitize(B.loc.loc.name), "ref" = "\ref[B]") + + if(!mulebotsData.len) + mulebotsData[++mulebotsData.len] = list("Name" = "No bots found", "Location" = "Invalid", "ref"= null) + + muleData["bots"] = mulebotsData + muleData["count"] = mulebotsCount + + else + muleData["botstatus"] = list("loca" = null, "mode" = -1,"home"=null,"powr" = null,"retn" =null, "pick"=null, "load" = null, "dest" = null) + muleData["active"] = 0 + mulebotsData[++mulebotsData.len] = list("Name" = "No bots found", "Location" = "Invalid", "ref"= null) + muleData["bots"] = mulebotsData + muleData["count"] = 0 + + values["mulebot"] = muleData + + + + /* Supply Shuttle Requests Menu (Mode: 47) */ + + if(mode==47 || (!ui && access_quartermaster)) + var/supplyData[0] + supplyData["shuttle_moving"] = supply_shuttle.moving + supplyData["shuttle_eta"] = supply_shuttle.eta + supplyData["shuttle_loc"] = supply_shuttle.at_station ? "Station" : "Dock" + var/supplyOrderCount = 0 + var/supplyOrderData[0] + for(var/S in supply_shuttle.shoppinglist) + var/datum/supply_order/SO = S + + supplyOrderData[++supplyOrderData.len] = list("Number" = SO.ordernum, "Name" = html_encode(SO.object.name), "ApprovedBy" = SO.orderedby, "Comment" = html_encode(SO.comment)) + if(!supplyOrderData.len) + supplyOrderData[++supplyOrderData.len] = list("Number" = null, "Name" = null, "OrderedBy"=null) + + supplyData["approved"] = supplyOrderData + supplyData["approved_count"] = supplyOrderCount + + var/requestCount = 0 + var/requestData[0] + for(var/S in supply_shuttle.requestlist) + var/datum/supply_order/SO = S + requestCount++ + requestData[++requestData.len] = list("Number" = SO.ordernum, "Name" = html_encode(SO.object.name), "OrderedBy" = SO.orderedby, "Comment" = html_encode(SO.comment)) + if(!requestData.len) + requestData[++requestData.len] = list("Number" = null, "Name" = null, "orderedBy" = null, "Comment" = null) + + supplyData["requests"] = requestData + supplyData["requests_count"] = requestCount + + + values["supply"] = supplyData + + + + /* Janitor Supplies Locator (Mode: 49) */ + if(mode==49 || (!ui && access_janitor)) + var/JaniData[0] + var/turf/cl = get_turf(src) + + if(cl) + JaniData["user_loc"] = list("x" = cl.x, "y" = cl.y) + else + JaniData["user_loc"] = list("x" = 0, "y" = 0) + var/MopData[0] + for(var/obj/item/weapon/mop/M in world) + var/turf/ml = get_turf(M) + if(ml) + if(ml.z != cl.z) + continue + var/direction = get_dir(src, M) + MopData[++MopData.len] = list ("x" = ml.x, "y" = ml.y, "dir" = uppertext(dir2text(direction)), "status" = M.reagents.total_volume ? "Wet" : "Dry") + + if(!MopData.len) + MopData[++MopData.len] = list("x" = 0, "y" = 0, dir=null, status = null) + + + var/BucketData[0] + for(var/obj/structure/mopbucket/B in world) + var/turf/bl = get_turf(B) + if(bl) + if(bl.z != cl.z) + continue + var/direction = get_dir(src,B) + BucketData[++BucketData.len] = list ("x" = bl.x, "y" = bl.y, "dir" = uppertext(dir2text(direction)), "status" = B.reagents.total_volume/100) + + if(!BucketData.len) + BucketData[++BucketData.len] = list("x" = 0, "y" = 0, dir=null, status = null) + + var/CbotData[0] + for(var/obj/machinery/bot/cleanbot/B in world) + var/turf/bl = get_turf(B) + if(bl) + if(bl.z != cl.z) + continue + var/direction = get_dir(src,B) + CbotData[++CbotData.len] = list("x" = bl.x, "y" = bl.y, "dir" = uppertext(dir2text(direction)), "status" = B.on ? "Online" : "Offline") + + + if(!CbotData.len) + CbotData[++CbotData.len] = list("x" = 0, "y" = 0, dir=null, status = null) + var/CartData[0] + for(var/obj/structure/janitorialcart/B in world) + var/turf/bl = get_turf(B) + if(bl) + if(bl.z != cl.z) + continue + var/direction = get_dir(src,B) + CartData[++CartData.len] = list("x" = bl.x, "y" = bl.y, "dir" = uppertext(dir2text(direction)), "status" = B.reagents.total_volume/100) + if(!CartData.len) + CartData[++CartData.len] = list("x" = 0, "y" = 0, dir=null, status = null) + + + + + JaniData["mops"] = MopData + JaniData["buckets"] = BucketData + JaniData["cleanbots"] = CbotData + JaniData["carts"] = CartData + values["janitor"] = JaniData + + return values + + + /obj/item/weapon/cartridge/Topic(href, href_list) @@ -611,6 +555,9 @@ Code: usr << browse(null, "window=pda") return + + + switch(href_list["choice"]) if("Medical Records") var/datum/data/record/R = locate(href_list["target"]) @@ -668,10 +615,9 @@ Code: else post_status(href_list["statdisp"]) if("Power Select") - var/pnum = text2num(href_list["target"]) - powmonitor = powermonitors[pnum] + var/pref = href_list["target"] + powmonitor = locate(pref) loc:mode = 433 mode = 433 - generate_menu() - print_to_host(menu) + return 1 diff --git a/code/game/objects/items/devices/PDA/radio.dm b/code/game/objects/items/devices/PDA/radio.dm index 45bcff1c05..9dc462814e 100644 --- a/code/game/objects/items/devices/PDA/radio.dm +++ b/code/game/objects/items/devices/PDA/radio.dm @@ -31,15 +31,6 @@ frequency.post_signal(src, signal, filter = s_filter) - proc/print_to_host(var/text) - if (isnull(src.hostpda)) - return - src.hostpda.cart = text - - for (var/mob/M in viewers(1, src.hostpda.loc)) - if (M.client && M.machine == src.hostpda) - src.hostpda.cartridge.unlock() - return proc/generate_menu() @@ -107,7 +98,6 @@ if("summon") post_signal(control_freq, "command", "summon", "active", active, "target", get_turf(PDA) , s_filter = RADIO_SECBOT) post_signal(control_freq, "command", "bot_status", "active", active, s_filter = RADIO_SECBOT) - PDA.cartridge.unlock() /obj/item/radio/integrated/mule var/list/botlist = null // list of bots @@ -163,7 +153,6 @@ Topic(href, href_list) ..() - var/obj/item/device/pda/PDA = src.hostpda var/cmd = "command" if(active) cmd = "command [active.suffix]" @@ -208,7 +197,6 @@ if("stop", "go", "home") post_signal(control_freq, cmd, href_list["op"], s_filter = RADIO_MULEBOT) post_signal(control_freq, cmd, "bot_status", s_filter = RADIO_MULEBOT) - PDA.cartridge.unlock() diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index a5a4093028..7e616a8f35 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -143,7 +143,9 @@ REAGENT SCANNER user.show_message(text("\red Warning: [D.form] Detected\nName: [D.name].\nType: [D.spread].\nStage: [D.stage]/[D.max_stages].\nPossible Cure: [D.cure]")) if (M.reagents && M.reagents.get_reagent_amount("inaprovaline")) user.show_message("\blue Bloodstream Analysis located [M.reagents:get_reagent_amount("inaprovaline")] units of rejuvenation chemicals.") - if (M.getBrainLoss() >= 100 || istype(M, /mob/living/carbon/human) && M:brain_op_stage == 4.0) + if (M.has_brain_worms()) + user.show_message("\red Subject suffering from aberrant brain activity. Recommend further scanning.") + else if (M.getBrainLoss() >= 100 || istype(M, /mob/living/carbon/human) && M:brain_op_stage == 4.0) user.show_message("\red Subject is brain dead.") else if (M.getBrainLoss() >= 60) user.show_message("\red Severe brain damage detected. Subject likely to have mental retardation.") diff --git a/code/game/objects/items/devices/uplinks.dm b/code/game/objects/items/devices/uplinks.dm index 0bb76efacd..4e42765238 100644 --- a/code/game/objects/items/devices/uplinks.dm +++ b/code/game/objects/items/devices/uplinks.dm @@ -14,6 +14,7 @@ A list of items and costs is stored under the datum of every game mode, alongsid var/item_data // raw item text var/list/ItemList // Parsed list of items var/uses // Numbers of crystals + var/nanoui_items[0] // List of items not to shove in their hands. var/list/NotInHand = list(/obj/machinery/singularity_beacon/syndicate) @@ -25,6 +26,39 @@ A list of items and costs is stored under the datum of every game mode, alongsid items = replacetext(item_data) ItemList = text2list(src.items, ";") // Parsing the items text string uses = ticker.mode.uplink_uses + nanoui_items = generate_nanoui_items() + +/* + Built the Items List for use with NanoUI +*/ + +/obj/item/device/uplink/proc/generate_nanoui_items() + var/items_nano[0] + for(var/D in ItemList) + var/list/O = stringsplit(D, ":") + if(O.len != 3) //If it is not an actual item, make a break in the menu. + if(O.len == 1) //If there is one item, it's probably a title + items_nano[++items_nano.len] = list("Category" = "[O[1]]", "items" = list()) + continue + + var/path_text = O[1] + var/cost = text2num(O[2]) + + var/path_obj = text2path(path_text) + + // Because we're using strings, this comes up if item paths change. + // Failure to handle this error borks uplinks entirely. -Sayu + if(!path_obj) + error("Syndicate item is not a valid path: [path_text]") + else + var/itemname = O[3] + items_nano[items_nano.len]["items"] += list(list("Name" = itemname, "Cost" = cost, "obj_path" = path_text)) + + return items_nano + + + + //Halfassed fix for href exploit ~Z for(var/D in ItemList) @@ -238,8 +272,8 @@ A list of items and costs is stored under the datum of every game mode, alongsid feedback_add_details("traitor_uplink_items_bought","ST") /obj/item/device/uplink/Topic(href, href_list) - if (href_list["buy_item"]) + if(href_list["buy_item"] == "random") var/boughtItem = chooseRandomItem() if(boughtItem) @@ -307,31 +341,48 @@ A list of items and costs is stored under the datum of every game mode, alongsid return 1 return 0 -// Interaction code. Gathers a list of items purchasable from the paren't uplink and displays it. It also adds a lock button. -/obj/item/device/uplink/hidden/interact(mob/user as mob) +/* + NANO UI FOR UPLINK WOOP WOOP +*/ +/obj/item/device/uplink/hidden/ui_interact(mob/user, ui_key = "main") + var/title = "Syndicate Uplink" + var/data[0] + + data["crystals"] = uses + data["nano_items"] = nanoui_items + data["welcome"] = welcome - var/dat = "" - dat += src.generate_menu() - dat += "Lock" - dat += "" - user << browse(dat, "window=hidden") - onclose(user, "hidden") - return + var/datum/nanoui/ui = nanomanager.get_open_ui(user, src, ui_key) + if (!ui) + // the ui does not exist, so we'll create a new one + ui = new(user, src, ui_key, "uplink.tmpl", title, 450, 600) + // When the UI is first opened this is the data it will use + ui.set_initial_data(data) + ui.open() + else + // The UI is already open so push the new data to it + ui.push_data(data) + return + +// Interaction code. Gathers a list of items purchasable from the paren't uplink and displays it. It also adds a lock button. +/obj/item/device/uplink/hidden/interact(mob/user) + + ui_interact(user) // The purchasing code. /obj/item/device/uplink/hidden/Topic(href, href_list) - if (usr.stat || usr.restrained()) return if (!( istype(usr, /mob/living/carbon/human))) return 0 - + var/mob/user = usr + var/datum/nanoui/ui = nanomanager.get_open_ui(user, src, "main") if ((usr.contents.Find(src.loc) || (in_range(src.loc, usr) && istype(src.loc.loc, /turf)))) usr.set_machine(src) if(href_list["lock"]) toggle() - usr << browse(null, "window=hidden") + ui.close() return 1 if(..(href, href_list) == 1) @@ -347,7 +398,7 @@ A list of items and costs is stored under the datum of every game mode, alongsid A.put_in_any_hand_if_possible(I) purchase_log += "[usr] ([usr.ckey]) bought [I]." interact(usr) - return + return 1 // I placed this here because of how relevant it is. // You place this in your uplinkable item to check if an uplink is active or not. @@ -388,4 +439,4 @@ A list of items and costs is stored under the datum of every game mode, alongsid /obj/item/device/radio/headset/uplink/New() ..() hidden_uplink = new(src) - hidden_uplink.uses = 10 \ No newline at end of file + hidden_uplink.uses = 10 diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm index 43e0f8caef..87720c5f2c 100644 --- a/code/game/objects/items/weapons/cigs_lighters.dm +++ b/code/game/objects/items/weapons/cigs_lighters.dm @@ -157,14 +157,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM var/turf/location = get_turf(src) smoketime-- if(smoketime < 1) - new type_butt(location) - processing_objects.Remove(src) - if(ismob(loc)) - var/mob/living/M = loc - M << "Your [name] goes out." - M.u_equip(src) //un-equip it so the overlays can update - M.update_inv_wear_mask(0) - del(src) + die() return if(location) location.hotspot_expose(700, 5) @@ -182,13 +175,21 @@ CIGARETTE PACKETS ARE IN FANCY.DM /obj/item/clothing/mask/cigarette/attack_self(mob/user as mob) if(lit == 1) user.visible_message("[user] calmly drops and treads on the lit [src], putting it out instantly.") - var/turf/T = get_turf(src) - new type_butt(T) - processing_objects.Remove(src) - del(src) + die() return ..() +/obj/item/clothing/mask/cigarette/proc/die() + var/turf/T = get_turf(src) + var/obj/item/butt = new type_butt(T) + transfer_fingerprints_to(butt) + if(ismob(loc)) + var/mob/living/M = loc + M << "Your [name] goes out." + M.u_equip(src) //un-equip it so the overlays can update + M.update_inv_wear_mask(0) + processing_objects.Remove(src) + del(src) //////////// // CIGARS // @@ -229,6 +230,12 @@ CIGARETTE PACKETS ARE IN FANCY.DM w_class = 1 throwforce = 1 +/obj/item/weapon/cigbutt/New() + ..() + pixel_x = rand(-10,10) + pixel_y = rand(-10,10) + transform = turn(transform,rand(0,360)) + /obj/item/weapon/cigbutt/cigarbutt name = "cigar butt" desc = "A manky old cigar butt." diff --git a/code/game/objects/items/weapons/dna_injector.dm b/code/game/objects/items/weapons/dna_injector.dm index fd878e8582..d0b19f88e9 100644 --- a/code/game/objects/items/weapons/dna_injector.dm +++ b/code/game/objects/items/weapons/dna_injector.dm @@ -3,11 +3,8 @@ desc = "This injects the person with DNA." icon = 'icons/obj/items.dmi' icon_state = "dnainjector" - var/dnatype = null - var/list/dna = null - var/block = null - var/owner = null - var/ue = null + var/block=0 + var/datum/dna2/record/buf=null var/s_time = 10.0 throw_speed = 1 throw_range = 5 @@ -17,57 +14,76 @@ var/is_bullet = 0 var/inuse = 0 + // USE ONLY IN PREMADE SYRINGES. WILL NOT WORK OTHERWISE. + var/datatype=0 + var/value=0 + +/obj/item/weapon/dnainjector/New() + if(datatype && block) + buf=new + buf.dna=new + buf.types = datatype + buf.dna.ResetSE() + //testing("[name]: DNA2 SE blocks prior to SetValue: [english_list(buf.dna.SE)]") + SetValue(src.value) + //testing("[name]: DNA2 SE blocks after SetValue: [english_list(buf.dna.SE)]") + /obj/item/weapon/dnainjector/attack_paw(mob/user as mob) return attack_hand(user) +/obj/item/weapon/dnainjector/proc/GetRealBlock(var/selblock) + if(selblock==0) + return block + else + return selblock /obj/item/weapon/dnainjector/proc/GetState(var/selblock=0) - var/real_block - if(!selblock) - real_block=block - selblock=1 + var/real_block=GetRealBlock(selblock) + if(buf.types&DNA2_BUF_SE) + return buf.dna.GetSEState(real_block) else - real_block=selblock - var/list/BOUNDS = GetDNABounds(real_block) - return dna[selblock] > BOUNDS[DNA_ON_LOWERBOUND] + return buf.dna.GetUIState(real_block) /obj/item/weapon/dnainjector/proc/SetState(var/on, var/selblock=0) - var/real_block - if(!selblock) - real_block=block - selblock=1 + var/real_block=GetRealBlock(selblock) + if(buf.types&DNA2_BUF_SE) + return buf.dna.SetSEState(real_block,on) else - real_block=selblock - var/list/BOUNDS=GetDNABounds(real_block) - var/val - if(on) - val=rand(BOUNDS[DNA_ON_LOWERBOUND],BOUNDS[DNA_ON_UPPERBOUND]) - else - val=rand(BOUNDS[DNA_OFF_LOWERBOUND],BOUNDS[DNA_OFF_UPPERBOUND]) - dna[selblock]=val + return buf.dna.SetUIState(real_block,on) -/obj/item/weapon/dnainjector/proc/GetValue(var/block=1) - return dna[block] +/obj/item/weapon/dnainjector/proc/GetValue(var/selblock=0) + var/real_block=GetRealBlock(selblock) + if(buf.types&DNA2_BUF_SE) + return buf.dna.GetSEValue(real_block) + else + return buf.dna.GetUIValue(real_block) + +/obj/item/weapon/dnainjector/proc/SetValue(var/val,var/selblock=0) + var/real_block=GetRealBlock(selblock) + if(buf.types&DNA2_BUF_SE) + return buf.dna.SetSEValue(real_block,val) + else + return buf.dna.SetUIValue(real_block,val) /obj/item/weapon/dnainjector/proc/inject(mob/M as mob, mob/user as mob) if(istype(M,/mob/living)) M.radiation += rand(5,20) if (!(NOCLONE in M.mutations)) // prevents drained people from having their DNA changed - if (dnatype == "ui") + if (buf.types & DNA2_BUF_UI) if (!block) //isolated block? - M.UpdateAppearance(dna) - if (ue) //unique enzymes? yes - M.real_name = ue - M.name = ue + M.UpdateAppearance(buf.dna) + if (buf.types & DNA2_BUF_UE) //unique enzymes? yes + M.real_name = buf.dna.real_name + M.name = buf.dna.real_name uses-- else M.dna.SetUIValue(block,src.GetValue()) M.UpdateAppearance() uses-- - if (dnatype == "se") + if (buf.types & DNA2_BUF_SE) if (!block) //isolated block? - M.dna.SE = dna + M.dna.SE = buf.dna.SE M.dna.UpdateSE() else M.dna.SetSEValue(block,src.GetValue()) @@ -107,15 +123,24 @@ spawn(50) // Not the best fix. There should be an failure proc, for /effect/equip_e/, which is called when the first initital checks fail inuse = 0 M.requests += O - if (dnatype == "se") - // So you're checking for 14, and yet MONKEYBLOCK is 27 in globals.dm, - // and domutcheck checks MONKEYBLOCK...? wat. - N3X - //if (isblockon(getblock(dna, 14,3),14) && istype(M, /mob/living/carbon/human)) - if (GetState(MONKEYBLOCK) && istype(M, /mob/living/carbon/human) ) - msg_admin_attack("[key_name_admin(user)] injected [key_name_admin(M)] with the [name] \red(MONKEY) (JMP)") + if (buf.types & DNA2_BUF_SE) + if(block)// Isolated injector + testing("Isolated block [block] injector with contents: [GetValue()]") + if (GetState() && block == MONKEYBLOCK && istype(M, /mob/living/carbon/human) ) + message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with the Isolated [name] \red(MONKEY)") + log_attack("[key_name(user)] injected [key_name(M)] with the Isolated [name] (MONKEY)") + log_game("[key_name_admin(user)] injected [key_name_admin(M)] with the Isolated [name] \red(MONKEY)") + else + log_attack("[key_name(user)] injected [key_name(M)] with the Isolated [name]") else - // message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with the [name]") - log_attack("[key_name(user)] injected [key_name(M)] with the [name]") + testing("DNA injector with contents: [english_list(buf.dna.SE)]") + if (GetState(MONKEYBLOCK) && istype(M, /mob/living/carbon/human) ) + message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with the [name] \red(MONKEY)") + log_attack("[key_name(user)] injected [key_name(M)] with the [name] (MONKEY)") + log_game("[key_name_admin(user)] injected [key_name_admin(M)] with the [name] \red(MONKEY)") + else + // message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with the [name]") + log_attack("[key_name(user)] injected [key_name(M)] with the [name]") else // message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with the [name]") log_attack("[key_name(user)] injected [key_name(M)] with the [name]") @@ -132,15 +157,24 @@ if (!(istype(M, /mob/living/carbon/human) || istype(M, /mob/living/carbon/monkey))) user << "\red Apparently it didn't work." return - if (dnatype == "se") - // And again... ? - //if (isblockon(getblock(dna, 14,3),14) && istype(M, /mob/living/carbon/human)) - if (GetState(MONKEYBLOCK) && istype(M, /mob/living/carbon/human)) - message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with the [name] \red(MONKEY)") - log_game("[key_name(user)] injected [key_name(M)] with the [name] (MONKEY)") + + if (buf.types & DNA2_BUF_SE) + if(block)// Isolated injector + testing("Isolated block [block] injector with contents: [GetValue()]") + if (GetState() && block == MONKEYBLOCK && istype(M, /mob/living/carbon/human) ) + message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with the Isolated [name] \red(MONKEY)") + log_attack("[key_name(user)] injected [key_name(M)] with the Isolated [name] (MONKEY)") + log_game("[key_name_admin(user)] injected [key_name_admin(M)] with the Isolated [name] \red(MONKEY)") + else + log_attack("[key_name(user)] injected [key_name(M)] with the Isolated [name]") else -// message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with the [name]") - log_game("[key_name(user)] injected [key_name(M)] with the [name]") + testing("DNA injector with contents: [english_list(buf.dna.SE)]") + if (GetState(MONKEYBLOCK) && istype(M, /mob/living/carbon/human)) + message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with the [name] \red(MONKEY)") + log_game("[key_name(user)] injected [key_name(M)] with the [name] (MONKEY)") + else + // message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with the [name]") + log_game("[key_name(user)] injected [key_name(M)] with the [name]") else // message_admins("[key_name_admin(user)] injected [key_name_admin(M)] with the [name]") log_game("[key_name(user)] injected [key_name(M)] with the [name]") @@ -165,460 +199,462 @@ /obj/item/weapon/dnainjector/hulkmut name = "DNA-Injector (Hulk)" desc = "This will make you big and strong, but give you a bad skin condition." - dnatype = "se" - dna = list(4090) + datatype = DNA2_BUF_SE + value = 0xFFF //block = 2 New() - ..() block = HULKBLOCK + ..() /obj/item/weapon/dnainjector/antihulk name = "DNA-Injector (Anti-Hulk)" desc = "Cures green skin." - dnatype = "se" - dna = list(1) + datatype = DNA2_BUF_SE + value = 0x001 //block = 2 New() - ..() block = HULKBLOCK + ..() /obj/item/weapon/dnainjector/xraymut name = "DNA-Injector (Xray)" desc = "Finally you can see what the Captain does." - dnatype = "se" - dna = list(4090) + datatype = DNA2_BUF_SE + value = 0xFFF //block = 8 New() - ..() block = XRAYBLOCK + ..() /obj/item/weapon/dnainjector/antixray name = "DNA-Injector (Anti-Xray)" desc = "It will make you see harder." - dnatype = "se" - dna = list(1) + datatype = DNA2_BUF_SE + value = 0x001 //block = 8 New() - ..() block = XRAYBLOCK + ..() /obj/item/weapon/dnainjector/firemut name = "DNA-Injector (Fire)" desc = "Gives you fire." - dnatype = "se" - dna = list(4090) + datatype = DNA2_BUF_SE + value = 0xFFF //block = 10 New() - ..() block = FIREBLOCK + ..() /obj/item/weapon/dnainjector/antifire name = "DNA-Injector (Anti-Fire)" desc = "Cures fire." - dnatype = "se" - dna = list(1) + datatype = DNA2_BUF_SE + value = 0x001 //block = 10 New() - ..() block = FIREBLOCK + ..() /obj/item/weapon/dnainjector/telemut name = "DNA-Injector (Tele.)" desc = "Super brain man!" - dnatype = "se" - dna = list(4090) + datatype = DNA2_BUF_SE + value = 0xFFF //block = 12 New() - ..() block = TELEBLOCK + ..() /obj/item/weapon/dnainjector/antitele name = "DNA-Injector (Anti-Tele.)" desc = "Will make you not able to control your mind." - dnatype = "se" - dna = list(1) + datatype = DNA2_BUF_SE + value = 0x001 //block = 12 New() - ..() block = TELEBLOCK + ..() /obj/item/weapon/dnainjector/nobreath name = "DNA-Injector (No Breath)" desc = "Hold your breath and count to infinity." - dnatype = "se" - dna = list(4090) + datatype = DNA2_BUF_SE + value = 0xFFF //block = 2 New() - ..() block = NOBREATHBLOCK + ..() /obj/item/weapon/dnainjector/antinobreath name = "DNA-Injector (Anti-No Breath)" desc = "Hold your breath and count to 100." - dnatype = "se" - dna = list(1) + datatype = DNA2_BUF_SE + value = 0x001 //block = 2 New() - ..() block = NOBREATHBLOCK + ..() /obj/item/weapon/dnainjector/remoteview name = "DNA-Injector (Remote View)" desc = "Stare into the distance for a reason." - dnatype = "se" - dna = list(4090) + datatype = DNA2_BUF_SE + value = 0xFFF //block = 2 New() - ..() block = REMOTEVIEWBLOCK + ..() /obj/item/weapon/dnainjector/antiremoteview name = "DNA-Injector (Anti-Remote View)" desc = "Cures green skin." - dnatype = "se" - dna = list(1) + datatype = DNA2_BUF_SE + value = 0x001 //block = 2 New() - ..() block = REMOTEVIEWBLOCK + ..() /obj/item/weapon/dnainjector/regenerate name = "DNA-Injector (Regeneration)" desc = "Healthy but hungry." - dnatype = "se" - dna = list(4090) + datatype = DNA2_BUF_SE + value = 0xFFF //block = 2 New() - ..() block = REGENERATEBLOCK + ..() /obj/item/weapon/dnainjector/antiregenerate name = "DNA-Injector (Anti-Regeneration)" desc = "Sickly but sated." - dnatype = "se" - dna = list(1) + datatype = DNA2_BUF_SE + value = 0x001 //block = 2 New() - ..() block = REGENERATEBLOCK + ..() /obj/item/weapon/dnainjector/runfast name = "DNA-Injector (Increase Run)" desc = "Running Man." - dnatype = "se" - dna = list(4090) + datatype = DNA2_BUF_SE + value = 0xFFF //block = 2 New() - ..() block = INCREASERUNBLOCK + ..() /obj/item/weapon/dnainjector/antirunfast name = "DNA-Injector (Anti-Increase Run)" desc = "Walking Man." - dnatype = "se" - dna = list(1) + datatype = DNA2_BUF_SE + value = 0x001 //block = 2 New() - ..() block = INCREASERUNBLOCK + ..() /obj/item/weapon/dnainjector/morph name = "DNA-Injector (Morph)" desc = "A total makeover." - dnatype = "se" - dna = list(4090) + datatype = DNA2_BUF_SE + value = 0xFFF //block = 2 New() - ..() block = MORPHBLOCK + ..() /obj/item/weapon/dnainjector/antimorph name = "DNA-Injector (Anti-Morph)" desc = "Cures identity crisis." - dnatype = "se" - dna = list(1) + datatype = DNA2_BUF_SE + value = 0x001 //block = 2 New() - ..() block = MORPHBLOCK -/* + ..() + +/* No COLDBLOCK on bay /obj/item/weapon/dnainjector/cold name = "DNA-Injector (Cold)" desc = "Feels a bit chilly." - dnatype = "se" - dna = list(4090) + datatype = DNA2_BUF_SE + value = 0xFFF //block = 2 New() - ..() block = COLDBLOCK + ..() /obj/item/weapon/dnainjector/anticold name = "DNA-Injector (Anti-Cold)" desc = "Feels room-temperature." - dnatype = "se" - dna = list(1) + datatype = DNA2_BUF_SE + value = 0x001 //block = 2 New() - ..() block = COLDBLOCK + ..() */ + /obj/item/weapon/dnainjector/noprints name = "DNA-Injector (No Prints)" desc = "Better than a pair of budget insulated gloves." - dnatype = "se" - dna = list(4090) + datatype = DNA2_BUF_SE + value = 0xFFF //block = 2 New() - ..() block = NOPRINTSBLOCK + ..() /obj/item/weapon/dnainjector/antinoprints name = "DNA-Injector (Anti-No Prints)" desc = "Not quite as good as a pair of budget insulated gloves." - dnatype = "se" - dna = list(1) + datatype = DNA2_BUF_SE + value = 0x001 //block = 2 New() - ..() block = NOPRINTSBLOCK + ..() /obj/item/weapon/dnainjector/insulation name = "DNA-Injector (Shock Immunity)" desc = "Better than a pair of real insulated gloves." - dnatype = "se" - dna = list(4090) + datatype = DNA2_BUF_SE + value = 0xFFF //block = 2 New() - ..() block = SHOCKIMMUNITYBLOCK + ..() /obj/item/weapon/dnainjector/antiinsulation name = "DNA-Injector (Anti-Shock Immunity)" desc = "Not quite as good as a pair of real insulated gloves." - dnatype = "se" - dna = list(1) + datatype = DNA2_BUF_SE + value = 0x001 //block = 2 New() - ..() block = SHOCKIMMUNITYBLOCK + ..() /obj/item/weapon/dnainjector/midgit name = "DNA-Injector (Small Size)" desc = "Makes you shrink." - dnatype = "se" - dna = list(4090) + datatype = DNA2_BUF_SE + value = 0xFFF //block = 2 New() - ..() block = SMALLSIZEBLOCK + ..() /obj/item/weapon/dnainjector/antimidgit name = "DNA-Injector (Anti-Small Size)" desc = "Makes you grow. But not too much." - dnatype = "se" - dna = list(1) + datatype = DNA2_BUF_SE + value = 0x001 //block = 2 New() - ..() block = SMALLSIZEBLOCK + ..() ///////////////////////////////////// /obj/item/weapon/dnainjector/antiglasses name = "DNA-Injector (Anti-Glasses)" desc = "Toss away those glasses!" - dnatype = "se" - dna = list(1) + datatype = DNA2_BUF_SE + value = 0x001 //block = 1 New() - ..() block = GLASSESBLOCK + ..() /obj/item/weapon/dnainjector/glassesmut name = "DNA-Injector (Glasses)" desc = "Will make you need dorkish glasses." - dnatype = "se" - dna = list(4090) + datatype = DNA2_BUF_SE + value = 0xFFF //block = 1 New() - ..() block = GLASSESBLOCK + ..() /obj/item/weapon/dnainjector/epimut name = "DNA-Injector (Epi.)" desc = "Shake shake shake the room!" - dnatype = "se" - dna = list(4090) + datatype = DNA2_BUF_SE + value = 0xFFF //block = 3 New() - ..() block = HEADACHEBLOCK + ..() /obj/item/weapon/dnainjector/antiepi name = "DNA-Injector (Anti-Epi.)" desc = "Will fix you up from shaking the room." - dnatype = "se" - dna = list(1) + datatype = DNA2_BUF_SE + value = 0x001 //block = 3 New() - ..() block = HEADACHEBLOCK + ..() /obj/item/weapon/dnainjector/anticough name = "DNA-Injector (Anti-Cough)" desc = "Will stop that awful noise." - dnatype = "se" - dna = list(1) + datatype = DNA2_BUF_SE + value = 0x001 //block = 5 New() - ..() block = COUGHBLOCK + ..() /obj/item/weapon/dnainjector/coughmut name = "DNA-Injector (Cough)" desc = "Will bring forth a sound of horror from your throat." - dnatype = "se" - dna = list(4090) + datatype = DNA2_BUF_SE + value = 0xFFF //block = 5 New() - ..() block = COUGHBLOCK + ..() /obj/item/weapon/dnainjector/clumsymut name = "DNA-Injector (Clumsy)" desc = "Makes clumsy minions." - dnatype = "se" - dna = list(4090) + datatype = DNA2_BUF_SE + value = 0xFFF //block = 6 New() - ..() block = CLUMSYBLOCK + ..() /obj/item/weapon/dnainjector/anticlumsy name = "DNA-Injector (Anti-Clumy)" desc = "Cleans up confusion." - dnatype = "se" - dna = list(1) + datatype = DNA2_BUF_SE + value = 0x001 //block = 6 New() - ..() block = CLUMSYBLOCK + ..() /obj/item/weapon/dnainjector/antitour name = "DNA-Injector (Anti-Tour.)" desc = "Will cure tourrets." - dnatype = "se" - dna = list(1) + datatype = DNA2_BUF_SE + value = 0x001 //block = 7 New() - ..() block = TWITCHBLOCK + ..() /obj/item/weapon/dnainjector/tourmut name = "DNA-Injector (Tour.)" desc = "Gives you a nasty case off tourrets." - dnatype = "se" - dna = list(4090) + datatype = DNA2_BUF_SE + value = 0xFFF //block = 7 New() - ..() block = TWITCHBLOCK + ..() /obj/item/weapon/dnainjector/stuttmut name = "DNA-Injector (Stutt.)" desc = "Makes you s-s-stuttterrr" - dnatype = "se" - dna = list(4090) + datatype = DNA2_BUF_SE + value = 0xFFF //block = 9 New() - ..() block = NERVOUSBLOCK + ..() /obj/item/weapon/dnainjector/antistutt name = "DNA-Injector (Anti-Stutt.)" desc = "Fixes that speaking impairment." - dnatype = "se" - dna = list(1) + datatype = DNA2_BUF_SE + value = 0x001 //block = 9 New() - ..() block = NERVOUSBLOCK + ..() /obj/item/weapon/dnainjector/blindmut name = "DNA-Injector (Blind)" desc = "Makes you not see anything." - dnatype = "se" - dna = list(4090) + datatype = DNA2_BUF_SE + value = 0xFFF //block = 11 New() - ..() block = BLINDBLOCK + ..() /obj/item/weapon/dnainjector/antiblind name = "DNA-Injector (Anti-Blind)" desc = "ITS A MIRACLE!!!" - dnatype = "se" - dna = list(1) + datatype = DNA2_BUF_SE + value = 0x001 //block = 11 New() - ..() block = BLINDBLOCK + ..() /obj/item/weapon/dnainjector/deafmut name = "DNA-Injector (Deaf)" desc = "Sorry, what did you say?" - dnatype = "se" - dna = list(4090) + datatype = DNA2_BUF_SE + value = 0xFFF //block = 13 New() - ..() block = DEAFBLOCK + ..() /obj/item/weapon/dnainjector/antideaf name = "DNA-Injector (Anti-Deaf)" desc = "Will make you hear once more." - dnatype = "se" - dna = list(1) + datatype = DNA2_BUF_SE + value = 0x001 //block = 13 New() - ..() block = DEAFBLOCK + ..() /obj/item/weapon/dnainjector/hallucination name = "DNA-Injector (Halluctination)" desc = "What you see isn't always what you get." - dnatype = "se" - dna = list(4090) + datatype = DNA2_BUF_SE + value = 0xFFF //block = 2 New() - ..() block = HALLUCINATIONBLOCK + ..() /obj/item/weapon/dnainjector/antihallucination name = "DNA-Injector (Anti-Hallucination)" desc = "What you see is what you get." - dnatype = "se" - dna = list(1) + datatype = DNA2_BUF_SE + value = 0x001 //block = 2 New() - ..() block = HALLUCINATIONBLOCK + ..() /obj/item/weapon/dnainjector/h2m name = "DNA-Injector (Human > Monkey)" desc = "Will make you a flea bag." - dnatype = "se" - dna = list(4090) + datatype = DNA2_BUF_SE + value = 0xFFF //block = 14 New() - ..() block = MONKEYBLOCK + ..() /obj/item/weapon/dnainjector/m2h name = "DNA-Injector (Monkey > Human)" desc = "Will make you...less hairy." - dnatype = "se" - dna = list(1) + datatype = DNA2_BUF_SE + value = 0x001 //block = 14 New() - ..() block = MONKEYBLOCK + ..() \ No newline at end of file diff --git a/code/game/objects/items/weapons/storage/bible.dm b/code/game/objects/items/weapons/storage/bible.dm index e1ed768593..0e3642b4aa 100644 --- a/code/game/objects/items/weapons/storage/bible.dm +++ b/code/game/objects/items/weapons/storage/bible.dm @@ -16,8 +16,8 @@ /obj/item/weapon/storage/bible/booze/New() ..() - new /obj/item/weapon/reagent_containers/food/drinks/beer(src) - new /obj/item/weapon/reagent_containers/food/drinks/beer(src) + new /obj/item/weapon/reagent_containers/food/drinks/cans/beer(src) + new /obj/item/weapon/reagent_containers/food/drinks/cans/beer(src) new /obj/item/weapon/spacecash(src) new /obj/item/weapon/spacecash(src) new /obj/item/weapon/spacecash(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm index b75222fcdc..95ac7f0c94 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm @@ -12,16 +12,16 @@ New() ..() sleep(2) - new /obj/item/weapon/reagent_containers/food/drinks/beer( src ) - new /obj/item/weapon/reagent_containers/food/drinks/beer( src ) - new /obj/item/weapon/reagent_containers/food/drinks/beer( src ) - new /obj/item/weapon/reagent_containers/food/drinks/beer( src ) - new /obj/item/weapon/reagent_containers/food/drinks/beer( src ) - new /obj/item/weapon/reagent_containers/food/drinks/beer( src ) - new /obj/item/weapon/reagent_containers/food/drinks/beer( src ) - new /obj/item/weapon/reagent_containers/food/drinks/beer( src ) - new /obj/item/weapon/reagent_containers/food/drinks/beer( src ) - new /obj/item/weapon/reagent_containers/food/drinks/beer( src ) + new /obj/item/weapon/reagent_containers/food/drinks/cans/beer( src ) + new /obj/item/weapon/reagent_containers/food/drinks/cans/beer( src ) + new /obj/item/weapon/reagent_containers/food/drinks/cans/beer( src ) + new /obj/item/weapon/reagent_containers/food/drinks/cans/beer( src ) + new /obj/item/weapon/reagent_containers/food/drinks/cans/beer( src ) + new /obj/item/weapon/reagent_containers/food/drinks/cans/beer( src ) + new /obj/item/weapon/reagent_containers/food/drinks/cans/beer( src ) + new /obj/item/weapon/reagent_containers/food/drinks/cans/beer( src ) + new /obj/item/weapon/reagent_containers/food/drinks/cans/beer( src ) + new /obj/item/weapon/reagent_containers/food/drinks/cans/beer( src ) return /obj/structure/closet/secure_closet/bar/update_icon() diff --git a/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm b/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm new file mode 100644 index 0000000000..8fb8b0c92c --- /dev/null +++ b/code/game/objects/structures/crates_lockers/closets/secure/guncabinet.dm @@ -0,0 +1,53 @@ +/obj/structure/closet/secure_closet/guncabinet + name = "gun cabinet" + req_access = list(access_armory) + icon = 'icons/obj/guncabinet.dmi' + icon_state = "base" + icon_off ="base" + icon_broken ="base" + icon_locked ="base" + icon_closed ="base" + icon_opened = "base" + +/obj/structure/closet/secure_closet/guncabinet/New() + ..() + update_icon() + +/obj/structure/closet/secure_closet/guncabinet/toggle() + ..() + update_icon() + +/obj/structure/closet/secure_closet/guncabinet/update_icon() + overlays.Cut() + if(opened) + overlays += icon(icon,"door_open") + else + var/lazors = 0 + var/shottas = 0 + for (var/obj/item/weapon/gun/G in contents) + if (istype(G, /obj/item/weapon/gun/energy)) + lazors++ + if (istype(G, /obj/item/weapon/gun/projectile/)) + shottas++ + if (lazors || shottas) + for (var/i = 0 to 2) + var/image/gun = image(icon(src.icon)) + + if (lazors > 0 && (shottas <= 0 || prob(50))) + lazors-- + gun.icon_state = "laser" + else if (shottas > 0) + shottas-- + gun.icon_state = "projectile" + + gun.pixel_x = i*4 + overlays += gun + + overlays += icon(src.icon,"door") + + if(broken) + overlays += icon(src.icon,"broken") + else if (locked) + overlays += icon(src.icon,"locked") + else + overlays += icon(src.icon,"open") \ No newline at end of file diff --git a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm index 1dc3ca6f58..7dc173e33b 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm @@ -39,9 +39,12 @@ new /obj/item/clothing/suit/bio_suit/scientist(src) new /obj/item/clothing/head/bio_hood/scientist(src) new /obj/item/clothing/under/rank/research_director(src) + new /obj/item/clothing/under/rank/research_director/rdalt(src) + new /obj/item/clothing/under/rank/research_director/dress_rd(src) new /obj/item/clothing/suit/storage/labcoat(src) new /obj/item/weapon/cartridge/rd(src) new /obj/item/clothing/shoes/white(src) + new /obj/item/clothing/shoes/leather(src) new /obj/item/clothing/gloves/latex(src) new /obj/item/device/radio/headset/heads/rd(src) new /obj/item/weapon/tank/air(src) diff --git a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm index d115c40ff4..28e0958206 100644 --- a/code/game/objects/structures/crates_lockers/closets/wardrobe.dm +++ b/code/game/objects/structures/crates_lockers/closets/wardrobe.dm @@ -367,5 +367,6 @@ new /obj/item/clothing/shoes/green(src) new /obj/item/clothing/shoes/orange(src) new /obj/item/clothing/shoes/purple(src) + new /obj/item/clothing/shoes/red(src) new /obj/item/clothing/shoes/leather(src) return diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm index 7827749fa1..7e894c1359 100644 --- a/code/game/objects/structures/signs.dm +++ b/code/game/objects/structures/signs.dm @@ -174,3 +174,28 @@ name = "\improper HYDROPONICS" desc = "A warning sign which reads 'HYDROPONICS'" icon_state = "hydro1" + +/obj/structure/sign/directions/science + name = "\improper Science department" + desc = "A direction sign, pointing out which way Science department is." + icon_state = "direction_sci" + +/obj/structure/sign/directions/engineering + name = "\improper Engineering department" + desc = "A direction sign, pointing out which way Engineering department is." + icon_state = "direction_eng" + +/obj/structure/sign/directions/security + name = "\improper Security department" + desc = "A direction sign, pointing out which way Security department is." + icon_state = "direction_sec" + +/obj/structure/sign/directions/medical + name = "\improper Medical Bay" + desc = "A direction sign, pointing out which way Meducal Bay is." + icon_state = "direction_med" + +/obj/structure/sign/directions/evac + name = "\improper Escape Arm" + desc = "A direction sign, pointing out which way escape shuttle dock is." + icon_state = "direction_evac" diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index ab8884d96c..eb59003ace 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -163,6 +163,7 @@ if("boiling") watertemp = "normal" user.visible_message("[user] adjusts the shower with the [I].", "You adjust the shower with the [I].") + add_fingerprint(user) /obj/machinery/shower/update_icon() //this is terribly unreadable, but basically it makes the shower mist up overlays.Cut() //once it's been on for a while, in addition to handling the water overlay. @@ -412,4 +413,4 @@ /obj/structure/sink/puddle/attackby(obj/item/O as obj, mob/user as mob) icon_state = "puddle-splash" ..() - icon_state = "puddle" \ No newline at end of file + icon_state = "puddle" diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm index ed415411a5..5250148688 100644 --- a/code/game/turfs/simulated.dm +++ b/code/game/turfs/simulated.dm @@ -9,10 +9,17 @@ var/to_be_destroyed = 0 //Used for fire, if a melting temperature was reached, it will be destroyed var/max_fire_temperature_sustained = 0 //The max temperature of the fire which it was subjected to var/dirt = 0 + /turf/simulated/New() ..() levelupdate() +/turf/simulated/proc/AddTracks(var/typepath,var/bloodDNA,var/comingdir,var/goingdir,var/bloodcolor="#A10808") + var/obj/effect/decal/cleanable/blood/tracks/tracks = locate(typepath) in src + if(!tracks) + tracks = new typepath(src) + tracks.AddTracks(bloodDNA,comingdir,goingdir,bloodcolor) + /turf/simulated/Entered(atom/A, atom/OL) if(movement_disabled && usr.ckey != movement_disabled_exception) usr << "\red Movement is admin-disabled." //This is to identify lag problems @@ -32,31 +39,39 @@ if(istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/H = M + if(istype(H.shoes, /obj/item/clothing/shoes/clown_shoes)) + var/obj/item/clothing/shoes/clown_shoes/O = H.shoes + if(H.m_intent == "run") + if(O.footstep >= 2) + O.footstep = 0 + playsound(src, "clownstep", 50, 1) // this will get annoying very fast. + else + O.footstep++ + else + playsound(src, "clownstep", 20, 1) + // Tracking blood var/list/bloodDNA = null + var/bloodcolor="" if(H.shoes) var/obj/item/clothing/shoes/S = H.shoes if(S.track_blood && S.blood_DNA) bloodDNA = S.blood_DNA + bloodcolor=S.blood_color S.track_blood-- else if(H.track_blood && H.feet_blood_DNA) bloodDNA = H.feet_blood_DNA + bloodcolor=H.feet_blood_color H.track_blood-- if (bloodDNA) - var/obj/effect/decal/cleanable/blood/footprints/here = new(src) - here.icon_state = "blood1" - here.dir = H.dir - here.blood_DNA |= bloodDNA.Copy() + src.AddTracks(/obj/effect/decal/cleanable/blood/tracks/footprints,bloodDNA,H.dir,0,bloodcolor) // Coming var/turf/simulated/from = get_step(H,reverse_direction(H.dir)) - if(from) - var/obj/effect/decal/cleanable/blood/footprints/there = new(from) - there.icon_state = "blood2" - there.dir = H.dir - there.blood_DNA |= bloodDNA.Copy() + if(istype(from) && from) + from.AddTracks(/obj/effect/decal/cleanable/blood/tracks/footprints,bloodDNA,0,H.dir,bloodcolor) // Going - bloodDNA = null + bloodDNA = null switch (src.wet) if(1) @@ -66,8 +81,8 @@ step(M, M.dir) M << "\blue You slipped on the wet floor!" playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3) - M.Stun(8) - M.Weaken(5) + M.Stun(5) + M.Weaken(3) else M.inertia_dir = 0 return @@ -77,13 +92,13 @@ step(M, M.dir) M << "\blue You slipped on the wet floor!" playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3) - M.Stun(8) - M.Weaken(5) + M.Stun(5) + M.Weaken(3) else M.inertia_dir = 0 return - if(2) //lube //can cause infinite loops - needs work + if(2) //lube //can cause infinite loops - needs work if(!istype(M, /mob/living/carbon/slime)) M.stop_pulling() step(M, M.dir) @@ -95,6 +110,29 @@ M << "\blue You slipped on the floor!" playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3) M.Weaken(10) + if(3) // Ice + if(istype(M, /mob/living/carbon/human)) // Added check since monkeys don't have shoes + if ((M.m_intent == "run") && !(istype(M:shoes, /obj/item/clothing/shoes) && M:shoes.flags&NOSLIP) && prob(30)) + M.stop_pulling() + step(M, M.dir) + M << "\blue You slipped on the icy floor!" + playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3) + M.Stun(4) + M.Weaken(3) + else + M.inertia_dir = 0 + return + else if(!istype(M, /mob/living/carbon/slime)) + if (M.m_intent == "run" && prob(30)) + M.stop_pulling() + step(M, M.dir) + M << "\blue You slipped on the icy floor!" + playsound(src.loc, 'sound/misc/slip.ogg', 50, 1, -3) + M.Stun(4) + M.Weaken(3) + else + M.inertia_dir = 0 + return ..() @@ -106,29 +144,49 @@ for(var/obj/effect/decal/cleanable/blood/B in contents) if(!B.blood_DNA[M.dna.unique_enzymes]) B.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type - if (M.virus2.len) - B.virus2 |= virus_copylist(M.virus2) return 1 //we bloodied the floor //if there isn't a blood decal already, make one. var/obj/effect/decal/cleanable/blood/newblood = new /obj/effect/decal/cleanable/blood(src) + + //Species-specific blood. + if(M.species) + newblood.basecolor = M.species.blood_color + else + newblood.basecolor = "#A10808" + newblood.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type - if (M.virus2.len) - newblood.virus2 |= virus_copylist(M.virus2) + newblood.update_icon() + return 1 //we bloodied the floor // Only adds blood on the floor -- Skie /turf/simulated/proc/add_blood_floor(mob/living/carbon/M as mob) - if( istype(M, /mob/living/carbon/monkey) || istype(M, /mob/living/carbon/human)) + if(istype(M, /mob/living/carbon/monkey)) + var/obj/effect/decal/cleanable/blood/this = new /obj/effect/decal/cleanable/blood(src) this.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type - if (M.virus2.len) - this.virus2 = virus_copylist(M.virus2) + this.basecolor = "#A10808" + this.update_icon() + + else if(istype(M,/mob/living/carbon/human)) + + var/obj/effect/decal/cleanable/blood/this = new /obj/effect/decal/cleanable/blood(src) + var/mob/living/carbon/human/H = M + + //Species-specific blood. + if(H.species) + this.basecolor = H.species.blood_color + else + this.basecolor = "#A10808" + this.update_icon() + + this.blood_DNA[M.dna.unique_enzymes] = M.dna.b_type else if( istype(M, /mob/living/carbon/alien )) - var/obj/effect/decal/cleanable/xenoblood/this = new /obj/effect/decal/cleanable/xenoblood(src) + var/obj/effect/decal/cleanable/blood/xeno/this = new /obj/effect/decal/cleanable/blood/xeno(src) this.blood_DNA["UNKNOWN BLOOD"] = "X*" else if( istype(M, /mob/living/silicon/robot )) - new /obj/effect/decal/cleanable/oil(src) \ No newline at end of file + new /obj/effect/decal/cleanable/blood/oil(src) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index c6dcc662a6..097cf4cc27 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -581,7 +581,8 @@ var/global/floorIsLava = 0 Spawn a gravitational anomaly (aka lagitational anomolag)
    Spawn wormholes
    Spawn blob
    - Trigger an Alien infestation
    + Trigger a Xenomorph infestation
    + Trigger a Cortical Borer infestation
    Spawn an Alien silently
    Trigger a Spider infestation
    Send in a space ninja
    diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 1196f14ebd..98efacef1a 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -65,6 +65,7 @@ var/list/admin_verbs_admin = list( /client/proc/cmd_admin_rejuvenate, /client/proc/toggleattacklogs, /client/proc/toggledebuglogs, + /client/proc/toggleghostwriters, /datum/admins/proc/show_skills, /client/proc/check_customitem_activity, /client/proc/man_up, @@ -72,7 +73,7 @@ var/list/admin_verbs_admin = list( /client/proc/response_team, // Response Teams admin verb /client/proc/toggle_antagHUD_use, /client/proc/toggle_antagHUD_restrictions, - /client/proc/allow_character_respawn /* Allows a ghost to respawn */ + /client/proc/allow_character_respawn /* Allows a ghost to respawn */ ) var/list/admin_verbs_ban = list( /client/proc/unban_panel, @@ -359,14 +360,11 @@ var/list/admin_verbs_mod = list( if(mob.invisibility == INVISIBILITY_OBSERVER) mob.invisibility = initial(mob.invisibility) mob << "\red Invisimin off. Invisibility reset." - mob.icon_state = "ghost" - mob.icon = 'icons/mob/human.dmi' - mob.update_icons() + mob.alpha = max(mob.alpha + 100, 255) else mob.invisibility = INVISIBILITY_OBSERVER mob << "\blue Invisimin on. You are now as invisible as a ghost." - mob.icon_state = "ghost" - mob.icon = 'icons/mob/mob.dmi' + mob.alpha = max(mob.alpha - 100, 0) /client/proc/player_panel() @@ -727,6 +725,21 @@ var/list/admin_verbs_mod = list( usr << "You now won't get attack log messages" +/client/proc/toggleghostwriters() + set name = "Toggle ghost writers" + set category = "Server" + if(!holder) return + if(config) + if(config.cult_ghostwriter) + config.cult_ghostwriter = 0 + src << "Disallowed ghost writers." + message_admins("Admin [key_name_admin(usr)] has disabled ghost writers.", 1) + else + config.cult_ghostwriter = 1 + src << "Enabled ghost writers." + message_admins("Admin [key_name_admin(usr)] has enabled ghost writers.", 1) + + /client/proc/toggledebuglogs() set name = "Toggle Debug Log Messages" set category = "Preferences" diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 43dc61c73f..b09712350c 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -511,10 +511,10 @@ jobs += "" counter = 0 - if(jobban_isbanned(M, "Internal Affairs Agent")) + if(jobban_isbanned(M, "Internal Affairs Agent")) jobs += "Internal Affairs Agent" else - jobs += "Internal Affairs Agent" + jobs += "Internal Affairs Agent" jobs += "" @@ -539,7 +539,7 @@ counter = 0 //pAI isn't technically a job, but it goes in here. - + if(jobban_isbanned(M, "pAI")) jobs += "pAI" else @@ -804,7 +804,11 @@ if (ismob(M)) if(!check_if_greater_rights_than(M.client)) return - M << "\red You have been kicked from the server" + var/reason = input("Please enter reason") + if(!reason) + M << "\red You have been kicked from the server" + else + M << "\red You have been kicked from the server: [reason]" log_admin("[key_name(usr)] booted [key_name(M)].") message_admins("\blue [key_name_admin(usr)] booted [key_name_admin(M)].", 1) //M.client = null @@ -1773,7 +1777,12 @@ log_admin("[key_name(usr)] spawned an alien infestation", 1) message_admins("\blue [key_name_admin(usr)] attempted an alien infestation", 1) new /datum/event/alien_infestation - + if("borers") + feedback_inc("admin_secrets_fun_used",1) + feedback_add_details("admin_secrets_fun_used","Borers") + log_admin("[key_name(usr)] spawned a cortical borer infestation.", 1) + message_admins("\blue [key_name_admin(usr)] spawned a cortical borer infestation.", 1) + new /datum/event/borer_infestation if("power") feedback_inc("admin_secrets_fun_used",1) diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index 95c5d63840..eabee2ba46 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -254,13 +254,17 @@ 'nano/templates/geoscanner.tmpl', 'nano/templates/dna_modifier.tmpl', 'nano/templates/telescience_console.tmpl', + 'nano/templates/pda.tmpl', + 'nano/templates/uplink.tmpl', 'nano/images/uiBackground.png', 'nano/images/uiIcons16.png', 'nano/images/uiIcons24.png', + 'nano/images/uiBackground-Syndicate.png', 'nano/images/uiLinkPendingIcon.gif', 'nano/images/uiMaskBackground.png', 'nano/images/uiNoticeBackground.jpg', 'nano/images/uiTitleFluff.png', + 'nano/images/uiTitleFluff-Syndicate.png', 'html/search.js', 'html/panels.css', 'icons/pda_icons/pda_atmos.png', diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index e3fff70f36..aedb20c70d 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -73,6 +73,12 @@ holder.icon_state = "hudxeno" else if(foundVirus) holder.icon_state = "hudill" + else if(patient.has_brain_worms()) + var/mob/living/simple_animal/borer/B = patient.has_brain_worms() + if(B.controlling) + holder.icon_state = "hudbrainworm" + else + holder.icon_state = "hudhealthy" else holder.icon_state = "hudhealthy" C.images += holder diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm index 277b42d364..d168edc4c1 100644 --- a/code/modules/clothing/suits/wiz_robe.dm +++ b/code/modules/clothing/suits/wiz_robe.dm @@ -35,6 +35,12 @@ icon_state = "amp" siemens_coefficient = 0.8 +/obj/item/clothing/head/wizard/cap + name = "Gentlemans Cap" + desc = "A checkered gray flat cap woven together with the rarest of threads." + icon_state = "gentcap" + siemens_coefficient = 0.8 + /obj/item/clothing/suit/wizrobe name = "wizard robe" desc = "A magnificant, gem-lined robe that seems to radiate power." @@ -79,6 +85,12 @@ icon_state = "psyamp" item_state = "psyamp" +/obj/item/clothing/suit/wizrobe/gentlecoat + name = "Gentlemans Coat" + desc = "A heavy threaded twead gray jacket. For a different sort of Gentleman." + icon_state = "gentlecoat" + item_state = "gentlecoat" + /obj/item/clothing/suit/wizrobe/fake name = "wizard robe" desc = "A rather dull, blue robe meant to mimick real wizard robes." diff --git a/code/modules/clothing/under/jobs/medsci.dm b/code/modules/clothing/under/jobs/medsci.dm index 4ae31f9d89..549a824d54 100644 --- a/code/modules/clothing/under/jobs/medsci.dm +++ b/code/modules/clothing/under/jobs/medsci.dm @@ -10,6 +10,24 @@ armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) flags = FPRINT | TABLEPASS +/obj/item/clothing/under/rank/research_director/rdalt + desc = "A dress suit and slacks stained with hard work and dedication to science. Perhaps other things as well, but mostly hard work and dedication." + name = "head researcher uniform" + icon_state = "rdalt" + item_state = "rdalt" + item_color = "rdalt" + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) + flags = FPRINT | TABLEPASS + +/obj/item/clothing/under/rank/research_director/dress_rd + name = "research director dress uniform" + desc = "Feminine fashion for the style concious RD. Its fabric provides minor protection from biological contaminants." + icon_state = "dress_rd" + item_color = "dress_rd" + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) + flags = FPRINT | TABLEPASS + + /obj/item/clothing/under/rank/scientist desc = "It's made of a special fiber that provides minor protection against biohazards. It has markings that denote the wearer as a scientist." name = "scientist's jumpsuit" diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 3681a43eca..15365e1eac 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -138,6 +138,13 @@ item_state = "psysuit" item_color = "psysuit" +/obj/item/clothing/under/gentlesuit + name = "Gentlemans Suit" + desc = "A silk black shirt with a white tie and a matching gray vest and slacks. Feels proper." + icon_state = "gentlesuit" + item_state = "gentlesuit" + item_color = "gentlesuit" + /obj/item/clothing/under/gimmick/rank/captain/suit name = "captain's suit" desc = "A green suit and yellow necktie. Exemplifies authority." @@ -285,11 +292,6 @@ icon_state = "dress_saloon" item_color = "dress_saloon" -/obj/item/clothing/under/dress/dress_rd - name = "research director dress uniform" - desc = "Feminine fashion for the style concious RD." - icon_state = "dress_rd" - item_color = "dress_rd" /obj/item/clothing/under/dress/dress_cap name = "captain dress uniform" @@ -358,7 +360,7 @@ flags_inv = HIDESHOES /obj/item/clothing/under/wedding/bride_white - name = "orange wedding dress" + name = "silky wedding dress" desc = "A white wedding gown made from the finest silk." icon_state = "bride_white" item_color = "bride_white" diff --git a/code/modules/destilery/main.dm b/code/modules/destilery/main.dm index 1ce22ef909..429a29afdf 100644 --- a/code/modules/destilery/main.dm +++ b/code/modules/destilery/main.dm @@ -118,7 +118,7 @@ switch(fermenting_item.type) if(/obj/item/weapon/reagent_containers/food/drinks/flour) //Flour is still flour - var/obj/item/weapon/reagent_containers/food/drinks/beer/B = new(src) + var/obj/item/weapon/reagent_containers/food/drinks/cans/beer/B = new(src) output += B else error = 1 @@ -178,7 +178,7 @@ return //Not done yet. switch(destilling_item.type) - if(/obj/item/weapon/reagent_containers/food/drinks/beer) //Flour is still flour + if(/obj/item/weapon/reagent_containers/food/drinks/cans/beer) //Flour is still flour var/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka/V = new(src) output += V else diff --git a/code/modules/detectivework/footprints_and_rag.dm b/code/modules/detectivework/footprints_and_rag.dm index efe2ebfa52..e8a207ca8e 100644 --- a/code/modules/detectivework/footprints_and_rag.dm +++ b/code/modules/detectivework/footprints_and_rag.dm @@ -4,6 +4,7 @@ var/track_blood = 0 var/list/feet_blood_DNA var/track_blood_type + var/feet_blood_color /obj/item/clothing/gloves var/transfer_blood = 0 diff --git a/code/modules/events/borers.dm b/code/modules/events/borers.dm new file mode 100644 index 0000000000..2c6a2820fb --- /dev/null +++ b/code/modules/events/borers.dm @@ -0,0 +1,38 @@ +//Cortical borer spawn event - care of RobRichards1997 with minor editing by Zuhayr. + +/datum/event/borer_infestation + oneShot = 1 + +/datum/event/borer_infestation + announceWhen = 400 + + var/spawncount = 1 + var/successSpawn = 0 //So we don't make a command report if nothing gets spawned. + +/datum/event/borer_infestation/setup() + announceWhen = rand(announceWhen, announceWhen + 50) + spawncount = rand(1, 3) + +/datum/event/borer_infestation/announce() + if(successSpawn) + command_alert("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert") + world << sound('sound/AI/aliens.ogg') + +/datum/event/borer_infestation/start() + var/list/vents = list() + for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in world) + if(temp_vent.loc.z == 1 && !temp_vent.welded && temp_vent.network) + //Stops cortical borers getting stuck in small networks. See: Security, Virology + if(temp_vent.network.normal_members.len > 50) + vents += temp_vent + + var/list/candidates = get_alien_candidates() + while(spawncount > 0 && vents.len && candidates.len) + var/obj/vent = pick_n_take(vents) + var/client/C = pick_n_take(candidates) + + var/mob/living/simple_animal/borer/new_borer = new(vent.loc) + new_borer.key = C.key + + spawncount-- + successSpawn = 1 \ No newline at end of file diff --git a/code/modules/events/money_spam.dm b/code/modules/events/money_spam.dm index 17c312eea2..f610b0d2f9 100644 --- a/code/modules/events/money_spam.dm +++ b/code/modules/events/money_spam.dm @@ -94,7 +94,8 @@ if(ai.aiPDA != P && ai.aiPDA != src) ai.show_message("Intercepted message from [sender] (Unknown / spam?) to [P:owner]: [message]") - P.tnote += "← From [sender] (Unknown / spam?):
    [message]
    " + //Commented out because we don't send messages like this anymore. Instead it will just popup in their chat window. + //P.tnote += "← From [sender] (Unknown / spam?):
    [message]
    " if (!P.silent) playsound(P.loc, 'sound/machines/twobeep.ogg', 50, 1) diff --git a/code/modules/events/radiation_storm.dm b/code/modules/events/radiation_storm.dm index ad79eed516..91bf29e00a 100644 --- a/code/modules/events/radiation_storm.dm +++ b/code/modules/events/radiation_storm.dm @@ -34,10 +34,10 @@ H.apply_effect((rand(40,70)),IRRADIATE,0) if (prob(75)) randmutb(H) // Applies bad mutation - domutcheck(H,null,1) + domutcheck(H,null,MUTCHK_FORCED) else randmutg(H) // Applies good mutation - domutcheck(H,null,1) + domutcheck(H,null,MUTCHK_FORCED) for(var/mob/living/carbon/monkey/M in living_mob_list) diff --git a/code/modules/food/recipes_microwave.dm b/code/modules/food/recipes_microwave.dm index a297cb6183..705200241c 100644 --- a/code/modules/food/recipes_microwave.dm +++ b/code/modules/food/recipes_microwave.dm @@ -477,6 +477,15 @@ I said no! ) result = /obj/item/weapon/reagent_containers/food/snacks/popcorn + +/datum/recipe/cookie + reagents = list("milk" = 5, "flour" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/egg, + /obj/item/weapon/reagent_containers/food/snacks/chocolatebar, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/cookie + /datum/recipe/fortunecookie reagents = list("flour" = 5) items = list( diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 2f82ff42c9..9627c55d82 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -21,12 +21,13 @@ var/antagHUD = 0 universal_speak = 1 var/atom/movable/following = null + /mob/dead/observer/New(mob/body) sight |= SEE_TURFS | SEE_MOBS | SEE_OBJS | SEE_SELF see_invisible = SEE_INVISIBLE_OBSERVER see_in_dark = 100 verbs += /mob/dead/observer/proc/dead_tele - + stat = DEAD var/turf/T @@ -93,12 +94,12 @@ Works together with spawning an observer, noted above. /mob/dead/observer/Life() ..() - if(!loc) return + if(!loc) return if(!client) return 0 if(client.images.len) - for(var/image/hud in client.images) + for(var/image/hud in client.images) if(copytext(hud.icon_state,1,4) == "hud") client.images.Remove(hud) if(antagHUD) @@ -145,7 +146,7 @@ Works together with spawning an observer, noted above. var/foundVirus = 0 if(patient.virus2.len) foundVirus = 1 - if(!C) return + if(!C) return holder = patient.hud_list[HEALTH_HUD] if(patient.stat == 2) holder.icon_state = "hudhealth-100" @@ -160,10 +161,17 @@ Works together with spawning an observer, noted above. holder.icon_state = "hudxeno" else if(foundVirus) holder.icon_state = "hudill" + else if(patient.has_brain_worms()) + var/mob/living/simple_animal/borer/B = patient.has_brain_worms() + if(B.controlling) + holder.icon_state = "hudbrainworm" + else + holder.icon_state = "hudhealthy" else holder.icon_state = "hudhealthy" - C.images += holder - + + C.images += holder + /mob/dead/proc/assess_targets(list/target_list, mob/dead/observer/U) var/icon/tempHud = 'icons/mob/hud.dmi' @@ -319,7 +327,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(jobban_isbanned(M, "AntagHUD")) src << "\red You have been banned from using this feature" return - if(config.antag_hud_restricted && !M.has_enabled_antagHUD &&!client.holder) + if(config.antag_hud_restricted && !M.has_enabled_antagHUD &&!client.holder) var/response = alert(src, "If you turn this on, you will not be able to take any part in the round.","Are you sure you want to turn this feature on?","Yes","No") if(response == "No") return M.can_reenter_corpse = 0 @@ -489,3 +497,79 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp dat += data_core.get_manifest() src << browse(dat, "window=manifest;size=370x420;can_close=1") + +//Used for drawing on walls with blood puddles as a spooky ghost. +/mob/dead/verb/bloody_doodle() + + set category = "Ghost" + set name = "Write in blood" + set desc = "If the round is sufficiently spooky, write a short message in blood on the floor or a wall. Remember, no IC in OOC or OOC in IC." + + if(!(config.cult_ghostwriter)) + src << "\red That verb is not currently permitted." + return + + if (!src.stat) + return + + if (usr != src) + return 0 //something is terribly wrong + + var/ghosts_can_write + if(ticker.mode.name == "cult") + var/datum/game_mode/cult/C = ticker.mode + if(C.cult.len > config.cult_ghostwriter_req_cultists) + ghosts_can_write = 1 + + if(!ghosts_can_write) + src << "\red The veil is not thin enough for you to do that." + return + + var/list/choices = list() + for(var/obj/effect/decal/cleanable/blood/B in view(1,src)) + if(B.amount > 0) + choices += B + + if(!choices.len) + src << "There is no blood to use nearby." + return + + var/obj/effect/decal/cleanable/blood/choice = input(src,"What blood would you like to use?") in null|choices + + var/direction = input(src,"Which way?","Tile selection") as anything in list("Here","North","South","East","West") + var/turf/simulated/T = src.loc + if (direction != "Here") + T = get_step(T,text2dir(direction)) + + if (!istype(T)) + src << "You cannot doodle there." + return + + if(!choice || choice.amount == 0 || !(src.Adjacent(choice))) + return + + var/doodle_color = (choice.basecolor) ? choice.basecolor : "#A10808" + + var/num_doodles = 0 + for (var/obj/effect/decal/cleanable/blood/writing/W in T) + num_doodles++ + if (num_doodles > 4) + src << "There is no space to write on!" + return + + var/max_length = 50 + + var/message = stripped_input(src,"Write a message. It cannot be longer than [max_length] characters.","Blood writing", "") + + if (message) + + if (length(message) > max_length) + message += "-" + src << "You ran out of blood to write with!" + + var/obj/effect/decal/cleanable/blood/writing/W = new(T) + W.basecolor = doodle_color + W.update_icon() + W.message = message + W.add_hiddenprint(src) + W.visible_message("\red Invisible fingers crudely paint something in blood on [T]...") \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm index 7487ffa631..2b084ce8b5 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm @@ -31,6 +31,10 @@ continue no_queen = 0 + if(src.has_brain_worms()) + src << "We cannot perform this ability at the present time!" + return + if(no_queen) adjustToxLoss(-500) src << "\green You begin to evolve!" diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index dbca1091c6..f841b09d13 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -532,7 +532,7 @@ B.host_brain << "\red Horrific, burning agony lances through you, ripping a soundless scream from your trapped mind!" //Check for brain worms in head. -/mob/living/carbon/proc/has_brain_worms() +/mob/proc/has_brain_worms() for(var/I in contents) if(istype(I,/mob/living/simple_animal/borer)) diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm index 95ebdf2011..289ecf67ac 100644 --- a/code/modules/mob/living/carbon/human/death.dm +++ b/code/modules/mob/living/carbon/human/death.dm @@ -20,7 +20,10 @@ E.droplimb(1,1) flick("gibbed-h", animation) - hgibs(loc, viruses, dna) + if(species) + hgibs(loc, viruses, dna, species.flesh_color, species.blood_color) + else + hgibs(loc, viruses, dna) spawn(15) if(animation) del(animation) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 74cab64505..60014a89e2 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -776,6 +776,14 @@ if(istype(usr,/mob/living/silicon/robot)) var/mob/living/silicon/robot/U = usr R.fields[text("com_[counter]")] = text("Made by [U.name] ([U.modtype] [U.braintype]) on [time2text(world.realtime, "DDD MMM DD hh:mm:ss")], [game_year]
    [t1]") + + if (href_list["lookitem"]) + var/obj/item/I = locate(href_list["lookitem"]) + I.examine() + + if (href_list["lookmob"]) + var/mob/M = locate(href_list["lookmob"]) + M.examine() ..() return @@ -1100,6 +1108,7 @@ return 0 //already bloodied with this blood. Cannot add more. blood_DNA[M.dna.unique_enzymes] = M.dna.b_type src.update_inv_gloves() //handles bloody hands overlays and updating + verbs += /mob/living/carbon/human/proc/bloody_doodle return 1 //we applied blood to the item /mob/living/carbon/human/clean_blood() @@ -1266,3 +1275,58 @@ mob/living/carbon/human/yank_out_object() return 1 else return 0 + +/mob/living/carbon/human/proc/bloody_doodle() + set category = "IC" + set name = "Write in blood" + set desc = "Use blood on your hands to write a short message on the floor or a wall, murder mystery style." + + if (src.stat) + return + + if (usr != src) + return 0 //something is terribly wrong + + if (!bloody_hands) + verbs -= /mob/living/carbon/human/proc/bloody_doodle + + if (src.gloves) + src << "Your [src.gloves] are getting in the way." + return + + var/turf/simulated/T = src.loc + if (!istype(T)) //to prevent doodling out of mechs and lockers + src << "You cannot reach the floor." + return + + var/direction = input(src,"Which way?","Tile selection") as anything in list("Here","North","South","East","West") + if (direction != "Here") + T = get_step(T,text2dir(direction)) + if (!istype(T)) + src << "You cannot doodle there." + return + + var/num_doodles = 0 + for (var/obj/effect/decal/cleanable/blood/writing/W in T) + num_doodles++ + if (num_doodles > 4) + src << "There is no space to write on!" + return + + var/max_length = bloody_hands * 30 //tweeter style + + var/message = stripped_input(src,"Write a message. It cannot be longer than [max_length] characters.","Blood writing", "") + + if (message) + var/used_blood_amount = round(length(message) / 30, 1) + bloody_hands = max(0, bloody_hands - used_blood_amount) //use up some blood + + if (length(message) > max_length) + message += "-" + src << "You ran out of blood to write with!" + + var/obj/effect/decal/cleanable/blood/writing/W = new(T) + W.basecolor = (hand_blood_color) ? hand_blood_color : "#A10808" + W.update_icon() + W.message = message + W.add_fingerprint(src) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 16a4733b27..b1a20b144e 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -134,6 +134,16 @@ emp_act protection += C.armor[type] return protection +/mob/living/carbon/human/proc/check_head_coverage() + + var/list/body_parts = list(head, wear_mask, wear_suit, w_uniform) + for(var/bp in body_parts) + if(!bp) continue + if(bp && istype(bp ,/obj/item/clothing)) + var/obj/item/clothing/C = bp + if(C.body_parts_covered & HEAD) + return 1 + return 0 /mob/living/carbon/human/proc/check_shields(var/damage = 0, var/attack_text = "the attack") if(l_hand && istype(l_hand, /obj/item/weapon))//Current base is the prob(50-d/3) diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 104e60fff8..4611dda0d8 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -56,3 +56,4 @@ var/xylophone = 0 //For the spoooooooky xylophone cooldown var/mob/remoteview_target = null + var/hand_blood_color \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 15b96ec4a8..6063f544d6 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -470,7 +470,9 @@ proc/get_damage_icon_part(damage_state, body_part) standing.icon = ((w_uniform.icon_override) ? w_uniform.icon_override : 'icons/mob/uniform.dmi') if(w_uniform.blood_DNA) - standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "uniformblood") + var/image/bloodsies = image("icon" = 'icons/effects/blood.dmi', "icon_state" = "uniformblood") + bloodsies.color = w_uniform.blood_color + standing.overlays += bloodsies if(w_uniform:hastie) //WE CHECKED THE TYPE ABOVE. THIS REALLY SHOULD BE FINE. var/tie_color = w_uniform:hastie.item_color @@ -510,12 +512,16 @@ proc/get_damage_icon_part(damage_state, body_part) if(!t_state) t_state = gloves.icon_state var/image/standing = image("icon" = ((gloves.icon_override) ? gloves.icon_override : 'icons/mob/hands.dmi'), "icon_state" = "[t_state]") if(gloves.blood_DNA) - standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "bloodyhands") + var/image/bloodsies = image("icon" = 'icons/effects/blood.dmi', "icon_state" = "bloodyhands") + bloodsies.color = gloves.blood_color + standing.overlays += bloodsies gloves.screen_loc = ui_gloves overlays_standing[GLOVES_LAYER] = standing else if(blood_DNA) - overlays_standing[GLOVES_LAYER] = image("icon" = 'icons/effects/blood.dmi', "icon_state" = "bloodyhands") + var/image/bloodsies = image("icon" = 'icons/effects/blood.dmi', "icon_state" = "bloodyhands") + bloodsies.color = hand_blood_color + overlays_standing[GLOVES_LAYER] = bloodsies else overlays_standing[GLOVES_LAYER] = null if(update_icons) update_icons() @@ -542,7 +548,9 @@ proc/get_damage_icon_part(damage_state, body_part) if(shoes) var/image/standing = image("icon" = ((shoes.icon_override) ? shoes.icon_override : 'icons/mob/feet.dmi'), "icon_state" = "[shoes.icon_state]") if(shoes.blood_DNA) - standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "shoeblood") + var/image/bloodsies = image("icon" = 'icons/effects/blood.dmi', "icon_state" = "shoeblood") + bloodsies.color = shoes.blood_color + standing.overlays += bloodsies overlays_standing[SHOES_LAYER] = standing else overlays_standing[SHOES_LAYER] = null @@ -568,7 +576,9 @@ proc/get_damage_icon_part(damage_state, body_part) else standing = image("icon" = ((head.icon_override) ? head.icon_override : 'icons/mob/head.dmi'), "icon_state" = "[head.icon_state]") if(head.blood_DNA) - standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "helmetblood") + var/image/bloodsies = image("icon" = 'icons/effects/blood.dmi', "icon_state" = "helmetblood") + bloodsies.color = head.blood_color + standing.overlays += bloodsies overlays_standing[HEAD_LAYER] = standing else overlays_standing[HEAD_LAYER] = null @@ -597,7 +607,9 @@ proc/get_damage_icon_part(damage_state, body_part) if(wear_suit.blood_DNA) var/obj/item/clothing/suit/S = wear_suit - standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "[S.blood_overlay_type]blood") + var/image/bloodsies = image("icon" = 'icons/effects/blood.dmi', "icon_state" = "[S.blood_overlay_type]blood") + bloodsies.color = wear_suit.blood_color + standing.overlays += bloodsies overlays_standing[SUIT_LAYER] = standing @@ -621,7 +633,9 @@ proc/get_damage_icon_part(damage_state, body_part) wear_mask.screen_loc = ui_mask //TODO var/image/standing = image("icon" = ((wear_mask.icon_override) ? wear_mask.icon_override : 'icons/mob/mask.dmi'), "icon_state" = "[wear_mask.icon_state]") if( !istype(wear_mask, /obj/item/clothing/mask/cigarette) && wear_mask.blood_DNA ) - standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "maskblood") + var/image/bloodsies = image("icon" = 'icons/effects/blood.dmi', "icon_state" = "maskblood") + bloodsies.color = wear_mask.blood_color + standing.overlays += bloodsies overlays_standing[FACEMASK_LAYER] = standing else overlays_standing[FACEMASK_LAYER] = null diff --git a/code/modules/mob/living/carbon/monkey/diona.dm b/code/modules/mob/living/carbon/monkey/diona.dm index 442d33e2ac..3f98e3b694 100644 --- a/code/modules/mob/living/carbon/monkey/diona.dm +++ b/code/modules/mob/living/carbon/monkey/diona.dm @@ -2,6 +2,38 @@ Tiny babby plant critter plus procs. */ +//Helper object for picking dionaea up. +/obj/item/weapon/diona_holder + + name = "diona nymph" + desc = "It's a tiny plant critter." + icon = 'icons/obj/objects.dmi' + icon_state = "nymph" + slot_flags = SLOT_HEAD + origin_tech = "magnets=3;biotech=5" + +/obj/item/weapon/diona_holder/New() + ..() + processing_objects.Add(src) + + +/obj/item/weapon/diona_holder/Del() + processing_objects.Remove(src) + ..() + +/obj/item/weapon/diona_holder/process() + if(!loc) return + + if(!istype(loc,/mob/living)) + for(var/mob/M in contents) + M.loc = get_turf(src) + del(src) + +/obj/item/weapon/diona_holder/attackby(obj/item/weapon/W as obj, mob/user as mob) + for(var/mob/M in src.contents) + M.attackby(W,user) + +//Mob defines. /mob/living/carbon/monkey/diona name = "diona nymph" voice_name = "diona nymph" @@ -10,6 +42,20 @@ var/list/donors = list() var/ready_evolve = 0 +/mob/living/carbon/monkey/diona/attack_hand(mob/living/carbon/human/M as mob) + + //Let people pick the little buggers up. + if(M.a_intent == "help") + var/obj/item/weapon/diona_holder/D = new(loc) + src.loc = D + D.name = loc.name + D.attack_hand(M) + M << "You scoop up [src]." + src << "[M] scoops you up." + return + + ..() + /mob/living/carbon/monkey/diona/New() ..() @@ -64,6 +110,10 @@ set name = "Evolve" set desc = "Grow to a more complex form." + if(!is_alien_whitelisted(src, "Diona") && config.usealienwhitelist) + src << alert("You are currently not whitelisted to play an adult Diona.") + return 0 + if(donors.len < 5) src << "You are not yet ready for your growth..." return @@ -73,8 +123,15 @@ return src.visible_message("\red [src] begins to shift and quiver, and erupts in a shower of shed bark and twigs!","\red You begin to shift and quiver, then erupt in a shower of shed bark and twigs, attaining your adult form!") - var/mob/living/carbon/human/adult = new(loc) + + var/mob/living/carbon/human/adult = new(get_turf(src.loc)) adult.set_species("Diona") + + if(istype(loc,/obj/item/weapon/diona_holder/)) + var/obj/item/weapon/diona_holder/L = loc + src.loc = L.loc + del(L) + for(var/datum/language/L in languages) adult.add_language(L.name) adult.regenerate_icons() diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm index 04c36b230a..8b9f3009d1 100644 --- a/code/modules/mob/living/carbon/monkey/life.dm +++ b/code/modules/mob/living/carbon/monkey/life.dm @@ -13,13 +13,16 @@ set invisibility = 0 set background = 1 if (monkeyizing) return + if (update_muts) + update_muts=0 + domutcheck(src,null,MUTCHK_FORCED) ..() var/datum/gas_mixture/environment // Added to prevent null location errors-- TLE if(loc) environment = loc.return_air() - if (stat != DEAD) //still breathing + if (stat != DEAD && !istype(src,/mob/living/carbon/monkey/diona)) //still breathing //First, resolve location and get a breath if(air_master.current_cycle%4==2) //Only try to take a breath every 4 seconds, unless suffocating diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index e050a30c5b..b0ddd30c73 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -10,28 +10,31 @@ var/obj/item/weapon/card/id/wear_id = null // Fix for station bounced radios -- Skie var/greaterform = "Human" // Used when humanizing a monkey. - var/uni_append = "12C4E2" // Small appearance modifier for different species. + icon_state = "monkey1" + //var/uni_append = "12C4E2" // Small appearance modifier for different species. + var/list/uni_append = list(0x12C,0x4E2) // Same as above for DNA2. + var/update_muts = 1 // Monkey gene must be set at start. /mob/living/carbon/monkey/tajara name = "farwa" voice_name = "farwa" speak_emote = list("mews") icon_state = "tajkey1" - uni_append = "0A0E00" + uni_append = list(0x0A0,0xE00) // 0A0E00 /mob/living/carbon/monkey/skrell name = "neaera" voice_name = "neaera" speak_emote = list("squicks") icon_state = "skrellkey1" - uni_append = "01CC92" + uni_append = list(0x01C,0xC92) // 01CC92 /mob/living/carbon/monkey/unathi name = "stok" voice_name = "stok" speak_emote = list("hisses") icon_state = "stokkey1" - uni_append = "044C5D" + uni_append = list(0x044,0xC5D) // 044C5D /mob/living/carbon/monkey/New() var/datum/reagents/R = new/datum/reagents(1000) @@ -52,13 +55,20 @@ //dna.uni_identity = "00600200A00E0110148FC01300B009" //dna.struc_enzymes = "43359156756131E13763334D1C369012032164D4FE4CD61544B6C03F251B6C60A42821D26BA3B0FD6" dna.unique_enzymes = md5(name) - //////////blah - var/gendervar - if (gender == MALE) - gendervar = add_zero2(num2hex((rand(1,2049)),1), 3) - else - gendervar = add_zero2(num2hex((rand(2051,4094)),1), 3) - dna.uni_identity += "[gendervar][uni_append]" + + // We're a monkey + dna.SetSEState(MONKEYBLOCK, 1) + // Fix gender + dna.SetUIState(DNA_UI_GENDER, gender != MALE, 1) + + // Set the blocks to uni_append, if needed. + if(uni_append.len>0) + for(var/b=1;b<=uni_append.len;b++) + dna.SetUIValue(DNA_UI_LENGTH-(uni_append.len-b),uni_append[b], 1) + dna.UpdateUI() + + update_muts=1 + ..() update_icons() return diff --git a/code/modules/mob/living/carbon/species.dm b/code/modules/mob/living/carbon/species.dm index c5d5351e3f..416d1d9324 100644 --- a/code/modules/mob/living/carbon/species.dm +++ b/code/modules/mob/living/carbon/species.dm @@ -39,6 +39,9 @@ var/list/abilities = list() // For species-derived or admin-given powers + var/blood_color = "#A10808" //Red. + var/flesh_color = "#FFC896" //Pink. + /datum/species/human name = "Human" language = "Sol Common" @@ -70,6 +73,8 @@ flags = WHITELISTED | HAS_LIPS | HAS_UNDERWEAR | HAS_TAIL + flesh_color = "#34AF10" + /datum/species/tajaran name = "Tajaran" icobase = 'icons/mob/human_races/r_tajaran.dmi' @@ -92,6 +97,8 @@ flags = WHITELISTED | HAS_LIPS | HAS_UNDERWEAR | HAS_TAIL + flesh_color = "#AFA59E" + /datum/species/skrell name = "Skrell" icobase = 'icons/mob/human_races/r_skrell.dmi' @@ -101,6 +108,8 @@ flags = WHITELISTED | HAS_LIPS | HAS_UNDERWEAR + flesh_color = "#8CD7A3" + /datum/species/vox name = "Vox" icobase = 'icons/mob/human_races/r_vox.dmi' @@ -119,6 +128,9 @@ flags = NO_SCAN + blood_color = "#2299FC" + flesh_color = "#808D11" + /datum/species/diona name = "Diona" icobase = 'icons/mob/human_races/r_plant.dmi' @@ -140,3 +152,7 @@ heat_level_3 = 4000 flags = WHITELISTED | NO_BREATHE | REQUIRE_LIGHT | NON_GENDERED | NO_SCAN | IS_PLANT | RAD_ABSORB + + blood_color = "#004400" + flesh_color = "#907E4A" + diff --git a/code/modules/mob/living/silicon/pai/hud.dm b/code/modules/mob/living/silicon/pai/hud.dm index 74d5ec8f87..07df7cd9ea 100644 --- a/code/modules/mob/living/silicon/pai/hud.dm +++ b/code/modules/mob/living/silicon/pai/hud.dm @@ -80,6 +80,12 @@ holder.icon_state = "hudxeno" else if(foundVirus) holder.icon_state = "hudill" + else if(patient.has_brain_worms()) + var/mob/living/simple_animal/borer/B = patient.has_brain_worms() + if(B.controlling) + holder.icon_state = "hudbrainworm" + else + holder.icon_state = "hudhealthy" else holder.icon_state = "hudhealthy" client.images += holder diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index ab4080ed50..df259c2197 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -169,7 +169,7 @@ New() ..() - src.modules += new /obj/item/weapon/reagent_containers/food/drinks/beer(src) + src.modules += new /obj/item/weapon/reagent_containers/food/drinks/cans/beer(src) src.modules += new /obj/item/weapon/reagent_containers/food/condiment/enzyme(src) src.modules += new /obj/item/weapon/pen/robopen(src) @@ -185,7 +185,7 @@ src.modules += new /obj/item/weapon/tray/robotray(src) src.modules += new /obj/item/weapon/reagent_containers/food/drinks/shaker(src) - src.emag = new /obj/item/weapon/reagent_containers/food/drinks/beer(src) + src.emag = new /obj/item/weapon/reagent_containers/food/drinks/cans/beer(src) var/datum/reagents/R = new/datum/reagents(50) src.emag.reagents = R diff --git a/code/modules/mob/living/simple_animal/borer.dm b/code/modules/mob/living/simple_animal/borer.dm index d3166dd974..d3e0ea9518 100644 --- a/code/modules/mob/living/simple_animal/borer.dm +++ b/code/modules/mob/living/simple_animal/borer.dm @@ -16,6 +16,12 @@ src << "You whisper silently, \"[message]\"" B.host << "The captive mind of [src] whispers, \"[message]\"" + for (var/mob/M in player_list) + if (istype(M, /mob/new_player)) + continue + else if(M.stat == 2 && M.client.prefs.toggles & CHAT_GHOSTEARS) + M << "The captive mind of [src] whispers, \"[message]\"" + /mob/living/captive_brain/emote(var/message) return @@ -40,28 +46,53 @@ wander = 0 pass_flags = PASSTABLE + var/used_dominate var/chemicals = 10 // Chemicals used for reproduction and spitting neurotoxin. var/mob/living/carbon/human/host // Human host for the brain worm. var/truename // Name used for brainworm-speak. var/mob/living/captive_brain/host_brain // Used for swapping control of the body back and forth. var/controlling // Used in human death check. + var/docile = 0 // Sugar can stop borers from acting. /mob/living/simple_animal/borer/Life() ..() + + if(host) + if(!stat && !host.stat) + + if(host.reagents.has_reagent("sugar")) + if(!docile) + if(controlling) + host << "\blue You feel the soporific flow of sugar in your host's blood, lulling you into docility." + else + src << "\blue You feel the soporific flow of sugar in your host's blood, lulling you into docility." + docile = 1 + else + if(docile) + if(controlling) + host << "\blue You shake off your lethargy as the sugar leaves your host's blood." + else + src << "\blue You shake off your lethargy as the sugar leaves your host's blood." + docile = 0 + if(chemicals < 250) chemicals++ if(controlling) + + if(docile) + host << "\blue You are feeling far too docile to continue controlling your host..." + host.release_control() + return + if(prob(5)) host.adjustBrainLoss(rand(1,2)) if(prob(host.brainloss/20)) host.say("*[pick(list("blink","blink_r","choke","aflap","drool","twitch","twitch_s","gasp"))]") - //if(host.brainloss > 100) - /mob/living/simple_animal/borer/New() ..() truename = "[pick("Primary","Secondary","Tertiary","Quaternary")] [rand(1000,9999)]" @@ -104,6 +135,13 @@ src << "You drop words into [host]'s mind: \"[message]\"" host << "Your own thoughts speak: \"[message]\"" + for (var/mob/M in player_list) + if (istype(M, /mob/new_player)) + continue + else if(M.stat == 2 && M.client.prefs.toggles & CHAT_GHOSTEARS) + M << "[src.truename] whispers to [host], \"[message]\"" + + /mob/living/simple_animal/borer/Stat() ..() statpanel("Status") @@ -127,6 +165,46 @@ if(M.mind && (istype(M, /mob/living/simple_animal/borer) || istype(M, /mob/dead/observer))) M << "Cortical link, [truename]: [copytext(message, 2)]" +/mob/living/simple_animal/borer/verb/dominate_victim() + set category = "Alien" + set name = "Dominate Victim" + set desc = "Freeze the limbs of a potential host with supernatural fear." + + if(world.time - used_dominate < 300) + src << "You cannot use that ability again so soon." + return + + if(host) + src << "You cannot do that from within a host body." + return + + if(src.stat) + src << "You cannot do that in your current state." + return + + var/list/choices = list() + for(var/mob/living/carbon/C in view(3,src)) + if(C.stat != 2) + choices += C + + if(world.time - used_dominate < 300) + src << "You cannot use that ability again so soon." + return + + var/mob/living/carbon/M = input(src,"Who do you wish to dominate?") in null|choices + + if(!M || !src) return + + if(M.has_brain_worms()) + src << "You cannot infest someone who is already infested!" + return + + src << "\red You focus your psychic lance on [M] and freeze their limbs with a wave of terrible dread." + M << "\red You feel a creeping, horrible sense of dread come over you, freezing your limbs and setting your heart racing." + M.Weaken(3) + + used_dominate = world.time + /mob/living/simple_animal/borer/verb/bond_brain() set category = "Alien" set name = "Assume Control" @@ -140,12 +218,20 @@ src << "You cannot do that in your current state." return + if(host.internal_organs_by_name["brain"]) //this should only run in admin-weirdness situations, but it's here non the less - RR + src << "There is no brain here for us to command!" + return + + if(docile) + src << "\blue You are feeling far too docile to do that." + return + src << "You begin delicately adjusting your connection to the host brain..." spawn(300+(host.brainloss*5)) - if(!host || !src || controlling) return - + if(!host || !src || controlling) + return else src << "\red You plunge your probosci deep into the cortex of the host brain, interfacing directly with their nervous system." host << "\red You feel a strange shifting sensation behind your eyes as an alien consciousness displaces yours." @@ -170,10 +256,14 @@ if(stat) src << "You cannot secrete chemicals in your current state." + if(docile) + src << "\blue You are feeling far too docile to do that." + return + if(chemicals < 50) src << "You don't have enough chemicals!" - var/chem = input("Select a chemical to secrete.", "Chemicals") in list("bicaridine","tramadol","hyperzine") + var/chem = input("Select a chemical to secrete.", "Chemicals") in list("bicaridine","tramadol","hyperzine","alkysine") if(chemicals < 50 || !host || controlling || !src || stat) //Sanity check. return @@ -194,6 +284,9 @@ if(stat) src << "You cannot leave your host in your current state." + if(docile) + src << "\blue You are feeling far too docile to do that." + return if(!host || !src) return @@ -262,17 +355,25 @@ mob/living/simple_animal/borer/proc/detatch() var/list/choices = list() for(var/mob/living/carbon/C in view(1,src)) - if(C.stat != 2) + if(C.stat != 2 && src.Adjacent(C)) choices += C var/mob/living/carbon/M = input(src,"Who do you wish to infest?") in null|choices if(!M || !src) return + if(!(src.Adjacent(M))) return + if(M.has_brain_worms()) src << "You cannot infest someone who is already infested!" return + if(istype(M,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = M + if(H.check_head_coverage()) + src << "You cannot get through that host's protective gear." + return + M << "Something slimy begins probing at the opening of your ear canal..." src << "You slither up [M] and begin probing at their ear canal..." diff --git a/code/modules/mob/living/simple_animal/hostile/hivebot.dm b/code/modules/mob/living/simple_animal/hostile/hivebot.dm index 423486499c..cdefaa644e 100644 --- a/code/modules/mob/living/simple_animal/hostile/hivebot.dm +++ b/code/modules/mob/living/simple_animal/hostile/hivebot.dm @@ -47,7 +47,7 @@ /mob/living/simple_animal/hostile/hivebot/Die() ..() visible_message("[src] blows apart!") - new /obj/effect/decal/cleanable/robot_debris(src.loc) + new /obj/effect/decal/cleanable/blood/gibs/robot(src.loc) var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread s.set_up(3, 1, src) s.start() diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index 2452db5abc..ab6d621487 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -217,3 +217,5 @@ var/immune_to_ssd = 0 var/turf/listed_turf = null //the current turf being examined in the stat panel + + var/list/active_genes=list() diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index ff32dfc593..230eca4cdf 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -61,6 +61,10 @@ name = "Cut Hair" icon_state = "hair_c" + flair + name = "Flaired Hair" + icon_state = "hair_flair" + long name = "Shoulder-length Hair" icon_state = "hair_b" @@ -420,7 +424,7 @@ una_frills_short name = "Short Unathi Frills" - icon_state = "soghun_shortfrill" + icon_state = "soghun_shortfrills" species_allowed = list("Unathi") do_colouration = 0 diff --git a/code/modules/nano/nanoexternal.dm b/code/modules/nano/nanoexternal.dm index fed8cb4c4f..2331debd9b 100644 --- a/code/modules/nano/nanoexternal.dm +++ b/code/modules/nano/nanoexternal.dm @@ -13,7 +13,7 @@ var/datum/nanoui/ui = locate(uiref) - if (ui) + if (istype(ui)) ui.close() if(ui.ref) diff --git a/code/modules/nano/nanomanager.dm b/code/modules/nano/nanomanager.dm index 7a09e7ffd3..2e967d6fae 100644 --- a/code/modules/nano/nanomanager.dm +++ b/code/modules/nano/nanomanager.dm @@ -1,8 +1,9 @@ // This is the window/UI manager for Nano UI // There should only ever be one (global) instance of nanomanger /datum/nanomanager - // the list of current open /nanoui UIs + // a list of current open /nanoui UIs, grouped by src_object and ui_key var/open_uis[0] + // a list of current open /nanoui UIs, not grouped, for use in processing var/list/processing_uis = list() /** @@ -38,7 +39,7 @@ /** * Update all /nanoui uis attached to src_object * - * @param src_object /obj|/mob The obj or mob which the uis belong to + * @param src_object /obj|/mob The obj or mob which the uis are attached to * * @return int The number of uis updated */ @@ -54,6 +55,48 @@ ui.process(1) update_count++ return update_count + + /** + * Update /nanoui uis belonging to user + * + * @param user /mob The mob who owns the uis + * @param src_object /obj|/mob If src_object is provided, only update uis which are attached to src_object (optional) + * @param ui_key string If ui_key is provided, only update uis with a matching ui_key (optional) + * + * @return int The number of uis updated + */ +/datum/nanomanager/proc/update_user_uis(var/mob/user, src_object = null, ui_key = null) + if (isnull(user.open_uis) || !istype(user.open_uis, /list) || open_uis.len == 0) + return 0 // has no open uis + + var/update_count = 0 + for (var/datum/nanoui/ui in user.open_uis) + if ((isnull(src_object) || !isnull(src_object) && ui.src_object == src_object) && (isnull(ui_key) || !isnull(ui_key) && ui.ui_key == ui_key)) + ui.process(1) + update_count++ + + return update_count + + /** + * Close /nanoui uis belonging to user + * + * @param user /mob The mob who owns the uis + * @param src_object /obj|/mob If src_object is provided, only close uis which are attached to src_object (optional) + * @param ui_key string If ui_key is provided, only close uis with a matching ui_key (optional) + * + * @return int The number of uis closed + */ +/datum/nanomanager/proc/close_user_uis(var/mob/user, src_object = null, ui_key = null) + if (isnull(user.open_uis) || !istype(user.open_uis, /list) || open_uis.len == 0) + return 0 // has no open uis + + var/close_count = 0 + for (var/datum/nanoui/ui in user.open_uis) + if ((isnull(src_object) || !isnull(src_object) && ui.src_object == src_object) && (isnull(ui_key) || !isnull(ui_key) && ui.ui_key == ui_key)) + ui.close() + close_count++ + + return close_count /** * Add a /nanoui ui to the list of open uis @@ -106,11 +149,29 @@ // /datum/nanomanager/proc/user_logout(var/mob/user) - if (isnull(user.open_uis) || !istype(user.open_uis, /list) || open_uis.len == 0) + return close_user_uis(user) + + /** + * This is called when a player transfers from one mob to another + * Transfers all open UIs to the new mob + * + * @param oldMob /mob The user's old mob + * @param newMob /mob The user's new mob + * + * @return nothing + */ +/datum/nanomanager/proc/user_transferred(var/mob/oldMob, var/mob/newMob) + if (isnull(oldMob.open_uis) || !istype(oldMob.open_uis, /list) || open_uis.len == 0) return 0 // has no open uis - for (var/datum/nanoui/ui in user.open_uis) - ui.close(); + if (isnull(newMob.open_uis) || !istype(newMob.open_uis, /list)) + newMob.open_uis = list() + for (var/datum/nanoui/ui in oldMob.open_uis) + ui.user = newMob + newMob.open_uis.Add(ui) + oldMob.open_uis.Cut() + + return 1 // success diff --git a/code/modules/nano/nanoui.dm b/code/modules/nano/nanoui.dm index 474e955f57..6557d86e0f 100644 --- a/code/modules/nano/nanoui.dm +++ b/code/modules/nano/nanoui.dm @@ -135,11 +135,13 @@ nanoui is used to open and update nano browser uis if (dist > 4) close() return - + if ((allowed_user_stat > -1) && (user.stat > allowed_user_stat)) set_status(STATUS_DISABLED, push_update) // no updates, completely disabled (red visibility) else if (user.restrained() || user.lying) set_status(STATUS_UPDATE, push_update) // update only (orange visibility) + else if (istype(src_object, /obj/item/device/uplink/hidden)) // You know what if they have the uplink open let them use the UI + set_status(STATUS_INTERACTIVE, push_update) // Will build in distance checks on the topics for sanity. else if (!(src_object in view(4, user))) // If the src object is not in visable, set status to 0 set_status(STATUS_DISABLED, push_update) // interactive (green visibility) else if (dist <= 1) @@ -349,6 +351,7 @@ nanoui is used to open and update nano browser uis window_size = "size=[width]x[height];" update_status(0) user << browse(get_html(), "window=[window_id];[window_size][window_options]") + winset(user, "mapwindow.map", "focus=true") // return keyboard focus to map on_close_winset() //onclose(user, window_id) nanomanager.ui_opened(src) @@ -402,7 +405,7 @@ nanoui is used to open and update nano browser uis if (status != STATUS_INTERACTIVE || user != usr) // If UI is not interactive or usr calling Topic is not the UI user return - if (src_object.Topic(href, href_list)) + if (src_object && src_object.Topic(href, href_list)) nanomanager.update_uis(src_object) // update all UIs attached to src_object /** diff --git a/code/modules/organs/blood.dm b/code/modules/organs/blood.dm index a0a88e2120..53b26cc0b9 100644 --- a/code/modules/organs/blood.dm +++ b/code/modules/organs/blood.dm @@ -145,6 +145,9 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 this.icon_state = pick(iconL) this.blood_DNA = list() this.blood_DNA[dna.unique_enzymes] = dna.b_type + if (species) this.basecolor = species.blood_color + this.update_icon() + else for(var/obj/effect/decal/cleanable/blood/drip/G in nums) del G diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 53633d5db0..abd5f1baf6 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -240,7 +240,7 @@ This function completely restores a damaged organ to perfect condition. //Possibly trigger an internal wound, too. var/local_damage = brute_dam + burn_dam + damage - if(damage > 10 && type != BURN && local_damage > 20 && prob(damage) && !(status & ORGAN_ROBOT)) + if(damage > 15 && type != BURN && local_damage > 30 && prob(damage) && !(status & ORGAN_ROBOT)) var/datum/wound/internal_bleeding/I = new (15) wounds += I owner.custom_pain("You feel something rip in your [display_name]!", 1) diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index 9b0a931a83..2695556c71 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -152,12 +152,12 @@ del(src) else if(toner > 0) - new /obj/effect/decal/cleanable/oil(get_turf(src)) + new /obj/effect/decal/cleanable/blood/oil(get_turf(src)) toner = 0 else if(prob(50)) if(toner > 0) - new /obj/effect/decal/cleanable/oil(get_turf(src)) + new /obj/effect/decal/cleanable/blood/oil(get_turf(src)) toner = 0 return @@ -166,7 +166,7 @@ del(src) else if(toner > 0) - new /obj/effect/decal/cleanable/oil(get_turf(src)) + new /obj/effect/decal/cleanable/blood/oil(get_turf(src)) toner = 0 return diff --git a/code/modules/projectiles/ammunition/bullets.dm b/code/modules/projectiles/ammunition/bullets.dm index a2b11b7ffc..0063d0b2a9 100644 --- a/code/modules/projectiles/ammunition/bullets.dm +++ b/code/modules/projectiles/ammunition/bullets.dm @@ -98,3 +98,10 @@ desc = "A 7.62 bullet casing." caliber = "a762" projectile_type = "/obj/item/projectile/bullet/a762" + +/obj/item/ammo_casing/rocket + name = "rocket shell" + desc = "A high explosive designed to be fired from a launcher." + icon_state = "rocketshell" + projectile_type = "/obj/item/missile" + caliber = "rocket" diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index bcc619851c..dc142fc00b 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -193,4 +193,49 @@ obj/item/weapon/gun/energy/staff/focus charge_cost = 100 user << "\red The [src.name] will now strike only a single person." projectile_type = "/obj/item/projectile/forcebolt" - */ \ No newline at end of file + */ + +/obj/item/weapon/gun/energy/toxgun + name = "plasma pistol" + desc = "A specialized firearm designed to fire lethal bolts of toxins." + icon_state = "toxgun" + fire_sound = 'sound/effects/stealthoff.ogg' + w_class = 3.0 + origin_tech = "combat=5;plasmatech=4" + projectile_type = "/obj/item/projectile/energy/plasma" + +/obj/item/weapon/gun/energy/sniperrifle + name = "L.W.A.P. Sniper Rifle" + desc = "A rifle constructed of lightweight materials, fitted with a SMART aiming-system scope." + icon = 'icons/obj/gun.dmi' + icon_state = "sniper" + fire_sound = 'sound/weapons/marauder.ogg' + origin_tech = "combat=6;materials=5;powerstorage=4" + projectile_type = "/obj/item/projectile/beam/sniper" + slot_flags = SLOT_BACK + charge_cost = 250 + fire_delay = 35 + w_class = 4.0 + + var/zoom = 0 + +/obj/item/weapon/gun/energy/sniperrifle/dropped(mob/user) + user.client.view = world.view + zoom = 0 + +/obj/item/weapon/gun/energy/sniperrifle/verb/zoom() + set category = "Special Verbs" + set name = "Zoom" + set popup_menu = 0 + if(usr.stat || !(istype(usr,/mob/living/carbon/human))) + usr << "No." + return + + src.zoom = !src.zoom + usr << ("Zoom mode [zoom?"en":"dis"]abled.") + if(zoom) + usr.client.view = 12 + usr << sound('sound/mecha/imag_enh.ogg',volume=50) + else + usr.client.view = world.view//world.view - default mob view size + return \ No newline at end of file diff --git a/code/modules/projectiles/guns/projectile/rocket.dm b/code/modules/projectiles/guns/projectile/rocket.dm new file mode 100644 index 0000000000..a1575b937c --- /dev/null +++ b/code/modules/projectiles/guns/projectile/rocket.dm @@ -0,0 +1,53 @@ +/obj/item/weapon/gun/rocketlauncher + var/projectile + name = "rocket launcher" + desc = "MAGGOT." + icon_state = "rocket" + item_state = "rocket" + w_class = 4.0 + throw_speed = 2 + throw_range = 10 + force = 5.0 + flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY + slot_flags = 0 + origin_tech = "combat=8;materials=5" + projectile = /obj/item/missile + var/missile_speed = 2 + var/missile_range = 30 + var/max_rockets = 1 + var/list/rockets = new/list() + +/obj/item/weapon/gun/rocketlauncher/examine() + set src in view() + ..() + if (!(usr in view(2)) && usr!=src.loc) return + usr << "\blue [rockets.len] / [max_rockets] rockets." + +/obj/item/weapon/gun/rocketlauncher/attackby(obj/item/I as obj, mob/user as mob) + if(istype(I, /obj/item/ammo_casing/rocket)) + if(rockets.len < max_rockets) + user.drop_item() + I.loc = src + rockets += I + user << "\blue You put the rocket in [src]." + user << "\blue [rockets.len] / [max_rockets] rockets." + else + usr << "\red [src] cannot hold more rockets." + +/obj/item/weapon/gun/rocketlauncher/can_fire() + return rockets.len + +/obj/item/weapon/gun/rocketlauncher/Fire(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, params, reflex = 0) + if(rockets.len) + var/obj/item/ammo_casing/rocket/I = rockets[1] + var/obj/item/missile/M = new projectile(user.loc) + playsound(user.loc, 'sound/effects/bang.ogg', 50, 1) + M.primed = 1 + M.throw_at(target, missile_range, missile_speed) + message_admins("[key_name_admin(user)] fired a rocket from a rocket launcher ([src.name]).") + log_game("[key_name_admin(user)] used a rocket launcher ([src.name]).") + rockets -= I + del(I) + return + else + usr << "\red [src] is empty." \ No newline at end of file diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index 3024ea1aa4..f9d2ea73f1 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -160,4 +160,12 @@ var/list/beam_master = list() var/mob/living/carbon/human/M = target if((istype(M.wear_suit, /obj/item/clothing/suit/bluetag))||(istype(M.wear_suit, /obj/item/clothing/suit/redtag))) M.Weaken(5) - return 1 \ No newline at end of file + return 1 + +/obj/item/projectile/beam/sniper + name = "sniper beam" + icon_state = "xray" + damage = 60 + stun = 5 + weaken = 5 + stutter = 5 \ No newline at end of file diff --git a/code/modules/projectiles/projectile/change.dm b/code/modules/projectiles/projectile/change.dm index 31c7389fef..9f5036dea1 100644 --- a/code/modules/projectiles/projectile/change.dm +++ b/code/modules/projectiles/projectile/change.dm @@ -13,6 +13,8 @@ /obj/item/projectile/change/proc/wabbajack (mob/M as mob in living_mob_list) if(istype(M, /mob/living) && M.stat != DEAD) if(M.monkeyizing) return + if(M.has_brain_worms()) return //Borer stuff - RR + M.monkeyizing = 1 M.canmove = 0 M.icon = null diff --git a/code/modules/projectiles/projectile/energy.dm b/code/modules/projectiles/projectile/energy.dm index b8789eca59..6f719dafc9 100644 --- a/code/modules/projectiles/projectile/energy.dm +++ b/code/modules/projectiles/projectile/energy.dm @@ -59,5 +59,10 @@ damage_type = TOX weaken = 5 - +/obj/item/projectile/energy/plasma + name = "plasma bolt" + icon_state = "energy" + damage = 20 + damage_type = TOX + irradiate = 20 diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index 80672b358e..d6ba7a13ad 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -153,7 +153,7 @@ datum newVirus.holder = blood_prop else if(istype(self.data["donor"], /mob/living/carbon/alien)) - var/obj/effect/decal/cleanable/xenoblood/blood_prop = locate() in T + var/obj/effect/decal/cleanable/blood/xeno/blood_prop = locate() in T if(!blood_prop) blood_prop = new(T) blood_prop.blood_DNA["UNKNOWN DNA STRUCTURE"] = "X*" diff --git a/code/modules/reagents/reagent_containers/food/cans.dm b/code/modules/reagents/reagent_containers/food/cans.dm new file mode 100644 index 0000000000..2f997295b1 --- /dev/null +++ b/code/modules/reagents/reagent_containers/food/cans.dm @@ -0,0 +1,266 @@ +/obj/item/weapon/reagent_containers/food/drinks/cans + var canopened = 0 + + attack_self(mob/user as mob) + if (canopened == 0) + playsound(src.loc,'sound/effects/canopen.ogg', rand(10,50), 1) + user << "You open the drink with an audible pop!" + canopened = 1 + else + return + + attack(mob/M as mob, mob/user as mob, def_zone) + if (canopened == 0) + user << " You need to open the drink!" + return + var/datum/reagents/R = src.reagents + var/fillevel = gulp_size + + if(!R.total_volume || !R) + user << "\red None of [src] left, oh no!" + return 0 + + if(M == user) + M << "\blue You swallow a gulp of [src]." + if(reagents.total_volume) + reagents.reaction(M, INGEST) + spawn(5) + reagents.trans_to(M, gulp_size) + + playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1) + return 1 + else if( istype(M, /mob/living/carbon/human) ) + + for(var/mob/O in viewers(world.view, user)) + O.show_message("\red [user] attempts to feed [M] [src].", 1) + if(!do_mob(user, M)) return + for(var/mob/O in viewers(world.view, user)) + O.show_message("\red [user] feeds [M] [src].", 1) + + M.attack_log += text("\[[time_stamp()]\] Has been fed [src.name] by [user.name] ([user.ckey]) Reagents: [reagentlist(src)]") + user.attack_log += text("\[[time_stamp()]\] Fed [M.name] by [M.name] ([M.ckey]) Reagents: [reagentlist(src)]") + log_attack("[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] Reagents: [reagentlist(src)] (INTENT: [uppertext(user.a_intent)]) (JMP)") + + if(reagents.total_volume) + reagents.reaction(M, INGEST) + spawn(5) + reagents.trans_to(M, gulp_size) + + if(isrobot(user)) //Cyborg modules that include drinks automatically refill themselves, but drain the borg's cell + var/mob/living/silicon/robot/bro = user + bro.cell.use(30) + var/refill = R.get_master_reagent_id() + spawn(600) + R.add_reagent(refill, fillevel) + + playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1) + return 1 + + return 0 + + + afterattack(obj/target, mob/user, proximity) + if(!proximity) return + + if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us. + + if(!target.reagents.total_volume) + user << "\red [target] is empty." + return + + if(reagents.total_volume >= reagents.maximum_volume) + user << "\red [src] is full." + return + + var/trans = target.reagents.trans_to(src, target:amount_per_transfer_from_this) + user << "\blue You fill [src] with [trans] units of the contents of [target]." + + else if(target.is_open_container()) //Something like a glass. Player probably wants to transfer TO it. + if(!reagents.total_volume) + user << "\red [src] is empty." + return + + if(target.reagents.total_volume >= target.reagents.maximum_volume) + user << "\red [target] is full." + return + + + + var/datum/reagent/refill + var/datum/reagent/refillName + if(isrobot(user)) + refill = reagents.get_master_reagent_id() + refillName = reagents.get_master_reagent_name() + + var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this) + user << "\blue You transfer [trans] units of the solution to [target]." + + if(isrobot(user)) //Cyborg modules that include drinks automatically refill themselves, but drain the borg's cell + var/mob/living/silicon/robot/bro = user + var/chargeAmount = max(30,4*trans) + bro.cell.use(chargeAmount) + user << "Now synthesizing [trans] units of [refillName]..." + + + spawn(300) + reagents.add_reagent(refill, trans) + user << "Cyborg [src] refilled." + + return + +/* examine() + set src in view() + ..() + if (!(usr in range(0)) && usr!=src.loc) return + if(!reagents || reagents.total_volume==0) + usr << "\blue \The [src] is empty!" + else if (reagents.total_volume<=src.volume/4) + usr << "\blue \The [src] is almost empty!" + else if (reagents.total_volume<=src.volume*0.66) + usr << "\blue \The [src] is half full!" + else if (reagents.total_volume<=src.volume*0.90) + usr << "\blue \The [src] is almost full!" + else + usr << "\blue \The [src] is full!"*/ + + +//DRINKS + +/obj/item/weapon/reagent_containers/food/drinks/cans/cola + name = "Space Cola" + desc = "Cola. in space." + icon_state = "cola" + New() + ..() + reagents.add_reagent("cola", 30) + src.pixel_x = rand(-10.0, 10) + src.pixel_y = rand(-10.0, 10) + +/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle + name = "Bottled Water" + desc = "Introduced to the vending machines on health nut protest, taste fresh, pure glacial* water! *Note: Might be tapwater." + icon_state = "waterbottle" + New() + ..() + reagents.add_reagent("water", 30) + src.pixel_x = rand(-10.0, 10) + src.pixel_y = rand(-10.0, 10) + +/obj/item/weapon/reagent_containers/food/drinks/cans/beer + name = "Space Beer" + desc = "Beer. In space." + icon_state = "beer" + New() + ..() + reagents.add_reagent("beer", 30) + src.pixel_x = rand(-10.0, 10) + src.pixel_y = rand(-10.0, 10) + +/obj/item/weapon/reagent_containers/food/drinks/cans/ale + name = "Magm-Ale" + desc = "A true dorf's drink of choice." + icon_state = "alebottle" + item_state = "beer" + New() + ..() + reagents.add_reagent("ale", 30) + src.pixel_x = rand(-10.0, 10) + src.pixel_y = rand(-10.0, 10) + + +/obj/item/weapon/reagent_containers/food/drinks/cans/space_mountain_wind + name = "Space Mountain Wind" + desc = "Blows right through you like a space wind." + icon_state = "space_mountain_wind" + New() + ..() + reagents.add_reagent("spacemountainwind", 30) + src.pixel_x = rand(-10.0, 10) + src.pixel_y = rand(-10.0, 10) + +/obj/item/weapon/reagent_containers/food/drinks/cans/thirteenloko + name = "Thirteen Loko" + desc = "The CMO has advised crew members that consumption of Thirteen Loko may result in seizures, blindness, drunkeness, or even death. Please Drink Responsably." + icon_state = "thirteen_loko" + New() + ..() + reagents.add_reagent("thirteenloko", 30) + src.pixel_x = rand(-10.0, 10) + src.pixel_y = rand(-10.0, 10) + +/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb + name = "Dr. Gibb" + desc = "A delicious mixture of 42 different flavors." + icon_state = "dr_gibb" + New() + ..() + reagents.add_reagent("dr_gibb", 30) + src.pixel_x = rand(-10.0, 10) + src.pixel_y = rand(-10.0, 10) + +/obj/item/weapon/reagent_containers/food/drinks/cans/starkist + name = "Star-kist" + desc = "The taste of a star in liquid form. And, a bit of tuna...?" + icon_state = "starkist" + New() + ..() + reagents.add_reagent("cola", 15) + reagents.add_reagent("orangejuice", 15) + src.pixel_x = rand(-10.0, 10) + src.pixel_y = rand(-10.0, 10) + +/obj/item/weapon/reagent_containers/food/drinks/cans/space_up + name = "Space-Up" + desc = "Tastes like a hull breach in your mouth." + icon_state = "space-up" + New() + ..() + reagents.add_reagent("space_up", 30) + src.pixel_x = rand(-10.0, 10) + src.pixel_y = rand(-10.0, 10) + +/obj/item/weapon/reagent_containers/food/drinks/cans/lemon_lime + name = "Lemon-Lime" + desc = "You wanted ORANGE. It gave you Lemon Lime." + icon_state = "lemon-lime" + New() + ..() + reagents.add_reagent("lemon_lime", 30) + src.pixel_x = rand(-10.0, 10) + src.pixel_y = rand(-10.0, 10) + +/obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea + name = "Vrisk Serket Iced Tea" + desc = "That sweet, refreshing southern earthy flavor. That's where it's from, right? South Earth? Whatever!!!!!!!!" + icon_state = "ice_tea_can" + New() + ..() + reagents.add_reagent("icetea", 30) + src.pixel_x = rand(-10.0, 10) + src.pixel_y = rand(-10.0, 10) + +/obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice + name = "Grapel Juice" + desc = "500 pages of rules of how to appropriately enter into a combat with this juice!" + icon_state = "purple_can" + New() + ..() + reagents.add_reagent("grapejuice", 30) + src.pixel_x = rand(-10.0, 10) + src.pixel_y = rand(-10.0, 10) + +/obj/item/weapon/reagent_containers/food/drinks/cans/tonic + name = "T-Borg's Tonic Water" + desc = "Quinine tastes funny, but at least it'll keep that Space Malaria away." + icon_state = "tonic" + New() + ..() + reagents.add_reagent("tonic", 50) + +/obj/item/weapon/reagent_containers/food/drinks/cans/sodawater + name = "Soda Water" + desc = "A can of soda water. Why not make a scotch and soda?" + icon_state = "sodawater" + New() + ..() + reagents.add_reagent("sodawater", 50) \ No newline at end of file diff --git a/code/modules/reagents/reagent_containers/food/drinks.dm b/code/modules/reagents/reagent_containers/food/drinks.dm index 86bd97d7ea..d6eb52bd04 100644 --- a/code/modules/reagents/reagent_containers/food/drinks.dm +++ b/code/modules/reagents/reagent_containers/food/drinks.dm @@ -242,128 +242,6 @@ src.pixel_x = rand(-10.0, 10) src.pixel_y = rand(-10.0, 10) -/obj/item/weapon/reagent_containers/food/drinks/cola - name = "Space Cola" - desc = "Cola. in space." - icon_state = "cola" - New() - ..() - reagents.add_reagent("cola", 30) - src.pixel_x = rand(-10.0, 10) - src.pixel_y = rand(-10.0, 10) - -/obj/item/weapon/reagent_containers/food/drinks/waterbottle - name = "Bottled Water" - desc = "Introduced to the vending machines on health nut protest, taste fresh, pure glacial* water! *Note: Might be tapwater." - icon_state = "waterbottle" - New() - ..() - reagents.add_reagent("water", 30) - src.pixel_x = rand(-10.0, 10) - src.pixel_y = rand(-10.0, 10) - -/obj/item/weapon/reagent_containers/food/drinks/beer - name = "Space Beer" - desc = "Beer. In space." - icon_state = "beer" - New() - ..() - reagents.add_reagent("beer", 30) - src.pixel_x = rand(-10.0, 10) - src.pixel_y = rand(-10.0, 10) - -/obj/item/weapon/reagent_containers/food/drinks/ale - name = "Magm-Ale" - desc = "A true dorf's drink of choice." - icon_state = "alebottle" - item_state = "beer" - New() - ..() - reagents.add_reagent("ale", 30) - src.pixel_x = rand(-10.0, 10) - src.pixel_y = rand(-10.0, 10) - - -/obj/item/weapon/reagent_containers/food/drinks/space_mountain_wind - name = "Space Mountain Wind" - desc = "Blows right through you like a space wind." - icon_state = "space_mountain_wind" - New() - ..() - reagents.add_reagent("spacemountainwind", 30) - src.pixel_x = rand(-10.0, 10) - src.pixel_y = rand(-10.0, 10) - -/obj/item/weapon/reagent_containers/food/drinks/thirteenloko - name = "Thirteen Loko" - desc = "The CMO has advised crew members that consumption of Thirteen Loko may result in seizures, blindness, drunkeness, or even death. Please Drink Responsably." - icon_state = "thirteen_loko" - New() - ..() - reagents.add_reagent("thirteenloko", 30) - src.pixel_x = rand(-10.0, 10) - src.pixel_y = rand(-10.0, 10) - -/obj/item/weapon/reagent_containers/food/drinks/dr_gibb - name = "Dr. Gibb" - desc = "A delicious mixture of 42 different flavors." - icon_state = "dr_gibb" - New() - ..() - reagents.add_reagent("dr_gibb", 30) - src.pixel_x = rand(-10.0, 10) - src.pixel_y = rand(-10.0, 10) - -/obj/item/weapon/reagent_containers/food/drinks/starkist - name = "Star-kist" - desc = "The taste of a star in liquid form. And, a bit of tuna...?" - icon_state = "starkist" - New() - ..() - reagents.add_reagent("cola", 15) - reagents.add_reagent("orangejuice", 15) - src.pixel_x = rand(-10.0, 10) - src.pixel_y = rand(-10.0, 10) - -/obj/item/weapon/reagent_containers/food/drinks/space_up - name = "Space-Up" - desc = "Tastes like a hull breach in your mouth." - icon_state = "space-up" - New() - ..() - reagents.add_reagent("space_up", 30) - src.pixel_x = rand(-10.0, 10) - src.pixel_y = rand(-10.0, 10) - -/obj/item/weapon/reagent_containers/food/drinks/lemon_lime - name = "Lemon-Lime" - desc = "You wanted ORANGE. It gave you Lemon Lime." - icon_state = "lemon-lime" - New() - ..() - reagents.add_reagent("lemon_lime", 30) - src.pixel_x = rand(-10.0, 10) - src.pixel_y = rand(-10.0, 10) - -/obj/item/weapon/reagent_containers/food/drinks/iced_tea - name = "Vrisk Serket Iced Tea" - desc = "That sweet, refreshing southern earthy flavor. That's where it's from, right? South Earth? Whatever!!!!!!!!" - icon_state = "ice_tea_can" - New() - ..() - reagents.add_reagent("icetea", 30) - src.pixel_x = rand(-10.0, 10) - src.pixel_y = rand(-10.0, 10) - -/obj/item/weapon/reagent_containers/food/drinks/grape_juice - name = "Grapel Juice" - desc = "500 pages of rules of how to appropriately enter into a combat with this juice!" - icon_state = "purple_can" - New() - ..() - reagents.add_reagent("grapejuice", 30) - src.pixel_x = rand(-10.0, 10) - src.pixel_y = rand(-10.0, 10) /obj/item/weapon/reagent_containers/food/drinks/sillycup name = "Paper Cup" @@ -381,21 +259,7 @@ else icon_state = "water_cup_e" -/obj/item/weapon/reagent_containers/food/drinks/tonic - name = "T-Borg's Tonic Water" - desc = "Quinine tastes funny, but at least it'll keep that Space Malaria away." - icon_state = "tonic" - New() - ..() - reagents.add_reagent("tonic", 50) -/obj/item/weapon/reagent_containers/food/drinks/sodawater - name = "Soda Water" - desc = "A can of soda water. Why not make a scotch and soda?" - icon_state = "sodawater" - New() - ..() - reagents.add_reagent("sodawater", 50) //////////////////////////drinkingglass and shaker// //Note by Darem: This code handles the mixing of drinks. New drinks go in three places: In Chemistry-Reagents.dm (for the drink // itself), in Chemistry-Recipes.dm (for the reaction that changes the components into the drink), and here (for the drinking glass diff --git a/code/modules/reagents/reagent_containers/food/snacks/grown.dm b/code/modules/reagents/reagent_containers/food/snacks/grown.dm index b8be5cf0bd..2c59a75ae8 100644 --- a/code/modules/reagents/reagent_containers/food/snacks/grown.dm +++ b/code/modules/reagents/reagent_containers/food/snacks/grown.dm @@ -671,7 +671,7 @@ throw_impact(atom/hit_atom) ..() - new/obj/effect/decal/cleanable/oil(src.loc) + new/obj/effect/decal/cleanable/blood/oil(src.loc) src.visible_message("The [src.name] has been squashed.","You hear a smack.") src.reagents.reaction(get_turf(hit_atom)) for(var/atom/A in get_turf(hit_atom)) @@ -1003,7 +1003,7 @@ var/list/turfs = new/list() var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread if(inner_teleport_radius < 1) //Wasn't potent enough, it just splats. - new/obj/effect/decal/cleanable/oil(src.loc) + new/obj/effect/decal/cleanable/blood/oil(src.loc) src.visible_message("The [src.name] has been squashed.","You hear a smack.") del(src) return @@ -1040,7 +1040,7 @@ sleep(1) s.set_up(3, 1, A) s.start() - new/obj/effect/decal/cleanable/oil(src.loc) + new/obj/effect/decal/cleanable/blood/oil(src.loc) src.visible_message("The [src.name] has been squashed, causing a distortion in space-time.","You hear a splat and a crackle.") del(src) return diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index 94bb46e354..04eff0de6e 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -1325,7 +1325,7 @@ src.streak(dirs) -/obj/effect/decal/cleanable/robot_debris/gib/pipe_eject(var/direction) +/obj/effect/decal/cleanable/blood/gibs/robot/pipe_eject(var/direction) var/list/dirs if(direction) dirs = list( direction, turn(direction, -45), turn(direction, 45)) diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index e73434a2f3..31751cdfff 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -1528,6 +1528,14 @@ datum/design/stunshell materials = list("$metal" = 4000) build_path = "/obj/item/ammo_casing/shotgun/stunshell" +datum/design/plasmapistol + name = "plasma pistol" + desc = "A specialized firearm designed to fire lethal bolts of toxins." + id = "ppistol" + req_tech = list("combat" = 5, "plasmatech" = 4) + build_type = PROTOLATHE + materials = list("$metal" = 5000, "$glass" = 1000, "$plasma" = 3000) + build_path = "/obj/item/weapon/gun/energy/toxgun" ///////////////////////////////////////// /////////////////Mining////////////////// ///////////////////////////////////////// diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 4cc18d6434..103969bdd1 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -394,10 +394,10 @@ won't update every console in existence) but it's more of a hassle to do. Also, new_item.investigate_log("built by [key]","singulo") new_item.reliability = being_built.reliability if(linked_lathe.hacked) being_built.reliability = max((reliability / 2), 0) - if(being_built.locked) + /*if(being_built.locked) var/obj/item/weapon/storage/lockbox/L = new/obj/item/weapon/storage/lockbox(linked_lathe.loc) new_item.loc = L - L.name += " ([new_item.name])" + L.name += " ([new_item.name])"*/ else new_item.loc = linked_lathe.loc linked_lathe.busy = 0 diff --git a/code/modules/surgery/braincore.dm b/code/modules/surgery/braincore.dm index d94615c953..b9f3fe24a4 100644 --- a/code/modules/surgery/braincore.dm +++ b/code/modules/surgery/braincore.dm @@ -85,12 +85,18 @@ user.visible_message("\blue [user] separates [target]'s brain from \his spine with \the [tool].", \ "\blue You separate [target]'s brain from spine with \the [tool].") + var/mob/living/simple_animal/borer/borer = target.has_brain_worms() + + if(borer) + borer.detatch() //Should remove borer if the brain is removed - RR + user.attack_log += "\[[time_stamp()]\] Debrained [target.name] ([target.ckey]) with [tool.name] (INTENT: [uppertext(user.a_intent)])" target.attack_log += "\[[time_stamp()]\] Debrained by [user.name] ([user.ckey]) with [tool.name] (INTENT: [uppertext(user.a_intent)])" msg_admin_attack("[user.name] ([user.ckey]) debrained [target.name] ([target.ckey]) with [tool.name] (INTENT: [uppertext(user.a_intent)]) (JMP)") var/obj/item/brain/B = new(target.loc) B.transfer_identity(target) + target.internal_organs -= B target:brain_op_stage = 4.0 target.death()//You want them to die after the brain was transferred, so not to trigger client death() twice. diff --git a/code/world.dm b/code/world.dm index 3d1ad20db9..de70b60fe6 100644 --- a/code/world.dm +++ b/code/world.dm @@ -11,7 +11,6 @@ /world/New() //logs var/date_string = time2text(world.realtime, "YYYY/MM-Month/DD-Day") - log = file("data/logs/runtime/[time2text(world.realtime,"YYYY-MM")].log") //funtimelog href_logfile = file("data/logs/[date_string] hrefs.htm") diary = file("data/logs/[date_string].log") diaryofmeanpeople = file("data/logs/[date_string] Attack.log") @@ -28,6 +27,9 @@ // dumb and hardcoded but I don't care~ config.server_name += " #[(world.port % 1000) / 100]" + if(config && config.log_runtime) + log = file("data/logs/runtime/[time2text(world.realtime,"YYYY-MM-DD-(hh-mm-ss)")]-runtime.log") + callHook("startup") //Emergency Fix load_mods() diff --git a/config/example/config.txt b/config/example/config.txt index fb320da581..783adb23af 100644 --- a/config/example/config.txt +++ b/config/example/config.txt @@ -61,6 +61,9 @@ LOG_PDA ## log all Topic() calls (for use by coders in tracking down Topic issues) # LOG_HREFS +## log world.log and runtime errors to a file +# LOG_RUNTIME + ## log admin warning messages ##LOG_ADMINWARN ## Also duplicates a bunch of other messages. @@ -229,3 +232,9 @@ USEALIENWHITELIST ## Path to the python2 executable on the system. Leave blank for default. ## Default is "python" on Windows, "/usr/bin/env python2" on UNIX. #PYTHON_PATH + +## Uncommen to allow ghosts to write in blood during Cult rounds. +ALLOW_CULT_GHOSTWRITER + +## Sets the minimum number of cultists needed for ghosts to write in blood. +REQ_CULT_GHOSTWRITER 6 diff --git a/icons/effects/blood.dmi b/icons/effects/blood.dmi index 92c2e7ddf2..c254397a20 100644 Binary files a/icons/effects/blood.dmi and b/icons/effects/blood.dmi differ diff --git a/icons/effects/drip.dmi b/icons/effects/drip.dmi index c78843e586..a756bc10f8 100644 Binary files a/icons/effects/drip.dmi and b/icons/effects/drip.dmi differ diff --git a/icons/effects/fluidtracks.dmi b/icons/effects/fluidtracks.dmi new file mode 100644 index 0000000000..58e8fae934 Binary files /dev/null and b/icons/effects/fluidtracks.dmi differ diff --git a/icons/mob/animal.dmi b/icons/mob/animal.dmi index e269d169aa..0fb7e01d0d 100644 Binary files a/icons/mob/animal.dmi and b/icons/mob/animal.dmi differ diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi index f2e678f1a0..94aba05f82 100644 Binary files a/icons/mob/back.dmi and b/icons/mob/back.dmi differ diff --git a/icons/mob/feet.dmi b/icons/mob/feet.dmi index 7cb9ceee25..f01791ddf9 100644 Binary files a/icons/mob/feet.dmi and b/icons/mob/feet.dmi differ diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index 0cca8337fc..2e79482b4b 100644 Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi index 0502c01147..006a6c64b1 100644 Binary files a/icons/mob/hud.dmi and b/icons/mob/hud.dmi differ diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi index c24d402315..1af9e65c5c 100644 Binary files a/icons/mob/human_face.dmi and b/icons/mob/human_face.dmi differ diff --git a/icons/mob/items_lefthand.dmi b/icons/mob/items_lefthand.dmi index b15d273426..4e023c6bca 100644 Binary files a/icons/mob/items_lefthand.dmi and b/icons/mob/items_lefthand.dmi differ diff --git a/icons/mob/items_righthand.dmi b/icons/mob/items_righthand.dmi index cd7d868ea8..392ac02823 100644 Binary files a/icons/mob/items_righthand.dmi and b/icons/mob/items_righthand.dmi differ diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index 52ee7b48a6..6ce20a48e9 100644 Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi index 1683755a16..30c53fc8f9 100644 Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ diff --git a/icons/obj/ammo.dmi b/icons/obj/ammo.dmi index a230140edc..05f5f846a7 100644 Binary files a/icons/obj/ammo.dmi and b/icons/obj/ammo.dmi differ diff --git a/icons/obj/card.dmi b/icons/obj/card.dmi index 02f432f3dd..4a8c1d3b46 100644 Binary files a/icons/obj/card.dmi and b/icons/obj/card.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index 85dc31a6aa..f3af00ae93 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/icons/obj/clothing/shoes.dmi b/icons/obj/clothing/shoes.dmi index 7fa4cb7b78..83cb8881ae 100644 Binary files a/icons/obj/clothing/shoes.dmi and b/icons/obj/clothing/shoes.dmi differ diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index 5678e44ec7..c4c5d20eca 100644 Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi index 157a78e440..8e99ed4bf4 100644 Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ diff --git a/icons/obj/computer.dmi b/icons/obj/computer.dmi index 632aee5f3b..de9a335a70 100644 Binary files a/icons/obj/computer.dmi and b/icons/obj/computer.dmi differ diff --git a/icons/obj/decals.dmi b/icons/obj/decals.dmi index 8e7e0c4b39..cd4ef82568 100644 Binary files a/icons/obj/decals.dmi and b/icons/obj/decals.dmi differ diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi index 8dd01d7d2c..ece6723b62 100644 Binary files a/icons/obj/gun.dmi and b/icons/obj/gun.dmi differ diff --git a/icons/obj/guncabinet.dmi b/icons/obj/guncabinet.dmi new file mode 100644 index 0000000000..49d7db0840 Binary files /dev/null and b/icons/obj/guncabinet.dmi differ diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi index 0a85b397fd..2a48f951e8 100644 Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ diff --git a/icons/obj/objects.dmi b/icons/obj/objects.dmi index cbbef92efa..ae70160d50 100644 Binary files a/icons/obj/objects.dmi and b/icons/obj/objects.dmi differ diff --git a/maps/tgstation2.dmm b/maps/tgstation2.dmm index f46ac6fa64..3dc33c10d1 100644 --- a/maps/tgstation2.dmm +++ b/maps/tgstation2.dmm @@ -533,7 +533,7 @@ "akm" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/shuttle/floor,/area/shuttle/escape_pod3/station) "akn" = (/obj/structure/stool/bed/chair{dir = 4},/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = 20},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod3/station) "ako" = (/obj/structure/stool/bed/chair{dir = 4},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod3/station) -"akp" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/shuttle/plating,/area/shuttle/escape_pod3/station) +"akp" = (/obj/structure/shuttle/window,/turf/simulated/shuttle/plating,/area/shuttle/escape_pod3/station) "akq" = (/obj/structure/stool/bed/roller,/turf/simulated/floor{icon_state = "white"},/area/security/brig) "akr" = (/obj/structure/stool/bed,/turf/simulated/floor{icon_state = "white"},/area/security/brig) "aks" = (/obj/machinery/light,/turf/simulated/floor{icon_state = "white"},/area/security/brig) @@ -825,7 +825,7 @@ "apS" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/security/detectives_office) "apT" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/fsmaint) "apU" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/fsmaint) -"apV" = (/obj/effect/decal/cleanable/oil/streak,/turf/simulated/floor/plating,/area/maintenance/fsmaint) +"apV" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/effect/decal/cleanable/blood/oil/streak,/turf/simulated/floor/plating,/area/maintenance/fsmaint) "apW" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "security_airlock"; name = "interior access button"; pixel_x = 20; pixel_y = 20; req_access_txt = "13"},/obj/machinery/atmospherics/pipe/simple{dir = 5; icon_state = "intact"; level = 2},/turf/simulated/floor/plating,/area/maintenance/fsmaint) "apX" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "security_inner"; locked = 1; name = "Engineering External Access"; req_access = null; req_access_txt = "13"},/obj/machinery/atmospherics/pipe/simple{dir = 4; icon_state = "intact"; level = 2},/turf/simulated/floor/plating,/area/maintenance/fsmaint) "apY" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = -32},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1379; id_tag = "security_pump"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "security_sensor"; pixel_x = 0; pixel_y = 25},/turf/simulated/floor/plating,/area/maintenance/fsmaint) @@ -897,7 +897,7 @@ "arm" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/turf/simulated/floor,/area/maintenance/fsmaint) "arn" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/maintenance/fsmaint) "aro" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/apc{dir = 1; name = "Security Maintenance APC"; pixel_y = 24},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/fsmaint) -"arp" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/effect/decal/cleanable/oil/streak,/turf/simulated/floor/plating,/area/maintenance/fsmaint) +"arp" = (/obj/effect/decal/cleanable/blood/oil/streak,/turf/simulated/floor/plating,/area/maintenance/fsmaint) "arq" = (/obj/structure/stool,/turf/simulated/floor/plating,/area/maintenance/fsmaint) "arr" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/obj/effect/decal/cleanable/generic,/turf/simulated/floor/plating,/area/maintenance/fsmaint) "ars" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint) @@ -907,7 +907,7 @@ "arw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "arx" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "arrivals_outer"; locked = 1; name = "Engineering External Access"; req_access = null; req_access_txt = "10;13"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "ary" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/maintenance/fpmaint) -"arz" = (/obj/machinery/camera{c_tag = "Bar East"; network = list("SS13")},/turf/simulated/floor/wood,/area/crew_quarters/bar) +"arz" = (/obj/structure/closet/secure_closet/personal,/turf/simulated/floor/wood,/area/crew_quarters/sleep{name = "Security Wing Dormitories"}) "arA" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/red,/turf/simulated/floor/wood,/area/crew_quarters/sleep/sec) "arB" = (/obj/structure/closet/secure_closet/personal,/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/wood,/area/crew_quarters/sleep/sec) "arC" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/crew_quarters/sleep/sec) @@ -935,7 +935,7 @@ "arY" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold{pipe_color = "red"; dir = 1; icon_state = "manifold-r-f"; level = 1; name = "pipe manifold"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint) "arZ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/fsmaint) "asa" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint) -"asb" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/effect/decal/cleanable/robot_debris,/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/maintenance/fsmaint) +"asb" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/effect/decal/cleanable/blood/gibs/robot,/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/maintenance/fsmaint) "asc" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/wall,/area/maintenance/fsmaint) "asd" = (/obj/structure/rack{dir = 1},/obj/item/clothing/suit/fire/firefighter,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/gas,/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/clothing/glasses/meson,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 10},/area/maintenance/fsmaint) "ase" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 6},/area/maintenance/fsmaint) @@ -944,10 +944,10 @@ "ash" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/effect/landmark{name = "Syndicate Breach Area"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/crew_quarters/fitness) "asi" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/crew_quarters/fitness) "asj" = (/turf/simulated/shuttle/wall{icon_state = "swall_s6"; dir = 2},/area/shuttle/escape_pod1/station) -"ask" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hydroponics) +"ask" = (/obj/machinery/camera{c_tag = "Bar East"; network = list("SS13")},/obj/structure/flora/pottedplant{tag = "icon-plant-22"; icon_state = "plant-22"},/turf/simulated/floor/wood,/area/crew_quarters/bar) "asl" = (/turf/simulated/shuttle/wall{icon_state = "swall_s10"; dir = 2},/area/shuttle/escape_pod1/station) "asm" = (/turf/simulated/shuttle/wall{icon_state = "swall_s6"; dir = 2},/area/shuttle/escape_pod2/station) -"asn" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hydroponics) +"asn" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/flora/pottedplant{tag = "icon-plant-01"; icon_state = "plant-01"},/turf/simulated/floor/wood,/area/crew_quarters/captain) "aso" = (/turf/simulated/shuttle/wall{icon_state = "swall_s10"; dir = 2},/area/shuttle/escape_pod2/station) "asp" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/fpmaint2) "asq" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/hos,/turf/simulated/floor/wood,/area/crew_quarters/sleep/sec) @@ -1037,7 +1037,7 @@ "atW" = (/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/crew_quarters/sleep/sec) "atX" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/crew_quarters/sleep/sec) "atY" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/drinks/britcup{pixel_x = 4; pixel_y = 5},/obj/machinery/camera{c_tag = "Security Dormitories East"; dir = 8; network = list("SS13")},/turf/simulated/floor/wood,/area/crew_quarters/sleep/sec) -"atZ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hydroponics) +"atZ" = (/obj/structure/flora/pottedplant{tag = "icon-plant-10"; icon_state = "plant-10"},/turf/simulated/floor/wood,/area/crew_quarters/captain) "aua" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/obj/machinery/requests_console{pixel_x = -30},/turf/simulated/floor{icon_state = "cult"; dir = 2},/area/lawoffice) "aub" = (/obj/structure/stool/bed/chair/office/dark{dir = 4},/obj/effect/landmark/start{name = "Internal Affairs Agent"},/turf/simulated/floor{icon_state = "cult"; dir = 2},/area/lawoffice) "auc" = (/obj/structure/table/reinforced,/obj/item/weapon/folder/yellow,/turf/simulated/floor{icon_state = "cult"; dir = 2},/area/lawoffice) @@ -1049,10 +1049,10 @@ "aui" = (/turf/simulated/floor{icon_state = "neutral"; dir = 4},/area/crew_quarters/sleep) "auj" = (/obj/machinery/cryopod/right,/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/sleep{name = "\improper Cryogenic Storage"}) "auk" = (/obj/structure/cryofeed/right,/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/sleep{name = "\improper Cryogenic Storage"}) -"aul" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hydroponics) -"aum" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/wood,/area/crew_quarters/captain) -"aun" = (/obj/structure/table,/obj/machinery/light_switch{pixel_x = 27},/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/crew_quarters/sleep{name = "Dorm Two"}) -"auo" = (/obj/structure/table/woodentable,/obj/machinery/light_switch{pixel_y = 28},/obj/item/weapon/book/manual/security_space_law{pixel_x = -3; pixel_y = 5},/obj/machinery/atmospherics/unary/vent_pump,/turf/simulated/floor/wood,/area/crew_quarters/sleep/sec) +"aul" = (/obj/machinery/light_switch{pixel_x = 27},/obj/structure/flora/pottedplant{tag = "icon-plant-21"; icon_state = "plant-21"},/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/crew_quarters/sleep{name = "Dorm Two"}) +"aum" = (/obj/machinery/light_switch{pixel_y = 28},/obj/machinery/atmospherics/unary/vent_pump,/obj/structure/table/woodentable,/obj/item/weapon/book/manual/security_space_law{pixel_x = -3; pixel_y = 5},/turf/simulated/floor/wood,/area/crew_quarters/sleep/sec) +"aun" = (/obj/structure/shuttle/window,/turf/simulated/shuttle/plating,/area/shuttle/escape_pod1/station) +"auo" = (/obj/structure/shuttle/window,/turf/simulated/shuttle/plating,/area/shuttle/escape_pod2/station) "aup" = (/obj/machinery/power/apc{dir = 8; name = "Fitness Room APC"; pixel_x = -24; pixel_y = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "neutral"; dir = 8},/area/crew_quarters/fitness) "auq" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{dir = 2; icon_state = "whitecorner"},/area/crew_quarters/fitness) "aur" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; icon_state = "off"; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor{icon_state = "whitehall"; dir = 2},/area/crew_quarters/fitness) @@ -1094,8 +1094,8 @@ "avb" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/fsmaint) "avc" = (/obj/machinery/atmospherics/pipe/manifold{pipe_color = "red"; dir = 4; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/wall,/area/crew_quarters/sleep{name = "Dorm Two"}) "avd" = (/turf/simulated/floor{icon_state = "neutral"; dir = 8},/area/crew_quarters/sleep) -"ave" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/shuttle/plating,/area/shuttle/escape_pod1/station) -"avf" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/shuttle/plating,/area/shuttle/escape_pod2/station) +"ave" = (/obj/structure/shuttle/window,/turf/simulated/shuttle/plating,/area/shuttle/arrival/station) +"avf" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/flora/pottedplant{tag = "icon-plant-06"; icon_state = "plant-06"},/turf/simulated/floor{icon_state = "neutral"},/area/crew_quarters/fitness) "avg" = (/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "neutral"; dir = 8},/area/crew_quarters/fitness) "avh" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/fitness) "avi" = (/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/fitness) @@ -1132,11 +1132,11 @@ "avN" = (/obj/machinery/door/airlock{id_tag = "Dorm3"; name = "Dorm 3"},/turf/simulated/floor/carpet{icon_state = "carpet8-0"},/area/crew_quarters/sleep{name = "Dorm Two"}) "avO" = (/turf/simulated/floor{icon_state = "neutralcorner"; dir = 4},/area/crew_quarters/sleep) "avP" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor{icon_state = "neutral"; dir = 1},/area/crew_quarters/sleep) -"avQ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/shuttle/plating,/area/shuttle/arrival/station) +"avQ" = (/obj/structure/shuttle/window,/turf/simulated/shuttle/plating,/area/shuttle/mining/station) "avR" = (/turf/simulated/floor{icon_state = "neutral"; dir = 1},/area/crew_quarters/sleep) -"avS" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "neutral"},/area/crew_quarters/fitness) -"avT" = (/obj/structure/grille,/obj/structure/window/plasmareinforced{tag = "icon-plasmarwindow (EAST)"; icon_state = "plasmarwindow"; dir = 4},/obj/structure/window/plasmareinforced{tag = "icon-plasmarwindow (NORTH)"; icon_state = "plasmarwindow"; dir = 1},/obj/structure/window/plasmareinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/toxins/misc_lab) -"avU" = (/obj/structure/window/plasmareinforced{tag = "icon-plasmarwindow (NORTH)"; icon_state = "plasmarwindow"; dir = 1},/obj/structure/window/plasmareinforced,/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/toxins/misc_lab) +"avS" = (/obj/machinery/vending/wallmed1{pixel_y = 28},/obj/structure/flora/pottedplant{tag = "icon-plant-17"; icon_state = "plant-17"},/turf/simulated/floor{icon_state = "bcarpet02"},/area/medical/psych) +"avT" = (/obj/structure/shuttle/window,/turf/simulated/shuttle/plating,/area/shuttle/research/station) +"avU" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/obj/structure/flora/pottedplant{tag = "icon-plant-09"; icon_state = "plant-09"},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay) "avV" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/crew_quarters/fitness) "avW" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "neutral"; dir = 8},/area/crew_quarters/fitness) "avX" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor{dir = 5; icon_state = "whitehall"},/area/crew_quarters/fitness) @@ -1178,7 +1178,7 @@ "awH" = (/obj/machinery/atmospherics/pipe/manifold{pipe_color = "red"; dir = 8; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/wall,/area/crew_quarters/sleep{name = "Dorm Two"}) "awI" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; icon_state = "off"; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/stool/bed,/obj/item/weapon/bedsheet/mime,/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/crew_quarters/sleep{name = "Dorm Two"}) "awJ" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/crew_quarters/sleep{name = "Dorm Two"}) -"awK" = (/obj/structure/window/plasmareinforced{tag = "icon-plasmarwindow (WEST)"; icon_state = "plasmarwindow"; dir = 8},/obj/structure/window/plasmareinforced{tag = "icon-plasmarwindow (NORTH)"; icon_state = "plasmarwindow"; dir = 1},/obj/structure/window/plasmareinforced,/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/toxins/misc_lab) +"awK" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/storage/secure/safe{pixel_y = -25},/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) "awL" = (/turf/simulated/floor,/area/crew_quarters/sleep) "awM" = (/obj/structure/table/woodentable,/turf/simulated/floor,/area/crew_quarters/sleep) "awN" = (/obj/structure/table/woodentable,/obj/item/weapon/coin/silver,/turf/simulated/floor,/area/crew_quarters/sleep) @@ -1330,7 +1330,7 @@ "azD" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/light,/obj/structure/table,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/bruise_pack{pixel_x = 10; pixel_y = 2},/obj/item/stack/medical/ointment{pixel_y = 4},/turf/simulated/floor{dir = 10; icon_state = "neutral"},/area/crew_quarters/fitness) "azE" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/sillycup{pixel_x = -1; pixel_y = -1},/obj/item/weapon/reagent_containers/food/drinks/sillycup{pixel_x = 4; pixel_y = 3},/turf/simulated/floor{icon_state = "neutral"},/area/crew_quarters/fitness) "azF" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light_switch{pixel_y = -25},/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/sillycup{pixel_x = -2; pixel_y = 0},/obj/item/weapon/reagent_containers/food/drinks/sillycup{pixel_x = 3; pixel_y = 3},/turf/simulated/floor{icon_state = "neutral"},/area/crew_quarters/fitness) -"azG" = (/obj/structure/window/plasmareinforced{tag = "icon-plasmarwindow (EAST)"; icon_state = "plasmarwindow"; dir = 4},/obj/structure/window/plasmareinforced{tag = "icon-plasmarwindow (WEST)"; icon_state = "plasmarwindow"; dir = 8},/obj/structure/window/plasmareinforced{tag = "icon-plasmarwindow (NORTH)"; icon_state = "plasmarwindow"; dir = 1},/obj/structure/grille,/turf/simulated/floor/engine,/area/toxins/misc_lab) +"azG" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/storage/secure/safe{pixel_y = -25},/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) "azH" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "neutral"},/area/crew_quarters/fitness) "azI" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "neutral"; dir = 6},/area/crew_quarters/fitness) "azJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/crew_quarters/fitness) @@ -1684,7 +1684,7 @@ "aGt" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/chapel/main) "aGu" = (/obj/machinery/door/poddoor{id = "chapelgun"; name = "Chapel Launcher Door"},/turf/simulated/floor/plating,/area/chapel/main) "aGv" = (/obj/effect/landmark{name = "Marauder Entry"},/turf/space,/area) -"aGw" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/shuttle/plating,/area/shuttle/mining/station) +"aGw" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_CO2 = 0; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/light,/obj/structure/window/reinforced{dir = 4},/obj/structure/closet/wardrobe/engineering_yellow,/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) "aGx" = (/obj/effect/landmark{name = "Observer-Start"},/turf/simulated/shuttle/floor,/area/shuttle/arrival/station) "aGy" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{dir = 4; icon_state = "whitecorner"},/area/hallway/secondary/entry) "aGz" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/wall,/area/security/checkpoint2) @@ -2026,7 +2026,7 @@ "aMX" = (/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/hallway/secondary/entry) "aMY" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hallway/secondary/entry) "aMZ" = (/obj/structure/table/woodentable,/turf/simulated/floor{icon_state = "grimy"},/area/hallway/secondary/entry) -"aNa" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/snacks/chips,/obj/item/weapon/reagent_containers/food/drinks/cola,/turf/simulated/floor/carpet,/area/hallway/secondary/entry) +"aNa" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/snacks/chips,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/turf/simulated/floor/carpet,/area/hallway/secondary/entry) "aNb" = (/turf/simulated/floor/carpet,/area/hallway/secondary/entry) "aNc" = (/obj/structure/stool/bed/chair/comfy/beige{dir = 8},/turf/simulated/floor{icon_state = "grimy"},/area/hallway/secondary/entry) "aNd" = (/obj/machinery/vending/coffee,/turf/simulated/floor{icon_state = "dark"},/area/hallway/secondary/entry) @@ -2198,7 +2198,7 @@ "aQn" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/crew_quarters/bar) "aQo" = (/turf/simulated/floor/wood,/area/crew_quarters/bar) "aQp" = (/obj/structure/noticeboard{pixel_y = 32},/turf/simulated/floor/wood,/area/crew_quarters/bar) -"aQq" = (/obj/machinery/vending/wallmed1{pixel_y = 28},/turf/simulated/floor{icon_state = "bcarpet02"},/area/medical/psych) +"aQq" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/closet/wardrobe/engineering_yellow,/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) "aQr" = (/obj/structure/table/reinforced,/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar) "aQs" = (/obj/machinery/disposal,/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar) "aQt" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/kitchen) @@ -2746,11 +2746,11 @@ "baP" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/fancy/donut_box,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "kitchen"; name = "Kitchen Shutters"; opacity = 0},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) "baQ" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/poddoor/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "kitchen"; name = "Kitchen Shutters"; opacity = 0},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen) "baR" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor,/area/hydroponics) -"baS" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "misclab"; name = "Test Chamber Blast Doors"; opacity = 0},/obj/structure/grille,/obj/structure/window/plasmareinforced{tag = "icon-plasmarwindow (EAST)"; icon_state = "plasmarwindow"; dir = 4},/obj/structure/window/plasmareinforced{tag = "icon-plasmarwindow (NORTH)"; icon_state = "plasmarwindow"; dir = 1},/obj/structure/window/plasmareinforced,/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci) -"baT" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "misclab"; name = "Test Chamber Blast Doors"; opacity = 0},/obj/structure/grille,/obj/structure/window/plasmareinforced{tag = "icon-plasmarwindow (WEST)"; icon_state = "plasmarwindow"; dir = 8},/obj/structure/window/plasmareinforced{tag = "icon-plasmarwindow (NORTH)"; icon_state = "plasmarwindow"; dir = 1},/obj/structure/window/plasmareinforced,/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci) +"baS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hydroponics) +"baT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/hydroponics) "baU" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/window/northleft{name = "Hydroponics Desk"; req_access_txt = "35"},/turf/simulated/floor,/area/hydroponics) "baV" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/window/westright{dir = 1; name = "Hydroponics Desk"; req_access_txt = "35"},/turf/simulated/floor,/area/hydroponics) -"baW" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "misclab"; name = "Test Chamber Blast Doors"; opacity = 0},/obj/structure/grille,/obj/structure/window/plasmareinforced{tag = "icon-plasmarwindow (EAST)"; icon_state = "plasmarwindow"; dir = 4},/obj/structure/window/plasmareinforced,/obj/structure/window/plasmareinforced{tag = "icon-plasmarwindow (NORTH)"; icon_state = "plasmarwindow"; dir = 1},/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci) +"baW" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/hydroponics) "baX" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/hallway/primary/starboard) "baY" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor,/area/hallway/primary/starboard) "baZ" = (/obj/machinery/vending/coffee,/turf/simulated/floor/wood,/area/library) @@ -2826,7 +2826,7 @@ "bcr" = (/turf/simulated/floor{dir = 1; icon_state = "whitecorner"},/area/hallway/primary/starboard) "bcs" = (/obj/machinery/camera{c_tag = "Starboard Primary Hallway 2"; dir = 2; network = list("SS13")},/turf/simulated/floor{dir = 1; icon_state = "whitecorner"},/area/hallway/primary/starboard) "bct" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass{name = "Hydroponics"; req_access_txt = "35"},/turf/simulated/floor,/area/hydroponics) -"bcu" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "misclab"; name = "Test Chamber Blast Doors"; opacity = 0},/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/general/visible,/obj/structure/window/plasmareinforced{tag = "icon-plasmarwindow (WEST)"; icon_state = "plasmarwindow"; dir = 8},/obj/structure/window/plasmareinforced,/obj/structure/window/plasmareinforced{tag = "icon-plasmarwindow (NORTH)"; icon_state = "plasmarwindow"; dir = 1},/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci) +"bcu" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hydroponics) "bcv" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor,/area/hallway/primary/starboard) "bcw" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area/library) "bcx" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area/chapel/main) @@ -2935,7 +2935,7 @@ "bew" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall/r_wall,/area/crew_quarters/captain) "bex" = (/obj/machinery/vending/coffee,/turf/simulated/floor/wood,/area/crew_quarters/captain) "bey" = (/obj/structure/table/woodentable,/turf/simulated/floor/carpet,/area/crew_quarters/captain) -"bez" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/quartermaster/office) +"bez" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/window{dir = 1},/obj/structure/stool/bed,/obj/item/weapon/bedsheet/rd,/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) "beA" = (/obj/machinery/camera{c_tag = "Central Hallway East"; dir = 4; network = list("SS13")},/obj/structure/disposalpipe/segment,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = -32; pixel_y = 0},/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/hallway/primary/central) "beB" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor,/area/hallway/primary/starboard) "beC" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor,/area/hallway/primary/starboard) @@ -3146,7 +3146,7 @@ "biz" = (/turf/simulated/floor{icon_state = "white"},/area/medical/medbay) "biA" = (/obj/structure/stool/bed/chair,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "white"},/area/medical/medbay) "biB" = (/obj/structure/stool/bed/chair,/turf/simulated/floor{icon_state = "white"},/area/medical/medbay) -"biC" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/shuttle/plating,/area/shuttle/research/station) +"biC" = (/obj/machinery/power/apc{dir = 8; name = "Engineering Dorms APC"; pixel_x = -26; pixel_y = 3},/obj/structure/cable,/obj/structure/flora/pottedplant{tag = "icon-plant-13"; icon_state = "plant-13"},/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) "biD" = (/obj/structure/filingcabinet/filingcabinet,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/medical/cmo) "biE" = (/obj/machinery/computer/crew,/obj/machinery/requests_console{announcementConsole = 1; department = "Chief Medical Officer's Desk"; departmentType = 5; name = "Chief Medical Officer RC"; pixel_x = 0; pixel_y = 32},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/medical/cmo) "biF" = (/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/obj/structure/table,/obj/machinery/computer/security/telescreen{desc = "Used for watching the department."; name = "Medical Monitor"; network = list("Medical")},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/medical/cmo) @@ -3182,7 +3182,7 @@ "bjj" = (/obj/machinery/door_control{id = "Disposal Exit"; name = "Disposal Vent Control"; pixel_x = -25; pixel_y = 4; req_access_txt = "12"},/obj/machinery/driver_button{id = "trash"; pixel_x = -26; pixel_y = -6},/turf/simulated/floor/plating,/area/maintenance/disposal) "bjk" = (/obj/machinery/conveyor_switch/oneway{convdir = -1; id = "garbage"; name = "disposal coveyor"},/turf/simulated/floor/plating,/area/maintenance/disposal) "bjl" = (/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/plating,/area/maintenance/disposal) -"bjm" = (/obj/effect/decal/cleanable/oil,/obj/machinery/power/apc{dir = 4; name = "Disposal APC"; pixel_x = 27; pixel_y = 0},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/maintenance/disposal) +"bjm" = (/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor{icon_state = "floorgrime"},/area/toxins/storage) "bjn" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/port) "bjo" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/port) "bjp" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/port) @@ -3523,7 +3523,7 @@ "bpM" = (/obj/structure/table,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/extinguisher,/turf/simulated/floor/plating,/area/storage/emergency) "bpN" = (/turf/simulated/shuttle/wall{icon_state = "swall_s6"; dir = 2},/area/shuttle/research/station) "bpO" = (/turf/simulated/shuttle/wall{icon_state = "swall12"; dir = 2},/area/shuttle/research/station) -"bpP" = (/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{dir = 2},/turf/simulated/floor/plating,/area/quartermaster/office) +"bpP" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/reinforced{dir = 4},/obj/structure/closet/wardrobe/engineering_yellow,/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) "bpQ" = (/turf/simulated/shuttle/wall{icon_state = "swall_s10"; dir = 2},/area/shuttle/research/station) "bpR" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 0},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hallway/secondary/entry) "bpS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hallway/secondary/entry) @@ -3546,7 +3546,7 @@ "bqj" = (/obj/machinery/computer/ordercomp,/turf/simulated/floor,/area/quartermaster/office) "bqk" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor,/area/quartermaster/office) "bql" = (/obj/structure/stool/bed/chair{dir = 8},/obj/machinery/firealarm{pixel_y = 27},/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/quartermaster/office) -"bqm" = (/obj/structure/stool/bed/chair,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay) +"bqm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/hydroponics) "bqn" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor,/area/hallway/primary/central) "bqo" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 27},/turf/simulated/floor{dir = 2; icon_state = "redcorner"},/area/hallway/primary/central) "bqp" = (/obj/machinery/computer/skills{icon_state = "medlaptop"},/obj/structure/table,/turf/simulated/floor{dir = 9; icon_state = "blue"},/area/crew_quarters/heads) @@ -3618,7 +3618,7 @@ "brD" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock East"},/obj/machinery/door/window/westleft{name = "Cargo Desk"; req_access_txt = "50"},/obj/structure/noticeboard{pixel_y = 27},/turf/simulated/floor,/area/quartermaster/office) "brE" = (/turf/simulated/floor{icon_state = "delivery"},/area/quartermaster/office) "brF" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor,/area/quartermaster/office) -"brG" = (/obj/structure/closet/wardrobe/engineering_yellow,/obj/structure/window/reinforced/tinted{dir = 4; icon_state = "twindow"; opacity = 0},/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"; opacity = 0},/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) +"brG" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/toxins/misc_lab) "brH" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/hallway/primary/central) "brI" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "loadingarea"},/area/hallway/primary/central) "brJ" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "delivery"},/area/hallway/primary/central) @@ -4307,7 +4307,7 @@ "bEQ" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'BOMB RANGE"; name = "BOMB RANGE"},/turf/simulated/wall/r_wall,/area/toxins/test_area) "bER" = (/turf/simulated/shuttle/wall{icon_state = "swall_s6"; dir = 2},/area/shuttle/mining/station) "bES" = (/turf/simulated/shuttle/wall{icon_state = "swall12"; dir = 2},/area/shuttle/mining/station) -"bET" = (/obj/structure/stool/bed,/obj/machinery/door/window{dir = 1},/obj/item/weapon/bedsheet/rd,/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/item/weapon/storage/secure/safe{pixel_y = -25},/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) +"bET" = (/obj/structure/shuttle/window,/turf/simulated/shuttle/plating,/area/shuttle/escape_pod5/station) "bEU" = (/turf/simulated/shuttle/wall{icon_state = "swall_s10"; dir = 2},/area/shuttle/mining/station) "bEV" = (/obj/machinery/computer/security/mining,/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -27},/obj/machinery/camera{c_tag = "Mining Dock"; dir = 4; network = list("SS13")},/turf/simulated/floor,/area/quartermaster/miningdock) "bEW" = (/turf/simulated/floor,/area/quartermaster/miningdock) @@ -4347,7 +4347,7 @@ "bFE" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay) "bFF" = (/obj/structure/table,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/item/weapon/pen,/obj/machinery/requests_console{announcementConsole = 0; department = "Medbay"; departmentType = 1; name = "Medbay RC"; pixel_x = 0; pixel_y = 30; pixel_z = 0},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay) "bFG" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay) -"bFH" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/dr_gibb{pixel_x = -3; pixel_y = -1},/obj/item/weapon/reagent_containers/food/drinks/dr_gibb{pixel_x = 4; pixel_y = 3},/obj/machinery/newscaster{pixel_x = 32; pixel_y = 0},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/medical/medbreak) +"bFH" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb{pixel_x = -3; pixel_y = -1},/obj/item/weapon/reagent_containers/food/drinks/cans/dr_gibb{pixel_x = 4; pixel_y = 3},/obj/machinery/newscaster{pixel_x = 32; pixel_y = 0},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/medical/medbreak) "bFI" = (/obj/machinery/atmospherics/pipe/simple{pipe_color = "red"; dir = 4; icon_state = "intact-r-f"; level = 1; name = "pipe"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area/medical/surgery) "bFJ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "white"},/area/medical/surgery) "bFK" = (/obj/effect/landmark/start{name = "Medical Doctor"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "white"},/area/medical/surgery) @@ -4649,7 +4649,7 @@ "bLu" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint) "bLv" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment,/mob/living/simple_animal/mouse,/turf/simulated/floor/plating,/area/maintenance/asmaint) "bLw" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/medical/surgery) -"bLx" = (/obj/structure/window/reinforced/tinted{dir = 4; icon_state = "twindow"},/obj/structure/closet/wardrobe/engineering_yellow,/obj/machinery/light,/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) +"bLx" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/reinforced{dir = 4},/obj/structure/closet/wardrobe/engineering_yellow,/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) "bLy" = (/obj/structure/noticeboard{pixel_y = 28},/obj/structure/stool/bed/psych,/obj/item/weapon/bedsheet/brown,/turf/simulated/floor{icon_state = "bcarpet02"},/area/medical/psych) "bLz" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Medical_Psychiatry"; name = "Privacy Shutters"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/medical/psych) "bLA" = (/obj/machinery/alarm{pixel_y = 24},/obj/structure/stool/bed/chair/comfy/brown,/turf/simulated/floor{icon_state = "bcarpet01"},/area/medical/psych) @@ -4678,7 +4678,7 @@ "bLX" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/asmaint) "bLY" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci) "bLZ" = (/obj/machinery/portable_atmospherics/pump,/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci) -"bMa" = (/obj/effect/decal/cleanable/oil,/turf/simulated/floor{icon_state = "floorgrime"},/area/toxins/storage) +"bMa" = (/obj/effect/decal/cleanable/blood/oil,/obj/machinery/power/apc{dir = 4; name = "Disposal APC"; pixel_x = 27; pixel_y = 0},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/maintenance/disposal) "bMb" = (/obj/machinery/portable_atmospherics/canister/toxins,/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/toxins/storage) "bMc" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/extinguisher_cabinet{pixel_x = -24},/turf/simulated/floor{dir = 5; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) "bMd" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) @@ -4941,10 +4941,10 @@ "bRa" = (/obj/machinery/disposal,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/trunk,/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) "bRb" = (/obj/structure/disposalpipe/junction{icon_state = "pipe-j2"; dir = 2},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold{pipe_color = "red"; dir = 8; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor/plating,/area/maintenance/asmaint) "bRc" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci) -"bRd" = (/obj/structure/stool/bed,/obj/machinery/door/window{dir = 1},/obj/item/weapon/bedsheet/rd,/obj/item/weapon/storage/secure/safe{pixel_y = -25},/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) -"bRe" = (/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_CO2 = 0; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/closet/wardrobe/engineering_yellow,/obj/machinery/light_switch{pixel_y = -25},/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) +"bRd" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/toxins/misc_lab) +"bRe" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/toxins/misc_lab) "bRf" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/toxins/misc_lab) -"bRg" = (/obj/structure/stool/bed,/obj/machinery/door/window{dir = 1},/obj/item/weapon/bedsheet/rd,/obj/machinery/light{dir = 8},/obj/item/weapon/storage/secure/safe{pixel_y = -25},/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) +"bRg" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/engine,/area/toxins/misc_lab) "bRh" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/toxins/misc_lab) "bRi" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/toxins/misc_lab) "bRj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/toxins/misc_lab) @@ -4999,7 +4999,7 @@ "bSg" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2; name = "hazard door south"},/turf/simulated/floor{dir = 2; icon_state = "whitegreen"},/area/medical/virology) "bSh" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/portable_atmospherics/canister,/turf/simulated/floor/engine,/area/toxins/misc_lab) "bSi" = (/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/shieldwallgen{req_access = list(55)},/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) -"bSj" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"; opacity = 0},/obj/structure/window/reinforced/tinted{dir = 4; icon_state = "twindow"; opacity = 0},/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) +"bSj" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "misclab"; name = "Test Chamber Blast Doors"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci) "bSk" = (/obj/machinery/sparker{id = "Miscresearch"; pixel_x = -25},/turf/simulated/floor/engine,/area/toxins/misc_lab) "bSl" = (/obj/machinery/light,/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) "bSm" = (/obj/machinery/atmospherics/pipe/manifold{pipe_color = "red"; dir = 8; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) @@ -5346,7 +5346,7 @@ "bYP" = (/obj/structure/rack{dir = 1},/obj/item/clothing/suit/fire/firefighter,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/gas,/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/clothing/glasses/meson,/turf/simulated/floor/plating,/area/maintenance/asmaint) "bYQ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/toxins/xenobiology) "bYR" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) -"bYS" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) +"bYS" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "misclab"; name = "Test Chamber Blast Doors"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci) "bYT" = (/obj/structure/stool/bed/chair,/obj/effect/landmark/start{name = "Geneticist"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{icon_state = "white"},/area/medical/genetics_cloning) "bYU" = (/turf/simulated/wall/r_wall,/area/maintenance/starboardsolar) "bYV" = (/obj/machinery/door/airlock/engineering{name = "Aft Starboard Solar Access"; req_access_txt = "10"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple{icon_state = "intact"; level = 2},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) @@ -5470,7 +5470,7 @@ "cbj" = (/obj/machinery/power/solar_control{id = "starboardsolar"; name = "Aft Starboard Solar Control"; track = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/turf/simulated/floor/plating,/area/maintenance/starboardsolar) "cbk" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "solar_xeno_airlock"; name = "interior access button"; pixel_x = -25; pixel_y = -25; req_access_txt = "10;13"},/obj/machinery/atmospherics/pipe/manifold{dir = 8; icon_state = "manifold"; level = 2},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) "cbl" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = -32},/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/maintenance/starboardsolar) -"cbm" = (/obj/machinery/power/apc{dir = 8; name = "Engineering Dorms APC"; pixel_x = -26; pixel_y = 3},/obj/structure/cable,/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) +"cbm" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/structure/flora/pottedplant{tag = "icon-plant-20"; icon_state = "plant-20"},/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) "cbn" = (/obj/structure/stool/bed/chair{dir = 8},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod5/station) "cbo" = (/obj/structure/stool/bed/chair{dir = 8},/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = 20},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod5/station) "cbp" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/shuttle/floor,/area/shuttle/escape_pod5/station) @@ -5826,8 +5826,8 @@ "cib" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office) "cic" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office) "cid" = (/obj/machinery/power/apc{dir = 4; name = "CE Office APC"; pixel_x = 24; pixel_y = 0},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office) -"cie" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) -"cif" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/crew_quarters/sleep/engi) +"cie" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/window{dir = 2},/obj/structure/stool/bed,/obj/item/weapon/bedsheet/rd,/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) +"cif" = (/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/unary/vent_pump,/obj/structure/window/reinforced{dir = 4},/obj/structure/closet/wardrobe/engineering_yellow,/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) "cig" = (/obj/structure/stool,/obj/effect/landmark/start{name = "Station Engineer"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor,/area/engine/break_room) "cih" = (/obj/structure/stool,/obj/effect/landmark/start{name = "Station Engineer"},/turf/simulated/floor,/area/engine/break_room) "cii" = (/obj/machinery/atmospherics/pipe/manifold{pipe_color = "red"; dir = 8; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor,/area/engine/break_room) @@ -5839,13 +5839,13 @@ "cio" = (/obj/structure/stool/bed/chair/office/light,/obj/effect/landmark/start{name = "Chief Engineer"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/engine/chiefs_office) "cip" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor,/area/hallway/primary/aft) "ciq" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor,/area/hallway/primary/aft) -"cir" = (/obj/structure/window/plasmareinforced{tag = "icon-plasmarwindow (EAST)"; icon_state = "plasmarwindow"; dir = 4},/obj/structure/window/plasmareinforced{tag = "icon-plasmarwindow (WEST)"; icon_state = "plasmarwindow"; dir = 8},/obj/structure/grille,/obj/structure/window/plasmareinforced,/turf/simulated/floor/engine,/area/toxins/misc_lab) -"cis" = (/obj/structure/window/plasmareinforced{tag = "icon-plasmarwindow (EAST)"; icon_state = "plasmarwindow"; dir = 4},/obj/structure/window/plasmareinforced{tag = "icon-plasmarwindow (WEST)"; icon_state = "plasmarwindow"; dir = 8},/obj/structure/grille,/obj/structure/window/plasmareinforced{tag = "icon-plasmarwindow (NORTH)"; icon_state = "plasmarwindow"; dir = 1},/turf/simulated/floor/engine,/area/toxins/misc_lab) +"cir" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/table/reinforced,/obj/item/weapon/storage/secure/safe{pixel_y = 25},/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) +"cis" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/window/reinforced{dir = 4},/obj/structure/table/reinforced,/obj/item/weapon/storage/secure/safe{pixel_y = 25},/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) "cit" = (/turf/simulated/wall/r_wall,/area/crew_quarters/sleep/engi) -"ciu" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/shuttle/plating,/area/shuttle/escape_pod5/station) +"ciu" = (/obj/structure/shuttle/window,/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom) "civ" = (/obj/machinery/camera{c_tag = "Atmospherics South West"; dir = 4; network = list("SS13")},/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/pipe/simple{pipe_color = "red"; icon_state = "intact-r"; level = 2},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/atmos) -"ciw" = (/obj/structure/window/plasmareinforced{tag = "icon-plasmarwindow (EAST)"; icon_state = "plasmarwindow"; dir = 4},/obj/structure/window/plasmareinforced{tag = "icon-plasmarwindow (WEST)"; icon_state = "plasmarwindow"; dir = 8},/obj/structure/window/plasmareinforced,/obj/structure/grille,/turf/simulated/floor/engine,/area/toxins/misc_lab) -"cix" = (/obj/structure/stool/bed,/obj/machinery/door/window{dir = 2},/obj/item/weapon/bedsheet/rd,/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/item/weapon/storage/secure/safe{pixel_y = 25},/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) +"ciw" = (/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor/plating,/area/maintenance/aft) +"cix" = (/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/structure/table,/turf/unsimulated/floor{icon_state = "redyellowfull"},/area/centcom/living) "ciy" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{dir = 8; icon_state = "caution"},/area/engine/break_room) "ciz" = (/obj/machinery/atmospherics/pipe/simple{pipe_color = "cyan"; icon_state = "intact-c"; level = 2},/turf/simulated/floor,/area/atmos) "ciA" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; frequency = 1439; icon_state = "off"; id_tag = null; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/table,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/machinery/light,/obj/structure/reagent_dispensers/virusfood{pixel_x = -30},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = -32},/turf/simulated/floor{dir = 8; icon_state = "whitegreen"},/area/medical/virology) @@ -5879,7 +5879,7 @@ "cjc" = (/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) "cjd" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/junction{dir = 2; icon_state = "pipe-y"},/turf/simulated/floor{dir = 2; icon_state = "caution"},/area/engine/break_room) "cje" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9; pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) -"cjf" = (/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"; opacity = 0},/obj/structure/window/reinforced/tinted{dir = 4; icon_state = "twindow"; opacity = 0},/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) +"cjf" = (/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/structure/table,/turf/unsimulated/floor{icon_state = "redyellowfull"},/area/centcom/living) "cjg" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/atmos) "cjh" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple{pipe_color = "red"; dir = 4; icon_state = "intact-r"; level = 2},/turf/simulated/floor,/area/atmos) "cji" = (/obj/machinery/atmospherics/trinary/filter{dir = 4; filter_type = 2; icon_state = "intact_on"; name = "Gas filter (N2 tank)"; on = 1},/turf/simulated/floor,/area/atmos) @@ -5914,13 +5914,13 @@ "cjL" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating/airless,/area/solar/starboard) "cjM" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/maintenance/portsolar) "cjN" = (/turf/simulated/wall/r_wall,/area/maintenance/portsolar) -"cjO" = (/obj/structure/stool/bed,/obj/machinery/door/window{dir = 2},/obj/item/weapon/bedsheet/rd,/obj/item/weapon/storage/secure/safe{pixel_y = 25},/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) +"cjO" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/item/weapon/lighter/zippo,/obj/item/weapon/storage/fancy/cigarettes,/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve) "cjP" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor,/area/engine/break_room) "cjQ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) "cjR" = (/obj/structure/table/reinforced{icon_state = "table"},/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/turf/simulated/floor,/area/engine/break_room) "cjS" = (/obj/structure/table/reinforced{icon_state = "table"},/obj/item/weapon/reagent_containers/food/snacks/chips,/turf/simulated/floor,/area/engine/break_room) "cjT" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor,/area/engine/break_room) -"cjU" = (/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"},/obj/structure/closet/wardrobe/engineering_yellow,/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) +"cjU" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve) "cjV" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/manifold{pipe_color = "blue"; dir = 8; icon_state = "manifold-b-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) "cjW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) "cjX" = (/turf/simulated/wall/r_wall,/area/engine/storage_hard) @@ -5970,7 +5970,7 @@ "ckP" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/engine/break_room) "ckQ" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 27},/turf/simulated/floor{dir = 4; icon_state = "caution"},/area/engine/break_room) "ckR" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor,/area/engine/break_room) -"ckS" = (/obj/machinery/atmospherics/unary/vent_pump,/obj/structure/closet/wardrobe/engineering_yellow,/obj/structure/window/reinforced/tinted{dir = 4; icon_state = "twindow"; opacity = 0},/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) +"ckS" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "misclab"; name = "Test Chamber Blast Doors"; opacity = 0},/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/general/visible,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/floor{icon_state = "white"},/area/toxins/telesci) "ckT" = (/obj/machinery/door/airlock/glass_command{name = "Chief Engineer"; req_access_txt = "56"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/firedoor/border_only{dir = 1; layer = 2.4; name = "Engineering Firelock"},/turf/simulated/floor,/area/engine/chiefs_office) "ckU" = (/turf/simulated/wall/r_wall,/area/engine/engineering) "ckV" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/engine/chiefs_office) @@ -5979,7 +5979,7 @@ "ckY" = (/obj/structure/closet/wardrobe/engineering_yellow,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{dir = 8; icon_state = "caution"},/area/engine/break_room) "ckZ" = (/obj/machinery/computer/security/engineering,/turf/simulated/floor{dir = 4; icon_state = "caution"},/area/engine/break_room) "cla" = (/obj/machinery/door/airlock/engineering{name = "Engineering Washroom"; req_one_access_txt = "11;24"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/firedoor/border_only{dir = 1; layer = 2.4; name = "Engineering Firelock"},/turf/simulated/floor,/area/crew_quarters/sleep/engi) -"clb" = (/obj/structure/window/reinforced/tinted{dir = 4; icon_state = "twindow"; opacity = 0},/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"; opacity = 0},/obj/structure/closet/wardrobe/engineering_yellow,/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) +"clb" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/turf/unsimulated/beach/sand,/area/beach) "clc" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/atmos) "cld" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple{icon_state = "intact-g"; dir = 6; level = 2; pipe_color = "green"},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/atmos) "cle" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple{pipe_color = "green"; dir = 9; icon_state = "intact-g"; level = 2},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/atmos) @@ -6071,7 +6071,7 @@ "cmM" = (/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{dir = 2},/turf/simulated/floor/plating/airless,/area/maintenance/portsolar) "cmN" = (/obj/structure/closet/crate,/obj/item/clothing/mask/gas,/obj/item/clothing/mask/gas,/turf/simulated/floor/plating,/area/maintenance/aft) "cmO" = (/obj/item/weapon/cable_coil{amount = 5},/turf/simulated/floor/plating,/area/maintenance/aft) -"cmP" = (/obj/effect/decal/cleanable/oil,/turf/simulated/floor/plating,/area/maintenance/aft) +"cmP" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/turf/unsimulated/beach/sand,/area/beach) "cmQ" = (/obj/machinery/portable_atmospherics/pump,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/atmos) "cmR" = (/turf/simulated/wall/r_wall,/area/engine/storage) "cmS" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"},/turf/simulated/wall/r_wall,/area/engine/storage) @@ -6586,7 +6586,7 @@ "cwH" = (/turf/simulated/floor/holofloor{icon_state = "carpet1-0"; dir = 4},/area/holodeck/source_theatre) "cwI" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/glass_engineering{name = "Engineering Lobby"; req_one_access_txt = "0"},/obj/machinery/door/firedoor/border_only{dir = 1; layer = 2.4; name = "Engineering Firelock"},/turf/simulated/floor{dir = 8; icon_state = "cautioncorner"},/area/hallway/primary/aft) "cwJ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/airlock/glass_engineering{name = "Engineering Lobby"; req_one_access_txt = "0"},/obj/machinery/door/firedoor/border_only{dir = 1; layer = 2.4; name = "Engineering Firelock"},/turf/simulated/floor,/area/hallway/primary/aft) -"cwK" = (/obj/structure/stool/bed,/obj/machinery/door/window{dir = 2},/obj/item/weapon/bedsheet/rd,/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/item/weapon/storage/secure/safe{pixel_y = 25},/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi) +"cwK" = (/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/turf/simulated/floor,/area/derelict/bridge) "cwL" = (/turf/simulated/floor/holofloor{dir = 10; icon_state = "green"},/area/holodeck/source_emptycourt) "cwM" = (/turf/simulated/floor/holofloor{dir = 2; icon_state = "green"},/area/holodeck/source_emptycourt) "cwN" = (/turf/simulated/floor/holofloor{dir = 6; icon_state = "green"},/area/holodeck/source_emptycourt) @@ -6659,9 +6659,9 @@ "cyc" = (/turf/space/transit/east/shuttlespace_ew4,/area/shuttle/escape_pod3/transit) "cyd" = (/turf/space/transit/east/shuttlespace_ew5,/area/shuttle/escape_pod3/transit) "cye" = (/obj/structure/flora/grass/green,/turf/simulated/floor/holofloor{icon_state = "snow"},/area/holodeck/source_snowfield) -"cyf" = (/obj/effect/landmark{name = "Holding Facility"},/turf/unsimulated/floor{icon_state = "engine"},/area/centcom/holding) -"cyg" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{name = "plating"},/area/centcom/holding) -"cyh" = (/turf/unsimulated/floor{icon_state = "delivery"},/area/centcom/holding) +"cyf" = (/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/turf/simulated/floor,/area/derelict/bridge/access) +"cyg" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor,/area/derelict/bridge) +"cyh" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/turf/simulated/floor{icon_state = "bar"},/area/mine/living_quarters) "cyi" = (/turf/simulated/floor/holofloor{dir = 10; icon_state = "red"},/area/holodeck/source_basketball) "cyj" = (/turf/simulated/floor/holofloor{dir = 2; icon_state = "red"},/area/holodeck/source_basketball) "cyk" = (/turf/simulated/floor/holofloor{dir = 6; icon_state = "red"},/area/holodeck/source_basketball) @@ -6674,9 +6674,7 @@ "cyr" = (/turf/space/transit/east/shuttlespace_ew15,/area/shuttle/escape_pod3/transit) "cys" = (/turf/space/transit/east/shuttlespace_ew1,/area/shuttle/escape_pod3/transit) "cyt" = (/obj/structure/flora/tree/dead,/turf/simulated/floor/holofloor{icon_state = "snow"},/area/holodeck/source_snowfield) -"cyu" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{name = "plating"},/area/centcom/holding) -"cyv" = (/obj/structure/stool{pixel_y = 8},/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/holding) -"cyw" = (/obj/structure/table,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/holding) +"cyu" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/turf/simulated/floor{icon_state = "bar"},/area/mine/living_quarters) "cyx" = (/turf/simulated/floor/holofloor{dir = 9; icon_state = "green"},/area/holodeck/source_basketball) "cyy" = (/turf/simulated/floor/holofloor{dir = 1; icon_state = "green"},/area/holodeck/source_basketball) "cyz" = (/turf/simulated/floor/holofloor{dir = 5; icon_state = "green"},/area/holodeck/source_basketball) @@ -6906,7 +6904,7 @@ "cCP" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 2; name = "thrower_throwdown"; tiles = 0},/turf/space/transit/north/shuttlespace_ns12,/area) "cCQ" = (/obj/structure/table,/obj/machinery/microwave,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start) "cCR" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start) -"cCS" = (/obj/machinery/vending/cola,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/holding) +"cCS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/quartermaster/office) "cCT" = (/obj/machinery/computer/syndicate_station{req_access_txt = "0"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start) "cCU" = (/obj/structure/table,/obj/machinery/door_control{id = "syndieshutters"; name = "remote shutter control"; req_access_txt = "150"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start) "cCV" = (/obj/structure/computerframe,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start) @@ -7118,7 +7116,6 @@ "cGT" = (/obj/machinery/atm{pixel_y = 24},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/centcom/living) "cGU" = (/obj/structure/stool{pixel_y = 8},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/centcom/living) "cGV" = (/obj/item/weapon/reagent_containers/food/condiment/peppermill{pixel_x = 2; pixel_y = 6},/obj/structure/table,/turf/unsimulated/floor{icon_state = "redyellowfull"},/area/centcom/living) -"cGW" = (/obj/item/weapon/reagent_containers/food/drinks/cola,/obj/structure/table,/turf/unsimulated/floor{icon_state = "redyellowfull"},/area/centcom/living) "cGX" = (/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/centcom/living) "cGY" = (/obj/machinery/vending/cola,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/centcom/living) "cGZ" = (/obj/machinery/vending/cigarette,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/centcom/living) @@ -7128,7 +7125,6 @@ "cHd" = (/turf/unsimulated/wall{desc = "Why it no open!"; icon_state = "pdoor1"; name = "Shuttle Bay Blast Door"},/area/centcom/suppy) "cHe" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_r"; dir = 4},/turf/space,/area/shuttle/administration/centcom) "cHf" = (/turf/unsimulated/floor{name = "plating"},/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/shuttle/administration/centcom) -"cHg" = (/obj/item/weapon/reagent_containers/food/drinks/beer,/obj/structure/table,/turf/unsimulated/floor{icon_state = "redyellowfull"},/area/centcom/living) "cHh" = (/obj/structure/table,/obj/machinery/juicer{pixel_y = 6},/turf/unsimulated/floor{icon_state = "redyellowfull"},/area/centcom/living) "cHi" = (/obj/machinery/door/airlock/external,/turf/unsimulated/floor{name = "plating"},/area/centcom/living) "cHj" = (/turf/unsimulated/floor{name = "plating"},/area/centcom/living) @@ -7472,14 +7468,14 @@ "cNJ" = (/obj/structure/rack,/obj/item/clothing/under/syndicate/combat,/obj/item/clothing/shoes/galoshes,/obj/item/clothing/gloves/purple,/obj/item/clothing/suit/bio_suit/janitor,/obj/item/clothing/head/bio_hood/janitor,/obj/item/device/radio/headset/ert,/obj/item/clothing/mask/breath,/obj/item/clothing/glasses/science,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops) "cNK" = (/obj/structure/table/reinforced,/obj/item/clothing/mask/gas,/obj/item/weapon/storage/backpack/security,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/storage/box,/obj/item/weapon/tank/emergency_oxygen/double,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops) "cNL" = (/obj/machinery/telecomms/relay/preset/centcom,/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/creed) -"cNM" = (/turf/unsimulated/beach/water,/area/centcom/holding) +"cNM" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/o2{layer = 2.8; pixel_x = 4; pixel_y = 6},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/fire{layer = 2.9; pixel_x = 2; pixel_y = 3},/turf/unsimulated/floor{dir = 0; icon_state = "whitegreen"},/area/centcom/holding) "cNN" = (/obj/structure/table,/obj/item/device/assembly/signaler,/obj/item/weapon/handcuffs,/obj/item/weapon/melee/classic_baton,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/control) "cNO" = (/obj/machinery/door/airlock/external,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/specops) "cNP" = (/obj/structure/table/woodentable{dir = 9},/obj/item/weapon/reagent_containers/food/drinks/flask,/obj/item/clothing/mask/cigarette/cigar/havana,/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/creed) "cNQ" = (/obj/machinery/computer/security/telescreen{name = "Spec. Ops. Monitor"; network = list("ERT")},/obj/structure/table/woodentable{dir = 5},/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/creed) "cNR" = (/obj/structure/table/woodentable{dir = 5},/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/creed) "cNS" = (/obj/machinery/computer/card/centcom,/obj/item/weapon/card/id/centcom,/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/creed) -"cNT" = (/obj/machinery/vending/cigarette,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/holding) +"cNT" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/adv{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/firstaid/adv{pixel_x = -2},/turf/unsimulated/floor{dir = 0; icon_state = "whitegreen"},/area/centcom/holding) "cNU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor,/area/centcom/control) "cNV" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/centcom/specops) "cNW" = (/turf/unsimulated/floor{icon_state = "loadingarea"},/area/centcom/specops) @@ -7503,47 +7499,45 @@ "cOo" = (/obj/machinery/camera{c_tag = "Spec. Ops. Shuttle"; dir = 2; network = list("ERT")},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom) "cOp" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom) "cOq" = (/obj/structure/stool/bed/chair,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom) -"cOr" = (/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/holding) -"cOs" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom) -"cOt" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom) -"cOu" = (/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"cOr" = (/obj/structure/stool/bed/roller,/turf/unsimulated/floor{dir = 0; icon_state = "whitegreen"},/area/centcom/holding) +"cOs" = (/obj/structure/table,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/unsimulated/floor{dir = 6; icon_state = "whitegreen"},/area/centcom/holding) +"cOt" = (/obj/machinery/iv_drip,/turf/unsimulated/floor{tag = "icon-whitecorner (NORTH)"; icon_state = "whitecorner"; dir = 1},/area/centcom/holding) +"cOu" = (/obj/machinery/computer/operating,/turf/unsimulated/floor{dir = 1; icon_state = "whitehall"; tag = "icon-whitehall (SOUTHEAST)"},/area/centcom/holding) "cOv" = (/obj/structure/stool/bed/chair{dir = 1},/obj/machinery/computer/security/telescreen{desc = ""; name = "Spec. Ops. Monitor"; network = list("ERT"); pixel_y = 30},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom) "cOw" = (/obj/machinery/door/airlock/external,/obj/machinery/door/poddoor{icon_state = "pdoor1"; id = "NTrasen"; name = "Outer Airlock"; p_open = 0},/turf/simulated/shuttle/plating,/area/shuttle/specops/centcom) "cOx" = (/turf/simulated/shuttle/plating,/area/shuttle/specops/centcom) "cOy" = (/turf/unsimulated/wall,/area/centcom/ferry) -"cOz" = (/obj/structure/rack,/obj/item/weapon/storage/fancy/crayons,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/holding) -"cOA" = (/obj/structure/stool{pixel_y = 8},/obj/machinery/computer/security/telescreen{name = "Entertainment monitor"; desc = "Damn, they better have /tg/thechannel on these things."; icon_state = "entertainment"; pixel_y = -30},/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/holding) +"cOz" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/shuttle/plating,/area/centcom/holding) +"cOA" = (/obj/structure/table,/obj/item/weapon/storage/box/gloves{pixel_x = -4; pixel_y = -3; pixel_x = 3; pixel_y = 4},/obj/item/weapon/storage/box/masks{pixel_x = 4; pixel_y = 5; pixel_x = 0; pixel_y = 0},/turf/unsimulated/floor{dir = 4; icon_state = "whitegreen"},/area/centcom/holding) "cOB" = (/turf/simulated/shuttle/wall{icon_state = "swall_s6"; dir = 2},/area/shuttle/escape/centcom) -"cOC" = (/turf/unsimulated/beach/coastline,/area/centcom/holding) -"cOD" = (/obj/machinery/vending/snack,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/holding) -"cOE" = (/obj/item/clothing/head/collectable/paper,/turf/unsimulated/beach/coastline,/area/centcom/holding) +"cOE" = (/turf/unsimulated/floor{icon_state = "white"},/area/centcom/holding) "cOF" = (/turf/simulated/shuttle/wall{icon_state = "swall_s10"; dir = 2},/area/shuttle/escape/centcom) "cOG" = (/obj/machinery/computer/pod{id = "NTrasen"; name = "Hull Door Control"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom) "cOH" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom) "cOI" = (/turf/space,/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/shuttle/specops/centcom) -"cOJ" = (/obj/machinery/vending/wallmed1{name = "Emergency NanoMed"; pixel_x = 28; req_access_txt = "0"},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) -"cOK" = (/obj/machinery/vending/coffee,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/holding) +"cOJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/shuttle/plating,/area/centcom/holding) +"cOK" = (/turf/unsimulated/floor{dir = 4; icon_state = "whitegreen"},/area/centcom/holding) "cOL" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/extinguisher,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) "cOM" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) "cON" = (/obj/machinery/computer/shuttle,/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) -"cOO" = (/turf/unsimulated/beach/sand,/area/centcom/holding) -"cOP" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom) +"cOO" = (/obj/machinery/body_scanconsole,/turf/unsimulated/floor{tag = "icon-whitehall (EAST)"; icon_state = "whitehall"; dir = 4},/area/centcom/holding) +"cOP" = (/obj/structure/table,/obj/item/weapon/storage/box/gloves{pixel_x = -4; pixel_y = -3; pixel_x = 3; pixel_y = 4},/obj/item/weapon/storage/box/masks{pixel_x = 4; pixel_y = 5; pixel_x = 0; pixel_y = 0},/obj/item/weapon/reagent_containers/spray/cleaner,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding) "cOQ" = (/obj/structure/shuttle/engine/propulsion{icon_state = "burst_r"; dir = 4},/turf/space,/area/shuttle/specops/centcom) "cOR" = (/obj/machinery/door/poddoor{id = "CentComPort"; name = "Security Doors"},/turf/unsimulated/floor{icon_state = "green"; dir = 8},/area/centcom/control) -"cOS" = (/obj/structure/rack,/obj/item/clothing/head/that{pixel_x = 4; pixel_y = 6},/obj/item/clothing/under/suit_jacket,/obj/item/clothing/suit/wcoat,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/holding) -"cOT" = (/obj/item/weapon/beach_ball,/turf/unsimulated/beach/sand,/area/centcom/holding) -"cOU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/unsimulated/floor{name = "plating"},/area/centcom/evac) +"cOS" = (/turf/unsimulated/floor{tag = "icon-whitehall (EAST)"; icon_state = "whitehall"; dir = 4},/area/centcom/holding) +"cOT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/shuttle/plating,/area/centcom/holding) +"cOU" = (/turf/unsimulated/floor{dir = 2; icon_state = "whitegreencorner"},/area/centcom/holding) "cOV" = (/turf/simulated/shuttle/wall{icon_state = "swall3"; dir = 2},/area/shuttle/escape/centcom) "cOW" = (/obj/machinery/computer/atmos_alert,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) "cOX" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) "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/machinery/computer/security,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) -"cPb" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{name = "plating"},/area/centcom/evac) -"cPc" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{name = "plating"},/area/centcom/evac) +"cPb" = (/turf/unsimulated/floor{dir = 1; icon_state = "whitegreencorner"},/area/centcom/holding) +"cPc" = (/turf/unsimulated/floor{dir = 4; icon_state = "whitegreencorner"},/area/centcom/holding) "cPd" = (/obj/machinery/computer/crew,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) -"cPe" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom) -"cPf" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom) +"cPe" = (/obj/structure/table,/obj/item/weapon/retractor{pixel_x = 0; pixel_y = 6},/obj/item/weapon/scalpel,/turf/unsimulated/floor{dir = 2; icon_state = "whitehall"; tag = "icon-whitehall (SOUTHEAST)"},/area/centcom/holding) +"cPf" = (/obj/machinery/bodyscanner,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding) "cPg" = (/turf/unsimulated/wall{desc = "Why it no open!"; icon_state = "pdoor1"; name = "Shuttle Bay Blast Door"},/area/centcom/ferry) "cPh" = (/turf/unsimulated/floor{icon_state = "warnplate"; dir = 8},/area/centcom/ferry) "cPi" = (/turf/unsimulated/floor{name = "plating"},/area/centcom/ferry) @@ -7563,7 +7557,7 @@ "cPw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/plating,/area/shuttle/transport1/centcom) "cPx" = (/turf/simulated/shuttle/wall{icon_state = "swall14"; dir = 2},/area/shuttle/transport1/centcom) "cPy" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"; dir = 8},/turf/space,/area/shuttle/transport1/centcom) -"cPz" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{name = "plating"},/area/centcom/evac) +"cPz" = (/obj/structure/table,/obj/item/weapon/reagent_containers/blood/OPlus{pixel_x = 4; pixel_y = 2},/obj/item/weapon/reagent_containers/blood/OPlus{pixel_x = 4; pixel_y = 2},/obj/item/weapon/reagent_containers/blood/OMinus{pixel_x = -5; pixel_y = -1},/obj/item/weapon/reagent_containers/blood/OMinus{pixel_x = -5; pixel_y = -1},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding) "cPA" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) "cPB" = (/turf/simulated/shuttle/floor,/turf/simulated/shuttle/wall{icon_state = "swall_f9"; dir = 2},/area/shuttle/transport1/centcom) "cPC" = (/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom) @@ -7573,92 +7567,89 @@ "cPG" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating/airless,/area/shuttle/transport1/centcom) "cPH" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"; dir = 8},/obj/structure/window/reinforced,/turf/space,/area/shuttle/transport1/centcom) "cPI" = (/obj/machinery/vending/coffee,/turf/unsimulated/floor{icon_state = "green"; dir = 8},/area/centcom/control) -"cPJ" = (/obj/machinery/status_display,/turf/simulated/shuttle/wall{icon_state = "swall11"; dir = 2},/area/shuttle/escape/centcom) +"cPJ" = (/obj/structure/table,/obj/item/weapon/cautery{pixel_y = 4},/obj/item/weapon/hemostat{pixel_y = 4},/turf/unsimulated/floor{dir = 2; icon_state = "whitehall"; tag = "icon-whitehall (SOUTHEAST)"},/area/centcom/holding) "cPK" = (/turf/unsimulated/floor{icon_state = "grass1"; name = "grass"},/area/centcom/evac) "cPL" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) "cPM" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) "cPN" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom) "cPO" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom) -"cPP" = (/obj/structure/closet/emcloset,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) -"cPQ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom) -"cPR" = (/obj/structure/stool{pixel_y = 8},/turf/unsimulated/beach/sand,/area/centcom/holding) +"cPP" = (/obj/structure/table,/obj/item/weapon/FixOVein{pixel_x = -6; pixel_y = 1},/turf/unsimulated/floor{tag = "icon-whitecorner"; name = "plating"; icon_state = "whitecorner"},/area/centcom/holding) +"cPQ" = (/obj/structure/table,/obj/item/weapon/surgicaldrill,/obj/item/weapon/circular_saw,/turf/unsimulated/floor{tag = "icon-whitecorner (WEST)"; icon_state = "whitecorner"; dir = 8},/area/centcom/holding) +"cPR" = (/obj/structure/table,/obj/item/weapon/bonesetter,/obj/item/weapon/bonegel{pixel_x = 4; pixel_y = 3},/turf/unsimulated/floor{dir = 2; icon_state = "whitehall"; tag = "icon-whitehall (SOUTHEAST)"},/area/centcom/holding) "cPS" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) -"cPT" = (/obj/effect/overlay/palmtree_r,/obj/effect/overlay/coconut,/turf/unsimulated/beach/sand,/area/centcom/holding) +"cPT" = (/obj/machinery/sleep_console{icon_state = "sleeperconsole-r"; orient = "RIGHT"},/turf/unsimulated/floor{dir = 8; icon_state = "whitehall"; tag = "icon-whitehall (EAST)"},/area/centcom/holding) "cPU" = (/turf/simulated/shuttle/wall{icon_state = "swall_s5"; dir = 2},/area/shuttle/transport1/centcom) "cPV" = (/turf/simulated/shuttle/floor,/turf/simulated/shuttle/wall{icon_state = "swall_f10"; dir = 2},/area/shuttle/transport1/centcom) "cPW" = (/turf/simulated/shuttle/floor,/turf/simulated/shuttle/wall{icon_state = "swall_f6"; dir = 2},/area/shuttle/transport1/centcom) "cPX" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom) "cPY" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/shuttle/transport1/centcom) "cPZ" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"; dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/space,/area/shuttle/transport1/centcom) -"cQa" = (/obj/structure/table,/obj/item/weapon/dice/d20,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/holding) -"cQb" = (/obj/structure/stool{pixel_y = 8},/obj/item/clothing/head/bandana{pixel_y = -10},/obj/item/clothing/glasses/sunglasses,/turf/unsimulated/beach/sand,/area/centcom/holding) +"cQa" = (/turf/unsimulated/floor{dir = 9; icon_state = "whitegreen"},/area/centcom/holding) +"cQb" = (/turf/unsimulated/floor{dir = 5; icon_state = "whitegreen"},/area/centcom/holding) "cQc" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/turf/unsimulated/wall,/area/centcom/ferry) -"cQd" = (/obj/structure/table,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/holding) -"cQe" = (/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/holding) -"cQf" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/shaker,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/holding) -"cQg" = (/obj/structure/table,/obj/item/weapon/lighter/zippo,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/holding) +"cQd" = (/obj/machinery/sleeper{icon_state = "sleeper_0-r"; orient = "RIGHT"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding) +"cQe" = (/turf/unsimulated/floor{dir = 10; icon_state = "whitegreen"},/area/centcom/holding) +"cQf" = (/turf/unsimulated/floor{dir = 6; icon_state = "whitegreen"},/area/centcom/holding) +"cQg" = (/turf/unsimulated/floor{dir = 8; icon_state = "whitegreencorner"},/area/centcom/holding) "cQh" = (/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/evac) -"cQi" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/cola,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/holding) -"cQj" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/obj/item/weapon/crowbar,/obj/item/weapon/extinguisher,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"cQi" = (/obj/machinery/atmospherics/pipe/tank/oxygen{dir = 1; volume = 3200},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding) +"cQj" = (/obj/structure/table,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 5; pixel_y = 5},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 0; pixel_y = 0},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 7; pixel_y = 1},/turf/unsimulated/floor{dir = 8; icon_state = "whitegreen"},/area/centcom/holding) "cQk" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) -"cQl" = (/obj/machinery/door/airlock/external{name = "Arrival Airlock"},/turf/unsimulated/floor{name = "plating"},/area/centcom/evac) +"cQl" = (/turf/unsimulated/floor{tag = "icon-escapecorner (EAST)"; icon_state = "escapecorner"; dir = 4},/area/centcom/holding) "cQm" = (/turf/simulated/shuttle/wall{icon_state = "swall_s9"; dir = 2},/area/shuttle/transport1/centcom) "cQn" = (/turf/simulated/shuttle/wall{icon_state = "swall13"; dir = 2},/area/shuttle/transport1/centcom) -"cQo" = (/turf/unsimulated/floor{name = "plating"},/area/centcom/evac) -"cQp" = (/obj/structure/table,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/holding) -"cQq" = (/obj/item/device/camera,/turf/unsimulated/beach/sand,/area/centcom/holding) -"cQr" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/centcom/control) -"cQs" = (/obj/structure/table,/obj/item/clothing/head/that{pixel_x = 4; pixel_y = 6},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/holding) -"cQt" = (/turf/unsimulated/floor{dir = 6; icon_state = "warning"},/area/centcom/control) -"cQu" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{name = "plating"},/area/centcom/evac) -"cQv" = (/obj/effect/overlay/palmtree_l,/turf/unsimulated/beach/sand,/area/centcom/holding) +"cQo" = (/obj/machinery/door/airlock/centcom{name = "Thunderdome"; opacity = 1; req_access_txt = "101"},/turf/unsimulated/floor{icon_state = "floor"},/area/tdome) +"cQp" = (/obj/machinery/atmospherics/pipe/simple{dir = 6; layer = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/holding) +"cQq" = (/turf/unsimulated/floor{dir = 8; icon_state = "whitegreen"},/area/centcom/holding) +"cQr" = (/obj/machinery/atmospherics/pipe/manifold{dir = 4; layer = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/holding) +"cQs" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/vending/wallmed1{name = "Emergency NanoMed"; pixel_x = 28; req_access_txt = "0"},/turf/unsimulated/floor{tag = "icon-whitecorner (NORTH)"; icon_state = "whitecorner"; dir = 1},/area/centcom/holding) +"cQt" = (/turf/unsimulated/floor{tag = "icon-whitehall (NORTHWEST)"; icon_state = "whitehall"; dir = 9},/area/centcom/holding) +"cQu" = (/obj/structure/sign/nosmoking_2{pixel_x = 28; pixel_y = 0},/turf/unsimulated/floor{dir = 4; icon_state = "whitegreencorner"},/area/centcom/holding) +"cQv" = (/turf/unsimulated/floor{tag = "icon-whitehall (NORTHEAST)"; icon_state = "whitehall"; dir = 5},/area/centcom/holding) "cQw" = (/turf/unsimulated/floor{icon_state = "warning"},/area/centcom/evac) -"cQx" = (/obj/machinery/computer/arcade,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/holding) -"cQy" = (/obj/structure/rack,/obj/item/device/camera,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/holding) +"cQy" = (/obj/structure/closet/secure_closet/medical2,/turf/unsimulated/floor{tag = "icon-escapecorner (EAST)"; icon_state = "escapecorner"; dir = 4},/area/centcom/holding) "cQz" = (/turf/unsimulated/wall,/area/centcom/holding) -"cQA" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/holding) -"cQB" = (/obj/structure/rack,/obj/item/toy/gun,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/holding) -"cQC" = (/obj/structure/rack,/obj/item/toy/sword,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/holding) -"cQD" = (/obj/structure/closet/secure_closet/bar{req_access_txt = "25"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/holding) -"cQE" = (/obj/structure/reagent_dispensers/beerkeg,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/holding) -"cQF" = (/obj/machinery/vending/boozeomat,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/holding) -"cQG" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom) -"cQH" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/turf/unsimulated/wall,/area/centcom/evac) -"cQI" = (/obj/structure/stool/bed/chair{dir = 8},/turf/unsimulated/floor{dir = 4; heat_capacity = 1; icon_state = "warning"},/area/centcom/control) -"cQJ" = (/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/unsimulated/floor{icon_state = "warning"; dir = 1; heat_capacity = 1},/area/centcom/evac) -"cQK" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/centcom/evac) -"cQL" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom) -"cQM" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/centcom/control) -"cQN" = (/obj/machinery/door/airlock/external{name = "Arrival Airlock"},/turf/unsimulated/floor{name = "plating"},/area/centcom/holding) -"cQO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/centcom/control) -"cQP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom) +"cQA" = (/turf/unsimulated/beach/sand{tag = "icon-seashallow"; icon_state = "seashallow"},/area/centcom/ferry) +"cQB" = (/turf/unsimulated/beach/sand{tag = "icon-beachcorner"; icon_state = "beachcorner"},/area/centcom/ferry) +"cQD" = (/turf/unsimulated/beach/sand{tag = "icon-beach (SOUTHEAST)"; icon_state = "beach"; dir = 6},/area/centcom/ferry) +"cQE" = (/turf/unsimulated/beach/sand{tag = "icon-seashallow"; icon_state = "seashallow"},/area/centcom/holding) +"cQF" = (/turf/unsimulated/beach/sand{tag = "icon-desert"; icon_state = "desert"},/area/centcom/ferry) +"cQG" = (/obj/machinery/atmospherics/pipe/simple{dir = 9; layer = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/holding) +"cQH" = (/obj/machinery/optable,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/holding) +"cQI" = (/obj/machinery/door/airlock/medical{name = "Operating Theatre"; req_access_txt = "45"},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/holding) +"cQJ" = (/obj/machinery/atmospherics/pipe/manifold4w{layer = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/holding) +"cQK" = (/obj/machinery/atmospherics/pipe/manifold{layer = 1},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/holding) +"cQL" = (/obj/machinery/atmospherics/pipe/simple{dir = 5; icon_state = "intact-f"; layer = 1},/turf/unsimulated/floor{dir = 8; icon_state = "whitegreencorner"},/area/centcom/holding) +"cQM" = (/obj/structure/stool/bed/roller,/turf/unsimulated/floor{dir = 4; icon_state = "whitegreenfull"},/area/centcom/holding) +"cQN" = (/obj/machinery/atmospherics/unary/cryo_cell,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding) +"cQO" = (/turf/unsimulated/beach/sand{tag = "icon-desert"; icon_state = "desert"},/turf/unsimulated/beach/sand{tag = "icon-coconuts"; icon_state = "coconuts"},/area/centcom/ferry) +"cQP" = (/obj/machinery/atmospherics/unary/cold_sink/freezer{current_temperature = 75; dir = 0; on = 1},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding) "cQQ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/centcom/control) -"cQR" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom) +"cQR" = (/obj/machinery/vending/wallmed1{name = "Emergency NanoMed"; pixel_x = 0; pixel_y = 29; req_access_txt = "0"},/turf/unsimulated/floor{dir = 4; icon_state = "whitegreencorner"},/area/centcom/holding) "cQS" = (/turf/unsimulated/floor{icon_state = "warning"; dir = 1; heat_capacity = 1},/area/centcom/evac) -"cQT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/centcom/control) -"cQU" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{name = "plating"},/area/centcom/evac) -"cQV" = (/obj/structure/stool/bed/chair{dir = 4},/turf/unsimulated/floor{dir = 8; heat_capacity = 1; icon_state = "warning"},/area/centcom/control) -"cQW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/centcom/ferry) -"cQX" = (/turf/unsimulated/floor{icon_state = "warnplate"; dir = 4},/area/centcom/ferry) -"cQY" = (/obj/structure/stool/bed/chair{dir = 8},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 31},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) -"cQZ" = (/obj/structure/stool/bed/chair{dir = 4},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) -"cRa" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/unsimulated/floor{name = "plating"},/area/centcom/evac) +"cQU" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/centcom/evac) +"cQV" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/centcom/evac) +"cQW" = (/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Arrivals Medbay"; req_access_txt = "0"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding) +"cQX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/centcom/evac) +"cQY" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/centcom/holding) +"cQZ" = (/turf/unsimulated/floor{icon_state = "grass1"; name = "grass"},/area/centcom/holding) +"cRa" = (/turf/unsimulated/floor{icon_state = "greencorner"; dir = 8},/area/centcom/holding) "cRb" = (/obj/structure/stool/bed/chair,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) -"cRc" = (/turf/unsimulated/floor{dir = 4; heat_capacity = 1; icon_state = "warning"},/area/centcom/control) -"cRd" = (/obj/machinery/door/airlock/external{name = "Arrival Airlock"},/turf/unsimulated/floor{name = "plating"},/area/centcom/ferry) -"cRe" = (/turf/unsimulated/floor{dir = 8; heat_capacity = 1; icon_state = "warning"},/area/centcom/control) -"cRf" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom) -"cRg" = (/obj/machinery/vending/wallmed1{name = "Emergency NanoMed"; req_access_txt = "0"},/turf/simulated/shuttle/wall{icon_state = "swall3"; dir = 2},/area/shuttle/escape/centcom) -"cRh" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/centcom/ferry) -"cRi" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) +"cRc" = (/obj/machinery/vending/cigarette,/turf/unsimulated/floor{icon_state = "green"; dir = 10},/area/centcom/holding) +"cRd" = (/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding) +"cRe" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/shuttle/escape/centcom) +"cRf" = (/obj/machinery/door/airlock/glass{name = "Arrivals Processing"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding) +"cRg" = (/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/beach/sand{tag = "icon-seashallow"; icon_state = "seashallow"},/area/centcom/holding) +"cRh" = (/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/beach/sand{tag = "icon-beach (SOUTHEAST)"; icon_state = "beach"; dir = 6},/area/centcom/holding) +"cRi" = (/turf/unsimulated/beach/sand{tag = "icon-beach"; icon_state = "beach"},/area/centcom/ferry) "cRj" = (/turf/unsimulated/wall,/area/tdome) "cRk" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/tdome) "cRl" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/tdome) "cRm" = (/obj/machinery/door/airlock/centcom{name = "General Access"; opacity = 1; req_access_txt = "101"},/turf/unsimulated/floor{icon_state = "floor"},/area/tdome) "cRn" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/tdome) "cRo" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/tdome) -"cRp" = (/obj/machinery/computer/communications,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) -"cRq" = (/obj/machinery/atm{pixel_x = 24},/turf/unsimulated/floor{icon_state = "green"; dir = 4},/area/centcom/control) +"cRp" = (/turf/unsimulated/beach/sand{tag = "icon-desert2"; icon_state = "desert2"},/area/centcom/ferry) +"cRq" = (/obj/effect/overlay/palmtree_l,/turf/unsimulated/beach/sand{tag = "icon-desert"; icon_state = "desert"},/area/centcom/ferry) "cRr" = (/obj/structure/table,/turf/unsimulated/floor{icon_state = "floor"},/area/tdome) "cRs" = (/turf/unsimulated/floor{icon_state = "floor"},/area/tdome) "cRt" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/tdome) @@ -7666,43 +7657,41 @@ "cRv" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome) "cRw" = (/turf/unsimulated/floor{icon_state = "neutral"; dir = 4},/area/tdome) "cRx" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/tdome) -"cRy" = (/obj/structure/stool/bed/chair{dir = 1},/turf/unsimulated/floor{icon_state = "delivery"},/area/centcom/control) -"cRz" = (/obj/machinery/vending/cigarette,/turf/unsimulated/floor{icon_state = "green"; dir = 4},/area/centcom/control) -"cRA" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "CentComPort"; name = "Security Doors"; opacity = 0},/turf/unsimulated/floor{icon_state = "green"; dir = 8},/area/centcom/control) -"cRB" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "CentComPort"; name = "Security Doors"; opacity = 0},/turf/unsimulated/floor{icon_state = "green"; dir = 4},/area/centcom/control) +"cRy" = (/obj/machinery/door/airlock/external{name = "Arrivals Airlock"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/evac) +"cRz" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/evac) "cRC" = (/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Escape Shuttle Infirmary"; req_access_txt = "0"},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) -"cRD" = (/obj/structure/table,/obj/machinery/door_control{desc = "A remote control switch for port-side blast doors."; icon_state = "doorctrl0"; id = "CentComPort"; name = "Security Doors"; pixel_y = -4; req_access_txt = "101"},/obj/machinery/door/window/southleft{dir = 1; name = "Security"; req_access_txt = "101"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) -"cRE" = (/obj/machinery/door/window/westright{req_access_txt = "101"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) -"cRF" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom) -"cRG" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom) +"cRD" = (/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/holding) +"cRE" = (/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/holding) +"cRF" = (/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/turf/unsimulated/floor{tag = "icon-siding4"; name = "plating"; icon_state = "siding4"},/area/centcom/holding) +"cRG" = (/obj/structure/closet/secure_closet/bar{req_access_txt = "25"},/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/holding) "cRH" = (/obj/structure/stool/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "floor"},/area/tdome) "cRI" = (/obj/structure/table/reinforced{dir = 4; icon_state = "reinf_tabledir"},/turf/unsimulated/floor{icon_state = "floor"},/area/tdome) "cRJ" = (/obj/structure/table/reinforced{dir = 8; icon_state = "reinf_tabledir"},/turf/unsimulated/floor{icon_state = "floor"},/area/tdome) "cRK" = (/obj/structure/stool/bed/chair{dir = 8},/turf/unsimulated/floor{icon_state = "floor"},/area/tdome) "cRL" = (/obj/machinery/sleeper,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) "cRM" = (/obj/machinery/sleep_console,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) -"cRN" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom) +"cRN" = (/obj/structure/table/woodentable{dir = 5},/obj/machinery/chem_dispenser/beer,/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/holding) "cRO" = (/obj/machinery/door/airlock/glass_security{name = "Escape Shuttle Cell"; req_access_txt = "2"},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) -"cRP" = (/obj/machinery/door/window/eastleft{req_access_txt = "101"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) -"cRQ" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/obj{anchored = 1; icon_state = "floor3"; layer = 1; name = "floor"},/turf/simulated/shuttle/wall{icon_state = "swall_f9"; dir = 2},/area/shuttle/escape/centcom) -"cRR" = (/turf/unsimulated/floor{icon_state = "green"; dir = 6},/area/centcom/control) -"cRS" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/obj{anchored = 1; icon_state = "floor3"; layer = 1; name = "floor"},/turf/simulated/shuttle/wall{icon_state = "swall_f5"; dir = 2},/area/shuttle/escape/centcom) +"cRP" = (/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) +"cRQ" = (/obj/structure/table/woodentable{dir = 5},/obj/machinery/chem_dispenser/soda,/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/holding) +"cRR" = (/turf/unsimulated/floor{dir = 4; heat_capacity = 1; icon_state = "warning"},/area/centcom/evac) +"cRS" = (/turf/unsimulated/beach/sand{tag = "icon-desert"; icon_state = "desert"},/obj/item/weapon/storage/belt/inflatable,/turf/unsimulated/floor{tag = "icon-siding4"; name = "plating"; icon_state = "siding4"},/area/centcom/holding) "cRT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/tdome) -"cRU" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/obj/item/weapon/crowbar,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) -"cRV" = (/obj/structure/table/reinforced{icon_state = "reinf_tabledir"},/obj/machinery/door/window/southleft{name = "Security"; req_access_txt = ""},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) +"cRU" = (/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/turf/unsimulated/floor{tag = "icon-siding8"; name = "plating"; icon_state = "siding8"},/area/centcom/holding) +"cRV" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom) "cRW" = (/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom) -"cRX" = (/obj/machinery/door/poddoor{id = "CentComPort"; name = "Security Doors"},/turf/unsimulated/floor{icon_state = "green"; dir = 4},/area/centcom/control) -"cRY" = (/obj/machinery/door/airlock/centcom{name = "General Access"; opacity = 1; req_access_txt = "101"},/turf/unsimulated/floor{icon_state = "delivery"},/area/centcom/control) -"cRZ" = (/turf/unsimulated/floor{icon_state = "warning"},/area/centcom/control) -"cSa" = (/obj/structure/table/woodentable,/obj/item/weapon/dice/d20,/obj/item/weapon/dice,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) -"cSb" = (/obj/structure/table/woodentable,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) +"cRX" = (/obj/machinery/vending/wallmed1{name = "Emergency NanoMed"; pixel_x = 28; req_access_txt = "0"},/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/bodybag/cryobag{pixel_x = 5},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"cRY" = (/obj/machinery/door/airlock/glass{name = "Arrivals Processing"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/evac) +"cRZ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/centcom/evac) +"cSa" = (/obj/item/weapon/beach_ball,/turf/unsimulated/beach/sand{tag = "icon-desert_dug"; icon_state = "desert_dug"},/area/centcom/ferry) +"cSb" = (/mob/living/simple_animal/crab,/turf/unsimulated/beach/sand{tag = "icon-desert3"; icon_state = "desert3"},/area/centcom/ferry) "cSc" = (/turf/unsimulated/floor{dir = 8; icon_state = "red"},/area/tdome) "cSd" = (/turf/unsimulated/floor{icon_state = "green"; dir = 4},/area/tdome) -"cSe" = (/obj/structure/stool/bed/chair{dir = 4},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) +"cSe" = (/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/obj/structure/stool/bed/chair/wood/wings{icon_state = "wooden_chair_wings"; dir = 4},/turf/unsimulated/floor{tag = "icon-siding8"; name = "plating"; icon_state = "siding8"},/area/centcom/holding) "cSf" = (/turf/simulated/shuttle/wall{icon_state = "swall1"; dir = 2},/area/shuttle/escape/centcom) -"cSg" = (/obj/structure/rack,/obj/item/clothing/suit/wizrobe/magusblue,/obj/item/clothing/head/wizard/magus,/obj/item/weapon/staff,/turf/unsimulated/floor{icon_state = "grimy"},/area/wizard_station) -"cSh" = (/obj/structure/rack,/obj/item/clothing/suit/wizrobe/marisa,/obj/item/clothing/shoes/sandal/marisa,/obj/item/clothing/head/wizard/marisa,/obj/item/weapon/staff/broom,/turf/unsimulated/floor{icon_state = "grimy"},/area/wizard_station) -"cSi" = (/obj/structure/stool/bed/chair,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) +"cSg" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/spesslaw,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/holding) +"cSh" = (/turf/unsimulated/beach/sand{tag = "icon-desert"; icon_state = "desert"},/turf/unsimulated/floor{tag = "icon-siding4"; name = "plating"; icon_state = "siding4"},/area/centcom/holding) +"cSi" = (/obj/structure/stool/bed/chair/wood/wings{icon_state = "wooden_chair_wings"; dir = 4},/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/holding) "cSj" = (/turf/unsimulated/floor{icon_state = "red"; dir = 10},/area/tdome) "cSk" = (/turf/unsimulated/floor{icon_state = "red"; dir = 2},/area/tdome) "cSl" = (/turf/unsimulated/floor{icon_state = "green"},/area/tdome) @@ -7711,7 +7700,7 @@ "cSo" = (/turf/simulated/shuttle/wall{icon_state = "swall14"; dir = 2},/area/shuttle/escape/centcom) "cSp" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/shuttle/engine/heater,/turf/simulated/floor/plating/airless,/area/shuttle/escape/centcom) "cSq" = (/turf/simulated/shuttle/wall{icon_state = "swall_s9"; dir = 2},/area/shuttle/escape/centcom) -"cSr" = (/obj/structure/table/woodentable,/obj/effect/landmark{name = "Teleport-Scroll"},/turf/unsimulated/floor{dir = 6; icon_state = "carpetside"},/area/wizard_station) +"cSr" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/candiedapple,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/holding) "cSs" = (/obj/structure/shuttle/engine/propulsion,/turf/space,/area/shuttle/escape/centcom) "cSt" = (/obj/machinery/door/airlock/centcom{name = "General Access"; opacity = 1; req_access_txt = "101"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome) "cSu" = (/obj/structure/closet/secure_closet/bar,/turf/unsimulated/floor{icon_state = "white"},/area/tdome) @@ -7719,8 +7708,6 @@ "cSw" = (/obj/machinery/gibber,/turf/unsimulated/floor{icon_state = "white"},/area/tdome) "cSx" = (/obj/machinery/door/airlock/command{name = "Thunderdome"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome) "cSy" = (/obj/machinery/vending/cigarette,/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve) -"cSz" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/beer,/obj/item/weapon/reagent_containers/food/drinks/beer,/obj/item/weapon/reagent_containers/food/drinks/beer,/obj/item/weapon/lighter/zippo,/obj/item/weapon/storage/fancy/cigarettes,/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve) -"cSA" = (/obj/structure/table{icon_state = "tabledir"; dir = 2},/obj/item/weapon/reagent_containers/food/drinks/cola,/obj/item/weapon/reagent_containers/food/drinks/cola,/obj/item/weapon/reagent_containers/food/drinks/cola,/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve) "cSB" = (/obj/structure/reagent_dispensers/beerkeg,/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve) "cSC" = (/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve) "cSD" = (/obj/machinery/vending/coffee,/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve) @@ -7803,10 +7790,8 @@ "cUc" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical,/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin) "cUd" = (/obj/effect/overlay/coconut,/turf/unsimulated/beach/sand,/area/beach) "cUe" = (/obj/effect/overlay/palmtree_r,/turf/unsimulated/beach/sand,/area/beach) -"cUf" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/beer,/obj/item/weapon/reagent_containers/food/drinks/beer,/obj/item/weapon/reagent_containers/food/drinks/beer,/obj/item/weapon/reagent_containers/food/drinks/beer,/obj/item/weapon/reagent_containers/food/drinks/beer,/obj/item/weapon/reagent_containers/food/drinks/beer,/obj/item/weapon/reagent_containers/food/drinks/beer,/turf/unsimulated/beach/sand,/area/beach) "cUg" = (/obj/structure/table,/obj/item/clothing/under/rainbow,/obj/item/clothing/glasses/sunglasses,/obj/item/clothing/head/collectable/petehat{pixel_y = 5},/turf/unsimulated/beach/sand,/area/beach) "cUh" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/snacks/chips,/turf/unsimulated/beach/sand,/area/beach) -"cUi" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/cola,/obj/item/weapon/reagent_containers/food/drinks/cola,/obj/item/weapon/reagent_containers/food/drinks/cola,/obj/item/weapon/reagent_containers/food/drinks/cola,/obj/item/weapon/reagent_containers/food/drinks/cola,/obj/item/weapon/reagent_containers/food/drinks/cola,/turf/unsimulated/beach/sand,/area/beach) "cUj" = (/obj/item/weapon/beach_ball,/turf/unsimulated/beach/sand,/area/beach) "cUk" = (/obj/structure/stool/bed/chair,/turf/unsimulated/beach/sand,/area/beach) "cUl" = (/mob/living/simple_animal/crab/Coffee,/turf/unsimulated/beach/sand,/area/beach) @@ -7822,34 +7807,34 @@ "cUv" = (/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) "cUw" = (/obj/machinery/librarycomp,/obj/structure/table/woodentable,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) "cUx" = (/obj/machinery/vending/magivend,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) -"cUy" = (/obj/structure/table/woodentable,/obj/item/weapon/paper{info = "

    LIST OF SPELLS AVAILABLE

    Magic Missile:
    This spell fires several, slow moving, magic projectiles at nearby targets. If they hit a target, it is paralyzed and takes minor damage.

    Fireball:
    This spell fires a fireball at a target and does not require wizard garb. Be careful not to fire it at people that are standing next to you.

    Disintegrate:
    This spell instantly kills somebody adjacent to you with the vilest of magick. It has a long cooldown.

    Disable Technology:
    This spell disables all weapons, cameras and most other technology in range.

    Smoke:
    This spell spawns a cloud of choking smoke at your location and does not require wizard garb.

    Blind:
    This spell temporarly blinds a single person and does not require wizard garb.

    Forcewall:
    This spell creates an unbreakable wall that lasts for 30 seconds and does not require wizard garb.

    Blink:
    This spell randomly teleports you a short distance. Useful for evasion or getting into areas if you have patience.

    Teleport:
    This spell teleports you to a type of area of your selection. Very useful if you are in danger, but has a decent cooldown, and is unpredictable.

    Mutate:
    This spell causes you to turn into a hulk, and gain telekinesis for a short while.

    Ethereal Jaunt:
    This spell creates your ethereal form, temporarily making you invisible and able to pass through walls.

    Knock:
    This spell opens nearby doors and does not require wizard garb.

    "; name = "List of Available Spells (READ)"},/obj/item/trash/tray,/turf/unsimulated/floor{dir = 10; icon_state = "carpetside"},/area/wizard_station) -"cUz" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; freerange = 1; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) -"cUA" = (/obj/effect/landmark/start{name = "wizard"},/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/wizard_station) -"cUB" = (/obj/effect/decal/remains/human,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/wizard_station) +"cUy" = (/obj/structure/stool/bed/chair/wood/wings{icon_state = "wooden_chair_wings"; dir = 8},/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/holding) +"cUz" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/meatsteak,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/holding) +"cUA" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/mushroomsoup,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/holding) +"cUB" = (/obj/structure/stool/bed/chair{dir = 8},/turf/unsimulated/floor{icon_state = "greencorner"; dir = 4},/area/centcom/control) "cUC" = (/turf/unsimulated/floor{dir = 8; icon_state = "carpetside"},/area/wizard_station) -"cUD" = (/mob/living/carbon/monkey,/turf/unsimulated/floor{dir = 8; icon_state = "chapel"},/area/wizard_station) +"cUD" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/centcom/evac) "cUE" = (/turf/unsimulated/floor{dir = 4; icon_state = "carpetside"},/area/wizard_station) "cUF" = (/obj/structure/bookcase{name = "bookcase (Tactics)"},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) -"cUG" = (/obj/effect/decal/cleanable/blood,/turf/unsimulated/floor{icon_state = "chapel"},/area/wizard_station) -"cUH" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 5},/area/wizard_station) +"cUG" = (/obj/structure/stool/bed/roller,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"cUH" = (/turf/unsimulated/floor{dir = 5; heat_capacity = 1; icon_state = "warning"},/area/centcom/evac) "cUI" = (/turf/unsimulated/floor{dir = 2; icon_state = "carpetside"},/area/wizard_station) -"cUJ" = (/obj/item/trash/raisins,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) -"cUK" = (/obj/structure/showcase,/turf/unsimulated/floor{dir = 1; icon_state = "chapel"},/area/wizard_station) +"cUJ" = (/obj/structure/stool/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "greencorner"; dir = 8},/area/centcom/control) +"cUK" = (/obj/item/device/radio/intercom{broadcasting = 0; freerange = 0; frequency = 1485; listening = 1; name = "Station Intercom (Medbay)"; pixel_x = 30; pixel_y = 0},/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom) "cUL" = (/turf/unsimulated/floor{icon_state = "grimy"},/area/wizard_station) "cUM" = (/obj/structure/bookcase,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) -"cUN" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) -"cUO" = (/obj/structure/table/reinforced,/obj/structure/kitchenspike,/turf/unsimulated/floor{dir = 1; icon_state = "chapel"},/area/wizard_station) -"cUP" = (/obj/structure/table/reinforced,/obj/structure/kitchenspike,/turf/unsimulated/floor{dir = 4; icon_state = "chapel"},/area/wizard_station) -"cUQ" = (/obj/effect/decal/cleanable/cobweb2,/obj/structure/showcase,/turf/unsimulated/floor{dir = 4; icon_state = "chapel"},/area/wizard_station) -"cUR" = (/obj/structure/rack,/obj/item/clothing/under/psysuit,/obj/item/clothing/suit/wizrobe/psypurple,/obj/item/clothing/head/wizard/amp,/turf/unsimulated/floor{icon_state = "grimy"},/area/wizard_station) +"cUN" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"cUO" = (/obj/structure/reagent_dispensers/peppertank{pixel_x = -30; pixel_y = 0},/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom) +"cUP" = (/obj/structure/table/woodentable{dir = 5},/obj/item/clothing/under/suit_jacket,/obj/item/clothing/suit/wcoat,/obj/item/clothing/head/that{pixel_x = 4; pixel_y = 6},/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/holding) +"cUQ" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/orangecakeslice,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/holding) +"cUR" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/poppypretzel,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/holding) "cUS" = (/turf/simulated/shuttle/wall{icon_state = "swall_s6"; dir = 2},/area) "cUT" = (/turf/simulated/shuttle/wall{icon_state = "swall12"; dir = 2},/area) "cUU" = (/turf/simulated/shuttle/wall{icon_state = "swall_s10"; dir = 2},/area) -"cUV" = (/obj/structure/rack,/obj/item/clothing/suit/wizrobe/red,/obj/item/clothing/shoes/sandal,/obj/item/clothing/head/wizard/red,/obj/item/weapon/staff,/turf/unsimulated/floor{icon_state = "grimy"},/area/wizard_station) +"cUV" = (/turf/unsimulated/beach/sand{tag = "icon-desert1"; icon_state = "desert1"},/area/centcom/ferry) "cUW" = (/obj/structure/table/woodentable,/obj/item/weapon/spacecash/c1,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) -"cUX" = (/obj/structure/rack,/obj/item/clothing/suit/wizrobe/magusred,/obj/item/clothing/head/wizard/magus,/obj/item/weapon/staff,/turf/unsimulated/floor{icon_state = "grimy"},/area/wizard_station) -"cUY" = (/obj/structure/table/woodentable,/obj/item/trash/cheesie,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) -"cUZ" = (/obj/machinery/vending/snack,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) +"cUX" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/tofukabob,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/holding) +"cUY" = (/turf/unsimulated/beach/sand{tag = "icon-desert"; icon_state = "desert"},/obj/effect/overlay/palmtree_r,/turf/unsimulated/beach/sand{tag = "icon-coconuts"; icon_state = "coconuts"},/area/centcom/ferry) +"cUZ" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/bloodsoup,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/holding) "cVa" = (/turf/simulated/shuttle/wall{icon_state = "swall3"; dir = 2},/area) "cVb" = (/turf/space,/turf/simulated/shuttle/wall{dir = 8; icon_state = "diagonalWall3"},/area/shuttle/vox/station) "cVc" = (/turf/simulated/shuttle/wall{icon_state = "pwall"; dir = 1},/area) @@ -7863,22 +7848,20 @@ "cVk" = (/turf/simulated/shuttle/wall{icon_state = "swall_s5"; dir = 2},/area) "cVl" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 8},/area/wizard_station) "cVm" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows2"; dir = 8},/area/wizard_station) -"cVn" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/rd,/turf/unsimulated/floor{dir = 5; icon_state = "carpetside"},/area/wizard_station) -"cVo" = (/obj/structure/mirror{pixel_y = 28},/turf/unsimulated/floor{dir = 1; icon_state = "carpetside"},/area/wizard_station) -"cVp" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/weapon/storage/backpack/satchel,/turf/unsimulated/floor{dir = 9; icon_state = "carpetside"},/area/wizard_station) -"cVq" = (/turf/unsimulated/floor{dir = 4; icon_state = "chapel"},/area/wizard_station) -"cVr" = (/turf/unsimulated/floor{dir = 1; icon_state = "chapel"},/area/wizard_station) -"cVs" = (/mob/living/simple_animal/hostile/creature{name = "Experiment 35b"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/wizard_station) -"cVt" = (/obj/structure/rack,/obj/item/weapon/kitchenknife/ritual,/turf/unsimulated/floor{icon_state = "chapel"},/area/wizard_station) +"cVn" = (/obj/structure/stool/bed/chair,/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom) +"cVo" = (/obj/item/device/radio/intercom{broadcasting = 0; freerange = 0; frequency = 1485; listening = 1; name = "Station Intercom (Medbay)"; pixel_x = 30; pixel_y = 0},/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"cVp" = (/obj/item/weapon/storage/belt/inflatable,/turf/unsimulated/beach/sand{tag = "icon-desert"; icon_state = "desert"},/area/centcom/ferry) +"cVq" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass,/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/holding) +"cVs" = (/obj/machinery/status_display,/obj/machinery/status_display,/turf/simulated/shuttle/wall{icon_state = "swall11"; dir = 2},/area/shuttle/escape/centcom) "cVu" = (/obj/machinery/computer/station_alert,/turf/simulated/shuttle/floor{icon_state = "floor4"; oxygen = 0},/area/shuttle/vox/station) "cVv" = (/obj/machinery/computer/vox_station,/turf/simulated/shuttle/floor{icon_state = "floor4"; oxygen = 0},/area/shuttle/vox/station) "cVw" = (/obj/machinery/computer/vox_stealth,/turf/simulated/shuttle/floor{icon_state = "floor4"; oxygen = 0},/area/shuttle/vox/station) -"cVx" = (/obj/effect/decal/cleanable/blood,/turf/unsimulated/floor{dir = 8; icon_state = "chapel"},/area/wizard_station) +"cVx" = (/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/obj/structure/stool{pixel_y = 8},/turf/unsimulated/floor{tag = "icon-siding2"; name = "plating"; icon_state = "siding2"},/area/centcom/holding) "cVy" = (/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/wizard_station) "cVz" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows2"; dir = 1},/area/wizard_station) "cVA" = (/turf/unsimulated/floor{dir = 8; icon_state = "chapel"},/area/wizard_station) -"cVB" = (/obj/structure/rack,/obj/item/weapon/kitchenknife/ritual,/turf/unsimulated/floor{dir = 8; icon_state = "chapel"},/area/wizard_station) -"cVC" = (/obj/item/trash/chips,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) +"cVB" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/centcom/control) +"cVC" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/soylenviridians,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/holding) "cVD" = (/turf/unsimulated/floor{icon_state = "chapel"},/area/wizard_station) "cVE" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1331; master_tag = "vox_west_control"; req_one_access_txt = "150"},/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/vox/station) "cVF" = (/obj/machinery/door/airlock/hatch{frequency = 1331; icon_state = "door_locked"; id_tag = "vox_northwest_lock"; locked = 1; req_access_txt = "150"; req_one_access = null; req_one_access_txt = "0"},/turf/simulated/shuttle/plating,/area/shuttle/vox/station) @@ -7888,8 +7871,9 @@ "cVJ" = (/turf/simulated/shuttle/floor{icon_state = "floor4"; oxygen = 0},/area/shuttle/vox/station) "cVK" = (/obj/machinery/door/airlock/hatch{frequency = 1331; icon_state = "door_locked"; id_tag = "vox_northeast_lock"; locked = 1; req_access_txt = "150"; req_one_access = null; req_one_access_txt = "0"},/turf/simulated/shuttle/plating,/area/shuttle/vox/station) "cVL" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1331; master_tag = "vox_east_control"; req_access_txt = "150"},/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/vox/station) -"cVM" = (/obj/effect/decal/cleanable/molten_item,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/wizard_station) -"cVN" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/table,/obj/item/device/radio/electropack,/obj/item/stack/sheet/metal{amount = 50},/turf/simulated/floor/engine,/area/toxins/misc_lab) +"cVM" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/stuffing,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/holding) +"cVN" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/boiledrice,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/holding) +"cVO" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/beetsoup,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/holding) "cVP" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{frequency = 1331; id_tag = "vox_west_vent"},/turf/simulated/shuttle/plating,/area/shuttle/vox/station) "cVQ" = (/obj/machinery/airlock_sensor{frequency = 1331; id_tag = "vox_west_sensor"; pixel_x = 25},/turf/simulated/shuttle/plating,/area/shuttle/vox/station) "cVR" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/poddoor{id = "skipjack"; name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/plating,/area/shuttle/vox/station) @@ -7897,7 +7881,12 @@ "cVT" = (/obj/item/clothing/head/collectable/petehat{desc = "It smells faintly of reptile."; name = "fancy leader hat"},/turf/simulated/shuttle/floor{icon_state = "floor4"; oxygen = 0},/area/shuttle/vox/station) "cVU" = (/obj/machinery/airlock_sensor{frequency = 1331; id_tag = "vox_east_sensor"; pixel_x = -25},/turf/simulated/shuttle/plating,/area/shuttle/vox/station) "cVV" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{frequency = 1331; id_tag = "vox_east_vent"},/turf/simulated/shuttle/plating,/area/shuttle/vox/station) +"cVW" = (/obj/item/device/radio/intercom{broadcasting = 0; freerange = 0; frequency = 1485; listening = 1; name = "Station Intercom (Medbay)"; pixel_x = 30; pixel_y = 0},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) "cVX" = (/turf/unsimulated/wall/fakeglass,/area/wizard_station) +"cVY" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/amanita_pie,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/holding) +"cVZ" = (/turf/unsimulated/beach/sand{tag = "icon-desert3"; icon_state = "desert3"},/turf/unsimulated/floor{tag = "icon-siding4"; name = "plating"; icon_state = "siding4"},/area/centcom/holding) +"cWa" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/bigbiteburger,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/holding) +"cWb" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/stew,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/holding) "cWc" = (/obj/machinery/atmospherics/pipe/simple{icon_state = "intact"; level = 2},/turf/simulated/shuttle/plating,/area/shuttle/vox/station) "cWd" = (/obj/machinery/embedded_controller/radio/airlock_controller{airpump_tag = "vox_west_vent"; exterior_door_tag = "vox_northwest_lock"; frequency = 1331; id_tag = "vox_west_control"; interior_door_tag = "vox_southwest_lock"; pixel_x = 24; req_access_txt = "150"; sensor_tag = "vox_west_sensor"},/turf/simulated/shuttle/plating,/area/shuttle/vox/station) "cWe" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/poddoor{id = "skipjack"; name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/plating,/area/shuttle/vox/station) @@ -8477,7 +8466,6 @@ "dhg" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/derelict/bridge/access) "dhh" = (/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/turf/simulated/floor,/area/derelict/bridge/access) "dhi" = (/obj/machinery/door/airlock/glass,/turf/simulated/floor,/area/derelict/bridge/access) -"dhj" = (/obj/item/weapon/reagent_containers/food/drinks/beer,/turf/simulated/floor,/area/derelict/bridge/access) "dhk" = (/turf/simulated/wall/r_wall,/area/derelict/singularity_engine) "dhl" = (/obj/structure/window/reinforced,/turf/simulated/floor,/area/derelict/bridge/access) "dhm" = (/obj/machinery/door/window,/turf/simulated/floor,/area/derelict/bridge/access) @@ -8503,7 +8491,6 @@ "dhG" = (/obj/item/weapon/cable_coil/cut,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/airless{icon_state = "damaged3"},/area/derelict/singularity_engine) "dhH" = (/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine) "dhI" = (/turf/simulated/wall,/area/derelict/singularity_engine) -"dhJ" = (/obj/item/weapon/reagent_containers/food/drinks/beer,/turf/simulated/floor,/area/derelict/bridge) "dhK" = (/turf/simulated/floor,/area/derelict/bridge) "dhL" = (/turf/simulated/floor/plating,/area/derelict/bridge) "dhM" = (/obj/structure/table,/obj/item/weapon/paper/crumpled,/turf/simulated/floor,/area/derelict/bridge) @@ -8544,7 +8531,6 @@ "div" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor,/area/derelict/bridge) "diw" = (/obj/structure/stool/bed/chair,/turf/simulated/floor,/area/derelict/bridge) "dix" = (/obj/structure/table,/obj/item/weapon/screwdriver,/turf/simulated/floor,/area/derelict/bridge) -"diy" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/beer,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor,/area/derelict/bridge) "diz" = (/obj/item/stack/rods,/turf/space,/area) "diA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/derelict/singularity_engine) "diB" = (/obj/item/weapon/shard,/obj/structure/grille{density = 0; icon_state = "brokengrille"},/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/derelict/singularity_engine) @@ -9983,9 +9969,7 @@ "dKe" = (/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/west_outpost) "dKf" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "mining_west_outpost_outer"; locked = 1; name = "Mining External Access"; req_access = null; req_access_txt = "10;13"},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/mine/west_outpost) "dKg" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "mining_west_outpost_airlock"; name = "exterior access button"; pixel_x = -25; pixel_y = -25; req_access_txt = null},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 4},/area/mine/explored) -"dKh" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/beer,/obj/item/weapon/reagent_containers/food/drinks/beer,/turf/simulated/floor{icon_state = "bar"},/area/mine/living_quarters) "dKi" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor{icon_state = "bar"},/area/mine/living_quarters) -"dKj" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/beer,/turf/simulated/floor{icon_state = "bar"},/area/mine/living_quarters) "dKk" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor{icon_state = "bar"},/area/mine/living_quarters) "dKl" = (/obj/machinery/light{dir = 4},/turf/simulated/floor{icon_state = "bar"},/area/mine/living_quarters) "dKm" = (/turf/simulated/floor,/area/mine/living_quarters) @@ -10255,6 +10239,7 @@ "dPq" = (/obj/machinery/mineral/stacking_machine,/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/production) "dPr" = (/obj/machinery/conveyor{icon_state = "conveyor0"; dir = 10; id = "mining_internal"},/obj/machinery/mineral/input,/turf/simulated/floor{dir = 8; icon_state = "loadingarea"},/area/mine/production) "dPs" = (/turf/space,/area/vox_station/mining) +"dPt" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/quartermaster/office) "dPu" = (/obj/machinery/telepad,/turf/simulated/floor/engine,/area/toxins/telesci) "dPv" = (/obj/machinery/camera{c_tag = "Telescience Chamber"; dir = 8; network = list("Telesci Test Area")},/turf/simulated/floor/engine,/area/toxins/telesci) "dPw" = (/obj/machinery/atmospherics/unary/outlet_injector{name = "Acid-Proof Air Injector"; icon_state = "on"; dir = 2; unacidable = 1; on = 1},/turf/simulated/floor/engine,/area/toxins/telesci) @@ -10277,9 +10262,11 @@ "dPN" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/aft) "dPO" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold{pipe_color = "red"; dir = 4; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology) "dPP" = (/obj/effect/landmark/start{name = "Scientist"},/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) +"dPQ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/engine,/area/toxins/misc_lab) "dPR" = (/obj/structure/table/reinforced,/obj/machinery/ignition_switch{id = "Miscresearch"; pixel_x = -6; pixel_y = 4},/obj/machinery/atmospherics/pipe/manifold{dir = 4; icon_state = "manifold"; initialize_directions = 11; level = 2},/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) "dPS" = (/obj/machinery/atmospherics/binary/pump{dir = 1; icon_state = "intact_off"; name = "Gas pump"; on = 0},/obj/effect/landmark/start{name = "Scientist"},/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) "dPT" = (/obj/structure/sign/biohazard,/turf/simulated/wall/r_wall,/area/toxins/misc_lab) +"dPU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/engine,/area/toxins/misc_lab) "dPV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/table/reinforced,/obj/item/device/gps,/obj/item/device/gps,/obj/item/device/gps,/obj/item/device/gps,/obj/item/device/gps,/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) "dPW" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) "dPX" = (/obj/machinery/atmospherics/pipe/simple/general/visible{icon_state = "intact"; dir = 6},/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) @@ -10291,6 +10278,7 @@ "dQd" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) "dQe" = (/obj/structure/closet/bombcloset,/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) "dQf" = (/obj/machinery/camera{c_tag = "Misc Research Chamber"; dir = 2; network = list("SS13","Research")},/turf/simulated/floor/engine,/area/toxins/misc_lab) +"dQg" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/engine,/area/toxins/misc_lab) "dQh" = (/obj/structure/cable,/obj/machinery/shieldwallgen{req_access = list(55)},/obj/machinery/light,/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) "dQi" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/light,/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) "dQj" = (/obj/machinery/computer/security/nuclear,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start) @@ -10333,11 +10321,160 @@ "dQU" = (/obj/machinery/portable_atmospherics/pump,/obj/machinery/camera{c_tag = "Misc Research"; dir = 1; network = list("SS13")},/turf/simulated/floor{icon_state = "white"},/area/toxins/misc_lab) "dQV" = (/obj/structure/table,/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter,/turf/simulated/floor/engine,/area/toxins/misc_lab) "dQW" = (/obj/structure/table,/obj/machinery/cell_charger,/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/cable_coil{pixel_x = 3; pixel_y = 3},/obj/item/device/multitool,/turf/simulated/floor/engine,/area/toxins/misc_lab) +"dQX" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/table,/obj/item/device/radio/electropack,/obj/item/stack/sheet/metal{amount = 5000},/turf/simulated/floor/engine,/area/toxins/misc_lab) "dQY" = (/obj/machinery/telecomms/broadcaster/preset_cent,/turf/unsimulated/floor{icon_state = "green"},/area/centcom/control) "dQZ" = (/obj/machinery/telecomms/server/presets/centcomm,/turf/unsimulated/floor{icon_state = "green"; dir = 1},/area/centcom/control) "dRa" = (/obj/machinery/telecomms/processor/preset_cent,/turf/unsimulated/floor{icon_state = "green"; dir = 1},/area/centcom/control) "dRb" = (/obj/machinery/telecomms/bus/preset_cent,/turf/unsimulated/floor{icon_state = "green"; dir = 1},/area/centcom/control) "dRc" = (/obj/machinery/telecomms/receiver/preset_cent,/turf/unsimulated/floor{icon_state = "green"; dir = 9},/area/centcom/control) +"dRd" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/carrotcakeslice,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/holding) +"dRe" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/obj/structure/stool/bed,/obj/item/weapon/bedsheet/blue,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"dRf" = (/obj/structure/closet/athletic_mixed,/turf/unsimulated/beach/sand{tag = "icon-desert"; icon_state = "desert"},/area/centcom/ferry) +"dRg" = (/turf/unsimulated/beach/sand{tag = "icon-desert"; icon_state = "desert"},/obj/structure/closet/athletic_mixed,/turf/unsimulated/floor{tag = "icon-siding4"; name = "plating"; icon_state = "siding4"},/area/centcom/holding) +"dRh" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"; name = "Clothing Storage"},/obj/item/clothing/head/bandana{pixel_y = -10},/obj/item/clothing/glasses/sunglasses,/turf/unsimulated/beach/sand{tag = "icon-desert"; icon_state = "desert"},/area/centcom/ferry) +"dRi" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"; name = "Clothing Storage"},/obj/item/clothing/glasses/sunglasses,/turf/unsimulated/beach/sand{tag = "icon-desert"; icon_state = "desert"},/area/centcom/ferry) +"dRj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom) +"dRk" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom) +"dRl" = (/obj/structure/closet/emcloset{anchored = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"dRn" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/blue,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"dRo" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 0},/turf/unsimulated/floor{name = "plating"},/area/centcom/evac) +"dRp" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/lighter/zippo,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/ashtray/bronze{pixel_x = -1; pixel_y = 1},/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/holding) +"dRr" = (/obj/structure/stool/bed/chair/comfy/brown,/turf/unsimulated/floor{dir = 9; icon_state = "carpetside"},/area/centcom/ferry) +"dRs" = (/obj/structure/stool/bed/chair/comfy/brown,/turf/unsimulated/floor{dir = 1; icon_state = "carpetside"},/area/centcom/ferry) +"dRt" = (/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/ferry) +"dRu" = (/obj/structure/stool/bed/chair/comfy/brown,/turf/unsimulated/floor{dir = 5; icon_state = "carpetside"},/area/centcom/ferry) +"dRv" = (/turf/unsimulated/floor{dir = 8; icon_state = "carpetside"},/area/centcom/ferry) +"dRw" = (/turf/unsimulated/floor{dir = 2; icon_state = "carpetsymbol"},/area/centcom/ferry) +"dRx" = (/turf/unsimulated/floor{dir = 4; icon_state = "carpetside"},/area/centcom/ferry) +"dRy" = (/obj/structure/stool/bed/chair/comfy/brown{dir = 1},/turf/unsimulated/floor{dir = 10; icon_state = "carpetside"},/area/centcom/ferry) +"dRz" = (/obj/structure/stool/bed/chair/comfy/brown{dir = 1},/turf/unsimulated/floor{dir = 2; icon_state = "carpetside"},/area/centcom/ferry) +"dRA" = (/obj/structure/stool/bed/chair/comfy/brown{dir = 1},/turf/unsimulated/floor{dir = 6; icon_state = "carpetside"},/area/centcom/ferry) +"dRB" = (/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 0},/turf/unsimulated/wall,/area/centcom/evac) +"dRC" = (/obj/machinery/vending/wallmed1{name = "Emergency NanoMed"; pixel_x = 0; pixel_y = -32; req_access_txt = "0"},/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) +"dRD" = (/obj/structure/stool/bed/chair{dir = 1},/obj/item/device/radio/intercom{broadcasting = 1; freerange = 0; frequency = 1485; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = -30},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) +"dRE" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/turf/simulated/shuttle/wall{icon_state = "swall_f9"; dir = 2},/turf/simulated/shuttle/wall{icon_state = "swall_f5"; dir = 2},/area/shuttle/escape/centcom) +"dRF" = (/obj/structure/closet/walllocker/emerglocker,/turf/simulated/shuttle/wall{icon_state = "swall12"; dir = 2},/area/shuttle/escape/centcom) +"dRG" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/turf/simulated/shuttle/wall{icon_state = "swall_f5"; dir = 2},/turf/simulated/shuttle/wall{icon_state = "swall_f9"; dir = 2},/area/shuttle/escape/centcom) +"dRH" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{name = "plating"},/area/centcom/ferry) +"dRI" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/obj/item/weapon/extinguisher,/obj/item/weapon/crowbar,/obj/item/weapon/storage/fancy/donut_box,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"dRJ" = (/obj/structure/table,/obj/machinery/chem_dispenser/soda,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"dRK" = (/obj/structure/table,/obj/item/weapon/storage/box/cups,/obj/item/weapon/storage/box/cups,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"dRL" = (/obj/structure/stool/bed/chair{dir = 8},/obj/item/device/radio/intercom{broadcasting = 0; freerange = 0; frequency = 1485; listening = 1; name = "Station Intercom (Medbay)"; pixel_x = 30; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"dRM" = (/obj/machinery/turretcover{density = 1},/turf/unsimulated/floor{icon_state = "bot"},/area/centcom/evac) +"dRN" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/centcom/evac) +"dRO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/centcom/control) +"dRP" = (/obj/machinery/door/airlock/external{name = "Arrivals Bar Airlock"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/ferry) +"dRQ" = (/obj/structure/stool/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "greencorner"; dir = 1},/area/centcom/control) +"dRR" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/centcom/ferry) +"dRS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/centcom/ferry) +"dRT" = (/obj/machinery/door/airlock/glass{name = "Arrivals Bar"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry) +"dRU" = (/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry) +"dRW" = (/obj/machinery/door/airlock/glass{name = "Arrivals Processing"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry) +"dRX" = (/obj{anchored = 1; icon_state = "floor3"; layer = 1; name = "floor"},/turf/simulated/shuttle/wall{icon_state = "swall3"; dir = 2},/area/shuttle/escape/centcom) +"dRY" = (/obj/structure/table,/obj/item/weapon/disk/tech_disk{pixel_x = 0; pixel_y = 0},/obj/item/weapon/disk/tech_disk{pixel_x = 0; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"dRZ" = (/obj/structure/table,/obj/item/weapon/storage/fancy/donut_box,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"dSa" = (/obj/machinery/computer/communications,/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom) +"dSb" = (/obj/structure/table,/obj/item/device/megaphone,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"dSc" = (/turf/unsimulated/floor{dir = 6; icon_state = "warning"},/area/centcom/evac) +"dSd" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/centcom/evac) +"dSe" = (/obj/structure/stool/bed/chair{dir = 8},/turf/unsimulated/floor{icon_state = "greencorner"},/area/centcom/control) +"dSf" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/centcom/evac) +"dSg" = (/obj/machinery/computer/rdconsole,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom) +"dSh" = (/turf/unsimulated/floor{icon_state = "delivery"},/area/centcom/control) +"dSi" = (/obj/machinery/atm{pixel_x = -26},/turf/unsimulated/floor{icon_state = "green"; dir = 8},/area/centcom/control) +"dSj" = (/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/ferry) +"dSk" = (/obj/structure/mineral_door/wood{tag = "icon-wood"; icon_state = "wood"},/turf/unsimulated/floor{icon_state = "grimy"},/area/wizard_station) +"dSl" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; freerange = 1; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/turf/unsimulated/floor{icon_state = "grimy"},/area/wizard_station) +"dSm" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/bag/cash,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) +"dSn" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/rd,/turf/unsimulated/floor{icon_state = "grimy"},/area/wizard_station) +"dSo" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/suit/wizrobe/magusblue,/obj/item/clothing/head/wizard/magus,/obj/item/weapon/staff,/turf/unsimulated/floor{icon_state = "grimy"},/area/wizard_station) +"dSp" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/turf/unsimulated/floor{icon_state = "grimy"},/area/wizard_station) +"dSq" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/suit/wizrobe/red,/obj/item/clothing/shoes/sandal,/obj/item/clothing/head/wizard/red,/obj/item/weapon/staff,/turf/unsimulated/floor{icon_state = "grimy"},/area/wizard_station) +"dSr" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/suit/wizrobe/marisa,/obj/item/clothing/shoes/sandal/marisa,/obj/item/clothing/head/wizard/marisa,/obj/item/weapon/staff/broom,/turf/unsimulated/floor{icon_state = "grimy"},/area/wizard_station) +"dSs" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; freerange = 1; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green{on = 0; pixel_x = -3; pixel_y = 8},/obj/item/weapon/reagent_containers/food/drinks/flask/barflask,/turf/unsimulated/floor{dir = 6; icon_state = "carpetside"},/area/wizard_station) +"dSt" = (/turf/unsimulated/floor{dir = 10; icon_state = "carpetside"},/area/wizard_station) +"dSu" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; freerange = 1; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/obj/structure/closet/coffin,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) +"dSv" = (/obj/machinery/shower{icon_state = "shower"; dir = 8},/turf/unsimulated/floor{icon_state = "engine"},/area/wizard_station) +"dSw" = (/turf/unsimulated/floor{icon_state = "engine"},/area/wizard_station) +"dSx" = (/obj/effect/landmark/start{name = "wizard"},/turf/unsimulated/floor{dir = 2; icon_state = "carpetsymbol"},/area/wizard_station) +"dSy" = (/obj/structure/mineral_door/iron,/turf/unsimulated/floor{icon_state = "engine"},/area/wizard_station) +"dSz" = (/obj/structure/mineral_door/wood{tag = "icon-wood"; icon_state = "wood"},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) +"dSA" = (/obj/structure/table/woodentable,/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/snacks/milosoup,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) +"dSB" = (/obj/structure/stool/bed/chair/wood/wings{icon_state = "wooden_chair_wings"; dir = 4},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) +"dSC" = (/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/wizard_station) +"dSD" = (/obj/structure/stool/bed/chair/wood/wings{icon_state = "wooden_chair_wings"; dir = 8},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) +"dSE" = (/obj/structure/table/woodentable,/obj/item/weapon/dice,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) +"dSF" = (/obj/structure/table/woodentable,/obj/item/weapon/dice/d20,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) +"dSG" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/box/cups,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) +"dSH" = (/obj/item/target,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/wizard_station) +"dSI" = (/obj/item/target/alien,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/wizard_station) +"dSJ" = (/obj/item/target/syndicate,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/wizard_station) +"dSK" = (/obj/structure/kitchenspike,/obj/structure/table/reinforced,/turf/unsimulated/floor{dir = 1; icon_state = "chapel"},/area/wizard_station) +"dSL" = (/obj/structure/rack,/obj/item/weapon/kitchenknife/ritual,/turf/unsimulated/floor{dir = 4; icon_state = "chapel"},/area/wizard_station) +"dSM" = (/obj/structure/rack,/obj/item/weapon/kitchenknife/ritual,/turf/unsimulated/floor{dir = 1; icon_state = "chapel"},/area/wizard_station) +"dSN" = (/obj/structure/kitchenspike,/obj/structure/table/reinforced,/turf/unsimulated/floor{dir = 4; icon_state = "chapel"},/area/wizard_station) +"dSO" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/suit/wizrobe/magusred,/obj/item/clothing/head/wizard/magus,/obj/item/weapon/staff,/turf/unsimulated/floor{icon_state = "grimy"},/area/wizard_station) +"dSP" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/under/psysuit,/obj/item/clothing/suit/wizrobe/psypurple,/obj/item/clothing/head/wizard/amp,/turf/unsimulated/floor{icon_state = "grimy"},/area/wizard_station) +"dSQ" = (/obj/machinery/door/airlock/external{name = "Transport Airlock"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/ferry) +"dSR" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/backpack/cultpack,/turf/unsimulated/floor{icon_state = "grimy"},/area/wizard_station) +"dSS" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/backpack,/turf/unsimulated/floor{icon_state = "grimy"},/area/wizard_station) +"dST" = (/obj/structure/table/woodentable,/obj/machinery/chem_dispenser/soda,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) +"dSU" = (/obj/structure/table/woodentable,/obj/item/weapon/book/manual/nuclear,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) +"dSV" = (/obj/structure/table/woodentable,/obj/item/weapon/book/manual/security_space_law,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) +"dSW" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/backpack/satchel/withwallet,/turf/unsimulated/floor{dir = 5; icon_state = "carpetside"},/area/wizard_station) +"dSX" = (/obj/structure/table/woodentable,/obj/item/weapon/paper{info = "

    LIST OF SPELLS AVAILABLE

    Magic Missile:
    This spell fires several, slow moving, magic projectiles at nearby targets. If they hit a target, it is paralyzed and takes minor damage.

    Fireball:
    This spell fires a fireball at a target and does not require wizard garb. Be careful not to fire it at people that are standing next to you.

    Disintegrate:
    This spell instantly kills somebody adjacent to you with the vilest of magick. It has a long cooldown.

    Disable Technology:
    This spell disables all weapons, cameras and most other technology in range.

    Smoke:
    This spell spawns a cloud of choking smoke at your location and does not require wizard garb.

    Blind:
    This spell temporarly blinds a single person and does not require wizard garb.

    Forcewall:
    This spell creates an unbreakable wall that lasts for 30 seconds and does not require wizard garb.

    Blink:
    This spell randomly teleports you a short distance. Useful for evasion or getting into areas if you have patience.

    Teleport:
    This spell teleports you to a type of area of your selection. Very useful if you are in danger, but has a decent cooldown, and is unpredictable.

    Mutate:
    This spell causes you to turn into a hulk, and gain telekinesis for a short while.

    Ethereal Jaunt:
    This spell creates your ethereal form, temporarily making you invisible and able to pass through walls.

    Knock:
    This spell opens nearby doors and does not require wizard garb.

    "; name = "List of Available Spells (READ)"},/turf/unsimulated/floor{dir = 1; icon_state = "carpetside"},/area/wizard_station) +"dSY" = (/obj/structure/table/woodentable,/obj/effect/landmark{name = "Teleport-Scroll"},/turf/unsimulated/floor{dir = 9; icon_state = "carpetside"},/area/wizard_station) +"dSZ" = (/obj/structure/toilet{pixel_y = 8},/turf/unsimulated/floor{icon_state = "engine"},/area/wizard_station) +"dTa" = (/obj/structure/mirror{pixel_y = 28},/turf/unsimulated/floor{icon_state = "engine"},/area/wizard_station) +"dTb" = (/obj/structure/sink,/turf/unsimulated/wall,/area/wizard_station) +"dTc" = (/turf/unsimulated/wall/fakeglass{dir = 1; icon_state = "fakewindows"},/area/wizard_station) +"dTd" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 4},/area/wizard_station) +"dTe" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/fancy/donut_box,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) +"dTf" = (/obj/structure/table/woodentable,/obj/item/device/megaphone,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) +"dTg" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/snacks/chawanmushi,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station) +"dTh" = (/obj/structure/table/reinforced,/obj/item/weapon/book/manual/robotics_cyborgs,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/wizard_station) +"dTi" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; freerange = 1; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/wizard_station) +"dTj" = (/obj/structure/table/reinforced,/obj/item/robot_parts/head,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/wizard_station) +"dTk" = (/obj/effect/decal/remains/human,/turf/unsimulated/floor{tag = "icon-lava"; name = "plating"; icon_state = "lava"},/area/wizard_station) +"dTl" = (/turf/unsimulated/floor{tag = "icon-lava"; name = "plating"; icon_state = "lava"},/area/wizard_station) +"dTm" = (/turf/unsimulated/floor{icon_state = "grass1"; name = "grass"},/area/wizard_station) +"dTn" = (/obj/structure/flora/ausbushes/fullgrass,/turf/unsimulated/floor{icon_state = "grass1"; name = "grass"},/area/wizard_station) +"dTo" = (/turf/unsimulated/floor{tag = "icon-asteroid8"; name = "plating"; icon_state = "asteroid8"},/area/wizard_station) +"dTp" = (/turf/unsimulated/floor{tag = "icon-asteroid7"; name = "plating"; icon_state = "asteroid7"},/area/wizard_station) +"dTq" = (/turf/unsimulated/floor{tag = "icon-asteroid5"; name = "plating"; icon_state = "asteroid5"},/area/wizard_station) +"dTr" = (/mob/living/carbon/monkey{name = "Murphey"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/wizard_station) +"dTs" = (/obj/effect/decal/cleanable/blood,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/wizard_station) +"dTt" = (/mob/living/simple_animal/hostile/creature{name = "Experiment 35b"},/turf/unsimulated/floor{tag = "icon-lava"; name = "plating"; icon_state = "lava"},/area/wizard_station) +"dTu" = (/mob/living/simple_animal/hostile/retaliate/goat{name = "Experiment 97d"},/turf/unsimulated/floor{icon_state = "grass1"; name = "grass"},/area/wizard_station) +"dTv" = (/obj/structure/flora/ausbushes/grassybush,/turf/unsimulated/floor{icon_state = "grass1"; name = "grass"},/area/wizard_station) +"dTw" = (/mob/living/simple_animal/hostile/tribesman{name = "Experiment 69T"},/turf/unsimulated/floor{tag = "icon-asteroid2"; name = "plating"; icon_state = "asteroid2"},/area/wizard_station) +"dTx" = (/turf/unsimulated/floor{tag = "icon-asteroid10"; name = "plating"; icon_state = "asteroid10"},/area/wizard_station) +"dTy" = (/obj/item/weapon/caution,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/wizard_station) +"dTz" = (/obj/item/weapon/kitchenknife/ritual,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/wizard_station) +"dTA" = (/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/centcom/control) +"dTB" = (/obj/structure/stool{pixel_y = 8},/turf/unsimulated/floor{tag = "icon-red (EAST)"; icon_state = "red"; dir = 4},/area/centcom/control) +"dTC" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/centcom/control) +"dTD" = (/obj/machinery/door/airlock/glass_security{name = "Holding Cell"; req_access_txt = "2"},/turf/unsimulated/floor,/area/centcom/control) +"dTE" = (/turf/unsimulated/floor{dir = 8; icon_state = "red"},/area/centcom/control) +"dTF" = (/obj/machinery/door/airlock/centcom{name = "Arrivals Processing"; opacity = 1; req_access_txt = "101"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) +"dTG" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/red,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/centcom/control) +"dTH" = (/turf/unsimulated/floor{tag = "icon-red (EAST)"; icon_state = "red"; dir = 4},/area/centcom/control) +"dTI" = (/obj/machinery/door/airlock/glass_security{name = "Holding Cell"; req_access_txt = "2"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/ferry) +"dTJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor,/area/centcom/control) +"dTK" = (/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Arrivals Processing"; req_access_txt = "101"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) +"dTL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor,/area/centcom/control) +"dTM" = (/obj/structure/stool/bed/chair/office/dark,/obj/machinery/door_control{desc = "A remote control switch for port-side blast doors."; icon_state = "doorctrl0"; id = "CentComPort"; name = "Security Doors"; pixel_x = -12; pixel_y = -25; req_access_txt = "101"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) +"dTN" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{dir = 8; icon_state = "red"},/area/centcom/control) +"dTO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/unsimulated/floor,/area/centcom/control) +"dTP" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "CentComPort"; name = "Security Doors"; opacity = 0},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) +"dTQ" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{tag = "icon-red (EAST)"; icon_state = "red"; dir = 4},/area/centcom/control) +"dTR" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/computer/skills{icon_state = "medlaptop"; pixel_x = 3; pixel_y = 4},/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) +"dTS" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/obj/machinery/door/window/southright{name = "Arrivals Processing"; req_access_txt = "101"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control) +"dTT" = (/obj/machinery/computer/secure_data,/turf/unsimulated/floor{dir = 8; icon_state = "red"},/area/centcom/control) +"dTU" = (/obj/structure/stool{pixel_y = 8},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/centcom/control) +"dTV" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/centcom/control) +"dTW" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/shoes/sandal/marisa{desc = "A set of fancy shoes that are as functional as they are comfortable."; name = "Gentlemans Shoes"},/obj/item/clothing/under/gentlesuit,/obj/item/clothing/suit/wizrobe/gentlecoat,/obj/item/clothing/head/wizard/cap,/obj/item/weapon/staff/gentcane,/turf/unsimulated/floor{icon_state = "grimy"},/area/wizard_station) +"dTX" = (/obj/structure/table/woodentable,/obj/item/weapon/coin/adamantine,/obj/item/clothing/glasses/monocle,/turf/unsimulated/floor{icon_state = "grimy"},/area/wizard_station) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -10431,92 +10568,92 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaafaafaaaaaaaaaanlaafaafaaaaafaafaaaaaaalQaaaaaaaaaaaaafcafcafcafcafcafcafcaaaaaaaaaaaaaaaaaaaaaaafaaaanmanJanJanKaeFanqanLanMaeFanNanOanPanQanRanSanTanUanVamFanWamFalCanXamianYanZaoaaobaleaocaodaoeaofaogaohaljaoialNalNaafaaaaaaaaaaaaaaaaaaaaaaaaaaaalOalOalOalOalOaaaaaaaaaaaaaaaaaaalPaafaojaojaojaojaojaafaokaafaojaojaojaojaojaafalPaaaajiajiajiajiajiajiajiajiajiajiajiajiajiajiajiajiajiajiajiajiajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalPaafaolaolaolaolaolaafaomaafaolaolaolaolaolaafalPaaaaaaaaaaaaaaaafcafcafcafcafcaaaaaaaaaaaaaaaaaaaaaaafaafaaaanmamqaonalRaeFaooaopaoqaeFaoraosaotaouamzamAaovaowaoxaoxanWamFalCamAamGaoyamxaozaoAaleaoBaoCaoDaoEaoFaoFaoGaoHaoIalNalNaoJaoKaoLalNalNaafaaaaaaaaaalOalOalOalOalOaaaaaaaaaaaaaaaaaaalPaafaoMaoNaoNaoNaoNaoOaoPaoQaoRaoRaoRaoRaoSaafalPaaaajiajiajiajiajiajiajiajiajiajiajiajiajiajiajiajiajiajiajiajiajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaalPaafaoTaoUaoUaoUaoUaoVaoWaoXaoYaoYaoYaoYaoZaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaanmapaapbaeFaeFagXagXagXagXagXagXagXagXagXagXapcapdapdapeapfapgaphagXagXagXagXagXagXapiapjapkaplaplapmapnapoappapqalNaprapsapsapsaptalNalNalNalNapualOalOalOalOalOaaaaaaaaaaaaaaaaaaalPaafapvapvapvapvapvaafaoPaafapvapvapvapvapvaafalPaaaaaaajiajiajiajiaaaaaaajiajiajiajiajiajiajiaaaaaaajiajiajiajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalPaafapwapwapwapwapwaafaoWaafapwapwapwapwapwaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanmapxapyapxapzapxapAapAapBapCapDapAapAapAapAapAapAapAapAapAapEapFapGapHapIapJapKapLaleapMapNapOapPapQapRapSapTapUajhajhajhapVajhapWapXapYapZaqaaqbalOalOalOalOalOaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaafaaaaaaaafaoPaaaaaaaaaaafaaaaaaaaaalQaaaaaaaaaaaaaaaaaaaaaaaaajiajiajiajiajiajiajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalPaafapwapwapwapwapwaafaoWaafapwapwapwapwapwaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanmapxapyapxapzapxapAapAapBapCapDapAapAapAapAapAapAapAapAapAapEapFapGapHapIapJapKapLaleapMapNapOapPapQapRapSapTapUajhajhajharpajhapWapXapYapZaqaaqbalOalOalOalOalOaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaafaaaaaaaafaoPaaaaaaaaaaafaaaaaaaaaalQaaaaaaaaaaaaaaaaaaaaaaaaajiajiajiajiajiajiajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaafaaaaaaaafaoWaaaaaaaaaaafaaaaaaaaaampaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafapxaqcaqdapxapxaqeapEaqfapEapEapEapEapEapEapEapEapEapEapEaqgapEaqhapEaqiapEapEapEaleaqjaqkaqlaqmapOaqnapSaqoaqpaqqaqraqsaqtaquaqvaqwalNalNalNajhalOalOalOalOalOaaaaaaaaaaaaaaaaaaalPaafaojaojaojaojaojaafaoPaafaojaojaojaojaojaafalPaaaaaaaaaaaaaaaaaaaaaaaaajiajiajiajiajiajiajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalPaafaolaolaolaolaolaafaoWaafaolaolaolaolaolaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapxaqxaqyaqzaqAaqBaqCaqDaqEaqEaqEaqEaqEaqEaqEaqFaqGaqHaqGaqIaqJaqKaqLaqMaqNaqLaqOaleapiapiapiapiapiapiaqPaqQaqRaqSaqTaqUaqVajhalNaqWaqXalNaaaaaaaaaalOalOalOaaaaaaaaaaaaaaaaaaaaaalPaafaoMaoNaoNaoNaoNaoOaoPaoQaoRaoRaoRaoRaoSaafalPaaaaaaaaaaaaaaaaaaaaaaaaajiajiajiajiajiajiajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqYaqZaqYaaaaaaaaaaaaaaaaaaaaaalPaafaoTaoUaoUaoUaoUaoVaoWaoXaoYaoYaoYaoYaoZaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapxapaaraapxarbarbarcardarbarbarbarearearearfargarearearhariarjarkalNarlalNarmalNalNarnajhajhajhajhajharoaqQarparqarqarqarrarsartaruarvalNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalPaafapvapvapvapvapvaafaoPaafapvapvapvapvapvaafalPaaaaaaaaaaaaaaaaaaaaaaaaajiajiajiajiajiajiajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafarwarxarwaaaaaaaaaaaaaaaaaaaaaalPaafapwapwapwapwapwaafaoWaafapwapwapwapwapwaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaagapxaryapbapxarEatVatXatWauoatYarbarFarGarHarIarJarKarLarMapEarNarOarParQarRarRarRarRarRarSarRarRarRarRarUarVarWarXarYarZasaasbascasdasealNaafasfasgasgashasgasgasiaaaaaaaaaaaaaaaalQaaaaaaaaaaafaaaaaaaaaaoPaaaaaaaaaaafaaaaaaaaaalQaaaaaaaaaaaaaaaaaaaaaaaaajiajiajiajiajiajiajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasjaveaslaaaasmavfasoaaaaafaspaqYaspaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaafaaaaaaaaaaoWaaaaaaaaaaafaaaaaaaaaalQaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafapxapxapxapxapbapxarEarAatXatWassasrarbastarIarIarIarJasuasvaswasxasyalNaszasAasBasBasBasBasCasDasHasIasHasHasHasHasIasHasGasKasLasMasNasOasPasPasPasQasRasRasRasRasRasQasPaaaaaaaaaaaaalPaafaojaojaojaojaojaafaoPaafaojaojaojaojaojaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaajiajiajiajiajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqYaqZaqYaaaaaaaaaaaaaaaaaaaaaalPaafaoTaoUaoUaoUaoUaoVaoWaoXaoYaoYaoYaoYaoZaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapxapaaraapxarbarbarcardarbarbarbarearearearfargarearearhariarjarkalNarlalNarmalNalNarnajhajhajhajhajharoaqQapVarqarqarqarrarsartaruarvalNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalPaafapvapvapvapvapvaafaoPaafapvapvapvapvapvaafalPaaaaaaaaaaaaaaaaaaaaaaaaajiajiajiajiajiajiajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafarwarxarwaaaaaaaaaaaaaaaaaaaaaalPaafapwapwapwapwapwaafaoWaafapwapwapwapwapwaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaagapxaryapbapxarEatVatXatWaumatYarbarFarGarHarIarJarKarLarMapEarNarOarParQarRarRarRarRarRarSarRarRarRarRarUarVarWarXarYarZasaasbascasdasealNaafasfasgasgashasgasgasiaaaaaaaaaaaaaaaalQaaaaaaaaaaafaaaaaaaaaaoPaaaaaaaaaaafaaaaaaaaaalQaaaaaaaaaaaaaaaaaaaaaaaaajiajiajiajiajiajiajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasjaunaslaaaasmauoasoaaaaafaspaqYaspaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaafaaaaaaaaaaoWaaaaaaaaaaafaaaaaaaaaalQaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafapxapxapxapxapbapxarEarAatXatWassasrarbastarIarIarIarJasuasvaswasxasyalNaszasAasBasBasBasBasCasDasHasIasHasHasHasHasIasHasGasKasLasMasNasOasPasPasPasQasRasRasRasRasRasQasPaaaaaaaaaaaaalPaafaojaojaojaojaojaafaoPaafaojaojaojaojaojaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaajiajiajiajiajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasSasTasUasTasSasVasWasVasSaafaspasXasYaaaaaaaaaaaaaaaaaaaaaalPaafaolaolaolaolaolaafaoWaafaolaolaolaolaolaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafapxasZataapxapbapxauParAatXatWauOauNarbatearIatfatfarJatgasvapAapEathalNatiatjatkatlatmatnatoatpasEatuatvatwatratsasJatqattatzatAatBatCatDatEatFasPatGasRasRasRasRasRasQasPaafaaaaaaaaaalQaafaoMaoNaoNaoNaoNaoOaoPaoQaoRaoRaoRaoRaoSaafalPaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatHasTatIasTatHasVatJasVatHatKatLatMatNatOatOatPatKatKaafaaaalPaafaoTaoUaoUaoUaoUaoVaoWaoXaoYaoYaoYaoYaoZaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafapxatQatRatSatTatUbBqavDavCavBauQarEarbauaaubaucaucaudaueasvapAapEarNalNatiatjaufaugatmatnauhauiasEaukaujatsatsatsatxatyarTaupauqaurausautauuauvauwauxasRasRasRasRasRauyasPasPasPaaaaaaalQaaaapvapvapvapvapvaafaoPaafapvapvapvapvapvaaaampaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatHasTatIasTatHasVatJasVatHatKatLatMatNatOatOatPatKatKaafaaaalPaafaoTaoUaoUaoUaoUaoVaoWaoXaoYaoYaoYaoYaoZaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafapxatQatRatSatTatUbBqavDavCavBauQarzarbauaaubaucaucaudaueasvapAapEarNalNatiatjaufaugatmatnauhauiasEaukaujatsatsatsatxatyarTaupauqaurausautauuauvauwauxasRasRasRasRasRauyasPasPasPaaaaaaalQaaaapvapvapvapvapvaafaoPaafapvapvapvapvapvaaaampaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatHauzauAauBatHauCauDauEatHaqYaqYauFauGauHauIauJauKatKaaaaaaampaaaapwapwapwapwapwaafaoWaafapwapwapwapwapwaaaalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaagapxauLapaapxauMapxarBarAarDarCasqarEarbauRauSauTauTauUauVauWauXauYauZavaavbavcaufatlatmatnavdauiasEasEasEasFasFasFasEasEarTavgavhaviaviavjavkavlavmavnasRasRasRasRasRavoavpavqavraaaaaaalQaaaaafaaaaafaafaaaaaaaoPaaaaaaaafaaaaaaaafaaaalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatHavsavtavuatHavsavtavuatHavvavwavxavxavxavxavyavzarwaaaaaaalPaaaaafaaaaafaafaaaaaaavAaaaaaaaafaaaaaaaafaaaalPaafaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaagapxapxapxapxauMapxatcatbatbatbatbatdatbavEavFavFavFavFavGavHavIapEavJalNavKasAavLatlavMavNavdavOavRavPavRavRavRavRavRauiavVavWavXavYavYavYavYavZawaawbasRasRasRasRasRawbawcawdaweaaaaaaalQalQalPaaaaaaaafaaaaaaaoPaaaaafaafaafaafalPalPalPaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaasSatHawfawgasSatHawfawgasSatKawhatKatKatKatKatKawiaspaaaaaaalPalPalPaaaaaaaafaaaawjawkawjaafaafaafaafalPalPalPaafapxapxapxapxawlawmawmawmawmawmawmawmawnapxapxawoawpawqapxawrawsawtawuawvawwawwawwawwawwawxawwawyawzawAawAawBawBawCawDawEawFaqvawGawHawIawJaunatnavdawLawLawLawMawMawNawOawLauiawPawQawRavYavYavYavYawSawTawUasRasRasRasRasRawUawVawdaweaaaaaaaaaaaaaafaafaaaaafaaaaaaawWaaaaaaaafaaaaaaaafaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaasSatHawfawgasSatHawfawgasSatKawhatKatKatKatKatKawiaspaaaaaaalPalPalPaaaaaaaafaaaawjawkawjaafaafaafaafalPalPalPaafapxapxapxapxawlawmawmawmawmawmawmawmawnapxapxawoawpawqapxawrawsawtawuawvawwawwawwawwawwawxawwawyawzawAawAawBawBawCawDawEawFaqvawGawHawIawJaulatnavdawLawLawLawMawMawNawOawLauiawPawQawRavYavYavYavYawSawTawUasRasRasRasRasRawUawVawdaweaaaaaaaaaaaaaafaafaaaaafaaaaaaawWaaaaaaaafaaaaaaaafaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawXawYawYawYawZaxaawYawYaxbaxcaxdaxbaxbaxbaxeatKaxfaspaaaaafaafaaaaaaaaaaaaaafaaaaxgaxhaxiaafaaaaafaaaaaaaaaaaaaaaapxapaapaaxjapaapaapaapaapaapaapaapaaxkaxlaxmaxnaxnaxnaxnaxnaxnaxoaxpaxqaxraxraxraxraxsaxtaxraxuaxvaxsaxraxraxraxraxwaxxaxyaxzaxAavcatnatnatnatnauhaxBawLawOawMaxCawMaxDaxEauiaxGaxHaxIavYavYavYavYawSaxJaxKasRasRasRasRasRaxLaxMaxNaxOaaaaaaaaaaaaaaaaafaaaaafaaaaxPaxQaxPaaaaafaaaaaaaafaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxRaxSaxTaxUaxVaxTaxTaxWaxUaxTaxXaxYaxZaxZayaatKaxfatLaafaafaaaaaaaaaaaaaaaaafaybaycaydayeayfaaaaafaaaaaaaaaaaaaaaapxapaapxaygayhayiayiayiayiayiayiayiayjaygaykaylaylaylaylaylaylaylaymaynaxrayoaypayqayraysaytayuayvaywayxaypayyaxrayzapEayAalNayBatjatkatlatmatnavdayCayDaxFaxFayEayFayGayHayIavVayJayKayLayMayMayNayOayPayQasRasRasRasRasRayRasPasPasPaaaaaaaaaaaaaafaafaafaafaaaaySayTaySaaaaafaaaaaaaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafatHayUayVayUayWaxTaxTayXayUayVayUayYaxSaxVayZatKaxfatKatKazaatOatOatOatOatPatKazbazcazdazeazbapxapxawoawpawqapxapxapxapaaryaygaaaaafaaaaafaaaaafaaaaafaaaaygaykaylazfazgazhaziazjaylaymapaaxrazkazkazlazmaznazoazpazqazrazsaztaztaxrayzapEazualNayBatjaufatlatmatnauhazvazwazxazyazzazAazBazBazCazBasPazDazEazFavSazHazIasPazJasRasRasRasRasRazKasPaafaaaaaaaaaaaaaaaaafaafaaaaafazLazMazNazOazPaafaaaaaaaafaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafatHayUayVayUayWaxTaxTayXayUayVayUayYaxSaxVayZatKaxfatKatKazaatOatOatOatOatPatKazbazcazdazeazbapxapxawoawpawqapxapxapxapaaryaygaaaaafaaaaafaaaaafaaaaafaaaaygaykaylazfazgazhaziazjaylaymapaaxrazkazkazlazmaznazoazpazqazrazsaztaztaxrayzapEazualNayBatjaufatlatmatnauhazvazwazxazyazzazAazBazBazCazBasPazDazEazFavfazHazIasPazJasRasRasRasRasRazKasPaafaaaaaaaaaaaaaaaaafaafaaaaafazLazMazNazOazPaafaaaaaaaafaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafazQasSazRavtazSazTazUazVazWazSavtazXazYasSazZaAaatKaAbaAcaAcaAcaAcaAcaAcavzaAdaAeazbaAfaAgaAhazbaAiapaapaapaapaapaapaapaapaaAjaygaafaAkaAkaAkaAkaAkaAkaAkaafaygaykaylaAlaAmaAnaAoaAlaylaymaApaxraxraxraxraAqaAraypaAsaAraAtaxraxraxraxrayzapEaAualNayBatjaufatlatmatnavdaAvazBazBazBazBazBazBaAwaAxaAyazBasPasPasPasPaAzasPasPazKasRasRasRasRasRazKasPaaaaaaaaaaaaaaeaaaaaaaaaaaaaafaAAaABaACaADaAAaafaaaaaaaafaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxRayVaAEaAFaAFaAFaAFaAGayVaxRaAHasSaAIaAJaAKaAKaAKaAKaAKaAKaAKaAKawiaALaAeazbaAMaANaAOazbaAPaAQaAPaAPaAPaAPaAPaAPaAPaAPaARaaaaAkaASaATaAUaAVaAWaAkaaaaygaykaylaAlaAXaAYaAZaAlaylaymapxaxraBaaBbazlaBcaBdazoazpaBdaBeazsaBfaBfaxrayzapEayAalNaBgasAavLatlavMaBhavdaAvazBaBiaAxaBjaBjazBaAwaBkaAyazBaBlaBmaBnaBoaBpaBqaafaBraBsaBsaBsaBsaBsaBtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaAAaBuaBvaBwaAAaafaaaaaaaBxaByaByaByaByaBzaBAaByaByaByaByaBBaBBaByaBCaBDaBEaBFaBGaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaBHaBIaBJaBIaBIaBKaBLaBIaBIaBJaBMaBNasSayWaBOaBPaBQaBRaBSaBTaBUaBVaAKawiaBWatKazbazbaBXaBYaARaBZaCaaCbaCcaCdaCeaCfaCgaChaCiaARaafaAkaCjaCkaClaCmaCnaAkaafaygaykaylaCoaCpaCqaCpaCraylaymaCsaxrayoaypaCtaCuaAraCvaAsaAraCwaCxaypaCyaxrayzapEayAalNayBawHawIaCzaunatnaCAaCBazBaCCaAxaAxaAxazCaCDaCEaCFazBaCGaCHaCIaCJaCKaBqaaaaafaaaaafaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaAAaCLaCMaCNaAAaBqaCOaCPaCQaCRaCSaCSaCSaCSaCSaCSaCTaCUaCUaCVaCWaCXaCUaCUaCYaCZaDaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaBHaBIaBJaBIaBIaBKaBLaBIaBIaBJaBMaBNasSayWaBOaBPaBQaBRaBSaBTaBUaBVaAKawiaBWatKazbazbaBXaBYaARaBZaCaaCbaCcaCdaCeaCfaCgaChaCiaARaafaAkaCjaCkaClaCmaCnaAkaafaygaykaylaCoaCpaCqaCpaCraylaymaCsaxrayoaypaCtaCuaAraCvaAsaAraCwaCxaypaCyaxrayzapEayAalNayBawHawIaCzaulatnaCAaCBazBaCCaAxaAxaAxazCaCDaCEaCFazBaCGaCHaCIaCJaCKaBqaaaaafaaaaafaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaAAaCLaCMaCNaAAaBqaCOaCPaCQaCRaCSaCSaCSaCSaCSaCSaCTaCUaCUaCVaCWaCXaCUaCUaCYaCZaDaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaBHaBMaBIaDbaDcaDcaDdaDeaDfaDgaDhaDcaDcaDiaDjayUayWaDkaAKaDlaDmaDnaDoaDnaDpaDqaDraDsaqYaDtaDuaDvaAcaDwaDxaDyaDzaDzaDzaDAaDzaDzaDBaCaaARaaaaAkaDCaDDaDEaCmaDFaAkaaaaygaykaylaDGaDHaDIaDJaDKaylaymaDLaxraxraxraxraDMaAraypaDNaBdaDOaDPaypaDQaxraDRasxaDSalNayBaDTaDUaDUaDUaDUaDVaDWaDXaDYaDZaEaaEaaEaaEbaEaaEcaEdaEeaEfaEgaEhaEiaBqaBqaBqaBqaBqaBqaBqaBqaBqaBqaCOaCPaBqaBqaBqaCOaEjaEkaBqaBqaAAaAAaElaEmaAAaEnaEoaEpaEqaEraEsaEsaEsaEsaEsaEnaEtaEuaEuaEvaEwaExaEuaEyaEzaEAaEyaEyaEyaEyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDiaEBaECaEDaDcaEEaDcaEEaDcaEEaDcaEEaDcaEFaEGazSayWaEHaAKaEIaEJaEKaELaEMaENaAKaEOaEPaAcaEQaAcaERaqYaAPaESaDBaDzaDzaDzaDzaDzaDzaETaEUaEVaEWaEXaEYaEZaFaaFbaFcaAkaafaygaFdaFeaFfaFgaFhaFiaFjaFeaFkaFlaxraFmaypazlaFnaBdazoaFoaAraCwaFpaypaFqaxraFraFsaFtalNaFuarsarsarsaFvaFwaFxaFyaFzaFAaFBaFzaFCaFzaFDaFzaFEaFFaFGaFHaFIaBoaFJaFKaFLaFMaFMaFKaFNaFOaFOaFOaFOaFOaFPaFQaFOaFRaFSaFTaFUaFVaFWaFXaFYaFZaGaaGaaGaaGbaGcaGdaGeaEsaGfaGgaGhaEsaEuaGiaEuaGjaGkaGlaGmaGnaGoaGpaGqaGraGsaGtaGuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavQaDcaDcaBJaDcaEEaDcaEEaGxaEEaDcaEEaDcaEFaEGazSayWaGyaAKaGzaGAaGBaGCaGBaBPaBPaGDaGEaGFaGGaGHaGGaGGaGIaGJaGKaGLaGLaGLaGMaGLaGLaGNaGOaARaaaaGPaAkaGQaGRaGQaAkaAkaaaaygaGSaylaGTaGUaGVaGWaGXaGYaGZaHaaxraHbaypaCxaCuaAraypaAsaAraCwaHcaypaHdaxraHeaHfaHgalNaHhalNalNalNaHialNaHjaHkazBaHlaAxazBaHmazBaHnazBaHoaHpaHqaHraHsaHtaHuaHvaHwaHxaHyaHzaHAaHyaHyaHBaByaHvaHCaHvaHDaHvaHvaHEaHFaHGaHHaHHaHIaHJaHKaHLaHHaHMaHNaHOaHPaHQaHRaHSaHTaEsaHUaHVaEuaHWaHXaHYaHZaGnaIaaIbaGqaIcaEyaEyaEyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDiaIdaECaEDaDcaEEaDcaEEaDcaEEaDcaEEaDcaEFaEGazSaIeaIfaIgaIhaIiaIiaIiaIfaIjaIkaIfaIlaImaInaIoauKauKaAPaGOaIpaCaaIqaGOaGOaIraIsaItaIuaARaaaaIvaaaaIwaIxaIwaaaaafaaaaygaGSaylaIyaIzaIAaIBaICaylaIDapaaxraIEaypazlaIFaIGazoaIHaIIaIJaIKaILaIMaxraINaIOaIPaIQaIRaISaaaaaaaITaIUaIVaIWazBaIXaAxaAxaAxaCEaAxaAxaAxaIYaBoaIZaBoaJaaJbaBoaJcaBoaJdaJeaJfaJgaJhaJiaJjaJkaJlaJjaJmaJjaJjaJjaJjaJnaJjaJjaJoaJjaJjaJjaJjaJpaJqaHPaJraJsaJtaJuaJvaEsaJwaJxaJyaJzaJAaJBaHZaJCaIaaIbaGqaIbaJDaJEaJFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJHaJIaBIaDbaDcaDcaDcaJJaDcaDcaJKaDcaDcaDiaJLaJMayWaxTaJNaJOaJOaJOaJOaJOaJOaJOaJPaJQatKatKaJRatKatKaAPaJSaJTaJUaJVaJVaJVaJVaJWaJXaJYaARaJZaKaaKbaKcaKdaKeaKbaKbaKfaygaKgaylaylaylaKhaKiaylaylaKjaKkaxraxraxraxraKlaKmaCxaCxaKnaKoaxraxraxraxraIOaIOaIOaIOaKpaKqaKraKsaITaKtaIVaKuazBazBazBazBazBazBazBazBazBaIYaKvaKwaKxaKyaKzaKAaKBaKCaJdaKDaKEaKFaKGaKHaJjaKIaKJaKKaKLaKKaKMaKNaKOaKPaKQaKRaKSaKTaKUaKVaJjaKWaKXaKYaJraKZaJtaJuaLaaEsaLbaLcaLdaLeaLfaHZaLgaEuaEyaLhaGqaIbaLiaLjaLkaaaaaaaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJHaBIaBJaBIaBIaLlaBLaBIaBIaBJaJIaLmasSaLnaxTawXaLoaLoaLpaLoaLqatHaLraLsaJQaLtaLuaLvaLwaLxaLyaLzaLAaLzaLzaLzaLzaLzaLzaLzaLBaLCaLDaLEaLFaLFaLGaLHaLFaLFaLFaLIaLJaLKaLLaLFaLMaLNaLOaLPaLQaIOaLRaLSaIOaIPaLTaLTaLTaLTaLTaLTaLUaLVaLWaLXaLYaLZaMaaMbaMcaIOaIOaIOaMdaMeaMfaMeaMgaMhaMiaMjaIOaMkaIOaBoaMlaMmaMnaMoaMpaMpaMqaMraMsaMtaJdaMuaMvaMwaMwaMxaJjaMyaMzaMAaMBaMAaMAaMCaMDaMEaMDaMFaMGaMHaMIaMDaJjaJpaMJaMKaMKaMLaMMaMKaMNaEsaMOaMPaEuaMQaMRaHZaHZaEuaMSaMTaMUaIbaEyaEyaEyaaaaafaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawXayVaMVaAFaAFaAFaAFaMWayVawXaAHasSaAIaMXaMYaMZaNaaNbaNbaNcatHaNdaLsaNeaNfaLuaNgaNhaNiaNjaNkaNlaLzaLzaLzaLzaLzaLzaLzaLBaNmaNnaLzaLzaLzaNoaNpaLzaLzaLzaLzaNqaLzaLzaLzaNraNmaLuaLPaIOaIOaIOaIOaIOaIOaIOaIOaIOaIOaIOaIOaNsaNtaNuaNvaNwaNxaNyaNzaNAaIOaIOaIOaLPaIOaIOaIOaIOaIOaIOaIOaIOaNBaIOaBoaNCaNDaMpaNEaMpaMpaNFaNGaMsaNHaJdaNIaNJaNKaNLaNMaJjaNNaNOaNPaNQaNRaNSaJjaNTaNUaNTaJjaJjaJjaJoaJjaJjaJpaJqaNVaHPaHPaNWaHPaNXaEsaEuaEuaEuaEuaEuaEuaNYaEuaIbaIbaGqaIbaNZaOaaEyaaaaafaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafazQasSaMYavtazSaObaOcaOdaOeazSavtaOfaOgasSayWaxTaMYaOhaOiaNbaNbaNcatHaOjaLsaJQaNfaLuaOkaOlaOmaOmaOmaOnaOoaOpaOmaOqaOmaOmaOraOsaOtaOuaOmaOvaOwaOxaOyaOzaOAaOBaOCaODaOEaOEaOFaOGaNmaLuaLPaIOaOHaIOaOIaOIaOIaOIaOIaOIaOIaOIaOJaOKaOIaOIaOIaOIaOLaOIaOIaOIaOIaOIaOMaONaOIaOIaOIaOIaOIaOIaOIaIOaIOaIOaBoaOOaOPaOQaOQaOQaORaOSaNGaMsaOTaJdaJdaJdaJdaJdaOUaJjaOVaOWaOXaOYaNPaNPaJjaOZaPaaPbaPcaPbaPbaPdaPeaJjaJpaJqaPfaPfaPgaPhaPiaPiaPjaEsaPkaPlaPmaEyaPnaPoaPpaIbaIbaPqaPraEyaPsaEyaPtaPtaPtaPuaPvaPwaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafatHaxRayVaJMayWaxTaxTayXaJMayVaJMaPxawYaPyaxTaxRaPzaPzaLpaPzaLqatHaPAaLsaJQaPBaPBaPCaPDaPBaPEaPEaPEaPEaPEaPFaPGaPEaPEaPEaPEaPEaPHaPIaPJaPIaPKaPLaPMaLzaLAaPNaPOaPPaPQaLAaLzaPRaPSaPSaIOaIOaIPaPTaKraKraPUaPUaPUaPUaPVaPWaPXaPYaPZaQaaQaaQbaQcaQaaQdaQeaQfaPWaQgaPUaPUaPUaPUaKraKraQhaINaIOaIOaBoaQiaQjaQkaQkaQkaQkaQlaQmaQnaQoaQparzaQraQsaQtaQuaJdaJdaQvaQwaQxaQyaQzaJjaQAaQBaQCaQCaQCaQCaQDaQEaJjaQFaJqaQGaHPaPgaPhaHPaHPaQHaEsaQIaQJaQKaEyaQLaQMaQNaQOaQOaQPaQNaQQaQRaEyaQSaQTaPtaQUaQVaQWaafaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawXaQXaxTaQYaPyaxTaxTaQZaQYaxTaQXaPyaxTaxTaxTaRaaRbaRbaRbaRbaRbaRbaRbaRcaRdaPBaReaRfaRgaRhaRiaRjaRkaRlaRmaRnaRoaRpaRqaRraRsaRtaRuaRvaRwaRxaPKaRyaPMaPMaRzaPMaRAaPSaPSaRBaRCaPSaPSaPSaRDaIOaIPaREaaaaaaaaaaaaaaaaaaaaaaPWaRFaRGaRHaRIaRJaRKaRJaRLaRMaRNaROaPWaaaaaaaaaaaaaaaaaaaaaaRPaINaIOaRQaRRaRSaRTaQoaQoaQoaQoaQoaRUaRVaQoaQoaQoaQraMpaRWaRXaRYaRZaSaaSbaScaSdaSeaJdaPbaSfaSgaSgaSgaSgaShaSiaJjaJpaJqaSjaSjaPgaPhaSkaSkaSlaEsaEsaSmaEsaEyaSnaPoaPraSoaSoaPqaPraEyaEyaEyaSpaSqaSraSsaStaSuaafaafaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaxRaSvaSwaSvaSvaSvaSvaSvaSvaSwaSvaSvaSxaxTaxTaSyaxTaxTaSzaxTaSAaSBaSCaSDaSEaPBaReaSFaSGaPEaSHaRnaRnaRnaRnaRnaRoaSIaRnaRnaRnaRtaPHaSJaSKaSLaPKaRyaPMaSMaSNaSOaSPaPSaSQaSRaSSaSTaSUaSVaIOaIOaIPaREaaaaaaaaaaaaaPWaPWaPWaPWaSWaSXaSYaSZaTaaTbaTcaTdaTeaTfaTgaPWaPWaPWaPWaaaaaaaaaaaaaRPaINaIOaIOaThaQoaTiaTjaTkaQoaTlaTmaCIaTnaToaTkaQoaQraMpaTpaRXaTqaTraTsaTtaTuaTvaRXaTwaTxaTyaSgaTzaTAaSgaTBaPbaJjaJpaJqaQGaHPaPgaPhaHPaHPaHPaTCaTDaHPaTEaEyaTFaTGaTHaSoaSoaTIaTHaTJaEyaTKaSsaSsaSsaSsaStaTLaTMaTMaTNaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasSasSaTOaTPaTPaTPaTPaTPaTPaTPazYasSatHaTQaTRaTSaTSaTSaTTaTSaTSaTSaTUaTSaTUaPBaReaTVaTWaPEaTXaRnaRnaTYaTZaUaaUbaTYaRnaRnaRnaUcaPHaUdaUeaUfaPKaUgaPMaUhaUiaUjaUkaPSaUlaSUaSUaSSaSUaUmaIOaIOaIPaKqaPVaUnaUoaPWaPWaUpaUqaUraUsaUtaUtaUuaUvaUtaUuaUvaUtaUwaUxaUyaUzaUAaPWaPWaUoaUnaUBaUCaINaIOaIOaBoaUDaTiaToaTkaQoaUEaUFaQoaUGaUHaTkaQoaQraMpaUIaRXaUJaUKaULaUMaUNaUOaRXaUPaUQaURaSgaUSaUTaSgaUUaUVaJjaJpaJqaUWaUWaPgaPhaUXaHPaHPaUYaHPaUZaVaaEyaVbaVcaVdaSoaSoaVeaVdaVfaEyaVgaSsaSsaSsaSsaSsaVhaViaVjaVkaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaafaVmazTaxVaxTaVnaVoaVpaVqaVraVsaVtaVuaVvaVwaVxaVyaVzaVAaPEaVBaRnaRnaTYaUaaVCaVDaTYaRnaRnaRnaRtaPHaPKaPKaVEaPKaVFaVGaVGaVGaVGaVHaVIaVJaSSaSSaSSaSSaUmaIOaIOaIPaLTaLTaVKaVLaVMaPWaVNaTbaUtaVOaUtaUtaUtaUtaVPaUtaVQaUtaVRaVSaVSaVTaVUaPWaVVaVLaVWaVXaLTaINaIOaIOaThaQoaRTaQoaQoaQoaVYaVZaQoaUGaWaaTkaQoaQraMpaWbaRXaWcaWdaWeaWfaWgaUOaWhaJdaPbaURaWiaSgaSgaSgaUUaPbaJjaWjaJqaEsaEsaWkaPhaWlaWmaHPaWnaWoaKZaWpaWqaWraWsaWtaWuaWuaWvaWwaWxaWqaWyaWzaSsaSsaSsaWAaWBaWCaTMaWDaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaWEaWFaWGayWaWHaWIaWJaWKaWLaWMaWNaWOaWPaWKaWQaWRaWSaWTaWUaPEaWVaRnaWWaWXaWYaWYaWZaWYaWYaWYaXaaXbaXcaXdaXeaXfaXgaXhaReaReaXiaPBaXjaPSaXkaXlaXmaXnaXnaXoaIOaIOaIOaIOaIOaXpaXqaXraXsaXtaXuaUtaXvaXwaXxaXyaXzaXAaXBaXCaXDaXEaXFaXtaXGaXHaXIaXJaXKaXLaXMaXNaXOaIOaXPaBoaRSaTiaXQaTkaQoaXRaXSaQoaUGaToaTkaQoaQraXTaRWaRXaWcaRXaXUaRXaXVaUOaXWaJdaQAaURaSgaSgaSgaSgaUUaQEaJjaXXaXYaXZaYaaYbaYcaYdaYdaYdaYdaYdaYdaYeaYfaYgaSoaSoaSoaSoaSoaSoaYhaYiaYjaSsaSsaSsaSsaYkaYlaYmaafaafaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaYnavtaYnaxTaYoaTUaYpaYqaYraYraYraYraYsaYtaTSaYuaYvaYwaYxaYyaYyaYyaYzaYyaYAaYBaYCaYDaYEaYEaYFaRtaYGaYHaYIaYJaYKaYLaYMaYMaYNaYOaYPaYQaYRaYSaYSaYSaYTaPSaYUaIOaYVaYWaYXaYYaYZaZaaZbaZcaZdaZeaZfaPWaPWaPWaPWaPWaPWaZgaZhaZiaZjaXwaZkaZlaPWaZaaYZaZmaZnaYWaZoaIOaIOaThaQoaZpaQoaQoaQoaFHaQoaQoaZqaQoaZraZraZraZraZsaZtaZuaRXaRXaRXaZvaZwaZxaJdaZyaZzaSgaZAaZAaZBaZzaZCaJjaZDaZEaZFaZGaPgaPgaPgaPgaZHaPgaPgaPgaZIaYiaSoaSoaSoaSoaSoaSoaSoaYhaYiaYjaSsaSsaZJaSsaSsaZKaYmaafaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaZLaZMaWGayWaZNaZOaZPaZQaZRaZSaZTaYraZUaZVaTSaZWaZXaYwaYxaZYaZZbaababaYybacbadbaeaPEbafbagbahbaiaPEbajbakbalbalbalbalbambalbalbanbaobaobaobapbaobaqbarbasbatbaubavbawbawbawbawbaxbaybazbaybaAbaBbaBbaBbaBbaBbaBbaBbaBbaCbaDbaDbaEbaDbaDbaDbaDbaDbaDbaDaZoaIOaIOaBobaFbaGaBlbaHaQobaIaQobaJbaKbaLaZrbaMbaNbaOaJdaJdaJdbaPbaQbaQbaQaJdaJdaJdbaRaSgaSgaulatZbaUbaVaskaJjbaXaZEbaYaEsbaZbbabbbaWmbbcbbabbdaWmbbeaEybbfaIbbbgaSoaSobbgaIbbbhaEybbibbjbbkaSsaSsbblbbmaYmaafaafaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaafaxRbbnaPybboaTUbbpbbpbbqbbrbbsbbqbbtbbpaTSbbubbvbbwbbxbbybbybbzbbAbbybbBbadbbCaPEbafbagbbDbbEaPEbbFbakbalbbGbbHbbHbbHbbIbalbbJbbKbbLbbMbarbarbarbaraIOaIObbNbbObbPbbQbbRbbSbbTbbUbbVbbWbaAbaBbbXbbYbbZbcabcbbccbcdbaCbaDbcebcfbcgbchbcibcjbckbclbaDbcmbcnbcnaBoaBoaBoaBoaBobcoaThbcobcpaBoaBoaRRaBoaBoaBobcqbcrbcrbcrbcrbcrbcrbcsbcrbcqaskbctbctasnaZFaZFaZFaZFbcqbaXbcvbaYaEsaEsaEsaEsaEsbcwaEsaEsaEsaEsaEybcxbcybczbczbczbczbcAaEyaEybcBaSsbcCaSsaSsaWAbcDbcEaTMaWDaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazQasSbcFaAFaWGatHatHatHatHatHatHbcGbboaTUaTSaTSaTSaTSaTSaTSaTSaTSaTSbcHaReaYwaYxaZYbcIbcJbcKaYybcLbcMbcNaPEbafbagbcObcPaPEbbFbakbalbbHbcQbcQbbHbcQbalbbJbcRbcSbcSbcTbcUbcVbarbcWaIOaYVbcXbcYbcZbdabdbbdbbdabdcbddbaAbaBbdebdfbdgbdhbdibdjbdkbdlbdmbdnbdobclbdpbdqbdrbclbdsbaDaZobdtaIOaNsbdubdvaZFaZFaZFaZFaZFaZFaZFbdwaZFaZFaZFaZFbdxaZFaZFaZFaZFaZFaZFaZFaZFbdyaZFaZFaZFaZFaZFaZFaZFaZFbdzbdAbdBbdCbdDbdCbdEbdCbdFbdGbdHbdCbdIbdCbdJbdKbdCbdCbdCbdCbdCbdCbdLbdMbdNbdObcCaSsaSsaSsaVkbdPaVjaVkaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaaaaafbdRazTaxVbdSbdTbdUbdUbdUbdUbdUbdUbdVbdWaPBaXiaReaYwaYxaYyaYybdXbdYaYyaPEaPEbdZaPEbafbeabcObebaPEbbFbakbalbecbedbbHbcQbeebalbbJbefbcSbcSbcSbegbehbarbeiaIOaYVbejbekbelbembenbeobepbdcbeqbaAbaBberbesbetbetbetbeubevbaBbewbexbclbclbdpbeybdrbclaumbaDbeAaIOaIOaNsbdubdvaZFaZFaZFaZFaZFaZFaZFbeBaZFaZFaZFaZFaZFaZFbeCbdCbdCbdCbdCbdCbdCbeDbdCbdCbdCbdCbdCbdCbdCbeEbeFbeGbeHaZFaZFaZFaZFaZFaZEaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFbeIbdzbeJaSsaSsbcCaSsaSsbeKbeLaTMaTMaTNaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaWEaWFbeMayWbeNbeObePbePbeQbePbePbePbeRaPBaPBaPBaPBaYwaYxaZYbeSbeTbeUaYybeVbeWbeXaPEaPEaPEaPEbeYaPEbbFbakbalbeZbbHbcQbfabfbbalbbJbarbfcbcSbcSbfdbfebarbffaIOaYVbfgbfhbelbembfibfjbepbdcbfkbaAbflbfmbfnbetbfobetbdfbfpbfqbewbfrbfsbftbfubfubfvbclbfwbaDaZobfxaIOaNsbdubdvaZFbfyaZFbfzbfAbfAbfAbfBbfAbfAbfAbfCaZFaZFaZFaZFbfDaZFbfybfEbfFbfGaZFaZFaZFbfHbfIbfJbfKbfLbfMbfNaZFaZFaZFaZFaZFbfObfPbfDaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFbdzbfQbfRbfSbfTbfUbfVbbmbfWaafaaaaafaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaYnavtaYnaxTbfXbePbfYbfZbgabgabgbbgcbgdbgebgebgebgebgfbggbghbghbgibgjbghbgkbgkbglbgkbgmbgnbgnbgobgnbgpbgqbgrbgsbgtbgtbgubgvbgrbgwbgxbgybcSbcSbfdbgzbgAbffaIOaYVbgBbgCbgDbdabdabdabdabdcbgEbaAbaBbgFbgGbgHbgIbgJbgGbgKbaBbewbgLbgMbgNbgObgPbgQbgRbgSbaDbgTaHfaHfbgUbgUbgUbgUbgUbgUbgUbgVbgWbgWbgXbgYbgZbgVbhabhabhabhabhabhabhbbhbbhbbhcbhbbhbbhbbhdbhebfObhfbhgbhhbhibhjaZFaZFbhkbhkbhlbhlbhlbhlbhlbhmbhnbhnbhobhnaZFbhnbhobhnbhnbhpbhqbhqbhqbhqbhrbhgaPtaPtaPtaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaZLaZMbeMayWbhsbePbhtbePbhubhvbePbePbePaRebhwbhxbhxbhyaYyaZYbhzbcJbhAaYybhBbhCbhDbhEbhFbhGbhHbhIbhJbhHbhKbhLbhMbhNbhMbhMbhObhPbhQbhRbhSbcSbcSbhTbhUbhVbffaIObhWbgBbhXbhYbhZbiabibbicbidbaAbaAbaBbiebifbigbihbiibijbikbaBbewbilbimbinbiobipbgQbclbiqbaDaZoaIObirbgUbisbitbiubivbiwbixbiybizbizbiAbiBbiBbqmbhabiDbiEbiFbiGbhabiHbiIbiJbiKbiLbiMbiNbiObiPbiObiObiObiQbiRbiSbiTbiSbiUbiUbhlbiVbiWbiXbhlbiYbiZbiYbhlbhmbhnbhpbhqbjabjbbjabhqbjcbjdbhqbjebjfbjgbhgaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaaaaaaaMYbbnaPybjhbePbjibePbjjbjkbjlbjmbePbjnaRebjoaRebjpaYyaYyaYyaYyaYyaYybjqbjrbjsaRebjtbalbalbalbjubalbalbalbjvbalbalbalbalbjwbjxbjybjzbcSbcSbfdbjAbgAbffaIObjBbgBbjCbhYbaAbaAbaAbaAbjDbaAbjEbjFbjGbjHbbXbjIbbXbjJbjKbjLbjMbilbjNbclbjObjPbgQbjQbjRbjSbjTbjUbjVbgUbjWbjXbjYbjZbkabkbbkcbkdbizbkebizbizbkfbkgbkhbkibkjbkkbhabklbkmbknbkmbkobkpbhbbkqbkrbksbktbhgbkubkvbkwbkxbkybkzbkAbkBbkCbkDbkCbkEbkFbkGbkHbhlbkIbkJbkKbhqbkLbkMbkNbkObkPbkQbhqbkRbkSbkTbhgaaaaaaaaaaaeaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazQasSbcFaAFaZMaTPaTPaTPbkUaTPbkVayWaxTaxTbePbkWbkXbkYbkZblablbblcbldbldbldbldbleblfblfblfbhHbhHbhHblgblhblhblhblibalbljblkbllblmblnbloblpblqblrblsbltblublvblwblxblyblzblAblBblBblCbjUblDblEblFblGblHblIblJblKblLblMblNbjLbjLbjLbjLblObjLbjLbjLbjLblPblQblRblSblTblUblVblWblXblYblZaIOaIObgUbmabmbbmcbjZbmdbmebkcbmfbmgbmhbmgbmgbmibmjbmkbmlbmmbmnbhabmobkmbmpbkmbkobmqbhbbjgbmrbmsbmtbhgbkubmubmvbmwbmwbmxbmybmzbmAbmAbmAbmBbmCbmDbmEbmFbmGbmHbmIbmJbmKbmLbkPbmMbmNbmObhqbmPbkSbmsbhgaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaveaDcaDcaBJaDcaEEaDcaEEaGxaEEaDcaEEaDcaEFaEGazSayWaGyaAKaGzaGAaGBaGCaGBaBPaBPaGDaGEaGFaGGaGHaGGaGGaGIaGJaGKaGLaGLaGLaGMaGLaGLaGNaGOaARaaaaGPaAkaGQaGRaGQaAkaAkaaaaygaGSaylaGTaGUaGVaGWaGXaGYaGZaHaaxraHbaypaCxaCuaAraypaAsaAraCwaHcaypaHdaxraHeaHfaHgalNaHhalNalNalNaHialNaHjaHkazBaHlaAxazBaHmazBaHnazBaHoaHpaHqaHraHsaHtaHuaHvaHwaHxaHyaHzaHAaHyaHyaHBaByaHvaHCaHvaHDaHvaHvaHEaHFaHGaHHaHHaHIaHJaHKaHLaHHaHMaHNaHOaHPaHQaHRaHSaHTaEsaHUaHVaEuaHWaHXaHYaHZaGnaIaaIbaGqaIcaEyaEyaEyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaDiaIdaECaEDaDcaEEaDcaEEaDcaEEaDcaEEaDcaEFaEGazSaIeaIfaIgaIhaIiaIiaIiaIfaIjaIkaIfaIlaImaInaIoauKauKaAPaGOaIpaCaaIqaGOaGOaIraIsaItaIuaARaaaaIvaaaaIwaIxaIwaaaaafaaaaygaGSaylaIyaIzaIAaIBaICaylaIDapaaxraIEaypazlaIFaIGazoaIHaIIaIJaIKaILaIMaxraINaIOaIPaIQaIRaISaaaaaaaITaIUaIVaIWazBaIXaAxaAxaAxaCEaAxaAxaAxaIYaBoaIZaBoaJaaJbaBoaJcaBoaJdaJeaJfaJgaJhaJiaJjaJkaJlaJjaJmaJjaJjaJjaJjaJnaJjaJjaJoaJjaJjaJjaJjaJpaJqaHPaJraJsaJtaJuaJvaEsaJwaJxaJyaJzaJAaJBaHZaJCaIaaIbaGqaIbaJDaJEaJFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJHaJIaBIaDbaDcaDcaDcaJJaDcaDcaJKaDcaDcaDiaJLaJMayWaxTaJNaJOaJOaJOaJOaJOaJOaJOaJPaJQatKatKaJRatKatKaAPaJSaJTaJUaJVaJVaJVaJVaJWaJXaJYaARaJZaKaaKbaKcaKdaKeaKbaKbaKfaygaKgaylaylaylaKhaKiaylaylaKjaKkaxraxraxraxraKlaKmaCxaCxaKnaKoaxraxraxraxraIOaIOaIOaIOaKpaKqaKraKsaITaKtaIVaKuazBazBazBazBazBazBazBazBazBaIYaKvaKwaKxaKyaKzaKAaKBaKCaJdaKDaKEaKFaKGaKHaJjaKIaKJaKKaKLaKKaKMaKNaKOaKPaKQaKRaKSaKTaKUaKVaJjaKWaKXaKYaJraKZaJtaJuaLaaEsaLbaLcaLdaLeaLfaHZaLgaEuaEyaLhaGqaIbaLiaLjaLkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaJHaBIaBJaBIaBIaLlaBLaBIaBIaBJaJIaLmasSaLnaxTawXaLoaLoaLpaLoaLqatHaLraLsaJQaLtaLuaLvaLwaLxaLyaLzaLAaLzaLzaLzaLzaLzaLzaLzaLBaLCaLDaLEaLFaLFaLGaLHaLFaLFaLFaLIaLJaLKaLLaLFaLMaLNaLOaLPaLQaIOaLRaLSaIOaIPaLTaLTaLTaLTaLTaLTaLUaLVaLWaLXaLYaLZaMaaMbaMcaIOaIOaIOaMdaMeaMfaMeaMgaMhaMiaMjaIOaMkaIOaBoaMlaMmaMnaMoaMpaMpaMqaMraMsaMtaJdaMuaMvaMwaMwaMxaJjaMyaMzaMAaMBaMAaMAaMCaMDaMEaMDaMFaMGaMHaMIaMDaJjaJpaMJaMKaMKaMLaMMaMKaMNaEsaMOaMPaEuaMQaMRaHZaHZaEuaMSaMTaMUaIbaEyaEyaEyaaaaafaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawXayVaMVaAFaAFaAFaAFaMWayVawXaAHasSaAIaMXaMYaMZaNaaNbaNbaNcatHaNdaLsaNeaNfaLuaNgaNhaNiaNjaNkaNlaLzaLzaLzaLzaLzaLzaLzaLBaNmaNnaLzaLzaLzaNoaNpaLzaLzaLzaLzaNqaLzaLzaLzaNraNmaLuaLPaIOaIOaIOaIOaIOaIOaIOaIOaIOaIOaIOaIOaNsaNtaNuaNvaNwaNxaNyaNzaNAaIOaIOaIOaLPaIOaIOaIOaIOaIOaIOaIOaIOaNBaIOaBoaNCaNDaMpaNEaMpaMpaNFaNGaMsaNHaJdaNIaNJaNKaNLaNMaJjaNNaNOaNPaNQaNRaNSaJjaNTaNUaNTaJjaJjaJjaJoaJjaJjaJpaJqaNVaHPaHPaNWaHPaNXaEsaEuaEuaEuaEuaEuaEuaNYaEuaIbaIbaGqaIbaNZaOaaEyaaaaafaaaaaaaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafazQasSaMYavtazSaObaOcaOdaOeazSavtaOfaOgasSayWaxTaMYaOhaOiaNbaNbaNcatHaOjaLsaJQaNfaLuaOkaOlaOmaOmaOmaOnaOoaOpaOmaOqaOmaOmaOraOsaOtaOuaOmaOvaOwaOxaOyaOzaOAaOBaOCaODaOEaOEaOFaOGaNmaLuaLPaIOaOHaIOaOIaOIaOIaOIaOIaOIaOIaOIaOJaOKaOIaOIaOIaOIaOLaOIaOIaOIaOIaOIaOMaONaOIaOIaOIaOIaOIaOIaOIaIOaIOaIOaBoaOOaOPaOQaOQaOQaORaOSaNGaMsaOTaJdaJdaJdaJdaJdaOUaJjaOVaOWaOXaOYaNPaNPaJjaOZaPaaPbaPcaPbaPbaPdaPeaJjaJpaJqaPfaPfaPgaPhaPiaPiaPjaEsaPkaPlaPmaEyaPnaPoaPpaIbaIbaPqaPraEyaPsaEyaPtaPtaPtaPuaPvaPwaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafatHaxRayVaJMayWaxTaxTayXaJMayVaJMaPxawYaPyaxTaxRaPzaPzaLpaPzaLqatHaPAaLsaJQaPBaPBaPCaPDaPBaPEaPEaPEaPEaPEaPFaPGaPEaPEaPEaPEaPEaPHaPIaPJaPIaPKaPLaPMaLzaLAaPNaPOaPPaPQaLAaLzaPRaPSaPSaIOaIOaIPaPTaKraKraPUaPUaPUaPUaPVaPWaPXaPYaPZaQaaQaaQbaQcaQaaQdaQeaQfaPWaQgaPUaPUaPUaPUaKraKraQhaINaIOaIOaBoaQiaQjaQkaQkaQkaQkaQlaQmaQnaQoaQpaskaQraQsaQtaQuaJdaJdaQvaQwaQxaQyaQzaJjaQAaQBaQCaQCaQCaQCaQDaQEaJjaQFaJqaQGaHPaPgaPhaHPaHPaQHaEsaQIaQJaQKaEyaQLaQMaQNaQOaQOaQPaQNaQQaQRaEyaQSaQTaPtaQUaQVaQWaafaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawXaQXaxTaQYaPyaxTaxTaQZaQYaxTaQXaPyaxTaxTaxTaRaaRbaRbaRbaRbaRbaRbaRbaRcaRdaPBaReaRfaRgaRhaRiaRjaRkaRlaRmaRnaRoaRpaRqaRraRsaRtaRuaRvaRwaRxaPKaRyaPMaPMaRzaPMaRAaPSaPSaRBaRCaPSaPSaPSaRDaIOaIPaREaaaaaaaaaaaaaaaaaaaaaaPWaRFaRGaRHaRIaRJaRKaRJaRLaRMaRNaROaPWaaaaaaaaaaaaaaaaaaaaaaRPaINaIOaRQaRRaRSaRTaQoaQoaQoaQoaQoaRUaRVaQoaQoaQoaQraMpaRWaRXaRYaRZaSaaSbaScaSdaSeaJdaPbaSfaSgaSgaSgaSgaShaSiaJjaJpaJqaSjaSjaPgaPhaSkaSkaSlaEsaEsaSmaEsaEyaSnaPoaPraSoaSoaPqaPraEyaEyaEyaSpaSqaSraSsaStaSuaafaafaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaxRaSvaSwaSvaSvaSvaSvaSvaSvaSwaSvaSvaSxaxTaxTaSyaxTaxTaSzaxTaSAaSBaSCaSDaSEaPBaReaSFaSGaPEaSHaRnaRnaRnaRnaRnaRoaSIaRnaRnaRnaRtaPHaSJaSKaSLaPKaRyaPMaSMaSNaSOaSPaPSaSQaSRaSSaSTaSUaSVaIOaIOaIPaREaaaaaaaaaaaaaPWaPWaPWaPWaSWaSXaSYaSZaTaaTbaTcaTdaTeaTfaTgaPWaPWaPWaPWaaaaaaaaaaaaaRPaINaIOaIOaThaQoaTiaTjaTkaQoaTlaTmaCIaTnaToaTkaQoaQraMpaTpaRXaTqaTraTsaTtaTuaTvaRXaTwaTxaTyaSgaTzaTAaSgaTBaPbaJjaJpaJqaQGaHPaPgaPhaHPaHPaHPaTCaTDaHPaTEaEyaTFaTGaTHaSoaSoaTIaTHaTJaEyaTKaSsaSsaSsaSsaStaTLaTMaTMaTNaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasSasSaTOaTPaTPaTPaTPaTPaTPaTPazYasSatHaTQaTRaTSaTSaTSaTTaTSaTSaTSaTUaTSaTUaPBaReaTVaTWaPEaTXaRnaRnaTYaTZaUaaUbaTYaRnaRnaRnaUcaPHaUdaUeaUfaPKaUgaPMaUhaUiaUjaUkaPSaUlaSUaSUaSSaSUaUmaIOaIOaIPaKqaPVaUnaUoaPWaPWaUpaUqaUraUsaUtaUtaUuaUvaUtaUuaUvaUtaUwaUxaUyaUzaUAaPWaPWaUoaUnaUBaUCaINaIOaIOaBoaUDaTiaToaTkaQoaUEaUFaQoaUGaUHaTkaQoaQraMpaUIaRXaUJaUKaULaUMaUNaUOaRXaUPaUQaURaSgaUSaUTaSgaUUaUVaJjaJpaJqaUWaUWaPgaPhaUXaHPaHPaUYaHPaUZaVaaEyaVbaVcaVdaSoaSoaVeaVdaVfaEyaVgaSsaSsaSsaSsaSsaVhaViaVjaVkaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaafaVmazTaxVaxTaVnaVoaVpaVqaVraVsaVtaVuaVvaVwaVxaVyaVzaVAaPEaVBaRnaRnaTYaUaaVCaVDaTYaRnaRnaRnaRtaPHaPKaPKaVEaPKaVFaVGaVGaVGaVGaVHaVIaVJaSSaSSaSSaSSaUmaIOaIOaIPaLTaLTaVKaVLaVMaPWaVNaTbaUtaVOaUtaUtaUtaUtaVPaUtaVQaUtaVRaVSaVSaVTaVUaPWaVVaVLaVWaVXaLTaINaIOaIOaThaQoaRTaQoaQoaQoaVYaVZaQoaUGaWaaTkaQoaQraMpaWbaRXaWcaWdaWeaWfaWgaUOaWhaJdaPbaURaWiaSgaSgaSgaUUaPbaJjaWjaJqaEsaEsaWkaPhaWlaWmaHPaWnaWoaKZaWpaWqaWraWsaWtaWuaWuaWvaWwaWxaWqaWyaWzaSsaSsaSsaWAaWBaWCaTMaWDaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaWEaWFaWGayWaWHaWIaWJaWKaWLaWMaWNaWOaWPaWKaWQaWRaWSaWTaWUaPEaWVaRnaWWaWXaWYaWYaWZaWYaWYaWYaXaaXbaXcaXdaXeaXfaXgaXhaReaReaXiaPBaXjaPSaXkaXlaXmaXnaXnaXoaIOaIOaIOaIOaIOaXpaXqaXraXsaXtaXuaUtaXvaXwaXxaXyaXzaXAaXBaXCaXDaXEaXFaXtaXGaXHaXIaXJaXKaXLaXMaXNaXOaIOaXPaBoaRSaTiaXQaTkaQoaXRaXSaQoaUGaToaTkaQoaQraXTaRWaRXaWcaRXaXUaRXaXVaUOaXWaJdaQAaURaSgaSgaSgaSgaUUaQEaJjaXXaXYaXZaYaaYbaYcaYdaYdaYdaYdaYdaYdaYeaYfaYgaSoaSoaSoaSoaSoaSoaYhaYiaYjaSsaSsaSsaSsaYkaYlaYmaafaafaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaYnavtaYnaxTaYoaTUaYpaYqaYraYraYraYraYsaYtaTSaYuaYvaYwaYxaYyaYyaYyaYzaYyaYAaYBaYCaYDaYEaYEaYFaRtaYGaYHaYIaYJaYKaYLaYMaYMaYNaYOaYPaYQaYRaYSaYSaYSaYTaPSaYUaIOaYVaYWaYXaYYaYZaZaaZbaZcaZdaZeaZfaPWaPWaPWaPWaPWaPWaZgaZhaZiaZjaXwaZkaZlaPWaZaaYZaZmaZnaYWaZoaIOaIOaThaQoaZpaQoaQoaQoaFHaQoaQoaZqaQoaZraZraZraZraZsaZtaZuaRXaRXaRXaZvaZwaZxaJdaZyaZzaSgaZAaZAaZBaZzaZCaJjaZDaZEaZFaZGaPgaPgaPgaPgaZHaPgaPgaPgaZIaYiaSoaSoaSoaSoaSoaSoaSoaYhaYiaYjaSsaSsaZJaSsaSsaZKaYmaafaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaZLaZMaWGayWaZNaZOaZPaZQaZRaZSaZTaYraZUaZVaTSaZWaZXaYwaYxaZYaZZbaababaYybacbadbaeaPEbafbagbahbaiaPEbajbakbalbalbalbalbambalbalbanbaobaobaobapbaobaqbarbasbatbaubavbawbawbawbawbaxbaybazbaybaAbaBbaBbaBbaBbaBbaBbaBbaBbaCbaDbaDbaEbaDbaDbaDbaDbaDbaDbaDaZoaIOaIOaBobaFbaGaBlbaHaQobaIaQobaJbaKbaLaZrbaMbaNbaOaJdaJdaJdbaPbaQbaQbaQaJdaJdaJdbaRaSgaSgbqmbaWbaUbaVbcuaJjbaXaZEbaYaEsbaZbbabbbaWmbbcbbabbdaWmbbeaEybbfaIbbbgaSoaSobbgaIbbbhaEybbibbjbbkaSsaSsbblbbmaYmaafaafaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaVlaafaxRbbnaPybboaTUbbpbbpbbqbbrbbsbbqbbtbbpaTSbbubbvbbwbbxbbybbybbzbbAbbybbBbadbbCaPEbafbagbbDbbEaPEbbFbakbalbbGbbHbbHbbHbbIbalbbJbbKbbLbbMbarbarbarbaraIOaIObbNbbObbPbbQbbRbbSbbTbbUbbVbbWbaAbaBbbXbbYbbZbcabcbbccbcdbaCbaDbcebcfbcgbchbcibcjbckbdsbaDbcmbcnbcnaBoaBoaBoaBoaBobcoaThbcobcpaBoaBoaRRaBoaBoaBobcqbcrbcrbcrbcrbcrbcrbcsbcrbcqbaSbctbctbaTaZFaZFaZFaZFbcqbaXbcvbaYaEsaEsaEsaEsaEsbcwaEsaEsaEsaEsaEybcxbcybczbczbczbczbcAaEyaEybcBaSsbcCaSsaSsaWAbcDbcEaTMaWDaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazQasSbcFaAFaWGatHatHatHatHatHatHbcGbboaTUaTSaTSaTSaTSaTSaTSaTSaTSaTSbcHaReaYwaYxaZYbcIbcJbcKaYybcLbcMbcNaPEbafbagbcObcPaPEbbFbakbalbbHbcQbcQbbHbcQbalbbJbcRbcSbcSbcTbcUbcVbarbcWaIOaYVbcXbcYbcZbdabdbbdbbdabdcbddbaAbaBbdebdfbdgbdhbdibdjbdkbdlbdmbdnbdobclbdpbdqbdrbclatZbaDaZobdtaIOaNsbdubdvaZFaZFaZFaZFaZFaZFaZFbdwaZFaZFaZFaZFbdxaZFaZFaZFaZFaZFaZFaZFaZFbdyaZFaZFaZFaZFaZFaZFaZFaZFbdzbdAbdBbdCbdDbdCbdEbdCbdFbdGbdHbdCbdIbdCbdJbdKbdCbdCbdCbdCbdCbdCbdLbdMbdNbdObcCaSsaSsaSsaVkbdPaVjaVkaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaaaaafbdRazTaxVbdSbdTbdUbdUbdUbdUbdUbdUbdVbdWaPBaXiaReaYwaYxaYyaYybdXbdYaYyaPEaPEbdZaPEbafbeabcObebaPEbbFbakbalbecbedbbHbcQbeebalbbJbefbcSbcSbcSbegbehbarbeiaIOaYVbejbekbelbembenbeobepbdcbeqbaAbaBberbesbetbetbetbeubevbaBbewbexbclbclbdpbeybdrbclasnbaDbeAaIOaIOaNsbdubdvaZFaZFaZFaZFaZFaZFaZFbeBaZFaZFaZFaZFaZFaZFbeCbdCbdCbdCbdCbdCbdCbeDbdCbdCbdCbdCbdCbdCbdCbeEbeFbeGbeHaZFaZFaZFaZFaZFaZEaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFbeIbdzbeJaSsaSsbcCaSsaSsbeKbeLaTMaTMaTNaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaWEaWFbeMayWbeNbeObePbePbeQbePbePbePbeRaPBaPBaPBaPBaYwaYxaZYbeSbeTbeUaYybeVbeWbeXaPEaPEaPEaPEbeYaPEbbFbakbalbeZbbHbcQbfabfbbalbbJbarbfcbcSbcSbfdbfebarbffaIOaYVbfgbfhbelbembfibfjbepbdcbfkbaAbflbfmbfnbetbfobetbdfbfpbfqbewbfrbfsbftbfubfubfvbclbfwbaDaZobfxaIOaNsbdubdvaZFbfyaZFbfzbfAbfAbfAbfBbfAbfAbfAbfCaZFaZFaZFaZFbfDaZFbfybfEbfFbfGaZFaZFaZFbfHbfIbfJbfKbfLbfMbfNaZFaZFaZFaZFaZFbfObfPbfDaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFaZFbdzbfQbfRbfSbfTbfUbfVbbmbfWaafaaaaafaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaYnavtaYnaxTbfXbePbfYbfZbgabgabgbbgcbgdbgebgebgebgebgfbggbghbghbgibgjbghbgkbgkbglbgkbgmbgnbgnbgobgnbgpbgqbgrbgsbgtbgtbgubgvbgrbgwbgxbgybcSbcSbfdbgzbgAbffaIOaYVbgBbgCbgDbdabdabdabdabdcbgEbaAbaBbgFbgGbgHbgIbgJbgGbgKbaBbewbgLbgMbgNbgObgPbgQbgRbgSbaDbgTaHfaHfbgUbgUbgUbgUbgUbgUbgUbgVbgWbgWbgXbgYbgZbgVbhabhabhabhabhabhabhbbhbbhbbhcbhbbhbbhbbhdbhebfObhfbhgbhhbhibhjaZFaZFbhkbhkbhlbhlbhlbhlbhlbhmbhnbhnbhobhnaZFbhnbhobhnbhnbhpbhqbhqbhqbhqbhrbhgaPtaPtaPtaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaZLaZMbeMayWbhsbePbhtbePbhubhvbePbePbePaRebhwbhxbhxbhyaYyaZYbhzbcJbhAaYybhBbhCbhDbhEbhFbhGbhHbhIbhJbhHbhKbhLbhMbhNbhMbhMbhObhPbhQbhRbhSbcSbcSbhTbhUbhVbffaIObhWbgBbhXbhYbhZbiabibbicbidbaAbaAbaBbiebifbigbihbiibijbikbaBbewbilbimbinbiobipbgQbclbiqbaDaZoaIObirbgUbisbitbiubivbiwbixbiybizbizbiAbiBbiBavUbhabiDbiEbiFbiGbhabiHbiIbiJbiKbiLbiMbiNbiObiPbiObiObiObiQbiRbiSbiTbiSbiUbiUbhlbiVbiWbiXbhlbiYbiZbiYbhlbhmbhnbhpbhqbjabjbbjabhqbjcbjdbhqbjebjfbjgbhgaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdQbdQbdQbdQbdQbdQbdQbdQbdQbdQaaaaaaaMYbbnaPybjhbePbjibePbjjbjkbjlbMabePbjnaRebjoaRebjpaYyaYyaYyaYyaYyaYybjqbjrbjsaRebjtbalbalbalbjubalbalbalbjvbalbalbalbalbjwbjxbjybjzbcSbcSbfdbjAbgAbffaIObjBbgBbjCbhYbaAbaAbaAbaAbjDbaAbjEbjFbjGbjHbbXbjIbbXbjJbjKbjLbjMbilbjNbclbjObjPbgQbjQbjRbjSbjTbjUbjVbgUbjWbjXbjYbjZbkabkbbkcbkdbizbkebizbizbkfbkgbkhbkibkjbkkbhabklbkmbknbkmbkobkpbhbbkqbkrbksbktbhgbkubkvbkwbkxbkybkzbkAbkBbkCbkDbkCbkEbkFbkGbkHbhlbkIbkJbkKbhqbkLbkMbkNbkObkPbkQbhqbkRbkSbkTbhgaaaaaaaaaaaeaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazQasSbcFaAFaZMaTPaTPaTPbkUaTPbkVayWaxTaxTbePbkWbkXbkYbkZblablbblcbldbldbldbldbleblfblfblfbhHbhHbhHblgblhblhblhblibalbljblkbllblmblnbloblpblqblrblsbltblublvblwblxblyblzblAblBblBblCbjUblDblEblFblGblHblIblJblKblLblMblNbjLbjLbjLbjLblObjLbjLbjLbjLblPblQblRblSblTblUblVblWblXblYblZaIOaIObgUbmabmbbmcbjZbmdbmebkcbmfbmgbmhbmgbmgbmibmjbmkbmlbmmbmnbhabmobkmbmpbkmbkobmqbhbbjgbmrbmsbmtbhgbkubmubmvbmwbmwbmxbmybmzbmAbmAbmAbmBbmCbmDbmEbmFbmGbmHbmIbmJbmKbmLbkPbmMbmNbmObhqbmPbkSbmsbhgaaaaaaaaaaaaaaaaJGaJGaJGaJGaJGaJGaJGaJGaJGaJGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabmQbmRavtaYnawYawYawYaPyaxTaxTbePbmSbmTbkZbmUbePbePbePaPBbmVbmWbmXbmYbmXbmXbmXbmYbmXaPBaPBbalbalbalbmZbalblpblpbnablpblpblpblpblpbnbbncbndbnebnfbngbngbngbnhbnibnjbnkbnlbnmbnnbnobnpbnpbnqbnrbnsbntbnubnvbnwbnxbnybnzbnAbnBbnCbnzbnDbnxbnEbilbnFbnGbnFbaDbaDbaDbnHbewbnIaIOaIObgUbnJbnKbnLbjZbnMbnNbkcbkebizbnObnPbnQbnRbhabnSbnTbnUbnVbhabmobnWbkmbkmbkobkpbhbbhgbhgbhgbhgbhgbkubkvbnXbnYbnZboabobbocbodboebofbofbogbkCbohbhlboibojbokbhqbolbombonboobopboqbhqbmPbkSborbhgaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaabmQavtavtaYnaxSaxSaxSbosaxSaxSbePbotboubovbkZbePaaaaaaaaaaafaafbowbowbowbowbowbowbowaaaaaaboxboybozboAboBblpblpblpblpblpblpblpblpboCbjzbcSboDboEboFbarbarboGblvbarbarboHboIboJboKboLboMboMboNboMboOboPboMabRboQboRbnzboSbnBboSbnzboTboQbnEboUboVbfuboWboXboYboZbpabpbbpcaIObpdbpebpfbpgbnLbjZbphbixbpibkebizbpjbpkbizbplbhabkhbpmbpnbpobhabppbpqbprbpsbptbpsbpubpvbpvbpvbpvbpvbpwbkvbpxbkxbkxboabpybpzbpAbpBbpCbpCbpDbpEbpFbhlbpGbojbpHbhqbpIbpJbpKboobkPbpLbhqbkRbkSbpMbhgaaaaaaaaaaaaaafbpNbpObiCbpObiCbpObpQaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxRaYnaYnbpRaTPbpSazQasSbpTbpSbePbpUbpVbpWbpXbePaaaaaaaaaaaaaaabowbowbowbowbowbowbowaaaaaabpYbpZblpbqabqbbqbbqbbqbbqbbqcbqbbqbbqbbqdbqebqfbqgbqhbqibarbqjbfdbqkbqlbezbffbqnbqoboKboKboMbqpbqqbqrbqsbqtboMbqubqvbqwbqxbqybqzbqybqAbqBbqCbqDboUbqEbfubqFbaDbqGbnFbqHbqIbpcaIOaIObgUbqJbqKbnLbqLbqMbixbqNbqObqPbqQbqRbizbqSbqTbqUbqVbqWbqXbhabhbbqYbhbbhbbqZbqZbqZbqZbqZbqZbqZbqZbkubkvbnXbnYbnZbrabrbbrcbrdbrebrebrebpDbkCbrfbrgbrhbkJbribhqbrjbrkbrlbrmbkPbrnbhqbmPbmrbhgbhgaaaaaaaaaaaaaafbrobrpbrqbrrbrrbrsbroaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbrubrvbrwbrxblpblpblpbrybrybrybryboAblpblpblpbnbbrzbcSbrAbrBbrCbrDbrEbfdbcSbrFbpPbffbqnbrHbrIbrJbrKbrLbrMbrNbrObrPboMabRbrQbrRbnzbqybrSbqybnzbrTbrUbnEbrVbrWbrXbrYbaDbrZbnFbsabqIbpcaIObsbbgUbscbsdbnLbsebsfbixbsgbkebizbshbsibqPbsjbhabskbslbsmbsnbhabsobspbsqbsrbssbstbsubsvbswbsxbsybszbiQbiRbsAbsBbsCbsDbsEbkBbsFbrebrebrebsGbkCbsHbhlbsIbsIbsJbhqbsKbsLbsMbsNbkPbsObhqbmPbsPbhgaaaaaaaaaaaaaaaaafbsQbsRbrqbrrbrqbsSbiCaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaabmQavtavtaYnaxSaxSaxSbosaxSaxSbePbotboubovbkZbePaaaaaaaaaaafaafbowbowbowbowbowbowbowaaaaaaboxboybozboAboBblpblpblpblpblpblpblpblpboCbjzbcSboDboEboFbarbarboGblvbarbarboHboIboJboKboLboMboMboNboMboOboPboMabRboQboRbnzboSbnBboSbnzboTboQbnEboUboVbfuboWboXboYboZbpabpbbpcaIObpdbpebpfbpgbnLbjZbphbixbpibkebizbpjbpkbizbplbhabkhbpmbpnbpobhabppbpqbprbpsbptbpsbpubpvbpvbpvbpvbpvbpwbkvbpxbkxbkxboabpybpzbpAbpBbpCbpCbpDbpEbpFbhlbpGbojbpHbhqbpIbpJbpKboobkPbpLbhqbkRbkSbpMbhgaaaaaaaaaaaaaafbpNbpOavTbpOavTbpObpQaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxRaYnaYnbpRaTPbpSazQasSbpTbpSbePbpUbpVbpWbpXbePaaaaaaaaaaaaaaabowbowbowbowbowbowbowaaaaaabpYbpZblpbqabqbbqbbqbbqbbqbbqcbqbbqbbqbbqdbqebqfbqgbqhbqibarbqjbfdbqkbqlcCSbffbqnbqoboKboKboMbqpbqqbqrbqsbqtboMbqubqvbqwbqxbqybqzbqybqAbqBbqCbqDboUbqEbfubqFbaDbqGbnFbqHbqIbpcaIOaIObgUbqJbqKbnLbqLbqMbixbqNbqObqPbqQbqRbizbqSbqTbqUbqVbqWbqXbhabhbbqYbhbbhbbqZbqZbqZbqZbqZbqZbqZbqZbkubkvbnXbnYbnZbrabrbbrcbrdbrebrebrebpDbkCbrfbrgbrhbkJbribhqbrjbrkbrlbrmbkPbrnbhqbmPbmrbhgbhgaaaaaaaaaaaaaafbrobrpbrqbrrbrrbrsbroaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbrubrvbrwbrxblpblpblpbrybrybrybryboAblpblpblpbnbbrzbcSbrAbrBbrCbrDbrEbfdbcSbrFdPtbffbqnbrHbrIbrJbrKbrLbrMbrNbrObrPboMabRbrQbrRbnzbqybrSbqybnzbrTbrUbnEbrVbrWbrXbrYbaDbrZbnFbsabqIbpcaIObsbbgUbscbsdbnLbsebsfbixbsgbkebizbshbsibqPbsjbhabskbslbsmbsnbhabsobspbsqbsrbssbstbsubsvbswbsxbsybszbiQbiRbsAbsBbsCbsDbsEbkBbsFbrebrebrebsGbkCbsHbhlbsIbsIbsJbhqbsKbsLbsMbsNbkPbsObhqbmPbsPbhgaaaaaaaaaaaaaaaaafbsQbsRbrqbrrbrqbsSavTaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbsTbsUbsTbsVbsWblpblpblpblpblpblpboAblpbsXbalbalbsYbcSbcSbsZbtabtbbtcbfdbcSbcSbtdaIObqnbtebtfbtgbthbtibtjbtkbtlbtmboMabRbrUbrUbtnbtobtpbnzbtqbtrbtsbttbtubtvbtvbtvbtvbtvbtvbtwbtxbtyaHfbtzbtAbtBbtCbtDbtEbixbixbtFbkebizbizbizbizbtGbtHbizbtIbizbtJbtKbtLbtMbizbtNbtObtPbtQbtRbtSbtTbtUbqZbtVbtWbtXbtXbtYbtZbuabkBbubbkCbkCbucbudbkCbuebkBbufbugbuhbuibujbukbulbumbunbhqbhqbuobhgbhgbupbuqbuqbuqburbkIbrobrrbrqbrrbrrbrsbroaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaeaaaaaaaaabowbowbowbowbowbowbowbusbutbusbuublpblpblpbrybrybrybryboAblpbuvbuwbalbuxbcSbcSbsZbuybuzbtcbuAbuBbqfbuCbuDbuEbpcbuFbtgbuGbuHbuIbuJbuKbuLbuMbuNbuObuPbuQbuRbrSbuRbtrbuSbuTbuTbtubuUbuVbuWbuXbuYbuZbvabvbbvcaIObvdbvebvfbvgbvhbvibvjbvkbvlbvmbvlbvnbvlbvlbvobvpbvlbvpbvlbvlbvlbvqbvrbvsbvtbtObvubtQbvvbvvbvwbvxbqZbkubkvbvybvzbvAbvBbvBbkBbvCbvDbvEbkBbvFbkCbvGbvHbvIbvJbvKbvLbvMbvNbvObvPbvQbsIbkJbvRbvSbvTbvUbvVbvVbvVbvVbvWbvXbpObiCbvYbiCbpObvZaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbwabrvbwbbwcblpblpblpblpblpblpblpboAblpbuvbwdbalbwebegbcSbwfbqfbwgbqfbwhbcSbrFbezbffaIObpcbuFbtgboMbwibwjbwkbwlbwmboNbwnbwobwpbwqbtsbwrbwsbwtbwubwvbwwbtubwxbwybwzbwAbwBbwBbwCbwDbwEaIObvdbwFbvfbwGbizbwHbwIbwJbwKbwLbwKbwMbwKbwNbwObtLbwPbtLbtLbwQbwRbHfbHfbPJbPIbOJbwWbtQbwXbwYbtTbwZbqZbxabkvbiSbxbbxcbxbbxbbkBbkBbkBbkBbkBbxdbxebxfbxgbxhbxibxjbxkbxkbxlbxmbojbxnbxobxpbvRbojbvTbxqbojbxrbojbxsbkIbupbuqburbxtbkIaaaaaaaafaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbusbutbusbxubxvblpblpbxwbxxbxybxxbxzbxxbxAbxBbgrbxCbxDblybxEblybQKblzbxDbxFbxGbpPbffaIObxHbxIbxJboMbxKbxLbxMbxNbxOboNbxPbxQbxRbxSbxTbxUbxVbxWbxXbxYbxZbyabybbycbycbydbyebyfbygbtxbyhaIObyibgVbqNbyjbizbykbylbymbynbyobypbyqbyrbymbynbysbysbynbymbytbgWbHfcbhcckcckcdacdkbtQbywbyxbyybyzbqZbyAbyBbyCbyDbyEbxkbxkbyFbyGbxkbyHbyIbyJbyKbyLbxkbyMbyNbyObyPbyQbyRbySbySbySbySbySbyTbyUbyVbupburbkIbojbvVbyWbyXbyYbyZbzabzbaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaeaaaaaaaaabowbowbowbowbowbowbowbusbutbusbuublpblpblpbrybrybrybryboAblpbuvbuwbalbuxbcSbcSbsZbuybuzbtcbuAbuBbqfbuCbuDbuEbpcbuFbtgbuGbuHbuIbuJbuKbuLbuMbuNbuObuPbuQbuRbrSbuRbtrbuSbuTbuTbtubuUbuVbuWbuXbuYbuZbvabvbbvcaIObvdbvebvfbvgbvhbvibvjbvkbvlbvmbvlbvnbvlbvlbvobvpbvlbvpbvlbvlbvlbvqbvrbvsbvtbtObvubtQbvvbvvbvwbvxbqZbkubkvbvybvzbvAbvBbvBbkBbvCbvDbvEbkBbvFbkCbvGbvHbvIbvJbvKbvLbvMbvNbvObvPbvQbsIbkJbvRbvSbvTbvUbvVbvVbvVbvVbvWbvXbpOavTbvYavTbpObvZaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbwabrvbwbbwcblpblpblpblpblpblpblpboAblpbuvbwdbalbwebegbcSbwfbqfbwgbqfbwhbcSbrFcCSbffaIObpcbuFbtgboMbwibwjbwkbwlbwmboNbwnbwobwpbwqbtsbwrbwsbwtbwubwvbwwbtubwxbwybwzbwAbwBbwBbwCbwDbwEaIObvdbwFbvfbwGbizbwHbwIbwJbwKbwLbwKbwMbwKbwNbwObtLbwPbtLbtLbwQbwRbHfbHfbPJbPIbOJbwWbtQbwXbwYbtTbwZbqZbxabkvbiSbxbbxcbxbbxbbkBbkBbkBbkBbkBbxdbxebxfbxgbxhbxibxjbxkbxkbxlbxmbojbxnbxobxpbvRbojbvTbxqbojbxrbojbxsbkIbupbuqburbxtbkIaaaaaaaafaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbusbutbusbxubxvblpblpbxwbxxbxybxxbxzbxxbxAbxBbgrbxCbxDblybxEblybQKblzbxDbxFbxGdPtbffaIObxHbxIbxJboMbxKbxLbxMbxNbxOboNbxPbxQbxRbxSbxTbxUbxVbxWbxXbxYbxZbyabybbycbycbydbyebyfbygbtxbyhaIObyibgVbqNbyjbizbykbylbymbynbyobypbyqbyrbymbynbysbysbynbymbytbgWbHfcbhcckcckcdacdkbtQbywbyxbyybyzbqZbyAbyBbyCbyDbyEbxkbxkbyFbyGbxkbyHbyIbyJbyKbyLbxkbyMbyNbyObyPbyQbyRbySbySbySbySbySbyTbyUbyVbupburbkIbojbvVbyWbyXbyYbyZbzabzbaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbzcbzdbzcbzebzfbzgbzgbzgbzgbzgbzhbziblpbuvbzjbalbzkbzlbzmbznbzoboEbzpbzqbzrbarbarbzsaIObztbzubtgboMbzvbzwbzxbwjbzyboNbzzbzAbzBbzCbzDbzEbzFbzGbzHbzIbzJbtubzKbzLbzMbzNbyebyfbygbtxbzOaIObzPbzQbzRbzSbizbykbzTbymbzUbzVbzWbzXbzYbymbzZbAabAabAbbymbAcbizbHfcawcckccjcciccYccWbAibAjbAjbAkbAlbAmbAnbAobApbAqbvMbvMbArbvMbAsbvMbvNbvMbvMbvMbvMbAtbAubAvbAwbAxbAybAzbAAbABbACbySbADbAEbAFaafaafbkIbAGbvVbyXbyXbvWbAHbAIbAJaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowbAKbALbAMbalbalbANbrvbrvbrvbAObalbalbAPbAQbARbalbASbASbASbATbASbAUbAVbAWbAXbAYbAUbffaIObAZbBaaUnboMbuMbBbbBcbBcbBdbBebBfbBgbBhbBfbBibBjbBkbBlbBmbBmbBmbBnbtvbtvbtvbtvbtvbtvbtvbtxbBoaXNbBpbEabEabQRbQSbQTbymbymbBubBvbBwbBxbBxbBybBzbBAbBBbBzbBCbAcbizbHfbVCbUqbYTbVDbUpbQWbBJbBGbBGbBKbBLbBMbBNbBObBObBObBObBObBPbBObBObBQbBRbBSbBTbBTbBUbBVbvRbBWbAwbBXbBYbBZbCabCbbCcbySbADbAEbCdaaaaaabkIbCebCfbkIbvWbkIbkIbvWbkIaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabCgaafaaaaaaaaaaaabASbChbCibCjbCkbAUbClbCmbCnbCobAUbffaIObCpbCqbCrbCqbCsbCtbCubCvbCwbCxaXNbCyaXNbCzbCAbCBbCCbCDbCEaIOaMibCFaMjaNsbCubCGbCHaIObCIbCJbzOaIObCKbEabPUbQQbPSbPTbCPbCQbCRbCSbCTbBxbBxbCUbBzbCVbCWbCXbBCbAcbCYbHfbPRbPQbPMbPLbPKbDebDfbDgbDhbqZbqZbxabDibBObDjbDkbDlbDmbDnbDobDpbBQbDqbDrbDsbBTbBTbDtbvRbBWbDubDvbDwbDxbDybDzbDAbySbADbDBbyVbyVbyVbyVbyVbkIbkIaaaaaaaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowbowbowaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabASbDCbDDbDEbDFbDGbDHbDIbDJbDKbAUbffbDLbDMaIOaIOaIOaIOaNsbCubCGbDNaIOaIObDOaIOaIObDPbDQbDRaIOaIOaIOaIObCFaIOaNsbCubCGbDSaXNbDTbDUbDVbDWbDXbHgbIkbHhbImbIlbEdbEebEfbEgbEhbEibzYbymbEjbEkbElbEmbymbAcbizbHfbHfbHfbHfbHfbqZbqZbqZbqZbqZbqZbEnbEobEpbBObEqbErbEsbEtbEubEvbEwbBQbExbEybEzbEzbBTbEAbEBbECbEDbEEbEFbDzbEGbEHbEIbySbADbAEbyVbEJbEKbEKbyVaafaafaafaafaafaafaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbELbEMbEMbENbEObEObEPbEPbEPbEPbEQaafaafaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowaaaaaaaaaaaaaaaaaaaaaaaabERbESaGwbESbEUaaaaaaaaabASbASbEVbEWbDEbEWbEXbEYbEZbFabFbbAUbFcbffbFdbFebuDbFfbuDbFgbFhbFibuEaIObFjbFkbjUbjUbFlaXNaXNaXNaXNaXNaXNbFmbFnbFobFpbFqbFrbFsbFtbFubFvbFwbFrbFxbFBbFAbFzbFybEabEabynbFCbynbymbymbymbymbymbymbymbymbAcbizbFDbFEbFFbzTbFGbEcbIrbIpbIqbIobInbFMbFNbFObBObFPbFQbDlbFRbFSbFTbFUbBQbFVbEybEzbEzbBTbFWbFXbFYbFZbGabGbbGcbGdbGebGfbGgbGhbGibGibGibGibGjbAFaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafbGkbGlbGmbGlbEObEPbEPbGnbGobGnbEPbEPaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabowbowbowbowbowaaaaaaaaaaaaaaaaaaaaaaaabERbESavQbESbEUaaaaaaaaabASbASbEVbEWbDEbEWbEXbEYbEZbFabFbbAUbFcbffbFdbFebuDbFfbuDbFgbFhbFibuEaIObFjbFkbjUbjUbFlaXNaXNaXNaXNaXNaXNbFmbFnbFobFpbFqbFrbFsbFtbFubFvbFwbFrbFxbFBbFAbFzbFybEabEabynbFCbynbymbymbymbymbymbymbymbymbAcbizbFDbFEbFFbzTbFGbEcbIrbIpbIqbIobInbFMbFNbFObBObFPbFQbDlbFRbFSbFTbFUbBQbFVbEybEzbEzbBTbFWbFXbFYbFZbGabGbbGcbGdbGebGfbGgbGhbGibGibGibGibGjbAFaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafbGkbGlbGmbGlbEObEPbEPbGnbGobGnbEPbEPaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGpbGqbGrbGqbGpbGsbGtbGubASbGvbEWbGwbGxbGybGzbGAbGAbGBbGCbAUbGDbGDbGEbGDaUnaUnaUnaUnbGFbGFbGFbGFbGFbGFbGFbGFbGGbcnbcnbGHbGHbGHbGHbGIbGJbGHbGHbGHbGHbGKbGLbGMaIUbGNbGObDZbDcbDbbDYbDdbEbbEabGVbGWbGXbynbGYbGYbGZbHabHbbHcbynbHdbizbizbizbizbizbAcbCNbCObCZbDabFHbEcbHibHjbIGbIGbIGbIGbIGbIGbIGbIGbIGbBQbHlbHmbHnbHnbBTbHobHpbHqbHrbHrbHrbHrbHsbHtbHubHvbHrbHrbHrbHrbAEbHwbHxaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagaagbHybGlbGlbHzbEPbEPbGnbGnbHAbGnbGnbEPbEPaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGwbHBbHCbHBaGwbHDbHEbHFbASbHGbHHbEWbHIbHJbAUbHKbHLbHMbHNbAUbHObHObHPbGDaaaaaaaaaaaabGFbHQbHRbHSbHTbHUbHVbGFbHWbHXbHYbGHbHZbIabIbbIcbIdbIebIfbIgbIhbIibIjbFIbGRbGQbEabEabGPbFLbFKbFJbGSbEabIsbItbIubIvbBxbBxbBxbBxbBxbIwbIxbIybtLbtLbtLbtLbwQbAcbGTbCObCZbDabHebGUbICbHjbIGbWLbWLbWLbWObWMbWLbWLbWLbBQbIKbILbIMbIMbBTbINbIObBWbIPbIQbIRbISbITbIUbIVbIWbIXbIYbIZbHrbyVbJabyVbJbbJbbJbbJbbJbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabJcbEPbHybEPbEPbGnbGnbGnbGnbGnbGnbGnbEPbEPaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavQbHBbHCbHBavQbHDbHEbHFbASbHGbHHbEWbHIbHJbAUbHKbHLbHMbHNbAUbHObHObHPbGDaaaaaaaaaaaabGFbHQbHRbHSbHTbHUbHVbGFbHWbHXbHYbGHbHZbIabIbbIcbIdbIebIfbIgbIhbIibIjbFIbGRbGQbEabEabGPbFLbFKbFJbGSbEabIsbItbIubIvbBxbBxbBxbBxbBxbIwbIxbIybtLbtLbtLbtLbwQbAcbGTbCObCZbDabHebGUbICbHjbIGbWLbWLbWLbWObWMbWLbWLbWLbBQbIKbILbIMbIMbBTbINbIObBWbIPbIQbIRbISbITbIUbIVbIWbIXbIYbIZbHrbyVbJabyVbJbbJbbJbbJbbJbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabJcbEPbHybEPbEPbGnbGnbGnbGnbGnbGnbGnbEPbEPaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGpbHBbHBbHBbJdbJebEWbEWbJfbJgbEWbEWbJhbJibAUbAUbAUbJjbAUbAUbJkbJlbJmbJnaaabJobJpbJqbJrbJsbHVbJtbJubJvbJwbJxbJybJzbJAbJBbJCbJDbJEbJFbJGbJHbJIbGHbGHbJJbJKbLObMTbMSbMVbMUbMXbMWbNibMYbLWbLVbJWbJXbJYbymbJZbKabBxbBxbKbbKcbJMbJMbJMbJMbJMbKebLRbLSbTobLUbLQbLQbLQbLPbKibKjbIGdPxdPwbWLdPubWLbWLbWLdPvbBQbKobEybKpbKpbBTbBVbKqbKrbKsbKtbKtbKtbKtbKubKvbKwbKxbKybKzbHrbKAbKBbKCbKDbKEbKFbKGbKHaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbEObEPbKIbKJbKJbGnbGnbGnbGnbGnbGnbGnbGnbEPbEPaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGwbHCbHCbHCaGwbKKbKLbKMbKNbKObEWbKPbKQbKRbKSbKTbKTbKUbKTbKTbKVbKWbKXbKYaaabKZbLabLbbLcbLdbHVbLebLfbLgbLhbGFbLibLjbLkbGHbLlbLmbLnbLobLpbLqbLrbLsbLtbLubLvbNjbNqbNpbNnbIzbOubOtbOsbOrbNlbEabLGbLHbLIbymbLJbLKbBxbBxbLLbLMbJMbOIbOGbOHbOzbkebOybtLbOCbOFbOAbOBbNkbEcbHibLXbIGbWLdPybWLbWLbWLbWLbWLbWLbBQbMabEybMbbMbbBTbMcbMdbBWbMebKvbKvbMfbMgbMhbMibMjbMkbMlbMmbMnbMobMpbMqbMrbMsbMtbKGbMuaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabEPbEPbMvbGnbGnbGnbGnbGnbGnbGnbGnbGnbGnbGnbEPbEPaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavQbHCbHCbHCavQbKKbKLbKMbKNbKObEWbKPbKQbKRbKSbKTbKTbKUbKTbKTbKVbKWbKXbKYaaabKZbLabLbbLcbLdbHVbLebLfbLgbLhbGFbLibLjbLkbGHbLlbLmbLnbLobLpbLqbLrbLsbLtbLubLvbNjbNqbNpbNnbIzbOubOtbOsbOrbNlbEabLGbLHbLIbymbLJbLKbBxbBxbLLbLMbJMbOIbOGbOHbOzbkebOybtLbOCbOFbOAbOBbNkbEcbHibLXbIGbWLdPybWLbWLbWLbWLbWLbWLbBQbjmbEybMbbMbbBTbMcbMdbBWbMebKvbKvbMfbMgbMhbMibMjbMkbMlbMmbMnbMobMpbMqbMrbMsbMtbKGbMuaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabEPbEPbMvbGnbGnbGnbGnbGnbGnbGnbGnbGnbGnbGnbEPbEPaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtbrtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaabGpbMwbMxbMybGpbMzbGtbGubASbASbMAbMAbMAbASbASbGDbGDbGDbGDbMBbGDbGDbMCbKYaaabKZbMDbMEbMFbMGbMHbMIbMJbMGbMGbMKbMLbMMbMNbGHbGHbGHbGHbGHbGHbMObGHbGHbMPbMQbMRbIzbKdbJVbKdbIzbJSbJRbJUbJTbJQbEabMZbNabNbbymbNcbNdbNebNfbNgbNhbJMbJNbJObJPbIBbNmbJLbNobIAbwUbwUbwUbwUbwUbHibHjbIGbIGbWPbWLbWLbWLbWLbIGbIGbBQbNtbNubMbbMbbBTbNvbMdbBWbIPbNwbNxbNybNzbNAbNBbNCbKvbNDbNEbHrbNFbNGbNHbJbbNIbNJbNKbNLaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbEPbGnbGnbGnbGnbGnbGnbNMbGnbNNbGnbGnbGnbGnbGnbEPbEPaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNObESbNPbESbNQaaaaafaaaaaabASbNRbNSbNTbASaaaaaaaaabGDbNUbNVbJkbGDbMCbKYaaabKZbNWbNXbNYbNZbHVbOabObbOcbOdbGFbOebOfbOgbOhbOibOibOibOibOibOibOibOibOkbOlbOmbOnbOobOpbOqbKfbKgbLwbKfbKhbKgbKfbOvbOwbOxbOvbOvbOxbOvbOvbOwbOvbLEbLFbLCbLDbLBbODbOEbkfbLzbLAaQqbLybLNbwUbOKbHjbIGbWQbcubaWbXTbWRbaTbaSbWQbBTbOSbOTbDsbBTbBTbOUbMdbOVbJbbJbbHrbHrbHrbHrbHvbHrbOWbKvbOXbHrbOYbJabyVbJbbOZbPabPbbJbaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabEPbPcbPcbPcbPcbPcbPcbPdbGnbPebPcbNNbGnbGnbGnbGnbEPaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNObESbNPbESbNQaaaaafaaaaaabASbNRbNSbNTbASaaaaaaaaabGDbNUbNVbJkbGDbMCbKYaaabKZbNWbNXbNYbNZbHVbOabObbOcbOdbGFbOebOfbOgbOhbOibOibOibOibOibOibOibOibOkbOlbOmbOnbOobOpbOqbKfbKgbLwbKfbKhbKgbKfbOvbOwbOxbOvbOvbOxbOvbOvbOwbOvbLEbLFbLCbLDbLBbODbOEbkfbLzbLAavSbLybLNbwUbOKbHjbIGbWQckSbSjbXTbWRbYSbSjbWQbBTbOSbOTbDsbBTbBTbOUbMdbOVbJbbJbbHrbHrbHrbHrbHvbHrbOWbKvbOXbHrbOYbJabyVbJbbOZbPabPbbJbaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabEPbPcbPcbPcbPcbPcbPcbPdbGnbPebPcbNNbGnbGnbGnbGnbEPaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaafaaaaaaaaaaafaaaaaaaaabGDbPfbPgbPhbGDbMCbPiaaabPjbJpbPkbPlbPmbHVbHVbPnbPobPpbPqbPrbPsbPtbPubPubPubPubPubPubPubPubPwbPxbPybPybPzbPAbPBbPCbPDbPEbPFbPGbPGbPEbPGbPGbPFbPGbPGbPGbPGbPGbPGbPFbPHbwSbyubyvbAdbAebPNbPObPPbAfbAgbAhbBrbwVbwUbHibHjbIGbONbOMbOLbIIbIIbOPbOObOQbBTbBTbQdbBTbBTbQebQfbMdbojbQgaafbQhbQibQjbQkbQlbQkbQmbQnbQobHrbQpbHwbQqbJbbQrbQsbQsbQtaagaagaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabQubGlbGlbGlbGlbGlbGlbGlbQvbGobGnbGnbGnbGnbQwbGobEPaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafaafaafbGDbGDbGDbGDbGDbQxbGDaaaaaaaaaaaabGFbQybQzbQAbQBbGFbQCbGFbQDbQEbQFbQGbQGbQHbQIbQHbRIbRHbQGbQGbQGbQGbQGbQLbQGbQGbQMbQNbQObQGbQGbQGbQPbQGbGKbGKbGKbGKbGKbGKbGKbGKbGKbHjbwSbBEbBtbBDbBFbQUbOEbQVbCLbCMbBHbBIbBsbwUbHibRbbPVbORbPXbPWbPZbPYbQbbQabRcbQcbRlbRmbojbRnbojbQfbMdbojbRoaafbQhbRpbRpbRqbRrbRsbRtbRubRvbHrbRwbHwbAEbJbbJbbJbbJbbJbaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabEPbKJbKJbKJbKJbKJbKJbRxbGnbKIbKJbRybGnbGnbGnbGnbEPaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabRzbRAbMCbGDbGDbGDbGDbGDbGFbGFbGFbGFbGFbGFbGFbGFbRBbRDbRCbQJbRGbRFbREbREbOjbRJbRKbRLbRMbRNbRObRPbRQbRRbRSbRTbRUbRVbRWbRXbRYbRZaafaaaaaaaaaaaaaaaaaabGKbSabHjbwSbwTbwTbwSbwTbSbbScbsjbwUbwUbwUbwUbwUbwUbHibSdbIGbIFbIFbIDbIIbKkbIJbIIbIIbIHbSlbSmbSnbojbSobQfbMdbSpbSqaafbQhbRpbSrbQkbSsbQkbStbSubSvbHrbRwbHwbSwbSxbyVaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbEPbGnbGnbGnbGnbGnbGnbNMbGnbRybGnbGnbGnbGnbGnbEPbEPaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafbSybSzbSAbSBbSBbSCbSDbSEbSFbSGbSHbSIbSJbSIbSKbSFbSLbSMbSNbSObSPbSQbSRbSRbSSbSTbRKbSUbRMbRNbRObRPbSVbSWbSXbSYbSZbTabSZbTbbTcbTdaafbTebTebTebTebTeaaabGKbTfbTgbPEbPGbPGbPEbThbQXbLTbTkbThbPGbPGbPGbPGbPGbTlbTmbIGbKlbKnbKmbLZbLYbNsbNrbIGbIGbrhbTubrhbrhbrhbTvbTwbTxbrhbHrbHrbHrbHrbHrbTybHrbHrbHrbHrbHrbRwbHwbTzbSxbyVaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabEPbEPbMvbGnbGnbGnbGnbGnbGnbGnbGnbGnbGnbGnbEPbEPaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabTAaaaaafaafbTBbTBbTBbTBbTBbTBbTBbTBbTCbTDbSFbTEbSGbSGbSIbTFbSKbSFbTGbTHbTIbTJbTKbTLbTMbTNbTObTPbRKbTQbTRbTSbTRbTTbTUbSWbTVbTWbTXbTYbTZbUabUbbUcbUdbUebUfbUgbUhbTeaaabGKbUibUjbUkbUlbUmbUnbUobSfbSgbUrbUobUobUsbUtbUobUobUubHjbIGbIGbIGbIGbIGbIGbTtbIGbIGbUwbUxbUybUzbUAbrhbTubUvbUCbrhbUDbUEbUFbUGbUHbRwbUIbAEbUJbAEbAEbRwbHwbUKbyVbyVbyVaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbEObEPbPebPcbPcbGnbGnbGnbGnbGnbGnbGnbGnbEPbEPaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabULbUMbUNbUObUObUObUPbUQbURbUSbUTbUUbUVbTBbUWbTDbSFbUXbSGbSHbSGbSIbUYbSFbUZbVabSNbSObVbbVcbSZbSZbVdbVebVfbVgbSRbSRbVhbVibSZbVjbTVbTWbVkbVlbVlbVmbVnbVoaafbVpbVqbUhbVrbTeaafbGKbVsbVtbGKaaaaafaaabVubVvbVwbVxbVuaafaafaaaaafbGKbVybVzbPGbPGbPGbPGbPGbPGbPEbPGbPGbPGbPGbPFbVAbPGbVBbTibTjbVEbVFbVGbVHbUBbVHbVIbVJbVHbVHbVHbVHbVHbVKbVLbVMbVNbVObyVbyVbyVbyVaaaaafaaaaaaaaaanmanmanmaafaaaaaaaafaaaaaaaafaaaaaabJcbEPbHybEPbEPbGnbGnbGnbGnbGnbGnbGnbEPbEPaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabVPbVPbVPbVPbVPbVQbVRbVSbVTbVTbVUbTBbVVbVWbVXbVYbVZbWabSGbSGbWbbSFbWcbSMbSNbQGbQGbWdbWebWfbWgbWhbWibWjbSZbSZbWkbWlbWmbWnbWobWpbWqbWrbWsbWtbWubWvbWwbUebWxbUhbUhbTeaafbGKbPybPybGKaaaaafaaabWybWzbWAbWBbWyaafaafaaaaafbGKbWCbWDbWEbWFbLtbWGbWGbWHbWIbWJbWKbUobUobUsbUtbUobUobQZbQYbWNbRhbRhbRkbSebRibRjbRhbRfawKavUavUavTbRfbWSbAEbWTbWUbWVbWWbWXbWYbWZbXabXabXabXabXabXabXabXabXabXabXabXabXabXabXabXabXbbXcbXcbXdbEPbEPbGnbGnbXebGnbGnbEPbEPaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaafaafbXfbXgbXhbXibXhbXjbXkbXlbXmbXmbXnbTBbXobJkbSFbXpbSGbXqbSGbSGbSGbXrbUZbXsbSNbXtbQGbXubRKbXvbXwbXxbRKbXybXzbSZbWkbWlbXAbRKbXBbXCbXDbXEbXFbXGbXFbXHaafbTebTebTebTebTeaafbGKbGKbXIbGKaafaafaafbXJbXKbXLbXMbXJaafaaaaaaaafbGKbGKbGKbGKbGKbXNbGKbGKbXObXPbXQbGKbGKaaaaaaaaaaaabXRbXSbTrbXUbHkbTsbTnbRabTpbTqbSiazGbSkdQfbIEbShbHkbyVbXVbXWbXXbyVbyVbyVbyVaaaaafaaaaaaaaaanmanmanmaafaaaaaaaafaaaaaaaafaafaafbXYbXZbYabHzbEObEPbEPbGnbGobGnbEPbEPaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbXfbYbbYcbYdbYebVSbYfbVSbYgbVSbYhbYibYjbYkbSFbYlbSGbXqbSGbSGbYmbSFbYnbYobSNbYpbYqbSZbYrbYsbYtbYtbRKbYubWmbYvbYwbYxbYybYzbYAbYBbYCbYDbTXbYEbYFbYGbUdbUebYHbYIbYIbTeaafaafbPybYJbPyaaaaafaaabYKbYLbYMbYNbYKaafaaaaaaaafaaaaaaaaabGKbYObPybYPbGKaaaaafaaaaaaaafaaaaaaaaaaaabYQbYRcrncrmdPAcrRdPDdPCbTqdPPdPRcirbIEbIEbIEdQRbHkbYUbYUbYVbYWbYUaaaaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbYXbEMbEMbENbEObEObEPbEPbEPbEPbEQaafaafaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabVPbVPbVPbVPbVPbVQbVRbVSbVTbVTbVUbTBbVVbVWbVXbVYbVZbWabSGbSGbWbbSFbWcbSMbSNbQGbQGbWdbWebWfbWgbWhbWibWjbSZbSZbWkbWlbWmbWnbWobWpbWqbWrbWsbWtbWubWvbWwbUebWxbUhbUhbTeaafbGKbPybPybGKaaaaafaaabWybWzbWAbWBbWyaafaafaaaaafbGKbWCbWDbWEbWFbLtbWGbWGbWHbWIbWJbWKbUobUobUsbUtbUobUobQZbQYbWNbRhbRhbRkbSebRibRjbRhbRfbRebRdbRdbrGbRfbWSbAEbWTbWUbWVbWWbWXbWYbWZbXabXabXabXabXabXabXabXabXabXabXabXabXabXabXabXabXbbXcbXcbXdbEPbEPbGnbGnbXebGnbGnbEPbEPaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaafaafbXfbXgbXhbXibXhbXjbXkbXlbXmbXmbXnbTBbXobJkbSFbXpbSGbXqbSGbSGbSGbXrbUZbXsbSNbXtbQGbXubRKbXvbXwbXxbRKbXybXzbSZbWkbWlbXAbRKbXBbXCbXDbXEbXFbXGbXFbXHaafbTebTebTebTebTeaafbGKbGKbXIbGKaafaafaafbXJbXKbXLbXMbXJaafaaaaaaaafbGKbGKbGKbGKbGKbXNbGKbGKbXObXPbXQbGKbGKaaaaaaaaaaaabXRbXSbTrbXUbHkbTsbTnbRabTpbTqbSibRgbSkdQfbIEbShbHkbyVbXVbXWbXXbyVbyVbyVbyVaaaaafaaaaaaaaaanmanmanmaafaaaaaaaafaaaaaaaafaafaafbXYbXZbYabHzbEObEPbEPbGnbGobGnbEPbEPaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbXfbYbbYcbYdbYebVSbYfbVSbYgbVSbYhbYibYjbYkbSFbYlbSGbXqbSGbSGbYmbSFbYnbYobSNbYpbYqbSZbYrbYsbYtbYtbRKbYubWmbYvbYwbYxbYybYzbYAbYBbYCbYDbTXbYEbYFbYGbUdbUebYHbYIbYIbTeaafaafbPybYJbPyaaaaafaaabYKbYLbYMbYNbYKaafaaaaaaaafaaaaaaaaabGKbYObPybYPbGKaaaaafaaaaaaaafaaaaaaaaaaaabYQbYRcrncrmdPAcrRdPDdPCbTqdPPdPRdPQbIEbIEbIEdQRbHkbYUbYUbYVbYWbYUaaaaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbYXbEMbEMbENbEObEObEPbEPbEPbEPbEQaafaafaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafbXfbYYbYZbZabYZbZbbZcbZdbZebZfbZgbTBbMCbZhbSFbZibSGbZjbZkbZlbZmbSFbZnbXsbSNbZobZpbTcbZqbTcbZrbZsbZtbTcbZubZvbZwbZxbZybZzbZAbZBbZCbSZbZDbZEbZFbVoaafbVpbZGbZHbZIbTeaafaaaaaaaaaaaaaaaaaaaaabZJbVubZKbZLbZJaafaafaafaafaafaafaaabGKbZMbZNbZObGKaaaaafaaaaaaaafaaaaaaaaaaaabZPbZQcjWcjVcjBcjecmrcjZcjYcjYcpTcnFcnqdPHbIEdQQbHkbYUbZTbZUbZVbYUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanmanmanmanmacTbVPbVPbVPbVPbVPbTBbTBbTBbTBbTBbTBbTBbMCbJkbSFbSFbSFbSFbSFbSFbSFbSFbZWbXsbSNbZXbZYbZZcaacabcaccadcaecafcagcahbWkbWlcaicajcakcalcambSZbZDcancaocapbWwbUecaqbYIbYIbTeaafaaaaaaaaaaafaafaafaaabVucarcascatbVubVubVubVubVubVubVuaafbGKbGKbGKbGKbGKaaaaafaaaaaaaafaaaaaaaaaaaacaucavdPIcaxdPYdPXdPJdPWbTqbTqdQadPZbIEbIEbIEdQTbHkbYUcaycazcaAbYUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaBcaCcaCcaDcaEbGDbJkcaFbKTbKTbKTcaGcpUcaGcaGbKTcaHbKTdPFcaJdPEcaJcaJcaKcaJcaJcaLbGDcaMbXsbSNcaNcaOcaPbQGbQGbQGbQGbQGbQGbQGcaQbWkbWlbTVcaRcaScaTcaUbSZbZDbZEcaVbVoaafbTebTebTebTebTeaafaaabVubVubVubVubVubVubVucaWcaXcaYcaZcbacbbcbccbdcbebVuaafaafaafaafaafaafaafcbfaafaafaafaafaafaafaafcbgbXRdPGcbidPTdPSdPSdPWbTqdPPdPVcisbIEbIEbIEdQSbHkbYUcbjcbkcblbYUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaciucbncbocbpbJkcbqbJkcbrbJkcbtbJkcbscbxbGDbGDcbucbvcbvcbwbGDdPNcbwcbxcbxcbybJkcbzbGDbZWbXsbSNcbAcbBbSZcbCbQGaaaaaaaaaaaabQNcbDbWkbWlbXAcbEcakbXzcbFcbGcbHcbIcbJbYGbUdbUecbKcbLcbMbTeaafaaabVucbNcbOcbPcbQbVucbRcbScaXcbTcaZbXKcbUbXKcbVbXKbVuaaaaaaaaaaafaaaaaaaaaaafaaaaaaaafaaaaaaaaaaaabXRcbWdPOcbYbHkdQidQdcrCdQUdQedQhciwbIEdQVdQWcVNbHkcbZccaccbcccccdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccecaCcaCcaDcbtbGDccfcbrcbxcbxcbxcbxccgcbxccgcqzckcdQxcqwcrycsmcrkcricbxccpbJkcbzbGDdPLbXsbSNcitcitcrucitcitcifcitcifcitbQGccwccxbWlbXAcbEccybXzcbFcczbZDbZEccAbVoaafbVpccBccCccDbTeaafaaabVuccEccFccGcaZbVuccHcaZccIccJcaZccKccLccMccNccObVuaaaaaaaaaaafaaaaaaaaabXRbXRbXRbXRbXRbXRbXRbXRbXRccPdPMccRbHkbHkbHkbHkbHkbHkbHkbHkbHkbHkbHkbHkbHkaafccSccTccSaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanmanmanmanmacTcbxccUccgccgccgccgccVccgccgcyVccXdQCcyWdQAcgqcdccyXcdecdecdecdfbGDcwIdQOcwJcitcixcjfcjOcjUckScjOclbcwKbQGcdqcdrbWlbXAcbEcakbXzcdscdtcducdvcdwcapbWwbUecdxcbLcbLbTeaafcdycdzcdAcdBcdBcdCcdDcdEcdFcdGcdHcdIcdJcdKcdLcdMcdNbVuaaaaaaaaaaafaaaaaaaaabXRcdOcdPcdQcdRcdScdTcdUcdVcdWdQPcdYcdZceaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaafcebceccebaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQalQalQalPalPalQalPalPalPampalPalPalPalQalQaaaaaaaafaafaaaaaaaaaaaaaaaaaaaafcedceecefcegcehceicejcekcelcrDcdbcdbcvudQAcgqcdbcvFcvEcvGcdeceqdQbcesbXsbSNcitcjccjccjccjccjQcjccjccjcbQGcodcmQbWlbXAceycezbSZceAceBbZDceCceDbVoaafbTebTebTebTebTeaafaaabVuceEceFceGceHceGceIceJceKceLceGceMceNceGceIceObVuaafaafaafaafaafaafaafbXRcePceQcePceRceSbZQceTcdVceUdQNceUbXRbXRaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaafaaaceWaaaaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaafaafaaaaafaafaaaaaaaafaafaafaaaalQaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaceXceeceYceZcfccfdciocgdckVcgAcffclIcgzcrhcgqcdbcdbcfhcdbcgxbYpcgpcfkcgrcfmchCchAchBchAchAchnchAchAchAchgcgBchDcfscftcfubTVcaRcfvcfwcfxcfycfzbYGbUdbUecfAcfBcfBbTeaafaaabVucfCbXKcfDbVucfEcfFceNcfGcfHcfIcfJccNcfKcfLcfMbVuaaaaaaaaaaafaaaaaaaaabXRcePcePcePcfNcfOcdTcfPcfQcfRcgocfTcfUbXRaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaaacfVaaaaafaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaBcaCcaCcaDcaEbGDbJkcaFbKTbKTbKTcaGcpUcaGcaGbKTcaHbKTdPFcaJdPEcaJcaJcaKcaJcaJcaLbGDcaMbXsbSNcaNcaOcaPbQGbQGbQGbQGbQGbQGbQGcaQbWkbWlbTVcaRcaScaTcaUbSZbZDbZEcaVbVoaafbTebTebTebTebTeaafaaabVubVubVubVubVubVubVucaWcaXcaYcaZcbacbbcbccbdcbebVuaafaafaafaafaafaafaafcbfaafaafaafaafaafaafaafcbgbXRdPGcbidPTdPSdPSdPWbTqdPPdPVdPUbIEbIEbIEdQSbHkbYUcbjcbkcblbYUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabETcbncbocbpbJkcbqbJkcbrbJkcbtbJkcbscbxbGDbGDcbucbvcbvcbwbGDdPNcbwcbxcbxcbybJkcbzbGDbZWbXsbSNcbAcbBbSZcbCbQGaaaaaaaaaaaabQNcbDbWkbWlbXAcbEcakbXzcbFcbGcbHcbIcbJbYGbUdbUecbKcbLcbMbTeaafaaabVucbNcbOcbPcbQbVucbRcbScaXcbTcaZbXKcbUbXKcbVbXKbVuaaaaaaaaaaafaaaaaaaaaaafaaaaaaaafaaaaaaaaaaaabXRcbWdPOcbYbHkdQidQdcrCdQUdQedQhdQgbIEdQVdQWdQXbHkcbZccaccbcccccdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccecaCcaCcaDcbtbGDccfcbrcbxcbxcbxcbxccgcbxccgcqzckcdQxcqwcrycsmcrkcricbxccpbJkcbzbGDdPLbXsbSNcitcitcrucitcitcitcitcitcitbQGccwccxbWlbXAcbEccybXzcbFcczbZDbZEccAbVoaafbVpccBccCccDbTeaafaaabVuccEccFccGcaZbVuccHcaZccIccJcaZccKccLccMccNccObVuaaaaaaaaaaafaaaaaaaaabXRbXRbXRbXRbXRbXRbXRbXRbXRccPdPMccRbHkbHkbHkbHkbHkbHkbHkbHkbHkbHkbHkbHkbHkaafccSccTccSaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanmanmanmanmacTcbxccUccgccgccgccgccVccgccgcyVccXdQCcyWdQAcgqcdccyXcdecdecdecdfbGDcwIdQOcwJcitaQqcjccjccifcircircircisbQGcdqcdrbWlbXAcbEcakbXzcdscdtcducdvcdwcapbWwbUecdxcbLcbLbTeaafcdycdzcdAcdBcdBcdCcdDcdEcdFcdGcdHcdIcdJcdKcdLcdMcdNbVuaaaaaaaaaaafaaaaaaaaabXRcdOcdPcdQcdRcdScdTcdUcdVcdWdQPcdYcdZceaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaafcebceccebaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQalQalQalPalPalQalPalPalPampalPalPalPalQalQaaaaaaaafaafaaaaaaaaaaaaaaaaaaaafcedceecefcegcehceicejcekcelcrDcdbcdbcvudQAcgqcdbcvFcvEcvGcdeceqdQbcesbXsbSNcitcbmcjccjcbLxcieciecieciebQGcodcmQbWlbXAceycezbSZceAceBbZDceCceDbVoaafbTebTebTebTebTeaafaaabVuceEceFceGceHceGceIceJceKceLceGceMceNceGceIceObVuaafaafaafaafaafaafaafbXRcePceQcePceRceSbZQceTcdVceUdQNceUbXRbXRaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaafaaaceWaaaaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaafaafaaaaafaafaaaaaaaafaafaafaaaalQaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaceXceeceYceZcfccfdciocgdckVcgAcffclIcgzcrhcgqcdbcdbcfhcdbcgxbYpcgpcfkcgrcfmchCchAchBchAchnchAchAchAchAchgcgBchDcfscftcfubTVcaRcfvcfwcfxcfycfzbYGbUdbUecfAcfBcfBbTeaafaaabVucfCbXKcfDbVucfEcfFceNcfGcfHcfIcfJccNcfKcfLcfMbVuaaaaaaaaaaafaaaaaaaaabXRcePcePcePcfNcfOcdTcfPcfQcfRcgocfTcfUbXRaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaaacfVaaaaafaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaacfWcfXcfYaaacfWcfXcfYaaacfWcfXcfYaafcfZaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaceXcdXccrccQccZcslcgmcggcgfcgecgccgbcfScflcfjcgkcglchucgncgjcfecfbceVcfacetcgicghcrgcfqcfrcfpcfpcfpcfpcfocexcgCcercgEcgCcgFcgGcgHcgIcgJcgKcgLbVoaafbVpcgMcgNcgObTeaafaafbVucgPbXKcfDbVucgQbXKbXMcgRcgScgTceJcgUcgTcgUceJbVuaaaaaaaaaaafaaaaaaaaabXRcdVcdVcdVcdVcgVbZQcgWcgXcgYcclchachbbXRaaaaaaaaaaaaaaachcchcchcchdaafaafaafaafcfVaafaafaafaafaafampchcchcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaacfWchecfYaaacfWchecfYaaacfWchecfYaafaafaafaafaaaaaaaaaaaaaaaaaaaafaafaafceXchfckachhchichjchkchlchmciWchochpchqchrchochochsckPciSchvcgychxbLjchycgDcitcbmcjQcjcciecjccjccjcbYSbQGcjgbSZchEchFbTcchGbZrchHchIbRXchJchKcapbWwbUechLcfBcfBbTeaafaaabVucgPbXKcfDbVuchMbXKbXMbXKchNcgTbXKbXMcgTbXMchObVuaaaaaaaaaaafaaaaaaaaabXRcdOcdPcdQchPchQcdTchRchSchTcgvbZQchVbXRaaaaaaaaaaaaaaachcaaaaafaaaaafaaaaaaaaachWaaaaafaafaaaaaaaaaaaachcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaalPaafcfWchecfYaaacfWchecfYaafcfWchecfYaafaaaaaaaafaafaaaaaaaaaaaaaaaaafaaaaaachXchYccgchZciacibciccidccgciycdbcfhccXcigcihcdbciicijcikcilcgucinclPcipcgtcitbRgbSjbRdbRebLxbRdbrGbETbQGcivbSZchEcizbSZbSZbSZbTbbZzcizbZEcaVbVoaafbTebTebTebTebTeaafaaabVucgPbXKcfDbVuciAciBciCciDciEciFciGciHciFciHciGbVuaafaafaafaafaafaafaafbXRcePcePcePciIceSbZQciJciKciLcgsbZQciNbXRbXRbXRbXRaaaaaachcaaaciOciOciOciOciOaafciPaafciOciOciOciOciOaaachcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaacfWchecfYaafcfWchecfYaaacfWchecfYaaaaaaaaaaaaaaaaafaaaaafaaaaafaafaaaaaabGDciQccgccgciRckTciTciUciVckYcdbcfhcihciXciYciZcjacjbckZchvcimbYpbSNbYpciqcitcitclacitcitcitcitcifcitbQGclVcjhcjicjjcjkcjlcjkcjjcjmcjjcjnchFcjoaafaafaafaafaafaafaafaaacjpcjqcjrcjsbZJbVucjtcjucjvbVubVucjwbVubVubVucjwbZJaaaaaaaaaaaaaaaaaaaaabXRcePcePcePchPcjxcdTcjycjzcjAchUcjCcjCcjDcjEcjFbXRaafaafchcaafcjGcjHcjHcjHcjHcjIciPcjJcjKcjKcjKcjKcjLaafchcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaacfWchecfYaaacfWchecfYaaacfWchecfYaafaafaafaafaaaaaaaaaaaaaaaaaaaafaafaafceXchfckachhchichjchkchlchmciWchochpchqchrchochochsckPciSchvcgychxbLjchycgDcitbiCcjQcjcbpPbezbezbezbezbQGcjgbSZchEchFbTcchGbZrchHchIbRXchJchKcapbWwbUechLcfBcfBbTeaafaaabVucgPbXKcfDbVuchMbXKbXMbXKchNcgTbXKbXMcgTbXMchObVuaaaaaaaaaaafaaaaaaaaabXRcdOcdPcdQchPchQcdTchRchSchTcgvbZQchVbXRaaaaaaaaaaaaaaachcaaaaafaaaaafaaaaaaaaachWaaaaafaafaaaaaaaaaaaachcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaalPaafcfWchecfYaaacfWchecfYaafcfWchecfYaafaaaaaaaafaafaaaaaaaaaaaaaaaaafaaaaaachXchYccgchZciacibciccidccgciycdbcfhccXcigcihcdbciicijcikcilcgucinclPcipcgtcitaQqcjQcjcaGwawKawKawKazGbQGcivbSZchEcizbSZbSZbSZbTbbZzcizbZEcaVbVoaafbTebTebTebTebTeaafaaabVucgPbXKcfDbVuciAciBciCciDciEciFciGciHciFciHciGbVuaafaafaafaafaafaafaafbXRcePcePcePciIceSbZQciJciKciLcgsbZQciNbXRbXRbXRbXRaaaaaachcaaaciOciOciOciOciOaafciPaafciOciOciOciOciOaaachcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaacfWchecfYaafcfWchecfYaaacfWchecfYaaaaaaaaaaaaaaaaafaaaaafaaaaafaafaaaaaabGDciQccgccgciRckTciTciUciVckYcdbcfhcihciXciYciZcjacjbckZchvcimbYpbSNbYpciqcitcitclacitcitcitcitcitcitbQGclVcjhcjicjjcjkcjlcjkcjjcjmcjjcjnchFcjoaafaafaafaafaafaafaafaaacjpcjqcjrcjsbZJbVucjtcjucjvbVubVucjwbVubVubVucjwbZJaaaaaaaaaaaaaaaaaaaaabXRcePcePcePchPcjxcdTcjycjzcjAchUcjCcjCcjDcjEcjFbXRaafaafchcaafcjGcjHcjHcjHcjHcjIciPcjJcjKcjKcjKcjKcjLaafchcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQalQalPaafaaacfWchecfYaafcfWchecfYaaacfWchecfYaafaaaaaaaaaaaaaafaafcjMcjNcjNcjNcjNbGDbGDciQcdeckbckccjPckOckOckOckNcdbcfhcihcjRcjSciZcjTcjbckQcdechzchwcsDchtcgZccuckLckMckdckeccuaaaaaaaaabQGckfckgckhckickjckkcklckmbSZcknckockpckqaafaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafbVuckrckscktbVuaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaabXRcdVcdVcdVcdVckubZQciJckvckwcgsbZQbZQckxbZQckybXRaaaaaachcaafckzckzckzckzckzaaaciPaaackzckzckzckzckzaafchcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaafaaaaafaafckAaafaafaafckAaafaaaaafckAaafaaaaaaaaaaaaaaackBckCckDckEckFckGckHckIckJckKcdecpKcmTcmTcmpcmocjdcmqcmwckRcihdPzciXciZcjacjbcmxcdeckUckUcsOckWckXccucrwcmycmzcmAccuaaaaaaaaaacTclccldcleclfclgclhclgclfclgcliclgclicljaafaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaclkaaaaaaaaaaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaabXRcdOcdPcdQcllchQcdTclmbZSclnciMcloclpclqclrclsbXRaaaaaachcaaaaafaaaaafaafaafaaaciPaaaaafaaaaafaaaaafaaachcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalPaafcltclucluclvclwclwclwclwclwclwclwclwclwclwclwclwclwclwclxclyclzclAclBclCclDclEclFbJkciQcbxcdecdecdecdecbxclUcdecmlcrvclIclIclIclIclJcjbcdbcmmclNclOcsEclQclRccuclSclTclGclMccuaaaaaaaaaaaaaafclWaafclXaafclWaafclXaafclYaafclYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaclZaaaaaaaaaaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaabXRcePceQcePcmaceSbZQbZRbZScmbcmJbZQcmccdVcdVcdVbXRaaaaaachcaaaciOciOciOciOciOaafciPaafciOciOciOciOciOaafchcaaaaaaaaaaaaaaaaaaaaaaaacmdaaaaaaaaacmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaafaaaaafaafcmeaafaaaaafcmeaafaaaaafcmeaafaaaaaaaaaaaaaaackBckCcmfcmgcmhcmicjNcmjbJkbSAcmkcmkcmkcmkcmkcmkcewcdecepcmncemcemcemcemcemceocdlcdpcmscmscnKcmucmvcdjcddccvcdicdgccuaaaaaaaaaaaabTecmBbVpcmBbTecmBbVpcmBbTecmCbVpcmDbTeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXRcePcePcePcllcmEcmFcmGcmHcmIcmJbZQcmJbZQcmKbZQbYQaafaafchcaafcjGcjHcjHcjHcjHcjIciPcjJcjKcjKcjKcjKcjLaafchcaaaaaaaaaaaaaaaaaaaaaaaacmdcmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQalQalPaafaafcfWcmLcfYaaacfWcmLcfYaaacfWcmLcfYaafaaaaaaaaaaaaaafaafcmMcjNcjNcjNcjNbGDcbyccpcmNcmOcbtbJkbJkcmPbJkcmRcmSceucmUcmVcmVcmVcmVcmWcmRckUcmXclNcmYcmZcnackUccuccuccuccuccuaaaaaaaaaaaabTecnbcnccndbTecnecnfcngbTecnhcnicnjbTeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbgbXRcnkcnlcnlcnmcnncnocnncnpcbXcnrcnscntcdTcnucnvaaaaaachcaafckzckzckzckzckzaaaciPaafckzckzckzckzckzaaachcaaacmdaaaaaacmdaaaaaacmdcmdcmdcmdcmdcmdcmdaaaaaacmdaaaaaacmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQalQalPaafaafcfWcmLcfYaaacfWcmLcfYaaacfWcmLcfYaafaaaaaaaaaaaaaafaafcmMcjNcjNcjNcjNbGDcbyccpcmNcmOcbtbJkbJkciwbJkcmRcmSceucmUcmVcmVcmVcmVcmWcmRckUcmXclNcmYcmZcnackUccuccuccuccuccuaaaaaaaaaaaabTecnbcnccndbTecnecnfcngbTecnhcnicnjbTeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacbgbXRcnkcnlcnlcnmcnncnocnncnpcbXcnrcnscntcdTcnucnvaaaaaachcaafckzckzckzckzckzaaaciPaafckzckzckzckzckzaaachcaaacmdaaaaaacmdaaaaaacmdcmdcmdcmdcmdcmdcmdaaaaaacmdaaaaaacmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacfWcmLcfYaafcfWcmLcfYaaacfWcmLcfYaaaaaaaaaaafaaaaafaafaafaaacnwbPhbPgbGDcnxcnycnycnzbGDbGDbGDbGDbJkcmRcmRcnAcnBcnCcnDcnEcchcnGcnHcnIclNcnJcnKcmZcnLckUaafaafaafaafaafaaaaaaaaaaaabTecnMcnNcnMbTecnOcnPcnObTecnQcnRcnSbTeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaclkaaabXRcnTcnUcnVcnWcnXcnUcnYcnZcnXcnUcoabXRaaaaaachdaaaaafaaaaafaaaaafaaacobaaaaafaaaaafaafaafaafchcaaacmdcmdcmdcmdaaacmdcmdcmdcmdcmdcmdcmdcmdcmdaaacmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaGvaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalPaafcfWcmLcfYaaacfWcmLcfYaaacfWcmLcfYaafaaaaaaaaaaaaaafaafaaaaaacocbJkbJkbMBbJkbJkbJkbJkbJkbJkbJkbJkcbtcmRcmRcoecofcogcohcohcoicojcmRcokclNclNcmYcmZcnackUckUckUckUckUckUckUckUaaaaaabTecnMcolcnMbTecnOcomcnObTecnSconcnSbTeaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacooaafbXRcopcoqcorcdVcoscotcoucdVcovcowcoxbXRaaaaaachcaaaciOciOciOciOciOaafcfVaafciOciOciOciOciOaafchcaaacmdcmdcmdcmdaaacmdcmdcmdcmdcmdcmdcmdcmdcmdaaacmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalPaafcfWcmLcfYaaacfWcmLcfYaafcfWcmLcfYaafaafaafaaaaafaafaaaaafaaabSybPfcoybGDcnxcnycnycnzcbxcjXcjXcjXcjXcjXcmRcozcoAcoBcskcoDcoEcoFcmRcokclNclNcoGcoHcoIcoJcoKcoLcoMcmtcoNcoOckUaaaaaabTebTebTebTebTebTebTebTebTebTebTebTebTeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaabXRcoPcePcePcdVcoPcePcePcdVcoPcePcePbXRaafaafchcaafcjGcjHcjHcjHcjHcoQcoRcoQcjKcjKcjKcjKcjLaafchcaaacmdcmdcmdcmdaaacmdcmdcmdcmdcmdcmdcmdcmdcmdaaacmdcmdcmdcmdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -10713,12 +10850,12 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFZcGacGbcGbcGccGgcGhcGicGjcGdcGkcGkcGdcGlcGmcGdcGdcGdcGfcGbcGbcFYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFZcGacGbcGccGdcGncGncGncGncGdcGocGocGdcGncGncGpcGqcGdcGdcGfcGbcGrcGrcGrcGrcGraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFZcGacGccGdcGdcGscGtcGucGvcGdcGncGncGwcGncGncGncGncGxcGycGdcGbcGrcGzcGAcGBcGrcGrcGrcGrcGrcGCcGDcGDcGEcGrcGraaaaaaaaaaaaaaaaaaaaaaaacGFcGFcGFcGFcGFcGFcGFcGFcGFcGFcGFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFZcGacGGcGHcGIcGncGJcGJcGJcGdcGncGncGdcGKcGLcGMcGNcGOcGPcGdcGbcGrcGQcGAcGAcGRcGScGTcGUcGVcGWcGUcGXcGYcGZcGrcGrcGrcGrcGrcGrcGrcGrcGrcGrcHacHbcHbcHbcHbcHbcHbcHbcHccHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFZcGacHecGHcGncGncGncGncGncGwcGncGncGdcGdcGdcGdcGdcGdcGdcHfcGbcGrcGrcGrcGrcGrcGScGXcGUcHgcHhcGUcGXcGXcGXcHicHjcHjcHjcHjcHjcHjcHjcHjcHkcHacHlcHmcHmcHmcHmcHmcHncHccHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFZcGacGGcGHcGIcGncGJcGJcGJcGdcGncGncGdcGKcGLcGMcGNcGOcGPcGdcGbcGrcGQcGAcGAcGRcGScGTcGUcGVcjfcGUcGXcGYcGZcGrcGrcGrcGrcGrcGrcGrcGrcGrcGrcHacHbcHbcHbcHbcHbcHbcHbcHccHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFZcGacHecGHcGncGncGncGncGncGwcGncGncGdcGdcGdcGdcGdcGdcGdcHfcGbcGrcGrcGrcGrcGrcGScGXcGUcixcHhcGUcGXcGXcGXcHicHjcHjcHjcHjcHjcHjcHjcHjcHkcHacHlcHmcHmcHmcHmcHmcHncHccHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFZcGacHocGdcHpcGncHpcGncHpcGdcGncGncGncGncHqcGbcGbcGbcGbcGbcHrcHicHjcHjcHjcHicGXcGXcGXcGXcGXcGXcGXcGXcGXcHicHjcHjcHjcHjcHjcHjcHjcHjcHkcHacHscHtcHtcHtcHtcHtcHscHccHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFZcGacGbcGdcGdcGdcGdcGdcGdcGdcGncGncGncGncHqcGbcGbcGbcGbcGbcHrcHicHjcHjcHjcHicGXcGXcGXcGXcGXcGXcGXcGScGScGrcGrcGrcGrcGrcGrcGrcGrcGrcGFcHacHscHtcHtcHtcHtcHtcHscGFcHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFZcGacGccGdcHucHvcHwcHucHxcGdcGncGncGncGncHqcGbcGbcGbcGbcGbcGbcGrcGrcGrcGrcGrcGXcGXcGUcHgcGWcGUcGXcHycHzcGrcHAcHBcHBcHCcGrcHDcHEcHFcGFcHbcHscHtcHtcHtcHtcHtcHGcGFcHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFZcGacGGcGHcHHcHHcHHcHHcHHcGwcGncGncGdcGdcGdcGdcGdcGdcGdcGfcGbcGrcGzcGAcGBcGrcGXcGXcGUcHgcHIcGUcGXcGScGScGrcHJcHJcHJcHJcGrcHKcHEcHLcGFcHbcHscHtcHtcHtcHtcHtcHMcGFcHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFZcGacGccGdcHucHvcHwcHucHxcGdcGncGncGncGncHqcGbcGbcGbcGbcGbcGbcGrcGrcGrcGrcGrcGXcGXcGUcixcjfcGUcGXcHycHzcGrcHAcHBcHBcHCcGrcHDcHEcHFcGFcHbcHscHtcHtcHtcHtcHtcHGcGFcHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFZcGacGGcGHcHHcHHcHHcHHcHHcGwcGncGncGdcGdcGdcGdcGdcGdcGdcGfcGbcGrcGzcGAcGBcGrcGXcGXcGUcixcHIcGUcGXcGScGScGrcHJcHJcHJcHJcGrcHKcHEcHLcGFcHbcHscHtcHtcHtcHtcHtcHMcGFcHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFZcGacHecGHcHNcHHcHHcHHcHHcGdcGncGncGncGncGncGdcGncHOcHPcGdcGbcGrcGQcGAcGAcGRcGXcGXcGXcGXcGXcGXcGXcGXcGXcGrcHJcHQcHRcHRcGrcGrcHScGrcGFcHbcHscHtcHtcHtcHtcHTcHscGFcHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFZcGacHocGdcGdcHUcHVcHVcHVcGdcGncHWcHXcHYcGncGwcGncHZcIacGdcGbcGrcGrcGrcGrcGrcGrcGrcIbcGrcGrcGrcGXcGXcGXcIccHJcIdcIdcHJcHJcHJcHJcIecGFcHbcHscHtcHtcHtcHtcHtcHMcGFcHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacFZcGacGbcHocGdcHHcHHcHHcHHcGdcGncHXcIfcHXcGncGdcHpcGdcGdcHfcGbcGrcIgcIhcIicGrcIjcIkcIkcIkcIlcGrcGXcGXcGXcGXcHJcHJcHJcHJcImcHJcHJcHRcGFcHbcHscHtcHtcHtcHtcHtcIncGFcHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -10741,58 +10878,58 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacIPcIPcFYcFYcMMcFYcJEcKXcKXcMNcMOcMOcMPcMkcIPcIPcMQcMRcMScMTcMUcMVcMQaaaaaaaaacIRcJJcJJcLccIRcIRcMWcMXcJJcMYcMZcIRcIRcJIcJJcJJcIRaaaaaaaaaaaaaaacIRcNacNbcIRcKjcNccKjcKjcNdcNecNfcNfcNfcNgcIRcJQcJQcKmcKmcJQcJQcNhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacIPcNicNjcNjcLtcIPcLtcMCcMCcNkcNlcNlcNmcMCcNncNocMQcNpcNqcNrcNscNtcMQaaaaaaaaacIRcJJcJJcLccIRcIRcKvcKwcKwcKwcKycIRcIRcJIcJJcJJcIRaaaaaaaaaaaaaaacIRcNbcNbcIRcNucNucNucKjcNdcNfcNfcNfcNfcNvcIRcJQcNwcKlcKlcNxcJQcNyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacIPcNicLtcLtcLtcIPcLtcLtcLtcLtcLucLucMCcMCcMCcNzcMQcNAcNrcNrcNrcNrcMQaaaaaaaaacIRcJJcJJcLMcJpcJpcJpcJpcJpcJpcJpcJpcJpcLVcJJcJJcIRaaaaaaaaaaaaaaacIRcNBcNbcIRcNucNCcNucKjcNdcNdcNdcNdcNdcNdcIRcJQcNwcKlcKlcNxcJQcNyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacIPcNDcNDcNEcNFcIPcNGcNGcNGcLtcLtcLtcNHcNIcNJcNKcMQcNrcNrcNrcNrcNLcMQaaaaaaaaacIRcIRcIRcIRcIRcIRcIRcIRcRYcIRcIRcIRcIRcIRcIRcIRcIRaaaaaaaaaaaaaaacIRcNNcNbcIRcKNcKjcKjcKjcNdaaaaaaaaaaaaaaacIRcJQcNwcKlcKlcNxcJQcNyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcNOcNOcIPcIPcIPcIPcMQcNrcNPcNQcNRcNScMQaaaaaaaaaaaaaaaaaaaaaaaacIRcIRcRZcRZcRZcIRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacIRcIRcIRcIRcIRcIRcIRcIRcNdaaaaaaaaaaaaaaacNUcJQcNwcKlcKlcNxcJQcNyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacNVcNWcNWcNVaaaaaaaaacMQcNrcNXcNYcNZcNYcMQaaaaaaaaaaaaaaaaaaaaaaaacIRcIRcIRcOacIRcIRcIRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacObcJQcJQcOccOccJQcJQcObaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOdcOecOecOecOecOfcOfcOecOecOgaaacMQcNrcNrcNrcNrcNrcMQaaaaaaaaaaaaaaaaaaaaaaaacIRcJocLVcJJcLMcOhcIRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacIRcOicJQcJQcJQcJQcOjcIRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOkcOlcOmcOncOocOpcOpcOqcOqcOecOgcMQcMQcMQcMQcMQcMQcMQaaaaaaaaaaaaaaaaaaaaaaaacIRcRAcQOcRDcQOcRBcIRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacIRcIRcIRcIRcIRcIRcIRcIRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOkcOlcOvcOpcOpcOpcOpcOpcOpcOwcOxaaaaaaaaaaaaaaaaaacIRaaaaaaaaaaaaaaaaaaaaaaaacOycJIcREcJJcRPcLccNdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOBcRNcRFcRFcRFcRGcOFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOkcOlcOGcOHcOHcOHcOHcOHcOHcOecOIaaaaaaaaaaaaaaaaaacIRaaaaaaaaaaaaaaaaaaaaaaaacOycKacMscMdcMscRRcNdaaaaaaaaaaaaaaaaaaaaaaaaaaacOBcRQcOLcOMcONcOMcRUcRScOFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOQcOecOecOecOecOecOecOecOecOIaaaaaaaaaaaaaaaaaaaaacIRaaaaaaaaaaaaaaaaaaaaaaaacOycORcQTcRVcQTcRXcNdaaaaaaaaaaaaaaaaaaaaaaaaaaacOVcOWcOXcOYcOYcOYcOZcPacOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOycOycOycOycOycOycOycOycOycOycOycOycOycOycOycOycOycOycOycOycOycJIcJJcRycJJcRqcNdcNdcNdaaaaaaaaaaaaaaaaaaaaacOVcPdcOXcOYcOYcRicOZcRpcOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPgcPhcPicPicPicPicPicPicPicPicPicPicPicPicPjcPhcPicPicOycPkcMscPlcJJcPmcJJcPncMscPkcNdaaaaaaaaaaaaaaaaaaaaacPocPpcPqcPpcPrcPpcPqcPpcPsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPgcPhcPicPtcPucPvcPtcPucPucPucPwcPucPucPxcPycPhcPicPicOycPkcLvcPlcJJcJJcJJcPncLvcPkcNdcNdcNdcNdcNdcNdaaaaaacOVcQjcPAcPAcOYcPAcPAcQjcOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPgcPhcPtcPBcPCcPDcPEcPFcPFcPFcPFcPFcPFcPGcPHcPhcPicPicOycPkcLvcPIcJJcJJcJJcRzcLvcPkcNdcPKcPKcPKcPKcNdaaaaaacOVcPLcOYcOYcOYcOYcOYcPMcOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPgcPhcPwcPCcPNcPCcPOcPCcPCcPCcPCcPCcPCcPCcPOcPicPicPicOycPkcQTcPlcJJcJJcJJcPncQTcPkcNdcQUcPbcPbcPbcPbcPbcPccOVcPLcOYcPMcPScPLcOYcPMcPQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPgcPhcPUcPVcPCcPWcPEcPXcPXcPXcPXcPXcPXcPYcPZcPhcPicQXcOycQWcQccQVcJJcJJcJJcQIcQHcQKcNdcQhcQhcQhcQhcQlcQocQlcQkcOYcOYcPMcQRcPLcOYcPMcOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPgcPhcPicPUcPucQmcPUcPucPucPucPwcPucPucQncPycPhcPicQXcRdcPicRdcRecJJcJJcJJcRccQlcQocQlcQhcQhcQhcQhcRacPbcPccOVcQZcOYcPMcQGcPLcOYcQYcOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPgcPhcPicPicPicPicPicPicPicPicPicPicPicPicPjcPhcPicQXcOycRhcQccQVcJJcJJcJJcQIcQHcQKcNdcQwcQwcQwcQwcNdaaaaaacRfcPLcOYcPMcRgcPLcOYcPMcOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacQzcQzcQzcQzcQzcQzcQzcQzcQzcQzcQzcQzcQzcQzcQzcQzcQNcQzcQzcPkcQMcPlcJJcJJcJJcPncQOcPkcNdcNdcQocQocNdcNdaaaaaacQPcPLcOYcPMcQRcPLcOYcPMcPQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacQzcQpcQecQDcQEcQEcQFcQAcQycQCcQBcQxcOOcPTcOOcOOcOOcQvcQzcPkcQQcPlcJJcJJcJJcQIcQHcQKcNdcQJcQScQScQJcNdaaaaaacQLcPLcOYcPMcQGcPLcOYcPMcOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacQzcQpcQecQecQecQecQecQscOrcOrcOrcyvcOOcOOcOOcQqcOOcOOcQzcPkcQrcKacKbcKbcKLcQtcQlcQocQlcQhcQhcQhcQhcQucPbcPccOVcPLcOYcPMcRbcPLcOYcPMcOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacQzcQdcQecQfcQdcQgcQicQacOrcOrcOrcOrcOOcOOcQbcOOcPRcPTcRjcRjcRjcRkcRlcRmcRncRocRjcRjcRjcQhcQhcQhcQhcQlcQocQlcQkcOYcOYcOYcOYcOYcOYcQjcOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacQzcOScOrcyvcyvcyvcyvcyvcOrcOrcOrcOrcOOcOOcOOcOTcOOcOOcRjcRrcRscRtcRucRvcRwcRxcRscRrcRjcPzcOUcOUcOUcOUcPbcPccOVcPfcPecRCcPJcPAcOYcPPcPQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacQzcOzcOrcOrcOrcOrcOrcOrcOrcOrcOrcOrcOKcOOcOOcOOcOOcOOcRjcRscRHcRIcRucRvcRwcRJcRKcRscRjcPKcPKcPKcPKcNdaaaaaacOVcRLcRMcPAcOVcOPcROcOPcOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacQzcOzcOrcOrcOrcOrcOrcOAcOrcOrcOAcOrcODcOCcOCcOCcOEcOCcRjcRTcRscRTcRucRvcRwcRTcRscRTcRjcNdcNdcNdcNdcNdaaaaaacOVcPAcPAcOJcOVcOtcRWcOscOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacQzcNTcOrcOrcOrcOrcyvcywcyvcyvcywcyvcCScNMcNMcNMcNMcNMcRjcSccRscRscRucRvcRwcRscRscSdcRjaaaaaaaaaaaaaaaaaaaaacOVcRLcRMcOucSfcOtcRWcOscOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacQzcQzcyucyhcyhcygcQzcQzcQzcQzcQzcQzcQzcQzcQzcQzcQzcQzcRjcSjcSkcSkcRucRvcRwcSlcSlcSmcRjaaaaaaaaaaaaaaaaaaaaacSncSocSpcSpcSpcSpcSpcSocSqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacQzcyfcyfcyfcyfcQzcRvcRvcRvcRvcRvcRvcRvcRvcRvcRvcRvcRjcRjcRmcRjcRjcRvcRjcRjcRmcRjcRjcRjcRjcRjcRjcRjaaaaaaaaacSncSscSscSscSscSscSqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacQzcyfcyfcyfcyfcQzcRvcRjcRjcRjcRjcStcRjcRjcRjcRvcRvcRvcRvcRvcRvcRjcRvcRjcRvcRvcRvcRvcRvcRvcRvcRvcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacQzcQzcQzcQzcQzcQzcRvcRjcSucSvcSvcSvcSvcSwcRjcRjcRjcRjcRjcRjcRjcRjcSxcRjcRjcRjcRjcRjcRjcRjcRjcRvcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRvcRjcSucSvcSvcSvcSvcSwcRjcSycSzcSAcSzcSBcSCcSCcSCcSCcSCcSBcSCcSBcSCcSDcRjcRvcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRvcRjcSEcSvcSvcSvcSvcSFcRjcSCcSGcSGcSGcSGcSGcSCcSCcSCcSGcSGcSGcSGcSHcSIcRjcRvcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRvcRjcSEcSJcSKcSKcSvcSvcSLcSCcSCcSMcSNcSMcSCcSCcSCcSCcSCcSMcSNcSMcSOcSCcRjcRvcRvcRvcRvcRvcRvcRvcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRvcRjcRjcRjcRjcRjcRjcRjcRjcSCcSGcSGcSGcSGcSGcSCcSCcSCcSGcSGcSGcSGcSPcSCcRjcRjcRjcRjcRjcRjcRjcRvcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcSccRvcRjcRjcSQcSQcSQcSQcSQcRjcSRcSRcSRcSRcSRcSRcSRcSRcSRcSRcSRcSRcSRcSScSRcRjcSTcSTcSTcSTcSTcRjcRvcRvcSdcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcSccRjcRjcRjcSUcSUcSUcSUcSUcRjcSVcSWcSWcSWcSWcSWcSWcSWcSWcSWcSWcSWcSWcSXcSVcRjcSUcSUcSUcSUcSUcRjcRjcRjcSdcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcSccRjcSYcSZcTacTacTacTacTacTbcTccSWcSWcSWcSWcSWcSWcSWcSWcSWcSWcSWcSWcSXcTdcTbcTecTecTecTecTecSZcTfcRjcSdcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcSccRjcSYcSZcTacTgcTacTgcTacTbcTccSWcSWcSWcSWcSWcSWcSWcSWcSWcSWcSWcSWcSXcTdcTbcTecThcTecThcTecSZcTfcRjcSdcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcSccRjcSYcSZcTacTacTicTacTacTbcTccSWcSWcSWcSWcSWcTjcTkcTjcSWcSWcSWcSWcSXcTdcTbcTecTecTlcTecTecSZcTfcRjcSdcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcSccRjcSYcSZcTacTacTacTacTacTbcTccSWcSWcSWcSWcSWcTmcTncTmcSWcSWcSWcSWcSXcTdcTbcTecTecTecTecTecSZcTfcRjcSdcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcSccRjcSYcSZcTacTgcTacTgcTacTbcTccSWcSWcSWcSWcSWcTocTpcTqcSWcSWcSWcSWcSXcTdcTbcTecThcTecThcTecSZcTfcRjcSdcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcSccRjcRscTrcTacTacTacTacTacTbcTccSWcSWcSWcSWcSWcSWcTscSWcSWcSWcSWcSWcSXcTdcTbcTecTecTecTecTecTrcRscRjcSdcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcSccRjcTtcRjcTucTucTucTucTucRjcSVcSWcSWcSWcSWcSWcSWcTscSWcSWcSWcSWcSWcSXcSVcRjcTucTucTucTucTucRjcTtcRjcSdcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcSjcTvcRscRjcTwcTwcTwcTwcTwcRjcSRcSRcSRcSRcSRcSRcTxcTycTxcSRcSRcSRcSRcSScSRcRjcTzcTzcTzcTzcTzcRjcRscTAcSmcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRscRjcRjcRjcRjcRjcRjcRjcTBcTCcTCcTCcTCcTCcTDcTEcTBcTCcTCcTCcTCcTFcTBcRjcRjcRjcRjcRjcRjcRjcRscRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTGcTGcTGcTGcTGcTGcTGcTGcTGcTGcTGcTGcTGcTGcTGcTGcTGcTGcTGcTGcTG -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRscRscRvcRvcRvcRvcRvcRjcTBcTBcTHcTBcTHcTBcTBcTIcTJcTBcTHcTBcTHcTKcTBcRjcRvcRvcRvcRvcRvcRscRscRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTGcTLcTLcTMcTLcTLcTLcTNcTNcTNcTLcTLcTNcTNcTNcTLcTLcTLcTLcTLcTG -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRjcRjcRvcRmcTBcTBcTBcTOcTOcTOcTBcTBcTBcTOcTOcTOcTOcTOcTBcRmcRvcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTGcTPcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTQcTG -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcTRcTRcTRcTScTTcTUcTVcTBcTWcTXcTYcTZcUacUbcUccRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTGcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcUdcTLcTLcTLcTLcTLcTG -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTGcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTPcTLcTLcTLcTLcTLcTG -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTGcTLcTLcTLcTLcUecUdcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTG -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTGcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTG -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTGcTLcTLcTLcTLcTLcUfcUgcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTG -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTGcTLcTLcTLcTLcTLcUhcUicTLcTLcTLcUecTLcUjcTLcTLcTLcTLcTLcTLcTG -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTGcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTG +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacIPcNDcNDcNEcNFcIPcNGcNGcNGcLtcLtcLtcNHcNIcNJcNKcMQcNrcNrcNrcNrcNLcMQcIRcIRcIRcIRcIRcIRcIRcIRcIRcJJcJJcJJcJJcJJcIRcIRcIRcIRcIRcIRaaaaaaaaaaaaaaacIRcNNcNbcIRcKNcKjcKjcKjcNdaaaaaaaaaaaaaaacIRcJQcNwcKlcKlcNxcJQcNyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcNOcNOcIPcIPcIPcIPcMQcNrcNPcNQcNRcNScMQdTAdTUdTUdTAdTJdTTcJJdTBcIRcIRcIRcOacIRcIRcwZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacIRcIRcIRcIRcIRcIRcIRcIRcNdaaaaaaaaaaaaaaacNUcJQcNwcKlcKlcNxcJQcNyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacNVcNWcNWcNVaaaaaaaaacMQcNrcNXcNYcNZcNYcMQdTAdTVdTVdTAdTLdTEcJJdTBcIRcJocLVcJJcLMcOhcIRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacObcJQcJQcOccOccJQcJQcObaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOdcOecOecOecOecOfcOfcOecOecOgaaacMQcNrcNrcNrcNrcNrcMQdTAdTUdTUdTAdTOdTEcJJdTBcIRcJIcJJcJJcJJcLccIRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacIRcOicJQcJQcJQcJQcOjcIRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOkcOlcOmcOncOocOpcOpcOqcOqcOecOgcMQcMQcMQcMQcMQcMQcMQdTAdTAdTAdTAdTDdTEcJJdTBcIRdTCcORdTCdTFdTCcIRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacIRcIRcIRcIRcIRcIRcIRcIRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOkcOlcOvcOpcOpcOpcOpcOpcOpcOwcOxaaaaaaaaaaaaaaaaaacIRdTGdTAdTGdTAdTJdTEcJJdTHdTIcJIcJJdTKcJJcMvcNdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOBciuciuciuciuciuciuciuciucOFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOkcOlcOGcOHcOHcOHcOHcOHcOHcOecOIaaaaaaaaaaaaaaaaaacIRdTGdTAdTGdTAdTLdTEcJJdTHdTIcKacJJcLxdTMcMXcNdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadRXcOLdSbcOMcONdSacOMdRZdRYcOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOQcOecOecOecOecOecOecOecOecOIaaaaaaaaaaaaaaaaaaaaacIRdTGdTAdTGdTAdTOdTNcMEdTQcOydTCdTPdTRdTSdTCcNdaaaaaaaaaaaaaaaaaaaaaaaaaaacOBcOVcOWcOXcOYcOYcOYcOYcOZdSgcOVcOFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOycOycOycOycOycOycOycOycOycOycOycOycOycOycOycOycOycOycOycOycOycOycOycOycOycOycOydSicJJcJJdShcLccNdcNdcNdaaaaaaaaaaaaaaaaaaaaacOVcOVcPdcOXcOYdRDdRCcOYcOZcPacOVcOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPgcPicPicPicPicPicPicPicPicPicPicPicPicPicPjcPhcPicPidRHdSjdSjdSjdSjdSjcOycPkcMscPlcJJcJJcPmcLccMscPkcNdaaaaaaaaaaaaaaaaaacOBcPodREcPqdRFcPrcPpcPpcPrdRFcPqdRGcPscOFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPgcPicPicPtcPucPvcPtcPucPucPucPwcPucPucPxcPycPhcPicPidSQdSjdSjdSjdSjdSjcOycPkcLvcPlcJJcJJcJJcLccLvcPkcNdcNdcNdcNdcNdcNdaaaaaacOVdRIcRbcRbcOYdRKdRJcOYcRbcRbdRIcOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPgcPicPtcPBcPCcPDcPEcPFcPFcPFcPFcPFcPFcPGcPHcPhcPicPidRHdSjdSjdSjdSjdSjcOycPkcLvcPlcJJcJJcJJcPncLvcPkcPKcPKcPKcPKcPKcNdaaaaaacOVcPLcOYcOYcOYcOYcOYcOYcOYcOYdRLcOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPgcPicPwcPCcPNcPCcPOcPCcPCcPCcPCcPCcPCcPCcPOcPicPicPicOycOycOycOycQcdRPcOycPkcLvcPlcJJcJJcJJcUBdROcKwcQUcQUcQUcQUcQVdRNcQUcQVcOVcPLcOYcOYcPScPScPScPScOYcOYcPMciuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPgcPicPUcPVcPCcPWcPEcPXcPXcPXcPXcPXcPXcPYcPZcPhcPicPicOydRrdRsdRudRtdRtcOydRRdRSdRQcJJcJJcJJcJJcRYcQhcQhcQhcQhcQhcRRcRycRzcRycQkcOYcOYcOYdRldRjdRkdRlcOYcOYcPMciuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPgcPicPicPUcPucQmcPUcPucPucPucPwcPucPucQncPycPhcPicPicOydRvdRwdRxdRtdRtdRTdRUdRWcJJcJJcJJcJJcJJcRYcQhcQhcQhcQhcQhcRRcQXcQUcQVcOVdRncOYcOYcRbcRbcRbcRbcOYcOYcPMcOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPgcPicPicPicPicPicPicPicPicPicPicPicPicPicPjcPhcPicPicOydRydRzdRAdRtdRtdRTdRUdRWcJJcJJcJJcJJdSedSfcQUdSdcQhcQhcQwdSccNdaaaaaaciudRncOYcOYcOYcOYcOYcOYcOYcOYcPMcOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOycOycOycOycOycOycQzcQzcQzcQzcQzcQzcQzcQzcQzcQzcQzcQzcQzdRpdRpdRpcRDcRDcQzcVBcLfcUJcJJcJJcJJcPncQQcPkdRocQhcRRdRMdRBcNdaaaaaaciudRncOYcOYcPScPScPScPScOYcOYcPMciuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOydRhdRidRidRidRfdRgcRUcRDcRDcRDcRDcRDcRDcRDcRDcRDcRDcRDcRDcRDcRDcRDcRDcQzcPkcLvcPlcJJcJJcJJcUBcRZcQUcUDcQhcQhcQScUHcNdaaaaaaciudRncOYcOYdRldRjdRkdRlcOYcOYcPMciuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOycQFcQFcQFcQFcQFcVZcSecVYcWacUycRDcSidRdcWbcUycRDcRDcRDcRDcRDcRDcRDcRDcQzcPkcLvcPIcJJcJJcJJcJJcRYcQhcQhcQhcQhcQhcRRcQXcQUcQVcOVdRecOYcOYcRbcRbcRbcRbcOYcOYcPMcOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOycQFcRpcQFcQFcQFcShcSecVNcVOcUycRDcSicVMcVCcUycRDcRDcVxcVxcVxcVxcVxcVxcQzcQZcQYcRccRacRdcRdcRdcRfcRdcRdcQhcQhcQhcRRcRycRzcRycQkcOYcOYcOYcOYcOYcOYcOYcOYcOYcVWcOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOycQFcVpcQFcQFcQFcShcRUcRDcRDcRDcRDcRDcRDcRDcRDcRDcRFcVqcVqcVqcVqcVqcVqcQzcQzcQzcQzcQzcQWcQWcQzcQzcQzcQzcQXcQUcQUcQUcQUcQUcQVcOVciuciucRCciucVsciucROciucROciucOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOycQFcQFcUVcQFcUYcShcSecUZcUXcUycRDcSicURcUQcUycRDcRFcUPcREcREcREcREcREcQzcQNcQNcQNcQPcOEcOEcQRcQMcQMcQzcPKcPKcPKcPKcNdaaaaaacOVcRLcRMcPAcVocOVcVncRWcVncRWcVncOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOycSbcQFcQFcSacQFcShcSecSgcSrcUycRDcSicUAcUzcUycRDcRFcREcREcREcREcREcREcQzcQLcQKcQJcQGcOEcOEcOEcQMcQMcQzcNdcNdcNdcNdcNdaaacOBcOVcUGcPAcPAcUNcOVcUOcRWcRWcRWcUKcOVcOFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOycQFcQFcQFcQFcQFcRScRUcRDcRDcRDcRDcRDcRDcRDcRDcRDcRFcREcREcRGcRPcRNcRQcQzcQqcQpcQrcOEcOUcQgcOEcOEcQucQzaaaaaaaaaaaaaaaaaaaaacOVcRLcRMcPAcRXcSfcRVcRWcRVcRWcRVcOVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOycQFcRqcQFcRpcQBcRicRhcRgcRgcRgcRjcRjcRjcRkcRlcQocRncRocRjcRjcRjcQzcQzcQzcQjcQicQicOUcQfcQecQgcPTcQdcQzaaaaaaaaaaaaaaaaaaaaacSncSocSpcSpcSpcSpcSpcRecRecRecSocSqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOycQFcQFcQFcQBcQDcQAcQEcQEcQEcQEcRjcRrcRscRtcRucRvcRwcRxcRscRrcRjcQzcQzcQzcQzcQzcQzcPccQbcQacPbcPTcQdcQzaaaaaaaaaaaaaaaaaaaaaaaacSncSscSscSscSscSscSscSscSscSqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOycQOcQFcQBcQDcQAcQAcQEcQEcQEcQEcRjcRscRHcRIcRucRvcRwcRJcRKcRscRjcPPcPJcPecPRcPQcQzcOEcPccPbcOEcOEcOUcOTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOycQFcQBcQDcQAcQAcQAcQEcQEcQEcQEcRjcRTcRscRTcRucRvcRwcRTcRscRTcRjcOScOEcOEcOEcOEcQIcOEcOEcOEcOEcOEcOKcOJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOycQBcQDcQAcQAcQAcQAcQAcQAcQAcQAcRjcSccRscRscRucRvcRwcRscRscSdcRjcQycQvcQHcQtcQscQzcOEcOEcOEcOEcOEcOAcOzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacOycOycOycOycOycOycOycOycOycOycOycOycRjcSjcSkcSkcRucRvcRwcSlcSlcSmcRjcOPcQlcOucOtcPzcQzcPfcOOcOrcNTcNMcOscQzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRvcRvcRvcRvcRvcRvcRvcRvcRvcRvcRvcRjcRjcRmcRjcRjcRvcRjcRjcRmcRjcRjcRjcRjcRjcRjcRjcQzcQzcQzcQzcQzcQzcQzcQzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRvcRjcRjcRjcRjcStcRjcRjcRjcRvcRvcRvcRvcRvcRvcRjcRvcRjcRvcRvcRvcRvcRvcRvcRvcRvcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRvcRjcSucSvcSvcSvcSvcSwcRjcRjcRjcRjcRjcRjcRjcRjcSxcRjcRjcRjcRjcRjcRjcRjcRjcRvcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRvcRjcSucSvcSvcSvcSvcSwcRjcSycjOcjUcjOcSBcSCcSCcSCcSCcSCcSBcSCcSBcSCcSDcRjcRvcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRvcRjcSEcSvcSvcSvcSvcSFcRjcSCcSGcSGcSGcSGcSGcSCcSCcSCcSGcSGcSGcSGcSHcSIcRjcRvcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRvcRjcSEcSJcSKcSKcSvcSvcSLcSCcSCcSMcSNcSMcSCcSCcSCcSCcSCcSMcSNcSMcSOcSCcRjcRvcRvcRvcRvcRvcRvcRvcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRvcRjcRjcRjcRjcRjcRjcRjcRjcSCcSGcSGcSGcSGcSGcSCcSCcSCcSGcSGcSGcSGcSPcSCcRjcRjcRjcRjcRjcRjcRjcRvcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcSccRvcRjcRjcSQcSQcSQcSQcSQcRjcSRcSRcSRcSRcSRcSRcSRcSRcSRcSRcSRcSRcSRcSScSRcRjcSTcSTcSTcSTcSTcRjcRvcRvcSdcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcSccRjcRjcRjcSUcSUcSUcSUcSUcRjcSVcSWcSWcSWcSWcSWcSWcSWcSWcSWcSWcSWcSWcSXcSVcRjcSUcSUcSUcSUcSUcRjcRjcRjcSdcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcSccRjcSYcSZcTacTacTacTacTacTbcTccSWcSWcSWcSWcSWcSWcSWcSWcSWcSWcSWcSWcSXcTdcTbcTecTecTecTecTecSZcTfcRjcSdcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcSccRjcSYcSZcTacTgcTacTgcTacTbcTccSWcSWcSWcSWcSWcSWcSWcSWcSWcSWcSWcSWcSXcTdcTbcTecThcTecThcTecSZcTfcRjcSdcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcSccRjcSYcSZcTacTacTicTacTacTbcTccSWcSWcSWcSWcSWcTjcTkcTjcSWcSWcSWcSWcSXcTdcTbcTecTecTlcTecTecSZcTfcRjcSdcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcSccRjcSYcSZcTacTacTacTacTacTbcTccSWcSWcSWcSWcSWcTmcTncTmcSWcSWcSWcSWcSXcTdcTbcTecTecTecTecTecSZcTfcRjcSdcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTGcTGcTGcTGcTGcTGcTGcTGcTGcTGcTGcTGcTGcTGcTGcTGcTGcTGcTGcTGcTG +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcSccRjcSYcSZcTacTgcTacTgcTacTbcTccSWcSWcSWcSWcSWcTocTpcTqcSWcSWcSWcSWcSXcTdcTbcTecThcTecThcTecSZcTfcRjcSdcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTGcTLcTLcTMcTLcTLcTLcTNcTNcTNcTLcTLcTNcTNcTNcTLcTLcTLcTLcTLcTG +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcSccRjcRscTrcTacTacTacTacTacTbcTccSWcSWcSWcSWcSWcSWcTscSWcSWcSWcSWcSWcSXcTdcTbcTecTecTecTecTecTrcRscRjcSdcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTGcTPcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTQcTG +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcSccRjcTtcRjcTucTucTucTucTucRjcSVcSWcSWcSWcSWcSWcSWcTscSWcSWcSWcSWcSWcSXcSVcRjcTucTucTucTucTucRjcTtcRjcSdcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTGcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcUdcTLcTLcTLcTLcTLcTG +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcSjcTvcRscRjcTwcTwcTwcTwcTwcRjcSRcSRcSRcSRcSRcSRcTxcTycTxcSRcSRcSRcSRcSScSRcRjcTzcTzcTzcTzcTzcRjcRscTAcSmcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTGcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTPcTLcTLcTLcTLcTLcTG +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRscRjcRjcRjcRjcRjcRjcRjcTBcTCcTCcTCcTCcTCcTDcTEcTBcTCcTCcTCcTCcTFcTBcRjcRjcRjcRjcRjcRjcRjcRscRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTGcTLcTLcTLcTLcUecUdcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTG +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRscRscRvcRvcRvcRvcRvcRjcTBcTBcTHcTBcTHcTBcTBcTIcTJcTBcTHcTBcTHcTKcTBcRjcRvcRvcRvcRvcRvcRscRscRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTGcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTG +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRjcRjcRvcRmcTBcTBcTBcTOcTOcTOcTBcTBcTBcTOcTOcTOcTOcTOcTBcRmcRvcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTGcTLcTLcTLcTLcTLclbcUgcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTG +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcTRcTRcTRcTScTTcTUcTVcTBcTWcTXcTYcTZcUacUbcUccRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTGcTLcTLcTLcTLcTLcUhcmPcTLcTLcTLcUecTLcUjcTLcTLcTLcTLcTLcTLcTG +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjcRjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTGcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTG aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTGcTLcTLcUdcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTPcTLcTLcTG aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTGcTLcTLcUecUdcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcTLcUdcTLcTLcTG aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacTGcTLcTLcTLcTLcTLcTLcTLcUkcTLcUkcTLcUkcTLcUlcTLcTLcTLcTLcTLcTG @@ -10827,23 +10964,23 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUscUscUscUscUscUscUscUscUscUscUscUsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUscUtcUucUvcUwcUxcUZcUscVpcVocVncUsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUscUvcUvcUvcUvcUvcUvcUvcUCcUAcUEcUsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUscUFcUFcUvcUvcUvcUzcUscUycUIcSrcUsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUscUvcUvcUvcUvcSicSicUscUscULcUscUsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUscUMcUMcUvcSecSbcSacUscShcULcSgcUsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUScUTcUUaaacUScUTcUUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUscUvcUvcUvcSecUYcUWcUscUVcURcUXcUsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacVacVbcVccVccVccVdcVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUscUvcUvcUvcUvcUvcUscUscUscUscUscUsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUScUTcVecUTcVfcVgcVhcVicVjcVgcVkcUTcVecUTcUUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUscVlcVmcUHcUJcUvcUNcUKcUPcUOcUQcUsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacVbcVccVccVdcVaaaacVbcVgcVucVvcVwcVgcVdaaacVacVbcVccVccVdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUscUBcVycVzcUvcUvcUvcVAcUGcUDcVDcUsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacVgcVEcVFcVgcVacVbcVgcVGcVHcVIcVHcVJcVgcVdcVacVgcVKcVLcVgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUscVscVycVzcUvcUvcUvcVrcVqcVrcVqcUsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacVgcVPcVQcVgcVccVRcVScVJcVHcVTcVHcVJcVScVRcVccVgcVUcVVcVgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUscUBcVMcVXcUvcVCcUNcVBcVDcVxcVtcUsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacVgcWccWdcVgcVccWecVScVJcVHcVJcVHcVJcVScWecVccVgcWfcWccVgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUscUscUscUscUscUscUscUscUscUscUscUsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacVgcWgcWhcVgcVgcVgcVgcVgcVgcWicVgcVgcVgcVgcVgcVgcWjcWkcVgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacVccVRcWccWlcWlcWlcWlcWlcWlcVgcWlcVgcWlcWlcWlcWlcWlcWlcWccVRcVcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacVccWmcWncWocWpcWqcWrcVgcWicVgcWicVgcWicVgcWscWtcWucWvcWncWmcVcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacVccWecWncWwcWwcWwcWwcVgcWwcWwcWwcWwcWwcVgcWwcWwcWxcWwcWncWecVcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacVbcVgcWycWzcWAcWBcWCcVgcWDcWwcWwcWwcWEcVgcWFcWGcWHcWIcWycVgcVdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUscUscUscUscUscUscUscUscUscUscUscUscUsdTbcUscUscUsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUscUtcUucUvcUwdSVdSUcUsdSYdSXdSWcUsdSZdSwdTacUscUsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUscUvcUvcUvcUvcUvcUvdSzcUCdSxcUEdSydSwdSwdSvcUscUsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUscUFcUFcUvcUvcUvdSucUsdStcUIdSscUscUscUscUscUscUsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUscUvcUvcUvcUvcUvdSmcUscULcULdSncUsdSqdSrdSodSpcUsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUscUMcUMcUvcUvcUvcUxcUscULcULcULdSkcULcULcULdSlcUsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUScUTcUUaaacUScUTcUUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUscUvcUvcUvcUvcUvdSTcUsdSRdTXdSScUsdSPdTWdSOdSpcUsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacVacVbcVccVccVccVdcVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUscUvcUvcUvcUvcUvdSucUscUscUscUscUscUscUscUscUscUsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUScUTcVecUTcVfcVgcVhcVicVjcVgcVkcUTcVecUTcUUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUscUvdSBdSFdSGdSDcUvdSHdSJdSIdSHcVzdSMdSNdSKdSLcUsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacVbcVccVccVdcVaaaacVbcVgcVucVvcVwcVgcVdaaacVacVbcVccVccVdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUscUvdSBdSAdSEdSDcUvdSCdSCdSCdSCcVXcVAcVDcVAcVDcUsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacVgcVEcVFcVgcVacVbcVgcVGcVHcVIcVHcVJcVgcVdcVacVgcVKcVLcVgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUscUvdSBdTfdTedSDcUvdSCdSCdSCdSCdSCdSCdSCdSCdSCcUsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacVgcVPcVQcVgcVccVRcVScVJcVHcVTcVHcVJcVScVRcVccVgcVUcVVcVgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUscUvdSBdTgcUWdSDcUvdSCdSCdSCdSCdSCdSCdThdTjdTicUsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacVgcWccWdcVgcVccWecVScVJcVHcVJcVHcVJcVScWecVccVgcWfcWccVgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUscUvcUvcUvcUvcUvcUvdSCdSCdSCdSCdSCdSCdSCdSCdSCcUsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacVgcWgcWhcVgcVgcVgcVgcVgcVgcWicVgcVgcVgcVgcVgcVgcWjcWkcVgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUscVlcVmcVmdTccVmcVmcVmdTccVmcVmcVmdTccVmcVmdTdcUsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacVccVRcWccWlcWlcWlcWlcWlcWlcVgcWlcVgcWlcWlcWlcWlcWlcWlcWccVRcVcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUsdTkdTldTlcVzdTodTpdTqcVzdTmdTmdTncVzdTsdTrcVycUsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacVccWmcWncWocWpcWqcWrcVgcWicVgcWicVgcWicVgcWscWtcWucWvcWncWmcVcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUsdTldTtdTkcVXdTxdTwdTpcVXdTvdTudTmcVXdTycVydTzcUsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacVccWecWncWwcWwcWwcWwcVgcWwcWwcWwcWwcWwcVgcWwcWwcWxcWwcWncWecVcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUscUscUscUscUscUscUscUscUscUscUscUscUscUscUscUscUsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacVbcVgcWycWzcWAcWBcWCcVgcWDcWwcWwcWwcWEcVgcWFcWGcWHcWIcWycVgcVdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacWJcVgcWKcWKcVgcVgcVgcVgcWLcWwcWwcWwcWMcVgcVgcVgcVgcWKcWKcVgcWNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacWJcWOcWOcWNaaaaaacVgcWPcWwcWwcWwcWQcVgaaaaaacWJcWOcWOcWNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacVgcWRcWwcWwcWwcWQcVgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -11187,14 +11324,14 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadgGdgJdgJdgNdgJdgJdgUdgGdgVdgJdgWdgGdgJdgJdgGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacYVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaafaagaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadgGdgXdgXdgYdgZdhadgGdgGdgJdgJdgVdgGdgGdhbdgGaaacYVcYVcYVcYVcYVcYVcYVcYVcYVcYVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafacTaaaaaaaafaagaagaagdhcaafaafaafaaaacTaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadgGdgJdgJdgNdgJdgJdgGdgGdgVdgJdgJdgJdgJdgJdgGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafacTdhdaafaafdhdaagaagaagaagaagdhdaafaafdhdacTaafaafaafaaaaaaaaaaaaaaaaaaaaadhedheacTacTacTdgGdhfdgJdhgdgJdgJdhhdhidgJdgJdgJdgJdgJdhjdgGcYVcYVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafacTdhdaafaafdhdaagaagaagaagaagdhdaafaafdhdacTaafaafaafaaaaaaaaaaaaaaaaaaaaadhedheacTacTacTdgGdhfdgJdhgdgJdgJdhhdhidgJdgJdgJdgJdgJcyfdgGcYVcYVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafdhkdhkdhkdhkaagdhcaagaagaagdhkdhkdhkdhkaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaadheacTacTdgGdhldhmdhndhldhldgGdgGdgGdgGdgGdgGdgGdgGdgGdhocYVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdhkdhkdhkdhkdhpdhkdhqdhkdhrdhsdhtdhkdhkdhkdhkdhkdhkaafaafaaaaaaaaaaaaaaadheaaaaaaaaaacTacTacTdgGdgJdgJdgNdgJdgJdhudhvdhwdhxdhydhzdhAdhxdhBdhCcYVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhkdhkdhkdhDdhEdhFdhGdhDdhsdhHdhHdhIdhHdhDdhFdhDdhkdhkdhkaafaaaaaaaaaaaaaaaaaaaaadheaaaaaaaaaaaadgGdhfdgJdhgdgJdgJdhudhJdhKdhLdhKdhKdhKdhKdhMdhNcYVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhkdhkdhkdhDdhEdhFdhGdhDdhsdhHdhHdhIdhHdhDdhFdhDdhkdhkdhkaafaaaaaaaaaaaaaaaaaaaaadheaaaaaaaaaaaadgGdhfdgJdhgdgJdgJdhucwKdhKdhLdhKdhKdhKdhKdhMdhNcYVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhkdhkdhOdhPdhQdhRdhQdhDdhSdhrdhHdhHdhIdhTdhDdhDdhDdhUdhVdhkacTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadgGdhldhmdhWdhldhldhXdhKdhKdhLdhKdhKdhKdhLdhKdhYdhZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhkdhkdiadiadiadiadibdhHdicdhkdhIdiddhkdhHdiedhFdiediedhHdhkacTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadgGdgJdgVdifdgJdgJdigdhKdhKdhKdhKdihdhKdhKdiidijcYVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhkdhkdhHdiediediedikdhEdhDdildiedhHdiediedhDdhEdhEdiediedhkacTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdgGdgJdgJdimdindiodipdiqdiqdirdisdhLdhKdhKdhKdhYcYVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdhkdhkdiedhEdhFdhDditdhDdhFdhDdhHdhHdiedhDdhDdhDdhDdhFdhDdhkacTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafdgGdgJdgJdifdgJdgJdiudhxdhxdhKdivdiwdhKdiwdixdiyaagdizaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdhkdhkdiedhEdhFdhDditdhDdhFdhDdhHdhHdiedhDdhDdhDdhDdhFdhDdhkacTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafdgGdgJdgJdifdgJdgJdiudhxdhxdhKdivdiwdhKdiwdixcygaagdizaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafdhkdhkdhDdhFdhDdiAdiBdiCdiDdhHdiEdhHdhHdiFdiGdiHdiedhEdhFdhkacTaafaaaaaaaaaaaaaaadheaaaaaaaafaafaafdgGdgGdgGdgNdgGdgJdhudiIdiJdiKdiLdiMdhvdhvdhxdhNdhZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafdhkdhkdiedhDdiAdiNdiOdiPdhHdhHdhHdhHdhHdiQdiQdiRdiHdhDdhEdhkacTaafaafaaaacTdgGdgGdgGdgGdgGdgGdgGdgGdgGdgGdgGdiSdgGdgGdgGdiTdiTdiUdiTdiTdiTdhodhodhocYVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafdhkdhkdhkdiediediVdiWdhEdhHdhHdhHdhHdhHdhHdhHdhHdiXdiYdiediZdhkacTacTaafaafacTdgGdjadjadjadjbdjcdjddjedgGdjadjadjfdjadjadgGacTaafaagaagaaaacTdjgaaganmcYVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -11548,7 +11685,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadHndHndH aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadHndHVdHVdHVdHVdHVdHVdHVdHVdHndHndHndHndHndHndHndHVdHVdHVdHVdHVdHVdHndHndHndHndHndHndHndHndHndCidCidCidCidCidCidCidCidJjdJkdJldCidCidCidBvdqTdqTdqTdqTdqTdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadqTdqTdqTdBvdBvdBvdBvdBvdBvdBvdqTdqTdqTdqTdqTdqTdqTdqTdsadsadsadsadsadsadsadsadsadsadIPdJmdIPdIPdIPdIPdIPdIPdIVdJndCidCidCidCidCidCidCidCidCidCidCiaaaaaaaaaaaaaaaaaaaaaaaaaaadqTdqTdqTdqTdqTdBvdBvdCidJfdCidCidCidIedHIdHJdCidCidCidCidCidCidCidGpdGpdBvdqTdqTdqTdqTdsadsadsadsadsadsadsadsadsadsadsadsadsadsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadHndHndHVdHVdHVdHVdHVdHVdHndHndHndHndHndHndHndHVdHVdHVdHVdHVdHVdHndHndHndHndCidCidJodJodJodJodJodJodJpdJqdJrdJodJodJodJodJodCidCidCidBvdqTdqTdqTdqTdqTdqTdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadqTdqTdqTdqTdBvdBvdCidCidCidCidCidBvdBvdBvdBvdBvdqTdqTdqTdqTdqTdqTdqTdsadsadsadsadIPdIPdIPdIPdJsdJtdJudIPdITdJvdIPdJbdIPdIPdIPdJwdJxdJydIPdCidCidCidCidCidCiaaaaaaaaaaaaaaaaaaaaaaaaaaadqTdqTdqTdBvdBvdCidCidCidCidCidCidHEdHOdHGdCidCidCidCidCidCidCidCidCidBvdBvdqTdqTdqTdsadsadsadsadsadsadsadsadsadsadsadqTdsadsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadHndHndHVdHVdHVdHVdHVdHVdHndHndHndHndHndHndHndHVdHVdHVdHVdHVdHndHndBvdCidCidCidJodJzdJAdJBdJCdJDdJEdJFdJGdJHdJIdJJdJKdJLdHJdCidCidBvdBvdBvdBvdqTdqTdqTdqTdqTdqTdsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadsadqTdqTdqTdBvdBvdCidCidCidCidCidCidCidCidCidCidBvdBvdBvdBvdBvdqTdqTdqTdqTdsadsadsadIPdJMdJNdJOdJPdJNdJNdIPdIXdIYdJQdIVdIPdJRdJSdJTdJTdJTdJedCidCidCidCidCidCidCiaaaaaaaaaaaaaaaaaaaaaaaaaaadBvdBvdBvdCidCidCidCidCidCidCidCidJUdJVdJWdJXdJVdJVdCidCidCidCidCidCidBvdqTdqTdqTdsadsadsadsadsadsadsadsadsadsadsadqTdsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadHndHndHndHVdHVdHVdHndHndHndHndHndHndHndHndHVdHVdHVdHndHndqTdBvdCidCidCidJodJYdJAdJZdKadJAdKbdJAdJAdKcdKddKedJKdKfdKgdCidCidCidCidCidBvdBvdBvdqTdqTdqTdqTdqTdqTdqTdsadsadsadsadsadsadsadsadsadsadsadsadqTdqTdBvdBvdDQdCidCidCidCidCidCidCidCidCidCidCidCidCidCidCidBvdBvdqTdqTdqTdqTdqTdqTdIPdKhdJNdKidKjdKkdKldIPdIPdIPdIPdIVdIPdJRdKmdKmdKmdKndJidCidCidCidCidCidCidCiaaaaaaaaaaaaaaaaaaaaaaaaaaadCidCidCidCidCidCidCidCidCidCidCidJUdKodKodKodKpdJVdCidKqdCidCidCidEudDQdBvdqTdqTdsadsadsadsadsadsadsadsadsadsadqTdqTdsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadHndHndHndHVdHVdHVdHndHndHndHndHndHndHndHndHVdHVdHVdHndHndqTdBvdCidCidCidJodJYdJAdJZdKadJAdKbdJAdJAdKcdKddKedJKdKfdKgdCidCidCidCidCidBvdBvdBvdqTdqTdqTdqTdqTdqTdqTdsadsadsadsadsadsadsadsadsadsadsadsadqTdqTdBvdBvdDQdCidCidCidCidCidCidCidCidCidCidCidCidCidCidCidBvdBvdqTdqTdqTdqTdqTdqTdIPcyhdJNdKicyudKkdKldIPdIPdIPdIPdIVdIPdJRdKmdKmdKmdKndJidCidCidCidCidCidCidCiaaaaaaaaaaaaaaaaaaaaaaaaaaadCidCidCidCidCidCidCidCidCidCidCidJUdKodKodKodKpdJVdCidKqdCidCidCidEudDQdBvdqTdqTdsadsadsadsadsadsadsadsadsadsadqTdqTdsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadHndHndHVdHVdHVdHndHndHndHndHndHndHndHndHndHndHndHndHndqTdBvdCidCidCidJodKrdJAdJAdKsdJAdKbdJAdJAdJAdKtdKudKvdJLdHGdCidCidCidCidCidCidCidBvdBvdBvdBvdqTdqTdqTdqTdqTdqTdsadsadsadsadsadsadsadsadsadqTdqTdBvdBvdCidJfdCidCidCidCidCidCidCidCidCidCidCidCidCidCidCidCidBvdBvdBvdBvdqTdqTdqTdIPdKwdJNdKxdJNdKydJNdKzdKndKAdKBdKCdIPdJRdKmdKDdKmdKEdJndCidCidCidCidCidCiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCidCidCidCidCidKFdKFdKGdKHdJUdKIdKJdKKdKLdJVdJVdJVdJVdCidCidCidCidBvdBvdqTdqTdsadsadsadsadsadsadsadsadsadqTdsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadHndHndHndHndHndHndHndHndHndHndHndHndHndHndHndsadsadBvdBvdCidCidJodKMdJAdKNdKOdKPdKQdKRdJAdJodJodJodJodJodJodIedHJdCidCidCidCidCidCidCidCidBvdBvdBvdqTdqTdqTdqTdqTdsadsadsadsadsadsadsadqTdqTdqTdBvdCidCidCidCidCidCidCidCidCidCidCidIedHJdCidCidCidCidCidCidCidCidCidBvdBvdqTdqTdIPdIPdIPdIPdIPdIPdIPdKSdKTdKUdKSdKTdIPdIPdIPdIPdIPdKVdIPdIPdKWdKXdCidCiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadCidCidKYdKHdKZdLadLbdLcdLddLedLfdLgdLhdLidLjdLkdHJdCidCidCidDPdBvdqTdqTdsadsadsadsadsadsadsadqTdqTdqTdsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadHndHndHndHndHndHndHndHndHndHndHndsadsadqTdBvdCidCidJodLldJAdLmdKadLndLodLpdJAdLqdLrdLsdLtdLudLvdIkdIldIcdIcdIcdIcdIcdIbdCidCidCidCidBvdBvdBvdqTdqTdqTdqTdqTdsadsadsadqTdqTdqTdqTdBvdBvdCidCidIhdIcdIcdIcdIcdIcdIcdIcdIcdIkdIldIcdIcdIcdIcdIbdCidCidCidCidCidBvdqTdqTdqTdqTdqTdIPdLwdLxdLydKmdKEdLzdKndKEdKzdLAdLBdLCdKndKEdKmdKmdLDdLEdJxdJydLFdLGdLGdLGdLGdLGdLGdLGdLHdLHdLHdLHdLHdLHdLHdKGdLIdLJdLKdLadLLdLMdLNdLOdLedLedLPdLQdLRdLSdLTdLUdCidCidCidDPdBvdqTdqTdsadsadsadsadsadsadqTdqTdqTdsadsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/nano/css/shared.css b/nano/css/shared.css index 5d41a4f330..241ec579ab 100644 --- a/nano/css/shared.css +++ b/nano/css/shared.css @@ -23,7 +23,9 @@ hr { padding: 0px 4px 4px 4px; margin: 0 2px 2px 0; cursor:default; + white-space: nowrap; } + .hasIcon { padding: 0px 4px 4px 0px; } @@ -138,6 +140,12 @@ h4 { clear: both; padding: 8px; } + +.white { + color: white; + font-weight: bold; +} + .good { color: #4f7529; font-weight: bold; @@ -192,6 +200,8 @@ div.notice { margin: 4px 0 0 0; clear: both; } + + .itemLabel { float: left; width: 30%; @@ -206,6 +216,13 @@ div.notice { width: 20%; color: #e9c183; } +.itemLabelWide { + float: left; + width: 45%; + color: #e9c183; +} + + .itemContentWide { float: left; width: 79%; @@ -214,6 +231,11 @@ div.notice { float: left; width: 33%; } +.itemContentMedium { + float: left; + width: 55%; +} + .statusDisplay { background: #000000; color: #ffffff; @@ -221,6 +243,17 @@ div.notice { padding: 4px; margin: 3px 0; } +.statusDisplayRecords { + background: #000000; + color: #ffffff; + border: 1px solid #40628a; + padding: 4px; + margin: 3px 0; + overflow-x: hidden; + overflow-y: auto; +} + + .statusLabel { width: 138px; float: left; @@ -307,7 +340,17 @@ div.notice { float: left; } .fixedLeftWide { - width: 150px; + width: 165px; + float: left; +} + +.fixedLeftWider{ + width: 220px; + float: left; +} + +.fixedLeftWidest{ + width: 250px; float: left; } @@ -315,6 +358,24 @@ div.notice { float: right; } +/* Used in PDA */ + + +.wholeScreen +{ + position: absolute + color: #517087; + font-size: 16px; + font-weight: bold; + text-align:center; +} + +.pdalink +{ + float: left; + white-space:nowrap; +} + /* DNA Modifier UI (dna_modifier.tmpl) */ .dnaBlock @@ -363,3 +424,67 @@ div.notice { margin: 200px 0; text-align: center; } + +/* Table stuffs for power monitor */ +table.pmon +{ +border:2px solid RoyalBlue; +} + +table.pmon td, table.pmon th +{ +border-bottom:1px dotted black; +padding:0px 5px 0px 5px; +} + + + +/* Table Stuffs for manifest*/ + +th.command +{ + background: #3333FF; + font-weight: bold; + color: #ffffff; +} + +th.sec +{ + background: #8e0000; + font-weight: bold; + color: #ffffff; +} +th.med +{ + background: #006600; + font-weight: bold; + color: #ffffff; +} +th.eng +{ + background: #b27300; + font-weight: bold; + color: #ffffff; +} +th.sci +{ + background: #a65ba6; + font-weight: bold; + color: #ffffff; +} +th.civ +{ + background: #a32800; + font-weight: bold; + color: #ffffff; +} +th.misc +{ + background: #666666; + font-weight: bold; + color: #ffffff; +} + + + + diff --git a/nano/images/uiBackground-Syndicate.png b/nano/images/uiBackground-Syndicate.png new file mode 100644 index 0000000000..3ca932cb83 Binary files /dev/null and b/nano/images/uiBackground-Syndicate.png differ diff --git a/nano/images/uiBackground-Syndicate.xcf b/nano/images/uiBackground-Syndicate.xcf new file mode 100644 index 0000000000..c86cea69d1 Binary files /dev/null and b/nano/images/uiBackground-Syndicate.xcf differ diff --git a/nano/images/uiTitleFluff-Syndicate.png b/nano/images/uiTitleFluff-Syndicate.png new file mode 100644 index 0000000000..b09f5ba6b2 Binary files /dev/null and b/nano/images/uiTitleFluff-Syndicate.png differ diff --git a/nano/js/nano_base_helpers.js b/nano/js/nano_base_helpers.js index ef34bd506a..338be42256 100644 --- a/nano/js/nano_base_helpers.js +++ b/nano/js/nano_base_helpers.js @@ -15,6 +15,20 @@ NanoBaseHelpers = function () var initHelpers = function () { $.views.helpers({ + + syndicateMode: function() { + $('body').css("background-color","#8f1414"); + $('body').css("background-image","url('uiBackground-Syndicate.png')"); + $('body').css("background-position","50% 0"); + $('body').css("background-repeat","repeat-x"); + + $('#uiTitleFluff').css("background-image","url('uiTitleFluff-Syndicate.png')"); + $('#uiTitleFluff').css("background-position","50% 50%"); + $('#uiTitleFluff').css("background-repeat", "no-repeat"); + + return ''; + }, + // Generate a Byond link link: function( text, icon, parameters, status, elementClass, elementId) { diff --git a/nano/templates/TemplatesGuide.txt b/nano/templates/TemplatesGuide.txt index 3cef9b9128..3b042edd0b 100644 --- a/nano/templates/TemplatesGuide.txt +++ b/nano/templates/TemplatesGuide.txt @@ -7,7 +7,4 @@ to easily add conditionals (if statements), loops (for loops) and custom formatt Templates are stored in the /nano/templates folder and the file extension is .tmpl. -This guide is a work in progress. However the templating system is "JSRender", and documentation for it's -markup syntax can be found here: http://www.jsviews.com/#jsrtags - - +This guide is being replaced with a wiki entry, found here: http://baystation12.net/wiki/index.php?title=NanoUI \ No newline at end of file diff --git a/nano/templates/pda.tmpl b/nano/templates/pda.tmpl new file mode 100644 index 0000000000..a404357899 --- /dev/null +++ b/nano/templates/pda.tmpl @@ -0,0 +1,929 @@ + + +{^{if owner}} +
    +
    + Functions: +
    +
    + + {^{:~link('Close', 'gear', {'choice' : "Close"}, null, 'fixedLeft')}} + {^{if idInserted}} {^{:~link('Update PDA Info', 'eject', {'choice' : "UpdateInfo"}, null, 'fixedLeftWide')}} {{/if}} + {^{if mode != 0}} {^{:~link('Return', 'arrowreturn-1-w', {'choice' : "Return"}, null, 'fixedLeft')}} {{/if}} +
    +
    +
    +
    +
    + Station Time: +
    +
    + {^{:stationTime}} +
    +
    +
    + {^{if mode == 0}} +
    +
    + Owner: +
    +
    + {^{:owner}}, {^{:ownjob}} +
    +
    +
    +
    +
    + ID: +
    +
    + {^{:~link(idLink, 'eject', {'choice' : "Authenticate"}, idInserted ? null : 'disabled', idInserted ? 'fixedLeftWidest' : 'fixedLeft')}} +
    +
    +
    +
    +
    + Cartridge: +
    +
    + {^{:~link(cartridge ? cartridge.name : 'no cartridge', 'eject', {'choice' : "Eject"}, cartridge ? null : 'disabled', cartridge ? null : 'fixedLeft')}} +
    +
    +
    +

    Functions

    +
    +
    +
    + General: +
    +
    + {^{:~link('Notekeeper', 'note', {'choice' : "1"},null, 'fixedLeftWide')}} + {^{:~link('Messenger', newMessage ? 'mail-closed' : 'mail-open', {'choice' : "2"},null, 'fixedLeftWide')}} + {^{:~link('Crew Manifest', 'contact', {'choice' : "41"},null, 'fixedLeftWide')}} +
    +
    +
    + {^{if cartridge}} + {^{if cartridge.access.access_clown == 1}} +
    +
    + Clown: +
    +
    + {^{:~link('Honk Synthesizer', 'gear', {'choice' : "Honk"},null, 'fixedLeftWide')}} +
    +
    +
    + {{/if}} + {^{if cartridge.access.access_engine == 1}} +
    +
    + Engineering: +
    +
    + {^{:~link('Power Monitor', 'alert', {'choice' : "43"},null, 'fixedLeftWide')}} +
    +
    +
    + {{/if}} + {^{if cartridge.access.access_medical == 1}} +
    +
    + Medical: +
    +
    + {^{:~link('Medical Records', 'gear', {'choice' : "44"},null, 'fixedLeftWide')}} + {^{:~link(scanmode == 1 ? 'Disable Med Scanner' : 'Enable Med Scanner', 'gear', {'choice' : "Medical Scan"},null , 'fixedLeftWide')}} +
    +
    +
    + {{/if}} + {^{if cartridge.access.access_security == 1}} +
    +
    + Security: +
    +
    + {^{:~link('Security Records', 'gear', {'choice' : "45"},null, 'fixedLeftWide')}} + {^{if cartridge.radio ==1}} {^{:~link('Security Bot Access', 'gear', {'choice' : "46"},null, 'fixedLeftWide')}} {{/if}} +
    +
    +
    +
    + {{/if}} + {^{if cartridge.access.access_quartermaster == 1}} +
    +
    + Quartermaster: +
    +
    + {^{:~link('Supply Records', 'gear', {'choice' : "47"},null, 'fixedLeftWide')}} + {^{if cartridge.radio == 3}} {^{:~link('Delivery Bot Control', 'gear', {'choice' : "48"},null, 'fixedLeftWide')}} {{/if}} +
    +
    +
    +
    + {{/if}} + {{/if}} +
    +
    +
    + Utilities: +
    +
    + {^{if cartridge}} + {^{if cartridge.access.access_status_display == 1}} {^{:~link('Status Display', 'gear', {'choice' : "42"},null, 'fixedLeftWide')}}{{/if}} + {^{if cartridge.access.access_janitor==1}} {^{:~link('Custodial Locator', 'gear', {'choice' : "49"},null, 'fixedLeftWide')}} {{/if}} + {^{if cartridge.radio == 2}} {^{:~link('Signaler System', 'gear', {'choice' : "40"},null, 'fixedLeftWide')}} {{/if}} + {^{if cartridge.access.access_reagent_scanner==1}} {^{:~link(scanmode == 3 ? 'Disable Reagent Scanner' : 'Enable Reagent Scanner', 'gear', {'choice' : "Reagent Scan"},null, 'fixedLeftWider')}} {{/if}} + {^{if cartridge.access.access_engine==1}} {^{:~link(scanmode == 4 ? 'Disable Halogen Counter' : 'Enable Halogen Counter', 'gear', {'choice' : "Halogen Counter"}, null, 'fixedLeftWider')}} {{/if}} + {^{if cartridge.access.access_atmos==1}} {^{:~link(scanmode == 5 ? 'Disable Gas Scanner' : 'Enable Gas Scanner', 'gear', {'choice' : "Gas Scan"}, null, 'fixedLeftWide')}} {{/if}} + {^{if cartridge.access.access_remote_door==1}}{^{:~link('Toggle Door', 'gear', {'choice' : "Toggle Door"},null, 'fixedLeftWide')}} {{/if}} + {{/if}} + {^{:~link('Atmospheric Scan', 'gear', {'choice' : "3"},null, 'fixedLeftWide')}} + {^{:~link(fon==1 ? 'Disable Flashlight' : 'Enable Flashlight', 'lightbulb', {'choice' : "Light"}, null,'fixedLeftWide')}} +
    +
    + {^{if pai}} +
    +
    + PAI Utilities: +
    +
    + {^{:~link('Configuration', 'gear', {'choice' : "pai", 'option' : "1"},null, 'fixedLeft')}} + {^{:~link('Eject pAI', 'eject', {'choice' : "pai", 'option' : "2"},null, 'fixedLeft')}} +
    +
    + {{/if}} + {{/if}} + {^{if mode == 1}} +
    +
    + Notes: +
    +
    +
    +
    +
    + {^{:note}} +
    +
    +
    +
    +
    + {^{:~link('Edit Notes', 'gear', {'choice' : "Edit"},null, 'fixedLeft')}} +
    +
    + + + {{else mode == 2}} +

    SpaceMessenger V4.0.1

    +
    +
    + Messenger Functions: +
    + +
    + {^{:~link(silent==1 ? 'Ringer: Off' : 'Ringer: On', silent==1 ? 'volume-off' : 'volume-on', {'choice' : "Toggle Ringer"},null, 'fixedLeftWide')}} + {^{:~link(toff==1 ? 'Messenger: Off' : 'Messenger: On',toff==1 ? 'close':'check', {'choice' : "Toggle Messenger"},null, 'fixedLeftWide')}} + {^{:~link('Set Ringtone', 'comment', {'choice' : "Ringtone"}, null, 'fixedLeftWide')}} + {^{:~link('Delete all Conversations', 'trash', {'choice' : "Clear", 'option' : "All"},null, 'fixedLeftWider')}} +
    +
    + {^{if toff == 0}} +

    + {^{if cartridge}} + {^{if cartridge.charges}} +
    + {^{:cartridge.charges}} + {^{if cartridge.type == "/obj/item/weapon/cartridge/syndicate"}} detonation charges left. {{/if}} + {^{if cartridge.type == "/obj/item/weapon/cartridge/clown" || cartridge.type == "/obj/item/weapon/cartridge/mime"}} viral files left. {{/if}} +

    +
    + {{/if}} + {{/if}} + + {^{if pda_count == 0}}No other PDAS located + {{else}} +

    Current Conversations

    + {^{for convopdas}} +
    + {^{:~link(Name, 'circle-arrow-s', {'choice' : "Select Conversation", 'convo' : Reference } , null, fixedLeftWider)}} + {^{if ~root.cartridge}} + {^{if ~root.cartridge.type == "/obj/item/weapon/cartridge/syndicate" && Detonate == 1}} {^{:~link('*Detonate*', 'radiation', {'choice' : "Detonate", 'target' : Reference}, null, 'fixedLeft')}} {{/if}} + {^{if ~root.cartridge.type == "/obj/item/weapon/cartridge/clown"}} {^{:~link('*Send Virus*', 'star', {'choice' : "Send Honk", 'target' : Reference}, null, 'fixedLeft')}} {{/if}} + {^{if ~root.cartridge.type == "/obj/item/weapon/cartridge/mime"}} {^{:~link('*Send Virus*', 'circle-arrow-s', {'choice' : "Send Silence", 'target' : Reference}, null, 'fixedLeft')}} {{/if}} + {{/if}} +
    + {{/for}} +

    Other PDAs

    + {^{for pdas}} +
    + {^{:~link(Name, 'circle-arrow-s', {'choice' : "Message", 'target' : Reference}, null, fixedLeftWider)}} + {^{if ~root.cartridge}} + {^{if ~root.cartridge.type == "/obj/item/weapon/cartridge/syndicate" && Detonate == 1}} {^{:~link('*Detonate*', 'radiation', {'choice' : "Detonate", 'target' : Reference}, null, 'fixedLeft')}} {{/if}} + {^{if ~root.cartridge.type == "/obj/item/weapon/cartridge/clown"}} {^{:~link('*Send Virus*', 'star', {'choice' : "Send Honk", 'target' : Reference}, null, 'fixedLeft')}} {{/if}} + {^{if ~root.cartridge.type == "/obj/item/weapon/cartridge/mime"}} {^{:~link('*Send Virus*', 'circle-arrow-s', {'choice' : "Send Silence", 'target' : Reference}, null, 'fixedLeft')}} {{/if}} + {{/if}} +
    + {{/for}} + {{/if}} + {{/if}} + + {{else mode == 21}} +

    SpaceMessenger V4.0.1

    +
    +
    + Messenger Functions: +
    + +
    + {^{:~link('Delete Conversation', 'trash', {'choice' : "Clear", 'option' : "Convo"},null, 'fixedLeftWide')}} +
    +
    +

    +

    Conversation with: {^{:convo_name}} ({^{:convo_job}})

    +
    +
    +
    + {^{for messages}} + {^{if ~root.active_conversation == target}} + {^{if sent==0}} + Them: {^{:message}}
    + {{else}} + You: {^{:message}}
    + {{/if}} + {{/if}} + {{/for}} + +
    +
    +
    + {^{:~link('Reply', 'comment', {'choice' : "Message", 'target': active_conversation},null, 'fixedLeft')}} + + {{else mode== 41}} +
    +
    + {^{if manifest.heads.length}} + + {^{for manifest["heads"]}} + {^{if rank == "Captain"}} + + {{else}} + + {{/if}} + {{/for}} + {{/if}} + {^{if manifest.sec.length}} + + {^{for manifest["sec"]}} + {^{if rank == "Head of Security"}} + + {{else}} + + {{/if}} + {{/for}} + {{/if}} + {^{if manifest.eng.length}} + + {^{for manifest["eng"]}} + {^{if rank == "Chief Engineer"}} + + {{else}} + + {{/if}} + + {{/for}} + {{/if}} + {^{if manifest.med.length}} + + {^{for manifest["med"]}} + {^{if rank == "Chief Medical Officer"}} + + {{else}} + + {{/if}} + {{/for}} + {{/if}} + {^{if manifest.sci.length}} + + {^{for manifest["sci"]}} + {^{if rank == "Research Director"}} + + {{else}} + + {{/if}} + {{/for}} + {{/if}} + {^{if manifest.civ.length}} + + {^{for manifest["civ"]}} + {^{if rank == "Head of Personnel"}} + + {{else}} + + {{/if}} + {{/for}} + {{/if}} + {^{if manifest.misc.length}} + + {^{for manifest["misc"]}} + + {{/for}} + {{/if}} + + +
    Command
    {^{:name}}{^{:rank}}{^{:active}}
    {^{:name}}{^{:rank}}{^{:active}}
    Security
    {^{:name}}{^{:rank}}{^{:active}}
    {^{:name}}{^{:rank}}{^{:active}}
    Engineering
    {^{:name}}{^{:rank}}{^{:active}}
    {^{:name}}{^{:rank}}{^{:active}}
    Medical
    {^{:name}}{^{:rank}}{^{:active}}
    {^{:name}}{^{:rank}}{^{:active}}
    Science
    {^{:name}}{^{:rank}}{^{:active}}
    {^{:name}}{^{:rank}}{^{:active}}
    Civilian
    {^{:name}}{^{:rank}}{^{:active}}
    {^{:name}}{^{:rank}}{^{:active}}
    Misc
    {^{:name}}{^{:rank}}{^{:active}}
    +
    + {{else mode == 3}} + +

    Atmospheric Scan

    +
    +
    + {^{if aircontents.reading == 1}} +
    + Pressure: +
    +
    + {^{:~string('{1} kPa', aircontents.pressure < 80 || aircontents.pressure > 120 ? 'bad' : aircontents.pressure < 95 || aircontents.pressure > 110 ? 'average' : 'good' , aircontents.pressure)}} +
    +
    + Temperature: +
    +
    + {^{:~string('{1} °C', aircontents.temp < 5 || aircontents.temp > 35 ? 'bad' : aircontents.temp < 15 || aircontents.temp > 25 ? 'average' : 'good' , aircontents.temp)}} +
    +
    +
    + Oxygen: +
    +
    + {^{:~string('{1}%', aircontents.oxygen < 17 ? 'bad' : aircontents.oxygen < 19 ? 'average' : 'good' , aircontents.oxygen)}} +
    +
    + Nitrogen: +
    +
    + {^{:~string('{1}%', aircontents.nitrogen > 82 ? 'bad' : aircontents.nitrogen > 80 ? 'average' : 'good' , aircontents.nitrogen)}} +
    +
    + Carbon Dioxide: +
    +
    + {^{:~string('{1}%', aircontents.carbon_dioxide > 5 ? 'bad' : 'good' , aircontents.carbon_dioxide)}} +
    +
    + Plasma: +
    +
    + {^{:~string('{1}%', aircontents.plasma > 0 ? 'bad' : 'good' , aircontents.plasma)}} + +
    + {^{if aircontents.other > 0}} +
    + Unknown: +
    +
    + {^{:aircontents.other}}% +
    + {{/if}} + {{else}} +
    + Unable to get air reading +
    + {{/if}} +
    + +
    + {{else mode == 40}} +

    Remote Signaling System

    +
    +
    + Frequency: +
    +
    + {^{:records.signal_freq}} +
    +  {^{:~link('-1', null, {'cartmenu' : "1", 'choice' : "Signal Frequency", 'sfreq' : "-10"},null, null)}}  + {^{:~link('-.2', null, {'cartmenu' : "1", 'choice' : "Signal Frequency", 'sfreq' : "-2"},null, null)}}  + + {^{:~link('+.2', null, {'cartmenu' : "1", 'choice' : "Signal Frequency", 'sfreq' : "2"},null, null)}}  + {^{:~link('+1', null, {'cartmenu' : "1", 'choice' : "Signal Frequency", 'sfreq' : "10"},null, null)}} +
    +
    +

    +
    +
    + Code: +
    +
    + + {^{:records.signal_code}}
    +
    + {^{:~link('-5', null, {'cartmenu' : "1", 'choice' : "Signal Code", 'scode' : "-5"},null, null)}} + {^{:~link('-1', null, {'cartmenu' : "1", 'choice' : "Signal Code", 'scode' : "-1"},null, null)}} + {^{:~link('+1', null, {'cartmenu' : "1", 'choice' : "Signal Code", 'scode' : "1"},null, null)}} + {^{:~link('+5', null, {'cartmenu' : "1", 'choice' : "Signal Code", 'scode' : "5"},null, null)}} +
    +
    +
    + {^{:~link('Send Signal', 'radiation', {'cartmenu' : "1", 'choice' : "Send Signal"},null, null)}} +
    + + {{else mode == 42}} +

    Station Status Displays Interlink

    +
    +
    + Code: +
    +
    + {^{:~link('Clear', 'trash', {'cartmenu' : "1", 'choice' : "Status", 'statdisp' : "blank"},null, null)}} + {^{:~link('Shuttle ETA', 'gear', {'cartmenu' : "1", 'choice' : "Status",'statdisp' : "shuttle"},null, null)}} + {^{:~link('Message', 'gear', {'cartmenu' : "1", 'choice' : "Status",'statdisp' : "message"},null, null)}} +
    +
    +
    +
    +
    + Message line 1 +
    +
    + {^{:~link(records.message1 + ' (set)', 'pencil', {'cartmenu' : "1", 'choice' : "Status",'statdisp' : "setmsg1"},null, null)}} +
    +
    +
    +
    + Message line 2 +
    +
    + {^{:~link(records.message2 + ' (set)', 'pencil', {'cartmenu' : "1", 'choice' : "Status",'statdisp' : "setmsg2"},null, null)}} +
    +
    + +
    +
    +
    + ALERT!: +
    +
    + {^{:~link('None', 'alert', {'cartmenu' : "1", 'choice' : "Status",'statdisp' : "alert", 'default' : "alert"},null, null)}} + {^{:~link('Alert', 'alert', {'cartmenu' : "1", 'choice' : "Status",'statdisp' : "alert", 'alert' : "alert"},null, null)}} + {^{:~link('Lockdown', 'caution', {'cartmenu' : "1", 'choice' : "Status",'statdisp' : "alert", 'alert' : "alert"},null, null)}} + {^{:~link('Biohazard', 'radiation', {'cartmenu' : "1", 'choice' : "Status",'statdisp' : "alert", 'alert' : "alert"},null, null)}} +
    +
    + + {{else mode == 43}} + +

    Station Powermonitors

    +
    + Select A power monitor: +
    + {^{for records.powermonitors}} +
    + {^{:~link(Name, 'radiation', {'cartmenu' : "1", 'choice' : "Power Select",'target' : ref},null, null)}} +
    + {{/for}} + + {{else mode == 433}} +

    Powernet Status

    +
    +
    + Current Load: +
    +
    + {^{:records.powerload}} W +
    +
    +
    +
    + Total Power: +
    +
    + {^{:records.poweravail}} W +
    +
    +
    +
    + + {^{for records.apcs}} + {^{if #index % 20 === 0}} + + {{/if}} + + + {^{:~string('', Equipment==1 ? '#4f7529' : '#8f1414' )}} + {^{:~string('', Lights==1 ? '#4f7529' : '#8f1414' )}} + {^{:~string('', Environment==1 ? '#4f7529' : '#8f1414' )}} + {^{:~string('', CellStatus==1 ? '#4f7529' : '#8f1414', CellStatus==-1 ? 'No Cell' : CellPct + '%' )}} + + {{/for}} +
     Area  Eqp.  Lgt.  Env  Cell 
    {^{:Name}}   {1}
    +
    + + {{else mode == 44}} +

    Medical Record List

    +
    + Select A record +
    +
    + {^{for records.medical_records}} +
    + {^{:~link(Name, 'gear', {'cartmenu' : "1", 'choice' : "Medical Records",'target' : ref},null, null)}} +
    + {{/for}} + + + + {{else mode == 441}} +

    Medical Record

    +
    +
    +
    + {^{if records.general_exists == 1}} + Name: {^{:records.general.name}}
    + Sex: {^{:records.general.sex}}
    + Species: {^{:records.general.species}}
    + Age: {^{:records.general.age}}
    + Rank: {^{:records.general.rank}}
    + Fingerprint: {^{:records.general.fingerprint}}
    + Physical Status: {^{:records.general.p_stat}}
    + Mental Status: {^{:records.general.m_stat}}

    + {{else}} + + General Record Lost!

    +
    + {{/if}} + {^{if records.medical_exists == 1}} + Medical Data:
    + Blood Type: {^{:records.medical.b_type}}

    + Minor Disabilities: {^{:records.medical.mi_dis}}
    + Details: {^{:records.medical.mi_dis_d}}

    + Major Disabilities: {^{:records.medical.ma_dis}}
    + Details: {^{:records.medical.ma_dis_d}}

    + Allergies: {^{:records.medical.alg}}
    + Details: {^{:records.medical.alg_d}}

    + Current Disease: {^{:records.medical.cdi}}
    + Details: {^{:records.medical.alg_d}}

    + Important Notes: {^{:records.medical.notes}} + {{else}} + + Medical Record Lost!

    +
    + {{/if}} +
    +
    +
    + + + {{else mode == 45}} +

    Security Record List

    +
    + Select A record +
    +
    + {^{for records.security_records}} +
    + {^{:~link(Name, 'gear', {'cartmenu' : "1", 'choice' : "Security Records",'target' : ref},null, null)}} +
    + {{/for}} + + + + {{else mode == 451}} +

    Security Record

    +
    +
    +
    + {^{if records.general_exists == 1}} + Name: {^{:records.general.name}}
    + Sex: {^{:records.general.sex}}
    + Species: {^{:records.general.species}}
    + Age: {^{:records.general.age}}
    + Rank: {^{:records.general.rank}}
    + Fingerprint: {^{:records.general.fingerprint}}
    + Physical Status: {^{:records.general.p_stat}}
    + Mental Status: {^{:records.general.m_stat}}

    + {{else}} + + General Record Lost!

    +
    + {{/if}} + {^{if records.security_exists == 1}} + Security Data:
    + Criminal Status: {^{:records.security.criminal}}

    + Minor Crimes: {^{:records.security.mi_crim}}
    + Details: {^{:records.security.mi_crim_d}}

    + Major Crimes: {^{:records.security.ma_crim}}
    + Details: {^{:records.security.ma_crim_d}}

    + Important Notes: {^{:records.security.notes}} + {{else}} + + Security Record Lost!

    +
    + {{/if}} +
    +
    +
    + {{else mode == 46}} +

    Security Bot Control

    + {^{if records.beepsky.active == null || records.beepsky.active == 0}} + {^{if records.beepsky.count == 0}} +

    No bots found.

    + {{else}} +
    + Select A Bot. +
    +
    + {^{for records.beepsky.bots}} +
    + {^{:~link(Name, 'gear', {'radiomenu' : "1", 'op' : "control",'bot' : ref},null, null)}} (Location: {^{:Location}}) +
    + {{/for}} + {{/if}} +
    + {^{:~link('Scan for Bots','gear', {'radiomenu' : "1", 'op' : "scanbots"},null, null)}} + + {{else}} +

    {^{:records.beepsky.active}}

    +

    + {^{if records.beepsky.botstatus.mode == -1}} +

    Waiting for response...

    + {{else}} +

    Status:

    +
    +
    +
    + Location: +
    +
    + {^{:records.beepsky.botstatus.loca}} +
    +
    +
    +
    + Mode: +
    +
    + + {^{if records.beepsky.botstatus.mode ==0}} Ready + {{else records.beepsky.botstatus.mode == 1}} + Apprehending target + {{else records.beepsky.botstatus.mode ==2 || records.beepsky.botstatus.mode == 3}} + Arresting target + {{else records.beepsky.botstatus.mode ==4}} + Starting patrol + {{else records.beepsky.botstatus.mode ==5}} + On Patrol + {{else records.beepsky.botstatus.mode ==6}} + Responding to summons + {{/if}} + +
    +
    +
    + {^{:~link('Stop Patrol', 'gear', {'radiomenu' : "1", 'op' : "stop"},null, null)}} + {^{:~link('Start Patrol', 'gear', {'radiomenu' : "1", 'op' : "go"},null, null)}} + {^{:~link('Summon Bot', 'gear', {'radiomenu' : "1", 'op' : "summon"},null, null)}} +
    + {{/if}} + {^{:~link('Return to Bot list', 'gear', {'radiomenu' : "1", 'op' : "botlist"},null, null)}} + {{/if}} + {{else mode == 47}} +

    Supply Record Interlink

    +
    +
    + Location: +
    +
    + + {^{if records.supply.shuttle_moving}} + Moving to station ({^{:records.supply.shuttle_eta}}) + {{else}} + Shuttle at {^{:records.supply.shuttle_loc}} + {{/if}} + +
    +
    +
    +
    +
    + Current Approved Orders
    + {^{if records.supply.approved_count == 0}} + No current approved orders

    + {{else}} + {^{for records.supply.approved}} + #{^{:Number}} - {^{:Name}} approved by {^{:OrderedBy}}
    {^{if Comment != ""}} {^{:Comment}}
    {{/if}}
    + {{/for}} + {{/if}} +

    + Current Requested Orders
    + {^{if records.supply.requests_count == 0}} + No current requested orders

    + {{else}} + {^{for records.supply.requests}} + #{^{:Number}} - {^{:Name}} requested by {^{:OrderedBy}}
    {^{if Comment != ""}} {^{:Comment}}
    {{/if}}
    + {{/for}} + {{/if}} +
    +
    +
    + + {{else mode == 48}} +

    Mule Control

    + {^{if records.mulebot.active == null || records.mulebot.active == 0}} + {^{if records.mulebot.count == 0}} +

    No bots found.

    + + {{else}} +

    Mule List

    +
    + Select A Mulebot +
    +
    + {^{for records.mulebot.bots}} +
    + {^{:~link(Name, 'gear', {'radiomenu' : "1", 'op' : "control",'bot' : ref},null, null)}} (Location: {^{:Location}}) +
    + {{/for}} + {{/if}} +
    + {^{:~link('Scan for Bots','gear', {'radiomenu' : "1", 'op' : "scanbots"},null, null)}} + {{else}} + {^{if records.mulebot.botstatus.mode == -1}} +

    Waiting for response...

    + {{else}} +

    Status:

    +
    +
    +
    + Location: +
    +
    + {^{:records.mulebot.botstatus.loca}} +
    +
    +
    +
    + Mode: +
    +
    + + {^{if records.mulebot.botstatus.mode ==0}} Ready + {{else records.mulebot.botstatus.mode == 1}} + Loading/Unloading + {{else records.mulebot.botstatus.mode ==2}} + Navigating to Delivery Location + {{else records.mulebot.botstatus.mode == 3}} + Navigating to Home + {{else records.mulebot.botstatus.mode ==4}} + Waiting for Clear Path + {{else records.mulebot.botstatus.mode ==5 || records.mulebot.botstatus.mode == 6}} + Calculating navigation Path + + {{else records.mulebot.botstatus.mode ==7}} + Unable to locate destination + {{/if}} + +
    +
    +
    +
    + Current Load: +
    +
    + + {^{:~link(records.mulebot.botstatus.load == null ? 'None (Unload)' : records.mulebot.botstatus.load + ' (Unload)', 'gear', {'radiomenu' : "1", 'op' : "unload"},records.mulebot.botstatus.load == null ? 'disabled' : null, null)}} + +
    +
    +
    +
    + Power: +
    +
    + + {^{:records.mulebot.botstatus.powr}}% + +
    +
    + +
    +
    + Destination: +
    +
    + {^{:~link(records.mulebot.botstatus.dest == null || records.mulebot.botstatus.dest == "" ? 'None (Set)': records.mulebot.botstatus.dest+ ' (Set)', 'gear', {'radiomenu' : "1", 'op' : "setdest"},null, null)}} +
    + +
    +
    +
    + Home: +
    +
    + {^{if records.mulebot.botstatus.home == null}} None {{else}} {^{:records.mulebot.botstatus.home}} {{/if}} +
    +
    +
    +
    + Auto Return: +
    +
    + {^{:~link(records.mulebot.botstatus.retn == 1 ? 'ON' : 'OFF', 'gear', {'radiomenu' : "1", 'op' : records.mulebot.botstatus.retn==1 ? "retoff" : "reton"},null, null)}} +
    +
    +
    +
    + Auto Pickup: +
    +
    + {^{:~link(records.mulebot.botstatus.pick==1? 'ON' : 'OFF', 'gear', {'radiomenu' : "1", 'op' : records.mulebot.botstatus.pick==1 ? "pickoff" : "pickon"},null, null)}} +
    +
    +
    +
    + Functions: +
    +
    + {^{:~link('Stop', 'gear', {'radiomenu' : "1", 'op' : "stop"},null, null)}} + {^{:~link('Proceed', 'gear', {'radiomenu' : "1", 'op' : "go"},null, null)}} + {^{:~link('Return Home', 'gear', {'radiomenu' : "1", 'op' : "home"},null, null)}} +
    +
    +

    + {^{:~link('Return to Bot list', 'gear', {'radiomenu' : "1", 'op' : "botlist"},null, null)}} + + + {{/if}} + {{/if}} + + + + {{else mode == 49}} +

    Janatorial Supplies Locator

    +
    + Current Location: + {^{if records.janitor.user_loc.x == 0}} + Unknown + {{else}} + {^{:records.janitor.user_loc.x}} / {^{:records.janitor.user_loc.y}} + {{/if}} +
    +
    + {^{for records.janitor.mops}} + {^{if x==0}} + Unable to locate Mop + {{else}} + Mop Location: + ({^{:x}} / {^{:y}}) - {^{:dir}} - Status: {^{:status}}
    + {{/if}} + {{/for}} +
    +
    + {^{for records.janitor.buckets}} + {^{if x==0}} + Unable to locate Water Buckets + {{else}} + Water Buckets Location: + ({^{:x}} / {^{:y}}) - {^{:dir}} - Water Level: {^{:status}}
    + {{/if}} + {{/for}} +
    +
    + {^{for records.janitor.cleanbots}} + {^{if x==0}} + Unable to locate Clean Bots + {{else}} + Clean Bots Location: + ({^{:x}} / {^{:y}}) - {^{:dir}} - Status: {^{:status}}
    + {{/if}} + + {{/for}} +
    +
    + {^{for records.janitor.carts}} + {^{if x==0}} + Unable to locate Janitorial Cart + {{else}} + Janitorial cart Location: + ({^{:x}} / {^{:y}}) - {^{:dir}} - Status: {^{:status}}
    + {{/if}} + + {{/for}} +
    + + + + + {{/if}} + + +{{else}} +







    No Owner information found, please swipe ID +
    +{{/if}} + diff --git a/nano/templates/uplink.tmpl b/nano/templates/uplink.tmpl new file mode 100644 index 0000000000..2f47c19635 --- /dev/null +++ b/nano/templates/uplink.tmpl @@ -0,0 +1,46 @@ + + +{^{:~syndicateMode()}} +

    {^{:welcome}}

    +
    +
    +
    + Functions: +
    +
    + {^{:~link('Close', 'gear', {'lock' : "1"}, null, 'fixedLeft')}} +
    +
    +
    +
    +
    + Tele-Crystals: +
    +
    + {^{:crystals}} +
    +
    +

    Request items:


    +Each item costs a number of tele-crystals as indicated by the number following their name. + +

    +{^{for nano_items}} +
    +

    {^{:Category}}

    +
    + {^{for items}} +
    + {^{:~link( Name, 'gear', {'buy_item' : obj_path, 'cost' : Cost}, Cost > ~root.crystals ? 'disabled' : null, null)}} - {^{:Cost}} +
    + {{/for}} +
    + +{{/for}} + +
    + {^{:~link('Buy Random (??)' , 'gear', {'buy_item' : 'random'}, null, 'fixedLeftWidest')}} +
    + diff --git a/sound/effects/canopen.ogg b/sound/effects/canopen.ogg new file mode 100644 index 0000000000..8e266c30b4 Binary files /dev/null and b/sound/effects/canopen.ogg differ