From 4dd8954f1ecbba566052963ec23374dcf76ba9e9 Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Mon, 22 Jun 2015 00:52:51 -0500 Subject: [PATCH 01/89] Multisword --- code/game/gamemodes/wizard/artefact.dm | 250 +++++++++++++++++++++++++ 1 file changed, 250 insertions(+) diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index 3fb8fe34f4b..b5082a5fb45 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -173,3 +173,253 @@ H.equip_to_slot_or_del(new /obj/item/weapon/shield/riot/roman(H), slot_l_hand) H.equip_to_slot_or_del(new /obj/item/weapon/claymore(H), slot_r_hand) H.equip_to_slot_or_del(new /obj/item/weapon/twohanded/spear(H), slot_back) + +/obj/item/weapon/multisword + name = "multiverse sword" + desc = "A weapon capable of summoning copies of yourself from across space and time to fight by your side." + icon_state = "claymore" + item_state = "claymore" + hitsound = 'sound/weapons/bladeslice.ogg' + flags = CONDUCT + slot_flags = SLOT_BELT + force = 20 + throwforce = 10 + w_class = 2 + attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + var/faction = list("unassigned") + var/charged = 40 + var/assigned = "unassigned" + var/evil = FALSE + +/obj/item/weapon/multisword/New() + ..() + SSobj.processing |= src + + +/obj/item/weapon/multisword/Destroy() + SSobj.processing.Remove(src) + ..() + + +/obj/item/weapon/multisword/process() + if(charged < 40) + charged++ + return + +/obj/item/weapon/multisword/attack_self(mob/user) + if(user.mind.special_role == "apprentice") + user << "You know better than to touch your teacher's stuff." + return + if(charged == 40) + var/faction_check = 0 + for(var/F in faction) + if(F in user.faction) + faction_check = 1 + break + if(faction_check == 0) + faction = list("[user.real_name]") + assigned = "user.realname" + user.faction = list("[user.real_name]") + user << "You bind the sword to yourself. You can now use it to summon help." + if(!usr.mind.special_role) + if(prob(30)) + user << "With your new found power you could easily conquer the station!" + var/datum/objective/hijackclone/hijack_objective = new /datum/objective/hijackclone + hijack_objective.owner = usr.mind + usr.mind.objectives += hijack_objective + hijack_objective.explanation_text = "Ensure only [usr.real_name] and their copies are on the shuttle!" + ticker.mode.traitors += usr.mind + usr.mind.special_role = "[usr.real_name] Prime" + evil = TRUE + else + user << "With your new found power you could easily defend the station!" + var/datum/objective/survive/new_objective = new /datum/objective/survive + new_objective.owner = usr.mind + new_objective.explanation_text = "Survive, and help defend the innocent from the mobs of multiverse clones." + usr.mind.objectives += new_objective + ticker.mode.traitors += usr.mind + usr.mind.special_role = "[usr.real_name] Prime" + evil = FALSE + else + var/list/candidates = get_candidates(BE_WIZARD) + if(candidates.len) + var/client/C = pick(candidates) + spawn_copy(C, get_turf(user.loc), user) + user << "The sword flashes, and you find yourself face to face with...you!" + charged = 0 + spawn_copy(C, get_turf(user.loc), user) + for(var/obj/item/weapon/multisword/M in world) + if(M.assigned == assigned) + M.charged = 0 + + else + user << "Unable to reach your apprentice! You can either attack the spellbook with the contract to refund your points, or wait and try again later." + else + user << "[src] is recharging! Keep in mind it shares a cooldown with the swords wielded by your copies." + + +/obj/item/weapon/multisword/proc/spawn_copy(var/client/C, var/turf/T) + var/mob/living/carbon/human/M = new/mob/living/carbon/human(T) + C.prefs.copy_to(M) + M.key = C.key + equip_copy(M) + M << "You are an alternate version of [usr.real_name] from another universe! Help them accomplish their goals at all costs." + M.mind.name = usr.real_name + M.real_name = usr.real_name + M.name = usr.real_name + if(evil) + var/datum/objective/hijackclone/hijack_objective = new /datum/objective/hijackclone + hijack_objective.owner = M.mind + M.mind.objectives += hijack_objective + hijack_objective.explanation_text = "Ensure only [usr.real_name] and their copies are on the shuttle!" + ticker.mode.traitors += M.mind + M.mind.special_role = "multiverse traveller" + else + var/datum/objective/protect/new_objective = new /datum/objective/protect + new_objective.owner = M:mind + new_objective:target = usr:mind + new_objective.explanation_text = "Protect [usr.real_name], your copy, and help them defend the innocent from the mobs of multiverse clones." + M.mind.objectives += new_objective + ticker.mode.traitors += M.mind + M.mind.special_role = "multiverse traveller" + +/obj/item/weapon/multisword/proc/equip_copy(var/mob/living/carbon/human/M) + + var/obj/item/weapon/multisword/sword = new /obj/item/weapon/multisword + sword.assigned = assigned + sword.faction = list("[assigned]") + sword.evil = evil + + var/randomize = pick("mobster","roman","wizard","cyborg","syndicate","assistant", "animu", "cultist", "highlander", "clown", "killer", "pirate", "soviet") + + switch(randomize) + if("mobster") + M.equip_to_slot_or_del(new /obj/item/clothing/head/fedora(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black(M), slot_gloves) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) + M.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(M), slot_glasses) + M.equip_to_slot_or_del(new /obj/item/clothing/under/suit_jacket/really_black(M), slot_w_uniform) + M.equip_to_slot_or_del(sword, slot_r_hand) + + if("roman") + var/hat = pick(/obj/item/clothing/head/helmet/roman, /obj/item/clothing/head/helmet/roman/legionaire) + M.equip_to_slot_or_del(new hat(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/clothing/under/roman(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/roman(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/weapon/shield/riot/roman(M), slot_l_hand) + M.equip_to_slot_or_del(sword, slot_r_hand) + + if("wizard") + M.equip_to_slot_or_del(new /obj/item/clothing/under/color/lightpurple(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/red(M), slot_wear_suit) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) + M.equip_to_slot_or_del(new /obj/item/clothing/head/wizard/red(M), slot_head) + M.equip_to_slot_or_del(sword, slot_r_hand) + if("cyborg") + var/obj/item/organ/limb/chest/C = locate(/obj/item/organ/limb/chest) in M.organs + qdel(C) + M.organs += new /obj/item/organ/limb/robot/chest + var/obj/item/organ/limb/r_arm/R = locate(/obj/item/organ/limb/r_arm) in M.organs + qdel(R) + M.organs += new /obj/item/organ/limb/robot/r_arm + var/obj/item/organ/limb/l_arm/L = locate(/obj/item/organ/limb/l_arm) in M.organs + qdel(L) + M.organs += new /obj/item/organ/limb/robot/l_arm + var/obj/item/organ/limb/l_leg/LL = locate(/obj/item/organ/limb/l_leg) in M.organs + qdel(LL) + M.organs += new /obj/item/organ/limb/robot/l_leg + var/obj/item/organ/limb/r_leg/RL = locate(/obj/item/organ/limb/r_leg) in M.organs + qdel(RL) + M.organs += new /obj/item/organ/limb/robot/r_leg + M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/eyepatch(M), slot_glasses) + M.equip_to_slot_or_del(sword, slot_r_hand) + if("syndicate") + M.equip_to_slot_or_del(new /obj/item/clothing/under/syndicate(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves) + M.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/swat(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) + M.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(M), slot_wear_suit) + M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas(M),slot_wear_mask) + M.equip_to_slot_or_del(sword, slot_r_hand) + if("assistant") + M.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(M), slot_shoes) + M.equip_to_slot_or_del(sword, slot_r_hand) + if("animu") + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) + M.equip_to_slot_or_del(new /obj/item/clothing/head/kitty(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/clothing/under/schoolgirl/red(M), slot_w_uniform) + M.equip_to_slot_or_del(sword, slot_r_hand) + if("cultist") + M.equip_to_slot_or_del(new /obj/item/clothing/head/culthood/alt(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/clothing/suit/cultrobes/alt(M), slot_wear_suit) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/cult(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) + M.equip_to_slot_or_del(sword, slot_r_hand) + if("highlander") + M.equip_to_slot_or_del(new /obj/item/clothing/under/kilt(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) + M.equip_to_slot_or_del(new /obj/item/clothing/head/beret(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes) + M.equip_to_slot_or_del(sword, slot_r_hand) + if("clown") + M.equip_to_slot_or_del(new /obj/item/clothing/under/rank/clown(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/clown_shoes(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/clothing/mask/gas/clown_hat(M), slot_wear_mask) + M.equip_to_slot_or_del(new /obj/item/weapon/bikehorn(M), slot_l_store) + M.equip_to_slot_or_del(sword, slot_r_hand) + if("killer") + M.equip_to_slot_or_del(new /obj/item/clothing/under/overalls(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/white(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/latex(M), slot_gloves) + M.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(M), slot_wear_mask) + M.equip_to_slot_or_del(new /obj/item/clothing/head/welding(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) + M.equip_to_slot_or_del(new /obj/item/clothing/suit/apron(M), slot_wear_suit) + M.equip_to_slot_or_del(new /obj/item/weapon/kitchen/knife(M), slot_l_store) + M.equip_to_slot_or_del(new /obj/item/weapon/scalpel(M), slot_r_store) + M.equip_to_slot_or_del(sword, slot_r_hand) + for(var/obj/item/carried_item in M.contents) + if(!istype(carried_item, /obj/item/weapon/implant)) + carried_item.add_blood(M) + if("pirate") + M.equip_to_slot_or_del(new /obj/item/clothing/under/pirate(M), slot_w_uniform) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/brown(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/clothing/head/bandana(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/clothing/glasses/eyepatch(M), slot_glasses) + M.equip_to_slot_or_del(sword, slot_r_hand) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) + if("soviet") + M.equip_to_slot_or_del(new /obj/item/clothing/head/hgpiratecap(M), slot_head) + M.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(M), slot_shoes) + M.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(M), slot_gloves) + M.equip_to_slot_or_del(new /obj/item/device/radio/headset(M), slot_ears) + M.equip_to_slot_or_del(new /obj/item/clothing/suit/hgpirate(M), slot_wear_suit) + M.equip_to_slot_or_del(new /obj/item/clothing/under/soviet(M), slot_w_uniform) + + else + return + + ready_dna(M) + if(M.dna && prob(50)) + var/list/all_species = list() + for(var/speciestype in typesof(/datum/species) - /datum/species) + var/datum/species/S = new speciestype() + if(!S.dangerous_existence) + all_species += speciestype + hardset_dna(M, null, null, null, null, pick(all_species)) + M.update_icons() + +/* var/obj/item/weapon/card/id/W = new obj/item/weapon/card/id + W.icon_state = "centcom" + W.access = assistant.get_access() + W.assignment = "Multiverse Traveller" + W.registered_name = M.real_name + W.update_label(M.real_name) + M.equip_to_slot_or_del(W, slot_wear_id)*/ From e87e4b4ba2351fb0bb7fc69a68c6b61e8c8db57a Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Mon, 22 Jun 2015 00:55:02 -0500 Subject: [PATCH 02/89] New Hijack --- code/game/gamemodes/objective.dm | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 34097634102..67d996f582e 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -213,6 +213,33 @@ return 0 return 1 +/datum/objective/hijackclone + explanation_text = "Hijack the emergency shuttle by escaping with only your copies." + dangerrating = 25 + martyr_compatible = 0 + +/datum/objective/hijackclone/check_completion() + if(!owner.current || owner.current.stat) + return 0 + if(SSshuttle.emergency.mode < SHUTTLE_ENDGAME) + return 0 + if(issilicon(owner.current)) + return 0 + + var/area/A = get_area(owner.current) + if(SSshuttle.emergency.areaInstance != A) + return 0 + + for(var/mob/living/player in player_list) + if(player.mind && player.mind != owner) + if(player.stat != DEAD) + switch(player.type) + if(/mob/living/silicon/ai, /mob/living/silicon/pai) + continue + if(get_area(player) == A) + if(player.real_name != owner.current.real_name && !istype(get_turf(player.mind.current), /turf/simulated/floor/plasteel/shuttle/red)) + return 0 + return 1 /datum/objective/block explanation_text = "Do not allow any organic lifeforms to escape on the shuttle alive." From b361c395abd99c86355a2b4c2c2fbac077e53511 Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Mon, 22 Jun 2015 00:56:07 -0500 Subject: [PATCH 03/89] Only me --- code/modules/admin/verbs/onlyone.dm | 38 ++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/code/modules/admin/verbs/onlyone.dm b/code/modules/admin/verbs/onlyone.dm index 986ca51c31b..924e8e6880b 100644 --- a/code/modules/admin/verbs/onlyone.dm +++ b/code/modules/admin/verbs/onlyone.dm @@ -47,4 +47,40 @@ H.equip_to_slot_or_del(W, slot_wear_id) message_admins("[key_name_admin(usr)] used THERE CAN BE ONLY ONE!") - log_admin("[key_name(usr)] used there can be only one.") \ No newline at end of file + log_admin("[key_name(usr)] used there can be only one.") + + +/client/proc/only_me() + if(!ticker) + alert("The game hasn't started yet!") + return + + for(var/mob/living/carbon/human/H in player_list) + if(H.stat == 2 || !(H.client)) continue + if(is_special_character(H)) continue + + ticker.mode.traitors += H.mind + H.mind.special_role = "[H.real_name] Prime" + + var/datum/objective/hijackclone/hijack_objective = new /datum/objective/hijackclone + hijack_objective.owner = H.mind + H.mind.objectives += hijack_objective + + H << "You are the multiverse summoner. Activate your blade to summon copies of yourself from another universe to fight by your side" + var/obj_count = 1 + for(var/datum/objective/OBJ in H.mind.objectives) + H << "Objective #[obj_count]: [OBJ.explanation_text]" + obj_count++ + + + var/obj/item/weapon/card/id/W = new(H) + W.icon_state = "centcom" + W.access = get_all_accesses() + W.access += get_all_centcom_access() + W.assignment = "Multiverse Summoner" + W.registered_name = H.real_name + W.update_label(H.real_name) + H.equip_to_slot_or_del(W, slot_wear_id) + + message_admins("[key_name_admin(usr)] used THERE CAN BE ONLY ME!") + log_admin("[key_name(usr)] used there can be only me.") From fd37bca4e751f535a6dab4990453d653ad8ef8cd Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Mon, 22 Jun 2015 01:09:16 -0500 Subject: [PATCH 04/89] Forgot a very important line --- code/game/gamemodes/wizard/artefact.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index b5082a5fb45..dd4c0e7234f 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -267,6 +267,7 @@ M.mind.name = usr.real_name M.real_name = usr.real_name M.name = usr.real_name + M.faction = list("[usr.real_name]") if(evil) var/datum/objective/hijackclone/hijack_objective = new /datum/objective/hijackclone hijack_objective.owner = M.mind From 28ed26ebb686fa6414064635e6dfa3adbdba2c60 Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Mon, 22 Jun 2015 01:12:47 -0500 Subject: [PATCH 05/89] Update artefact.dm --- code/game/gamemodes/wizard/artefact.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index dd4c0e7234f..97c2e00636d 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -189,7 +189,7 @@ var/faction = list("unassigned") var/charged = 40 var/assigned = "unassigned" - var/evil = FALSE + var/evil = TRUE /obj/item/weapon/multisword/New() ..() From 033650cc47541529063f0d697216d9f3aab07139 Mon Sep 17 00:00:00 2001 From: GunHog Date: Fri, 3 Jul 2015 01:38:29 -0500 Subject: [PATCH 06/89] Cyborg headlamps! - Borg lights are now a screen button. - Removed all borg flashlight modules. --- code/_onclick/hud/_defines.dm | 1 + code/_onclick/hud/robot.dm | 13 +++++++ .../objects/items/robot/robot_upgrades.dm | 1 + .../modules/mob/living/silicon/robot/death.dm | 1 + code/modules/mob/living/silicon/robot/life.dm | 1 + .../modules/mob/living/silicon/robot/robot.dm | 21 +++++++++- .../mob/living/silicon/robot/robot_modules.dm | 8 ---- html/changelogs/Gun_Hog_Borg_Lamps.yml | 36 ++++++++++++++++++ icons/mob/screen_cyborg.dmi | Bin 17522 -> 17952 bytes 9 files changed, 72 insertions(+), 10 deletions(-) create mode 100644 html/changelogs/Gun_Hog_Borg_Lamps.yml diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm index 1775761d6a2..e6235d4587e 100644 --- a/code/_onclick/hud/_defines.dm +++ b/code/_onclick/hud/_defines.dm @@ -38,6 +38,7 @@ #define ui_storage2 "CENTER+2:20,SOUTH:5" #define ui_borg_sensor "CENTER-3:16, SOUTH:5" //borgs +#define ui_borg_lamp "CENTER-4:16, SOUTH:5" //borgies #define ui_inv1 "CENTER-2:16,SOUTH:5" //borgs #define ui_inv2 "CENTER-1 :16,SOUTH:5" //borgs #define ui_inv3 "CENTER :16,SOUTH:5" //borgs diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm index 878efe59e65..5b506d6aea2 100644 --- a/code/_onclick/hud/robot.dm +++ b/code/_onclick/hud/robot.dm @@ -53,6 +53,14 @@ var/mob/living/silicon/robot/R = usr R.uneq_active() +/obj/screen/robot/lamp + name = "headlamp" + icon_state = "lamp" + +/obj/screen/robot/lamp/Click() + var/mob/living/silicon/robot/R = usr + R.toggle_headlamp() + /datum/hud/proc/robot_hud() adding = list() @@ -102,6 +110,11 @@ using.screen_loc = ui_borg_sensor adding += using +//Headlamp control + using = new /obj/screen/robot/lamp() + using.screen_loc = ui_borg_lamp + adding += using + //Intent using = new /obj/screen/act_intent() using.icon = 'icons/mob/screen_cyborg.dmi' diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index f16ea230382..972142ccf4c 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -36,6 +36,7 @@ R.designation = "Default" R.notify_ai(2) R.update_icons() + R.update_headlamp() return 1 diff --git a/code/modules/mob/living/silicon/robot/death.dm b/code/modules/mob/living/silicon/robot/death.dm index e12b5db835b..280241e0cc0 100644 --- a/code/modules/mob/living/silicon/robot/death.dm +++ b/code/modules/mob/living/silicon/robot/death.dm @@ -27,6 +27,7 @@ update_canmove() if(camera) camera.status = 0 + update_headlamp() //So borg lights are disabled when killed. uneq_all() // particularly to ensure sight modes are cleared diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index 7ce41a2de6a..26d994e3314 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -59,6 +59,7 @@ if (paralysis || stunned || weakened) //Stunned etc. stat = UNCONSCIOUS + update_headlamp() return 1 diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index c1030d43b39..2a0dfbfc541 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -60,6 +60,8 @@ var/tonermax = 40 var/jetpackoverlay = 0 var/braintype = "Cyborg" + var/lamp_on = 0 //If a borg's headlamp is on or not. + var/lamp_intensity = 4 //Some borgies require more light than others, such as miners. /mob/living/silicon/robot/New(loc) spark_system = new /datum/effect/effect/system/spark_spread() @@ -182,6 +184,7 @@ animation_length = 30 modtype = "Miner" feedback_inc("cyborg_miner",1) + lamp_intensity = 6 //mining lantern if("Medical") module = new /obj/item/weapon/robot_module/medical(src) @@ -201,6 +204,7 @@ //speed = -1 Secborgs have nerfed tasers now, so the speed boost is not necessary status_flags &= ~CANPUSH feedback_inc("cyborg_security",1) + lamp_intensity = 5 //seclite if("Engineering") module = new /obj/item/weapon/robot_module/engineering(src) @@ -221,6 +225,7 @@ transform_animation(animation_length) notify_ai(2) update_icons() + update_headlamp() SetEmagged(emagged) // Update emag status and give/take emag modules. /mob/living/silicon/robot/proc/transform_animation(animation_length) @@ -751,8 +756,6 @@ overlays += "minerjetpack" update_fire() - - /mob/living/silicon/robot/proc/installed_modules() if(!module) pick_module() @@ -978,6 +981,20 @@ set category = "Robot Commands" set_autosay() +/mob/living/silicon/robot/proc/toggle_headlamp() + lamp_on = !lamp_on + src << "Headlamp power [lamp_on ? "enabled" : "disabled"]." + update_headlamp() + +/mob/living/silicon/robot/proc/update_headlamp() + SetLuminosity(0) + + if(!lamp_on || stat) + return + else + AddLuminosity(lamp_intensity) + + /mob/living/silicon/robot/proc/deconstruct() var/turf/T = get_turf(src) if (robot_suit) diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 59e6475286e..bd56b118850 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -66,7 +66,6 @@ /obj/item/weapon/robot_module/standard/New() ..() - modules += new /obj/item/device/flashlight(src) modules += new /obj/item/weapon/melee/baton/loaded(src) modules += new /obj/item/weapon/extinguisher(src) modules += new /obj/item/weapon/wrench(src) @@ -81,7 +80,6 @@ /obj/item/weapon/robot_module/medical/New() ..() - modules += new /obj/item/device/flashlight(src) modules += new /obj/item/device/healthanalyzer(src) modules += new /obj/item/weapon/reagent_containers/borghypo(src) modules += new /obj/item/weapon/reagent_containers/glass/beaker/large(src) @@ -119,7 +117,6 @@ /obj/item/weapon/robot_module/engineering/New() ..() - modules += new /obj/item/device/flashlight(src) modules += new /obj/item/borg/sight/meson(src) emag = new /obj/item/borg/stun(src) modules += new /obj/item/weapon/rcd/borg(src) @@ -173,7 +170,6 @@ /obj/item/weapon/robot_module/security/New() ..() - modules += new /obj/item/device/flashlight/seclite(src) modules += new /obj/item/weapon/restraints/handcuffs/cable/zipties/cyborg(src) modules += new /obj/item/weapon/melee/baton/loaded(src) modules += new /obj/item/weapon/gun/energy/disabler/cyborg(src) @@ -187,7 +183,6 @@ /obj/item/weapon/robot_module/janitor/New() ..() - modules += new /obj/item/device/flashlight(src) modules += new /obj/item/weapon/soap/nanotrasen(src) modules += new /obj/item/weapon/storage/bag/trash/cyborg(src) modules += new /obj/item/weapon/mop/cyborg(src) @@ -205,7 +200,6 @@ /obj/item/weapon/robot_module/butler/New() ..() - modules += new /obj/item/device/flashlight(src) modules += new /obj/item/weapon/reagent_containers/food/drinks/drinkingglass(src) modules += new /obj/item/weapon/reagent_containers/food/condiment/enzyme(src) modules += new /obj/item/weapon/pen(src) @@ -239,7 +233,6 @@ modules += new /obj/item/weapon/storage/bag/ore/cyborg(src) modules += new /obj/item/weapon/pickaxe/drill/cyborg(src) modules += new /obj/item/weapon/shovel(src) - modules += new /obj/item/device/flashlight/lantern(src) modules += new /obj/item/weapon/storage/bag/sheetsnatcher/borg(src) modules += new /obj/item/device/t_scanner/adv_mining_scanner(src) modules += new /obj/item/weapon/gun/energy/kinetic_accelerator(src) @@ -251,7 +244,6 @@ /obj/item/weapon/robot_module/syndicate/New() ..() - modules += new /obj/item/device/flashlight(src) modules += new /obj/item/weapon/melee/energy/sword/cyborg(src) modules += new /obj/item/weapon/gun/energy/printer(src) modules += new /obj/item/weapon/gun/projectile/revolver/grenadelauncher/cyborg(src) diff --git a/html/changelogs/Gun_Hog_Borg_Lamps.yml b/html/changelogs/Gun_Hog_Borg_Lamps.yml new file mode 100644 index 00000000000..37c4bccb9de --- /dev/null +++ b/html/changelogs/Gun_Hog_Borg_Lamps.yml @@ -0,0 +1,36 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# spellcheck (typo fixes) +# experiment +# tgs (TG-ported fixes?) +################################# + +# Your name. +author: Gun Hog + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. +# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Nanotrasen advancements in cyborg technology now allow for integrated headlamps! As such, the flashlight package normally used as a module is now seamlessly merged with their systems!" diff --git a/icons/mob/screen_cyborg.dmi b/icons/mob/screen_cyborg.dmi index 002768f9d2a37cff13be284e644135c7811d1085..1371a38420f7b66c41dacc9f7dde5c8184fc20e8 100644 GIT binary patch literal 17952 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 IOPU7!A7Hl*Jpcdz literal 17522 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 bF1{BX&GJg?D9=hQ9v?3e7hw From a3f5be0b217810035aa87dd40848c5d392862e6f Mon Sep 17 00:00:00 2001 From: Steelpoint Date: Fri, 3 Jul 2015 21:08:21 +0800 Subject: [PATCH 07/89] HoSArmour --- code/modules/clothing/head/jobs.dm | 2 +- code/modules/clothing/suits/armor.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index 7d2d81b6fa9..c832a7d83e5 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -68,7 +68,7 @@ name = "head of security cap" desc = "The robust standard-issue cap of the Head of Security. For showing the officers who's in charge." icon_state = "hoscap" - armor = list(melee = 40, bullet = 30, laser = 25, energy = 10, bomb = 25, bio = 10, rad = 0) + armor = list(melee = 65, bullet = 50, laser = 50, energy = 10, bomb = 25, bio = 10, rad = 0) strip_delay = 80 /obj/item/clothing/head/HoS/beret diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index d3b65c48e3a..05932bed45d 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -23,7 +23,7 @@ icon_state = "hos" item_state = "greatcoat" body_parts_covered = CHEST|GROIN|ARMS|LEGS - armor = list(melee = 30, bullet = 30, laser = 30, energy = 10, bomb = 25, bio = 0, rad = 0) + armor = list(melee = 55, bullet = 50, laser = 50, energy = 10, bomb = 25, bio = 10, rad = 0) flags_inv = HIDEJUMPSUIT cold_protection = CHEST|GROIN|LEGS|ARMS heat_protection = CHEST|GROIN|LEGS|ARMS From 2f058bbf3784d71c8a09ebe385ebad3c51722af6 Mon Sep 17 00:00:00 2001 From: Steelpoint Date: Sat, 4 Jul 2015 00:26:08 +0800 Subject: [PATCH 08/89] ArmourPiercingRevolver --- code/modules/projectiles/ammunition/ammo_casings.dm | 2 +- code/modules/projectiles/projectile/bullets.dm | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/code/modules/projectiles/ammunition/ammo_casings.dm b/code/modules/projectiles/ammunition/ammo_casings.dm index b5e553dfed3..c506c0b67fe 100644 --- a/code/modules/projectiles/ammunition/ammo_casings.dm +++ b/code/modules/projectiles/ammunition/ammo_casings.dm @@ -1,7 +1,7 @@ /obj/item/ammo_casing/a357 desc = "A .357 bullet casing." caliber = "357" - projectile_type = /obj/item/projectile/bullet + projectile_type = /obj/item/projectile/bullet/revolver /obj/item/ammo_casing/a50 desc = "A .50AE bullet casing." diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 647210069ac..d377f56bca0 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -6,6 +6,10 @@ nodamage = 0 flag = "bullet" +/obj/item/projectile/bullet/revolver + damage = 60 + armour_penetration = 10 + /obj/item/projectile/bullet/weakbullet //beanbag, heavy stamina damage damage = 5 From bb88dda82be1cba4b173bcf198a76864c184237d Mon Sep 17 00:00:00 2001 From: Steelpoint Date: Sat, 4 Jul 2015 01:38:30 +0800 Subject: [PATCH 09/89] ERT/DS --- code/modules/clothing/shoes/miscellaneous.dm | 2 +- code/modules/clothing/spacesuits/miscellaneous.dm | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 58101dca40a..37d3b578fbb 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -36,7 +36,7 @@ desc = "High speed, no drag combat boots." permeability_coefficient = 0.01 flags = NOSLIP - armor = list(melee = 40, bullet = 30, laser = 25, energy = 25, bomb = 50, bio = 30, rad = 30) + armor = list(melee = 80, bullet = 80, laser = 50, energy = 50, bomb = 100, bio = 100, rad = 100) /obj/item/clothing/shoes/sandal desc = "A pair of rather plain, wooden sandals." diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm index 2f7f85299e6..4ac4a2cd0ef 100644 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ b/code/modules/clothing/spacesuits/miscellaneous.dm @@ -25,7 +25,7 @@ desc = "That's not red paint. That's real blood." icon_state = "deathsquad" item_state = "deathsquad" - armor = list(melee = 50, bullet = 40, laser = 30, energy = 50, bomb = 50, bio = 100, rad = 100) + armor = list(melee = 80, bullet = 80, laser = 50, energy = 50, bomb = 100, bio = 100, rad = 100) strip_delay = 130 max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT unacidable = 1 @@ -40,7 +40,7 @@ icon_state = "deathsquad" item_state = "swat_suit" allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank/internals) - armor = list(melee = 50, bullet = 40, laser = 30,energy = 50, bomb = 50, bio = 100, rad = 100) + armor = list(melee = 80, bullet = 80, laser = 50, energy = 50, bomb = 100, bio = 100, rad = 100) slowdown = 1 strip_delay = 130 max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT @@ -53,7 +53,7 @@ icon_state = "beret_badge" flags = STOPSPRESSUREDMAGE flags_inv = 0 - armor = list(melee = 50, bullet = 40, laser = 30, energy = 50, bomb = 50, bio = 100, rad = 100) + armor = list(melee = 80, bullet = 80, laser = 50, energy = 50, bomb = 100, bio = 100, rad = 100) strip_delay = 130 max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT unacidable = 1 @@ -68,7 +68,7 @@ flags_inv = 0 w_class = 3 allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank/internals) - armor = list(melee = 50, bullet = 40, laser = 30,energy = 50, bomb = 50, bio = 100, rad = 100) + armor = list(melee = 80, bullet = 80, laser = 50, energy = 50, bomb = 100, bio = 100, rad = 100) slowdown = 1 strip_delay = 130 max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT @@ -154,7 +154,7 @@ item_state = "ert_command" helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs,/obj/item/weapon/tank/internals) - armor = list(melee = 30, bullet = 50, laser = 30, energy = 50, bomb = 50, bio = 100, rad = 100) + armor = list(melee = 65, bullet = 50, laser = 50, energy = 50, bomb = 50, bio = 100, rad = 100) slowdown = 0 strip_delay = 130 From 2780f62ec9fdd78decee10bf2cb6f66102805777 Mon Sep 17 00:00:00 2001 From: Steelpoint Date: Sun, 5 Jul 2015 01:23:19 +0800 Subject: [PATCH 10/89] CollapsingIntensifies --- code/modules/clothing/masks/gasmask.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index 35fe69e2060..6190d1f971a 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -50,6 +50,7 @@ ignore_maskadjust = 0 flags = BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS flags_inv = HIDEFACE + w_class = 2.0 visor_flags = BLOCK_GAS_SMOKE_EFFECT | MASKINTERNALS visor_flags_inv = HIDEFACE flags_cover = MASKCOVERSMOUTH From 1e727e34eb4d3ecc1054a719defebe5a5a37076c Mon Sep 17 00:00:00 2001 From: Steelpoint Date: Sun, 5 Jul 2015 19:05:09 +0800 Subject: [PATCH 11/89] BulTo40 --- code/modules/clothing/head/jobs.dm | 2 +- code/modules/clothing/suits/armor.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index c832a7d83e5..0ed20624539 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -68,7 +68,7 @@ name = "head of security cap" desc = "The robust standard-issue cap of the Head of Security. For showing the officers who's in charge." icon_state = "hoscap" - armor = list(melee = 65, bullet = 50, laser = 50, energy = 10, bomb = 25, bio = 10, rad = 0) + armor = list(melee = 65, bullet = 40, laser = 50, energy = 10, bomb = 25, bio = 10, rad = 0) strip_delay = 80 /obj/item/clothing/head/HoS/beret diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 05932bed45d..913cc36ab03 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -23,7 +23,7 @@ icon_state = "hos" item_state = "greatcoat" body_parts_covered = CHEST|GROIN|ARMS|LEGS - armor = list(melee = 55, bullet = 50, laser = 50, energy = 10, bomb = 25, bio = 10, rad = 0) + armor = list(melee = 55, bullet = 40, laser = 50, energy = 10, bomb = 25, bio = 10, rad = 0) flags_inv = HIDEJUMPSUIT cold_protection = CHEST|GROIN|LEGS|ARMS heat_protection = CHEST|GROIN|LEGS|ARMS From ea1780ce970a69c786a43d2de33d0472985ce29f Mon Sep 17 00:00:00 2001 From: phil235 Date: Tue, 7 Jul 2015 19:40:32 +0200 Subject: [PATCH 12/89] - Mech equipment was using its unique processing method, with specific timing for each equipment, but now it uses obj processing, I changed the values so the equipment effect stays the same. Remove global_iterator datum. - fiddled with equip_ready procs of mech tools. - removed mecha/proc/do_after and /enter_after() procs. - Renamed mech sleeper occupant var to "patient" to avoid confusion with the occupant of the mech. - all non instant tool (drill) now show a progbar when drilling etc.. - action cooldown now use do_after_cooldown() (that itself uses do_after) and start_cooldown (for instantaneous actions). - Removed mecha_equipment's destroy proc, it's now all in Destroy(). No confusion. - modified mecha_equipment/proc/can_attach() to not check istype(mecha) b/c it can't not be. (so the child only have one istype check. - Removed diamonddrill/can_attach() , all done at drill level. - armor booster now only for combat mech, instead of all except honkmech. - Removed dynhitby, dynbulletdamage, dynattackby, dynusepower(), dyngetcharge(), dynabsorbdamage() - I split the tools.dm file into smaller ones: work tools, mining tools, other tools. - I split mecha.dm into mecha.dm, mecha_topic.dm and mecha_defense.dm - refactored mech weapon ballistic/launcher, new proj_init proc, more OOP. - Moving consumes energy! Lights consumes energy. Fixes #9425. - Fixed #7354 xeno not bursting if host is inside a mech. - Added action buttons to mech. Moved toggle lights, internal tank, eject, view stats from verbs to action buttons, these can now only be done via these buttons (removed them from the big stats window). - Removed port connect verbs b/C it's automated now. - regular hud is no longer hidden when inside a mech (doesn't matter b/c you can't interact with most stuff in it while in a mecha). Fixes issue 10387 - can't walk when shooting projectiles. Makes walking on your projectile a bit harder. Helps against issue 10315 (but doesn't fix it). - also made into action buttons: the special abilities of certain combat mechs. - Added thrown alerts for mech charge and integrity. - Fixes teleporting occupant out not properly removing it from the mech. Fixes issue 10330 - fixes ballistic mech weapons spinning when launched. proc/throw_at() now has a spin argument instead of using var/allow_spin that was added to all atoms just for that. - added a update_action_buttons() to ai/life() to handle ai mech. --- code/_onclick/hud/alert.dm | 7 + code/_onclick/hud/hud.dm | 2 - code/datums/helper_datums/global_iterator.dm | 160 -- code/game/atoms.dm | 5 - code/game/atoms_movable.dm | 4 +- .../gamemodes/malfunction/Malf_Modules.dm | 2 +- code/game/mecha/combat/durand.dm | 64 +- code/game/mecha/combat/gygax.dm | 10 +- code/game/mecha/combat/marauder.dm | 136 +- code/game/mecha/combat/phazon.dm | 96 +- code/game/mecha/combat/reticence.dm | 2 +- code/game/mecha/equipment/mecha_equipment.dm | 53 +- .../mecha/equipment/tools/medical_tools.dm | 265 ++-- .../mecha/equipment/tools/mining_tools.dm | 127 ++ .../game/mecha/equipment/tools/other_tools.dm | 518 ++++++ code/game/mecha/equipment/tools/tools.dm | 1245 --------------- code/game/mecha/equipment/tools/work_tools.dm | 424 +++++ code/game/mecha/equipment/weapons/weapons.dm | 134 +- code/game/mecha/mecha.dm | 1413 ++++------------- code/game/mecha/mecha_defense.dm | 345 ++++ code/game/mecha/mecha_parts.dm | 27 - code/game/mecha/mecha_topic.dm | 321 ++++ code/game/mecha/working/ripley.dm | 63 +- code/game/objects/items.dm | 2 +- code/game/objects/items/devices/PDA/PDA.dm | 2 +- code/modules/admin/verbs/debug.dm | 2 +- code/modules/mining/mine_turfs.dm | 2 +- .../carbon/alien/special/alien_embryo.dm | 5 +- code/modules/mob/living/silicon/ai/life.dm | 4 +- code/modules/power/singularity/singularity.dm | 2 +- .../modules/research/designs/mecha_designs.dm | 10 +- .../designs/mechfabricator_designs.dm | 18 +- data/mode.txt | 2 +- html/changelogs/phil235-MechRefactoring.yml | 4 + icons/mob/actions.dmi | Bin 21822 -> 29912 bytes icons/mob/screen_alert.dmi | Bin 23130 -> 23899 bytes tgstation.dme | 7 +- 37 files changed, 2465 insertions(+), 3018 deletions(-) delete mode 100644 code/datums/helper_datums/global_iterator.dm create mode 100644 code/game/mecha/equipment/tools/mining_tools.dm create mode 100644 code/game/mecha/equipment/tools/other_tools.dm delete mode 100644 code/game/mecha/equipment/tools/tools.dm create mode 100644 code/game/mecha/equipment/tools/work_tools.dm create mode 100644 code/game/mecha/mecha_defense.dm create mode 100644 code/game/mecha/mecha_topic.dm create mode 100644 html/changelogs/phil235-MechRefactoring.yml diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index e9b60141730..c8f7df027e5 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -228,6 +228,13 @@ office by your AI master or any qualified human may resolve this matter. Robotic so as to remain in compliance with the most up-to-date laws." timeout = 300 +//MECHS + +/obj/screen/alert/low_mech_integrity + name = "Mech Damaged" + desc = "Mech integrity is low." + + //OBJECT-BASED /obj/screen/alert/buckled diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index cb0ddfbf5ee..3d24b6c1c5b 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -198,8 +198,6 @@ var/datum/global_hud/global_hud = new() else if(isdrone(mymob)) drone_hud(ui_style) - if(istype(mymob.loc,/obj/mecha) && ishuman(mymob)) - show_hud(HUD_STYLE_REDUCED) //Version denotes which style should be displayed. blank or 0 means "next version" /datum/hud/proc/show_hud(var/version = 0) diff --git a/code/datums/helper_datums/global_iterator.dm b/code/datums/helper_datums/global_iterator.dm deleted file mode 100644 index 828f6cfe559..00000000000 --- a/code/datums/helper_datums/global_iterator.dm +++ /dev/null @@ -1,160 +0,0 @@ -/* -README: - -The global_iterator datum is supposed to provide a simple and robust way to -create some constantly "looping" processes with ability to stop and restart them at will. -Generally, the only thing you want to play with (meaning, redefine) is the process() proc. -It must contain all the things you want done. - -Control functions: - new - used to create datum. First argument (optional) - var list(to use in process() proc) as list, - second (optional) - autostart control. - If autostart == TRUE, the loop will be started immediately after datum creation. - - start(list/arguments) - starts the loop. Takes arguments(optional) as a list, which is then used - by process() proc. Returns null if datum already active, 1 if loop started successfully and 0 if there's - an error in supplied arguments (not list or empty list). - - stop() - stops the loop. Returns null if datum is already inactive and 1 on success. - - set_delay(new_delay) - sets the delay between iterations. Pretty selfexplanatory. - Returns 0 on error(new_delay is not numerical), 1 otherwise. - - set_process_args(list/arguments) - passes the supplied arguments to the process() proc. - - active() - Returns 1 if datum is active, 0 otherwise. - - toggle() - toggles datum state. Returns new datum state (see active()). - -Misc functions: - - get_last_exec_time() - Returns the time of last iteration. - - get_last_exec_time_as_text() - Returns the time of last iteration as text - - -Control vars: - - delay - delay between iterations - - check_for_null - if equals TRUE, on each iteration the supplied arguments will be checked for nulls. - If some varible equals null (and null only), the loop is stopped. - Usefull, if some var unexpectedly becomes null - due to object deletion, for example. - Of course, you can also check the variables inside process() proc to prevent runtime errors. - -Data storage vars: - - result - stores the value returned by process() proc -*/ - -/datum/global_iterator - var/control_switch = 0 - var/delay = 10 - var/list/arg_list = new - var/last_exec = null - var/check_for_null = 1 - var/forbid_garbage = 0 - var/result - var/state = 0 - -/datum/global_iterator/New(list/arguments=null,autostart=1) - delay = delay>0?(delay):1 - if(forbid_garbage) //prevents garbage collection with tag != null - tag = "\ref[src]" - set_process_args(arguments) - if(autostart) - start() - return - -/datum/global_iterator/Destroy() - tag = null - arg_list.Cut() - stop() - //Do not call ..() - -/datum/global_iterator/proc/main() - state = 1 - while(src && control_switch) - last_exec = world.timeofday - if(check_for_null && has_null_args()) - stop() - return 0 - result = process(arglist(arg_list)) - for(var/sleep_time=delay;sleep_time>0;sleep_time--) //uhh, this is ugly. But I see no other way to terminate sleeping proc. Such disgrace. - if(!control_switch) - return 0 - sleep(1) - return 0 - -/datum/global_iterator/proc/start(list/arguments=null) - if(active()) - return - if(arguments) - if(!set_process_args(arguments)) - return 0 - if(!state_check()) //the main loop is sleeping, wait for it to terminate. - return - control_switch = 1 - spawn() - state = main() - return 1 - -/datum/global_iterator/proc/stop() - if(!active()) - return - control_switch = 0 - spawn(-1) //report termination error but don't wait for state_check(). - state_check() - return 1 - -/datum/global_iterator/proc/state_check() - var/lag = 0 - while(state) - sleep(1) - if(++lag>10) - CRASH("The global_iterator loop \ref[src] failed to terminate in designated timeframe. This may be caused by server lagging.") - return 1 - -/datum/global_iterator/process() - return - -/datum/global_iterator/proc/active() - return control_switch - -/datum/global_iterator/proc/has_null_args() - if(null in arg_list) - return 1 - return 0 - - -/datum/global_iterator/proc/set_delay(new_delay) - if(isnum(new_delay)) - delay = max(1, round(new_delay)) - return 1 - else - return 0 - -/datum/global_iterator/proc/get_last_exec_time() - return (last_exec||0) - -/datum/global_iterator/proc/get_last_exec_time_as_text() - return (time2text(last_exec)||"Wasn't executed yet") - -/datum/global_iterator/proc/set_process_args(list/arguments) - if(arguments && istype(arguments, /list) && arguments.len) - arg_list = arguments - return 1 - else -// world << "\red Invalid arguments supplied for [src.type], ref = \ref[src]" - return 0 - -/datum/global_iterator/proc/toggle_null_checks() - check_for_null = !check_for_null - return check_for_null - -/datum/global_iterator/proc/toggle() - if(!stop()) - start() - return active() - - diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 52ac867c334..8b4019f2800 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -17,11 +17,6 @@ //HUD images that this atom can provide. var/list/hud_possible - //var/chem_is_open_container = 0 - // replaced by OPENCONTAINER flags and atom/proc/is_open_container() - ///Chemistry. - var/allow_spin = 1 - //Value used to increment ex_act() if reactionary_explosions is on var/explosion_block = 0 diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index f0083db4d8b..655741064cb 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -168,12 +168,12 @@ src.throw_impact(A) src.throwing = 0 -/atom/movable/proc/throw_at(atom/target, range, speed, mob/thrower) +/atom/movable/proc/throw_at(atom/target, range, speed, mob/thrower, var/spin = 1) if(!target || !src || (flags & NODROP)) return 0 //use a modified version of Bresenham's algorithm to get from the atom's current position to that of the target src.throwing = 1 - if(target.allow_spin) // turns out 1000+ spinning objects being thrown at the singularity creates lag - Iamgoofball + if(spin) // turns out 1000+ spinning objects being thrown at the singularity creates lag - Iamgoofball SpinAnimation(5, 1) var/dist_x = abs(target.x - src.x) var/dist_y = abs(target.y - src.y) diff --git a/code/game/gamemodes/malfunction/Malf_Modules.dm b/code/game/gamemodes/malfunction/Malf_Modules.dm index e89be96093c..7c17d354ae6 100644 --- a/code/game/gamemodes/malfunction/Malf_Modules.dm +++ b/code/game/gamemodes/malfunction/Malf_Modules.dm @@ -140,7 +140,7 @@ rcdmod.uses -- for(var/obj/item/weapon/rcd/rcd in world) rcd.disabled = 1 - for(var/obj/item/mecha_parts/mecha_equipment/tool/rcd/rcd in world) + for(var/obj/item/mecha_parts/mecha_equipment/rcd/rcd in world) rcd.disabled = 1 src << "Out of uses." diff --git a/code/game/mecha/combat/durand.dm b/code/game/mecha/combat/durand.dm index 3a49c11433a..fcbd128a5c3 100644 --- a/code/game/mecha/combat/durand.dm +++ b/code/game/mecha/combat/durand.dm @@ -13,15 +13,7 @@ var/defence = 0 var/defence_deflect = 35 wreckage = /obj/structure/mecha_wreckage/durand - -/* -/obj/mecha/combat/durand/New() - ..() - weapons += new /datum/mecha_weapon/ballistic/lmg(src) - weapons += new /datum/mecha_weapon/ballistic/scattershot(src) - selected_weapon = weapons[1] - return -*/ + var/datum/action/mecha/mech_defence_mode/defense_action = new /obj/mecha/combat/durand/relaymove(mob/user,direction) if(defence) @@ -32,43 +24,33 @@ . = ..() return +/obj/mecha/combat/durand/GrantActions(var/mob/living/user, var/human_occupant = 0) + ..() + defense_action.chassis = src + defense_action.Grant(user) -/obj/mecha/combat/durand/verb/defence_mode() - set category = "Exosuit Interface" - set name = "Toggle defence mode" - set src = usr.loc - set popup_menu = 0 - if(!can_use(usr)) - return - defence = !defence - if(defence) - deflect_chance = defence_deflect - src.occupant_message("You enable [src] defence mode.") - else - deflect_chance = initial(deflect_chance) - src.occupant_message("You disable [src] defence mode.") - src.log_message("Toggled defence mode.") - return - +/obj/mecha/combat/durand/RemoveActions(var/mob/living/user, var/human_occupant = 0) + ..() + defense_action.Remove(user) /obj/mecha/combat/durand/get_stats_part() var/output = ..() output += "Defence mode: [defence?"on":"off"]" return output -/obj/mecha/combat/durand/get_commands() - var/output = {" - "} - output += ..() - return output +/datum/action/mecha/mech_defence_mode + name = "Toggle Defense Mode" + button_icon_state = "mech_toggle_defense_mode" -/obj/mecha/combat/durand/Topic(href, href_list) - ..() - if (href_list["toggle_defence_mode"]) - src.defence_mode() - return \ No newline at end of file +/datum/action/mecha/mech_defence_mode/Activate() + if(!owner || !chassis || chassis.occupant != owner) + return + var/obj/mecha/combat/durand/D = chassis + D.defence = !D.defence + if(D.defence) + D.deflect_chance = D.defence_deflect + D.occupant_message("You enable [D] defence mode.") + else + D.deflect_chance = initial(D.deflect_chance) + D.occupant_message("You disable [D] defence mode.") + D.log_message("Toggled defence mode.") \ No newline at end of file diff --git a/code/game/mecha/combat/gygax.dm b/code/game/mecha/combat/gygax.dm index 722b576f134..1a9ec2627cd 100644 --- a/code/game/mecha/combat/gygax.dm +++ b/code/game/mecha/combat/gygax.dm @@ -33,7 +33,7 @@ ..() var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang + ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang ME.attach(src) ME = new /obj/item/mecha_parts/mecha_equipment/teleporter ME.attach(src) @@ -71,16 +71,16 @@ src.log_message("Toggled leg actuators overload.") return -/obj/mecha/combat/gygax/dyndomove(direction) - if(!..()) return +/obj/mecha/combat/gygax/domove(direction) + if(!..()) + return if(overload) health-- if(health < initial(health) - initial(health)/3) overload = 0 step_in = initial(step_in) step_energy_drain = initial(step_energy_drain) - src.occupant_message("Leg actuators damage threshold exceded. Disabling overload.") - return + occupant_message("Leg actuators damage threshold exceded. Disabling overload.") /obj/mecha/combat/gygax/get_stats_part() diff --git a/code/game/mecha/combat/marauder.dm b/code/game/mecha/combat/marauder.dm index 89580944e01..2d39f58e103 100644 --- a/code/game/mecha/combat/marauder.dm +++ b/code/game/mecha/combat/marauder.dm @@ -20,6 +20,9 @@ internal_damage_threshold = 25 force = 45 max_equip = 4 + var/datum/action/mecha/mech_smoke/smoke_action = new + var/datum/action/mecha/mech_toggle_thrusters/thrusters_action = new + var/datum/action/mecha/mech_zoom/zoom_action = new /obj/mecha/combat/marauder/Destroy() qdel(smoke_system) @@ -51,7 +54,7 @@ ME.attach(src) ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot(src) ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack(src) + ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/missile_rack(src) ME.attach(src) ME = new /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay(src) ME.attach(src) @@ -65,7 +68,7 @@ ..() var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/energy/pulse(src) ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack(src) + ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/missile_rack(src) ME.attach(src) ME = new /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay(src) ME.attach(src) @@ -84,7 +87,7 @@ qdel(ME) ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot(src) ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack(src) + ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/missile_rack(src) ME.attach(src) ME = new /obj/item/mecha_parts/mecha_equipment/teleporter(src) ME.attach(src) @@ -110,54 +113,23 @@ return 1 return 0 -/obj/mecha/combat/marauder/verb/toggle_thrusters() - set category = "Exosuit Interface" - set name = "Toggle thrusters" - set src = usr.loc - set popup_menu = 0 - if(usr!=src.occupant) - return - if(src.occupant) - if(get_charge() > 0) - thrusters = !thrusters - src.log_message("Toggled thrusters.") - src.occupant_message("Thrusters [thrusters?"en":"dis"]abled.") - return +/obj/mecha/combat/marauder/GrantActions(var/mob/living/user, var/human_occupant = 0) + ..() + smoke_action.chassis = src + smoke_action.Grant(user) -/obj/mecha/combat/marauder/verb/smoke() - set category = "Exosuit Interface" - set name = "Smoke" - set src = usr.loc - set popup_menu = 0 - if(usr!=src.occupant) - return - if(smoke_ready && smoke>0) - src.smoke_system.start() - smoke-- - smoke_ready = 0 - spawn(smoke_cooldown) - smoke_ready = 1 - return + thrusters_action.chassis = src + thrusters_action.Grant(user) -/obj/mecha/combat/marauder/verb/zoom() - set category = "Exosuit Interface" - set name = "Zoom" - set src = usr.loc - set popup_menu = 0 - if(usr!=src.occupant) - return - if(src.occupant.client) - src.zoom = !src.zoom - src.log_message("Toggled zoom mode.") - src.occupant_message("Zoom mode [zoom?"en":"dis"]abled.") - if(zoom) - src.occupant.client.view = 12 - src.occupant << sound('sound/mecha/imag_enh.ogg',volume=50) - else - src.occupant.client.view = world.view//world.view - default mob view size - return + zoom_action.chassis = src + zoom_action.Grant(user) +/obj/mecha/combat/marauder/RemoveActions(var/mob/living/user, var/human_occupant = 0) + ..() + smoke_action.Remove(user) + thrusters_action.Remove(user) + zoom_action.Remove(user) /obj/mecha/combat/marauder/go_out() if(src.occupant && src.occupant.client) @@ -176,25 +148,53 @@ return output -/obj/mecha/combat/marauder/get_commands() - var/output = {"
-
Special
- -
- "} - output += ..() - return output +/datum/action/mecha/mech_smoke + name = "Smoke" + button_icon_state = "smoke" -/obj/mecha/combat/marauder/Topic(href, href_list) - ..() - if (href_list["toggle_thrusters"]) - src.toggle_thrusters() - if (href_list["smoke"]) - src.smoke() - if (href_list["toggle_zoom"]) - src.zoom() - return \ No newline at end of file +/datum/action/mecha/mech_smoke/Activate() + if(!owner || !chassis || chassis.occupant != owner) + return + var/obj/mecha/combat/marauder/M = chassis + if(M.smoke_ready && M.smoke>0) + M.smoke_system.start() + M.smoke-- + M.smoke_ready = 0 + spawn(M.smoke_cooldown) + M.smoke_ready = 1 + + +/datum/action/mecha/mech_toggle_thrusters + name = "Toggle Thrusters" + button_icon_state = "mech_toggle_thrusters" + +/datum/action/mecha/mech_toggle_thrusters/Activate() + if(!owner || !chassis || chassis.occupant != owner) + return + var/obj/mecha/combat/marauder/M = chassis + if(M.get_charge() > 0) + M.thrusters = !M.thrusters + if(M.thrusters) + button_icon_state = "mech_toggle_thrusters_on" + else + button_icon_state = "mech_toggle_thrusters" + M.log_message("Toggled thrusters.") + M.occupant_message("Thrusters [M.thrusters?"en":"dis"]abled.") + +/datum/action/mecha/mech_zoom + name = "Zoom" + button_icon_state = "mech_zoom" + +/datum/action/mecha/mech_zoom/Activate() + if(!owner || !chassis || chassis.occupant != owner) + return + var/obj/mecha/combat/marauder/M = chassis + if(owner.client) + M.zoom = !M.zoom + M.log_message("Toggled zoom mode.") + M.occupant_message("Zoom mode [M.zoom?"en":"dis"]abled.") + if(M.zoom) + owner.client.view = 12 + owner << sound('sound/mecha/imag_enh.ogg',volume=50) + else + owner.client.view = world.view//world.view - default mob view size diff --git a/code/game/mecha/combat/phazon.dm b/code/game/mecha/combat/phazon.dm index 4260976a41a..758dd4ccd62 100644 --- a/code/game/mecha/combat/phazon.dm +++ b/code/game/mecha/combat/phazon.dm @@ -17,6 +17,8 @@ var/phasing = 0 var/phasing_energy_drain = 200 max_equip = 3 + var/datum/action/mecha/mech_switch_damtype/switch_damtype_action = new + var/datum/action/mecha/mech_toggle_phasing/phasing_action = new /obj/mecha/combat/phazon/Bump(var/atom/obstacle) if(phasing && get_charge()>=phasing_energy_drain) @@ -24,8 +26,8 @@ if(can_move) can_move = 0 flick("phazon-phase", src) - src.loc = get_step(src,src.dir) - src.use_power(phasing_energy_drain) + loc = get_step(src, dir) + use_power(phasing_energy_drain) sleep(step_in*3) can_move = 1 else @@ -34,50 +36,56 @@ /obj/mecha/combat/phazon/click_action(atom/target,mob/user) if(phasing) - src.occupant_message("Unable to interact with objects while phasing") + occupant_message("Unable to interact with objects while phasing") return else return ..() -/obj/mecha/combat/phazon/verb/switch_damtype() - set category = "Exosuit Interface" - set name = "Reconfigure arm microtool arrays" - set src = usr.loc - set popup_menu = 0 - if(usr!=src.occupant) - return - var/new_damtype = alert(src.occupant,"Arm tool selection",null,"Fists","Torch","Toxic injector") - switch(new_damtype) - if("Fists") - damtype = "brute" - src.occupant_message("Your exosuit's hands form into fists.") - if("Torch") - damtype = "fire" - src.occupant_message("A torch tip extends from your exosuit's hand, glowing red.") - if("Toxic injector") - damtype = "tox" - src.occupant_message("A bone-chillingly thick plasteel needle protracts from the exosuit's palm.") - playsound(src, 'sound/mecha/mechmove01.ogg', 50, 1) - return - -/obj/mecha/combat/phazon/get_commands() - var/output = {" - "} - output += ..() - return output - -/obj/mecha/combat/phazon/Topic(href, href_list) +/obj/mecha/combat/phazon/GrantActions(var/mob/living/user, var/human_occupant = 0) ..() - if (href_list["switch_damtype"]) - src.switch_damtype() - if (href_list["phasing"]) - phasing = !phasing - send_byjax(src.occupant,"exosuit.browser","phasing_command","[phasing?"Dis":"En"]able phasing") - src.occupant_message("En":"#f00\">Dis"]abled phasing.") - return \ No newline at end of file + switch_damtype_action.chassis = src + switch_damtype_action.Grant(user) + + phasing_action.chassis = src + phasing_action.Grant(user) + + +/obj/mecha/combat/phazon/RemoveActions(var/mob/living/user, var/human_occupant = 0) + ..() + switch_damtype_action.Remove(user) + phasing_action.Remove(user) + + +/datum/action/mecha/mech_switch_damtype + name = "Reconfigure arm microtool arrays" + button_icon_state = "mech_switch_damtype" + +/datum/action/mecha/mech_switch_damtype/Activate() + if(!owner || !chassis || chassis.occupant != owner) + return + var/obj/mecha/combat/phazon/P = chassis + var/new_damtype + switch(P.damtype) + if("tox") + new_damtype = "brute" + P.occupant_message("Your exosuit's hands form into fists.") + if("brute") + new_damtype = "fire" + P.occupant_message("A torch tip extends from your exosuit's hand, glowing red.") + if("fire") + new_damtype = "tox" + P.occupant_message("A bone-chillingly thick plasteel needle protracts from the exosuit's palm.") + P.damtype = new_damtype. + playsound(src, 'sound/mecha/mechmove01.ogg', 50, 1) + + +/datum/action/mecha/mech_toggle_phasing + name = "Enable Phasing" + button_icon_state = "mech_toggle_phasing" + +/datum/action/mecha/mech_toggle_phasing/Activate() + if(!owner || !chassis || chassis.occupant != owner) + return + var/obj/mecha/combat/phazon/P = chassis + P.phasing = !P.phasing + P.occupant_message("En":"#f00\">Dis"]abled phasing.") \ No newline at end of file diff --git a/code/game/mecha/combat/reticence.dm b/code/game/mecha/combat/reticence.dm index 6b2fa70ee3a..612add46853 100644 --- a/code/game/mecha/combat/reticence.dm +++ b/code/game/mecha/combat/reticence.dm @@ -22,6 +22,6 @@ ..() var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/silenced ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/tool/rcd //HAHA IT MAKES WALLS GET IT + ME = new /obj/item/mecha_parts/mecha_equipment/rcd //HAHA IT MAKES WALLS GET IT ME.attach(src) return \ No newline at end of file diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm index af4b08e73c2..d89765b5ddc 100644 --- a/code/game/mecha/equipment/mecha_equipment.dm +++ b/code/game/mecha/equipment/mecha_equipment.dm @@ -8,23 +8,14 @@ icon_state = "mecha_equip" force = 5 origin_tech = "materials=2" - var/equip_cooldown = 0 - var/equip_ready = 1 + var/equip_cooldown = 0 // cooldown after use + var/equip_ready = 1 //whether the equipment is ready for use. (or deactivated/activated for static stuff) var/energy_drain = 0 var/obj/mecha/chassis = null var/range = MELEE //bitflags reliability = 1000 var/salvageable = 1 - -/obj/item/mecha_parts/mecha_equipment/proc/do_after_cooldown(target=1) - sleep(equip_cooldown) - set_ready_state(1) - if(target && chassis && chassis.occupant) - return 1 - return 0 - - /obj/item/mecha_parts/mecha_equipment/New() ..() return @@ -42,10 +33,9 @@ return 1 return -/obj/item/mecha_parts/mecha_equipment/proc/destroy()//missiles detonating, teleporter creating singularity? +/obj/item/mecha_parts/mecha_equipment/Destroy() if(chassis) chassis.equipment -= src - listclearnulls(chassis.equipment) if(chassis.selected == src) chassis.selected = null src.update_chassis_page() @@ -55,13 +45,12 @@ chassis.occupant << sound('sound/mecha/weapdestr.ogg',volume=50) else chassis.occupant << sound('sound/mecha/critdestr.ogg',volume=50) - qdel(src) - return + chassis = null + ..() /obj/item/mecha_parts/mecha_equipment/proc/critfail() if(chassis) log_message("Critical failure",1) - return /obj/item/mecha_parts/mecha_equipment/proc/get_equip_info() if(!chassis) return @@ -90,13 +79,29 @@ /obj/item/mecha_parts/mecha_equipment/proc/action(atom/target) return -/obj/item/mecha_parts/mecha_equipment/proc/can_attach(obj/mecha/M as obj) - if(istype(M)) - if(M.equipment.len[target] will not fit into the sleeper because they are buckled to [target.buckled]!") return - if(occupant) + if(patient) occupant_message("The sleeper is already occupied!") return for(var/mob/living/simple_animal/slime/M in range(1,target)) @@ -53,81 +54,65 @@ return occupant_message("You start putting [target] into [src]...") chassis.visible_message("[chassis] starts putting [target] into \the [src].") - var/C = chassis.loc - var/T = target.loc if(do_after_cooldown(target)) - if(chassis.loc!=C || target.loc!=T) - return - if(occupant) + if(patient) occupant_message("The sleeper is already occupied!") return target.forceMove(src) - occupant = target + patient = target target.reset_view(src) - /* - if(target.client) - target.client.perspective = EYE_PERSPECTIVE - target.client.eye = chassis - */ - set_ready_state(0) - pr_mech_sleeper.start() + SSobj.processing |= src + update_equip_info() occupant_message("[target] successfully loaded into [src]. Life support functions engaged.") chassis.visible_message("[chassis] loads [target] into [src].") log_message("[target] loaded. Life support functions engaged.") - return -/obj/item/mecha_parts/mecha_equipment/tool/sleeper/proc/go_out() - if(!occupant) +/obj/item/mecha_parts/mecha_equipment/sleeper/proc/go_out() + if(!patient) return - occupant.forceMove(get_turf(src)) - occupant_message("[occupant] ejected. Life support functions disabled.") - log_message("[occupant] ejected. Life support functions disabled.") - occupant.reset_view() - /* - if(occupant.client) - occupant.client.eye = occupant.client.mob - occupant.client.perspective = MOB_PERSPECTIVE - */ - occupant = null - pr_mech_sleeper.stop() - set_ready_state(1) - return + patient.forceMove(get_turf(src)) + occupant_message("[patient] ejected. Life support functions disabled.") + log_message("[patient] ejected. Life support functions disabled.") + patient.reset_view() + SSobj.processing.Remove(src) + update_equip_info() -/obj/item/mecha_parts/mecha_equipment/tool/sleeper/detach() - if(occupant) +/obj/item/mecha_parts/mecha_equipment/sleeper/detach() + if(patient) occupant_message("Unable to detach [src] - equipment occupied!") return - pr_mech_sleeper.stop() + SSobj.processing.Remove(src) + update_equip_info() return ..() -/obj/item/mecha_parts/mecha_equipment/tool/sleeper/get_equip_info() +/obj/item/mecha_parts/mecha_equipment/sleeper/get_equip_info() var/output = ..() if(output) var/temp = "" - if(occupant) - temp = "
\[Occupant: [occupant] ([occupant.stat > 1 ? "*DECEASED*" : "Health: [occupant.health]%"])\]
View stats|Eject" + if(patient) + temp = "
\[Occupant: [patient] ([patient.stat > 1 ? "*DECEASED*" : "Health: [patient.health]%"])\]
View stats|Eject" return "[output] [temp]" return -/obj/item/mecha_parts/mecha_equipment/tool/sleeper/Topic(href,href_list) +/obj/item/mecha_parts/mecha_equipment/sleeper/Topic(href,href_list) ..() var/datum/topic_input/filter = new /datum/topic_input(href,href_list) if(filter.get("eject")) go_out() if(filter.get("view_stats")) - chassis.occupant << browse(get_occupant_stats(),"window=msleeper") + chassis.occupant << browse(get_patient_stats(),"window=msleeper") onclose(chassis.occupant, "msleeper") return if(filter.get("inject")) inject_reagent(filter.getType("inject",/datum/reagent),filter.getObj("source")) return -/obj/item/mecha_parts/mecha_equipment/tool/sleeper/proc/get_occupant_stats() - if(!occupant) +/obj/item/mecha_parts/mecha_equipment/sleeper/proc/get_patient_stats() + if(!patient) return return {" - [occupant] statistics + [patient] statistics @@ -139,11 +124,11 @@

Health statistics

- [get_occupant_dam()] + [get_patient_dam()]

Reagents in bloodstream

- [get_occupant_reagents()] + [get_patient_reagents()]
[get_available_reagents()] @@ -151,9 +136,9 @@ "} -/obj/item/mecha_parts/mecha_equipment/tool/sleeper/proc/get_occupant_dam() +/obj/item/mecha_parts/mecha_equipment/sleeper/proc/get_patient_dam() var/t1 - switch(occupant.stat) + switch(patient.stat) if(0) t1 = "Conscious" if(1) @@ -162,26 +147,26 @@ t1 = "*dead*" else t1 = "Unknown" - return {"Health: [occupant.stat > 1 ? "[t1]" : "[occupant.health]% ([t1])"]
- Core Temperature: [src.occupant.bodytemperature-T0C]°C ([src.occupant.bodytemperature*1.8-459.67]°F)
- Brute Damage: [occupant.getBruteLoss()]%
- Respiratory Damage: [occupant.getOxyLoss()]%
- Toxin Content: [occupant.getToxLoss()]%
- Burn Severity: [occupant.getFireLoss()]%
- [occupant.getCloneLoss() ? "Subject appears to have cellular damage." : ""]
- [occupant.getBrainLoss() ? "Significant brain damage detected." : ""]
+ return {"Health: [patient.stat > 1 ? "[t1]" : "[patient.health]% ([t1])"]
+ Core Temperature: [patient.bodytemperature-T0C]°C ([patient.bodytemperature*1.8-459.67]°F)
+ Brute Damage: [patient.getBruteLoss()]%
+ Respiratory Damage: [patient.getOxyLoss()]%
+ Toxin Content: [patient.getToxLoss()]%
+ Burn Severity: [patient.getFireLoss()]%
+ [patient.getCloneLoss() ? "Subject appears to have cellular damage." : ""]
+ [patient.getBrainLoss() ? "Significant brain damage detected." : ""]
"} -/obj/item/mecha_parts/mecha_equipment/tool/sleeper/proc/get_occupant_reagents() - if(occupant.reagents) - for(var/datum/reagent/R in occupant.reagents.reagent_list) +/obj/item/mecha_parts/mecha_equipment/sleeper/proc/get_patient_reagents() + if(patient.reagents) + for(var/datum/reagent/R in patient.reagents.reagent_list) if(R.volume > 0) . += "[R]: [round(R.volume,0.01)]
" return . || "None" -/obj/item/mecha_parts/mecha_equipment/tool/sleeper/proc/get_available_reagents() +/obj/item/mecha_parts/mecha_equipment/sleeper/proc/get_available_reagents() var/output - var/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/SG = locate(/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun) in chassis + var/obj/item/mecha_parts/mecha_equipment/syringe_gun/SG = locate(/obj/item/mecha_parts/mecha_equipment/syringe_gun) in chassis if(SG && SG.reagents && islist(SG.reagents.reagent_list)) for(var/datum/reagent/R in SG.reagents.reagent_list) if(R.volume > 0) @@ -189,41 +174,41 @@ return output -/obj/item/mecha_parts/mecha_equipment/tool/sleeper/proc/inject_reagent(var/datum/reagent/R,var/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/SG) - if(!R || !occupant || !SG || !(SG in chassis.equipment)) +/obj/item/mecha_parts/mecha_equipment/sleeper/proc/inject_reagent(var/datum/reagent/R,var/obj/item/mecha_parts/mecha_equipment/syringe_gun/SG) + if(!R || !patient || !SG || !(SG in chassis.equipment)) return 0 var/to_inject = min(R.volume, inject_amount) - if(to_inject && occupant.reagents.get_reagent_amount(R.id) + to_inject <= inject_amount*2) - occupant_message("Injecting [occupant] with [to_inject] units of [R.name].") - log_message("Injecting [occupant] with [to_inject] units of [R.name].") - add_logs(chassis.occupant, occupant, "injected", object="[name] ([R] - [to_inject] units)") - SG.reagents.trans_id_to(occupant,R.id,to_inject) + if(to_inject && patient.reagents.get_reagent_amount(R.id) + to_inject <= inject_amount*2) + occupant_message("Injecting [patient] with [to_inject] units of [R.name].") + log_message("Injecting [patient] with [to_inject] units of [R.name].") + add_logs(chassis.occupant, patient, "injected", object="[name] ([R] - [to_inject] units)") + SG.reagents.trans_id_to(patient,R.id,to_inject) update_equip_info() return -/obj/item/mecha_parts/mecha_equipment/tool/sleeper/update_equip_info() +/obj/item/mecha_parts/mecha_equipment/sleeper/update_equip_info() if(..()) - send_byjax(chassis.occupant,"msleeper.browser","lossinfo",get_occupant_dam()) - send_byjax(chassis.occupant,"msleeper.browser","reagents",get_occupant_reagents()) + send_byjax(chassis.occupant,"msleeper.browser","lossinfo",get_patient_dam()) + send_byjax(chassis.occupant,"msleeper.browser","reagents",get_patient_reagents()) send_byjax(chassis.occupant,"msleeper.browser","injectwith",get_available_reagents()) return 1 return -/obj/item/mecha_parts/mecha_equipment/tool/sleeper/container_resist() +/obj/item/mecha_parts/mecha_equipment/sleeper/container_resist() go_out() -/datum/global_iterator/mech_sleeper -/datum/global_iterator/mech_sleeper/process(var/obj/item/mecha_parts/mecha_equipment/tool/sleeper/S) - if(!S.chassis) - S.set_ready_state(1) - return stop() - if(!S.chassis.has_charge(S.energy_drain)) - S.set_ready_state(1) - S.log_message("Deactivated.") - S.occupant_message("[src] deactivated - no power.") - return stop() - var/mob/living/carbon/M = S.occupant +/obj/item/mecha_parts/mecha_equipment/sleeper/process() + if(!chassis) + SSobj.processing.Remove(src) + return + if(!chassis.has_charge(energy_drain)) + set_ready_state(1) + log_message("Deactivated.") + occupant_message("[src] deactivated - no power.") + SSobj.processing.Remove(src) + return + var/mob/living/carbon/M = patient if(!M) return if(M.health > 0) @@ -234,11 +219,16 @@ M.AdjustStunned(-4) if(M.reagents.get_reagent_amount("epinephrine") < 5) M.reagents.add_reagent("epinephrine", 5) - S.chassis.use_power(S.energy_drain) - S.update_equip_info() - return + chassis.use_power(energy_drain) + update_equip_info() -/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun + + + +///////////////////////////////// Syringe Gun /////////////////////////////////////////////////////////////// + + +/obj/item/mecha_parts/mecha_equipment/syringe_gun name = "exosuit syringe gun" desc = "Equipment for medical exosuits. A chem synthesizer with syringe gun. Reagents inside are held in stasis, so no reactions will occur." icon = 'icons/obj/guns/projectile.dmi' @@ -251,42 +241,44 @@ var/synth_speed = 5 //[num] reagent units per cycle energy_drain = 10 var/mode = 0 //0 - fire syringe, 1 - analyze reagents. - var/datum/global_iterator/mech_synth/synth range = MELEE|RANGED equip_cooldown = 10 origin_tech = "materials=3;biotech=4;magnets=4;programming=3" -/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/New() +/obj/item/mecha_parts/mecha_equipment/syringe_gun/New() ..() flags |= NOREACT syringes = new known_reagents = list("epinephrine"="Epinephrine","charcoal"="Charcoal") processed_reagents = new create_reagents(max_volume) - synth = new (list(src),0) -/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/detach() - synth.stop() +/obj/item/mecha_parts/mecha_equipment/syringe_gun/detach() + SSobj.processing.Remove(src) return ..() -/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/critfail() +/obj/item/mecha_parts/mecha_equipment/syringe_gun/Destroy() + SSobj.processing.Remove(src) + ..() + +/obj/item/mecha_parts/mecha_equipment/syringe_gun/critfail() ..() flags &= ~NOREACT return -/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/can_attach(obj/mecha/medical/M) +/obj/item/mecha_parts/mecha_equipment/syringe_gun/can_attach(obj/mecha/medical/M) if(..()) if(istype(M)) return 1 return 0 -/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/get_equip_info() +/obj/item/mecha_parts/mecha_equipment/syringe_gun/get_equip_info() var/output = ..() if(output) return "[output] \[[mode? "Analyze" : "Launch"]\]
\[Syringes: [syringes.len]/[max_syringes] | Reagents: [reagents.total_volume]/[reagents.maximum_volume]\]
Reagents list" return -/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/action(atom/movable/target) +/obj/item/mecha_parts/mecha_equipment/syringe_gun/action(atom/movable/target) if(!action_checks(target)) return if(istype(target,/obj/item/weapon/reagent_containers/syringe)) @@ -303,8 +295,6 @@ if(reagents.total_volume<=0) occupant_message("No available reagents to load syringe with.") return - set_ready_state(0) - chassis.use_power(energy_drain) var/turf/trg = get_turf(target) var/obj/item/weapon/reagent_containers/syringe/mechsyringe = syringes[1] mechsyringe.forceMove(get_turf(chassis)) @@ -315,7 +305,7 @@ playsound(chassis, 'sound/items/syringeproj.ogg', 50, 1) log_message("Launched [mechsyringe] from [src], targeting [target].") var/mob/originaloccupant = chassis.occupant - spawn(-1) + spawn(0) src = null //if src is deleted, still process the syringe for(var/i=0, i<6, i++) if(!mechsyringe) @@ -350,11 +340,10 @@ mechsyringe.update_icon() break sleep(1) - do_after_cooldown() return 1 -/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/Topic(href,href_list) +/obj/item/mecha_parts/mecha_equipment/syringe_gun/Topic(href,href_list) ..() var/datum/topic_input/filter = new (href,href_list) if(filter.get("toggle_mode")) @@ -375,7 +364,7 @@ m++ if(processed_reagents.len) message += " added to production" - synth.start() + SSobj.processing |= src occupant_message(message) occupant_message("Reagent processing started.") log_message("Reagent processing started.") @@ -392,7 +381,7 @@ return return -/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/proc/get_reagents_page() +/obj/item/mecha_parts/mecha_equipment/syringe_gun/proc/get_reagents_page() var/output = {" Reagent Synthesizer @@ -420,7 +409,7 @@ "} return output -/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/proc/get_reagents_form() +/obj/item/mecha_parts/mecha_equipment/syringe_gun/proc/get_reagents_form() var/r_list = get_reagents_list() var/inputs if(r_list) @@ -435,14 +424,14 @@ "} return output -/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/proc/get_reagents_list() +/obj/item/mecha_parts/mecha_equipment/syringe_gun/proc/get_reagents_list() var/output for(var/i=1 to known_reagents.len) var/reagent_id = known_reagents[i] output += {" [known_reagents[reagent_id]]
"} return output -/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/proc/get_current_reagents() +/obj/item/mecha_parts/mecha_equipment/syringe_gun/proc/get_current_reagents() var/output for(var/datum/reagent/R in reagents.reagent_list) if(R.volume > 0) @@ -451,7 +440,7 @@ output += "Total: [round(reagents.total_volume,0.001)]/[reagents.maximum_volume] - Purge All" return output || "None" -/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/proc/load_syringe(obj/item/weapon/reagent_containers/syringe/S) +/obj/item/mecha_parts/mecha_equipment/syringe_gun/proc/load_syringe(obj/item/weapon/reagent_containers/syringe/S) if(syringes.len= 2) occupant_message("The syringe is too far away.") @@ -473,7 +462,7 @@ occupant_message("The [src] syringe chamber is full.") return 0 -/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/proc/analyze_reagents(atom/A) +/obj/item/mecha_parts/mecha_equipment/syringe_gun/proc/analyze_reagents(atom/A) if(get_dist(src,A) >= 4) occupant_message("The object is too far away.") return 0 @@ -488,42 +477,38 @@ occupant_message("Analyzis complete.") return 1 -/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/proc/add_known_reagent(r_id,r_name) - set_ready_state(0) - do_after_cooldown() +/obj/item/mecha_parts/mecha_equipment/syringe_gun/proc/add_known_reagent(r_id,r_name) if(!(r_id in known_reagents)) known_reagents += r_id known_reagents[r_id] = r_name return 1 return 0 -/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/update_equip_info() +/obj/item/mecha_parts/mecha_equipment/syringe_gun/update_equip_info() if(..()) send_byjax(chassis.occupant,"msyringegun.browser","reagents",get_current_reagents()) send_byjax(chassis.occupant,"msyringegun.browser","reagents_form",get_reagents_form()) return 1 return -/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/on_reagent_change() +/obj/item/mecha_parts/mecha_equipment/syringe_gun/on_reagent_change() ..() update_equip_info() return -/datum/global_iterator/mech_synth - delay = 100 -/datum/global_iterator/mech_synth/process(var/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/S) - if(!S.chassis) - return stop() - var/energy_drain = S.energy_drain*10 - if(!S.processed_reagents.len || S.reagents.total_volume >= S.reagents.maximum_volume || !S.chassis.has_charge(energy_drain)) - S.occupant_message("Reagent processing stopped.") - S.log_message("Reagent processing stopped.") - return stop() - if(anyprob(S.reliability)) - S.critfail() - var/amount = S.synth_speed / S.processed_reagents.len - for(var/reagent in S.processed_reagents) - S.reagents.add_reagent(reagent,amount) - S.chassis.use_power(energy_drain) - return 1 +/obj/item/mecha_parts/mecha_equipment/syringe_gun/process() + if(!chassis) + SSobj.processing.Remove(src) + return + if(!processed_reagents.len || reagents.total_volume >= reagents.maximum_volume || !chassis.has_charge(energy_drain)) + occupant_message("Reagent processing stopped.") + log_message("Reagent processing stopped.") + SSobj.processing.Remove(src) + if(anyprob(reliability)) + critfail() + var/amount = synth_speed / processed_reagents.len + for(var/reagent in processed_reagents) + reagents.add_reagent(reagent,amount) + chassis.use_power(energy_drain) + diff --git a/code/game/mecha/equipment/tools/mining_tools.dm b/code/game/mecha/equipment/tools/mining_tools.dm new file mode 100644 index 00000000000..0cc2255b75f --- /dev/null +++ b/code/game/mecha/equipment/tools/mining_tools.dm @@ -0,0 +1,127 @@ + +// Drill, Diamond drill, Mining scanner + + +/obj/item/mecha_parts/mecha_equipment/drill + name = "exosuit drill" + desc = "Equipment for engineering and combat exosuits. This is the drill that'll pierce the heavens!" + icon_state = "mecha_drill" + equip_cooldown = 30 + energy_drain = 10 + force = 15 + +/obj/item/mecha_parts/mecha_equipment/drill/action(atom/target) + if(!action_checks(target)) + return + if(istype(target, /turf) && !istype(target, /turf/simulated)) + return + if(isobj(target)) + var/obj/target_obj = target + if(target_obj.unacidable) + return + target.visible_message("[chassis] starts to drill [target].", \ + "[chassis] starts to drill [target]...", \ + "You hear drilling.") + + if(do_after_cooldown(target)) + if(istype(target, /turf/simulated/wall/r_wall)) + if(istype(src , /obj/item/mecha_parts/mecha_equipment/drill/diamonddrill)) + if(do_after_cooldown(target))//To slow down how fast mechs can drill through the station + log_message("Drilled through [target]") + target.ex_act(3) + else + occupant_message("[target] is too durable to drill through.") + else if(istype(target, /turf/simulated/mineral)) + for(var/turf/simulated/mineral/M in range(chassis,1)) + if(get_dir(chassis,M)&chassis.dir) + M.gets_drilled(chassis.occupant) + log_message("Drilled through [target]") + if(locate(/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp) in chassis.equipment) + var/obj/structure/ore_box/ore_box = locate(/obj/structure/ore_box) in chassis:cargo + if(ore_box) + for(var/obj/item/weapon/ore/ore in range(chassis,1)) + if(get_dir(chassis,ore)&chassis.dir) + ore.Move(ore_box) + else if(istype(target, /turf/simulated/floor/plating/asteroid)) + for(var/turf/simulated/floor/plating/asteroid/M in range(chassis,1)) + if(get_dir(chassis,M)&chassis.dir) + M.gets_dug() + log_message("Drilled through [target]") + if(locate(/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp) in chassis.equipment) + var/obj/structure/ore_box/ore_box = locate(/obj/structure/ore_box) in chassis:cargo + if(ore_box) + for(var/obj/item/weapon/ore/ore in range(chassis,1)) + if(get_dir(chassis,ore)&chassis.dir) + ore.Move(ore_box) + else + log_message("Drilled through [target]") + if(isliving(target)) + if(istype(src , /obj/item/mecha_parts/mecha_equipment/drill/diamonddrill)) + drill_mob(target, chassis.occupant, 120) + else + drill_mob(target, chassis.occupant) + else + target.ex_act(2) + + +/obj/item/mecha_parts/mecha_equipment/drill/can_attach(obj/mecha/M as obj) + if(..()) + if(istype(M, /obj/mecha/working) || istype(M, /obj/mecha/combat)) + return 1 + return 0 + +/obj/item/mecha_parts/mecha_equipment/drill/proc/drill_mob(mob/living/target, mob/user, var/drill_damage=80) + target.visible_message("[chassis] drills [target] with [src].", \ + "[chassis] drills [target] with [src].") + add_logs(user, target, "attacked", object="[name]", addition="(INTENT: [uppertext(user.a_intent)]) (DAMTYPE: [uppertext(damtype)])") + if(ishuman(target)) + var/mob/living/carbon/human/H = target + var/obj/item/organ/limb/affecting = H.get_organ("chest") + affecting.take_damage(drill_damage) + H.update_damage_overlays(0) + else + target.take_organ_damage(drill_damage) + if(target) + target.Paralyse(10) + target.updatehealth() + + + +/obj/item/mecha_parts/mecha_equipment/drill/diamonddrill + name = "diamond-tipped exosuit drill" + desc = "Equipment for engineering and combat exosuits. This is an upgraded version of the drill that'll pierce the heavens!" + icon_state = "mecha_diamond_drill" + origin_tech = "materials=4;engineering=3" + equip_cooldown = 20 + force = 15 + + + +/obj/item/mecha_parts/mecha_equipment/mining_scanner + name = "exosuit mining scanner" + desc = "Equipment for engineering and combat exosuits. It will automatically check surrounding rock for useful minerals." + icon_state = "mecha_analyzer" + origin_tech = "materials=3;engineering=2" + equip_cooldown = 30 + var/scanning = 0 + +/obj/item/mecha_parts/mecha_equipment/mining_scanner/New() + SSobj.processing |= src + +/obj/item/mecha_parts/mecha_equipment/mining_scanner/process() + if(!loc) + SSobj.processing.Remove(src) + qdel(src) + if(scanning) + return + if(istype(loc,/obj/mecha/working)) + var/obj/mecha/working/mecha = loc + if(!mecha.occupant) + return + var/list/occupant = list() + occupant |= mecha.occupant + scanning = 1 + mineral_scan_pulse(occupant,get_turf(loc)) + spawn(equip_cooldown) + scanning = 0 + diff --git a/code/game/mecha/equipment/tools/other_tools.dm b/code/game/mecha/equipment/tools/other_tools.dm new file mode 100644 index 00000000000..56e6aa089d2 --- /dev/null +++ b/code/game/mecha/equipment/tools/other_tools.dm @@ -0,0 +1,518 @@ + +// Teleporter, Wormhole generator, Gravitational catapult, Armor booster modules, +// Repair droid, Tesla Energy relay, Generators + +////////////////////////////////////////////// TELEPORTER /////////////////////////////////////////////// + +/obj/item/mecha_parts/mecha_equipment/teleporter + name = "mounted teleporter" + desc = "An exosuit module that allows exosuits to teleport to any position in view." + icon_state = "mecha_teleport" + origin_tech = "bluespace=10" + equip_cooldown = 150 + energy_drain = 1000 + range = RANGED + +/obj/item/mecha_parts/mecha_equipment/teleporter/action(atom/target) + if(!action_checks(target) || src.loc.z == ZLEVEL_CENTCOM) return + var/turf/T = get_turf(target) + if(T) + do_teleport(chassis, T, 4) + return 1 + + + +////////////////////////////////////////////// WORMHOLE GENERATOR ////////////////////////////////////////// + +/obj/item/mecha_parts/mecha_equipment/wormhole_generator + name = "mounted wormhole generator" + desc = "An exosuit module that allows generating of small quasi-stable wormholes." + icon_state = "mecha_wholegen" + origin_tech = "bluespace=3" + equip_cooldown = 50 + energy_drain = 300 + range = RANGED + + +/obj/item/mecha_parts/mecha_equipment/wormhole_generator/action(atom/target) + if(!action_checks(target) || src.loc.z == ZLEVEL_CENTCOM) return + var/list/theareas = list() + for(var/area/AR in orange(100, chassis)) + if(AR in theareas) continue + theareas += AR + if(!theareas.len) + return + var/area/thearea = pick(theareas) + var/list/L = list() + var/turf/pos = get_turf(src) + for(var/turf/T in get_area_turfs(thearea.type)) + if(!T.density && pos.z == T.z) + var/clear = 1 + for(var/obj/O in T) + if(O.density) + clear = 0 + break + if(clear) + L+=T + if(!L.len) + return + var/turf/target_turf = pick(L) + if(!target_turf) + return + var/obj/effect/portal/P = new /obj/effect/portal(get_turf(target)) + P.target = target_turf + P.creator = null + P.icon = 'icons/obj/objects.dmi' + P.icon_state = "anom" + P.name = "wormhole" + var/turf/T = get_turf(target) + message_admins("[key_name_admin(chassis.occupant, chassis.occupant.client)](?) (FLW) used a Wormhole Generator in ([T.x],[T.y],[T.z] - JMP)",0,1) + log_game("[key_name(chassis.occupant)] used a Wormhole Generator in ([T.x],[T.y],[T.z])") + src = null + spawn(rand(150,300)) + qdel(P) + return 1 + + +/////////////////////////////////////// GRAVITATIONAL CATAPULT /////////////////////////////////////////// + +/obj/item/mecha_parts/mecha_equipment/gravcatapult + name = "mounted gravitational catapult" + desc = "An exosuit mounted Gravitational Catapult." + icon_state = "mecha_teleport" + origin_tech = "bluespace=2;magnets=3" + equip_cooldown = 10 + energy_drain = 100 + range = MELEE|RANGED + var/atom/movable/locked + var/mode = 1 //1 - gravsling 2 - gravpush + + +/obj/item/mecha_parts/mecha_equipment/gravcatapult/action(atom/movable/target) + if(!action_checks(target)) + return + switch(mode) + if(1) + if(!locked) + if(!istype(target) || target.anchored) + occupant_message("Unable to lock on [target]") + return + locked = target + occupant_message("Locked on [target]") + send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) + else if(target!=locked) + if(locked in view(chassis)) + locked.throw_at(target, 14, 1.5) + locked = null + send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) + return 1 + else + locked = null + occupant_message("Lock on [locked] disengaged.") + send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) + if(2) + var/list/atoms = list() + if(isturf(target)) + atoms = range(target,3) + else + atoms = orange(target,3) + for(var/atom/movable/A in atoms) + if(A.anchored) continue + spawn(0) + var/iter = 5-get_dist(A,target) + for(var/i=0 to iter) + step_away(A,target) + sleep(2) + var/turf/T = get_turf(target) + log_game("[chassis.occupant.ckey]([chassis.occupant]) used a Gravitational Catapult in ([T.x],[T.y],[T.z])") + return 1 + + +/obj/item/mecha_parts/mecha_equipment/gravcatapult/get_equip_info() + return "[..()] [mode==1?"([locked||"Nothing"])":null] \[S|P\]" + +/obj/item/mecha_parts/mecha_equipment/gravcatapult/Topic(href, href_list) + ..() + if(href_list["mode"]) + mode = text2num(href_list["mode"]) + send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) + return + + + + +//////////////////////////// ARMOR BOOSTER MODULES ////////////////////////////////////////////////////////// + + +/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster //what is that noise? A BAWWW from TK mutants. + name = "armor booster module (Close Combat Weaponry)" + desc = "Boosts exosuit armor against armed melee attacks. Requires energy to operate." + icon_state = "mecha_abooster_ccw" + origin_tech = "materials=3" + equip_cooldown = 10 + energy_drain = 50 + range = 0 + var/deflect_coeff = 1.15 + var/damage_coeff = 0.8 + +/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/can_attach(obj/mecha/combat/M as obj) + if(..()) + if(istype(M)) + return 1 + +/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/get_equip_info() + if(!chassis) return + return "* [src.name]" + +/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/proc/attack_react(mob/user as mob) + if(action_checks(user)) + start_cooldown() + return 1 + + + +/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster + name = "armor booster module (Ranged Weaponry)" + desc = "Boosts exosuit armor against ranged attacks. Completely blocks taser shots. Requires energy to operate." + icon_state = "mecha_abooster_proj" + origin_tech = "materials=4" + equip_cooldown = 10 + energy_drain = 50 + range = 0 + var/deflect_coeff = 1.15 + var/damage_coeff = 0.8 + +/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/can_attach(obj/mecha/combat/M as obj) + if(..()) + if(istype(M)) + return 1 + return 0 + +/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/get_equip_info() + if(!chassis) return + return "* [src.name]" + +/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/proc/projectile_react() + if(action_checks(src)) + start_cooldown() + return 1 + + +////////////////////////////////// REPAIR DROID ////////////////////////////////////////////////// + + +/obj/item/mecha_parts/mecha_equipment/repair_droid + name = "exosuit repair droid" + desc = "An automated repair droid for exosuits. Scans for damage and repairs it. Can fix almost all types of external or internal damage." + icon_state = "repair_droid" + origin_tech = "magnets=3;programming=3" + energy_drain = 50 + range = 0 + var/health_boost = 1 + var/icon/droid_overlay + var/list/repairable_damage = list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH) + +/obj/item/mecha_parts/mecha_equipment/repair_droid/Destroy() + SSobj.processing.Remove(src) + if(chassis) + chassis.overlays -= droid_overlay + ..() + +/obj/item/mecha_parts/mecha_equipment/repair_droid/attach(obj/mecha/M as obj) + ..() + droid_overlay = new(src.icon, icon_state = "repair_droid") + M.overlays += droid_overlay + +/obj/item/mecha_parts/mecha_equipment/repair_droid/detach() + chassis.overlays -= droid_overlay + SSobj.processing.Remove(src) + ..() + +/obj/item/mecha_parts/mecha_equipment/repair_droid/get_equip_info() + if(!chassis) return + return "* [src.name] - [equip_ready?"A":"Dea"]ctivate" + + +/obj/item/mecha_parts/mecha_equipment/repair_droid/Topic(href, href_list) + ..() + if(href_list["toggle_repairs"]) + chassis.overlays -= droid_overlay + if(equip_ready) + SSobj.processing |= src + droid_overlay = new(src.icon, icon_state = "repair_droid_a") + log_message("Activated.") + set_ready_state(0) + else + SSobj.processing.Remove(src) + droid_overlay = new(src.icon, icon_state = "repair_droid") + log_message("Deactivated.") + set_ready_state(1) + chassis.overlays += droid_overlay + send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) + + +/obj/item/mecha_parts/mecha_equipment/repair_droid/process() + if(!chassis) + SSobj.processing.Remove(src) + set_ready_state(1) + return + var/h_boost = health_boost + var/repaired = 0 + if(chassis.internal_damage & MECHA_INT_SHORT_CIRCUIT) + h_boost *= -2 + else if(chassis.internal_damage && prob(15)) + for(var/int_dam_flag in repairable_damage) + if(chassis.internal_damage & int_dam_flag) + chassis.clearInternalDamage(int_dam_flag) + repaired = 1 + break + if(health_boost<0 || chassis.health < initial(chassis.health)) + chassis.health += min(health_boost, initial(chassis.health)-chassis.health) + repaired = 1 + if(repaired) + if(!chassis.use_power(energy_drain)) + SSobj.processing.Remove(src) + set_ready_state(1) + else //no repair needed, we turn off + SSobj.processing.Remove(src) + set_ready_state(1) + + + + + +/////////////////////////////////// TESLA ENERGY RELAY //////////////////////////////////////////////// + +/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay + name = "exosuit energy relay" + desc = "An exosuit module that wirelessly drains energy from any available power channel in area. The performance index is quite low." + icon_state = "tesla" + origin_tech = "magnets=4;powerstorage=3" + energy_drain = 0 + range = 0 + var/coeff = 100 + var/list/use_channels = list(EQUIP,ENVIRON,LIGHT) + +/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/Destroy() + SSobj.processing.Remove(src) + ..() + +/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/detach() + SSobj.processing.Remove(src) + ..() + return + +/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/proc/get_charge() + if(equip_ready) //disabled + return + var/area/A = get_area(chassis) + var/pow_chan = get_power_channel(A) + if(pow_chan) + return 1000 //making magic + + +/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/proc/get_power_channel(var/area/A) + var/pow_chan + if(A) + for(var/c in use_channels) + if(A.master && A.master.powered(c)) + pow_chan = c + break + return pow_chan + +/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/Topic(href, href_list) + ..() + if(href_list["toggle_relay"]) + if(equip_ready) //inactive + SSobj.processing |= src + set_ready_state(0) + log_message("Activated.") + else + SSobj.processing.Remove(src) + set_ready_state(1) + log_message("Deactivated.") + +/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/get_equip_info() + if(!chassis) return + return "* [src.name] - [equip_ready?"A":"Dea"]ctivate" + + +/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/process() + if(!chassis || chassis.internal_damage & MECHA_INT_SHORT_CIRCUIT) + SSobj.processing.Remove(src) + set_ready_state(1) + return + var/cur_charge = chassis.get_charge() + if(isnull(cur_charge) || !chassis.cell) + SSobj.processing.Remove(src) + set_ready_state(1) + occupant_message("No powercell detected.") + return + if(cur_charge < chassis.cell.maxcharge) + var/area/A = get_area(chassis) + if(A) + var/pow_chan + for(var/c in list(EQUIP,ENVIRON,LIGHT)) + if(A.master.powered(c)) + pow_chan = c + break + if(pow_chan) + var/delta = min(15, chassis.cell.maxcharge-cur_charge) + chassis.give_power(delta) + A.master.use_power(delta*coeff, pow_chan) + + + + +/////////////////////////////////////////// GENERATOR ///////////////////////////////////////////// + + +/obj/item/mecha_parts/mecha_equipment/generator + name = "exosuit plasma converter" + desc = "An exosuit module that generates power using solid plasma as fuel. Pollutes the environment." + icon_state = "tesla" + origin_tech = "plasmatech=2;powerstorage=2;engineering=1" + range = MELEE + var/coeff = 100 + var/obj/item/stack/sheet/fuel + var/max_fuel = 150000 + var/fuel_per_cycle_idle = 25 + var/fuel_per_cycle_active = 200 + var/power_per_cycle = 20 + reliability = 1000 + +/obj/item/mecha_parts/mecha_equipment/generator/New() + ..() + generator_init() + +/obj/item/mecha_parts/mecha_equipment/generator/Destroy() + SSobj.processing.Remove(src) + ..() + +/obj/item/mecha_parts/mecha_equipment/generator/proc/generator_init() + fuel = new /obj/item/stack/sheet/mineral/plasma(src) + fuel.amount = 0 + +/obj/item/mecha_parts/mecha_equipment/generator/detach() + SSobj.processing.Remove(src) + ..() + +/obj/item/mecha_parts/mecha_equipment/generator/Topic(href, href_list) + ..() + if(href_list["toggle"]) + if(equip_ready) //inactive + set_ready_state(0) + SSobj.processing |= src + log_message("Activated.") + else + set_ready_state(1) + SSobj.processing.Remove(src) + log_message("Deactivated.") + +/obj/item/mecha_parts/mecha_equipment/generator/get_equip_info() + var/output = ..() + if(output) + return "[output] \[[fuel]: [round(fuel.amount*fuel.perunit,0.1)] cm3\] - [equip_ready?"A":"Dea"]ctivate" + +/obj/item/mecha_parts/mecha_equipment/generator/action(target) + if(chassis) + var/result = load_fuel(target) + if(result) + send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) + +/obj/item/mecha_parts/mecha_equipment/generator/proc/load_fuel(var/obj/item/stack/sheet/P) + if(P.type == fuel.type && P.amount > 0) + var/to_load = max(max_fuel - fuel.amount*fuel.perunit,0) + if(to_load) + var/units = min(max(round(to_load / P.perunit),1),P.amount) + fuel.amount += units + P.use(units) + occupant_message("[units] unit\s of [fuel] successfully loaded.") + return units + else + occupant_message("Unit is full.") + return 0 + else + occupant_message("[fuel] traces in target minimal! [P] cannot be used as fuel.") + return + +/obj/item/mecha_parts/mecha_equipment/generator/attackby(weapon,mob/user, params) + load_fuel(weapon) + +/obj/item/mecha_parts/mecha_equipment/generator/critfail() + ..() + var/turf/simulated/T = get_turf(src) + if(!T) + return + var/datum/gas_mixture/GM = new + if(prob(10)) + GM.toxins += 100 + GM.temperature = 1500+T0C //should be enough to start a fire + T.visible_message("The [src] suddenly disgorges a cloud of heated plasma.") + qdel(src) + else + GM.toxins += 5 + GM.temperature = istype(T) ? T.air.return_temperature() : T20C + T.visible_message("The [src] suddenly disgorges a cloud of plasma.") + T.assume_air(GM) + return + +/obj/item/mecha_parts/mecha_equipment/generator/process() + if(!chassis) + SSobj.processing.Remove(src) + set_ready_state(1) + return + if(fuel.amount<=0) + SSobj.processing.Remove(src) + log_message("Deactivated - no fuel.") + set_ready_state(1) + return + if(anyprob(reliability)) + set_ready_state(1) //inactive + critfail() + SSobj.processing.Remove(src) + return + var/cur_charge = chassis.get_charge() + if(isnull(cur_charge)) + set_ready_state(1) + occupant_message("No powercell detected.") + log_message("Deactivated.") + SSobj.processing.Remove(src) + return + var/use_fuel = fuel_per_cycle_idle + if(cur_charge < chassis.cell.maxcharge) + use_fuel = fuel_per_cycle_active + chassis.give_power(power_per_cycle) + fuel.amount -= min(use_fuel/fuel.perunit,fuel.amount) + update_equip_info() + return 1 + + +/obj/item/mecha_parts/mecha_equipment/generator/nuclear + name = "exonuclear reactor" + desc = "An exosuit module that generates power using uranium as fuel. Pollutes the environment." + icon_state = "tesla" + origin_tech = "powerstorage=3;engineering=3" + max_fuel = 50000 + fuel_per_cycle_idle = 10 + fuel_per_cycle_active = 30 + power_per_cycle = 50 + var/rad_per_cycle = 0.3 + reliability = 1000 + +/obj/item/mecha_parts/mecha_equipment/generator/nuclear/generator_init() + fuel = new /obj/item/stack/sheet/mineral/uranium(src) + fuel.amount = 0 + +/obj/item/mecha_parts/mecha_equipment/generator/nuclear/critfail() + return + +/obj/item/mecha_parts/mecha_equipment/generator/nuclear/process() + if(..()) + for(var/mob/living/carbon/M in view(chassis)) + if(istype(M,/mob/living/carbon/human)) + M.irradiate(rad_per_cycle*3) + else + M.irradiate(rad_per_cycle) + + diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm deleted file mode 100644 index 7b9a4867f03..00000000000 --- a/code/game/mecha/equipment/tools/tools.dm +++ /dev/null @@ -1,1245 +0,0 @@ -/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp - name = "hydraulic clamp" - desc = "Equipment for engineering exosuits. Lifts objects and loads them into cargo." - icon_state = "mecha_clamp" - equip_cooldown = 15 - energy_drain = 10 - var/dam_force = 20 - var/obj/mecha/working/ripley/cargo_holder - -/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp/can_attach(obj/mecha/working/ripley/M as obj) - if(..()) - if(istype(M)) - return 1 - return 0 - -/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp/attach(obj/mecha/M as obj) - ..() - cargo_holder = M - return - -/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp/detach(atom/moveto = null) - ..() - if(can_attach(chassis)) - cargo_holder = chassis - else - cargo_holder = null - -/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp/action(atom/target) - if(!action_checks(target)) - return - if(!cargo_holder) - return - if(istype(target,/obj)) - var/obj/O = target - if(!O.anchored) - if(cargo_holder.cargo.len < cargo_holder.cargo_capacity) - chassis.visible_message("[chassis] lifts [target] and starts to load it into cargo compartment.") - set_ready_state(0) - chassis.use_power(energy_drain) - O.anchored = 1 - var/T = chassis.loc - if(do_after_cooldown(target)) - if(T == chassis.loc && src == chassis.selected) - cargo_holder.cargo += O - O.loc = chassis - O.anchored = 0 - occupant_message("[target] successfully loaded.") - log_message("Loaded [O]. Cargo compartment capacity: [cargo_holder.cargo_capacity - cargo_holder.cargo.len]") - else - occupant_message("You must hold still while handling objects!") - O.anchored = initial(O.anchored) - else - occupant_message("Not enough room in cargo compartment!") - else - occupant_message("[target] is firmly secured!") - - else if(istype(target,/mob/living)) - var/mob/living/M = target - if(M.stat>1) return - if(chassis.occupant.a_intent == "harm") - M.take_overall_damage(dam_force) - if(!M) - return - M.adjustOxyLoss(round(dam_force/2)) - M.updatehealth() - target.visible_message("[chassis] squeezes [target].", \ - "[chassis] squeezes [target].",\ - "You hear something crack.") - add_logs(chassis.occupant, M, "attacked", object="[name]", addition="(INTENT: [uppertext(chassis.occupant.a_intent)]) (DAMTYE: [uppertext(damtype)])") - else - step_away(M,chassis) - occupant_message("You push [target] out of the way.") - chassis.visible_message("[chassis] pushes [target] out of the way.") - set_ready_state(0) - chassis.use_power(energy_drain) - do_after_cooldown() - return 1 - -/obj/item/mecha_parts/mecha_equipment/tool/drill - name = "exosuit drill" - desc = "Equipment for engineering and combat exosuits. This is the drill that'll pierce the heavens!" - icon_state = "mecha_drill" - equip_cooldown = 30 - energy_drain = 10 - force = 15 - -/obj/item/mecha_parts/mecha_equipment/tool/drill/action(atom/target) - if(!action_checks(target)) - return - if(istype(target, /turf) && !istype(target, /turf/simulated)) - return - if(isobj(target)) - var/obj/target_obj = target - if(target_obj.unacidable) - return - set_ready_state(0) - chassis.use_power(energy_drain) - target.visible_message("[chassis] starts to drill [target].", \ - "[chassis] starts to drill [target]...", \ - "You hear drilling.") - var/T = chassis.loc - var/C = target.loc //why are these backwards? we may never know -Pete - if(do_after_cooldown(target)) - if(T == chassis.loc && src == chassis.selected) - if(istype(target, /turf/simulated/wall/r_wall)) - if(istype(src , /obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill)) - if(do_after_cooldown(target))//To slow down how fast mechs can drill through the station - log_message("Drilled through [target]") - target.ex_act(3) - else - occupant_message("[target] is too durable to drill through.") - else if(istype(target, /turf/simulated/mineral)) - for(var/turf/simulated/mineral/M in range(chassis,1)) - if(get_dir(chassis,M)&chassis.dir) - M.gets_drilled(chassis.occupant) - log_message("Drilled through [target]") - if(locate(/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp) in chassis.equipment) - var/obj/structure/ore_box/ore_box = locate(/obj/structure/ore_box) in chassis:cargo - if(ore_box) - for(var/obj/item/weapon/ore/ore in range(chassis,1)) - if(get_dir(chassis,ore)&chassis.dir) - ore.Move(ore_box) - else if(istype(target, /turf/simulated/floor/plating/asteroid)) - for(var/turf/simulated/floor/plating/asteroid/M in range(chassis,1)) - if(get_dir(chassis,M)&chassis.dir) - M.gets_dug() - log_message("Drilled through [target]") - if(locate(/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp) in chassis.equipment) - var/obj/structure/ore_box/ore_box = locate(/obj/structure/ore_box) in chassis:cargo - if(ore_box) - for(var/obj/item/weapon/ore/ore in range(chassis,1)) - if(get_dir(chassis,ore)&chassis.dir) - ore.Move(ore_box) - else if(target.loc == C) - log_message("Drilled through [target]") - if(isliving(target)) - if(istype(src , /obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill)) - drill_mob(target, chassis.occupant, 120) - else - drill_mob(target, chassis.occupant) - else - target.ex_act(2) - return 1 - -/obj/item/mecha_parts/mecha_equipment/tool/drill/can_attach(obj/mecha/M as obj) - if(..()) - if(istype(M, /obj/mecha/working) || istype(M, /obj/mecha/combat)) - return 1 - return 0 - -/obj/item/mecha_parts/mecha_equipment/tool/drill/proc/drill_mob(mob/living/target, mob/user, var/drill_damage=80) - target.visible_message("[chassis] drills [target] with [src].", \ - "[chassis] drills [target] with [src].") - add_logs(user, target, "attacked", object="[name]", addition="(INTENT: [uppertext(user.a_intent)]) (DAMTYPE: [uppertext(damtype)])") - if(ishuman(target)) - var/mob/living/carbon/human/H = target - var/obj/item/organ/limb/affecting = H.get_organ("chest") - affecting.take_damage(drill_damage) - H.update_damage_overlays(0) - else - target.take_organ_damage(drill_damage) - if(target) - target.Paralyse(10) - target.updatehealth() - -/obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill - name = "diamond-tipped exosuit drill" - desc = "Equipment for engineering and combat exosuits. This is an upgraded version of the drill that'll pierce the heavens!" - icon_state = "mecha_diamond_drill" - origin_tech = "materials=4;engineering=3" - equip_cooldown = 20 - force = 15 - - -/obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill/can_attach(obj/mecha/M as obj) - if(..()) - if(istype(M, /obj/mecha/working) || istype(M, /obj/mecha/combat)) - return 1 - return 0 - -/obj/item/mecha_parts/mecha_equipment/tool/mining_scanner - name = "exosuit mining scanner" - desc = "Equipment for engineering and combat exosuits. It will automatically check surrounding rock for useful minerals." - icon_state = "mecha_analyzer" - origin_tech = "materials=3;engineering=2" - equip_cooldown = 30 - var/scanning = 0 - -/obj/item/mecha_parts/mecha_equipment/tool/mining_scanner/New() - SSobj.processing |= src - -/obj/item/mecha_parts/mecha_equipment/tool/mining_scanner/process() - if(!loc) - SSobj.processing.Remove(src) - qdel(src) - if(scanning) - return - if(istype(loc,/obj/mecha/working)) - var/obj/mecha/working/mecha = loc - if(!mecha.occupant) - return - var/list/occupant = list() - occupant |= mecha.occupant - scanning = 1 - mineral_scan_pulse(occupant,get_turf(loc)) - spawn(equip_cooldown) - scanning = 0 - -/obj/item/mecha_parts/mecha_equipment/tool/extinguisher - name = "exosuit extinguisher" - desc = "Equipment for engineering exosuits. A rapid-firing high capacity fire extinguisher." - icon_state = "mecha_exting" - equip_cooldown = 5 - energy_drain = 0 - range = MELEE|RANGED - -/obj/item/mecha_parts/mecha_equipment/tool/extinguisher/New() - create_reagents(1000) - reagents.add_reagent("water", 1000) - ..() - return - -/obj/item/mecha_parts/mecha_equipment/tool/extinguisher/action(atom/target) //copypasted from extinguisher. TODO: Rewrite from scratch. - if(!action_checks(target) || get_dist(chassis, target)>3) return - if(get_dist(chassis, target)>2) return - set_ready_state(0) - if(do_after_cooldown(target)) - if(istype(target, /obj/structure/reagent_dispensers/watertank) && get_dist(chassis,target) <= 1) - var/obj/o = target - o.reagents.trans_to(src, 1000) - occupant_message("Extinguisher refilled.") - playsound(chassis, 'sound/effects/refill.ogg', 50, 1, -6) - else - if(src.reagents.total_volume > 0) - playsound(chassis, 'sound/effects/extinguish.ogg', 75, 1, -3) - var/direction = get_dir(chassis,target) - var/turf/T = get_turf(target) - var/turf/T1 = get_step(T,turn(direction, 90)) - var/turf/T2 = get_step(T,turn(direction, -90)) - - var/list/the_targets = list(T,T1,T2) - spawn(0) - for(var/a=0, a<5, a++) - var/obj/effect/effect/water/W = PoolOrNew(/obj/effect/effect/water, get_turf(chassis)) - if(!W) - return - var/turf/my_target = pick(the_targets) - var/datum/reagents/R = new/datum/reagents(5) - W.reagents = R - R.my_atom = W - src.reagents.trans_to(W,1) - for(var/b=0, b<4, b++) - if(!W) - return - step_towards(W,my_target) - if(!W) - return - var/turf/W_turf = get_turf(W) - W.reagents.reaction(W_turf) - for(var/atom/atm in W_turf) - W.reagents.reaction(atm) - if(W.loc == my_target) - break - sleep(2) - return 1 - -/obj/item/mecha_parts/mecha_equipment/tool/extinguisher/get_equip_info() - return "[..()] \[[src.reagents.total_volume]\]" - -/obj/item/mecha_parts/mecha_equipment/tool/extinguisher/on_reagent_change() - return - -/obj/item/mecha_parts/mecha_equipment/tool/extinguisher/can_attach(obj/mecha/working/M as obj) - if(..()) - if(istype(M)) - return 1 - return 0 - - -/obj/item/mecha_parts/mecha_equipment/tool/rcd - name = "mounted RCD" - desc = "An exosuit-mounted Rapid Construction Device." - icon_state = "mecha_rcd" - origin_tech = "materials=4;bluespace=3;magnets=4;powerstorage=4" - equip_cooldown = 10 - energy_drain = 250 - range = MELEE|RANGED - var/mode = 0 //0 - deconstruct, 1 - wall or floor, 2 - airlock. - var/disabled = 0 //malf - -/obj/item/mecha_parts/mecha_equipment/tool/rcd/action(atom/target) - if(istype(target,/area/shuttle)||istype(target, /turf/space/transit))//>implying these are ever made -Sieve - disabled = 1 - else - disabled = 0 - if(!istype(target, /turf) && !istype(target, /obj/machinery/door/airlock)) - target = get_turf(target) - if(!action_checks(target) || disabled || get_dist(chassis, target)>3) return - playsound(chassis, 'sound/machines/click.ogg', 50, 1) - //meh - switch(mode) - if(0) - if (istype(target, /turf/simulated/wall)) - var/turf/simulated/wall/W = target - occupant_message("Deconstructing [W]...") - set_ready_state(0) - if(do_after_cooldown(W)) - if(disabled) return - chassis.spark_system.start() - W.ChangeTurf(/turf/simulated/floor/plating) - playsound(W, 'sound/items/Deconstruct.ogg', 50, 1) - chassis.use_power(energy_drain) - else if (istype(target, /turf/simulated/floor)) - var/turf/simulated/floor/F = target - occupant_message("Deconstructing [F]...") - set_ready_state(0) - if(do_after_cooldown(F)) - if(disabled) return - chassis.spark_system.start() - F.ChangeTurf(F.baseturf) - playsound(F, 'sound/items/Deconstruct.ogg', 50, 1) - chassis.use_power(energy_drain) - else if (istype(target, /obj/machinery/door/airlock)) - occupant_message("Deconstructing [target]...") - set_ready_state(0) - if(do_after_cooldown(target)) - if(disabled) return - chassis.spark_system.start() - qdel(target) - playsound(target, 'sound/items/Deconstruct.ogg', 50, 1) - chassis.use_power(energy_drain) - if(1) - if(istype(target, /turf/space)) - var/turf/space/S = target - occupant_message("Building Floor...") - set_ready_state(0) - if(do_after_cooldown(S)) - if(disabled) return - S.ChangeTurf(/turf/simulated/floor/plating) - playsound(S, 'sound/items/Deconstruct.ogg', 50, 1) - chassis.spark_system.start() - chassis.use_power(energy_drain*2) - else if(istype(target, /turf/simulated/floor)) - var/turf/simulated/floor/F = target - occupant_message("Building Wall...") - set_ready_state(0) - if(do_after_cooldown(target)) - if(disabled) return - F.ChangeTurf(/turf/simulated/wall) - playsound(F, 'sound/items/Deconstruct.ogg', 50, 1) - chassis.spark_system.start() - chassis.use_power(energy_drain*2) - if(2) - if(istype(target, /turf/simulated/floor)) - occupant_message("Building Airlock...") - set_ready_state(0) - if(do_after_cooldown(target)) - if(disabled) return - chassis.spark_system.start() - var/obj/machinery/door/airlock/T = new /obj/machinery/door/airlock(target) - T.autoclose = 1 - playsound(target, 'sound/items/Deconstruct.ogg', 50, 1) - playsound(target, 'sound/effects/sparks2.ogg', 50, 1) - chassis.use_power(energy_drain*2) - return - - -/obj/item/mecha_parts/mecha_equipment/tool/rcd/Topic(href,href_list) - ..() - if(href_list["mode"]) - mode = text2num(href_list["mode"]) - switch(mode) - if(0) - occupant_message("Switched RCD to Deconstruct.") - if(1) - occupant_message("Switched RCD to Construct.") - if(2) - occupant_message("Switched RCD to Construct Airlock.") - return - -/obj/item/mecha_parts/mecha_equipment/tool/rcd/get_equip_info() - return "[..()] \[D|C|A\]" - - -/obj/item/mecha_parts/mecha_equipment/tool/cable_layer - name = "cable layer" - desc = "Equipment for engineering exosuits. Lays cable along the exosuit's path." - icon_state = "mecha_wire" - var/datum/event/event - var/turf/old_turf - var/obj/structure/cable/last_piece - var/obj/item/stack/cable_coil/cable - var/max_cable = 1000 - -/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/New() - cable = new(src) - cable.amount = 0 - ..() - -/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/can_attach(obj/mecha/working/M) - if(..()) - if(istype(M)) - return 1 - return 0 - -/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/attach() - ..() - event = chassis.events.addEvent("onMove",src,"layCable") - return - -/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/detach() - chassis.events.clearEvent("onMove",event) - return ..() - -/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/destroy() - chassis.events.clearEvent("onMove",event) - return ..() - -/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/action(var/obj/item/stack/cable_coil/target) - if(!action_checks(target)) - return - var/result = load_cable(target) - var/message - if(isnull(result)) - message = "Unable to load [target] - no cable found." - else if(!result) - message = "Reel is full." - else - message = "[result] meters of cable successfully loaded." - send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) - occupant_message(message) - return - -/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/Topic(href,href_list) - ..() - if(href_list["toggle"]) - set_ready_state(!equip_ready) - occupant_message("[src] [equip_ready?"dea":"a"]ctivated.") - log_message("[equip_ready?"Dea":"A"]ctivated.") - return - if(href_list["cut"]) - if(cable && cable.amount) - var/m = round(input(chassis.occupant,"Please specify the length of cable to cut","Cut cable",min(cable.amount,30)) as num, 1) - m = min(m, cable.amount) - if(m) - use_cable(m) - var/obj/item/stack/cable_coil/CC = new (get_turf(chassis)) - CC.amount = m - else - occupant_message("There's no more cable on the reel.") - return - -/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/get_equip_info() - var/output = ..() - if(output) - return "[output] \[Cable: [cable ? cable.amount : 0] m\][(cable && cable.amount) ? "- [!equip_ready?"Dea":"A"]ctivate|Cut" : null]" - return - -/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/load_cable(var/obj/item/stack/cable_coil/CC) - if(istype(CC) && CC.amount) - var/cur_amount = cable? cable.amount : 0 - var/to_load = max(max_cable - cur_amount,0) - if(to_load) - to_load = min(CC.amount, to_load) - if(!cable) - cable = new(src) - cable.amount = 0 - cable.amount += to_load - CC.use(to_load) - return to_load - else - return 0 - return - -/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/use_cable(amount) - if(!cable || cable.amount<1) - set_ready_state(1) - occupant_message("Cable depleted, [src] deactivated.") - log_message("Cable depleted, [src] deactivated.") - return - if(cable.amount < amount) - occupant_message("No enough cable to finish the task.") - return - cable.use(amount) - update_equip_info() - return 1 - -/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/reset() - last_piece = null - -/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/dismantleFloor(var/turf/new_turf) - if(istype(new_turf, /turf/simulated/floor)) - var/turf/simulated/floor/T = new_turf - if(!istype(T, /turf/simulated/floor/plating)) - if(!T.broken && !T.burnt) - new T.floor_tile(T) - T.make_plating() - return !new_turf.intact - -/obj/item/mecha_parts/mecha_equipment/tool/cable_layer/proc/layCable(var/turf/new_turf) - if(equip_ready || !istype(new_turf) || !dismantleFloor(new_turf)) - return reset() - var/fdirn = turn(chassis.dir,180) - for(var/obj/structure/cable/LC in new_turf) // check to make sure there's not a cable there already - if(LC.d1 == fdirn || LC.d2 == fdirn) - return reset() - if(!use_cable(1)) - return reset() - var/obj/structure/cable/NC = new(new_turf) - NC.cableColor("red") - NC.d1 = 0 - NC.d2 = fdirn - NC.updateicon() - - var/datum/powernet/PN - if(last_piece && last_piece.d2 != chassis.dir) - last_piece.d1 = min(last_piece.d2, chassis.dir) - last_piece.d2 = max(last_piece.d2, chassis.dir) - last_piece.updateicon() - PN = last_piece.powernet - - if(!PN) - PN = new() - powernets += PN - NC.powernet = PN - PN.cables += NC - NC.mergeConnectedNetworks(NC.d2) - - //NC.mergeConnectedNetworksOnTurf() - last_piece = NC - return 1 - - -/obj/item/mecha_parts/mecha_equipment/teleporter - name = "mounted teleporter" - desc = "An exosuit module that allows exosuits to teleport to any position in view." - icon_state = "mecha_teleport" - origin_tech = "bluespace=10" - equip_cooldown = 150 - energy_drain = 1000 - range = RANGED - -/obj/item/mecha_parts/mecha_equipment/teleporter/action(atom/target) - if(!action_checks(target) || src.loc.z == ZLEVEL_CENTCOM) return - var/turf/T = get_turf(target) - if(T) - set_ready_state(0) - chassis.use_power(energy_drain) - do_teleport(chassis, T, 4) - do_after_cooldown() - return - - -/obj/item/mecha_parts/mecha_equipment/wormhole_generator - name = "mounted wormhole generator" - desc = "An exosuit module that allows generating of small quasi-stable wormholes." - icon_state = "mecha_wholegen" - origin_tech = "bluespace=3" - equip_cooldown = 50 - energy_drain = 300 - range = RANGED - - -/obj/item/mecha_parts/mecha_equipment/wormhole_generator/action(atom/target) - if(!action_checks(target) || src.loc.z == ZLEVEL_CENTCOM) return - var/list/theareas = list() - for(var/area/AR in orange(100, chassis)) - if(AR in theareas) continue - theareas += AR - if(!theareas.len) - return - var/area/thearea = pick(theareas) - var/list/L = list() - var/turf/pos = get_turf(src) - for(var/turf/T in get_area_turfs(thearea.type)) - if(!T.density && pos.z == T.z) - var/clear = 1 - for(var/obj/O in T) - if(O.density) - clear = 0 - break - if(clear) - L+=T - if(!L.len) - return - var/turf/target_turf = pick(L) - if(!target_turf) - return - chassis.use_power(energy_drain) - set_ready_state(0) - var/obj/effect/portal/P = new /obj/effect/portal(get_turf(target)) - P.target = target_turf - P.creator = null - P.icon = 'icons/obj/objects.dmi' - P.icon_state = "anom" - P.name = "wormhole" - var/turf/T = get_turf(target) - message_admins("[key_name_admin(chassis.occupant, chassis.occupant.client)](?) (FLW) used a Wormhole Generator in ([T.x],[T.y],[T.z] - JMP)",0,1) - log_game("[key_name(chassis.occupant)] used a Wormhole Generator in ([T.x],[T.y],[T.z])") - do_after_cooldown() - src = null - spawn(rand(150,300)) - qdel(P) - return - -/obj/item/mecha_parts/mecha_equipment/gravcatapult - name = "mounted gravitational catapult" - desc = "An exosuit mounted Gravitational Catapult." - icon_state = "mecha_teleport" - origin_tech = "bluespace=2;magnets=3" - equip_cooldown = 10 - energy_drain = 100 - range = MELEE|RANGED - var/atom/movable/locked - var/mode = 1 //1 - gravsling 2 - gravpush - - -/obj/item/mecha_parts/mecha_equipment/gravcatapult/action(atom/movable/target) - switch(mode) - if(1) - if(!action_checks(target) && !locked) return - if(!locked) - if(!istype(target) || target.anchored) - occupant_message("Unable to lock on [target]") - return - locked = target - occupant_message("Locked on [target]") - send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) - return - else if(target!=locked) - if(locked in view(chassis)) - locked.throw_at(target, 14, 1.5) - locked = null - send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) - set_ready_state(0) - chassis.use_power(energy_drain) - do_after_cooldown() - else - locked = null - occupant_message("Lock on [locked] disengaged.") - send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) - if(2) - if(!action_checks(target)) return - var/list/atoms = list() - if(isturf(target)) - atoms = range(target,3) - else - atoms = orange(target,3) - for(var/atom/movable/A in atoms) - if(A.anchored) continue - spawn(0) - var/iter = 5-get_dist(A,target) - for(var/i=0 to iter) - step_away(A,target) - sleep(2) - set_ready_state(0) - chassis.use_power(energy_drain) - var/turf/T = get_turf(target) - log_game("[chassis.occupant.ckey]([chassis.occupant]) used a Gravitational Catapult in ([T.x],[T.y],[T.z])") - do_after_cooldown() - return - -/obj/item/mecha_parts/mecha_equipment/gravcatapult/get_equip_info() - return "[..()] [mode==1?"([locked||"Nothing"])":null] \[S|P\]" - -/obj/item/mecha_parts/mecha_equipment/gravcatapult/Topic(href, href_list) - ..() - if(href_list["mode"]) - mode = text2num(href_list["mode"]) - send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) - return - - -/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster //what is that noise? A BAWWW from TK mutants. - name = "armor booster module (Close Combat Weaponry)" - desc = "Boosts exosuit armor against armed melee attacks. Requires energy to operate." - icon_state = "mecha_abooster_ccw" - origin_tech = "materials=3" - equip_cooldown = 10 - energy_drain = 50 - range = 0 - var/deflect_coeff = 1.15 - var/damage_coeff = 0.8 - -/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/can_attach(obj/mecha/M as obj) - if(..()) - if(!istype(M, /obj/mecha/combat/honker)) - if(!M.proc_res["dynattackby"]) - return 1 - return 0 - -/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/attach(obj/mecha/M as obj) - ..() - chassis.proc_res["dynattackby"] = src - return - -/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/detach() - chassis.proc_res["dynattackby"] = null - ..() - return - -/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/get_equip_info() - if(!chassis) return - return "* [src.name]" - -/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/proc/dynattackby(obj/item/weapon/W as obj, mob/user as mob) - if(!action_checks(user)) - return chassis.dynattackby(W,user) - chassis.log_message("Attacked by [W]. Attacker - [user]") - if(prob(chassis.deflect_chance*deflect_coeff)) - user << "The [W] bounces off [chassis] armor." - chassis.log_append_to_last("Armor saved.") - else - chassis.occupant_message("[user] hits [chassis] with [W].") - user.visible_message("[user] hits [chassis] with [W].", "You hit [src] with [W].") - chassis.take_damage(round(W.force*damage_coeff),W.damtype) - chassis.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) - set_ready_state(0) - chassis.use_power(energy_drain) - do_after_cooldown() - return - - -/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster - name = "armor booster module (Ranged Weaponry)" - desc = "Boosts exosuit armor against ranged attacks. Completely blocks taser shots. Requires energy to operate." - icon_state = "mecha_abooster_proj" - origin_tech = "materials=4" - equip_cooldown = 10 - energy_drain = 50 - range = 0 - var/deflect_coeff = 1.15 - var/damage_coeff = 0.8 - -/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/can_attach(obj/mecha/M as obj) - if(..()) - if(!istype(M, /obj/mecha/combat/honker)) - if(!M.proc_res["dynbulletdamage"] && !M.proc_res["dynhitby"]) - return 1 - return 0 - -/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/attach(obj/mecha/M as obj) - ..() - chassis.proc_res["dynbulletdamage"] = src - chassis.proc_res["dynhitby"] = src - return - -/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/detach() - chassis.proc_res["dynbulletdamage"] = null - chassis.proc_res["dynhitby"] = null - ..() - return - -/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/get_equip_info() - if(!chassis) return - return "* [src.name]" - -/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/proc/dynbulletdamage(var/obj/item/projectile/Proj) - if(!action_checks(src)) - return chassis.dynbulletdamage(Proj) - if(prob(chassis.deflect_chance*deflect_coeff)) - chassis.visible_message("The [chassis.name] armor deflects the projectile") - chassis.log_append_to_last("Armor saved.") - else - chassis.take_damage(round(Proj.damage*src.damage_coeff),Proj.flag) - chassis.check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) - Proj.on_hit(chassis) - set_ready_state(0) - chassis.use_power(energy_drain) - do_after_cooldown() - return - -/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/proc/dynhitby(atom/movable/A) - if(!action_checks(A)) - return chassis.dynhitby(A) - if(prob(chassis.deflect_chance*deflect_coeff) || istype(A, /mob/living) || istype(A, /obj/item/mecha_parts/mecha_tracking)) - chassis.visible_message("The [A] bounces off the [chassis] armor") - chassis.log_append_to_last("Armor saved.") - if(istype(A, /mob/living)) - var/mob/living/M = A - M.take_organ_damage(10) - else if(istype(A, /obj)) - var/obj/O = A - if(O.throwforce) - chassis.take_damage(round(O.throwforce*damage_coeff)) - chassis.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) - set_ready_state(0) - chassis.use_power(energy_drain) - do_after_cooldown() - return - - -/obj/item/mecha_parts/mecha_equipment/repair_droid - name = "exosuit repair droid" - desc = "An automated repair droid for exosuits. Scans for damage and repairs it. Can fix almost all types of external or internal damage." - icon_state = "repair_droid" - origin_tech = "magnets=3;programming=3" - equip_cooldown = 20 - energy_drain = 100 - range = 0 - var/health_boost = 2 - var/datum/global_iterator/pr_repair_droid - var/icon/droid_overlay - var/list/repairable_damage = list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH) - -/obj/item/mecha_parts/mecha_equipment/repair_droid/New() - ..() - pr_repair_droid = new /datum/global_iterator/mecha_repair_droid(list(src),0) - pr_repair_droid.set_delay(equip_cooldown) - return - -/obj/item/mecha_parts/mecha_equipment/repair_droid/Destroy() - qdel(pr_repair_droid) - pr_repair_droid = null - ..() - -/obj/item/mecha_parts/mecha_equipment/repair_droid/attach(obj/mecha/M as obj) - ..() - droid_overlay = new(src.icon, icon_state = "repair_droid") - M.overlays += droid_overlay - return - -/obj/item/mecha_parts/mecha_equipment/repair_droid/destroy() - chassis.overlays -= droid_overlay - ..() - return - -/obj/item/mecha_parts/mecha_equipment/repair_droid/detach() - chassis.overlays -= droid_overlay - pr_repair_droid.stop() - ..() - return - -/obj/item/mecha_parts/mecha_equipment/repair_droid/get_equip_info() - if(!chassis) return - return "* [src.name] - [pr_repair_droid.active()?"Dea":"A"]ctivate" - - -/obj/item/mecha_parts/mecha_equipment/repair_droid/Topic(href, href_list) - ..() - if(href_list["toggle_repairs"]) - chassis.overlays -= droid_overlay - if(pr_repair_droid.toggle()) - droid_overlay = new(src.icon, icon_state = "repair_droid_a") - log_message("Activated.") - else - droid_overlay = new(src.icon, icon_state = "repair_droid") - log_message("Deactivated.") - set_ready_state(1) - chassis.overlays += droid_overlay - send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) - return - - -/datum/global_iterator/mecha_repair_droid - -/datum/global_iterator/mecha_repair_droid/process(var/obj/item/mecha_parts/mecha_equipment/repair_droid/RD as obj) - if(!RD.chassis) - stop() - RD.set_ready_state(1) - return - var/health_boost = RD.health_boost - var/repaired = 0 - if(RD.chassis.hasInternalDamage(MECHA_INT_SHORT_CIRCUIT)) - health_boost *= -2 - else if(RD.chassis.hasInternalDamage() && prob(15)) - for(var/int_dam_flag in RD.repairable_damage) - if(RD.chassis.hasInternalDamage(int_dam_flag)) - RD.chassis.clearInternalDamage(int_dam_flag) - repaired = 1 - break - if(health_boost<0 || RD.chassis.health < initial(RD.chassis.health)) - RD.chassis.health += min(health_boost, initial(RD.chassis.health)-RD.chassis.health) - repaired = 1 - if(repaired) - if(RD.chassis.use_power(RD.energy_drain)) - RD.set_ready_state(0) - else - stop() - RD.set_ready_state(1) - return - else - RD.set_ready_state(1) - return - - -/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay - name = "exosuit energy relay" - desc = "An exosuit module that wirelessly drains energy from any available power channel in area. The performance index is quite low." - icon_state = "tesla" - origin_tech = "magnets=4;powerstorage=3" - equip_cooldown = 10 - energy_drain = 0 - range = 0 - var/datum/global_iterator/pr_energy_relay - var/coeff = 100 - var/list/use_channels = list(EQUIP,ENVIRON,LIGHT) - -/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/New() - ..() - pr_energy_relay = new /datum/global_iterator/mecha_energy_relay(list(src),0) - pr_energy_relay.set_delay(equip_cooldown) - return - -/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/Destroy() - qdel(pr_energy_relay) - pr_energy_relay = null - ..() - -/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/detach() - pr_energy_relay.stop() -// chassis.proc_res["dynusepower"] = null - chassis.proc_res["dyngetcharge"] = null - ..() - return - -/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/attach(obj/mecha/M) - ..() - chassis.proc_res["dyngetcharge"] = src -// chassis.proc_res["dynusepower"] = src - return - -/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/can_attach(obj/mecha/M) - if(..()) - if(!M.proc_res["dyngetcharge"])// && !M.proc_res["dynusepower"]) - return 1 - return 0 - -/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/proc/dyngetcharge() - if(equip_ready) //disabled - return chassis.dyngetcharge() - var/area/A = get_area(chassis) - var/pow_chan = get_power_channel(A) - var/charge = 0 - if(pow_chan) - charge = 1000 //making magic - else - return chassis.dyngetcharge() - return charge - -/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/proc/get_power_channel(var/area/A) - var/pow_chan - if(A) - for(var/c in use_channels) - if(A.master && A.master.powered(c)) - pow_chan = c - break - return pow_chan - -/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/Topic(href, href_list) - ..() - if(href_list["toggle_relay"]) - if(pr_energy_relay.toggle()) - set_ready_state(0) - log_message("Activated.") - else - set_ready_state(1) - log_message("Deactivated.") - return - -/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/get_equip_info() - if(!chassis) return - return "* [src.name] - [pr_energy_relay.active()?"Dea":"A"]ctivate" - -/*/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/proc/dynusepower(amount) - if(!equip_ready) //enabled - var/area/A = get_area(chassis) - var/pow_chan = get_power_channel(A) - if(pow_chan) - A.master.use_power(amount*coeff, pow_chan) - return 1 - return chassis.dynusepower(amount)*/ - -/datum/global_iterator/mecha_energy_relay - -/datum/global_iterator/mecha_energy_relay/process(var/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/ER) - if(!ER.chassis || ER.chassis.hasInternalDamage(MECHA_INT_SHORT_CIRCUIT)) - stop() - ER.set_ready_state(1) - return - var/cur_charge = ER.chassis.get_charge() - if(isnull(cur_charge) || !ER.chassis.cell) - stop() - ER.set_ready_state(1) - ER.occupant_message("No powercell detected.") - return - if(cur_charge3\] - [pr_mech_generator.active()?"Dea":"A"]ctivate" - return - -/obj/item/mecha_parts/mecha_equipment/generator/action(target) - if(chassis) - var/result = load_fuel(target) - var/message - if(isnull(result)) - message = "[fuel] traces in target minimal! [target] cannot be used as fuel." - else if(!result) - message = "Unit is full." - else - message = "[result] unit\s of [fuel] successfully loaded." - send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) - occupant_message(message) - return - -/obj/item/mecha_parts/mecha_equipment/generator/proc/load_fuel(var/obj/item/stack/sheet/P) - if(P.type == fuel.type && P.amount) - var/to_load = max(max_fuel - fuel.amount*fuel.perunit,0) - if(to_load) - var/units = min(max(round(to_load / P.perunit),1),P.amount) - if(units) - fuel.amount += units - P.use(units) - return units - else - return 0 - return - -/obj/item/mecha_parts/mecha_equipment/generator/attackby(weapon,mob/user, params) - var/result = load_fuel(weapon) - if(isnull(result)) - user.visible_message("[user] tries to shove [weapon] into [src]. What a dumb-ass.","[fuel] traces minimal. [weapon] cannot be used as fuel.") - else if(!result) - user << "Unit is full." - else - user.visible_message("[user] loads [src] with [fuel].","[result] unit\s of [fuel] successfully loaded.") - return - -/obj/item/mecha_parts/mecha_equipment/generator/critfail() - ..() - var/turf/simulated/T = get_turf(src) - if(!T) - return - var/datum/gas_mixture/GM = new - if(prob(10)) - GM.toxins += 100 - GM.temperature = 1500+T0C //should be enough to start a fire - T.visible_message("The [src] suddenly disgorges a cloud of heated plasma.") - destroy() - else - GM.toxins += 5 - GM.temperature = istype(T) ? T.air.return_temperature() : T20C - T.visible_message("The [src] suddenly disgorges a cloud of plasma.") - T.assume_air(GM) - return - -/datum/global_iterator/mecha_generator - -/datum/global_iterator/mecha_generator/process(var/obj/item/mecha_parts/mecha_equipment/generator/EG) - if(!EG.chassis) - stop() - EG.set_ready_state(1) - return 0 - if(EG.fuel.amount<=0) - stop() - EG.log_message("Deactivated - no fuel.") - EG.set_ready_state(1) - return 0 - if(anyprob(EG.reliability)) - EG.critfail() - stop() - return 0 - var/cur_charge = EG.chassis.get_charge() - if(isnull(cur_charge)) - EG.set_ready_state(1) - EG.occupant_message("No powercell detected.") - EG.log_message("Deactivated.") - stop() - return 0 - var/use_fuel = EG.fuel_per_cycle_idle - if(cur_charge[target] successfully loaded.") - chassis.log_message("Loaded [O]. Cargo compartment capacity: [cargo_holder.cargo_capacity - cargo_holder.cargo.len]") - else - chassis.occupant_message("You must hold still while handling objects!") - O.anchored = initial(O.anchored) - else - chassis.occupant_message("Not enough room in cargo compartment!") - else - chassis.occupant_message("[target] is firmly secured!") - - else if(istype(target,/mob/living)) - var/mob/living/M = target - if(M.stat>1) return - if(chassis.occupant.a_intent == "harm") - target.visible_message("[chassis] destroys [target] in an unholy fury.", \ - "[chassis] destroys [target] in an unholy fury.") - if(chassis.occupant.a_intent == "disarm") - target.visible_message("[chassis] rips [target]'s arms off.", \ - "[chassis] rips [target]'s arms off.") - else - step_away(M,chassis) - target.visible_message("[chassis] tosses [target] like a piece of paper.") - set_ready_state(0) - chassis.use_power(energy_drain) - do_after_cooldown() - return 1 diff --git a/code/game/mecha/equipment/tools/work_tools.dm b/code/game/mecha/equipment/tools/work_tools.dm new file mode 100644 index 00000000000..515fe52c2a2 --- /dev/null +++ b/code/game/mecha/equipment/tools/work_tools.dm @@ -0,0 +1,424 @@ + +//Hydraulic clamp, Kill clamp, Extinguisher, RCD, Cable layer. + + +/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp + name = "hydraulic clamp" + desc = "Equipment for engineering exosuits. Lifts objects and loads them into cargo." + icon_state = "mecha_clamp" + equip_cooldown = 15 + energy_drain = 10 + var/dam_force = 20 + var/obj/mecha/working/ripley/cargo_holder + +/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/can_attach(obj/mecha/working/ripley/M as obj) + if(..()) + if(istype(M)) + return 1 + return 0 + +/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/attach(obj/mecha/M as obj) + ..() + cargo_holder = M + return + +/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/detach(atom/moveto = null) + ..() + cargo_holder = null + +/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/action(atom/target) + if(!action_checks(target)) + return + if(!cargo_holder) + return + if(istype(target,/obj)) + var/obj/O = target + if(!O.anchored) + if(cargo_holder.cargo.len < cargo_holder.cargo_capacity) + chassis.visible_message("[chassis] lifts [target] and starts to load it into cargo compartment.") + O.anchored = 1 + if(do_after_cooldown(target)) + cargo_holder.cargo += O + O.loc = chassis + O.anchored = 0 + occupant_message("[target] successfully loaded.") + log_message("Loaded [O]. Cargo compartment capacity: [cargo_holder.cargo_capacity - cargo_holder.cargo.len]") + else + O.anchored = initial(O.anchored) + else + occupant_message("Not enough room in cargo compartment!") + else + occupant_message("[target] is firmly secured!") + + else if(istype(target,/mob/living)) + var/mob/living/M = target + if(M.stat == DEAD) return + if(chassis.occupant.a_intent == "harm") + M.take_overall_damage(dam_force) + if(!M) + return + M.adjustOxyLoss(round(dam_force/2)) + M.updatehealth() + target.visible_message("[chassis] squeezes [target].", \ + "[chassis] squeezes [target].",\ + "You hear something crack.") + add_logs(chassis.occupant, M, "attacked", object="[name]", addition="(INTENT: [uppertext(chassis.occupant.a_intent)]) (DAMTYE: [uppertext(damtype)])") + else + step_away(M,chassis) + occupant_message("You push [target] out of the way.") + chassis.visible_message("[chassis] pushes [target] out of the way.") + return 1 + + + +//This is pretty much just for the death-ripley +/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/kill + name = "\improper KILL CLAMP" + desc = "They won't know what clamped them!" + energy_drain = 0 + +/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/kill/action(atom/target) + if(!action_checks(target)) return + if(!cargo_holder) return + if(istype(target,/obj)) + var/obj/O = target + if(!O.anchored) + if(cargo_holder.cargo.len < cargo_holder.cargo_capacity) + chassis.visible_message("[chassis] lifts [target] and starts to load it into cargo compartment.") + O.anchored = 1 + if(do_after_cooldown(target)) + cargo_holder.cargo += O + O.loc = chassis + O.anchored = 0 + occupant_message("[target] successfully loaded.") + log_message("Loaded [O]. Cargo compartment capacity: [cargo_holder.cargo_capacity - cargo_holder.cargo.len]") + else + O.anchored = initial(O.anchored) + else + occupant_message("Not enough room in cargo compartment!") + else + occupant_message("[target] is firmly secured!") + + else if(istype(target,/mob/living)) + var/mob/living/M = target + if(M.stat == DEAD) return + if(chassis.occupant.a_intent == "harm") + target.visible_message("[chassis] destroys [target] in an unholy fury.", \ + "[chassis] destroys [target] in an unholy fury.") + if(chassis.occupant.a_intent == "disarm") + target.visible_message("[chassis] rips [target]'s arms off.", \ + "[chassis] rips [target]'s arms off.") + else + step_away(M,chassis) + target.visible_message("[chassis] tosses [target] like a piece of paper.") + return 1 + + + +/obj/item/mecha_parts/mecha_equipment/extinguisher + name = "exosuit extinguisher" + desc = "Equipment for engineering exosuits. A rapid-firing high capacity fire extinguisher." + icon_state = "mecha_exting" + equip_cooldown = 5 + energy_drain = 0 + range = MELEE|RANGED + +/obj/item/mecha_parts/mecha_equipment/extinguisher/New() + create_reagents(1000) + reagents.add_reagent("water", 1000) + ..() + return + +/obj/item/mecha_parts/mecha_equipment/extinguisher/action(atom/target) //copypasted from extinguisher. TODO: Rewrite from scratch. + if(!action_checks(target) || get_dist(chassis, target)>3) + return + + if(istype(target, /obj/structure/reagent_dispensers/watertank) && get_dist(chassis,target) <= 1) + var/obj/structure/reagent_dispensers/watertank/WT = target + WT.reagents.trans_to(src, 1000) + occupant_message("Extinguisher refilled.") + playsound(chassis, 'sound/effects/refill.ogg', 50, 1, -6) + else + if(reagents.total_volume > 0) + playsound(chassis, 'sound/effects/extinguish.ogg', 75, 1, -3) + var/direction = get_dir(chassis,target) + var/turf/T = get_turf(target) + var/turf/T1 = get_step(T,turn(direction, 90)) + var/turf/T2 = get_step(T,turn(direction, -90)) + + var/list/the_targets = list(T,T1,T2) + spawn(0) + for(var/a=0, a<5, a++) + var/obj/effect/effect/water/W = PoolOrNew(/obj/effect/effect/water, get_turf(chassis)) + if(!W) + return + var/turf/my_target = pick(the_targets) + var/datum/reagents/R = new/datum/reagents(5) + W.reagents = R + R.my_atom = W + reagents.trans_to(W,1) + for(var/b=0, b<4, b++) + if(!W) + return + step_towards(W,my_target) + if(!W) + return + var/turf/W_turf = get_turf(W) + W.reagents.reaction(W_turf) + for(var/atom/atm in W_turf) + W.reagents.reaction(atm) + if(W.loc == my_target) + break + sleep(2) + return 1 + +/obj/item/mecha_parts/mecha_equipment/extinguisher/get_equip_info() + return "[..()] \[[src.reagents.total_volume]\]" + +/obj/item/mecha_parts/mecha_equipment/extinguisher/on_reagent_change() + return + +/obj/item/mecha_parts/mecha_equipment/extinguisher/can_attach(obj/mecha/working/M as obj) + if(..()) + if(istype(M)) + return 1 + return 0 + + + +/obj/item/mecha_parts/mecha_equipment/rcd + name = "mounted RCD" + desc = "An exosuit-mounted Rapid Construction Device." + icon_state = "mecha_rcd" + origin_tech = "materials=4;bluespace=3;magnets=4;powerstorage=4" + equip_cooldown = 10 + energy_drain = 250 + range = MELEE|RANGED + var/mode = 0 //0 - deconstruct, 1 - wall or floor, 2 - airlock. + var/disabled = 0 //malf + +/obj/item/mecha_parts/mecha_equipment/rcd/action(atom/target) + if(istype(target,/area/shuttle)||istype(target, /turf/space/transit))//>implying these are ever made -Sieve + disabled = 1 + else + disabled = 0 + if(!istype(target, /turf) && !istype(target, /obj/machinery/door/airlock)) + target = get_turf(target) + if(!action_checks(target) || disabled || get_dist(chassis, target)>3) + return + playsound(chassis, 'sound/machines/click.ogg', 50, 1) + + switch(mode) + if(0) + if (istype(target, /turf/simulated/wall)) + var/turf/simulated/wall/W = target + occupant_message("Deconstructing [W]...") + if(do_after_cooldown(W)) + chassis.spark_system.start() + W.ChangeTurf(/turf/simulated/floor/plating) + playsound(W, 'sound/items/Deconstruct.ogg', 50, 1) + else if (istype(target, /turf/simulated/floor)) + var/turf/simulated/floor/F = target + occupant_message("Deconstructing [F]...") + if(do_after_cooldown(target)) + chassis.spark_system.start() + F.ChangeTurf(F.baseturf) + playsound(F, 'sound/items/Deconstruct.ogg', 50, 1) + else if (istype(target, /obj/machinery/door/airlock)) + occupant_message("Deconstructing [target]...") + if(do_after_cooldown(target)) + chassis.spark_system.start() + qdel(target) + playsound(target, 'sound/items/Deconstruct.ogg', 50, 1) + if(1) + if(istype(target, /turf/space)) + var/turf/space/S = target + occupant_message("Building Floor...") + if(do_after_cooldown(S)) + S.ChangeTurf(/turf/simulated/floor/plating) + playsound(S, 'sound/items/Deconstruct.ogg', 50, 1) + chassis.spark_system.start() + else if(istype(target, /turf/simulated/floor)) + var/turf/simulated/floor/F = target + occupant_message("Building Wall...") + if(do_after_cooldown(F)) + if(disabled) return + F.ChangeTurf(/turf/simulated/wall) + playsound(F, 'sound/items/Deconstruct.ogg', 50, 1) + chassis.spark_system.start() + if(2) + if(istype(target, /turf/simulated/floor)) + occupant_message("Building Airlock...") + if(do_after_cooldown(target)) + chassis.spark_system.start() + var/obj/machinery/door/airlock/T = new /obj/machinery/door/airlock(target) + T.autoclose = 1 + playsound(target, 'sound/items/Deconstruct.ogg', 50, 1) + playsound(target, 'sound/effects/sparks2.ogg', 50, 1) + + + +/obj/item/mecha_parts/mecha_equipment/rcd/do_after_cooldown(var/atom/target) + . = ..() + if(disabled) + return 0 + +/obj/item/mecha_parts/mecha_equipment/rcd/Topic(href,href_list) + ..() + if(href_list["mode"]) + mode = text2num(href_list["mode"]) + switch(mode) + if(0) + occupant_message("Switched RCD to Deconstruct.") + energy_drain = initial(energy_drain) + if(1) + occupant_message("Switched RCD to Construct.") + energy_drain = 2*initial(energy_drain) + if(2) + occupant_message("Switched RCD to Construct Airlock.") + energy_drain = 2*initial(energy_drain) + return + +/obj/item/mecha_parts/mecha_equipment/rcd/get_equip_info() + return "[..()] \[D|C|A\]" + + + + +/obj/item/mecha_parts/mecha_equipment/cable_layer + name = "cable layer" + desc = "Equipment for engineering exosuits. Lays cable along the exosuit's path." + icon_state = "mecha_wire" + var/datum/event/event + var/turf/old_turf + var/obj/structure/cable/last_piece + var/obj/item/stack/cable_coil/cable + var/max_cable = 1000 + +/obj/item/mecha_parts/mecha_equipment/cable_layer/New() + cable = new(src) + cable.amount = 0 + ..() + +/obj/item/mecha_parts/mecha_equipment/cable_layer/can_attach(obj/mecha/working/M) + if(..()) + if(istype(M)) + return 1 + return 0 + +/obj/item/mecha_parts/mecha_equipment/cable_layer/attach() + ..() + event = chassis.events.addEvent("onMove",src,"layCable") + return + +/obj/item/mecha_parts/mecha_equipment/cable_layer/detach() + chassis.events.clearEvent("onMove",event) + return ..() + +/obj/item/mecha_parts/mecha_equipment/cable_layer/Destroy() + chassis.events.clearEvent("onMove",event) + ..() + +/obj/item/mecha_parts/mecha_equipment/cable_layer/action(var/obj/item/stack/cable_coil/target) + if(!action_checks(target)) + return + if(istype(target) && target.amount) + var/cur_amount = cable? cable.amount : 0 + var/to_load = max(max_cable - cur_amount,0) + if(to_load) + to_load = min(target.amount, to_load) + if(!cable) + cable = new(src) + cable.amount = 0 + cable.amount += to_load + target.use(to_load) + occupant_message("[to_load] meters of cable successfully loaded.") + send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) + else + occupant_message("Reel is full.") + else + occupant_message("Unable to load [target] - no cable found.") + + +/obj/item/mecha_parts/mecha_equipment/cable_layer/Topic(href,href_list) + ..() + if(href_list["toggle"]) + set_ready_state(!equip_ready) + occupant_message("[src] [equip_ready?"dea":"a"]ctivated.") + log_message("[equip_ready?"Dea":"A"]ctivated.") + return + if(href_list["cut"]) + if(cable && cable.amount) + var/m = round(input(chassis.occupant,"Please specify the length of cable to cut","Cut cable",min(cable.amount,30)) as num, 1) + m = min(m, cable.amount) + if(m) + use_cable(m) + var/obj/item/stack/cable_coil/CC = new (get_turf(chassis)) + CC.amount = m + else + occupant_message("There's no more cable on the reel.") + return + +/obj/item/mecha_parts/mecha_equipment/cable_layer/get_equip_info() + var/output = ..() + if(output) + return "[output] \[Cable: [cable ? cable.amount : 0] m\][(cable && cable.amount) ? "- [!equip_ready?"Dea":"A"]ctivate|Cut" : null]" + return + +/obj/item/mecha_parts/mecha_equipment/cable_layer/proc/use_cable(amount) + if(!cable || cable.amount<1) + set_ready_state(1) + occupant_message("Cable depleted, [src] deactivated.") + log_message("Cable depleted, [src] deactivated.") + return + if(cable.amount < amount) + occupant_message("No enough cable to finish the task.") + return + cable.use(amount) + update_equip_info() + return 1 + +/obj/item/mecha_parts/mecha_equipment/cable_layer/proc/reset() + last_piece = null + +/obj/item/mecha_parts/mecha_equipment/cable_layer/proc/dismantleFloor(var/turf/new_turf) + if(istype(new_turf, /turf/simulated/floor)) + var/turf/simulated/floor/T = new_turf + if(!istype(T, /turf/simulated/floor/plating)) + if(!T.broken && !T.burnt) + new T.floor_tile(T) + T.make_plating() + return !new_turf.intact + +/obj/item/mecha_parts/mecha_equipment/cable_layer/proc/layCable(var/turf/new_turf) + if(equip_ready || !istype(new_turf) || !dismantleFloor(new_turf)) + return reset() + var/fdirn = turn(chassis.dir,180) + for(var/obj/structure/cable/LC in new_turf) // check to make sure there's not a cable there already + if(LC.d1 == fdirn || LC.d2 == fdirn) + return reset() + if(!use_cable(1)) + return reset() + var/obj/structure/cable/NC = new(new_turf) + NC.cableColor("red") + NC.d1 = 0 + NC.d2 = fdirn + NC.updateicon() + + var/datum/powernet/PN + if(last_piece && last_piece.d2 != chassis.dir) + last_piece.d1 = min(last_piece.d2, chassis.dir) + last_piece.d2 = max(last_piece.d2, chassis.dir) + last_piece.updateicon() + PN = last_piece.powernet + + if(!PN) + PN = new() + powernets += PN + NC.powernet = PN + PN.cables += NC + NC.mergeConnectedNetworks(NC.d2) + + //NC.mergeConnectedNetworksOnTurf() + last_piece = NC + return 1 diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index 0414658025d..266a0061be6 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -20,7 +20,6 @@ /obj/item/mecha_parts/mecha_equipment/weapon/action(atom/target) if(!action_checks(target)) return 0 - set_ready_state(0) var/turf/curloc = get_turf(chassis) var/turf/targloc = get_turf(target) @@ -29,6 +28,10 @@ if (targloc == curloc) return 0 + set_ready_state(0) + chassis.can_move = 0 + spawn(shot_delay*projectiles_per_shot) + chassis.can_move = 1 for(var/i=1 to get_shot_amount()) var/obj/item/projectile/A = new projectile(curloc) A.firer = chassis.occupant @@ -49,9 +52,9 @@ sleep(shot_delay) chassis.log_message("Fired from [src.name], targeting [target].") - do_after_cooldown() return 1 + //Base energy weapon type /obj/item/mecha_parts/mecha_equipment/weapon/energy name = "general energy weapon" @@ -59,10 +62,11 @@ /obj/item/mecha_parts/mecha_equipment/weapon/energy/get_shot_amount() return min(round(chassis.cell.charge / energy_drain), projectiles_per_shot) -/obj/item/mecha_parts/mecha_equipment/weapon/energy/action(atom/target) - ..() - chassis.use_power(energy_drain * get_shot_amount()) - +/obj/item/mecha_parts/mecha_equipment/weapon/energy/start_cooldown() + set_ready_state(0) + chassis.use_power(energy_drain*get_shot_amount()) + sleep(equip_cooldown) + set_ready_state(1) /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser equip_cooldown = 8 @@ -112,9 +116,9 @@ projectile = /obj/item/projectile/plasma/adv/mech fire_sound = 'sound/weapons/Laser.ogg' -/obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma/can_attach(obj/mecha/M as obj) - if(istype(M, /obj/mecha/working)) - if(M.equipment.len < M.max_equip) +/obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma/can_attach(obj/mecha/working/M as obj) + if(..()) + if(istype(M)) return 1 return 0 @@ -158,8 +162,8 @@ return 0 /obj/item/mecha_parts/mecha_equipment/weapon/honker/action(target) - if(!action_checks(target)) return 0 - set_ready_state(0) + if(!action_checks(target)) + return playsound(chassis, 'sound/items/AirHorn.ogg', 100, 1) chassis.occupant_message("HONK") for(var/mob/living/carbon/M in ohearers(6, chassis)) @@ -177,24 +181,12 @@ M.Paralyse(4) else M.Jitter(500) - /* //else the mousetraps are useless - if(istype(M, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = M - if(isobj(H.shoes)) - var/thingy = H.shoes - H.unEquip(H.shoes) - walk_away(thingy,chassis,15,2) - spawn(20) - if(thingy) - walk(thingy,0) - */ - chassis.use_power(energy_drain) + log_message("Honked from [src.name]. HONK!") var/turf/T = get_turf(src) message_admins("[key_name_admin(chassis.occupant, chassis.occupant.client)](?) (FLW) used a Mecha Honker in ([T.x],[T.y],[T.z] - JMP)",0,1) log_game("[chassis.occupant.ckey]([chassis.occupant]) used a Mecha Honker in ([T.x],[T.y],[T.z])") - do_after_cooldown() - return + return 1 //Base ballistic weapon type @@ -212,8 +204,6 @@ return 0 if(projectiles <= 0) return 0 - if(!equip_ready) - return 0 return 1 /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/get_equip_info() @@ -238,8 +228,9 @@ /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/action(atom/target) if(..()) - src.projectiles -= get_shot_amount() + projectiles -= get_shot_amount() send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",src.get_equip_info()) + return 1 /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine @@ -284,7 +275,27 @@ deviation = 0.3 shot_delay = 2 -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher + var/missile_speed = 2 + var/missile_range = 30 + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/action(target) + if(!action_checks(target)) + return + var/obj/O = new projectile(chassis.loc) + playsound(chassis, fire_sound, 50, 1) + log_message("Launched a [O.name] from [name], targeting [target].") + projectiles-- + proj_init(O) + spawn(0) + O.throw_at(target, missile_range, missile_speed, spin = 0) + return 1 + +//used for projectile initilisation (priming flashbang) and additional logging +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/proc/proj_init(var/obj/O) + return + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/missile_rack name = "\improper SRM-8 missile rack" desc = "A weapon for combat exosuits. Shoots light explosive missiles." icon_state = "mecha_missilerack" @@ -293,24 +304,12 @@ projectiles = 8 projectile_energy_cost = 1000 equip_cooldown = 60 - var/missile_speed = 2 - var/missile_range = 30 -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/action(target) - if(!action_checks(target)) return - set_ready_state(0) - var/obj/item/missile/M = new projectile(chassis.loc) +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/missile_rack/proj_init(var/obj/item/missile/M) M.primed = 1 - playsound(chassis, fire_sound, 50, 1) - M.throw_at(target, missile_range, missile_speed) - projectiles-- - log_message("Fired from [src.name], targeting [target].") var/turf/T = get_turf(src) message_admins("[key_name(chassis.occupant, chassis.occupant.client)](?) fired a [src] in ([T.x],[T.y],[T.z] - JMP)",0,1) log_game("[key_name(chassis.occupant)] fired a [src] ([T.x],[T.y],[T.z])") - do_after_cooldown() - return - /obj/item/missile icon = 'icons/obj/grenade.dmi' @@ -324,9 +323,8 @@ qdel(src) else ..() - return -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang name = "\improper SGL-6 grenade launcher" desc = "A weapon for combat exosuits. Launches primed flashbangs." icon_state = "mecha_grenadelnchr" @@ -338,24 +336,16 @@ equip_cooldown = 60 var/det_time = 20 -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/action(target) - if(!action_checks(target)) return - set_ready_state(0) - var/obj/item/weapon/grenade/flashbang/F = new projectile(chassis.loc) - playsound(chassis, fire_sound, 50, 1) - F.throw_at(target, missile_range, missile_speed) - projectiles-- - log_message("Fired from [src.name], targeting [target].") +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang/proj_init(var/obj/item/weapon/grenade/flashbang/F) var/turf/T = get_turf(src) - message_admins("[key_name(chassis.occupant, chassis.occupant.client)](?) (FLW) fired a [src] in ([T.x],[T.y],[T.z] - JMP)",0,1) + message_admins("[key_name(chassis.occupant, chassis.occupant.client)](?) fired a [src] in ([T.x],[T.y],[T.z] - JMP)",0,1) log_game("[key_name(chassis.occupant)] fired a [src] ([T.x],[T.y],[T.z])") spawn(det_time) if(F) F.prime() - do_after_cooldown() - return -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang //Because I am a heartless bastard -Sieve //Heartless? for making the poor man's honkblast? - Kaze + +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang/clusterbang //Because I am a heartless bastard -Sieve //Heartless? for making the poor man's honkblast? - Kaze name = "\improper SOB-3 grenade launcher" desc = "A weapon for combat exosuits. Launches primed clusterbangs. You monster." projectiles = 3 @@ -363,7 +353,7 @@ projectile_energy_cost = 1600 //getting off cheap seeing as this is 3 times the flashbangs held in the grenade launcher. equip_cooldown = 90 -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/banana_mortar +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/banana_mortar name = "banana mortar" desc = "Equipment for clown exosuits. Launches banana peels." icon_state = "mecha_bananamrtr" @@ -374,25 +364,13 @@ projectile_energy_cost = 100 equip_cooldown = 20 -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/banana_mortar/can_attach(obj/mecha/combat/honker/M as obj) +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/banana_mortar/can_attach(obj/mecha/combat/honker/M as obj) if(..()) if(istype(M)) return 1 return 0 -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/banana_mortar/action(target) - if(!action_checks(target)) return - set_ready_state(0) - var/obj/item/weapon/grown/bananapeel/B = new projectile(chassis.loc,60) - playsound(chassis, fire_sound, 60, 1) - B.throw_at(target, missile_range, missile_speed) - projectiles-- - log_message("Bananed from [src.name], targeting [target]. HONK!") - do_after_cooldown() - return - - -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/mousetrap_mortar +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/mousetrap_mortar name = "mousetrap mortar" desc = "Equipment for clown exosuits. Launches armed mousetraps." icon_state = "mecha_mousetrapmrtr" @@ -403,20 +381,12 @@ projectile_energy_cost = 100 equip_cooldown = 10 -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/mousetrap_mortar/can_attach(obj/mecha/combat/honker/M as obj) +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/mousetrap_mortar/can_attach(obj/mecha/combat/honker/M as obj) if(..()) if(istype(M)) return 1 return 0 -/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/mousetrap_mortar/action(target) - if(!action_checks(target)) return - set_ready_state(0) - var/obj/item/device/assembly/mousetrap/armed/M = new projectile(chassis.loc) +/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/mousetrap_mortar/proj_init(var/obj/item/device/assembly/mousetrap/armed/M) M.secured = 1 - playsound(chassis, fire_sound, 60, 1) - M.throw_at(target, missile_range, missile_speed) - projectiles-- - log_message("Launched a mouse-trap from [src.name], targeting [target]. HONK!") - do_after_cooldown() - return + diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 48f34a6faaf..35512a1429f 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -57,10 +57,6 @@ var/list/operation_req_access = list()//required access level for mecha operation var/list/internals_req_access = list(access_engine,access_robotics)//required access level to open cell compartment - var/datum/global_iterator/pr_int_temp_processor //normalizes internal air mixture temperature - var/datum/global_iterator/pr_give_air //moves air from tank to cabin - var/datum/global_iterator/pr_internal_damage //processes internal damage - var/wreckage var/list/equipment = new @@ -74,6 +70,12 @@ var/melee_cooldown = 10 var/melee_can_hit = 1 + var/datum/action/mecha/mech_eject/eject_action = new + var/datum/action/mecha/mech_toggle_internals/internals_action = new + var/datum/action/mecha/mech_cycle_equip/cycle_action = new + var/datum/action/mecha/mech_toggle_lights/lights_action = new + var/datum/action/mecha/mech_view_stats/stats_action = new + /obj/mecha/New() ..() @@ -81,14 +83,11 @@ icon_state += "-open" add_radio() add_cabin() - if(!add_airtank()) //we check this here in case mecha does not have an internal tank available by default - WIP - removeVerb(/obj/mecha/verb/connect_to_port) - removeVerb(/obj/mecha/verb/toggle_internal_tank) + add_airtank() spark_system.set_up(2, 0, src) spark_system.attach(src) add_cell() - add_iterators() - removeVerb(/obj/mecha/verb/disconnect_from_port) + SSobj.processing |= src log_message("[src.name] created.") mechas_list += src //global mech list return @@ -114,7 +113,7 @@ E.reliability = round(rand(E.reliability/3,E.reliability)) else E.detach(loc) - E.destroy() + qdel(E) if(cell) WR.crowbar_salvage += cell cell.forceMove(WR) @@ -125,22 +124,16 @@ else for(var/obj/item/mecha_parts/mecha_equipment/E in equipment) E.detach(loc) - E.destroy() + qdel(E) if(cell) qdel(cell) if(internal_tank) qdel(internal_tank) + SSobj.processing.Remove(src) equipment.Cut() cell = null internal_tank = null - - qdel(pr_int_temp_processor) - qdel(pr_give_air) - qdel(pr_internal_damage) qdel(spark_system) - pr_int_temp_processor = null - pr_give_air = null - pr_internal_damage = null spark_system = null mechas_list -= src //global mech list @@ -150,12 +143,6 @@ ////// Helpers ///////// //////////////////////// -/obj/mecha/proc/removeVerb(verb_path) - verbs -= verb_path - -/obj/mecha/proc/addVerb(verb_path) - verbs += verb_path - /obj/mecha/proc/add_airtank() internal_tank = new /obj/machinery/portable_atmospherics/canister/air(src) return internal_tank @@ -184,37 +171,16 @@ radio.icon_state = icon_state radio.subspace_transmission = 1 -/obj/mecha/proc/add_iterators() - pr_int_temp_processor = new /datum/global_iterator/mecha_preserve_temp(list(src)) - pr_give_air = new /datum/global_iterator/mecha_tank_give_air(list(src)) - pr_internal_damage = new /datum/global_iterator/mecha_internal_damage(list(src),0) - -/obj/mecha/proc/do_after(delay as num) - sleep(delay) - if(src) - return 1 - return 0 - -/obj/mecha/proc/enter_after(delay as num, var/mob/user as mob, var/numticks = 5) - var/delayfraction = delay/numticks - - var/turf/T = user.loc - - for(var/i = 0, i internal_tank.maximum_pressure && !(internal_damage & MECHA_INT_TANK_BREACH)) + setInternalDamage(MECHA_INT_TANK_BREACH) + var/datum/gas_mixture/int_tank_air = internal_tank.return_air() + if(int_tank_air && int_tank_air.return_volume()>0) //heat the air_contents + int_tank_air.temperature = min(6000+T0C, int_tank_air.temperature+rand(10,15)) + if(cabin_air && cabin_air.return_volume()>0) + cabin_air.temperature = min(6000+T0C, cabin_air.return_temperature()+rand(10,15)) + if(cabin_air.return_temperature() > max_temperature/2) + take_damage(4/round(max_temperature/cabin_air.return_temperature(),0.1),"fire") + + if(internal_damage & MECHA_INT_TEMP_CONTROL) + internal_temp_regulation = 0 + + if(internal_damage & MECHA_INT_TANK_BREACH) //remove some air from internal tank + if(internal_tank) + var/datum/gas_mixture/int_tank_air = internal_tank.return_air() + var/datum/gas_mixture/leaked_gas = int_tank_air.remove_ratio(0.10) + if(loc) + loc.assume_air(leaked_gas) + else + del(leaked_gas) + + if(internal_damage & MECHA_INT_SHORT_CIRCUIT) + if(get_charge()) + spark_system.start() + cell.charge -= min(20,cell.charge) + cell.maxcharge -= min(20,cell.maxcharge) + + if(internal_temp_regulation) + if(cabin_air && cabin_air.return_volume() > 0) + var/delta = cabin_air.temperature - T20C + cabin_air.temperature -= max(-10, min(10, round(delta/4,0.1))) + + if(internal_tank) + var/datum/gas_mixture/tank_air = internal_tank.return_air() + + var/release_pressure = internal_tank_valve + var/cabin_pressure = cabin_air.return_pressure() + var/pressure_delta = min(release_pressure - cabin_pressure, (tank_air.return_pressure() - cabin_pressure)/2) + var/transfer_moles = 0 + if(pressure_delta > 0) //cabin pressure lower than release pressure + if(tank_air.return_temperature() > 0) + transfer_moles = pressure_delta*cabin_air.return_volume()/(cabin_air.return_temperature() * R_IDEAL_GAS_EQUATION) + var/datum/gas_mixture/removed = tank_air.remove(transfer_moles) + cabin_air.merge(removed) + else if(pressure_delta < 0) //cabin pressure higher than release pressure + var/datum/gas_mixture/t_air = return_air() + pressure_delta = cabin_pressure - release_pressure + if(t_air) + pressure_delta = min(cabin_pressure - t_air.return_pressure(), pressure_delta) + if(pressure_delta > 0) //if location pressure is lower than cabin pressure + transfer_moles = pressure_delta*cabin_air.return_volume()/(cabin_air.return_temperature() * R_IDEAL_GAS_EQUATION) + var/datum/gas_mixture/removed = cabin_air.remove(transfer_moles) + if(t_air) + t_air.merge(removed) + else //just delete the cabin gas, we're in space or some shit + del(removed) + + if(occupant) + if(cell) + var/cellcharge = cell.charge/cell.maxcharge + switch(cellcharge) + if(0.75 to INFINITY) + occupant.clear_alert("charge") + if(0.5 to 0.75) + occupant.throw_alert("charge","lowcell",1) + if(0.25 to 0.5) + occupant.throw_alert("charge","lowcell",2) + if(0.01 to 0.25) + occupant.throw_alert("charge","lowcell",3) + else + occupant.throw_alert("charge","emptycell") + + var/integrity = health/initial(health)*100 + switch(integrity) + if(30 to 45) + occupant.throw_alert("mech damage", "low_mech_integrity", 1) + if(15 to 35) + occupant.throw_alert("mech damage", "low_mech_integrity", 2) + if(-INFINITY to 15) + occupant.throw_alert("mech damage", "low_mech_integrity", 3) + else + occupant.clear_alert("mech damage") + + if(occupant.loc != src) //something went wrong + occupant.clear_alert("charge") + occupant.clear_alert("mech damage") + RemoveActions(occupant, human_occupant=1) + occupant = null + + if(lights) + var/lights_energy_drain = 2 + use_power(lights_energy_drain) + + + + /obj/mecha/proc/drop_item()//Derpfix, but may be useful in future for engineering exosuits. return @@ -247,32 +321,11 @@ //////////////////////////// ///// Action processing //// //////////////////////////// -/* -/atom/DblClick(object,location,control,params) - var/mob/M = src.mob - if(M && M.in_contents_of(/obj/mecha)) - if(mech_click == world.time) return - mech_click = world.time - - if(!istype(object, /atom)) return - if(istype(object, /obj/screen)) - var/obj/screen/using = object - if(using.screen_loc == ui_acti || using.screen_loc == ui_iarrowleft || using.screen_loc == ui_iarrowright)//ignore all HUD objects save 'intent' and its arrows - return ..() - else - return - var/obj/mecha/Mech = M.loc - spawn() //this helps prevent clickspam fest. - if (Mech) - Mech.click_action(object,M) -// else -// return ..() -*/ /obj/mecha/proc/click_action(atom/target,mob/user) - if(!src.occupant || src.occupant != user ) return - if(user.stat || !user.canmove) + if(!occupant || occupant != user ) return + if(user.incapacitated()) return if(state) occupant_message("Maintenance protocols in effect.") @@ -284,49 +337,28 @@ var/dir_to_target = get_dir(src,target) if(dir_to_target && !(dir_to_target & src.dir))//wrong direction return - if(hasInternalDamage(MECHA_INT_CONTROL_LOST)) + if(internal_damage & MECHA_INT_CONTROL_LOST) target = safepick(view(3,target)) if(!target) return if(!target.Adjacent(src)) if(selected && selected.is_ranged()) - selected.action(target) + if(selected.action(target)) + selected.start_cooldown() else if(selected && selected.is_melee()) - selected.action(target) + if(selected.action(target)) + selected.start_cooldown() else - if(internal_damage&MECHA_INT_CONTROL_LOST) + if(internal_damage & MECHA_INT_CONTROL_LOST) target = safepick(oview(1,src)) if(!melee_can_hit || !istype(target, /atom)) return target.mech_melee_attack(src) melee_can_hit = 0 - if(do_after(melee_cooldown)) + spawn(melee_cooldown) melee_can_hit = 1 return -/obj/mecha/proc/mech_toxin_damage(mob/living/target) - playsound(src, 'sound/effects/spray2.ogg', 50, 1) - if(target.reagents) - if(target.reagents.get_reagent_amount("cryptobiolin") + force < force*2) - target.reagents.add_reagent("cryptobiolin", force/2) - if(target.reagents.get_reagent_amount("toxin") + force < force*2) - target.reagents.add_reagent("toxin", force/2.5) - - -/atom/proc/mech_melee_attack(obj/mecha/M) - return - -/obj/mecha/mech_melee_attack(obj/mecha/M) - if(M.damtype =="brute") - playsound(src, 'sound/weapons/punch4.ogg', 50, 1) - else if(M.damtype == "fire") - playsound(src, 'sound/items/Welder.ogg', 50, 1) - else - return - visible_message("[M.name] has hit [src].") - take_damage(M.force, damtype) - add_logs(M.occupant, src, "attacked", object=M, addition="(INTENT: [uppertext(M.occupant.a_intent)]) (DAMTYPE: [uppertext(M.damtype)])") - return /obj/mecha/proc/range_action(atom/target) return @@ -364,9 +396,6 @@ return domove(direction) /obj/mecha/proc/domove(direction) - return call((proc_res["dyndomove"]||src), "dyndomove")(direction) - -/obj/mecha/proc/dyndomove(direction) if(!can_move) return 0 if(!Process_Spacemove(direction)) @@ -374,15 +403,16 @@ if(!has_charge(step_energy_drain)) return 0 var/move_result = 0 - if(hasInternalDamage(MECHA_INT_CONTROL_LOST)) + if(internal_damage & MECHA_INT_CONTROL_LOST) move_result = mechsteprand() else if(src.dir!=direction) move_result = mechturn(direction) else move_result = mechstep(direction) if(move_result) + use_power(step_energy_drain) can_move = 0 - if(do_after(step_in)) + spawn(step_in) can_move = 1 return 1 return 0 @@ -410,15 +440,15 @@ if(istype(obstacle, /obj)) var/obj/O = obstacle if(istype(O, /obj/effect/portal)) //derpfix - src.anchored = 0 + anchored = 0 O.Crossed(src) src.anchored = 1 else if(!O.anchored) - step(obstacle,src.dir) + step(obstacle, dir) else //I have no idea why I disabled this obstacle.Bumped(src) else if(istype(obstacle, /mob)) - step(obstacle,src.dir) + step(obstacle, dir) else obstacle.Bumped(src) return @@ -430,7 +460,7 @@ /obj/mecha/proc/check_for_internal_damage(var/list/possible_int_damage,var/ignore_threshold=null) if(!islist(possible_int_damage) || isemptylist(possible_int_damage)) return if(prob(20)) - if(ignore_threshold || src.health*100/initial(src.health)Life support system reactivated.") + if(MECHA_INT_FIRE) + occupant_message("Internal fire extinquished.") + if(MECHA_INT_TANK_BREACH) + occupant_message("Damaged internal tank has been sealed.") internal_damage &= ~int_dam_flag - switch(int_dam_flag) - if(MECHA_INT_TEMP_CONTROL) - if(pr_int_temp_processor) - occupant_message("Life support system reactivated.") - pr_int_temp_processor.start() - if(MECHA_INT_FIRE) - occupant_message("Internal fire extinquished.") - if(MECHA_INT_TANK_BREACH) - occupant_message("Damaged internal tank has been sealed.") - return -//////////////////////////////////////// -//////// Health related procs //////// -//////////////////////////////////////// - -/obj/mecha/proc/take_damage(amount, type="brute") - if(amount) - var/damage = absorbDamage(amount,type) - health -= damage - update_health() - occupant_message("Taking damage!") - log_append_to_last("Took [damage] points of damage. Damage type: \"[type]\".",1) - -/obj/mecha/proc/absorbDamage(damage,damage_type) - return call((proc_res["dynabsorbdamage"]||src), "dynabsorbdamage")(damage,damage_type) - -/obj/mecha/proc/dynabsorbdamage(damage,damage_type) - return damage*(listgetindex(damage_absorption,damage_type) || 1) - - -/obj/mecha/proc/update_health() - if(src.health > 0) - src.spark_system.start() - else - qdel(src) - -/obj/mecha/attack_hulk(mob/living/carbon/human/user) - if(!prob(src.deflect_chance)) - ..(user, 1) - take_damage(15) - check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) - user.visible_message("[user] hits [src.name], doing some damage.", "You hit [src.name] with all your might. The metal creaks and bends.") - occupant_message("[user] hits [src.name], doing some damage.") - return 1 - return 0 - -/obj/mecha/attack_hand(mob/living/user as mob) - user.changeNext_move(CLICK_CD_MELEE) // Ugh. Ideally we shouldn't be setting cooldowns outside of click code. - user.do_attack_animation(src) - src.log_message("Attack by hand/paw. Attacker - [user].",1) - user.visible_message("[user] hits [src.name]. Nothing happens","You hit [src.name] with no visible effect.") - src.log_append_to_last("Armor saved.") - return - -/obj/mecha/attack_paw(mob/user as mob) - return src.attack_hand(user) - - -/obj/mecha/attack_alien(mob/living/user as mob) - src.log_message("Attack by alien. Attacker - [user].",1) - user.changeNext_move(CLICK_CD_MELEE) //Now stompy alien killer mechs are actually scary to aliens! - user.do_attack_animation(src) - if(!prob(src.deflect_chance)) - src.take_damage(15) - src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) - playsound(src.loc, 'sound/weapons/slash.ogg', 50, 1, -1) - visible_message("The [user] slashes at [src.name]'s armor!") - else - src.log_append_to_last("Armor saved.") - playsound(src.loc, 'sound/weapons/slash.ogg', 50, 1, -1) - user << "\green Your claws had no effect!" - visible_message("The [user] rebounds off [src.name]'s armor!") - return - - -/obj/mecha/attack_animal(mob/living/simple_animal/user as mob) - src.log_message("Attack by simple animal. Attacker - [user].",1) - user.changeNext_move(CLICK_CD_MELEE) - if(user.melee_damage_upper == 0) - user.emote("[user.friendly] [src]") - else - user.do_attack_animation(src) - if(!prob(src.deflect_chance)) - var/damage = rand(user.melee_damage_lower, user.melee_damage_upper) - src.take_damage(damage) - src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) - visible_message("[user] [user.attacktext] [src]!") - add_logs(user, src, "attacked", admin=0) - else - src.log_append_to_last("Armor saved.") - playsound(src.loc, 'sound/weapons/slash.ogg', 50, 1, -1) - visible_message("The [user] rebounds off [src.name]'s armor!") - add_logs(user, src, "attacked", admin=0) - return - -/obj/mecha/attack_tk() - return - -/obj/mecha/hitby(atom/movable/A as mob|obj) //wrapper - src.log_message("Hit by [A].",1) - call((proc_res["dynhitby"]||src), "dynhitby")(A) - return - -/obj/mecha/proc/dynhitby(atom/movable/A) - if(istype(A, /obj/item/mecha_parts/mecha_tracking)) - A.forceMove(src) - src.visible_message("The [A] fastens firmly to [src].") - return - if(prob(src.deflect_chance) || istype(A, /mob)) - src.visible_message("[A] bounces off the [src.name] armor") - src.log_append_to_last("Armor saved.") - if(istype(A, /mob/living)) - var/mob/living/M = A - M.take_organ_damage(10) - else if(istype(A, /obj)) - var/obj/O = A - if(O.throwforce) - src.visible_message("[src.name] is hit by [A].") - src.take_damage(O.throwforce) - src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) - return - - -/obj/mecha/bullet_act(var/obj/item/projectile/Proj) //wrapper - src.log_message("Hit by projectile. Type: [Proj.name]([Proj.flag]).",1) - call((proc_res["dynbulletdamage"]||src), "dynbulletdamage")(Proj) //calls equipment - ..() - return - -/obj/mecha/proc/dynbulletdamage(var/obj/item/projectile/Proj) - if(prob(src.deflect_chance)) - src.visible_message("The [src.name] armor deflects the projectile") - src.log_append_to_last("Armor saved.") - return - var/ignore_threshold - if(Proj.flag == "taser") - use_power(200) - return - if(istype(Proj, /obj/item/projectile/beam/pulse)) - ignore_threshold = 1 - if((Proj.damage_type == BRUTE || Proj.damage_type == BURN)) - src.take_damage(Proj.damage,Proj.flag) - src.visible_message("[src.name] is hit by [Proj].") - src.check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST,MECHA_INT_SHORT_CIRCUIT),ignore_threshold) - Proj.on_hit(src) - return - -/obj/mecha/ex_act(severity, target) - src.log_message("Affected by explosion of severity: [severity].",1) - if(prob(src.deflect_chance)) - severity++ - src.log_append_to_last("Armor saved, changing severity to [severity].") - switch(severity) - if(1.0) - qdel(src) - if(2.0) - if (prob(30)) - qdel(src) - else - src.take_damage(initial(src.health)/2) - src.check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST,MECHA_INT_SHORT_CIRCUIT),1) - if(3.0) - if (prob(5)) - qdel(src) - else - src.take_damage(initial(src.health)/5) - src.check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST,MECHA_INT_SHORT_CIRCUIT),1) - return - -/obj/mecha/blob_act() - take_damage(30, "brute") - return - -/obj/mecha/emp_act(severity) - if(get_charge()) - use_power((cell.charge/2)/severity) - take_damage(50 / severity,"energy") - src.log_message("EMP detected",1) - check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_CONTROL_LOST,MECHA_INT_SHORT_CIRCUIT),1) - return - -/obj/mecha/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(exposed_temperature>src.max_temperature) - src.log_message("Exposed to dangerous temperature.",1) - src.take_damage(5,"fire") - src.check_for_internal_damage(list(MECHA_INT_FIRE, MECHA_INT_TEMP_CONTROL)) - return - -/obj/mecha/proc/dynattackby(obj/item/weapon/W as obj, mob/living/user as mob) - user.changeNext_move(CLICK_CD_MELEE) // Ugh. Ideally we shouldn't be setting cooldowns outside of click code. - user.do_attack_animation(src) - src.log_message("Attacked by [W]. Attacker - [user]") - if(prob(src.deflect_chance)) - user << "The [W] bounces off [src.name] armor." - src.log_append_to_last("Armor saved.") - return 0 - else - user.visible_message("[user] hits [src] with [W].", "You hit [src] with [W].") - src.take_damage(W.force,W.damtype) - src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) - return 1 - -////////////////////// -////// AttackBy ////// -////////////////////// - -/obj/mecha/attackby(obj/item/W as obj, mob/user as mob, params) - - if(istype(W, /obj/item/device/mmi)) - if(mmi_move_inside(W,user)) - user << "[src]-[W] interface initialized successfuly" - else - user << "[src]-[W] interface initialization failed." - return - - if(istype(W, /obj/item/mecha_parts/mecha_equipment)) - var/obj/item/mecha_parts/mecha_equipment/E = W - spawn() - if(E.can_attach(src)) - if(!user.drop_item()) - return - E.attach(src) - user.visible_message("[user] attaches [W] to [src].", "You attach [W] to [src].") - else - user << "You were unable to attach [W] to [src]!" - return - if(istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) - if(add_req_access || maint_access) - if(internals_access_allowed(user)) - var/obj/item/weapon/card/id/id_card - if(istype(W, /obj/item/weapon/card/id)) - id_card = W - else - var/obj/item/device/pda/pda = W - id_card = pda.id - output_maintenance_dialog(id_card, user) - return - else - user << "Invalid ID: Access denied." - else - user << "Maintenance protocols disabled by operator." - else if(istype(W, /obj/item/weapon/wrench)) - if(state==1) - state = 2 - user << "You undo the securing bolts." - else if(state==2) - state = 1 - user << "You tighten the securing bolts." - return - else if(istype(W, /obj/item/weapon/crowbar)) - if(state==2) - state = 3 - user << "You open the hatch to the power unit." - else if(state==3) - state=2 - user << "You close the hatch to the power unit." - return - else if(istype(W, /obj/item/stack/cable_coil)) - if(state == 3 && hasInternalDamage(MECHA_INT_SHORT_CIRCUIT)) - var/obj/item/stack/cable_coil/CC = W - if(CC.use(2)) - clearInternalDamage(MECHA_INT_SHORT_CIRCUIT) - user << "You replace the fused wires." - else - user << "You need two lengths of cable to fix this mech!" - return - else if(istype(W, /obj/item/weapon/screwdriver)) - if(hasInternalDamage(MECHA_INT_TEMP_CONTROL)) - clearInternalDamage(MECHA_INT_TEMP_CONTROL) - user << "You repair the damaged temperature controller." - else if(state==3 && src.cell) - src.cell.forceMove(src.loc) - src.cell = null - state = 4 - user << "You unscrew and pry out the powercell." - src.log_message("Powercell removed") - else if(state==4 && src.cell) - state=3 - user << "You screw the cell in place." - return - - else if(istype(W, /obj/item/weapon/stock_parts/cell)) - if(state==4) - if(!src.cell) - if(!user.drop_item()) - return - var/obj/item/weapon/stock_parts/cell/C = W - user << "You install the powercell." - C.forceMove(src) - C.use(C.charge * 0.8) - src.cell = C - src.log_message("Powercell installed") - else - user << "There's already a powercell installed." - return - - else if(istype(W, /obj/item/weapon/weldingtool) && user.a_intent != "harm") - user.changeNext_move(CLICK_CD_MELEE) - var/obj/item/weapon/weldingtool/WT = W - if(src.healthYou repair the damaged gas tank." - else - user.visible_message("[user] repairs some damage to [src.name].") - src.health += min(10, initial(src.health)-src.health) - else - user << "The welder must be on for this task!" - return 1 - else - user << "The [src.name] is at full integrity!" - return 1 - - else if(istype(W, /obj/item/mecha_parts/mecha_tracking)) - if(!user.unEquip(W)) - user << "\the [W] is stuck to your hand, you cannot put it in \the [src]!" - return - W.forceMove(src) - user.visible_message("[user] attaches [W] to [src].", "You attach [W] to [src].") - return - - else if(!(W.flags&NOBLUDGEON)) - call((proc_res["dynattackby"]||src), "dynattackby")(W,user) - return - ///////////////////////////////////// //////////// AI piloting //////////// ///////////////////////////////////// @@ -861,7 +568,7 @@ occupant = AI icon_state = initial(icon_state) playsound(src, 'sound/machines/windowdoor.ogg', 50, 1) - if(!hasInternalDamage()) + if(!internal_damage) occupant << sound('sound/mecha/nominal.ogg',volume=50) AI.cancel_camera() AI.controlled_mech = src @@ -871,7 +578,7 @@ AI << "[interaction == AI_MECH_HACK ? "Takeover of [name] complete! You are now permanently loaded onto the onboard computer. Do not attempt to leave the station sector!" \ : "You have been uploaded to a mech's onboard computer."]" AI << "Use Middle-Mouse to activate mech functions and equipment. Click normally for AI interactions." - + GrantActions(AI) ///////////////////////////////////// //////// Atmospheric stuff //////// @@ -929,81 +636,6 @@ /obj/mecha/portableConnectorReturnAir() return internal_tank.return_air() -///////////////////////// -//////// Verbs //////// -///////////////////////// - - -/obj/mecha/verb/connect_to_port() - set name = "Connect to port" - set category = "Exosuit Interface" - set src = usr.loc - set popup_menu = 0 - - if(!can_use(usr)) - return - - var/obj/machinery/atmospherics/unary/portables_connector/possible_port = locate(/obj/machinery/atmospherics/unary/portables_connector/) in loc - if(possible_port) - if(connect(possible_port)) - src.occupant_message("[name] connects to the port.") - src.verbs += /obj/mecha/verb/disconnect_from_port - src.verbs -= /obj/mecha/verb/connect_to_port - return - else - src.occupant_message("[name] failed to connect to the port.") - return - else - src.occupant_message("Nothing happens") - - -/obj/mecha/verb/disconnect_from_port() - set name = "Disconnect from port" - set category = "Exosuit Interface" - set src = usr.loc - set popup_menu = 0 - - if(!can_use(usr)) - return - - if(disconnect()) - src.occupant_message("[name] disconnects from the port.") - src.verbs -= /obj/mecha/verb/disconnect_from_port - src.verbs += /obj/mecha/verb/connect_to_port - else - src.occupant_message("[name] is not connected to the port at the moment.") - -/obj/mecha/verb/toggle_lights() - set name = "Toggle Lights" - set category = "Exosuit Interface" - set src = usr.loc - set popup_menu = 0 - - if(!can_use(usr)) - return - - lights = !lights - if(lights) AddLuminosity(lights_power) - else AddLuminosity(-lights_power) - src.occupant_message("Toggled lights [lights?"on":"off"].") - log_message("Toggled lights [lights?"on":"off"].") - return - - -/obj/mecha/verb/toggle_internal_tank() - set name = "Toggle internal airtank usage." - set category = "Exosuit Interface" - set src = usr.loc - set popup_menu = 0 - - if(!can_use(usr)) - return - - use_internal_tank = !use_internal_tank - src.occupant_message("Now taking air from [use_internal_tank?"internal airtank":"environment"].") - src.log_message("Now taking air from [use_internal_tank?"internal airtank":"environment"].") - return - /obj/mecha/MouseDrop_T(mob/M as mob, mob/user as mob) if (!user.canUseTopic(src) || (user != M)) @@ -1034,13 +666,13 @@ visible_message("[user] starts to climb into [src.name].") - if(enter_after(40,user)) - if(src.health <= 0) + if(do_after(user, 40, target = src)) + if(health <= 0) user << "You cannot get in the [src.name], it has been destroyed!" - else if(!src.occupant) - moved_inside(user) - else if(src.occupant!=user) + else if(occupant) user << "[src.occupant] was faster! Try better next time, loser." + else + moved_inside(user) else user << "You stop entering the exosuit!" return @@ -1048,25 +680,18 @@ /obj/mecha/proc/moved_inside(var/mob/living/carbon/human/H as mob) if(H && H.client && H in range(1)) H.reset_view(src) - /* - H.client.perspective = EYE_PERSPECTIVE - H.client.eye = src - */ H.stop_pulling() H.forceMove(src) - if(H.hud_used) - last_user_hud = H.hud_used.hud_shown - H.hud_used.show_hud(HUD_STYLE_REDUCED) - - src.occupant = H - src.add_fingerprint(H) - src.forceMove(src.loc) - src.log_append_to_last("[H] moved in as pilot.") - src.icon_state = initial(icon_state) + occupant = H + add_fingerprint(H) + GrantActions(H, human_occupant=1) + forceMove(loc) + log_append_to_last("[H] moved in as pilot.") + icon_state = initial(icon_state) dir = dir_in playsound(src, 'sound/machines/windowdoor.ogg', 50, 1) - if(!hasInternalDamage()) - src.occupant << sound('sound/mecha/nominal.ogg',volume=50) + if(!internal_damage) + occupant << sound('sound/mecha/nominal.ogg',volume=50) return 1 else return 0 @@ -1089,7 +714,7 @@ visible_message("[user] starts to insert an MMI into [src.name].") - if(enter_after(40,user)) + if(do_after(user, 40, target = src)) if(!occupant) return mmi_moved_inside(mmi_as_oc,user) else @@ -1111,122 +736,65 @@ return var/mob/brainmob = mmi_as_oc.brainmob brainmob.reset_view(src) - /* - brainmob.client.eye = src - brainmob.client.perspective = EYE_PERSPECTIVE - */ occupant = brainmob brainmob.loc = src //should allow relaymove brainmob.canmove = 1 mmi_as_oc.loc = src mmi_as_oc.mecha = src - src.verbs -= /obj/mecha/verb/eject - src.icon_state = initial(icon_state) + icon_state = initial(icon_state) dir = dir_in - src.log_message("[mmi_as_oc] moved in as pilot.") - if(!hasInternalDamage()) - src.occupant << sound('sound/mecha/nominal.ogg',volume=50) + log_message("[mmi_as_oc] moved in as pilot.") + if(!internal_damage) + occupant << sound('sound/mecha/nominal.ogg',volume=50) + GrantActions(brainmob) return 1 else return 0 -/obj/mecha/verb/view_stats() - set name = "View Stats" - set category = "Exosuit Interface" - set src = usr.loc - set popup_menu = 0 - - if(!can_use(usr)) - return - //pr_update_stats.start() - src.occupant << browse(src.get_stats_html(), "window=exosuit") - return - -/* -/obj/mecha/verb/force_eject() - set category = "Object" - set name = "Force Eject" - set src in view(5) - src.go_out() - return -*/ - -/obj/mecha/verb/eject() - set name = "Eject" - set category = "Exosuit Interface" - set src = usr.loc - set popup_menu = 0 - - if(!can_use(usr)) - return - - src.go_out() - add_fingerprint(usr) - return - /obj/mecha/container_resist() go_out() -/obj/mecha/proc/go_out(var/forced) - if(!src.occupant) return +/obj/mecha/Exited(var/atom/movable/M, var/atom/newloc) + if(occupant && occupant == M) // The occupant exited the mech without calling go_out() + go_out(1, newloc) + +/obj/mecha/proc/go_out(var/forced, var/atom/newloc = loc) + if(!occupant) return var/atom/movable/mob_container + occupant.clear_alert("charge") + occupant.clear_alert("mech damage") if(ishuman(occupant)) - mob_container = src.occupant - if(occupant.hud_used && last_user_hud) - occupant.hud_used.show_hud(HUD_STYLE_STANDARD) + mob_container = occupant + RemoveActions(occupant, human_occupant=1) else if(istype(occupant, /mob/living/carbon/brain)) var/mob/living/carbon/brain/brain = occupant + RemoveActions(brain) mob_container = brain.container else if(isAI(occupant) && forced) //This should only happen if there are multiple AIs in a round, and at least one is Malf. + RemoveActions(occupant) occupant.gib() //If one Malf decides to steal a mech from another AI (even other Malfs!), they are destroyed, as they have nowhere to go when replaced. occupant = null return else return - if(mob_container.forceMove(src.loc))//ejecting mob container - /* - if(ishuman(occupant) && (return_pressure() > HAZARD_HIGH_PRESSURE)) - use_internal_tank = 0 - var/datum/gas_mixture/environment = get_turf_air() - if(environment) - var/env_pressure = environment.return_pressure() - var/pressure_delta = (cabin.return_pressure() - env_pressure) - //Can not have a pressure delta that would cause environment pressure > tank pressure - - var/transfer_moles = 0 - if(pressure_delta > 0) - transfer_moles = pressure_delta*environment.volume/(cabin.return_temperature() * R_IDEAL_GAS_EQUATION) - - //Actually transfer the gas - var/datum/gas_mixture/removed = cabin.air_contents.remove(transfer_moles) - loc.assume_air(removed) - - occupant.SetStunned(5) - occupant.SetWeakened(5) - occupant << "You were blown out of the mech!" - */ - src.log_message("[mob_container] moved out.") - occupant.reset_view() - /* - if(src.occupant.client) - src.occupant.client.eye = src.occupant.client.mob - src.occupant.client.perspective = MOB_PERSPECTIVE - */ - src.occupant << browse(null, "window=exosuit") + var/mob/living/L = occupant + occupant = null //we need it null when forceMove calls Exited(). + if(mob_container.forceMove(newloc))//ejecting mob container + log_message("[mob_container] moved out.") + L.reset_view() + L << browse(null, "window=exosuit") if(istype(mob_container, /obj/item/device/mmi)) var/obj/item/device/mmi/mmi = mob_container if(mmi.brainmob) - occupant.loc = mmi + L.loc = mmi mmi.mecha = null mmi.update_icon() - src.occupant.canmove = 0 - src.verbs += /obj/mecha/verb/eject - src.occupant = null - src.icon_state = initial(icon_state)+"-open" - src.dir = dir_in + L.canmove = 0 + icon_state = initial(icon_state)+"-open" + dir = dir_in return ///////////////////////// @@ -1244,211 +812,6 @@ return allowed(M) -//////////////////////////////////// -///// Rendering stats window /////// -//////////////////////////////////// - -/obj/mecha/proc/get_stats_html() - var/output = {" - [src.name] data - - - - -
- [src.get_stats_part()] -
-
- [src.get_equipment_list()] -
-
-
- [src.get_commands()] -
- - - "} - return output - - -/obj/mecha/proc/report_internal_damage() - var/output = null - var/list/dam_reports = list( - "[MECHA_INT_FIRE]" = "INTERNAL FIRE", - "[MECHA_INT_TEMP_CONTROL]" = "LIFE SUPPORT SYSTEM MALFUNCTION", - "[MECHA_INT_TANK_BREACH]" = "GAS TANK BREACH", - "[MECHA_INT_CONTROL_LOST]" = "COORDINATION SYSTEM CALIBRATION FAILURE - Recalibrate", - "[MECHA_INT_SHORT_CIRCUIT]" = "SHORT CIRCUIT" - ) - for(var/tflag in dam_reports) - var/intdamflag = text2num(tflag) - if(hasInternalDamage(intdamflag)) - output += dam_reports[tflag] - output += "
" - if(return_pressure() > WARNING_HIGH_PRESSURE) - output += "DANGEROUSLY HIGH CABIN PRESSURE
" - return output - - -/obj/mecha/proc/get_stats_part() - var/integrity = health/initial(health)*100 - var/cell_charge = get_charge() - var/tank_pressure = internal_tank ? round(internal_tank.return_pressure(),0.01) : "None" - var/tank_temperature = internal_tank ? internal_tank.return_temperature() : "Unknown" - var/cabin_pressure = round(return_pressure(),0.01) - var/output = {"[report_internal_damage()] - [integrity<30?"DAMAGE LEVEL CRITICAL
":null] - Integrity: [integrity]%
- Powercell charge: [isnull(cell_charge)?"No powercell installed":"[cell.percent()]%"]
- Air source: [use_internal_tank?"Internal Airtank":"Environment"]
- Airtank pressure: [tank_pressure]kPa
- Airtank temperature: [tank_temperature]°K|[tank_temperature - T0C]°C
- Cabin pressure: [cabin_pressure>WARNING_HIGH_PRESSURE ? "[cabin_pressure]": cabin_pressure]kPa
- Cabin temperature: [return_temperature()]°K|[return_temperature() - T0C]°C
- Lights: [lights?"on":"off"]
- [src.dna?"DNA-locked:
[src.dna] \[Reset\]
":null] - "} - return output - -/obj/mecha/proc/get_commands() - var/output = {"
-
Electronics
- -
-
-
Airtank
- -
- -
[get_equipment_menu()]
-
- [(/obj/mecha/verb/eject in src.verbs)?"Eject
":null] - "} - return output - -/obj/mecha/proc/get_equipment_menu() //outputs mecha html equipment menu - var/output - if(equipment.len) - output += {"
-
Equipment
-
" - return output - -/obj/mecha/proc/get_equipment_list() //outputs mecha equipment list in html - if(!equipment.len) - return - var/output = "Equipment:
" - for(var/obj/item/mecha_parts/mecha_equipment/MT in equipment) - output += "
[MT.get_equip_info()]
" - output += "
" - return output - - -/obj/mecha/proc/get_log_html() - var/output = "[src.name] Log" - for(var/list/entry in log) - output += {"
[entry["time"]] [time2text(entry["date"],"MMM DD")] [entry["year"]]
-
[entry["message"]]
- "} - output += "" - return output - - -/obj/mecha/proc/output_access_dialog(obj/item/weapon/card/id/id_card, mob/user) - if(!id_card || !user) return - var/output = {" - - - -

Following keycodes are present in this system:

"} - for(var/a in operation_req_access) - output += "[get_access_desc(a)] - Delete
" - output += "

Following keycodes were detected on portable device:

" - for(var/a in id_card.access) - if(a in operation_req_access) continue - var/a_name = get_access_desc(a) - if(!a_name) continue //there's some strange access without a name - output += "[a_name] - Add
" - output += "
Finish (Warning! The ID upload panel will be locked. It can be unlocked only through Exosuit Interface.)" - output += "" - user << browse(output, "window=exosuit_add_access") - onclose(user, "exosuit_add_access") - return - -/obj/mecha/proc/output_maintenance_dialog(obj/item/weapon/card/id/id_card,mob/user) - if(!id_card || !user) return - var/output = {" - - - - - [add_req_access?"Edit operation keycodes":null] - [maint_access?"Initiate maintenance protocol":null] - [(state>0) ?"Set Cabin Air Pressure":null] - - "} - user << browse(output, "window=exosuit_maint_console") - onclose(user, "exosuit_maint_console") - return - //////////////////////////////// /////// Messages and Log /////// @@ -1473,172 +836,6 @@ var/year = time2text(world.realtime,"YYYY") var/year_integer = text2num(year) // = 2013??? -///////////////// -///// Topic ///// -///////////////// - -/obj/mecha/Topic(href, href_list) - ..() - if(href_list["update_content"]) - if(usr != src.occupant) return - send_byjax(src.occupant,"exosuit.browser","content",src.get_stats_part()) - return - if(href_list["close"]) - return - if(usr.stat > 0) - return - var/datum/topic_input/filter = new /datum/topic_input(href,href_list) - if(href_list["select_equip"]) - if(usr != src.occupant) return - var/obj/item/mecha_parts/mecha_equipment/equip = filter.getObj("select_equip") - if(equip) - src.selected = equip - src.occupant_message("You switch to [equip]") - src.visible_message("[src] raises [equip]") - send_byjax(src.occupant,"exosuit.browser","eq_list",src.get_equipment_list()) - return - if(href_list["eject"]) - if(usr != src.occupant) return - src.eject() - return - if(href_list["toggle_lights"]) - if(usr != src.occupant) return - src.toggle_lights() - return - if(href_list["toggle_airtank"]) - if(usr != src.occupant) return - src.toggle_internal_tank() - return - if(href_list["rmictoggle"]) - if(usr != src.occupant) return - radio.broadcasting = !radio.broadcasting - send_byjax(src.occupant,"exosuit.browser","rmicstate",(radio.broadcasting?"Engaged":"Disengaged")) - return - if(href_list["rspktoggle"]) - if(usr != src.occupant) return - radio.listening = !radio.listening - send_byjax(src.occupant,"exosuit.browser","rspkstate",(radio.listening?"Engaged":"Disengaged")) - return - if(href_list["rfreq"]) - if(usr != src.occupant) return - var/new_frequency = (radio.frequency + filter.getNum("rfreq")) - if (!radio.freerange || (radio.frequency < 1200 || radio.frequency > 1600)) - new_frequency = sanitize_frequency(new_frequency) - radio.set_frequency(new_frequency) - send_byjax(src.occupant,"exosuit.browser","rfreq","[format_frequency(radio.frequency)]") - return - if(href_list["port_disconnect"]) - if(usr != src.occupant) return - src.disconnect_from_port() - return - if (href_list["port_connect"]) - if(usr != src.occupant) return - src.connect_to_port() - return - if (href_list["view_log"]) - if(usr != src.occupant) return - src.occupant << browse(src.get_log_html(), "window=exosuit_log") - onclose(occupant, "exosuit_log") - return - if (href_list["change_name"]) - if(usr != src.occupant) return - var/newname = stripped_input(occupant,"Choose new exosuit name","Rename exosuit","", MAX_NAME_LEN) - if(newname && trim(newname)) - name = newname - else - alert(occupant, "nope.avi") - return - if (href_list["toggle_id_upload"]) - if(usr != src.occupant) return - add_req_access = !add_req_access - send_byjax(src.occupant,"exosuit.browser","t_id_upload","[add_req_access?"L":"Unl"]ock ID upload panel") - return - if(href_list["toggle_maint_access"]) - if(usr != src.occupant) return - if(state) - occupant_message("Maintenance protocols in effect") - return - maint_access = !maint_access - send_byjax(src.occupant,"exosuit.browser","t_maint_access","[maint_access?"Forbid":"Permit"] maintenance protocols") - return - if(href_list["req_access"] && add_req_access) - if(!in_range(src, usr)) return - output_access_dialog(filter.getObj("id_card"),filter.getMob("user")) - return - if(href_list["maint_access"] && maint_access) - if(!in_range(src, usr)) return - var/mob/user = filter.getMob("user") - if(user) - if(state==0) - state = 1 - user << "The securing bolts are now exposed." - else if(state==1) - state = 0 - user << "The securing bolts are now hidden." - output_maintenance_dialog(filter.getObj("id_card"),user) - return - if(href_list["set_internal_tank_valve"] && state >=1) - if(!in_range(src, usr)) return - var/mob/user = filter.getMob("user") - if(user) - var/new_pressure = input(user,"Input new output pressure","Pressure setting",internal_tank_valve) as num - if(new_pressure) - internal_tank_valve = new_pressure - user << "The internal pressure valve has been set to [internal_tank_valve]kPa." - if(href_list["add_req_access"] && add_req_access && filter.getObj("id_card")) - if(!in_range(src, usr)) return - operation_req_access += filter.getNum("add_req_access") - output_access_dialog(filter.getObj("id_card"),filter.getMob("user")) - return - if(href_list["del_req_access"] && add_req_access && filter.getObj("id_card")) - if(!in_range(src, usr)) return - operation_req_access -= filter.getNum("del_req_access") - output_access_dialog(filter.getObj("id_card"),filter.getMob("user")) - return - if(href_list["finish_req_access"]) - if(!in_range(src, usr)) return - add_req_access = 0 - var/mob/user = filter.getMob("user") - user << browse(null,"window=exosuit_add_access") - return - if(href_list["dna_lock"]) - if(usr != src.occupant) - return - if(src.occupant && !iscarbon(src.occupant)) - src.occupant << " You do not have any DNA!" - return - src.dna = src.occupant.dna.unique_enzymes - src.occupant_message("You feel a prick as the needle takes your DNA sample.") - return - if(href_list["reset_dna"]) - if(usr != src.occupant) return - src.dna = null - if(href_list["repair_int_control_lost"]) - if(usr != src.occupant) return - src.occupant_message("Recalibrating coordination system...") - src.log_message("Recalibration of coordination system started.") - var/T = src.loc - if(do_after(100)) - if(T == src.loc) - src.clearInternalDamage(MECHA_INT_CONTROL_LOST) - src.occupant_message("Recalibration successful.") - src.log_message("Recalibration of coordination system finished with 0 errors.") - else - src.occupant_message("Recalibration failed!") - src.log_message("Recalibration of coordination system failed with 1 error.",1) - - //debug - /* - if(href_list["debug"]) - if(href_list["set_i_dam"]) - setInternalDamage(filter.getNum("set_i_dam")) - if(href_list["clear_i_dam"]) - clearInternalDamage(filter.getNum("clear_i_dam")) - return - */ - - return - /////////////////////// ///// Power stuff ///// /////////////////////// @@ -1647,16 +844,14 @@ var/year_integer = text2num(year) // = 2013??? return (get_charge()>=amount) /obj/mecha/proc/get_charge() - return call((proc_res["dyngetcharge"]||src), "dyngetcharge")() - -/obj/mecha/proc/dyngetcharge()//returns null if no powercell, else returns cell.charge - if(!src.cell) return - return max(0, src.cell.charge) + for(var/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/R in equipment) + var/relay_charge = R.get_charge() + if(relay_charge) + return relay_charge + if(cell) + return max(0, cell.charge) /obj/mecha/proc/use_power(amount) - return call((proc_res["dynusepower"]||src), "dynusepower")(amount) - -/obj/mecha/proc/dynusepower(amount) if(get_charge()) cell.use(amount) return 1 @@ -1672,123 +867,121 @@ var/year_integer = text2num(year) // = 2013??? return 0 -////////////////////////////////////////// -//////// Mecha global iterators //////// -////////////////////////////////////////// +//////////////////////////////////////// Action Buttons /////////////////////////////////////////////// + +/obj/mecha/proc/GrantActions(var/mob/living/user, var/human_occupant = 0) + if(human_occupant) + eject_action.chassis = src + eject_action.Grant(user) + + internals_action.chassis = src + internals_action.Grant(user) + + cycle_action.chassis = src + cycle_action.Grant(user) + + lights_action.chassis = src + lights_action.Grant(user) + + stats_action.chassis = src + stats_action.Grant(user) -/datum/global_iterator/mecha_preserve_temp //normalizing cabin air temperature to 20 degrees celsium - delay = 20 +/obj/mecha/proc/RemoveActions(var/mob/living/user, var/human_occupant = 0) + if(human_occupant) + eject_action.Remove(user) + internals_action.Remove(user) + cycle_action.Remove(user) + lights_action.Remove(user) + stats_action.Remove(user) - process(var/obj/mecha/mecha) - if(mecha.cabin_air && mecha.cabin_air.return_volume() > 0) - var/delta = mecha.cabin_air.temperature - T20C - mecha.cabin_air.temperature -= max(-10, min(10, round(delta/4,0.1))) + +/datum/action/mecha + check_flags = AB_CHECK_RESTRAINED | AB_CHECK_STUNNED | AB_CHECK_ALIVE + action_type = AB_INNATE + var/obj/mecha/chassis + + +/datum/action/mecha/mech_eject + name = "Eject From Mech" + button_icon_state = "mech_eject" + +/datum/action/mecha/mech_eject/Activate() + if(!owner || !iscarbon(owner)) return - -/datum/global_iterator/mecha_tank_give_air - delay = 15 - - process(var/obj/mecha/mecha) - if(mecha.internal_tank) - var/datum/gas_mixture/tank_air = mecha.internal_tank.return_air() - var/datum/gas_mixture/cabin_air = mecha.cabin_air - - var/release_pressure = mecha.internal_tank_valve - var/cabin_pressure = cabin_air.return_pressure() - var/pressure_delta = min(release_pressure - cabin_pressure, (tank_air.return_pressure() - cabin_pressure)/2) - var/transfer_moles = 0 - if(pressure_delta > 0) //cabin pressure lower than release pressure - if(tank_air.return_temperature() > 0) - transfer_moles = pressure_delta*cabin_air.return_volume()/(cabin_air.return_temperature() * R_IDEAL_GAS_EQUATION) - var/datum/gas_mixture/removed = tank_air.remove(transfer_moles) - cabin_air.merge(removed) - else if(pressure_delta < 0) //cabin pressure higher than release pressure - var/datum/gas_mixture/t_air = mecha.return_air() - pressure_delta = cabin_pressure - release_pressure - if(t_air) - pressure_delta = min(cabin_pressure - t_air.return_pressure(), pressure_delta) - if(pressure_delta > 0) //if location pressure is lower than cabin pressure - transfer_moles = pressure_delta*cabin_air.return_volume()/(cabin_air.return_temperature() * R_IDEAL_GAS_EQUATION) - var/datum/gas_mixture/removed = cabin_air.remove(transfer_moles) - if(t_air) - t_air.merge(removed) - else //just delete the cabin gas, we're in space or some shit - del(removed) - else - return stop() + if(!chassis || chassis.occupant != owner) return + chassis.go_out() -/datum/global_iterator/mecha_internal_damage // processing internal damage +/datum/action/mecha/mech_toggle_internals + name = "Toggle Internal Airtank Usage" + button_icon_state = "mech_toggle_internals" - process(var/obj/mecha/mecha) - if(!mecha.hasInternalDamage()) - return stop() - if(mecha.hasInternalDamage(MECHA_INT_FIRE)) - if(!mecha.hasInternalDamage(MECHA_INT_TEMP_CONTROL) && prob(5)) - mecha.clearInternalDamage(MECHA_INT_FIRE) - if(mecha.internal_tank) - if(mecha.internal_tank.return_pressure()>mecha.internal_tank.maximum_pressure && !(mecha.hasInternalDamage(MECHA_INT_TANK_BREACH))) - mecha.setInternalDamage(MECHA_INT_TANK_BREACH) - var/datum/gas_mixture/int_tank_air = mecha.internal_tank.return_air() - if(int_tank_air && int_tank_air.return_volume()>0) //heat the air_contents - int_tank_air.temperature = min(6000+T0C, int_tank_air.temperature+rand(10,15)) - if(mecha.cabin_air && mecha.cabin_air.return_volume()>0) - mecha.cabin_air.temperature = min(6000+T0C, mecha.cabin_air.return_temperature()+rand(10,15)) - if(mecha.cabin_air.return_temperature()>mecha.max_temperature/2) - mecha.take_damage(4/round(mecha.max_temperature/mecha.cabin_air.return_temperature(),0.1),"fire") - if(mecha.hasInternalDamage(MECHA_INT_TEMP_CONTROL)) //stop the mecha_preserve_temp loop datum - mecha.pr_int_temp_processor.stop() - if(mecha.hasInternalDamage(MECHA_INT_TANK_BREACH)) //remove some air from internal tank - if(mecha.internal_tank) - var/datum/gas_mixture/int_tank_air = mecha.internal_tank.return_air() - var/datum/gas_mixture/leaked_gas = int_tank_air.remove_ratio(0.10) - if(mecha.loc && hascall(mecha.loc,"assume_air")) - mecha.loc.assume_air(leaked_gas) - else - del(leaked_gas) - if(mecha.hasInternalDamage(MECHA_INT_SHORT_CIRCUIT)) - if(mecha.get_charge()) - mecha.spark_system.start() - mecha.cell.charge -= min(20,mecha.cell.charge) - mecha.cell.maxcharge -= min(20,mecha.cell.maxcharge) +/datum/action/mecha/mech_toggle_internals/Activate() + if(!owner || !chassis || chassis.occupant != owner) return + chassis.use_internal_tank = !chassis.use_internal_tank + if(chassis.use_internal_tank) + button_icon_state = "mech_toggle_internals_on" + else + button_icon_state = "mech_toggle_internals" + chassis.occupant_message("Now taking air from [chassis.use_internal_tank?"internal airtank":"environment"].") + chassis.log_message("Now taking air from [chassis.use_internal_tank?"internal airtank":"environment"].") -///////////// +/datum/action/mecha/mech_cycle_equip + name = "Cycle Equipment" + button_icon_state = "mech_cycle_equip" -//debug -/* -/obj/mecha/verb/test_int_damage() - set name = "Test internal damage" - set category = "Exosuit Interface" - set src in view(0) - if(!occupant) return - if(usr!=occupant) +/datum/action/mecha/mech_cycle_equip/Activate() + if(!owner || !chassis || chassis.occupant != owner) return - var/output = {" - - - -

Set:

- MECHA_INT_FIRE
- MECHA_INT_TEMP_CONTROL
- MECHA_INT_SHORT_CIRCUIT
- MECHA_INT_TANK_BREACH
- MECHA_INT_CONTROL_LOST
-
-

Clear:

- MECHA_INT_FIRE
- MECHA_INT_TEMP_CONTROL
- MECHA_INT_SHORT_CIRCUIT
- MECHA_INT_TANK_BREACH
- MECHA_INT_CONTROL_LOST
- - "} + if(chassis.equipment.len == 0) + chassis.occupant_message("No equipment available.") + return + if(!chassis.selected) + chassis.selected = chassis.equipment[1] + chassis.occupant_message("You select [chassis.selected]") + send_byjax(chassis.occupant,"exosuit.browser","eq_list",chassis.get_equipment_list()) + return + var/number = 0 + for(var/A in chassis.equipment) + number++ + if(A == chassis.selected) + if(chassis.equipment.len == number) + chassis.selected = null + chassis.occupant_message("You switch to no equipment") + else + chassis.selected = chassis.equipment[number+1] + chassis.occupant_message("You switch to [chassis.selected]") + send_byjax(chassis.occupant,"exosuit.browser","eq_list",chassis.get_equipment_list()) + return - occupant << browse(output, "window=ex_debug") - //src.health = initial(src.health)/2.2 - //src.check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) - return -*/ + +/datum/action/mecha/mech_toggle_lights + name = "Toggle Lights" + button_icon_state = "mech_toggle_lights" + +/datum/action/mecha/mech_toggle_lights/Activate() + if(!owner || !chassis || chassis.occupant != owner) + return + chassis.lights = !chassis.lights + if(chassis.lights) + chassis.AddLuminosity(chassis.lights_power) + button_icon_state = "mech_toggle_lights_on" + else + chassis.AddLuminosity(-chassis.lights_power) + button_icon_state = "mech_toggle_lights" + chassis.occupant_message("Toggled lights [chassis.lights?"on":"off"].") + chassis.log_message("Toggled lights [chassis.lights?"on":"off"].") + + +/datum/action/mecha/mech_view_stats + name = "View Stats" + button_icon_state = "mech_view_stats" + +/datum/action/mecha/mech_view_stats/Activate() + if(!owner || !chassis || chassis.occupant != owner) + return + chassis.occupant << browse(chassis.get_stats_html(), "window=exosuit") diff --git a/code/game/mecha/mecha_defense.dm b/code/game/mecha/mecha_defense.dm new file mode 100644 index 00000000000..3b61b31887f --- /dev/null +++ b/code/game/mecha/mecha_defense.dm @@ -0,0 +1,345 @@ + +/obj/mecha/proc/take_damage(amount, type="brute") + if(amount) + var/damage = absorbDamage(amount,type) + health -= damage + update_health() + occupant_message("Taking damage!") + log_append_to_last("Took [damage] points of damage. Damage type: \"[type]\".",1) + +/obj/mecha/proc/absorbDamage(damage,damage_type) + var/coeff = 1 + if(damage_absorption[damage_type]) + coeff = damage_absorption[damage_type] + return damage*coeff + + +/obj/mecha/proc/update_health() + if(src.health > 0) + src.spark_system.start() + else + qdel(src) + +/obj/mecha/attack_hulk(mob/living/carbon/human/user) + if(!prob(src.deflect_chance)) + ..(user, 1) + take_damage(15) + check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) + user.visible_message("[user] hits [src.name], doing some damage.", "You hit [src.name] with all your might. The metal creaks and bends.") + occupant_message("[user] hits [src.name], doing some damage.") + return 1 + return 0 + +/obj/mecha/attack_hand(mob/living/user as mob) + user.changeNext_move(CLICK_CD_MELEE) // Ugh. Ideally we shouldn't be setting cooldowns outside of click code. + user.do_attack_animation(src) + src.log_message("Attack by hand/paw. Attacker - [user].",1) + user.visible_message("[user] hits [src.name]. Nothing happens","You hit [src.name] with no visible effect.") + src.log_append_to_last("Armor saved.") + return + +/obj/mecha/attack_paw(mob/user as mob) + return src.attack_hand(user) + + +/obj/mecha/attack_alien(mob/living/user as mob) + src.log_message("Attack by alien. Attacker - [user].",1) + user.changeNext_move(CLICK_CD_MELEE) //Now stompy alien killer mechs are actually scary to aliens! + user.do_attack_animation(src) + if(!prob(src.deflect_chance)) + take_damage(15) + check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) + playsound(src.loc, 'sound/weapons/slash.ogg', 50, 1, -1) + visible_message("The [user] slashes at [src.name]'s armor!") + else + src.log_append_to_last("Armor saved.") + playsound(src.loc, 'sound/weapons/slash.ogg', 50, 1, -1) + user << "\green Your claws had no effect!" + visible_message("The [user] rebounds off [src.name]'s armor!") + return + + +/obj/mecha/attack_animal(mob/living/simple_animal/user as mob) + src.log_message("Attack by simple animal. Attacker - [user].",1) + user.changeNext_move(CLICK_CD_MELEE) + if(user.melee_damage_upper == 0) + user.emote("[user.friendly] [src]") + else + user.do_attack_animation(src) + if(!prob(src.deflect_chance)) + var/damage = rand(user.melee_damage_lower, user.melee_damage_upper) + take_damage(damage) + check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) + visible_message("[user] [user.attacktext] [src]!") + add_logs(user, src, "attacked", admin=0) + else + src.log_append_to_last("Armor saved.") + playsound(src.loc, 'sound/weapons/slash.ogg', 50, 1, -1) + visible_message("The [user] rebounds off [src.name]'s armor!") + add_logs(user, src, "attacked", admin=0) + return + +/obj/mecha/attack_tk() + return + +/obj/mecha/hitby(atom/movable/A as mob|obj) //wrapper + log_message("Hit by [A].",1) + var/deflection = deflect_chance + var/dam_coeff = 1 + var/counter_tracking = 0 + for(var/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/B in equipment) + if(B.projectile_react()) + deflection *= B.deflect_coeff + dam_coeff *= B.damage_coeff + counter_tracking = 1 + break + if(istype(A, /obj/item/mecha_parts/mecha_tracking)) + if(!counter_tracking) + A.forceMove(src) + visible_message("The [A] fastens firmly to [src].") + return + else + deflection = 100 //will bounce off + if(prob(deflection) || istype(A, /mob)) + visible_message("[A] bounces off the [src.name] armor") + log_append_to_last("Armor saved.") + if(istype(A, /mob/living)) + var/mob/living/M = A + M.take_organ_damage(10) + else if(istype(A, /obj)) + var/obj/O = A + if(O.throwforce) + visible_message("[src.name] is hit by [A].") + take_damage(O.throwforce*dam_coeff) + check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) + return + + +/obj/mecha/bullet_act(var/obj/item/projectile/Proj) //wrapper + log_message("Hit by projectile. Type: [Proj.name]([Proj.flag]).",1) + var/deflection = deflect_chance + var/dam_coeff = 1 + for(var/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/B in equipment) + if(B.projectile_react()) + deflection *= B.deflect_coeff + dam_coeff *= B.damage_coeff + break + if(prob(deflection)) + visible_message("The [src.name] armor deflects the projectile") + log_append_to_last("Armor saved.") + return + var/ignore_threshold + if(Proj.flag == "taser") + use_power(200) + return + if(istype(Proj, /obj/item/projectile/beam/pulse)) + ignore_threshold = 1 + if((Proj.damage_type == BRUTE || Proj.damage_type == BURN)) + take_damage(Proj.damage*dam_coeff,Proj.flag) + visible_message("[src.name] is hit by [Proj].") + check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST,MECHA_INT_SHORT_CIRCUIT),ignore_threshold) + Proj.on_hit(src) + +/obj/mecha/ex_act(severity, target) + src.log_message("Affected by explosion of severity: [severity].",1) + if(prob(src.deflect_chance)) + severity++ + log_append_to_last("Armor saved, changing severity to [severity].") + switch(severity) + if(1.0) + qdel(src) + if(2.0) + if (prob(30)) + qdel(src) + else + take_damage(initial(src.health)/2) + check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST,MECHA_INT_SHORT_CIRCUIT),1) + if(3.0) + if (prob(5)) + qdel(src) + else + take_damage(initial(src.health)/5) + check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST,MECHA_INT_SHORT_CIRCUIT),1) + return + +/obj/mecha/blob_act() + take_damage(30, "brute") + return + +/obj/mecha/emp_act(severity) + if(get_charge()) + use_power((cell.charge/2)/severity) + take_damage(50 / severity,"energy") + src.log_message("EMP detected",1) + check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_CONTROL_LOST,MECHA_INT_SHORT_CIRCUIT),1) + return + +/obj/mecha/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) + if(exposed_temperature>src.max_temperature) + log_message("Exposed to dangerous temperature.",1) + take_damage(5,"fire") + check_for_internal_damage(list(MECHA_INT_FIRE, MECHA_INT_TEMP_CONTROL)) + return + + +/obj/mecha/attackby(obj/item/W as obj, mob/user as mob, params) + + if(istype(W, /obj/item/device/mmi)) + if(mmi_move_inside(W,user)) + user << "[src]-[W] interface initialized successfuly" + else + user << "[src]-[W] interface initialization failed." + return + + if(istype(W, /obj/item/mecha_parts/mecha_equipment)) + var/obj/item/mecha_parts/mecha_equipment/E = W + spawn() + if(E.can_attach(src)) + if(!user.drop_item()) + return + E.attach(src) + user.visible_message("[user] attaches [W] to [src].", "You attach [W] to [src].") + else + user << "You were unable to attach [W] to [src]!" + return + if(istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda)) + if(add_req_access || maint_access) + if(internals_access_allowed(user)) + var/obj/item/weapon/card/id/id_card + if(istype(W, /obj/item/weapon/card/id)) + id_card = W + else + var/obj/item/device/pda/pda = W + id_card = pda.id + output_maintenance_dialog(id_card, user) + return + else + user << "Invalid ID: Access denied." + else + user << "Maintenance protocols disabled by operator." + else if(istype(W, /obj/item/weapon/wrench)) + if(state==1) + state = 2 + user << "You undo the securing bolts." + else if(state==2) + state = 1 + user << "You tighten the securing bolts." + return + else if(istype(W, /obj/item/weapon/crowbar)) + if(state==2) + state = 3 + user << "You open the hatch to the power unit." + else if(state==3) + state=2 + user << "You close the hatch to the power unit." + return + else if(istype(W, /obj/item/stack/cable_coil)) + if(state == 3 && (internal_damage & MECHA_INT_SHORT_CIRCUIT)) + var/obj/item/stack/cable_coil/CC = W + if(CC.use(2)) + clearInternalDamage(MECHA_INT_SHORT_CIRCUIT) + user << "You replace the fused wires." + else + user << "You need two lengths of cable to fix this mech!" + return + else if(istype(W, /obj/item/weapon/screwdriver)) + if(internal_damage & MECHA_INT_TEMP_CONTROL) + clearInternalDamage(MECHA_INT_TEMP_CONTROL) + user << "You repair the damaged temperature controller." + else if(state==3 && src.cell) + src.cell.forceMove(src.loc) + src.cell = null + state = 4 + user << "You unscrew and pry out the powercell." + src.log_message("Powercell removed") + else if(state==4 && src.cell) + state=3 + user << "You screw the cell in place." + return + + else if(istype(W, /obj/item/weapon/stock_parts/cell)) + if(state==4) + if(!src.cell) + if(!user.drop_item()) + return + var/obj/item/weapon/stock_parts/cell/C = W + user << "You install the powercell." + C.forceMove(src) + C.use(C.charge * 0.8) + src.cell = C + src.log_message("Powercell installed") + else + user << "There's already a powercell installed." + return + + else if(istype(W, /obj/item/weapon/weldingtool) && user.a_intent != "harm") + user.changeNext_move(CLICK_CD_MELEE) + var/obj/item/weapon/weldingtool/WT = W + if(src.healthYou repair the damaged gas tank.
" + else + user.visible_message("[user] repairs some damage to [src.name].") + src.health += min(10, initial(src.health)-src.health) + else + user << "The welder must be on for this task!" + return 1 + else + user << "The [src.name] is at full integrity!" + return 1 + + else if(istype(W, /obj/item/mecha_parts/mecha_tracking)) + if(!user.unEquip(W)) + user << "\the [W] is stuck to your hand, you cannot put it in \the [src]!" + return + W.forceMove(src) + user.visible_message("[user] attaches [W] to [src].", "You attach [W] to [src].") + return + + else if(!(W.flags&NOBLUDGEON)) + user.changeNext_move(CLICK_CD_MELEE) // Ugh. Ideally we shouldn't be setting cooldowns outside of click code. + user.do_attack_animation(src) + log_message("Attacked by [W]. Attacker - [user]") + var/deflection = deflect_chance + var/dam_coeff = 1 + for(var/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/B in equipment) + if(B.attack_react(user)) + deflection *= B.deflect_coeff + dam_coeff *= B.damage_coeff + break + if(prob(deflection)) + user << "The [W] bounces off [src.name] armor." + src.log_append_to_last("Armor saved.") + return 0 + else + user.visible_message("[user] hits [src] with [W].", "You hit [src] with [W].") + take_damage(round(W.force*dam_coeff),W.damtype) + check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) + return 1 + + +/obj/mecha/proc/mech_toxin_damage(mob/living/target) + playsound(src, 'sound/effects/spray2.ogg', 50, 1) + if(target.reagents) + if(target.reagents.get_reagent_amount("cryptobiolin") + force < force*2) + target.reagents.add_reagent("cryptobiolin", force/2) + if(target.reagents.get_reagent_amount("toxin") + force < force*2) + target.reagents.add_reagent("toxin", force/2.5) + + +/atom/proc/mech_melee_attack(obj/mecha/M) + return + +/obj/mecha/mech_melee_attack(obj/mecha/M) + if(M.damtype =="brute") + playsound(src, 'sound/weapons/punch4.ogg', 50, 1) + else if(M.damtype == "fire") + playsound(src, 'sound/items/Welder.ogg', 50, 1) + else + return + visible_message("[M.name] has hit [src].") + take_damage(M.force, damtype) + add_logs(M.occupant, src, "attacked", object=M, addition="(INTENT: [uppertext(M.occupant.a_intent)]) (DAMTYPE: [uppertext(M.damtype)])") + return \ No newline at end of file diff --git a/code/game/mecha/mecha_parts.dm b/code/game/mecha/mecha_parts.dm index 0e6d689b85f..ec04357cf2c 100644 --- a/code/game/mecha/mecha_parts.dm +++ b/code/game/mecha/mecha_parts.dm @@ -175,27 +175,7 @@ /obj/item/mecha_parts/chassis/firefighter/New() ..() construct = new /datum/construction/mecha/firefighter_chassis(src) -/* -/obj/item/mecha_parts/part/firefighter_torso - name="Ripley-on-Fire Torso" - icon_state = "ripley_harness" -/obj/item/mecha_parts/part/firefighter_left_arm - name="Ripley-on-Fire Left Arm" - icon_state = "ripley_l_arm" - -/obj/item/mecha_parts/part/firefighter_right_arm - name="Ripley-on-Fire Right Arm" - icon_state = "ripley_r_arm" - -/obj/item/mecha_parts/part/firefighter_left_leg - name="Ripley-on-Fire Left Leg" - icon_state = "ripley_l_leg" - -/obj/item/mecha_parts/part/firefighter_right_leg - name="Ripley-on-Fire Right Leg" - icon_state = "ripley_r_leg" -*/ ////////// HONK @@ -334,13 +314,6 @@ icon_state = "odysseus_r_leg" origin_tech = "programming=2;materials=2;engineering=2" -/*/obj/item/mecha_parts/part/odysseus_armor - name="Odysseus Carapace" - icon_state = "odysseus_armor" - origin_tech = "materials=3;engineering=3" - construction_time = 200 - construction_cost = list("metal"=15000)*/ - ///////// Circuitboards diff --git a/code/game/mecha/mecha_topic.dm b/code/game/mecha/mecha_topic.dm new file mode 100644 index 00000000000..25ba30fde4a --- /dev/null +++ b/code/game/mecha/mecha_topic.dm @@ -0,0 +1,321 @@ + +//////////////////////////////////// +///// Rendering stats window /////// +//////////////////////////////////// + +/obj/mecha/proc/get_stats_html() + var/output = {" + [src.name] data + + + + +
+ [src.get_stats_part()] +
+
+ [src.get_equipment_list()] +
+
+
+ [src.get_commands()] +
+ + + "} + return output + + +/obj/mecha/proc/report_internal_damage() + var/output = null + var/list/dam_reports = list( + "[MECHA_INT_FIRE]" = "INTERNAL FIRE", + "[MECHA_INT_TEMP_CONTROL]" = "LIFE SUPPORT SYSTEM MALFUNCTION", + "[MECHA_INT_TANK_BREACH]" = "GAS TANK BREACH", + "[MECHA_INT_CONTROL_LOST]" = "COORDINATION SYSTEM CALIBRATION FAILURE - Recalibrate", + "[MECHA_INT_SHORT_CIRCUIT]" = "SHORT CIRCUIT" + ) + for(var/tflag in dam_reports) + var/intdamflag = text2num(tflag) + if(internal_damage & intdamflag) + output += dam_reports[tflag] + output += "
" + if(return_pressure() > WARNING_HIGH_PRESSURE) + output += "DANGEROUSLY HIGH CABIN PRESSURE
" + return output + + +/obj/mecha/proc/get_stats_part() + var/integrity = health/initial(health)*100 + var/cell_charge = get_charge() + var/tank_pressure = internal_tank ? round(internal_tank.return_pressure(),0.01) : "None" + var/tank_temperature = internal_tank ? internal_tank.return_temperature() : "Unknown" + var/cabin_pressure = round(return_pressure(),0.01) + var/output = {"[report_internal_damage()] + [integrity<30?"DAMAGE LEVEL CRITICAL
":null] + Integrity: [integrity]%
+ Powercell charge: [isnull(cell_charge)?"No powercell installed":"[cell.percent()]%"]
+ Air source: [use_internal_tank?"Internal Airtank":"Environment"]
+ Airtank pressure: [tank_pressure]kPa
+ Airtank temperature: [tank_temperature]°K|[tank_temperature - T0C]°C
+ Cabin pressure: [cabin_pressure>WARNING_HIGH_PRESSURE ? "[cabin_pressure]": cabin_pressure]kPa
+ Cabin temperature: [return_temperature()]°K|[return_temperature() - T0C]°C
+ [src.dna?"DNA-locked:
[src.dna] \[Reset\]
":null] + "} + return output + +/obj/mecha/proc/get_commands() + var/output = {"
+
Electronics
+ +
+ +
[get_equipment_menu()]
+ "} + return output + +/obj/mecha/proc/get_equipment_menu() //outputs mecha html equipment menu + var/output + if(equipment.len) + output += {"
+
Equipment
+
" + return output + +/obj/mecha/proc/get_equipment_list() //outputs mecha equipment list in html + if(!equipment.len) + return + var/output = "Equipment:
" + for(var/obj/item/mecha_parts/mecha_equipment/MT in equipment) + output += "
[MT.get_equip_info()]
" + output += "
" + return output + + +/obj/mecha/proc/get_log_html() + var/output = "[src.name] Log" + for(var/list/entry in log) + output += {"
[entry["time"]] [time2text(entry["date"],"MMM DD")] [entry["year"]]
+
[entry["message"]]
+ "} + output += "" + return output + + +/obj/mecha/proc/output_access_dialog(obj/item/weapon/card/id/id_card, mob/user) + if(!id_card || !user) return + var/output = {" + + + +

Following keycodes are present in this system:

"} + for(var/a in operation_req_access) + output += "[get_access_desc(a)] - Delete
" + output += "

Following keycodes were detected on portable device:

" + for(var/a in id_card.access) + if(a in operation_req_access) continue + var/a_name = get_access_desc(a) + if(!a_name) continue //there's some strange access without a name + output += "[a_name] - Add
" + output += "
Finish (Warning! The ID upload panel will be locked. It can be unlocked only through Exosuit Interface.)" + output += "" + user << browse(output, "window=exosuit_add_access") + onclose(user, "exosuit_add_access") + return + +/obj/mecha/proc/output_maintenance_dialog(obj/item/weapon/card/id/id_card,mob/user) + if(!id_card || !user) return + var/output = {" + + + + + [add_req_access?"Edit operation keycodes":null] + [maint_access?"Initiate maintenance protocol":null] + [(state>0) ?"Set Cabin Air Pressure":null] + + "} + user << browse(output, "window=exosuit_maint_console") + onclose(user, "exosuit_maint_console") + return + + + +///////////////// +///// Topic ///// +///////////////// + +/obj/mecha/Topic(href, href_list) + ..() + if(href_list["close"]) + return + + if(usr.incapacitated()) + return + + var/datum/topic_input/filter = new /datum/topic_input(href,href_list) + + if(in_range(src, usr)) + + if(href_list["req_access"] && add_req_access) + output_access_dialog(filter.getObj("id_card"),filter.getMob("user")) + + if(href_list["maint_access"] && maint_access) + var/mob/user = filter.getMob("user") + if(user) + if(state==0) + state = 1 + user << "The securing bolts are now exposed." + else if(state==1) + state = 0 + user << "The securing bolts are now hidden." + output_maintenance_dialog(filter.getObj("id_card"),user) + + if(href_list["set_internal_tank_valve"] && state >=1) + var/mob/user = filter.getMob("user") + if(user) + var/new_pressure = input(user,"Input new output pressure","Pressure setting",internal_tank_valve) as num + if(new_pressure) + internal_tank_valve = new_pressure + user << "The internal pressure valve has been set to [internal_tank_valve]kPa." + + if(href_list["add_req_access"] && add_req_access && filter.getObj("id_card")) + operation_req_access += filter.getNum("add_req_access") + output_access_dialog(filter.getObj("id_card"),filter.getMob("user")) + + if(href_list["del_req_access"] && add_req_access && filter.getObj("id_card")) + operation_req_access -= filter.getNum("del_req_access") + output_access_dialog(filter.getObj("id_card"),filter.getMob("user")) + + if(href_list["finish_req_access"]) + add_req_access = 0 + var/mob/user = filter.getMob("user") + user << browse(null,"window=exosuit_add_access") + + if(usr != occupant) + return + + if(href_list["update_content"]) + send_byjax(src.occupant,"exosuit.browser","content",src.get_stats_part()) + + if(href_list["select_equip"]) + var/obj/item/mecha_parts/mecha_equipment/equip = filter.getObj("select_equip") + if(equip) + src.selected = equip + src.occupant_message("You switch to [equip]") + src.visible_message("[src] raises [equip]") + send_byjax(src.occupant,"exosuit.browser","eq_list",src.get_equipment_list()) + + if(href_list["rmictoggle"]) + radio.broadcasting = !radio.broadcasting + send_byjax(src.occupant,"exosuit.browser","rmicstate",(radio.broadcasting?"Engaged":"Disengaged")) + + if(href_list["rspktoggle"]) + radio.listening = !radio.listening + send_byjax(src.occupant,"exosuit.browser","rspkstate",(radio.listening?"Engaged":"Disengaged")) + + if(href_list["rfreq"]) + var/new_frequency = (radio.frequency + filter.getNum("rfreq")) + if (!radio.freerange || (radio.frequency < 1200 || radio.frequency > 1600)) + new_frequency = sanitize_frequency(new_frequency) + radio.set_frequency(new_frequency) + send_byjax(src.occupant,"exosuit.browser","rfreq","[format_frequency(radio.frequency)]") + + if (href_list["view_log"]) + src.occupant << browse(src.get_log_html(), "window=exosuit_log") + onclose(occupant, "exosuit_log") + + if (href_list["change_name"]) + var/newname = stripped_input(occupant,"Choose new exosuit name","Rename exosuit","", MAX_NAME_LEN) + if(newname && trim(newname)) + name = newname + else + alert(occupant, "nope.avi") + + if (href_list["toggle_id_upload"]) + add_req_access = !add_req_access + send_byjax(src.occupant,"exosuit.browser","t_id_upload","[add_req_access?"L":"Unl"]ock ID upload panel") + + if(href_list["toggle_maint_access"]) + if(state) + occupant_message("Maintenance protocols in effect") + return + maint_access = !maint_access + send_byjax(src.occupant,"exosuit.browser","t_maint_access","[maint_access?"Forbid":"Permit"] maintenance protocols") + + if(href_list["dna_lock"]) + if(occupant && !iscarbon(occupant)) + occupant << " You do not have any DNA!" + return + dna = src.occupant.dna.unique_enzymes + occupant_message("You feel a prick as the needle takes your DNA sample.") + + if(href_list["reset_dna"]) + dna = null + + if(href_list["repair_int_control_lost"]) + occupant_message("Recalibrating coordination system...") + log_message("Recalibration of coordination system started.") + var/T = loc + spawn(100) + if(T == loc) + clearInternalDamage(MECHA_INT_CONTROL_LOST) + occupant_message("Recalibration successful.") + log_message("Recalibration of coordination system finished with 0 errors.") + else + occupant_message("Recalibration failed!") + log_message("Recalibration of coordination system failed with 1 error.",1) + diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm index 78fcf6d541a..a83a4a8c422 100644 --- a/code/game/mecha/working/ripley.dm +++ b/code/game/mecha/working/ripley.dm @@ -13,15 +13,9 @@ var/list/cargo = new var/cargo_capacity = 15 -/* -/obj/mecha/working/ripley/New() - ..() - return -*/ - /obj/mecha/working/ripley/Move() . = ..() - if(. && (locate(/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp) in equipment)) + if(. && (locate(/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp) in equipment)) var/obj/structure/ore_box/ore_box = locate(/obj/structure/ore_box) in cargo if(ore_box) for(var/obj/item/weapon/ore/ore in get_turf(src)) @@ -29,10 +23,11 @@ update_pressure() /obj/mecha/working/ripley/Destroy() - while(src.damage_absorption.["brute"] < 0.6) - new /obj/item/asteroid/goliath_hide(src.loc) - src.damage_absorption.["brute"] = src.damage_absorption.["brute"] + 0.1 //If a goliath-plated ripley gets killed, all the plates drop - for(var/atom/movable/A in src.cargo) + var/hides = round((initial(damage_absorption["brute"]) - damage_absorption["brute"])*10) + for(var/i=0, i < hides, i++) + new /obj/item/asteroid/goliath_hide(loc) //If a goliath-plated ripley gets killed, all the plates drop + damage_absorption["brute"] = initial(damage_absorption["brute"]) + for(var/atom/movable/A in cargo) A.loc = loc step_rand(A) cargo.Cut() @@ -40,30 +35,25 @@ /obj/mecha/working/ripley/go_out() ..() - if (src.damage_absorption["brute"] < 0.6 && src.damage_absorption["brute"] > 0.3) - src.overlays = null - src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g-open") - else if (src.damage_absorption.["brute"] == 0.3) - src.overlays = null - src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g-full-open") + update_icon() /obj/mecha/working/ripley/moved_inside(var/mob/living/carbon/human/H as mob) ..() - if (src.damage_absorption["brute"] < 0.6 && src.damage_absorption["brute"] > 0.3) - src.overlays = null - src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g") - else if (src.damage_absorption["brute"] == 0.3) - src.overlays = null - src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g-full") + update_icon() /obj/mecha/working/ripley/mmi_moved_inside(var/obj/item/device/mmi/mmi_as_oc as obj,mob/user as mob) ..() - if (src.damage_absorption["brute"] < 0.6 && src.damage_absorption["brute"] > 0.3) - src.overlays = null - src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g") - else if (src.damage_absorption["brute"] == 0.3) - src.overlays = null - src.overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g-full") + update_icon() + +/obj/mecha/working/ripley/update_icon() + ..() + if (damage_absorption["brute"] < 0.6 && damage_absorption["brute"] > 0.3) + overlays = null + overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g-open") + else if (damage_absorption.["brute"] == 0.3) + overlays = null + overlays += image("icon" = "mecha.dmi", "icon_state" = "ripley-g-full-open") + /obj/mecha/working/ripley/firefighter desc = "Autonomous Power Loader Unit. This model is refitted with additional thermal protection." @@ -76,6 +66,7 @@ max_equip = 5 // More armor, less tools wreckage = /obj/structure/mecha_wreckage/ripley/firefighter + /obj/mecha/working/ripley/deathripley desc = "OH SHIT IT'S THE DEATHSQUAD WE'RE ALL GONNA DIE" name = "\improper DEATH-RIPLEY" @@ -88,7 +79,7 @@ /obj/mecha/working/ripley/deathripley/New() ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/tool/safety_clamp + var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/kill ME.attach(src) return @@ -100,10 +91,10 @@ ..() //Attach drill if(prob(25)) //Possible diamond drill... Feeling lucky? - var/obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill/D = new /obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill + var/obj/item/mecha_parts/mecha_equipment/drill/diamonddrill/D = new /obj/item/mecha_parts/mecha_equipment/drill/diamonddrill D.attach(src) else - var/obj/item/mecha_parts/mecha_equipment/tool/drill/D = new /obj/item/mecha_parts/mecha_equipment/tool/drill + var/obj/item/mecha_parts/mecha_equipment/drill/D = new /obj/item/mecha_parts/mecha_equipment/drill D.attach(src) //Add possible plasma cutter @@ -115,12 +106,12 @@ cargo.Add(new /obj/structure/ore_box(src)) //Attach hydraulic clamp - var/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp/HC = new /obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp + var/obj/item/mecha_parts/mecha_equipment/hydraulic_clamp/HC = new /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp HC.attach(src) for(var/obj/item/mecha_parts/mecha_tracking/B in src.contents)//Deletes the beacon so it can't be found easily qdel(B) - var/obj/item/mecha_parts/mecha_equipment/tool/mining_scanner/scanner = new /obj/item/mecha_parts/mecha_equipment/tool/mining_scanner + var/obj/item/mecha_parts/mecha_equipment/mining_scanner/scanner = new /obj/item/mecha_parts/mecha_equipment/mining_scanner scanner.attach(src) /obj/mecha/working/ripley/Exit(atom/movable/O) @@ -159,9 +150,9 @@ if(pressure < 20) step_in = 3 - for(var/obj/item/mecha_parts/mecha_equipment/tool/drill/drill in equipment) + for(var/obj/item/mecha_parts/mecha_equipment/drill/drill in equipment) drill.equip_cooldown = initial(drill.equip_cooldown)/2 else step_in = 5 - for(var/obj/item/mecha_parts/mecha_equipment/tool/drill/drill in equipment) + for(var/obj/item/mecha_parts/mecha_equipment/drill/drill in equipment) drill.equip_cooldown = initial(drill.equip_cooldown) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index b71cb447ff7..3879f0071e4 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -430,7 +430,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/effects/fire.dmi', "icon_s /obj/item/singularity_pull(S, current_size) spawn(0) //this is needed or multiple items will be thrown sequentially and not simultaneously if(current_size >= STAGE_FOUR) - throw_at(S,14,3) + throw_at(S,14,3, spin=0) else ..() /obj/item/acid_act(var/acidpwr, var/acid_volume) diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 6ef0a3fa4f8..26dc5d73cb7 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -243,7 +243,7 @@ var/global/list/obj/item/device/pda/PDAs = list() /obj/item/device/pda/proc/can_use(mob/user) if(user && ismob(user)) - if(user.stat || user.restrained() || user.paralysis || user.stunned || user.weakened) + if(user.incapacitated()) return 0 if(loc == user) return 1 diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 9dc2e9482ba..92004a21780 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -398,7 +398,7 @@ var/list/TYPES_SHORTCUTS = list( /obj/item/weapon/reagent_containers = "REAGENT_CONTAINERS", /obj/machinery/atmospherics = "ATMOS", /obj/machinery/portable_atmospherics = "PORT_ATMOS", - /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack = "MECHA_MISSILE_RACK", + /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/missile_rack = "MECHA_MISSILE_RACK", /obj/item/mecha_parts/mecha_equipment = "MECHA_EQUIP", ) diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index 2f3218f4e27..11bca2a452b 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -487,7 +487,7 @@ var/global/list/rockTurfEdgeCache return /* else if(istype(AM,/obj/mecha)) var/obj/mecha/M = AM - if(istype(M.selected,/obj/item/mecha_parts/mecha_equipment/tool/drill)) + if(istype(M.selected,/obj/item/mecha_parts/mecha_equipment/drill)) src.attackby(M.selected,M) return*/ //Aparantly mechs are just TOO COOL to call Bump(), so fuck em (for now) diff --git a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm index d7c223124b6..7779f227a18 100644 --- a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm +++ b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm @@ -72,7 +72,10 @@ var/const/ALIEN_AFK_BRACKET = 450 // 45 seconds else affected_mob.overlays += image('icons/mob/alien.dmi', loc = affected_mob, icon_state = "burst_stand") spawn(6) - var/mob/living/carbon/alien/larva/new_xeno = new(affected_mob.loc) + var/location = get_turf(affected_mob) + if(!location) + location = affected_mob.loc + var/mob/living/carbon/alien/larva/new_xeno = new(location) new_xeno.key = C.key new_xeno << sound('sound/voice/hiss5.ogg',0,0,0,100) //To get the player's attention if(gib_on_success) diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm index cf6548b0e05..840f19ef3bb 100644 --- a/code/modules/mob/living/silicon/ai/life.dm +++ b/code/modules/mob/living/silicon/ai/life.dm @@ -10,10 +10,12 @@ src.reset_view(null) src.unset_machine() - src.updatehealth() + updatehealth() update_gravity(mob_has_gravity()) + update_action_buttons() + if (src.malfhack) if (src.malfhack.aidisabled) src << "ERROR: APC access disabled, hack attempt canceled." diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index 90c60fc5769..44e06e7d5c2 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -26,7 +26,7 @@ var/last_failed_movement = 0//Will not move in the same dir if it couldnt before, will help with the getting stuck on fields thing var/last_warning var/consumedSupermatter = 0 //If the singularity has eaten a supermatter shard and can go to stage six - allow_spin = 0 + /obj/singularity/New(loc, var/starting_energy = 50, var/temp = 0) //CARN: admin-alert for chuckle-fuckery. admin_investigate_setup() diff --git a/code/modules/research/designs/mecha_designs.dm b/code/modules/research/designs/mecha_designs.dm index 95d25e4592b..a93cf7e7b52 100644 --- a/code/modules/research/designs/mecha_designs.dm +++ b/code/modules/research/designs/mecha_designs.dm @@ -227,7 +227,7 @@ id = "mech_grenade_launcher" build_type = MECHFAB req_tech = list("combat" = 3) - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang materials = list(MAT_METAL=22000,MAT_GOLD=6000,MAT_SILVER=8000) construction_time = 100 category = list("Exosuit Equipment") @@ -238,7 +238,7 @@ id = "mech_missile_rack" build_type = MECHFAB req_tech = list("combat" = 6, "materials" = 6) - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/missile_rack materials = list(MAT_METAL=22000,MAT_GOLD=6000,MAT_SILVER=8000) construction_time = 100 category = list("Exosuit Equipment") @@ -249,7 +249,7 @@ id = "clusterbang_launcher" build_type = MECHFAB req_tech = list("combat"= 5, "materials" = 5, "syndicate" = 3) - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/flashbang/clusterbang materials = list(MAT_METAL=20000,MAT_GOLD=10000,MAT_URANIUM=10000) construction_time = 100 category = list("Exosuit Equipment") @@ -282,7 +282,7 @@ id = "mech_rcd" build_type = MECHFAB req_tech = list("materials" = 4, "bluespace" = 3, "magnets" = 4, "powerstorage"=4, "engineering" = 4) - build_path = /obj/item/mecha_parts/mecha_equipment/tool/rcd + build_path = /obj/item/mecha_parts/mecha_equipment/rcd materials = list(MAT_METAL=30000,MAT_GOLD=20000,MAT_PLASMA=25000,MAT_SILVER=20000) construction_time = 1200 category = list("Exosuit Equipment") @@ -348,7 +348,7 @@ id = "mech_diamond_drill" build_type = MECHFAB req_tech = list("materials" = 4, "engineering" = 3) - build_path = /obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill + build_path = /obj/item/mecha_parts/mecha_equipment/drill/diamonddrill materials = list(MAT_METAL=10000,MAT_DIAMOND=6500) construction_time = 100 category = list("Exosuit Equipment") diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm index ce602a5e800..c3a14613b65 100644 --- a/code/modules/research/designs/mechfabricator_designs.dm +++ b/code/modules/research/designs/mechfabricator_designs.dm @@ -490,7 +490,7 @@ name = "Exosuit Engineering Equipment (Hydraulic Clamp)" id = "mech_hydraulic_clamp" build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp + build_path = /obj/item/mecha_parts/mecha_equipment/hydraulic_clamp materials = list(MAT_METAL=10000) construction_time = 100 category = list("Exosuit Equipment") @@ -499,7 +499,7 @@ name = "Exosuit Engineering Equipment (Drill)" id = "mech_drill" build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/tool/drill + build_path = /obj/item/mecha_parts/mecha_equipment/drill materials = list(MAT_METAL=10000) construction_time = 100 category = list("Exosuit Equipment") @@ -508,7 +508,7 @@ name = "Exosuit Engineering Equipement (Mining Scanner)" id = "mech_mscanner" build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/tool/mining_scanner + build_path = /obj/item/mecha_parts/mecha_equipment/mining_scanner materials = list(MAT_METAL=5000,MAT_GLASS=2500) construction_time = 50 category = list("Exosuit Equipment") @@ -517,7 +517,7 @@ name = "Exosuit Engineering Equipment (Extinguisher)" id = "mech_extinguisher" build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/tool/extinguisher + build_path = /obj/item/mecha_parts/mecha_equipment/extinguisher materials = list(MAT_METAL=10000) construction_time = 100 category = list("Exosuit Equipment") @@ -526,7 +526,7 @@ name = "Exosuit Engineering Equipment (Cable Layer)" id = "mech_cable_layer" build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/tool/cable_layer + build_path = /obj/item/mecha_parts/mecha_equipment/cable_layer materials = list(MAT_METAL=10000) construction_time = 100 category = list("Exosuit Equipment") @@ -535,7 +535,7 @@ name = "Exosuit Medical Equipment (Mounted Sleeper)" id = "mech_sleeper" build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/tool/sleeper + build_path = /obj/item/mecha_parts/mecha_equipment/sleeper materials = list(MAT_METAL=5000,MAT_GLASS=10000) construction_time = 100 category = list("Exosuit Equipment") @@ -544,7 +544,7 @@ name = "Exosuit Medical Equipment (Syringe Gun)" id = "mech_syringe_gun" build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/tool/syringe_gun + build_path = /obj/item/mecha_parts/mecha_equipment/syringe_gun materials = list(MAT_METAL=3000,MAT_GLASS=2000) construction_time = 200 category = list("Exosuit Equipment") @@ -580,7 +580,7 @@ name = "H.O.N.K Mousetrap Mortar" id = "mech_mousetrap_mortar" build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/mousetrap_mortar + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/mousetrap_mortar materials = list(MAT_METAL=20000,MAT_BANANIUM=5000) construction_time = 300 category = list("Exosuit Equipment") @@ -589,7 +589,7 @@ name = "H.O.N.K Banana Mortar" id = "mech_banana_mortar" build_type = MECHFAB - build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/banana_mortar + build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/banana_mortar materials = list(MAT_METAL=20000,MAT_BANANIUM=5000) construction_time = 300 category = list("Exosuit Equipment") diff --git a/data/mode.txt b/data/mode.txt index cf1ffd5c991..ef18df98db4 100644 --- a/data/mode.txt +++ b/data/mode.txt @@ -1 +1 @@ -extended \ No newline at end of file +extended diff --git a/html/changelogs/phil235-MechRefactoring.yml b/html/changelogs/phil235-MechRefactoring.yml new file mode 100644 index 00000000000..c8e188f6fc5 --- /dev/null +++ b/html/changelogs/phil235-MechRefactoring.yml @@ -0,0 +1,4 @@ +author: phil235 +delete-after: True +changes: + - rscadd: "Mechs no longer use object verbs and the exosuit interface tab. They now use action buttons. Mechs now have a cycle equipment action button to change weapon faster than by using the view stats window. Mechs get two special alerts when their battery or health is low. Mechs now properly consume energy when moving and having their lights on. Using a mech tool that takes time to act now shows a progress bar (e.g. mech drill)." diff --git a/icons/mob/actions.dmi b/icons/mob/actions.dmi index 4ced7caebed4b66461ad6c277e4396986b1b4055..0636ebac478a469a37372c34de9684144a836ceb 100644 GIT binary patch literal 29912 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ⅈ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

eR0579QX}Bu4 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 F{{T#Xq~HJm diff --git a/icons/mob/screen_alert.dmi b/icons/mob/screen_alert.dmi index 0ed43592376e0513ba34baa4f0ed1e94e3c0c729..1b707cda5e039736087908846454c09f7712ec5f 100644 GIT binary patch delta 3317 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 Ef|Zfr_y7O^ diff --git a/tgstation.dme b/tgstation.dme index f1be4b290bc..cabc33c6f09 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -215,7 +215,6 @@ #include "code\datums\helper_datums\construction_datum.dm" #include "code\datums\helper_datums\events.dm" #include "code\datums\helper_datums\getrev.dm" -#include "code\datums\helper_datums\global_iterator.dm" #include "code\datums\helper_datums\icon_snapshot.dm" #include "code\datums\helper_datums\teleport.dm" #include "code\datums\helper_datums\topic_input.dm" @@ -501,7 +500,9 @@ #include "code\game\mecha\mecha.dm" #include "code\game\mecha\mecha_construction_paths.dm" #include "code\game\mecha\mecha_control_console.dm" +#include "code\game\mecha\mecha_defense.dm" #include "code\game\mecha\mecha_parts.dm" +#include "code\game\mecha\mecha_topic.dm" #include "code\game\mecha\mecha_wreckage.dm" #include "code\game\mecha\combat\combat.dm" #include "code\game\mecha\combat\durand.dm" @@ -512,7 +513,9 @@ #include "code\game\mecha\combat\reticence.dm" #include "code\game\mecha\equipment\mecha_equipment.dm" #include "code\game\mecha\equipment\tools\medical_tools.dm" -#include "code\game\mecha\equipment\tools\tools.dm" +#include "code\game\mecha\equipment\tools\mining_tools.dm" +#include "code\game\mecha\equipment\tools\other_tools.dm" +#include "code\game\mecha\equipment\tools\work_tools.dm" #include "code\game\mecha\equipment\weapons\weapons.dm" #include "code\game\mecha\medical\medical.dm" #include "code\game\mecha\medical\odysseus.dm" From 9cc577273ff2b654d0c3efdc1a5bd794c6314e74 Mon Sep 17 00:00:00 2001 From: phil235 Date: Wed, 8 Jul 2015 02:24:29 +0200 Subject: [PATCH 13/89] added update_action_buttons to mmi life subproc Fixes seraph smoke not working. buff energy relay so it's closet to the old effect Fixes 6812 (mmi in mech cant use equipment) somehow. Moved check to prevent drilling inventory to mecha/click_action so that it also happens with an AI occupant. Fixes 9562 (verbs sometimes aren't given to the pilot) by removing the verbs Upon destroy() we delete cabin_air: Fixes 8110 Changed armor booster availability back to all mechs. Fixes repair droid overlay not updating when turned off after repair done Fixes heavy plasma cutter not being attachable to anything. --- code/_onclick/click.dm | 2 - code/game/mecha/combat/marauder.dm | 132 +++++++++--------- .../game/mecha/equipment/tools/other_tools.dm | 17 +-- code/game/mecha/equipment/weapons/weapons.dm | 7 +- code/game/mecha/mecha.dm | 7 +- code/modules/mob/living/carbon/brain/life.dm | 1 + data/mode.txt | 1 - 7 files changed, 78 insertions(+), 89 deletions(-) diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 5fafc67c934..03fd150be03 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -67,8 +67,6 @@ return if(istype(loc,/obj/mecha)) - if(!locate(/turf) in list(A,A.loc)) // Prevents inventory from being drilled - return var/obj/mecha/M = loc return M.click_action(A,src) diff --git a/code/game/mecha/combat/marauder.dm b/code/game/mecha/combat/marauder.dm index 2d39f58e103..152cb53b72d 100644 --- a/code/game/mecha/combat/marauder.dm +++ b/code/game/mecha/combat/marauder.dm @@ -24,79 +24,16 @@ var/datum/action/mecha/mech_toggle_thrusters/thrusters_action = new var/datum/action/mecha/mech_zoom/zoom_action = new +/obj/mecha/combat/marauder/New() + ..() + smoke_system.set_up(3, 0, src) + smoke_system.attach(src) + /obj/mecha/combat/marauder/Destroy() qdel(smoke_system) smoke_system = null ..() -/obj/mecha/combat/marauder/seraph - desc = "Heavy-duty, command-type exosuit. This is a custom model, utilized only by high-ranking military personnel." - name = "\improper Seraph" - icon_state = "seraph" - operation_req_access = list(access_cent_specops) - step_in = 3 - health = 550 - wreckage = /obj/structure/mecha_wreckage/seraph - internal_damage_threshold = 20 - force = 55 - max_equip = 5 - -/obj/mecha/combat/marauder/mauler - desc = "Heavy-duty, combat exosuit, developed off of the existing Marauder model." - name = "\improper Mauler" - icon_state = "mauler" - operation_req_access = list(access_syndicate) - wreckage = /obj/structure/mecha_wreckage/mauler - -/obj/mecha/combat/marauder/mauler/loaded/New() - ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/missile_rack(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster(src) - ME.attach(src) - src.smoke_system.set_up(3, 0, src) - src.smoke_system.attach(src) - return - -/obj/mecha/combat/marauder/loaded/New() - ..() - var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/energy/pulse(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/missile_rack(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster(src) - ME.attach(src) - src.smoke_system.set_up(3, 0, src) - src.smoke_system.attach(src) - return - -/obj/mecha/combat/marauder/seraph/New() - ..()//Let it equip whatever is needed. - var/obj/item/mecha_parts/mecha_equipment/ME - if(equipment.len)//Now to remove it and equip anew. - for(ME in equipment) - equipment -= ME - qdel(ME) - ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/missile_rack(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/teleporter(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay(src) - ME.attach(src) - ME = new /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster(src) - ME.attach(src) - return - /obj/mecha/combat/marauder/relaymove(mob/user,direction) if(zoom) if(world.time - last_message > 20) @@ -148,6 +85,64 @@ return output +/obj/mecha/combat/marauder/loaded/New() + ..() + var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/energy/pulse(src) + ME.attach(src) + ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/missile_rack(src) + ME.attach(src) + ME = new /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay(src) + ME.attach(src) + ME = new /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster(src) + ME.attach(src) + +/obj/mecha/combat/marauder/seraph + desc = "Heavy-duty, command-type exosuit. This is a custom model, utilized only by high-ranking military personnel." + name = "\improper Seraph" + icon_state = "seraph" + operation_req_access = list(access_cent_specops) + step_in = 3 + health = 550 + wreckage = /obj/structure/mecha_wreckage/seraph + internal_damage_threshold = 20 + force = 55 + max_equip = 5 + +/obj/mecha/combat/marauder/seraph/New() + ..() + var/obj/item/mecha_parts/mecha_equipment/ME + ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot(src) + ME.attach(src) + ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/missile_rack(src) + ME.attach(src) + ME = new /obj/item/mecha_parts/mecha_equipment/teleporter(src) + ME.attach(src) + ME = new /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay(src) + ME.attach(src) + ME = new /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster(src) + ME.attach(src) + +/obj/mecha/combat/marauder/mauler + desc = "Heavy-duty, combat exosuit, developed off of the existing Marauder model." + name = "\improper Mauler" + icon_state = "mauler" + operation_req_access = list(access_syndicate) + wreckage = /obj/structure/mecha_wreckage/mauler + +/obj/mecha/combat/marauder/mauler/loaded/New() + ..() + var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg(src) + ME.attach(src) + ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot(src) + ME.attach(src) + ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/launcher/missile_rack(src) + ME.attach(src) + ME = new /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay(src) + ME.attach(src) + ME = new /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster(src) + ME.attach(src) + + /datum/action/mecha/mech_smoke name = "Smoke" button_icon_state = "smoke" @@ -163,7 +158,6 @@ spawn(M.smoke_cooldown) M.smoke_ready = 1 - /datum/action/mecha/mech_toggle_thrusters name = "Toggle Thrusters" button_icon_state = "mech_toggle_thrusters" diff --git a/code/game/mecha/equipment/tools/other_tools.dm b/code/game/mecha/equipment/tools/other_tools.dm index 56e6aa089d2..1ae8bb1cd2b 100644 --- a/code/game/mecha/equipment/tools/other_tools.dm +++ b/code/game/mecha/equipment/tools/other_tools.dm @@ -155,11 +155,6 @@ var/deflect_coeff = 1.15 var/damage_coeff = 0.8 -/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/can_attach(obj/mecha/combat/M as obj) - if(..()) - if(istype(M)) - return 1 - /obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/get_equip_info() if(!chassis) return return "* [src.name]" @@ -182,12 +177,6 @@ var/deflect_coeff = 1.15 var/damage_coeff = 0.8 -/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/can_attach(obj/mecha/combat/M as obj) - if(..()) - if(istype(M)) - return 1 - return 0 - /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/get_equip_info() if(!chassis) return return "* [src.name]" @@ -276,7 +265,9 @@ else //no repair needed, we turn off SSobj.processing.Remove(src) set_ready_state(1) - + chassis.overlays -= droid_overlay + droid_overlay = new(src.icon, icon_state = "repair_droid") + chassis.overlays += droid_overlay @@ -357,7 +348,7 @@ pow_chan = c break if(pow_chan) - var/delta = min(15, chassis.cell.maxcharge-cur_charge) + var/delta = min(20, chassis.cell.maxcharge-cur_charge) chassis.give_power(delta) A.master.use_power(delta*coeff, pow_chan) diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index 266a0061be6..f6b3eb111d0 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -117,9 +117,10 @@ fire_sound = 'sound/weapons/Laser.ogg' /obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma/can_attach(obj/mecha/working/M as obj) - if(..()) - if(istype(M)) - return 1 + if(..()) //combat mech + return 1 + else if(M.equipment.len < M.max_equip && istype(M)) + return 1 return 0 /obj/item/projectile/beam/pulse/heavy diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 35512a1429f..3c7771236c5 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -133,6 +133,8 @@ equipment.Cut() cell = null internal_tank = null + qdel(cabin_air) + cabin_air = null qdel(spark_system) spark_system = null @@ -324,7 +326,10 @@ /obj/mecha/proc/click_action(atom/target,mob/user) - if(!occupant || occupant != user ) return + if(!occupant || occupant != user ) + return + if(!locate(/turf) in list(target,target.loc)) // Prevents inventory from being drilled + return if(user.incapacitated()) return if(state) diff --git a/code/modules/mob/living/carbon/brain/life.dm b/code/modules/mob/living/carbon/brain/life.dm index fff5bebcdeb..eb8dc6e9c65 100644 --- a/code/modules/mob/living/carbon/brain/life.dm +++ b/code/modules/mob/living/carbon/brain/life.dm @@ -147,4 +147,5 @@ /mob/living/carbon/brain/handle_regular_hud_updates() handle_vision() handle_hud_icons_health() + update_action_buttons() return 1 diff --git a/data/mode.txt b/data/mode.txt index ef18df98db4..e69de29bb2d 100644 --- a/data/mode.txt +++ b/data/mode.txt @@ -1 +0,0 @@ -extended From 63588814e271968e998ebbeb06356257eac6a3ec Mon Sep 17 00:00:00 2001 From: phil235 Date: Wed, 8 Jul 2015 13:58:53 +0200 Subject: [PATCH 14/89] derp --- code/game/mecha/mecha.dm | 16 +++++++--------- data/mode.txt | 1 + 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 3c7771236c5..1361d0f7a5f 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -647,22 +647,22 @@ return if(!ishuman(user)) // no silicons or drones in mechas. return - src.log_message("[user] tries to move in.") - if (src.occupant) - usr << "The [src.name] is already occupied!" - src.log_append_to_last("Permission denied.") + log_message("[user] tries to move in.") + if (occupant) + usr << "The [name] is already occupied!" + log_append_to_last("Permission denied.") return var/passed - if(src.dna) + if(dna) if(check_dna_integrity(user)) var/mob/living/carbon/C = user if(C.dna.unique_enzymes==src.dna) passed = 1 - else if(src.operation_allowed(user)) + else if(operation_allowed(user)) passed = 1 if(!passed) user << "Access denied." - src.log_append_to_last("Permission denied.") + log_append_to_last("Permission denied.") return for(var/mob/living/simple_animal/slime/S in range(1,user)) if(S.Victim == user) @@ -714,8 +714,6 @@ else if(dna && dna!=mmi_as_oc.brainmob.dna.unique_enzymes) user << "Stop it!" return 0 - //Added a message here since people assume their first click failed or something./N -// user << "Installing MMI, please stand by." visible_message("[user] starts to insert an MMI into [src.name].") diff --git a/data/mode.txt b/data/mode.txt index e69de29bb2d..cf1ffd5c991 100644 --- a/data/mode.txt +++ b/data/mode.txt @@ -0,0 +1 @@ +extended \ No newline at end of file From d4cdd8eaa100aa3df558d1f894db6863c4d752ad Mon Sep 17 00:00:00 2001 From: phil235 Date: Thu, 9 Jul 2015 19:49:06 +0200 Subject: [PATCH 15/89] iron foam is now blue steel color just like aluminium foam. Fixes metal foam from backpack firefighter watertank. Fixes nanofrost not freezing shut vent scrubbers. Atmos backpack watertank now starts full of water. Change foam layer to Objlayer +0.1 so that it is above foammetalstructure so it doesn't hide the dissolving animation and also above tables. Buff foam and smoke: smoke/foam contains four times the amount of reagents that was inserted in them, for balancing. Add a little more smoke clouds for tear gas grenade. Removed the no longer needed max_lifetime smoke var. Reagent_dispensers (watertank) now show how much reagents they have left upon examination. Fixed some code formatting in reagent_dispensers. Fixes nanofrost temperature lowering effect that wasn't working. Adjusted reagent volume in blob spore smoke because of the buff. Change to sorium and ldm: effect varies with created volume. If you are close to a powerful vortex you are thrown, otherwise you are just moved instead. Vortex blobs now only make you step if you are far from it when reaction hits, otherwise it throws you. The vortex blob range gets +1 to compensate. Also the range and effect depends on the reagent volume which means lower effect for blobspore smoke. --- code/ATMOSPHERICS/atmospherics.dm | 2 +- .../components/unary_devices/vent_pump.dm | 2 + .../components/unary_devices/vent_scrubber.dm | 2 + code/__HELPERS/unsorted.dm | 2 - code/game/atoms_movable.dm | 11 ++--- code/game/gamemodes/blob/blobs/blob_mobs.dm | 8 ++-- .../effects/effect_system/effects_foam.dm | 8 ++-- .../effects/effect_system/effects_smoke.dm | 9 ++-- .../items/weapons/grenades/chem_grenade.dm | 10 ++--- .../objects/items/weapons/tanks/watertank.dm | 18 +++++--- .../mob/living/carbon/human/species.dm | 2 +- code/modules/mob/living/carbon/life.dm | 2 +- .../Chemistry-Reagents/Blob-Reagents.dm | 33 ++++++++++---- code/modules/reagents/Chemistry-Recipes.dm | 31 +++++++++---- .../Chemistry-Recipes/Pyrotechnics.dm | 14 ++++-- code/modules/reagents/reagent_dispenser.dm | 45 +++++++++++-------- html/changelogs/phil235-SmokeFoamBuff.yml | 14 ++++++ 17 files changed, 135 insertions(+), 78 deletions(-) create mode 100644 html/changelogs/phil235-SmokeFoamBuff.yml diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm index 49fb54d5094..bea84778558 100644 --- a/code/ATMOSPHERICS/atmospherics.dm +++ b/code/ATMOSPHERICS/atmospherics.dm @@ -20,7 +20,7 @@ Pipelines + Other Objects -> Pipe network var/initialize_directions = 0 var/pipe_color var/obj/item/pipe/stored - var/welded = 0 //Used on pumps and scrubbers + var/welded //Used on pumps and scrubbers var/global/list/iconsetids = list() var/global/list/pipeimages = list() var/datum/pipeline/parent = null diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm index 459bf870c66..3765c5f328e 100644 --- a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm @@ -7,6 +7,8 @@ can_unwrench = 1 + welded = 0 + var/area/initial_loc level = 1 var/area_uid diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm index 9588baa7ee7..a6801c3bf0e 100644 --- a/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm +++ b/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm @@ -9,6 +9,8 @@ can_unwrench = 1 + welded = 0 + var/area/initial_loc var/id_tag = null var/frequency = 1439 diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index f83878efb29..b4e7aaaf3ce 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -514,7 +514,6 @@ Turf and target are seperate in case you want to teleport some distance from a t // returns the turf located at the map edge in the specified direction relative to A // used for mass driver /proc/get_edge_target_turf(var/atom/A, var/direction) - var/turf/target = locate(A.x, A.y, A.z) if(!A || !target) return 0 @@ -530,7 +529,6 @@ Turf and target are seperate in case you want to teleport some distance from a t target = locate(world.maxx, target.y, target.z) if(direction & WEST) target = locate(1, target.y, target.z) - return target // returns turf relative to A in given direction at set range diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index f24e6bf8e4f..e904280e175 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -94,16 +94,13 @@ return /atom/movable/Bump(var/atom/A as mob|obj|turf|area, yes) - if(src.throwing) - src.throw_impact(A) - src.throwing = 0 - + if(throwing) + throw_impact(A) + throwing = 0 if ((A && yes)) A.last_bumped = world.time A.Bumped(src) - return - ..() - return + /atom/movable/proc/forceMove(atom/destination) if(destination) diff --git a/code/game/gamemodes/blob/blobs/blob_mobs.dm b/code/game/gamemodes/blob/blobs/blob_mobs.dm index 8580c480ab1..2961be7eb35 100644 --- a/code/game/gamemodes/blob/blobs/blob_mobs.dm +++ b/code/game/gamemodes/blob/blobs/blob_mobs.dm @@ -94,16 +94,16 @@ var/turf/location = get_turf(src) // Create the reagents to put into the air - create_reagents(25) + create_reagents(5) if(overmind && overmind.blob_reagent_datum) - reagents.add_reagent(overmind.blob_reagent_datum.id, 25) + reagents.add_reagent(overmind.blob_reagent_datum.id, 5) else - reagents.add_reagent("spore", 25) + reagents.add_reagent("spore", 5) // Attach the smoke spreader and setup/start it. S.attach(location) - S.set_up(reagents, 1, 1, location, 15, 1) // only 1-2 smoke cloud + S.set_up(reagents, 1, 1, location, 15, 1) // only 1 smoke cloud S.start() ghostize() diff --git a/code/game/objects/effects/effect_system/effects_foam.dm b/code/game/objects/effects/effect_system/effects_foam.dm index 81031ea3985..49005536c82 100644 --- a/code/game/objects/effects/effect_system/effects_foam.dm +++ b/code/game/objects/effects/effect_system/effects_foam.dm @@ -7,7 +7,7 @@ opacity = 0 anchored = 1 density = 0 - layer = TURF_LAYER + 0.1 + layer = OBJ_LAYER + 0.05 //above table, below windoor/airlock/foamed metal. mouse_opacity = 0 var/amount = 3 animate_movement = 0 @@ -15,7 +15,7 @@ var/lifetime = 6 -/obj/effect/effect/foam/metal/aluminium +/obj/effect/effect/foam/metal name = "aluminium foam" metal = 1 icon_state = "mfoam" @@ -153,7 +153,7 @@ location = get_turf(loca) amount = round(sqrt(amt / 2), 1) - carry.copy_to(chemholder, carry.total_volume) + carry.copy_to(chemholder, 4*carry.total_volume) //The foam holds 4 times the total reagents volume for balance purposes. /datum/effect/effect/system/foam_spread/metal/set_up(amt=5, loca, var/datum/reagents/carry = null, var/metaltype) ..() @@ -166,7 +166,7 @@ else var/obj/effect/effect/foam/F = PoolOrNew(foamtype, location) var/foamcolor = mix_color_from_reagents(chemholder.reagents.reagent_list) - chemholder.reagents.copy_to(F, chemholder.reagents.total_volume/amount) //how much reagents each foam cell holds + chemholder.reagents.copy_to(F, chemholder.reagents.total_volume/amount) F.color = foamcolor F.amount = amount F.metal = metal diff --git a/code/game/objects/effects/effect_system/effects_smoke.dm b/code/game/objects/effects/effect_system/effects_smoke.dm index 1f447c5c1f9..f1b45cc23e4 100644 --- a/code/game/objects/effects/effect_system/effects_smoke.dm +++ b/code/game/objects/effects/effect_system/effects_smoke.dm @@ -149,11 +149,10 @@ icon = 'icons/effects/chemsmoke.dmi' icon_state = "" lifetime = 10 - var/max_lifetime = 10 /obj/effect/effect/smoke/chem/process() if(..()) - var/fraction = 1/max_lifetime + var/fraction = 1/initial(lifetime) for(var/obj/O in range(1,src)) if(O.type == src.type) continue @@ -173,7 +172,7 @@ return 0 if(!istype(M)) return 0 - var/fraction = 1/max_lifetime + var/fraction = 1/initial(lifetime) reagents.reaction(M, TOUCH, fraction) lifetime-- return 1 @@ -207,7 +206,7 @@ location = get_turf(loca) if(direct) direction = direct - carry.copy_to(chemholder, carry.total_volume) + carry.copy_to(chemholder, 4*carry.total_volume) //The smoke holds 4 times the total reagents volume for balance purposes. if(!silent) var/contained = "" @@ -256,8 +255,6 @@ else S.steps = pick(0,1,1,1,2,2,2,3) - S.max_lifetime = S.lifetime - if(chemholder.reagents.total_volume > 1) // can't split 1 very well chemholder.reagents.copy_to(S, chemholder.reagents.total_volume/number) // copy reagents to each smoke, divide evenly diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm index 2ab9f5a64dd..ab4bed24950 100644 --- a/code/game/objects/items/weapons/grenades/chem_grenade.dm +++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm @@ -355,11 +355,11 @@ var/obj/item/weapon/reagent_containers/glass/beaker/large/B1 = new(src) var/obj/item/weapon/reagent_containers/glass/beaker/large/B2 = new(src) - B1.reagents.add_reagent("condensedcapsaicin", 70) - B1.reagents.add_reagent("potassium", 30) - B2.reagents.add_reagent("phosphorus", 30) - B2.reagents.add_reagent("sugar", 30) - B1.reagents.add_reagent("condensedcapsaicin", 40) + B1.reagents.add_reagent("condensedcapsaicin", 60) + B1.reagents.add_reagent("potassium", 40) + B2.reagents.add_reagent("phosphorus", 40) + B2.reagents.add_reagent("sugar", 40) + B1.reagents.add_reagent("condensedcapsaicin", 20) beakers += B1 beakers += B2 diff --git a/code/game/objects/items/weapons/tanks/watertank.dm b/code/game/objects/items/weapons/tanks/watertank.dm index 08808afdc04..7ab76a4e520 100644 --- a/code/game/objects/items/weapons/tanks/watertank.dm +++ b/code/game/objects/items/weapons/tanks/watertank.dm @@ -191,6 +191,10 @@ item_state = "waterbackpackatmos" volume = 200 +/obj/item/weapon/watertank/atmos/New() + ..() + reagents.add_reagent("water", 200) + /obj/item/weapon/watertank/atmos/make_noz() return new /obj/item/weapon/extinguisher/mini/nozzle(src) @@ -294,8 +298,7 @@ F.amount = 0 metal_synthesis_cooldown++ spawn(100) - if(src) - metal_synthesis_cooldown-- + metal_synthesis_cooldown-- else user << "Metal foam mix is still being synthesized..." return @@ -333,7 +336,7 @@ var/turf/simulated/T = A if(T.air) var/datum/gas_mixture/G = T.air - if(get_dist(T, src) < 2) // Otherwise we'll get silliness like people using Nanofrost to kill people through walls with cold air + if(get_dist(T, location) < 2) // Otherwise we'll get silliness like people using Nanofrost to kill people through walls with cold air G.temperature = 2 T.air_update_turf() for(var/obj/effect/hotspot/H in T) @@ -341,10 +344,11 @@ if(G.toxins) G.nitrogen += (G.toxins) G.toxins = 0 - for(var/obj/machinery/atmospherics/unary/vent_pump/V in T) - V.welded = 1 - V.update_icon() - V.visible_message("[V] was frozen shut!") + for(var/obj/machinery/atmospherics/unary/U in T) + if(!isnull(U.welded) && !U.welded) //must be an unwelded vent pump or vent scrubber. + U.welded = 1 + U.update_icon() + U.visible_message("[U] was frozen shut!") for(var/mob/living/L in T) L.ExtinguishMob() for(var/obj/item/Item in T) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 5f9ea9ff9d8..45396b99eba 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1177,7 +1177,7 @@ if(!H.has_smoke_protection()) for(var/obj/effect/effect/smoke/chem/S in range(1, H)) if(S.reagents.total_volume && S.lifetime) - var/fraction = 1/S.max_lifetime + var/fraction = 1/initial(S.lifetime) S.reagents.reaction(H,INGEST, fraction) var/amount = round(S.reagents.total_volume*fraction,0.1) S.reagents.copy_to(H, amount) diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index b019a52ab44..df487d56b87 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -73,7 +73,7 @@ if(!has_smoke_protection()) for(var/obj/effect/effect/smoke/chem/S in range(1, src)) if(S.reagents.total_volume && S.lifetime) - var/fraction = 1/S.max_lifetime + var/fraction = 1/initial(S.lifetime) S.reagents.reaction(src,INGEST, fraction) var/amount = round(S.reagents.total_volume*fraction,0.1) S.reagents.copy_to(src, amount) diff --git a/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm index 19826ce0d21..da820b5d877 100644 --- a/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm @@ -173,16 +173,31 @@ /datum/reagent/blob/proc/reagent_vortex(var/mob/living/M as mob, var/setting_type) var/turf/pull = get_turf(M) - for(var/atom/movable/X in range(4,pull)) - if(istype(X, /atom/movable)) - if((X) && !X.anchored) - if(setting_type) - step_away(X,pull) - step_away(X,pull) - step_away(X,pull) - step_away(X,pull) + var/range_power = Clamp(round(volume/5, 1), 1, 5) + for(var/atom/movable/X in range(range_power,pull)) + if(X && !X.anchored) + var/distance = get_dist(X, pull) + var/moving_power = max(range_power - distance, 1) + spawn(0) + if(moving_power > 2) //if the vortex is powerful and we're close, we get thrown + if(setting_type) + var/atom/throw_target = get_edge_target_turf(X, get_dir(X, get_step_away(X, pull))) + var/throw_range = 5 - distance + X.throw_at(throw_target, throw_range, 1) + else + X.throw_at(pull, distance, 1) else - X.throw_at(pull) + if(setting_type) + for(var/i = 0, i < moving_power, i++) + sleep(2) + if(!step_away(X, pull)) + break + else + for(var/i = 0, i < moving_power, i++) + sleep(2) + if(!step_towards(X, pull)) + break + /datum/reagent/blob/proc/send_message(var/mob/living/M as mob) var/totalmessage = message diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm index 9555c8a126a..f632e72e590 100644 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ b/code/modules/reagents/Chemistry-Recipes.dm @@ -78,15 +78,28 @@ for(var/j = 1, j <= rand(1, 3), j++) step(C, pick(NORTH,SOUTH,EAST,WEST)) -/datum/chemical_reaction/proc/goonchem_vortex(var/turf/simulated/T, var/setting_type, var/range, var/pull_times) +/datum/chemical_reaction/proc/goonchem_vortex(var/turf/simulated/T, var/setting_type, var/range) for(var/atom/movable/X in orange(range, T)) if(istype(X, /obj/effect)) - continue //stop pulling smoke and hotspots please - if(istype(X, /atom/movable)) - if((X) && !X.anchored) - if(setting_type) - for(var/i = 0, i < pull_times, i++) - step_away(X,T) + continue + if(X && !X.anchored) + var/distance = get_dist(X, T) + var/moving_power = max(range - distance, 1) + spawn(0) //so everything moves at the same time. + if(moving_power > 2) //if the vortex is powerful and we're close, we get thrown + if(setting_type) + var/atom/throw_target = get_edge_target_turf(X, get_dir(X, get_step_away(X, T))) + X.throw_at(throw_target, moving_power, 1) + else + X.throw_at(T, moving_power, 1) else - for(var/i = 0, i < pull_times, i++) - step_towards(X,T) \ No newline at end of file + if(setting_type) + for(var/i = 0, i < moving_power, i++) + sleep(2) + if(!step_away(X, T)) + break + else + for(var/i = 0, i < moving_power, i++) + sleep(2) + if(!step_towards(X, T)) + break \ No newline at end of file diff --git a/code/modules/reagents/Chemistry-Recipes/Pyrotechnics.dm b/code/modules/reagents/Chemistry-Recipes/Pyrotechnics.dm index ba20b7c7817..ecfbf01d851 100644 --- a/code/modules/reagents/Chemistry-Recipes/Pyrotechnics.dm +++ b/code/modules/reagents/Chemistry-Recipes/Pyrotechnics.dm @@ -124,18 +124,21 @@ return holder.remove_reagent("sorium", created_volume) var/turf/simulated/T = get_turf(holder.my_atom) - goonchem_vortex(T, 1, 5, 6) + var/range = Clamp(sqrt(created_volume), 1, 6) + goonchem_vortex(T, 1, range) /datum/chemical_reaction/sorium_vortex name = "sorium_vortex" id = "sorium_vortex" result = null + result_amount = 1 required_reagents = list("sorium" = 1) required_temp = 474 /datum/chemical_reaction/sorium_vortex/on_reaction(var/datum/reagents/holder, var/created_volume) var/turf/simulated/T = get_turf(holder.my_atom) - goonchem_vortex(T, 1, 5, 6) + var/range = Clamp(sqrt(created_volume), 1, 6) + goonchem_vortex(T, 1, range) /datum/chemical_reaction/liquid_dark_matter @@ -150,18 +153,21 @@ return holder.remove_reagent("liquid_dark_matter", created_volume) var/turf/simulated/T = get_turf(holder.my_atom) - goonchem_vortex(T, 0, 5, 6) + var/range = Clamp(sqrt(created_volume), 1, 6) + goonchem_vortex(T, 0, range) /datum/chemical_reaction/ldm_vortex name = "LDM Vortex" id = "ldm_vortex" result = null + result_amount = 1 required_reagents = list("liquid_dark_matter" = 1) required_temp = 474 /datum/chemical_reaction/ldm_vortex/on_reaction(var/datum/reagents/holder, var/created_volume) var/turf/simulated/T = get_turf(holder.my_atom) - goonchem_vortex(T, 0, 5, 6) + var/range = Clamp(sqrt(created_volume/2), 1, 6) + goonchem_vortex(T, 0, range) /datum/chemical_reaction/flash_powder name = "Flash powder" diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 553f6c9cfbc..23730bc7565 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -49,6 +49,10 @@ if (N) amount_per_transfer_from_this = N +/obj/structure/reagent_dispensers/examine(mob/user) + ..() + user << "It contains [reagents.total_volume] units." + //Dispensers /obj/structure/reagent_dispensers/watertank name = "watertank" @@ -56,9 +60,10 @@ icon = 'icons/obj/objects.dmi' icon_state = "watertank" amount_per_transfer_from_this = 10 - New() - ..() - reagents.add_reagent("water",1000) + +/obj/structure/reagent_dispensers/watertank/New() + ..() + reagents.add_reagent("water",1000) /obj/structure/reagent_dispensers/watertank/ex_act(severity, target) switch(severity) @@ -89,9 +94,10 @@ icon = 'icons/obj/objects.dmi' icon_state = "weldtank" amount_per_transfer_from_this = 10 - New() - ..() - reagents.add_reagent("welding_fuel",1000) + +/obj/structure/reagent_dispensers/fueltank/New() + ..() + reagents.add_reagent("welding_fuel",1000) /obj/structure/reagent_dispensers/fueltank/bullet_act(var/obj/item/projectile/Proj) @@ -127,9 +133,10 @@ anchored = 1 density = 0 amount_per_transfer_from_this = 45 - New() - ..() - reagents.add_reagent("condensedcapsaicin",1000) + +/obj/structure/reagent_dispensers/peppertank/New() + ..() + reagents.add_reagent("condensedcapsaicin",1000) /obj/structure/reagent_dispensers/water_cooler @@ -141,9 +148,10 @@ possible_transfer_amounts = null anchored = 1 var/cups = 50 - New() - ..() - reagents.add_reagent("water",500) + +/obj/structure/reagent_dispensers/water_cooler/New() + ..() + reagents.add_reagent("water",500) /obj/structure/reagent_dispensers/water_cooler/attack_hand(var/mob/living/carbon/human/user) if((!istype(user)) || (user.stat)) @@ -170,9 +178,10 @@ icon = 'icons/obj/objects.dmi' icon_state = "beertankTEMP" amount_per_transfer_from_this = 10 - New() - ..() - reagents.add_reagent("beer",1000) + +/obj/structure/reagent_dispensers/beerkeg/New() + ..() + reagents.add_reagent("beer",1000) /obj/structure/reagent_dispensers/beerkeg/blob_act() explosion(src.loc,0,3,5,7,10) @@ -186,6 +195,6 @@ amount_per_transfer_from_this = 10 anchored = 1 - New() - ..() - reagents.add_reagent("virusfood", 1000) \ No newline at end of file +/obj/structure/reagent_dispensers/virusfood/New() + ..() + reagents.add_reagent("virusfood", 1000) \ No newline at end of file diff --git a/html/changelogs/phil235-SmokeFoamBuff.yml b/html/changelogs/phil235-SmokeFoamBuff.yml new file mode 100644 index 00000000000..63cd5d14ac3 --- /dev/null +++ b/html/changelogs/phil235-SmokeFoamBuff.yml @@ -0,0 +1,14 @@ + +author: phil + +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. +# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. +changes: + - tweak: "Smoke and foam touch reactions gets buffed." + - rscadd: "Reagent dispensers (watertank, fueltank) tells you how much reagents they have left when examined." + - tweak: "Liquid dark matter blob spore smoke now cannot throw you. The effects of sorium, blob sorium, liquid dark matter and blob liquid dark matter are now scaled by their volume. Sorium/LDM blob's touch now throws the mobs who are close but simply moves the mobs that are further away." From 8295f0c6212eddd883e39a46adb877b6eae308a6 Mon Sep 17 00:00:00 2001 From: phil235 Date: Thu, 9 Jul 2015 20:19:11 +0200 Subject: [PATCH 16/89] Blob vortex shouldn't throw /obj/effect --- code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm | 4 +++- code/modules/reagents/Chemistry-Recipes.dm | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm index da820b5d877..bdbbaf86506 100644 --- a/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm @@ -175,7 +175,9 @@ var/turf/pull = get_turf(M) var/range_power = Clamp(round(volume/5, 1), 1, 5) for(var/atom/movable/X in range(range_power,pull)) - if(X && !X.anchored) + if(istype(X, /obj/effect)) + continue + if(!X.anchored) var/distance = get_dist(X, pull) var/moving_power = max(range_power - distance, 1) spawn(0) diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm index f632e72e590..0ad9252a5aa 100644 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ b/code/modules/reagents/Chemistry-Recipes.dm @@ -82,7 +82,7 @@ for(var/atom/movable/X in orange(range, T)) if(istype(X, /obj/effect)) continue - if(X && !X.anchored) + if(!X.anchored) var/distance = get_dist(X, T) var/moving_power = max(range - distance, 1) spawn(0) //so everything moves at the same time. From d7ee8b90325bc199d2892e5c0e714dfc4cfc2ed6 Mon Sep 17 00:00:00 2001 From: "Alexander P. Ulan Hernandez" Date: Mon, 13 Jul 2015 08:51:37 -0400 Subject: [PATCH 17/89] Might as well fix this while there's a more controvercial PR --- code/game/objects/structures/tables_racks.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 02c24df2966..fa772110f58 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -124,7 +124,7 @@ if(!G.confirm()) return 0 G.affecting.loc = src.loc - G.affecting.Weaken(5) + G.affecting.Weaken(2) G.affecting.visible_message("[G.assailant] pushes [G.affecting] onto [src].", \ "[G.assailant] pushes [G.affecting] onto [src].") add_logs(G.assailant, G.affecting, "pushed") From 38aeb528dfa195a79a561e922dc5e8b96e8f08d1 Mon Sep 17 00:00:00 2001 From: MrStonedOne Date: Mon, 13 Jul 2015 07:10:07 -0700 Subject: [PATCH 18/89] Scrubber tweaks + related air alarm tweaks. Scrubbers now use power. How much depends on what its doing, how many gases its set to filter, etc. Scrubbers can now pull from a 3x3 area around them at a major power cost! Air alarms given some new environmental modes to account for this. --- .../components/unary_devices/vent_scrubber.dm | 120 ++++++++++++++---- code/game/machinery/alarm.dm | 76 +++++++++-- nano/templates/air_alarm.tmpl | 32 +++-- 3 files changed, 177 insertions(+), 51 deletions(-) diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm index 9588baa7ee7..d1520ce60a0 100644 --- a/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm +++ b/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm @@ -3,7 +3,10 @@ name = "air scrubber" desc = "Has a valve and pump attached to it" + use_power = 1 + idle_power_usage = 10 + active_power_usage = 60 level = 1 @@ -14,14 +17,16 @@ var/frequency = 1439 var/datum/radio_frequency/radio_connection + var/list/turf/simulated/adjacent_turfs = list() + var/on = 0 var/scrubbing = 1 //0 = siphoning, 1 = scrubbing var/scrub_CO2 = 1 var/scrub_Toxins = 0 var/scrub_N2O = 0 - var/volume_rate = 120 - var/panic = 0 //is this scrubber panicked? + var/volume_rate = 200 + var/widenet = 0 //is this scrubber acting on the 3x3 area around it. var/area_uid var/radio_filter_out @@ -46,6 +51,30 @@ if(radio_controller) radio_controller.remove_object(src,frequency) ..() +/obj/machinery/atmospherics/unary/vent_scrubber/auto_use_power() + if(!powered(power_channel)) + return 0 + if (!on || welded) + return 0 + if(stat & (NOPOWER|BROKEN)) + return 0 + + var/amount = idle_power_usage + + if (scrubbing) + if (scrub_CO2) + amount += idle_power_usage + if (scrub_Toxins) + amount += idle_power_usage + if (scrub_N2O) + amount += idle_power_usage + else + amount = active_power_usage + + if (widenet) + amount += amount*(adjacent_turfs.len*(adjacent_turfs.len/2)) + use_power(amount, power_channel) + return 1 /obj/machinery/atmospherics/unary/vent_scrubber/update_icon_nopipes() overlays.Cut() @@ -84,7 +113,7 @@ "timestamp" = world.time, "power" = on, "scrubbing" = scrubbing, - "panic" = panic, + "widenet" = widenet, "filter_co2" = scrub_CO2, "filter_toxins" = scrub_Toxins, "filter_n2o" = scrub_N2O, @@ -104,6 +133,7 @@ radio_filter_out = frequency==initial(frequency)?(RADIO_TO_AIRALARM):null if (frequency) set_frequency(frequency) + check_turfs() ..() /obj/machinery/atmospherics/unary/vent_scrubber/initialize() ..() @@ -119,16 +149,24 @@ //broadcast_status() if(!on || welded) return 0 + scrub(loc) + if (widenet) + for (var/turf/simulated/tile in adjacent_turfs) + scrub(tile) - var/datum/gas_mixture/environment = loc.return_air() +/obj/machinery/atmospherics/unary/vent_scrubber/proc/scrub(var/turf/simulated/tile) + if (!tile || !istype(tile)) + return 0 + + var/datum/gas_mixture/environment = tile.return_air() if(scrubbing) if((environment.toxins>0) || (environment.carbon_dioxide>0) || (environment.trace_gases.len>0)) var/transfer_moles = min(1, volume_rate/environment.volume)*environment.total_moles() //Take a gas sample - var/datum/gas_mixture/removed = loc.remove_air(transfer_moles) + var/datum/gas_mixture/removed = tile.remove_air(transfer_moles) if (isnull(removed)) //in space return @@ -155,8 +193,8 @@ //Remix the resulting gases air_contents.merge(filtered_out) - loc.assume_air(removed) - air_update_turf() + tile.assume_air(removed) + tile.air_update_turf() parent.update = 1 @@ -166,15 +204,56 @@ var/transfer_moles = environment.total_moles()*(volume_rate/environment.volume) - var/datum/gas_mixture/removed = loc.remove_air(transfer_moles) + var/datum/gas_mixture/removed = tile.remove_air(transfer_moles) air_contents.merge(removed) - air_update_turf() + tile.air_update_turf() parent.update = 1 return 1 +//There is no easy way for an object to be notified of changes to atmos can pass flags +// So we check every machinery process (2 seconds) +/obj/machinery/atmospherics/unary/vent_scrubber/process() + if (widenet) + check_turfs() + +//we populate a list of turfs with nonatmos-blocked cardinal turfs AND +// diagonal turfs that can share atmos with *both* of the cardinal turfs +/obj/machinery/atmospherics/unary/vent_scrubber/proc/check_turfs() + if (!loc || !istype(loc, /turf/simulated)) + return + + adjacent_turfs.Cut() + var/turf/simulated/curloc = loc + + for (var/direction in cardinal) + if(!(curloc.atmos_adjacent_turfs & direction)) + continue + + var/turf/simulated/S = get_step(loc, direction) + if (istype(S)) + adjacent_turfs += S + + for (var/direction in diagonals) + var/matchingDirections = 0 + var/turf/simulated/S = get_step(curloc, direction) + + for (var/checkDirection in cardinal) + if(!(S.atmos_adjacent_turfs & checkDirection)) + continue + var/turf/simulated/checkTurf = get_step(S, checkDirection) + + if (checkTurf in adjacent_turfs) + matchingDirections++ + + if (matchingDirections >= 2) + adjacent_turfs += S + break + + + /obj/machinery/atmospherics/unary/vent_scrubber/receive_signal(datum/signal/signal) if(stat & (NOPOWER|BROKEN)) return @@ -186,24 +265,10 @@ if("power_toggle" in signal.data) on = !on - if("panic_siphon" in signal.data) //must be before if("scrubbing" thing - panic = text2num(signal.data["panic_siphon"]) - if(panic) - on = 1 - scrubbing = 0 - volume_rate = 2000 - else - scrubbing = 1 - volume_rate = initial(volume_rate) - if("toggle_panic_siphon" in signal.data) - panic = !panic - if(panic) - on = 1 - scrubbing = 0 - volume_rate = 2000 - else - scrubbing = 1 - volume_rate = initial(volume_rate) + if("widenet" in signal.data) + widenet = text2num(signal.data["widenet"]) + if("toggle_widenet" in signal.data) + widenet = !widenet if("scrubbing" in signal.data) scrubbing = text2num(signal.data["scrubbing"]) @@ -234,7 +299,6 @@ broadcast_status() return //do not update_icon -// log_admin("DEBUG \[[world.timeofday]\]: vent_scrubber/receive_signal: unknown command \"[signal.data["command"]]\"\n[signal.debug_print()]") spawn(2) broadcast_status() update_icon() diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index dbeb74c7411..c5bc3ded116 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -32,10 +32,13 @@ #define AALARM_MODE_SCRUBBING 1 #define AALARM_MODE_VENTING 2 //makes draught -#define AALARM_MODE_PANIC 3 //constantly sucks all air +#define AALARM_MODE_PANIC 3 //like siphon, but stronger (enables widenet) #define AALARM_MODE_REPLACEMENT 4 //sucks off all air, then refill and swithes to scrubbing #define AALARM_MODE_OFF 5 #define AALARM_MODE_FLOOD 6 //Emagged mode; turns off scrubbers and pressure checks on vents +#define AALARM_MODE_SIPHON 7 //Scrubbers suck air +#define AALARM_MODE_CONTAMINATED 8 //Turns on all filtering and widenet scrubbing. +#define AALARM_MODE_REFILL 9 //just like normal, but with triple the air output #define AALARM_SCREEN_MAIN 1 #define AALARM_SCREEN_VENT 2 @@ -337,7 +340,7 @@ "long_name" = sanitize(long_name), "power" = info["power"], "scrubbing" = info["scrubbing"], - "panic" = info["panic"], + "widenet" = info["widenet"], "filter_co2" = info["filter_co2"], "filter_toxins" = info["filter_toxins"], "filter_n2o" = info["filter_n2o"] @@ -346,12 +349,15 @@ data["mode"] = mode data["modes"] = list() data["modes"] += list(list("name" = "Filtering - Scrubs out contaminants", "mode" = AALARM_MODE_SCRUBBING, "selected" = mode == AALARM_MODE_SCRUBBING, "danger" = 0)) + data["modes"] += list(list("name" = "Contaminated - Scrubs out ALL contaminants quickly","mode" = AALARM_MODE_CONTAMINATED, "selected" = mode == AALARM_MODE_CONTAMINATED, "danger" = 0)) data["modes"] += list(list("name" = "Draught - Siphons out air while replacing", "mode" = AALARM_MODE_VENTING, "selected" = mode == AALARM_MODE_VENTING, "danger" = 0)) + data["modes"] += list(list("name" = "Refill - Triple vent output", "mode" = AALARM_MODE_REFILL, "selected" = mode == AALARM_MODE_REFILL, "danger" = 0)) data["modes"] += list(list("name" = "Cycle - Siphons air before replacing", "mode" = AALARM_MODE_REPLACEMENT, "selected" = mode == AALARM_MODE_REPLACEMENT, "danger" = 1)) - data["modes"] += list(list("name" = "Panic - Siphons air out of the room", "mode" = AALARM_MODE_PANIC, "selected" = mode == AALARM_MODE_PANIC, "danger" = 1)) + data["modes"] += list(list("name" = "Siphon - Siphons air out of the room", "mode" = AALARM_MODE_SIPHON, "selected" = mode == AALARM_MODE_SIPHON, "danger" = 1)) + data["modes"] += list(list("name" = "Panic Siphon - Siphons air out of the room quickly","mode" = AALARM_MODE_PANIC, "selected" = mode == AALARM_MODE_PANIC, "danger" = 1)) data["modes"] += list(list("name" = "Off - Shuts off vents and scrubbers", "mode" = AALARM_MODE_OFF, "selected" = mode == AALARM_MODE_OFF, "danger" = 0)) if (src.emagged) - data["modes"] += list(list("name" = "Flood - Shuts off scrubbers and opens vents", "mode" = AALARM_MODE_FLOOD, "selected" = mode == AALARM_MODE_FLOOD, "danger" = 1)) + data["modes"] += list(list("name" = "Flood - Shuts off scrubbers and opens vents", "mode" = AALARM_MODE_FLOOD, "selected" = mode == AALARM_MODE_FLOOD, "danger" = 1)) if(AALARM_SCREEN_SENSORS) var/datum/tlv/selected var/list/thresholds = list() @@ -426,7 +432,7 @@ "co2_scrub", "tox_scrub", "n2o_scrub", - "panic_siphon", + "widenet", "scrubbing" ) send_signal(device_id, list (href_list["command"] = text2num(href_list["val"]))) @@ -496,8 +502,26 @@ send_signal(device_id, list( "power"= 1, "co2_scrub"= 1, + "tox_scrub"= 0, + "n2o_scrub"= 0, "scrubbing"= 1, - "panic_siphon"= 0, + "widenet"= 0, + )) + for(var/device_id in alarm_area.air_vent_names) + send_signal(device_id, list( + "power"= 1, + "checks"= 1, + "set_external_pressure"= ONE_ATMOSPHERE + )) + if(AALARM_MODE_CONTAMINATED) + for(var/device_id in alarm_area.air_scrub_names) + send_signal(device_id, list( + "power"= 1, + "co2_scrub"= 1, + "tox_scrub"= 1, + "n2o_scrub"= 1, + "scrubbing"= 1, + "widenet"= 1, )) for(var/device_id in alarm_area.air_vent_names) send_signal(device_id, list( @@ -505,19 +529,34 @@ "checks"= 1, "set_external_pressure"= ONE_ATMOSPHERE )) - if(AALARM_MODE_VENTING) for(var/device_id in alarm_area.air_scrub_names) send_signal(device_id, list( "power"= 1, - "panic_siphon"= 0, + "widenet"= 0, "scrubbing"= 0 )) for(var/device_id in alarm_area.air_vent_names) send_signal(device_id, list( "power"= 1, "checks"= 1, - "set_external_pressure"= ONE_ATMOSPHERE + "set_external_pressure" = ONE_ATMOSPHERE*2 + )) + if(AALARM_MODE_REFILL) + for(var/device_id in alarm_area.air_scrub_names) + send_signal(device_id, list( + "power"= 1, + "co2_scrub"= 1, + "tox_scrub"= 0, + "n2o_scrub"= 0, + "scrubbing"= 1, + "widenet"= 0, + )) + for(var/device_id in alarm_area.air_vent_names) + send_signal(device_id, list( + "power"= 1, + "checks"= 1, + "set_external_pressure" = ONE_ATMOSPHERE*3 )) if( AALARM_MODE_PANIC, @@ -526,16 +565,30 @@ for(var/device_id in alarm_area.air_scrub_names) send_signal(device_id, list( "power"= 1, - "panic_siphon"= 1 + "widenet"= 1, + "scrubbing"= 0 )) for(var/device_id in alarm_area.air_vent_names) send_signal(device_id, list( "power"= 0 )) + if( + AALARM_MODE_SIPHON + ) + for(var/device_id in alarm_area.air_scrub_names) + send_signal(device_id, list( + "power"= 1, + "widenet"= 0, + "scrubbing"= 0 + )) + for(var/device_id in alarm_area.air_vent_names) + send_signal(device_id, list( + "power"= 0 + )) + if(AALARM_MODE_OFF) for(var/device_id in alarm_area.air_scrub_names) send_signal(device_id, list( - "panic_siphon"= 0, "power"= 0 )) for(var/device_id in alarm_area.air_vent_names) @@ -545,7 +598,6 @@ if(AALARM_MODE_FLOOD) for(var/device_id in alarm_area.air_scrub_names) send_signal(device_id, list( - "panic_siphon"= 0, "power"=0 )) for(var/device_id in alarm_area.air_vent_names) diff --git a/nano/templates/air_alarm.tmpl b/nano/templates/air_alarm.tmpl index a5556180308..05a508dfb0f 100644 --- a/nano/templates/air_alarm.tmpl +++ b/nano/templates/air_alarm.tmpl @@ -2,18 +2,20 @@ Title: Air Alarm Used In File(s): \code\game\machinery\alarm.dm -#define AALARM_MODE_SCRUBBING 1 -#define AALARM_MODE_VENTING 2 //makes draught -#define AALARM_MODE_PANIC 3 //constantly sucks all air -#define AALARM_MODE_REPLACEMENT 4 //sucks off all air, then refill and swithes to scrubbing -#define AALARM_MODE_OFF 5 -#define AALARM_MODE_FLOOD 6 //Emagged mode; turns off scrubbers and pressure checks on vents +#define AALARM_MODE_SCRUBBING 1 +#define AALARM_MODE_VENTING 2 //makes draught +#define AALARM_MODE_PANIC 3 //like siphon, but stronger (enables widenet) +#define AALARM_MODE_REPLACEMENT 4 //sucks off all air, then refill and swithes to scrubbing +#define AALARM_MODE_OFF 5 +#define AALARM_MODE_FLOOD 6 //Emagged mode; turns off scrubbers and pressure checks on vents +#define AALARM_MODE_SIPHON 7 //Scrubbers suck air +#define AALARM_MODE_CONTAMINATED 8 //Turns on all filtering and widenet scrubbing. -#define AALARM_SCREEN_MAIN 1 -#define AALARM_SCREEN_VENT 2 -#define AALARM_SCREEN_SCRUB 3 -#define AALARM_SCREEN_MODE 4 -#define AALARM_SCREEN_SENSORS 5 +#define AALARM_SCREEN_MAIN 1 +#define AALARM_SCREEN_VENT 2 +#define AALARM_SCREEN_SCRUB 3 +#define AALARM_SCREEN_MODE 4 +#define AALARM_SCREEN_SENSORS 5 -->

@@ -155,6 +157,14 @@ Used In File(s): \code\game\machinery\alarm.dm {{:~link(scrubbing ? 'Scrubbing' : 'Siphoning', null, { 'id_tag' : id_tag, 'command' : 'scrubbing', 'val' : scrubbing ? 0 : 1}, null, scrubbing ? null : 'redButton')}}
+
+
+ Scrub Range: +
+
+ {{:~link(widenet ? 'Extended' : 'Normal', null, { 'id_tag' : id_tag, 'command' : 'widenet', 'val' : widenet ? 0 : 1}, null, widenet ? 'selected' : null)}} +
+
Filters: From 3c1e4948e34b7f82066a9d04ef3defaca8f5924d Mon Sep 17 00:00:00 2001 From: MrStonedOne Date: Mon, 13 Jul 2015 07:16:45 -0700 Subject: [PATCH 19/89] Fixes bug with atmos overlays not updating. --- code/LINDA/LINDA_turf_tile.dm | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/code/LINDA/LINDA_turf_tile.dm b/code/LINDA/LINDA_turf_tile.dm index 8d6ba7d7802..24193fa0090 100644 --- a/code/LINDA/LINDA_turf_tile.dm +++ b/code/LINDA/LINDA_turf_tile.dm @@ -6,6 +6,7 @@ var/atmos_adjacent_turfs = 0 var/atmos_adjacent_turfs_amount = 0 var/atmos_supeconductivity = 0 + var/atoms_overlay_type = "" /turf/assume_air(datum/gas_mixture/giver) //use this for machines to adjust air del(giver) @@ -76,8 +77,7 @@ air.merge(giver) - if(air.check_tile_graphic()) - update_visuals(air) + update_visuals(air) return 1 @@ -207,8 +207,7 @@ air.react() - if(air.check_tile_graphic()) - update_visuals(air) + update_visuals(air) if(air.temperature > FIRE_MINIMUM_TEMPERATURE_TO_EXIST) hotspot_expose(air.temperature, CELL_VOLUME) @@ -232,6 +231,9 @@ archived_cycle = SSair.times_fired /turf/simulated/proc/update_visuals(datum/gas_mixture/model) + model.check_tile_graphic() + if (atoms_overlay_type == model.graphic) + return overlays.Cut() var/siding_icon_state = return_siding_icon_state() if(siding_icon_state) @@ -241,6 +243,7 @@ overlays.Add(SSair.plasma_overlay) if("sleeping_agent") overlays.Add(SSair.sleeptoxin_overlay) + atoms_overlay_type = model.graphic /turf/simulated/proc/share_air(var/turf/simulated/T) if(T.current_cycle < current_cycle) @@ -338,8 +341,7 @@ G.moles = S.moles/turf_list.len T.air.trace_gases += G - if(T.air.check_tile_graphic()) - T.update_visuals(T.air) + T.update_visuals(T.air) /datum/excited_group/proc/dismantle() From 73c2635e5d231b3c72cd0c35f35d89557fb9d0c6 Mon Sep 17 00:00:00 2001 From: MrStonedOne Date: Mon, 13 Jul 2015 07:17:38 -0700 Subject: [PATCH 20/89] Tweaks some atmos defines relating to spreading and plasma Makes plasma show up as an overlay more easily, and makes linda less aggressive about sleeping active turfs. --- code/__DEFINES/atmospherics.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/__DEFINES/atmospherics.dm b/code/__DEFINES/atmospherics.dm index d43fd334d1a..1745c74f2a2 100644 --- a/code/__DEFINES/atmospherics.dm +++ b/code/__DEFINES/atmospherics.dm @@ -27,7 +27,7 @@ #define TANK_RUPTURE_PRESSURE (40.*ONE_ATMOSPHERE) //Tank spills all contents into atmosphere #define TANK_FRAGMENT_PRESSURE (50.*ONE_ATMOSPHERE) //Boom 3x3 base explosion #define TANK_FRAGMENT_SCALE (10.*ONE_ATMOSPHERE) //+1 for each SCALE kPa aboe threshold -#define MINIMUM_AIR_RATIO_TO_SUSPEND 0.05 //Minimum ratio of air that must move to/from a tile to suspend group processing +#define MINIMUM_AIR_RATIO_TO_SUSPEND 0.005 //Minimum ratio of air that must move to/from a tile to suspend group processing #define MINIMUM_AIR_TO_SUSPEND (MOLES_CELLSTANDARD*MINIMUM_AIR_RATIO_TO_SUSPEND) //Minimum amount of air that has to move before a group processing can be suspended #define MINIMUM_MOLES_DELTA_TO_MOVE (MOLES_CELLSTANDARD*MINIMUM_AIR_RATIO_TO_SUSPEND) //Either this must be active #define MINIMUM_TEMPERATURE_TO_MOVE (T20C+100) //or this (or both, obviously) @@ -60,7 +60,7 @@ #define PLASMA_OXYGEN_FULLBURN 10 #define MIN_PLASMA_DAMAGE 1 #define MAX_PLASMA_DAMAGE 10 -#define MOLES_PLASMA_VISIBLE 0.7 //Moles in a standard cell after which plasma is visible +#define MOLES_PLASMA_VISIBLE 0.5 //Moles in a standard cell after which plasma is visible // Pressure limits. #define HAZARD_HIGH_PRESSURE 550 //This determins at what pressure the ultra-high pressure red icon is displayed. (This one is set as a constant) From 6937076afe9f1dd6de0e3015cfdf9b9ff19df12a Mon Sep 17 00:00:00 2001 From: Remie Richards Date: Tue, 14 Jul 2015 00:17:40 +0100 Subject: [PATCH 21/89] buffs to changelings: * Changelings now regenerate chemicals while dead, up to half and ONLY HALF of their maximum storage (taking into account their storage upgrades, if applicable) * Changelings now repair geneticdamage while dead, with the lowest value they can be taken to being 50, this number is arbitrary but was based on half the value at which fakedeath stops working for too much geneticdamage * Changeling fakedeath timer is now halved, down from 80 seconds (1 minute 20 seconds) to 40 seconds. --- code/game/gamemodes/changeling/changeling.dm | 16 +++++++++++++--- .../gamemodes/changeling/powers/fakedeath.dm | 2 +- code/modules/mob/living/carbon/human/life.dm | 2 +- code/modules/mob/living/carbon/life.dm | 7 ++++--- code/modules/mob/living/life.dm | 2 -- 5 files changed, 19 insertions(+), 10 deletions(-) diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index b7eec7d9187..39894b02956 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -1,3 +1,8 @@ + +#define LING_FAKEDEATH_TIME 400 //40 seconds +#define LING_DEAD_GENETICDAMAGE_HEAL_CAP 50 //The lowest value of geneticdamage handle_changeling() can take it to while dead. + + var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega") /datum/game_mode @@ -261,9 +266,14 @@ var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon" absorbed_dna.len = dna_max -/datum/changeling/proc/regenerate() - chem_charges = min(max(0, chem_charges + chem_recharge_rate - chem_recharge_slowdown), chem_storage) - geneticdamage = max(0, geneticdamage-1) +/datum/changeling/proc/regenerate(var/mob/living/carbon/the_ling) + if(istype(the_ling)) + if(the_ling.stat == DEAD) + chem_charges = min(max(0, chem_charges + chem_recharge_rate - chem_recharge_slowdown), (chem_storage*0.5)) + geneticdamage = max(LING_DEAD_GENETICDAMAGE_HEAL_CAP,geneticdamage-1) + else //not dead? no chem/geneticdamage caps. + chem_charges = min(max(0, chem_charges + chem_recharge_rate - chem_recharge_slowdown), chem_storage) + geneticdamage = max(0, geneticdamage-1) /datum/changeling/proc/get_dna(var/dna_owner) diff --git a/code/game/gamemodes/changeling/powers/fakedeath.dm b/code/game/gamemodes/changeling/powers/fakedeath.dm index f09eeceb54d..dd3527f3988 100644 --- a/code/game/gamemodes/changeling/powers/fakedeath.dm +++ b/code/game/gamemodes/changeling/powers/fakedeath.dm @@ -16,7 +16,7 @@ if(user.stat != DEAD) user.emote("deathgasp") user.tod = worldtime2text() - spawn(800) + spawn(LING_FAKEDEATH_TIME) if(user && user.mind && user.mind.changeling && user.mind.changeling.purchasedpowers) user << "We are ready to regenerate." user.mind.changeling.purchasedpowers += new /obj/effect/proc_holder/changeling/revive(null) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index bfa438e032f..67801be1087 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -302,7 +302,7 @@ /mob/living/carbon/human/handle_changeling() if(mind && hud_used) if(mind.changeling) - mind.changeling.regenerate() + mind.changeling.regenerate(src) hud_used.lingchemdisplay.invisibility = 0 hud_used.lingchemdisplay.maptext = "
[round(mind.changeling.chem_charges)]
" else diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 40e05df8060..11d48e98d45 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -8,9 +8,10 @@ return if(..()) - //Updates the number of stored chemicals for powers - handle_changeling() - return 1 + . = 1 + + //Updates the number of stored chemicals for powers + handle_changeling() /////////////// // BREATHING // diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index bdd6bd4119a..4b45ec8dcd5 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -54,8 +54,6 @@ if(client) handle_regular_hud_updates() - return . - /mob/living/proc/handle_breathing() From 26428f72ab4526a100c3d8523cc59f9441d82e70 Mon Sep 17 00:00:00 2001 From: phil235 Date: Tue, 14 Jul 2015 01:27:06 +0200 Subject: [PATCH 22/89] Fix some merge conflict stuff --- code/game/mecha/equipment/tools/medical_tools.dm | 2 +- code/game/mecha/equipment/tools/mining_tools.dm | 2 +- code/game/mecha/equipment/tools/work_tools.dm | 2 +- code/game/mecha/mecha_defense.dm | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm index 6d4d76fd612..ffafd888832 100644 --- a/code/game/mecha/equipment/tools/medical_tools.dm +++ b/code/game/mecha/equipment/tools/medical_tools.dm @@ -181,7 +181,7 @@ if(to_inject && patient.reagents.get_reagent_amount(R.id) + to_inject <= inject_amount*2) occupant_message("Injecting [patient] with [to_inject] units of [R.name].") log_message("Injecting [patient] with [to_inject] units of [R.name].") - add_logs(chassis.occupant, patient, "injected", object="[name] ([R] - [to_inject] units)") + add_logs(chassis.occupant, patient, "injected", "[name] ([R] - [to_inject] units)") SG.reagents.trans_id_to(patient,R.id,to_inject) update_equip_info() return diff --git a/code/game/mecha/equipment/tools/mining_tools.dm b/code/game/mecha/equipment/tools/mining_tools.dm index 0cc2255b75f..7d786f075db 100644 --- a/code/game/mecha/equipment/tools/mining_tools.dm +++ b/code/game/mecha/equipment/tools/mining_tools.dm @@ -73,7 +73,7 @@ /obj/item/mecha_parts/mecha_equipment/drill/proc/drill_mob(mob/living/target, mob/user, var/drill_damage=80) target.visible_message("[chassis] drills [target] with [src].", \ "[chassis] drills [target] with [src].") - add_logs(user, target, "attacked", object="[name]", addition="(INTENT: [uppertext(user.a_intent)]) (DAMTYPE: [uppertext(damtype)])") + add_logs(user, target, "attacked", "[name]", "(INTENT: [uppertext(user.a_intent)]) (DAMTYPE: [uppertext(damtype)])") if(ishuman(target)) var/mob/living/carbon/human/H = target var/obj/item/organ/limb/affecting = H.get_organ("chest") diff --git a/code/game/mecha/equipment/tools/work_tools.dm b/code/game/mecha/equipment/tools/work_tools.dm index 515fe52c2a2..ef4de9cf891 100644 --- a/code/game/mecha/equipment/tools/work_tools.dm +++ b/code/game/mecha/equipment/tools/work_tools.dm @@ -62,7 +62,7 @@ target.visible_message("[chassis] squeezes [target].", \ "[chassis] squeezes [target].",\ "You hear something crack.") - add_logs(chassis.occupant, M, "attacked", object="[name]", addition="(INTENT: [uppertext(chassis.occupant.a_intent)]) (DAMTYE: [uppertext(damtype)])") + add_logs(chassis.occupant, M, "attacked", "[name]", "(INTENT: [uppertext(chassis.occupant.a_intent)]) (DAMTYE: [uppertext(damtype)])") else step_away(M,chassis) occupant_message("You push [target] out of the way.") diff --git a/code/game/mecha/mecha_defense.dm b/code/game/mecha/mecha_defense.dm index 3b61b31887f..e6d498dd0f4 100644 --- a/code/game/mecha/mecha_defense.dm +++ b/code/game/mecha/mecha_defense.dm @@ -341,5 +341,5 @@ return visible_message("[M.name] has hit [src].") take_damage(M.force, damtype) - add_logs(M.occupant, src, "attacked", object=M, addition="(INTENT: [uppertext(M.occupant.a_intent)]) (DAMTYPE: [uppertext(M.damtype)])") + add_logs(M.occupant, src, "attacked", M, "(INTENT: [uppertext(M.occupant.a_intent)]) (DAMTYPE: [uppertext(M.damtype)])") return \ No newline at end of file From a306520ba9a69b773107491e7ad34ef74a4c44e3 Mon Sep 17 00:00:00 2001 From: xxalpha Date: Tue, 14 Jul 2015 00:36:40 +0100 Subject: [PATCH 23/89] Fixed t-ray goggles not updating pipes&cables correctly. Loc << --- .../clothing/glasses/engine_goggles.dm | 29 ++++++++----------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/code/modules/clothing/glasses/engine_goggles.dm b/code/modules/clothing/glasses/engine_goggles.dm index bf6e95e89c7..81415a37e1c 100644 --- a/code/modules/clothing/glasses/engine_goggles.dm +++ b/code/modules/clothing/glasses/engine_goggles.dm @@ -21,29 +21,29 @@ vision_flags = 0 darkness_view = 2 invis_view = SEE_INVISIBLE_LIVING - usr << "You toggle the goggles' scanning mode to \[T-Ray]." + loc << "You toggle the goggles' scanning mode to \[T-Ray]." else SSobj.processing.Remove(src) vision_flags = SEE_TURFS darkness_view = 1 invis_view = SEE_INVISIBLE_MINIMUM - usr << "You toggle the goggles' scanning mode to \[Meson]." + loc << "You toggle the goggles' scanning mode to \[Meson]." invis_update() update_icon() /obj/item/clothing/glasses/meson/engine/process() if(!mode) - return null + return if(!istype(loc,/mob/living/carbon/human)) invis_update() - return null + return var/mob/living/carbon/human/user = loc if(user.glasses != src) invis_update() - return null + return scan() @@ -66,7 +66,7 @@ /obj/item/clothing/glasses/meson/engine/proc/invis_update() for(var/obj/O in invis_objects) - if(!t_ray_on() || !(O in range(1, loc))) + if(!t_ray_on() || !(O in range(range, loc))) invis_objects -= O var/turf/T = O.loc if(T && T.intact) @@ -89,23 +89,19 @@ /obj/item/clothing/glasses/meson/engine/tray //atmos techs have lived far too long without tray goggles while those damned engineers get their dual-purpose gogles all to themselves name = "Optical T-Ray Scanner" desc = "Used by engineering staff to see underfloor objects such as cables and pipes." - icon_state = "trayson-tray" + icon_state = "trayson-tray_off" action_button_name = "Toggle Scanner Power" mode = 1 - var/on = 1 + var/on = 0 vision_flags = 0 darkness_view = 2 invis_view = SEE_INVISIBLE_LIVING range = 2 -/obj/item/clothing/glasses/meson/engine/tray/New() - SSobj.processing |= src - ..() - /obj/item/clothing/glasses/meson/engine/tray/process() if(!on) - return null + return ..() /obj/item/clothing/glasses/meson/engine/tray/update_icon() @@ -120,14 +116,13 @@ if(on) SSobj.processing |= src - usr << "You turn the goggles on." - + loc << "You turn the goggles on." else SSobj.processing.Remove(src) - usr << "You turn the goggles off." + loc << "You turn the goggles off." invis_update() update_icon() /obj/item/clothing/glasses/meson/engine/tray/t_ray_on() - return on & ..() \ No newline at end of file + return on && ..() \ No newline at end of file From 1dc5f1a1ae72d1b4afb022308d7baeeeb573685e Mon Sep 17 00:00:00 2001 From: xxalpha Date: Tue, 14 Jul 2015 00:57:05 +0100 Subject: [PATCH 24/89] Removed spawn because aran yelled at me --- code/__HELPERS/icon_smoothing.dm | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/code/__HELPERS/icon_smoothing.dm b/code/__HELPERS/icon_smoothing.dm index 16d6f49e3cb..0d823e39fb6 100644 --- a/code/__HELPERS/icon_smoothing.dm +++ b/code/__HELPERS/icon_smoothing.dm @@ -42,20 +42,19 @@ return adjacencies /proc/smooth_icon(atom/A) - spawn(2) - if(A && A.smooth) - clear_overlays(A) - var/adjacencies = calculate_adjacencies(A) + if(A && A.smooth) + clear_overlays(A) + var/adjacencies = calculate_adjacencies(A) - A.top_left_corner = make_nw_corner(adjacencies) - A.top_right_corner = make_ne_corner(adjacencies) - A.bottom_left_corner = make_sw_corner(adjacencies) - A.bottom_right_corner = make_se_corner(adjacencies) + A.top_left_corner = make_nw_corner(adjacencies) + A.top_right_corner = make_ne_corner(adjacencies) + A.bottom_left_corner = make_sw_corner(adjacencies) + A.bottom_right_corner = make_se_corner(adjacencies) - A.overlays += A.top_left_corner - A.overlays += A.top_right_corner - A.overlays += A.bottom_right_corner - A.overlays += A.bottom_left_corner + A.overlays += A.top_left_corner + A.overlays += A.top_right_corner + A.overlays += A.bottom_right_corner + A.overlays += A.bottom_left_corner /proc/make_nw_corner(adjacencies) From f72da939550fe6a18e151d45ad6b4106ff06da77 Mon Sep 17 00:00:00 2001 From: Remie Richards Date: Tue, 14 Jul 2015 00:59:38 +0100 Subject: [PATCH 25/89] Changelog, since this is a balance PR and people need to know that ling is less shit. --- html/changelogs/RemieRichards-PR-10599.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 html/changelogs/RemieRichards-PR-10599.yml diff --git a/html/changelogs/RemieRichards-PR-10599.yml b/html/changelogs/RemieRichards-PR-10599.yml new file mode 100644 index 00000000000..32310e98e5a --- /dev/null +++ b/html/changelogs/RemieRichards-PR-10599.yml @@ -0,0 +1,10 @@ + +author: RemieRichards + +delete-after: True + +changes: + - tweak: "Changelings now regenerate chemicals and geneticdamage while dead, but only up to specific caps (50% of their max chem storage, and 50 geneticdamage)" + - tweak: "Fakedeath's length has been reduced from 80s dead (1 minute 20) to 40s dead" + + \ No newline at end of file From 85e64ae7e02383702f7f5124dc6683e0a6bc67db Mon Sep 17 00:00:00 2001 From: oranges Date: Tue, 14 Jul 2015 13:11:38 +1200 Subject: [PATCH 26/89] Adds some more messages for braindamage gibbering --- code/modules/mob/living/carbon/human/life.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index bfa438e032f..ba202f9f50b 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -76,7 +76,7 @@ if (getBrainLoss() >= 60 && stat != DEAD) if (prob(3)) - switch(pick(1,2,3,4)) + switch(pick(1,2,3,4,5)) if(1) say(pick("IM A PONY NEEEEEEIIIIIIIIIGH", "without oxigen blob don't evoluate?", "CAPTAINS A COMDOM", "[pick("", "that faggot traitor")] [pick("joerge", "george", "gorge", "gdoruge")] [pick("mellens", "melons", "mwrlins")] is grifing me HAL;P!!!", "can u give me [pick("telikesis","halk","eppilapse","kamelien","eksrey","glowey skin")]?", "THe saiyans screwed", "Bi is THE BEST OF BOTH WORLDS>", "I WANNA PET TEH monkeyS", "stop grifing me!!!!", "SOTP IT#", "shiggey diggey!!", "A PIRATE APPEAR")) if(2) @@ -85,6 +85,8 @@ say(pick("GEY AWAY FROM ME U GREIFING PRICK!!!!", "ur a fuckeing autist!", ";HELP SHITECIRTY MURDERIN MEE!!!", "hwat dose tha [pick("g", "squid", "r")] mean?????", "CAL; TEH SHUTTLE!!!!!", "wearnig siNGUARLTY IS .... FIne xDDDDDDDDD", "AI laW 22 Open door", "this SI mY stATIon......", "who the HELL do u thenk u r?!!!!", "geT THE FUCK OUTTTT", "H U G B O X", ";;CRAGING THIS STTAYTION WITH NIO SURVIVROS", "[pick("bager", "syebl")] is down11!!!!!!!!!!!!!!!!!", "PSHOOOM")) if(4) emote("drool") + if(5) + say(pick("REMOVE SINGULARITY", "INSTLL TEG", "TURBIN IS BEST ENGIENE", "SOLIRS CAN POWER THE HOLE STATION ANEWAY")) /mob/living/carbon/human/handle_mutations_and_radiation() From 8a2ad876948190765d5448ac287252ab6c02a48e Mon Sep 17 00:00:00 2001 From: Remie Richards Date: Tue, 14 Jul 2015 03:20:39 +0100 Subject: [PATCH 27/89] Lings now get to see the last 8 messages the person they absorbed said, to allow for better impersonations. --- code/game/gamemodes/changeling/changeling.dm | 2 +- .../gamemodes/changeling/powers/absorb.dm | 21 +++++++++++++++++++ code/modules/mob/living/living_defines.dm | 4 +++- code/modules/mob/living/say.dm | 7 +++++-- html/changelogs/RemieRichards-PR-10599.yml | 1 + 5 files changed, 31 insertions(+), 4 deletions(-) diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index 39894b02956..0a1211a3eef 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -1,7 +1,7 @@ #define LING_FAKEDEATH_TIME 400 //40 seconds #define LING_DEAD_GENETICDAMAGE_HEAL_CAP 50 //The lowest value of geneticdamage handle_changeling() can take it to while dead. - +#define LING_ABSORB_RECENT_SPEECH 8 //The amount of recent spoken lines to gain on absorbing a mob var/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega") diff --git a/code/game/gamemodes/changeling/powers/absorb.dm b/code/game/gamemodes/changeling/powers/absorb.dm index 516a407cbef..7bbd247c13d 100644 --- a/code/game/gamemodes/changeling/powers/absorb.dm +++ b/code/game/gamemodes/changeling/powers/absorb.dm @@ -63,6 +63,27 @@ target.mind.show_memory(src, 0) //I can read your mind, kekeke. Output all their notes. + //Some of target's recent speech, so the changeling can attempt to imitate them better. + //Recent as opposed to all because rounds tend to have a LOT of text. + var/list/recent_speech = list() + + if(target.say_log.len > LING_ABSORB_RECENT_SPEECH) + recent_speech = target.say_log.Copy(target.say_log.len-LING_ABSORB_RECENT_SPEECH+1,0) //0 so len-LING_ARS+1 to end of list + else + for(var/spoken_memory in target.say_log) + if(recent_speech.len >= LING_ABSORB_RECENT_SPEECH) + break + recent_speech += spoken_memory + + if(recent_speech.len) + user.mind.store_memory("Some of [target]'s speech patterns, we should study these to better impersonate them!") + user << "Some of [target]'s speech patterns, we should study these to better impersonate them!" + for(var/spoken_memory in recent_speech) + user.mind.store_memory("\"[spoken_memory]\"") + user << "\"[spoken_memory]\"" + user.mind.store_memory("We have no more knowledge of [target]'s speech patterns.") + user << "We have no more knowledge of [target]'s speech patterns." + if(target.mind.changeling)//If the target was a changeling, suck out their extra juice and objective points! changeling.chem_charges += min(target.mind.changeling.chem_charges, changeling.chem_storage) changeling.absorbedcount += (target.mind.changeling.absorbedcount) diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index b48f2f21e14..096da4e0b0d 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -45,4 +45,6 @@ var/list/pipes_shown = list() var/last_played_vent - var/smoke_delay = 0 //used to prevent spam with smoke reagent reaction on mob. \ No newline at end of file + var/smoke_delay = 0 //used to prevent spam with smoke reagent reaction on mob. + + var/list/say_log = list() //a log of what we've said, plain text, no spans or junk, essentially just each individual "message" \ No newline at end of file diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index a0df06a9088..f7910fd9d77 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -87,7 +87,7 @@ var/list/crit_allowed_modes = list(MODE_WHISPER,MODE_CHANGELING,MODE_ALIEN) return if(!can_speak_vocal(message)) - src << "You find yourself unable to speak!" + src << "You find yourself unable to speak!" return message = treat_message(message) @@ -97,6 +97,9 @@ var/list/crit_allowed_modes = list(MODE_WHISPER,MODE_CHANGELING,MODE_ALIEN) if(!message) return + //Log of what we've said, plain message, no spans or junk + say_log += message + var/message_range = 7 var/radio_return = radio(message, message_mode, spans) if(radio_return & NOPASS) //There's a whisper() message_mode, no need to continue the proc if that is called @@ -272,4 +275,4 @@ var/list/crit_allowed_modes = list(MODE_WHISPER,MODE_CHANGELING,MODE_ALIEN) return "stammers, \"[tempinput]\"" if (getBrainLoss() >= 60) return "gibbers, \"[tempinput]\"" - return ..() + return ..() \ No newline at end of file diff --git a/html/changelogs/RemieRichards-PR-10599.yml b/html/changelogs/RemieRichards-PR-10599.yml index 32310e98e5a..7f89855a7c0 100644 --- a/html/changelogs/RemieRichards-PR-10599.yml +++ b/html/changelogs/RemieRichards-PR-10599.yml @@ -6,5 +6,6 @@ delete-after: True changes: - tweak: "Changelings now regenerate chemicals and geneticdamage while dead, but only up to specific caps (50% of their max chem storage, and 50 geneticdamage)" - tweak: "Fakedeath's length has been reduced from 80s dead (1 minute 20) to 40s dead" + - rscadd: "Changelings now get to see the last 8 messages the person they absorbed said, to allow them to better impersonate their victim's speech patterns" \ No newline at end of file From 2bc5fd2db9a77de3985efbf50b206f59048615fc Mon Sep 17 00:00:00 2001 From: Ikarrus Date: Mon, 13 Jul 2015 23:31:00 -0600 Subject: [PATCH 28/89] Reinforced windows and windoors are a bit more resistant to fires and blasts - Regular windows/windoors: 1073k - Reinforced windows/windoors: 1873k - Reinforced windows/windoors will count as walls for blast range calculation (The lowest possible value) --- code/game/machinery/doors/windowdoor.dm | 5 ++++- code/game/objects/explosion.dm | 8 ++++++++ code/game/objects/structures/window.dm | 4 +++- html/changelogs/ikarrus-honkl.yml | 6 ++++++ 4 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 html/changelogs/ikarrus-honkl.yml diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index 5ea017c481b..d1df8b5335e 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -9,6 +9,7 @@ flags = ON_BORDER opacity = 0 var/obj/item/weapon/airlock_electronics/electronics = null + var/reinf = 0 /obj/machinery/door/window/New() ..() @@ -184,7 +185,7 @@ ..() /obj/machinery/door/window/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(exposed_temperature > T0C + 800) + if(exposed_temperature > T0C + (reinf ? 1600 : 800)) take_damage(round(exposed_volume / 200)) ..() @@ -380,6 +381,8 @@ base_state = "leftsecure" var/id = null health = 300.0 //Stronger doors for prison (regular window door health is 200) + reinf = 1 + explosion_block = 1 /obj/machinery/door/window/northleft diff --git a/code/game/objects/explosion.dm b/code/game/objects/explosion.dm index 3a7095a29a4..25dc85de025 100644 --- a/code/game/objects/explosion.dm +++ b/code/game/objects/explosion.dm @@ -102,6 +102,10 @@ if(D.density && D.explosion_block) dist += D.explosion_block + for(var/obj/structure/window/W in Trajectory) + if(W.reinf && W.fulltile) + dist += W.explosion_block + var/flame_dist = 0 var/throw_dist = dist @@ -205,6 +209,10 @@ if(D.density && D.explosion_block) dist += D.explosion_block + for(var/obj/structure/window/W in TT) + if(W.explosion_block && W.fulltile) + dist += W.explosion_block + if(dist < dev) T.color = "red" T.maptext = "Dev" diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index 5a4a1ef3706..0a81406c494 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -409,7 +409,7 @@ overlays += crack_overlay /obj/structure/window/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(exposed_temperature > T0C + 800) + if(exposed_temperature > T0C + (reinf ? 1600 : 800)) hit(round(exposed_volume / 100), 0) ..() @@ -421,6 +421,7 @@ icon_state = "rwindow" reinf = 1 maxhealth = 50 + explosion_block = 1 /obj/structure/window/reinforced/tinted name = "tinted window" @@ -472,3 +473,4 @@ reinf = 1 smooth = 1 canSmoothWith = null + explosion_block = 1 diff --git a/html/changelogs/ikarrus-honkl.yml b/html/changelogs/ikarrus-honkl.yml new file mode 100644 index 00000000000..7ff359fc4d6 --- /dev/null +++ b/html/changelogs/ikarrus-honkl.yml @@ -0,0 +1,6 @@ +author: Ikarrus + +delete-after: True + +changes: + - tweak: "Reinforced windows and windoors are a bit more resistant to fires and blasts." From 360822af44cfb146a6ef0ad7a538f817b7489475 Mon Sep 17 00:00:00 2001 From: CorruptComputer Date: Tue, 14 Jul 2015 00:51:35 -0500 Subject: [PATCH 29/89] Fixed path errors on shuttles Fixed the escape shuttle being cut in half Fixed some pipes in atmos room being hidden Added lights to atmos room (how the fuck did I miss this?) Fixed some issues with the main power line --- .../AsteroidStation/Asteroidstation.dmm | 333 +++++++++-------- _maps/map_files/AsteroidStation/readme.dm | 6 - _maps/map_files/AsteroidStation/z2.dmm | 339 +++++++++--------- 3 files changed, 344 insertions(+), 334 deletions(-) delete mode 100644 _maps/map_files/AsteroidStation/readme.dm diff --git a/_maps/map_files/AsteroidStation/Asteroidstation.dmm b/_maps/map_files/AsteroidStation/Asteroidstation.dmm index cb5952c9593..e4393e25946 100644 --- a/_maps/map_files/AsteroidStation/Asteroidstation.dmm +++ b/_maps/map_files/AsteroidStation/Asteroidstation.dmm @@ -11,49 +11,49 @@ "aak" = (/obj/structure/lattice,/turf/space,/area/space) "aal" = (/turf/simulated/floor/plating/asteroid/airless,/area/mine/explored) "aam" = (/turf/simulated/floor/plating/asteroid/airless,/area/space) -"aan" = (/turf/simulated/wall/shuttle{icon_state = "swall_s6"},/area/space) -"aao" = (/turf/simulated/wall/shuttle{icon_state = "swall14"},/area/space) -"aap" = (/turf/simulated/wall/shuttle{icon_state = "swall12"},/area/space) -"aaq" = (/obj/structure/window/shuttle,/obj/structure/grille,/turf/simulated/floor/plasteel/shuttle,/area/space) -"aar" = (/turf/space,/turf/simulated/wall/shuttle{dir = 3; icon_state = "swall_f10"},/area/space) -"aas" = (/obj/structure/shuttle/engine/propulsion{dir = 4},/turf/space,/area/space) -"aat" = (/turf/simulated/wall/shuttle{icon_state = "swall11"},/area/space) -"aau" = (/turf/simulated/floor/plasteel/shuttle,/area/space) -"aav" = (/obj/machinery/computer/arcade,/turf/simulated/floor/plasteel/shuttle,/area/space) -"aaw" = (/obj/structure/closet/wardrobe/white,/turf/simulated/floor/plasteel/shuttle,/area/space) -"aax" = (/obj/structure/closet/wardrobe/black,/turf/simulated/floor/plasteel/shuttle,/area/space) -"aay" = (/turf/simulated/wall/shuttle{icon_state = "swall7"},/area/space) -"aaz" = (/turf/space,/turf/simulated/wall/shuttle{icon_state = "swall_f10"},/area/space) -"aaA" = (/obj/structure/shuttle/engine/heater{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/space) -"aaB" = (/obj/structure/stool/bed/chair{dir = 4},/obj/effect/landmark{name = "JoinLate"},/turf/simulated/floor/plasteel/shuttle,/area/space) -"aaC" = (/obj/structure/stool/bed/chair/office/dark{dir = 4},/turf/simulated/floor/plasteel/shuttle,/area/space) -"aaD" = (/obj/structure/table,/obj/item/weapon/pen,/obj/item/weapon/paper{icon_state = "paper_words"; info = "Pilot's Log, . I think the engine trouble might be serious this time. This station hasn't exactly been a big help for fixing our problems, either; so I think this shuttle's grounded for the forseeable future. Fuck."; name = "Pilot's Log"},/turf/simulated/floor/plasteel/shuttle,/area/space) -"aaE" = (/turf/simulated/wall/shuttle{icon_state = "swall3"},/area/space) -"aaF" = (/obj/effect/landmark{name = "Observer-Start"},/turf/simulated/floor/plasteel/shuttle,/area/space) -"aaG" = (/obj/machinery/door/airlock/shuttle{name = "Arrivals Shuttle Airlock"},/turf/simulated/floor/plasteel/shuttle,/area/space) -"aaH" = (/obj/structure/table,/obj/item/weapon/cigbutt/cigarbutt,/turf/simulated/floor/plasteel/shuttle,/area/space) -"aaI" = (/turf/space,/turf/simulated/wall/shuttle{icon_state = "swall_f6"},/area/space) -"aaJ" = (/obj/structure/grille,/obj/structure/window/shuttle,/turf/simulated/floor/plasteel/shuttle,/area/space) -"aaK" = (/obj/structure/table,/obj/machinery/microwave,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor/plasteel/shuttle,/area/space) -"aaL" = (/obj/structure/closet/wardrobe/grey,/turf/simulated/floor/plasteel/shuttle,/area/space) -"aaM" = (/obj/structure/closet/wardrobe/green,/turf/simulated/floor/plasteel/shuttle,/area/space) -"aaN" = (/obj/structure/table,/obj/machinery/requests_console{department = "Arrival shuttle"; name = "Arrivals Shuttle Requests Console"; pixel_y = -30},/turf/simulated/floor/plasteel/shuttle,/area/space) -"aaO" = (/turf/space,/turf/simulated/wall/shuttle{icon_state = "swall_f9"},/area/space) -"aaP" = (/obj/structure/stool/bed/chair{dir = 1},/obj/machinery/status_display{pixel_x = 32},/turf/simulated/floor/plasteel/shuttle,/area/space) -"aaQ" = (/turf/simulated/wall/shuttle{icon_state = "swall_s5"},/area/space) -"aaR" = (/turf/simulated/wall/shuttle{icon_state = "swall13"},/area/space) -"aaS" = (/obj/machinery/door/airlock/shuttle{name = "Arrivals Shuttle Airlock"},/obj/docking_port/mobile{dwidth = 5; height = 7; id = "arrival"; name = "arrival shuttle"; travelDir = -90; width = 15},/obj/docking_port/stationary{dwidth = 5; height = 7; id = "arrival_home"; name = "port bay 1"; width = 15},/turf/simulated/floor/plasteel/shuttle,/area/space) -"aaT" = (/turf/simulated/wall/shuttle{icon_state = "swall_s9"},/area/space) -"aaU" = (/obj/structure/stool/bed/chair{dir = 1},/obj/item/device/radio/intercom{pixel_x = 25},/turf/simulated/floor/plasteel/shuttle,/area/space) +"aan" = (/turf/simulated/wall/shuttle{icon_state = "swall_s6"},/area/shuttle/arrival) +"aao" = (/turf/simulated/wall/shuttle{icon_state = "swall12"},/area/shuttle/arrival) +"aap" = (/turf/simulated/wall/shuttle{icon_state = "swall14"},/area/shuttle/arrival) +"aaq" = (/obj/structure/window/shuttle,/obj/structure/grille,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/arrival) +"aar" = (/turf/space,/turf/simulated/wall/shuttle{dir = 3; icon_state = "swall_f10"},/area/shuttle/arrival) +"aas" = (/obj/structure/shuttle/engine/propulsion{dir = 4},/turf/space,/area/shuttle/arrival) +"aat" = (/turf/simulated/floor/plasteel/shuttle,/area/shuttle/arrival) +"aau" = (/turf/simulated/wall/shuttle{icon_state = "swall11"},/area/shuttle/arrival) +"aav" = (/obj/machinery/computer/arcade,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/arrival) +"aaw" = (/obj/structure/closet/wardrobe/black,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/arrival) +"aax" = (/obj/structure/closet/wardrobe/white,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/arrival) +"aay" = (/turf/simulated/wall/shuttle{icon_state = "swall7"},/area/shuttle/arrival) +"aaz" = (/turf/space,/turf/simulated/wall/shuttle{icon_state = "swall_f10"},/area/shuttle/arrival) +"aaA" = (/obj/structure/shuttle/engine/heater{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/shuttle/arrival) +"aaB" = (/obj/structure/stool/bed/chair{dir = 4},/obj/effect/landmark{name = "JoinLate"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/arrival) +"aaC" = (/obj/structure/stool/bed/chair/office/dark{dir = 4},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/arrival) +"aaD" = (/turf/simulated/wall/shuttle{icon_state = "swall3"},/area/shuttle/arrival) +"aaE" = (/obj/structure/table,/obj/item/weapon/pen,/obj/item/weapon/paper{icon_state = "paper_words"; info = "Pilot's Log, . I think the engine trouble might be serious this time. This station hasn't exactly been a big help for fixing our problems, either; so I think this shuttle's grounded for the forseeable future. Fuck."; name = "Pilot's Log"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/arrival) +"aaF" = (/obj/effect/landmark{name = "Observer-Start"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/arrival) +"aaG" = (/obj/machinery/door/airlock/shuttle{name = "Arrivals Shuttle Airlock"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/arrival) +"aaH" = (/obj/structure/table,/obj/item/weapon/cigbutt/cigarbutt,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/arrival) +"aaI" = (/turf/space,/turf/simulated/wall/shuttle{icon_state = "swall_f6"},/area/shuttle/pod_1) +"aaJ" = (/turf/space,/turf/simulated/wall/shuttle{icon_state = "swall_f10"},/area/shuttle/pod_1) +"aaK" = (/obj/structure/grille,/obj/structure/window/shuttle,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/pod_1) +"aaL" = (/turf/space,/turf/simulated/wall/shuttle{icon_state = "swall_f6"},/area/shuttle/pod_2) +"aaM" = (/turf/space,/turf/simulated/wall/shuttle{icon_state = "swall_f10"},/area/shuttle/pod_2) +"aaN" = (/obj/structure/grille,/obj/structure/window/shuttle,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/pod_2) +"aaO" = (/obj/structure/table,/obj/machinery/microwave,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/arrival) +"aaP" = (/obj/structure/closet/wardrobe/green,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/arrival) +"aaQ" = (/obj/structure/closet/wardrobe/grey,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/arrival) +"aaR" = (/obj/structure/table,/obj/machinery/requests_console{department = "Arrival shuttle"; name = "Arrivals Shuttle Requests Console"; pixel_y = -30},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/arrival) +"aaS" = (/turf/space,/turf/simulated/wall/shuttle{icon_state = "swall_f9"},/area/shuttle/arrival) +"aaT" = (/turf/simulated/wall/shuttle{icon_state = "swall3"},/area/shuttle/pod_1) +"aaU" = (/obj/structure/stool/bed/chair{dir = 1},/obj/machinery/status_display{pixel_x = 32},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/pod_1) "aaV" = (/turf/simulated/wall/r_wall,/area/hallway/secondary/entry) "aaW" = (/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating,/area/hallway/secondary/entry{name = "Arrivals Lounge"}) "aaX" = (/obj/machinery/door/airlock/external{name = "Arrivals Docking Airlock"},/turf/simulated/floor/plating,/area/hallway/secondary/entry{name = "Arrivals Lounge"}) "aaY" = (/turf/simulated/wall,/area/hallway/secondary/entry{name = "Arrivals Lounge"}) -"aaZ" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/wall/shuttle{icon_state = "swall_f5"},/area/space) -"aba" = (/obj/machinery/door/airlock/shuttle{name = "Escape Pod Airlock"},/obj/docking_port/mobile/pod{id = "pod1"; name = "escape pod 1"},/turf/simulated/floor/plasteel/shuttle,/area/space) -"abb" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/wall/shuttle{icon_state = "swall_f9"},/area/space) +"aaZ" = (/turf/simulated/wall/shuttle{icon_state = "swall3"},/area/shuttle/pod_2) +"aba" = (/obj/structure/stool/bed/chair{dir = 1},/obj/machinery/status_display{pixel_x = 32},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/pod_2) +"abb" = (/turf/simulated/wall/shuttle{icon_state = "swall_s5"},/area/shuttle/arrival) "abc" = (/turf/simulated/wall,/area/hallway/secondary/entry) -"abd" = (/obj/machinery/door/airlock/shuttle{name = "Escape Pod Airlock"},/obj/docking_port/mobile/pod{id = "pod2"; name = "escape pod 2"},/turf/simulated/floor/plasteel/shuttle,/area/space) +"abd" = (/turf/simulated/wall/shuttle{icon_state = "swall13"},/area/shuttle/arrival) "abe" = (/turf/simulated/floor/plating,/area/hallway/secondary/entry{name = "Arrivals Lounge"}) "abf" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/hallway/secondary/entry{name = "Arrivals Lounge"}) "abg" = (/obj/structure/closet/emcloset,/obj/machinery/camera{c_tag = "Escape Pod One"; dir = 8},/turf/simulated/floor/plating,/area/hallway/secondary/entry{name = "Arrivals Lounge"}) @@ -170,7 +170,7 @@ "adn" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; pixel_y = 0},/turf/simulated/floor/plating,/area/construction) "ado" = (/turf/simulated/floor/plasteel,/area/construction) "adp" = (/turf/simulated/wall/r_wall,/area/turret_protected/ai) -"adq" = (/obj/structure/cable/orange{icon_state = "0-2"; d1 = 1; d2 = 2},/obj/machinery/power/smes,/turf/simulated/floor/plating,/area/maintenance/fpmaint) +"adq" = (/obj/machinery/door/airlock/shuttle{name = "Arrivals Shuttle Airlock"},/obj/docking_port/mobile{dwidth = 5; height = 7; id = "arrival"; name = "arrival shuttle"; travelDir = -90; width = 15},/obj/docking_port/stationary{dwidth = 5; height = 7; id = "arrival_home"; name = "port bay 1"; width = 15},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/arrival) "adr" = (/obj/machinery/power/terminal{dir = 8},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint) "ads" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/wall,/area/maintenance/fpmaint) "adt" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/fpmaint) @@ -192,8 +192,8 @@ "adJ" = (/obj/machinery/light_construct,/turf/simulated/floor/plating,/area/construction) "adK" = (/obj/machinery/light/small,/turf/simulated/floor/plating,/area/construction) "adL" = (/obj/structure/extinguisher_cabinet{pixel_y = -30},/turf/simulated/floor/plasteel,/area/construction) -"adM" = (/turf/simulated/wall,/area/mine/explored) -"adN" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/smes{charge = 5e+006},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) +"adM" = (/turf/simulated/wall/shuttle{icon_state = "swall_s9"},/area/shuttle/arrival) +"adN" = (/obj/structure/stool/bed/chair{dir = 1},/obj/item/device/radio/intercom{pixel_x = 25},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/pod_1) "adO" = (/obj/machinery/power/terminal{dir = 8},/turf/simulated/wall/r_wall,/area/turret_protected/ai) "adP" = (/obj/structure/cable/orange{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/camera{c_tag = "Arrivals Power Control"; dir = 4},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/fpmaint) "adQ" = (/obj/structure/cable/orange{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{dir = 4; name = "E.V.A. Maintenance APC"; pixel_x = 24},/turf/simulated/floor/plating,/area/maintenance/fpmaint) @@ -453,7 +453,7 @@ "aiK" = (/obj/structure/cable/orange{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/wall,/area/maintenance/apmaint) "aiL" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/obj/machinery/door/airlock/atmos{name = "Cargo Atmospheric Control"; req_access_txt = "24"},/turf/simulated/floor/plating,/area/maintenance/apmaint) "aiM" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area/maintenance/apmaint) -"aiN" = (/obj/docking_port/stationary{dir = 8; dwidth = 5; height = 7; id = "supply_home"; name = "supply bay"; width = 12},/turf/space,/area/space) +"aiN" = (/obj/structure/stool/bed/chair{dir = 1},/obj/item/device/radio/intercom{pixel_x = 25},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/pod_2) "aiO" = (/obj/machinery/telecomms/bus/preset_two,/turf/simulated/floor/bluegrid{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/server) "aiP" = (/obj/machinery/telecomms/processor/preset_one,/turf/simulated/floor/bluegrid{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/server) "aiQ" = (/obj/machinery/power/apc{dir = 1; name = "Telecommunications APC"; pixel_y = 24},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/tcommsat/server) @@ -563,7 +563,7 @@ "akQ" = (/obj/machinery/door/airlock/highsecurity{desc = "The heart of the AI, defended by autoturrets and motion alarms."; icon_state = "door_locked"; locked = 1; name = "AI Chamber"; req_access_txt = "16"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai) "akR" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall/r_wall,/area/turret_protected/ai) "akS" = (/turf/simulated/wall/r_wall,/area/mine/explored) -"akT" = (/obj/machinery/power/smes,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) +"akT" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/wall/shuttle{icon_state = "swall_f5"},/area/shuttle/pod_1) "akU" = (/obj/machinery/power/terminal{dir = 8},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) "akV" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) "akW" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 32},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) @@ -592,7 +592,7 @@ "alt" = (/obj/machinery/conveyor{id = "QMLoad"},/obj/machinery/door/poddoor{id = "QMLoaddoor"; name = "Supply Dock Loading Door"},/turf/simulated/floor/plating{icon_state = "warnplatecorner"},/area/quartermaster/office) "alu" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/tcommsat/server) "alv" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/tcommsat/server) -"alw" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/smes{charge = 5e+006},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/tcommsat/server) +"alw" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/wall/shuttle{icon_state = "swall_f9"},/area/shuttle/pod_1) "alx" = (/turf/simulated/wall/r_wall,/area/turret_protected/ai_upload) "aly" = (/obj/machinery/light_switch{dir = 1; pixel_y = 22},/obj/machinery/porta_turret{ai = 1},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) "alz" = (/obj/machinery/flasher{id = "AI"; pixel_x = 6; pixel_y = 32},/obj/machinery/computer/upload/ai,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) @@ -1249,7 +1249,7 @@ "aya" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/blue{icon_state = "1-4"; d1 = 1; d2 = 2},/turf/simulated/floor/plasteel{icon_state = "neutralcorner"},/area/hallway/primary/starboard{name = "Starboard Hallway"}) "ayb" = (/obj/structure/cable/blue{icon_state = "4-8"; d1 = 1; d2 = 2},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/wall,/area/hallway/primary/starboard{name = "Starboard Hallway"}) "ayc" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/blue{icon_state = "2-8"; d1 = 1; d2 = 2},/turf/simulated/floor/plating,/area/maintenance/maintcentral) -"ayd" = (/obj/machinery/power/smes,/obj/structure/cable/blue{icon_state = "0-4"; d1 = 1; d2 = 2},/turf/simulated/floor/plating,/area/maintenance/maintcentral) +"ayd" = (/obj/machinery/door/airlock/shuttle{name = "Escape Pod Airlock"},/obj/docking_port/mobile/pod{id = "pod1"; name = "escape pod 1"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/pod_1) "aye" = (/obj/structure/cable/blue{icon_state = "2-8"; d1 = 1; d2 = 2},/obj/machinery/camera{c_tag = "Bridge Power Control"},/turf/simulated/floor/plating,/area/maintenance/maintcentral) "ayf" = (/obj/item/weapon/pickaxe{pixel_x = 5},/turf/simulated/floor/plating,/area/construction/Storage{name = "Construction Site"}) "ayg" = (/turf/simulated/floor/plating,/area/construction/Storage{name = "Construction Site"}) @@ -1793,7 +1793,7 @@ "aIy" = (/obj/structure/transit_tube{icon_state = "E-W-Pass"},/turf/space,/area/space) "aIz" = (/obj/structure/transit_tube{icon_state = "W-NE"},/turf/space,/area/space) "aIA" = (/obj/machinery/power/terminal{dir = 4},/turf/simulated/wall/r_wall,/area/engine/gravity_generator) -"aIB" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/obj/machinery/power/smes{charge = 5e+006},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel,/area/engine/gravity_generator) +"aIB" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/wall/shuttle{icon_state = "swall_f5"},/area/shuttle/pod_2) "aIC" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/plasteel,/area/engine/gravity_generator) "aID" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/light{dir = 1},/obj/structure/table,/obj/item/weapon/paper/gravity_gen,/obj/item/weapon/pen/blue,/turf/simulated/floor/plasteel,/area/engine/gravity_generator) "aIE" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/firealarm{pixel_y = 25},/obj/structure/stool/bed/chair/office/light{dir = 8},/turf/simulated/floor/plasteel,/area/engine/gravity_generator) @@ -2081,7 +2081,7 @@ "aOa" = (/obj/machinery/light_switch{dir = 4; pixel_x = 22},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/obj/structure/cable/blue{icon_state = "2-8"; d1 = 1; d2 = 2},/turf/simulated/floor/wood,/area/crew_quarters/captain) "aOb" = (/obj/structure/sign/pods,/turf/simulated/wall,/area/bridge) "aOc" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/bridge) -"aOd" = (/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/simulated/wall/shuttle{icon_state = "swall_f6"},/area/space) +"aOd" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/wall/shuttle{icon_state = "swall_f9"},/area/shuttle/pod_2) "aOe" = (/obj/structure/table,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/obj/machinery/camera{c_tag = "Prison Fore"; dir = 4; network = list("SS13","Prison")},/turf/simulated/floor/plasteel,/area/security/prison) "aOf" = (/turf/simulated/floor/plasteel,/area/security/prison) "aOg" = (/obj/machinery/washing_machine,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/security/prison) @@ -2131,7 +2131,7 @@ "aOY" = (/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/simulated/floor/plasteel{dir = 8; icon_state = "neutralcorner"},/area/hallway/primary/starboard{name = "Starboard Hallway"}) "aOZ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard{name = "Starboard Hallway"}) "aPa" = (/obj/structure/cable,/obj/machinery/power/terminal{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) -"aPb" = (/obj/structure/cable/green,/obj/machinery/power/smes,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) +"aPb" = (/obj/machinery/door/airlock/shuttle{name = "Escape Pod Airlock"},/obj/docking_port/mobile/pod{id = "pod2"; name = "escape pod 2"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/pod_2) "aPc" = (/turf/simulated/wall,/area/crew_quarters/kitchen) "aPd" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=2"; freq = 1400; location = "Kitchen"},/obj/structure/plasticflaps,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "loadingarea"},/area/crew_quarters/kitchen) "aPe" = (/obj/structure/cable/green{icon_state = "1-2"},/obj/machinery/door/airlock/maintenance{name = "Kitchen Maintenance"; req_access_txt = "28"; req_one_access_txt = "0"},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) @@ -2146,9 +2146,9 @@ "aPn" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/airlock/command{desc = "The office of the station's commanding officer, answerable only to Central Command and Space Law."; name = "Captain's Quarters"; req_access = null; req_access_txt = "20"},/turf/simulated/floor/wood,/area/crew_quarters/captain) "aPo" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/wall/r_wall,/area/crew_quarters/captain) "aPp" = (/obj/machinery/light/small{dir = 8},/obj/machinery/camera{c_tag = "Bridge Escape Pod"; dir = 4},/turf/simulated/floor/plating,/area/bridge) -"aPq" = (/obj/machinery/door/airlock/shuttle{name = "Escape Pod Airlock"},/obj/docking_port/mobile/pod{dir = 4; id = "pod3"; name = "escape pod 3"},/turf/simulated/floor/plasteel/shuttle,/area/space) -"aPr" = (/obj/structure/stool/bed/chair{dir = 4},/obj/item/device/radio/intercom{pixel_y = 25},/turf/simulated/floor/plasteel/shuttle,/area/space) -"aPs" = (/obj/structure/stool/bed/chair{dir = 4},/obj/machinery/status_display{pixel_y = 32},/turf/simulated/floor/plasteel/shuttle,/area/space) +"aPq" = (/obj/structure/cable/orange{icon_state = "0-2"; d1 = 1; d2 = 2},/obj/machinery/power/smes{charge = 1e+006},/turf/simulated/floor/plating,/area/maintenance/fpmaint) +"aPr" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/smes{charge = 1e+006},/turf/simulated/floor/bluegrid,/area/turret_protected/ai) +"aPs" = (/turf/space,/area/shuttle/supply) "aPt" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/security/prison) "aPu" = (/obj/structure/table,/turf/simulated/floor/plasteel,/area/security/prison) "aPv" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id = "permacell1"; name = "Cell Shutters"; opacity = 0},/obj/machinery/door/airlock/glass{id_tag = "permabolt1"; name = "Cell 1"},/turf/simulated/floor/plasteel,/area/security/prison) @@ -2203,7 +2203,7 @@ "aQs" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/requests_console{announcementConsole = 1; department = "Bridge"; departmentType = 5; name = "Bridge Requests Console"; pixel_y = 30},/turf/simulated/floor/plasteel,/area/bridge) "aQt" = (/obj/machinery/door/airlock/external{desc = "Leads to one of the station's small, FTL-capable lifeboats."; name = "Bridge Escape Pod"; req_access = null; req_access_txt = "0"},/obj/structure/cable/blue{icon_state = "4-8"; d1 = 1; d2 = 2},/turf/simulated/floor/plating,/area/bridge) "aQu" = (/turf/simulated/floor/plating,/area/bridge) -"aQv" = (/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/simulated/wall/shuttle{icon_state = "swall_f5"},/area/space) +"aQv" = (/obj/docking_port/stationary{dir = 8; dwidth = 5; height = 7; id = "supply_home"; name = "supply bay"; width = 12},/turf/space,/area/shuttle/supply) "aQw" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/security/prison) "aQx" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel,/area/security/prison) "aQy" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plasteel,/area/security/prison) @@ -3040,7 +3040,7 @@ "bgx" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel,/area/engine/engineering) "bgy" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel,/area/engine/engineering) "bgz" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/engine/engineering) -"bgA" = (/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/power/smes,/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/engine/engineering) +"bgA" = (/obj/machinery/power/smes{charge = 1e+006},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard) "bgB" = (/obj/machinery/door/airlock/external{name = "Engineering External Access"; req_access = null; req_access_txt = "10;13"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engine/engineering) "bgC" = (/obj/machinery/computer/secure_data,/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/engine/engineering) "bgD" = (/obj/structure/stool/bed/chair/office/dark{dir = 8},/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel,/area/engine/engineering) @@ -3222,7 +3222,7 @@ "bjX" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/engineering) "bjY" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/airlock/glass_engineering{desc = "A place for the Engineering staff to slack off (hopefully) after completing the Engine."; name = "Engineering Break Room"; req_access_txt = "11"; req_one_access_txt = "0"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowfull"},/area/engine/engineering) "bjZ" = (/obj/structure/grille,/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/engine/engineering) -"bka" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/simulated/wall/shuttle{icon_state = "swall_f6"},/area/space) +"bka" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/smes{charge = 1e+006},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/tcommsat/server) "bkb" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "neutralcorner"; dir = 1},/area/hallway/primary/starboard{name = "Starboard Hallway"}) "bkc" = (/obj/structure/table/wood,/obj/item/toy/carpplushie,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar) "bkd" = (/obj/machinery/door/window/westright{name = "Theater Stage"; req_access_txt = "46"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar) @@ -3266,7 +3266,7 @@ "bkP" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 1; icon_state = "yellow"},/area/engine/engineering) "bkQ" = (/obj/machinery/disposal,/obj/machinery/alarm{dir = 8; pixel_x = 22},/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/plasteel{dir = 5; icon_state = "yellow"},/area/engine/engineering) "bkR" = (/obj/machinery/camera{c_tag = "Engineering Escape Pod"; dir = 4},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/engine/engineering) -"bkS" = (/obj/machinery/door/airlock/shuttle{name = "Escape Pod Airlock"},/obj/docking_port/mobile/pod{dir = 4; id = "pod4"; name = "escape pod 4"},/turf/simulated/floor/plasteel/shuttle,/area/space) +"bkS" = (/obj/machinery/power/smes{charge = 1e+006},/obj/structure/cable/blue{icon_state = "0-4"; d1 = 1; d2 = 2},/turf/simulated/floor/plating,/area/maintenance/maintcentral) "bkT" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/light{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "neutralcorner"; dir = 1},/area/hallway/primary/starboard{name = "Starboard Hallway"}) "bkU" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/bar) "bkV" = (/obj/machinery/light,/turf/simulated/floor/wood,/area/crew_quarters/bar) @@ -3304,7 +3304,7 @@ "blB" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/obj/structure/stool,/turf/simulated/floor/plasteel,/area/engine/engineering) "blC" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/engine/engineering) "blD" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/engine/engineering) -"blE" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/simulated/wall/shuttle{icon_state = "swall_f5"},/area/space) +"blE" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/obj/machinery/power/smes{charge = 1e+006},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plasteel,/area/engine/gravity_generator) "blF" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "neutralcorner"; dir = 1},/area/hallway/primary/starboard{name = "Starboard Hallway"}) "blG" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plasteel,/area/hallway/primary/starboard{name = "Starboard Hallway"}) "blH" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar) @@ -3868,7 +3868,7 @@ "bwt" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plasteel,/area/hallway/primary/central{name = "Aft Central Hallway"}) "bwu" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/hallway/primary/central{name = "Aft Central Hallway"}) "bwv" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel,/area/hallway/primary/central{name = "Aft Central Hallway"}) -"bww" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; external_pressure_bound = 0; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plasteel,/area/hallway/primary/central{name = "Aft Central Hallway"}) +"bww" = (/turf/simulated/wall/shuttle{icon_state = "swall12"},/area/shuttle/pod_3) "bwx" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/central{name = "Aft Central Hallway"}) "bwy" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/central{name = "Aft Central Hallway"}) "bwz" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/primary/central{name = "Aft Central Hallway"}) @@ -3992,7 +3992,7 @@ "byN" = (/obj/structure/reagent_dispensers/water_cooler,/turf/simulated/floor/plasteel{icon_state = "green"; dir = 4},/area/crew_quarters/fitness) "byO" = (/obj/machinery/computer/monitor,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "byP" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) -"byQ" = (/obj/machinery/power/smes,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) +"byQ" = (/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/simulated/wall/shuttle{icon_state = "swall_f6"},/area/shuttle/pod_3) "byR" = (/obj/item/clothing/suit/ianshirt,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "byS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor/plasteel,/area/assembly/chargebay) "byT" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/assembly/chargebay) @@ -4381,7 +4381,7 @@ "bGm" = (/obj/structure/grille,/obj/item/weapon/shard,/turf/simulated/floor/plating/airless,/area/mine/abandoned) "bGn" = (/turf/simulated/floor/plasteel/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/abandoned) "bGo" = (/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating/airless,/area/mine/abandoned) -"bGp" = (/obj/structure/cable/pink{d2 = 2; icon_state = "0-2"},/obj/machinery/power/smes,/turf/simulated/floor/plating,/area/maintenance/asmaint2) +"bGp" = (/turf/space,/turf/simulated/wall/shuttle{icon_state = "swall_f10"},/area/shuttle/pod_3) "bGq" = (/obj/machinery/power/terminal{dir = 8},/obj/structure/cable,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "bGr" = (/obj/structure/cable/pink{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{dir = 1; name = "Research Division Maintenance APC"; pixel_y = 24},/turf/simulated/floor/plating,/area/maintenance/asmaint2) "bGs" = (/obj/structure/table,/obj/item/weapon/extinguisher,/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/plating,/area/maintenance/asmaint2) @@ -4626,7 +4626,7 @@ "bKX" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 31},/obj/structure/lamarr,/turf/simulated/floor/plasteel{dir = 4; icon_state = "whiteblue"},/area/crew_quarters/hor) "bKY" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/obj/structure/disposalpipe/segment,/obj/machinery/alarm{dir = 8; pixel_x = 22},/turf/simulated/floor/plasteel{icon_state = "neutralcorner"},/area/hallway/primary/aft{name = "Aft Hallway"}) "bKZ" = (/obj/machinery/power/terminal{dir = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/maintenance/asmaint) -"bLa" = (/obj/structure/cable/cyan{icon_state = "0-2"},/obj/machinery/power/smes,/turf/simulated/floor/plating,/area/maintenance/asmaint) +"bLa" = (/obj/structure/cable/green,/obj/machinery/power/smes{charge = 1e+006},/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "bLb" = (/obj/structure/cable/cyan{icon_state = "0-2"},/obj/machinery/computer/monitor,/turf/simulated/floor/plating,/area/maintenance/asmaint) "bLc" = (/obj/structure/cable/cyan{icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/asmaint) "bLd" = (/obj/structure/table/glass,/obj/item/weapon/storage/box/syringes,/obj/item/weapon/storage/box/beakers{pixel_x = 2; pixel_y = 2},/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whiteyellow"},/area/medical/chemistry) @@ -5307,7 +5307,7 @@ "bYc" = (/obj/machinery/light,/obj/structure/cable/cyan{icon_state = "1-2"},/obj/structure/cable/cyan{icon_state = "2-8"},/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/medical/cmo) "bYd" = (/obj/structure/table/glass,/obj/item/clothing/glasses/hud/health,/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor/plasteel{dir = 8; icon_state = "barber"},/area/medical/cmo) "bYe" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"},/turf/simulated/wall/r_wall,/area/maintenance/starboardsolar) -"bYf" = (/obj/machinery/power/smes,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) +"bYf" = (/obj/structure/stool/bed/chair{dir = 4},/obj/item/device/radio/intercom{pixel_y = 25},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/pod_3) "bYg" = (/obj/machinery/power/terminal{dir = 8},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) "bYh" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 32},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) "bYi" = (/obj/structure/cable,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/solar/starboard) @@ -5686,11 +5686,11 @@ "cfr" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 10; initialize_directions = 12},/turf/simulated/floor/plasteel,/area/atmos) "cfs" = (/obj/machinery/atmospherics/unary/portables_connector/visible{dir = 1},/turf/simulated/floor/plasteel,/area/atmos) "cft" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 6},/turf/simulated/floor/plasteel,/area/atmos) -"cfu" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) -"cfv" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 1},/turf/simulated/floor/plasteel,/area/atmos) -"cfw" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/atmos) -"cfx" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) -"cfy" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor/plasteel,/area/atmos) +"cfu" = (/obj/machinery/door/airlock/shuttle{name = "Escape Pod Airlock"},/obj/docking_port/mobile/pod{dir = 4; id = "pod3"; name = "escape pod 3"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/pod_3) +"cfv" = (/obj/structure/grille,/obj/structure/window/shuttle,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/pod_3) +"cfw" = (/obj/structure/stool/bed/chair{dir = 4},/obj/machinery/status_display{pixel_y = 32},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/pod_3) +"cfx" = (/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/simulated/wall/shuttle{icon_state = "swall_f5"},/area/shuttle/pod_3) +"cfy" = (/turf/space,/turf/simulated/wall/shuttle{icon_state = "swall_f9"},/area/shuttle/pod_3) "cfz" = (/obj/machinery/door_control{id = "mixedvent"; name = "Gas Mix Emergency Vent Control"; pixel_x = 0; pixel_y = 24},/obj/machinery/door/window/eastright,/turf/simulated/floor/plasteel,/area/atmos) "cfA" = (/turf/simulated/floor/plasteel{icon_state = "dark"},/area/atmos) "cfB" = (/turf/simulated/floor/plasteel/airless{dir = 4; icon_state = "warningcorner"},/area/toxins/test_area) @@ -5718,9 +5718,9 @@ "cfX" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/turf/simulated/floor/plasteel,/area/atmos) "cfY" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 5},/turf/simulated/floor/plasteel,/area/atmos) "cfZ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 9},/turf/simulated/floor/plasteel,/area/atmos) -"cga" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/turf/simulated/floor/plasteel,/area/atmos) +"cga" = (/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/power/smes{charge = 1e+006},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/engine/engineering) "cgb" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1},/turf/simulated/floor/plasteel,/area/atmos) -"cgc" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/atmos) +"cgc" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/simulated/wall/shuttle{icon_state = "swall_f6"},/area/shuttle/pod_4) "cgd" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) "cge" = (/obj/structure/grille,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored) "cgf" = (/obj/machinery/door/airlock/glass{name = "Chapel"; req_access_txt = "0"},/turf/simulated/floor/carpet,/area/chapel/main) @@ -5740,12 +5740,15 @@ "cgt" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/carpet,/area/chapel/main) "cgu" = (/obj/machinery/camera{c_tag = "Chapel Starboard"; dir = 8},/turf/simulated/floor/carpet,/area/chapel/main) "cgv" = (/obj/structure/table/wood,/turf/simulated/floor/carpet,/area/chapel/main) +"cgw" = (/turf/simulated/wall/shuttle{icon_state = "swall12"},/area/shuttle/pod_4) +"cgx" = (/turf/space,/turf/simulated/wall/shuttle{icon_state = "swall_f10"},/area/shuttle/pod_4) +"cgy" = (/obj/machinery/door/airlock/shuttle{name = "Escape Pod Airlock"},/obj/docking_port/mobile/pod{dir = 4; id = "pod4"; name = "escape pod 4"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/pod_4) "cgz" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor/plasteel,/area/atmos) -"cgA" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) -"cgB" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{dir = 6},/turf/simulated/floor/plasteel,/area/atmos) -"cgC" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) +"cgA" = (/obj/structure/stool/bed/chair{dir = 4},/obj/machinery/status_display{pixel_y = 32},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/pod_4) +"cgB" = (/obj/structure/stool/bed/chair{dir = 4},/obj/item/device/radio/intercom{pixel_y = 25},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/pod_4) +"cgC" = (/obj/structure/grille,/obj/structure/window/shuttle,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/pod_4) "cgD" = (/obj/machinery/atmospherics/pipe/manifold/supplymain/visible{dir = 1},/turf/simulated/floor/plasteel,/area/atmos) -"cgE" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/atmos) +"cgE" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/simulated/wall/shuttle{icon_state = "swall_f5"},/area/shuttle/pod_4) "cgF" = (/obj/machinery/atmospherics/binary/pump{dir = 8; name = "Mix to Main"; on = 1},/turf/simulated/floor/plasteel,/area/atmos) "cgG" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1; layer = 2.9},/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{dir = 4},/obj/machinery/meter,/turf/simulated/floor/plasteel,/area/atmos) "cgH" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/atmos) @@ -5776,6 +5779,12 @@ "chg" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel,/area/hallway/primary/aft{name = "Aft Hallway"}) "chh" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/turf/simulated/floor/plasteel{icon_state = "neutralcorner"},/area/hallway/primary/aft{name = "Aft Hallway"}) "chi" = (/obj/machinery/door/airlock/glass{name = "Chapel Foyer"; req_access_txt = "0"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) +"chj" = (/turf/space,/turf/simulated/wall/shuttle{icon_state = "swall_f9"},/area/shuttle/pod_4) +"chk" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel,/area/hallway/primary/central{name = "Aft Central Hallway"}) +"chl" = (/obj/machinery/power/smes{charge = 1e+006},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/asmaint2) +"chm" = (/obj/structure/cable/pink{d2 = 2; icon_state = "0-2"},/obj/machinery/power/smes{charge = 1e+006},/turf/simulated/floor/plating,/area/maintenance/asmaint2) +"chn" = (/obj/structure/cable/cyan{icon_state = "0-2"},/obj/machinery/power/smes{charge = 1e+006},/turf/simulated/floor/plating,/area/maintenance/asmaint) +"cho" = (/obj/machinery/power/smes{charge = 1e+006},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/maintenance/starboardsolar) "chp" = (/obj/machinery/camera{c_tag = "Atmospherics Fore Port"; dir = 8},/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plasteel,/area/atmos) "chq" = (/turf/simulated/wall,/area/atmos) "chr" = (/obj/machinery/atmospherics/unary/vent_pump,/turf/simulated/floor/plasteel,/area/atmos) @@ -5817,14 +5826,14 @@ "cib" = (/obj/machinery/atmospherics/unary/portables_connector/visible,/obj/machinery/portable_atmospherics/canister,/obj/item/weapon/wrench,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) "cic" = (/obj/machinery/atmospherics/unary/cold_sink/freezer,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) "cid" = (/obj/machinery/atmospherics/unary/portables_connector/visible,/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) -"cie" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden,/obj/structure/extinguisher_cabinet{pixel_x = -27},/turf/simulated/floor/plasteel,/area/atmos) +"cie" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel,/area/atmos) "cif" = (/obj/structure/fireaxecabinet{pixel_x = 32},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/atmos) "cig" = (/obj/structure/table,/obj/item/device/t_scanner,/obj/item/device/t_scanner,/turf/simulated/floor/plasteel{dir = 9; icon_state = "yellow"},/area/atmos) -"cih" = (/obj/structure/table,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/belt/utility,/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor/plasteel{dir = 1; icon_state = "yellow"},/area/atmos) +"cih" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 4},/obj/machinery/atmospherics/pipe/simple/supplymain/visible,/turf/simulated/floor/plasteel,/area/atmos) "cii" = (/obj/structure/table,/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/turf/simulated/floor/plasteel{dir = 1; icon_state = "yellow"},/area/atmos) "cij" = (/obj/structure/table,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/turf/simulated/floor/plasteel{dir = 1; icon_state = "yellow"},/area/atmos) "cik" = (/obj/structure/closet/secure_closet/atmospherics,/turf/simulated/floor/plasteel{dir = 1; icon_state = "yellow"},/area/atmos) -"cil" = (/obj/structure/closet/secure_closet/atmospherics,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 5; icon_state = "yellow"},/area/atmos) +"cil" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{dir = 1},/turf/simulated/floor/plasteel,/area/atmos) "cim" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 6},/obj/structure/extinguisher_cabinet{pixel_x = -27},/turf/simulated/floor/plasteel,/area/atmos) "cin" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) "cio" = (/obj/machinery/atmospherics/pipe/manifold/yellow/visible{dir = 1},/turf/simulated/floor/plasteel,/area/atmos) @@ -5892,9 +5901,9 @@ "cjy" = (/obj/structure/extinguisher_cabinet{pixel_y = -30},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) "cjz" = (/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/chapel/main) "cjA" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plasteel,/area/atmos) -"cjB" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/obj/machinery/meter,/turf/simulated/floor/plasteel,/area/atmos) +"cjB" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/atmos) "cjC" = (/obj/machinery/atmospherics/binary/pump{dir = 8; name = "Connector Ports"; on = 0},/turf/simulated/floor/plasteel,/area/atmos) -"cjD" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{dir = 9},/obj/machinery/meter,/turf/simulated/floor/plasteel,/area/atmos) +"cjD" = (/obj/machinery/atmospherics/pipe/simple/supplymain/visible,/turf/simulated/floor/plasteel,/area/atmos) "cjE" = (/obj/machinery/door/airlock/glass_atmos{desc = "The Atmos storage area, with all the gear you could want."; name = "Atmospherics Storage"; req_access_txt = "24"},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowfull"},/area/atmos) "cjF" = (/turf/simulated/floor/plasteel{dir = 8; icon_state = "yellow"},/area/atmos) "cjG" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/atmos) @@ -5956,9 +5965,9 @@ "ckK" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{dir = 1; icon_state = "yellow"},/area/atmos) "ckL" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{dir = 4},/obj/structure/closet/wardrobe/atmospherics_yellow,/turf/simulated/floor/plasteel{dir = 5; icon_state = "yellow"},/area/atmos) "ckM" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{dir = 4},/turf/simulated/wall,/area/atmos) -"ckN" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plasteel,/area/atmos) -"ckO" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/turf/simulated/floor/plasteel,/area/atmos) -"ckP" = (/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{dir = 9},/turf/simulated/floor/plasteel,/area/atmos) +"ckN" = (/obj/machinery/atmospherics/pipe/simple/supplymain/visible{dir = 6},/turf/simulated/floor/plasteel,/area/atmos) +"ckO" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) +"ckP" = (/obj/machinery/atmospherics/pipe/simple/supplymain/visible{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) "ckQ" = (/obj/machinery/atmospherics/unary/portables_connector/visible{dir = 1},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) "ckR" = (/obj/machinery/atmospherics/unary/heat_reservoir/heater{dir = 1; on = 1; tag = ""},/turf/simulated/floor/plasteel{icon_state = "bot"},/area/atmos) "ckS" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor/plasteel{dir = 8; icon_state = "yellow"},/area/atmos) @@ -6003,7 +6012,7 @@ "clF" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/atmos) "clG" = (/obj/machinery/door/airlock/atmos{desc = "The station's Atmospherics department, responsible for keeping air in your lungs and fire out."; name = "Atmospherics"; req_access_txt = "24"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowfull"},/area/atmos) "clH" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/turf/simulated/floor/plasteel,/area/atmos) -"clI" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; external_pressure_bound = 0; frequency = 1441; id_tag = "o2_out"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/plasteel,/area/atmos) +"clI" = (/obj/machinery/atmospherics/pipe/simple/supplymain/visible{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/turf/simulated/floor/plasteel,/area/atmos) "clJ" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel{dir = 8; icon_state = "yellow"},/area/atmos) "clK" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel,/area/atmos) "clL" = (/obj/structure/stool/bed/chair/office/dark{dir = 4},/obj/effect/landmark/start{name = "Atmospheric Technician"},/turf/simulated/floor/plasteel,/area/atmos) @@ -6032,8 +6041,8 @@ "cmi" = (/turf/simulated/floor/plasteel{icon_state = "yellow"; dir = 10},/area/atmos) "cmj" = (/obj/machinery/camera{c_tag = "Atmospherics Access"; dir = 1},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "yellow"},/area/atmos) "cmk" = (/turf/simulated/floor/plasteel{icon_state = "yellow"},/area/atmos) -"cml" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 6; icon_state = "yellow"},/area/atmos) -"cmm" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plasteel,/area/atmos) +"cml" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/turf/simulated/wall,/area/atmos) +"cmm" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel,/area/atmos) "cmn" = (/obj/structure/dispenser/oxygen,/turf/simulated/floor/plasteel,/area/atmos) "cmo" = (/obj/machinery/suit_storage_unit/atmos,/turf/simulated/floor/plasteel,/area/atmos) "cmp" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel,/area/atmos) @@ -6042,8 +6051,8 @@ "cms" = (/obj/effect/spawner/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/atmos) "cmt" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "yellow"; dir = 10},/area/atmos) "cmu" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "yellow"},/area/atmos) -"cmv" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; external_pressure_bound = 0; frequency = 1441; id_tag = "o2_out"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/plasteel{icon_state = "yellow"},/area/atmos) -"cmw" = (/obj/machinery/computer/general_air_control{frequency = 1441; name = "Tank Monitor"; sensors = list("n2_sensor" = "Nitrogen", "o2_sensor" = "Oxygen", "co2_sensor" = "Carbon Dioxide", "tox_sensor" = "Toxins", "n2o_sensor" = "Nitrous Oxide", "waste_sensor" = "Gas Mix Tank")},/turf/simulated/floor/plasteel{dir = 6; icon_state = "yellow"},/area/atmos) +"cmv" = (/obj/structure/table,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/belt/utility,/obj/machinery/atmospherics/unary/vent_pump{on = 1},/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{dir = 1; icon_state = "yellow"},/area/atmos) +"cmw" = (/obj/structure/closet/secure_closet/atmospherics,/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/turf/simulated/floor/plasteel{dir = 5; icon_state = "yellow"},/area/atmos) "cmx" = (/obj/machinery/atmospherics/trinary/filter{dir = 1; filter_type = 1; flipped = 0; on = 1},/turf/simulated/floor/plasteel,/area/atmos) "cmy" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/obj/machinery/meter,/turf/simulated/floor/plasteel,/area/atmos) "cmz" = (/obj/machinery/atmospherics/pipe/simple/green/visible{dir = 4},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/atmos) @@ -6070,7 +6079,7 @@ "cmU" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1},/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit) "cmV" = (/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 4},/area/hallway/secondary/exit) "cmW" = (/obj/machinery/alarm{dir = 8; pixel_x = 22},/obj/machinery/light{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit) -"cmX" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/hallway/secondary/exit) +"cmX" = (/obj/structure/closet/secure_closet/atmospherics,/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{dir = 1; icon_state = "yellow"},/area/atmos) "cmY" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/atmos) "cmZ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/atmos) "cna" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/turf/simulated/wall,/area/atmos) @@ -6097,13 +6106,13 @@ "cnv" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel,/area/hallway/secondary/exit) "cnw" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 8},/area/hallway/secondary/exit) "cnx" = (/turf/simulated/floor/plasteel,/area/hallway/secondary/exit) -"cny" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=4"; freq = 1400; location = "Atmospherics"},/obj/structure/plasticflaps,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{dir = 4; icon_state = "loadingarea"},/area/hallway/secondary/exit) +"cny" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 6},/turf/simulated/floor/plasteel,/area/atmos) "cnz" = (/obj/machinery/door/window/northleft{dir = 4; layer = 2.7; name = "Atmospherics Deliveries"; req_access_txt = "24"},/obj/structure/window/reinforced,/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/atmos) "cnA" = (/obj/machinery/alarm{pixel_y = 20},/turf/simulated/floor/plasteel,/area/atmos) -"cnB" = (/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowcorner"},/area/atmos) +"cnB" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/supplymain/visible{dir = 9},/turf/simulated/floor/plasteel,/area/atmos) "cnC" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "yellow"},/area/atmos) "cnD" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor/plasteel{dir = 5; icon_state = "yellow"},/area/atmos) -"cnE" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 8},/turf/simulated/floor/plasteel,/area/atmos) +"cnE" = (/obj/machinery/atmospherics/pipe/simple/supplymain/visible{dir = 9},/turf/simulated/floor/plasteel,/area/atmos) "cnF" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1},/turf/simulated/floor/plasteel,/area/atmos) "cnG" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 6},/turf/simulated/floor/plasteel,/area/atmos) "cnH" = (/obj/machinery/atmospherics/pipe/manifold/yellow/visible{dir = 4},/turf/simulated/floor/plasteel,/area/atmos) @@ -6126,10 +6135,10 @@ "cnY" = (/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/maintenance/asmaint2) "cnZ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plasteel{icon_state = "neutral"; dir = 8},/area/hallway/secondary/exit) "coa" = (/obj/machinery/newscaster,/turf/simulated/wall,/area/hallway/secondary/exit) -"cob" = (/obj/structure/table/reinforced,/obj/machinery/door/window/northleft{dir = 4; layer = 2.9; name = "Atmospherics Desk"; req_access_txt = "24"},/obj/item/weapon/folder/yellow,/obj/item/weapon/pen,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel,/area/hallway/secondary/exit) +"cob" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel,/area/atmos) "coc" = (/obj/structure/stool/bed/chair/office/dark{dir = 8},/obj/effect/landmark/start{name = "Atmospheric Technician"},/turf/simulated/floor/plasteel,/area/atmos) -"cod" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/atmos) -"coe" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall,/area/atmos) +"cod" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 6; icon_state = "yellow"},/area/atmos) +"coe" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/floor/plasteel{icon_state = "yellow"},/area/atmos) "cof" = (/obj/machinery/atmospherics/binary/pump{dir = 1; name = "To Mix"},/turf/simulated/floor/plasteel,/area/atmos) "cog" = (/obj/structure/toilet{cistern = 1; desc = "The HT-451, a torque rotation-based, waste disposal unit for small matter. This one has a heart drawn on the cistern."; dir = 4},/obj/machinery/door_control{id = "barbath"; name = "Bolts Control"; normaldoorcontrol = 1; pixel_y = 25; req_access_txt = "0"; specialfunctions = 4},/turf/simulated/floor/plating{icon_state = "platingdmg3"},/area/maintenance/asmaint2) "coh" = (/obj/structure/sink{pixel_y = 32},/obj/machinery/light/small,/turf/simulated/floor/plasteel{icon_state = "floorgrime"; temperature = 273.15},/area/maintenance/asmaint2) @@ -6239,7 +6248,7 @@ "cqh" = (/obj/structure/rack,/obj/effect/spawner/lootdrop/maintenance,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/obj/effect/spawner/lootdrop/maintenance{lootcount = 3; name = "3maintenance loot spawner"},/turf/simulated/floor/plating,/area/atmos) "cqi" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = -32},/turf/simulated/floor/plating,/area/maintenance/portsolar) "cqj" = (/obj/machinery/power/terminal{dir = 4},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/maintenance/portsolar) -"cqk" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/smes,/turf/simulated/floor/plating,/area/maintenance/portsolar) +"cqk" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/wall,/area/atmos) "cql" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"},/turf/simulated/wall/r_wall,/area/maintenance/portsolar) "cqm" = (/obj/machinery/light,/turf/simulated/floor/engine,/area/toxins/xenobiology) "cqn" = (/obj/machinery/shieldwallgen{req_access = list(55)},/obj/structure/cable/pink{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 5},/area/toxins/xenobiology) @@ -6264,9 +6273,9 @@ "cqG" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/hallway/secondary/exit) "cqH" = (/turf/simulated/floor/plasteel{icon_state = "warning"},/area/hallway/secondary/exit) "cqI" = (/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "warning"},/area/hallway/secondary/exit) -"cqJ" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_y = -32},/turf/simulated/floor/plasteel{icon_state = "warning"},/area/hallway/secondary/exit) +"cqJ" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{icon_state = "yellow"},/area/atmos) "cqK" = (/turf/simulated/floor/plasteel{icon_state = "warningcorner"; dir = 1},/area/hallway/secondary/exit) -"cqL" = (/turf/simulated/floor/plasteel{icon_state = "warningcorner"},/area/hallway/secondary/exit) +"cqL" = (/obj/machinery/computer/general_air_control{frequency = 1441; name = "Tank Monitor"; sensors = list("n2_sensor" = "Nitrogen", "o2_sensor" = "Oxygen", "co2_sensor" = "Carbon Dioxide", "tox_sensor" = "Toxins", "n2o_sensor" = "Nitrous Oxide", "waste_sensor" = "Gas Mix Tank")},/obj/machinery/light,/turf/simulated/floor/plasteel{dir = 6; icon_state = "yellow"},/area/atmos) "cqM" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor/plasteel{icon_state = "warning"},/area/hallway/secondary/exit) "cqN" = (/obj/machinery/camera{c_tag = "Escape Hallway Aft"; dir = 1},/turf/simulated/floor/plasteel{icon_state = "warning"},/area/hallway/secondary/exit) "cqO" = (/obj/machinery/atmospherics/pipe/simple/green/visible,/obj/structure/lattice,/turf/space,/area/space) @@ -6275,8 +6284,8 @@ "cqR" = (/obj/structure/stool,/turf/simulated/floor/plating,/area/maintenance/portsolar) "cqS" = (/obj/machinery/power/apc{dir = 4; name = "Aft Port Solar APC"; pixel_x = 23; pixel_y = 2},/obj/machinery/camera{c_tag = "Aft Port Solar Control"; dir = 1},/obj/structure/cable,/turf/simulated/floor/plating,/area/maintenance/portsolar) "cqT" = (/obj/machinery/door/airlock/external{name = "Escape Airlock"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/hallway/secondary/exit) -"cqU" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel{dir = 10; icon_state = "warning"},/area/hallway/secondary/exit) -"cqV" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/plasteel{dir = 6; icon_state = "warning"},/area/hallway/secondary/exit) +"cqU" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible,/obj/machinery/light{dir = 8},/turf/simulated/floor/plasteel,/area/atmos) +"cqV" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel,/area/atmos) "cqW" = (/obj/machinery/door/airlock/external{name = "Shuttle Brig Airlock"; req_access_txt = "63; 42"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/hallway/secondary/exit) "cqX" = (/obj/structure/lattice,/turf/space,/area/atmos) "cqY" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/asmaint2) @@ -6299,7 +6308,7 @@ "crp" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 0; frequency = 1441; id_tag = "n2_out"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/atmos) "crq" = (/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating{icon_state = "warnplatecorner"; dir = 8},/area/hallway/secondary/exit) "crr" = (/obj/effect/spawner/structure/window/reinforced,/turf/simulated/floor/plating{icon_state = "warnplatecorner"; dir = 4},/area/hallway/secondary/exit) -"crs" = (/turf/simulated/floor/plating,/area/hallway/secondary/exit) +"crs" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=4"; freq = 1400; location = "Atmospherics"},/obj/structure/plasticflaps,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{dir = 4; icon_state = "loadingarea"},/area/atmos) "crt" = (/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/atmos) "cru" = (/turf/simulated/floor/engine{name = "plasma floor"; nitrogen = 0; oxygen = 0; toxins = 70000},/area/atmos) "crv" = (/turf/simulated/floor/engine/n20,/area/atmos) @@ -6315,12 +6324,20 @@ "crF" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/solar/port) "crG" = (/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{icon_state = "asteroidplating"},/area/solar/port) "crH" = (/obj/machinery/power/solar{id = "portsolar"; name = "Port Solar Array"},/obj/structure/cable,/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/port) -"crI" = (/obj/docking_port/stationary{dir = 4; dwidth = 9; height = 11; id = "emergency_home"; name = "emergency evac bay"; width = 22},/turf/space,/area/space) +"crI" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellowcorner"},/area/atmos) "crJ" = (/obj/structure/lattice,/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/space,/area/space) "crK" = (/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/space) "crL" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/solar/port) "crM" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/solar/port) "crN" = (/obj/machinery/power/tracker,/obj/structure/cable,/turf/simulated/floor/plasteel/airless{icon_state = "solarpanel"},/area/solar/port) +"crO" = (/obj/machinery/atmospherics/pipe/simple/yellow/visible{dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/floor/plasteel,/area/atmos) +"crP" = (/obj/structure/table/reinforced,/obj/machinery/door/window/northleft{dir = 4; layer = 2.9; name = "Atmospherics Desk"; req_access_txt = "24"},/obj/item/weapon/folder/yellow,/obj/item/weapon/pen,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel,/area/atmos) +"crQ" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/turf/simulated/floor/plasteel{dir = 4; icon_state = "yellow"},/area/atmos) +"crR" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/turf/simulated/wall,/area/atmos) +"crS" = (/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/atmos) +"crT" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/smes{charge = 1e+006},/turf/simulated/floor/plating,/area/maintenance/portsolar) +"crU" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_y = -32},/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "warning"},/area/hallway/secondary/exit) +"crV" = (/obj/docking_port/stationary{dir = 4; dwidth = 0; height = 28; id = "emergency_home"; name = "emergency evac bay"; width = 13},/turf/space,/area/space) (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -6412,14 +6429,14 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaadaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaalaalaakaaiaakaakaakaakaakaakaakaakaakaakaakaakaakaaiaakaakaakaakaakaakaakaakaakaakaakaakaakaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaaeaaeaabaajaajaadaadaadaadaadaadaadaadaadaabaabaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaakaaeaabaajaajaajaadaadaadaadaadaadaadaadaabaabaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaaeaaeaabaajaajaadaadaadaadaadaadaadaadaabaabaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaalaalaaaaanaaoaapaapaapaaqaaqaapaapaapaapaaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaakaaeaaeaabaajaadaadaadaadaadaadaadaadaabaabaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaalaalaaaaasaataauaauaavaawaaxaavaauaauaauaayaapaapaazaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaaeaabaajaadaadaadaadaadaadaadaadaabaabaabaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaalaalaaaaasaaAaauaaBaauaaBaauaaBaauaaBaauaaqaaCaaDaaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaaeaabaajaadaadaadaadaadaadaadaadaadaabaabaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaalaalaaaaasaaAaauaaBaauaaBaaFaaBaauaaBaauaaGaauaauaaqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaaiaaiaaiaaiaaiaaiaadaadaadaadaadaadaadaadaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaalaalaaaaasaaAaauaaBaauaaBaauaaBaauaaBaauaaqaaCaaHaaEaaaaaIaaJaazaaaaaIaaJaazaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaabaabaadaadaadaadaadaadaadaadaadaabaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaalaalaaaaasaataauaauaaKaaLaaMaaNaauaauaauaayaapaapaaOaaaaaEaaPaaEaaaaaEaaPaaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaabaabaaeaadaadaadaadaadaadaadaadaadaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaalaaaaaQaaRaaGaapaapaaqaaqaapaapaaSaapaaTaaaaaaaaaaaaaaEaaUaaEaaVaaEaaUaaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaakaabaaeaadaadaadaadaadaadaadaadaadaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaalaalaalaaWaaXaaWaaaaaaaaaaaaaaWaaXaaWaaaaaaaaaaaaaaYaaZabaabbabcaaZabdabbaaYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaabaaeaadaadaadaadaadaadaadaadaadaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaalaalaaaaanaapaaoaaoaaoaaqaaqaaoaaoaaoaaoaaraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaakaaeaaeaabaajaadaadaadaadaadaadaadaadaabaabaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaalaalaaaaasaauaataataavaaxaawaavaataataataayaaoaaoaazaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaaeaabaajaadaadaadaadaadaadaadaadaabaabaabaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaalaalaaaaasaaAaataaBaataaBaataaBaataaBaataaqaaCaaEaaDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaaeaabaajaadaadaadaadaadaadaadaadaadaabaabaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaalaalaaaaasaaAaataaBaataaBaaFaaBaataaBaataaGaataataaqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaaiaaiaaiaaiaaiaaiaadaadaadaadaadaadaadaadaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaalaalaaaaasaaAaataaBaataaBaataaBaataaBaataaqaaCaaHaaDaaaaaIaaKaaJaaaaaLaaNaaMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaabaabaadaadaadaadaadaadaadaadaadaabaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaalaalaaaaasaauaataataaOaaQaaPaaRaataataataayaaoaaoaaSaaaaaTaaUaaTaaaaaZabaaaZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaabaabaaeaadaadaadaadaadaadaadaadaadaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaalaaaabbabdaaGaaoaaoaaqaaqaaoaaoadqaaoadMaaaaaaaaaaaaaaTadNaaTaaVaaZaiNaaZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaakaabaaeaadaadaadaadaadaadaadaadaadaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaalaalaalaaWaaXaaWaaaaaaaaaaaaaaWaaXaaWaaaaaaaaaaaaaaYakTaydalwabcaIBaPbaOdaaYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaabaaeaadaadaadaadaadaadaadaadaadaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaalaalaaWabeaaWaaaaaaaaaaaaaaWabeaaWaaaaaaaaaaaaaaYabfabeabgaaYabfabeabhaaYaaYaaWaaWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaabaabaadaadaadaadaadaadaadaadaadaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaababiabjaaYaaWaaXaaWaaYaaWaaWaaYaaWaaXaaWaaYaaWaaWaaYaaYaaYabkablaaYaaYabmablaaYabnaboabpaaWabqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaakaabaabaadaadaadaadaadaadaadaadaadaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaababrabsaaYabtabuabuabvabuabwabxabyabyabzabAabyabyabBabCabDabEabFabGabHabIabJabGabGabKabLabeabMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaabaabaabaadaadaadaadaadaadaadaadaadaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -6428,20 +6445,20 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaababiacyaaYaczaciaclaclacmaclacnacoacDaaYabeacEaaYacFacGacHacIacJacKacLacMacMacsaaYaaWaaWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaaaaaaaakaabaabaabaabaabaadaabaabaabaabaabaabaabaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaababiacyaaYacNaciacBacAacCacBacOacoacSacTabeacUaaYacVacWacXacYacZadaacLadbadcacsaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaakaakaakaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaababiabiabiabiabiabiacyaaYaddaciaacacPacRacQadeacoadiaaYadjadkaaYadlacGadmadbacIadbadnadoadoacsaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaaiaakaabaabaabaabaabaabaabaabaabadpadpadpaabaabaabaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaababiadqadradsadtadtadtaduadvadwadxadxadxadyadzadAadBaaYadCadDaaYadEadFadGadHadIadJadKadLadoacsaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaakadMaabaabaabaabaabaabaabadpadpadpadpadNadOadpadpadpaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaabaabaababiadPadQabiacyacyadRaaYadSadTadUadVabGadWadXacSabGadYadYadYadYadYadZadYacsacsacsacsacsacsacsaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaabadMaabaabaabaabaabaabaabadpaeaaebaecaedaeeaebaeeadpaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaabaabaababiaefaegaehaeiacyaejaejaekaekaelaekaemaejaenaeoaepadYaeqaeraesaetaeuadYaevaewaexaeyaezaeAbRObROadfadfadfadfadfadfadfadfadfadfadfadfadfadfadfadgaaaaaaaaaaakaakaabadMaabaabaabaabaabaabadpadpaeEaeFaeGaeHaeGaeIaeJadpadpaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaabaabaababiabiabiabiaeKacyaejaeLaeMaeMaeNaeOaePaejaeQaeRaeSadYaeqaeTaeUaeVaeuadYaeWaeXaeYaeZafaafbaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhaaaaakaakaakaabaabadMaabaabaabaabaabaabadpaeeaeFafdadpadpadpafeaeIaeeadpaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaababiaPqadradsadtadtadtaduadvadwadxadxadxadyadzadAadBaaYadCadDaaYadEadFadGadHadIadJadKadLadoacsaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaakaaiaabaabaabaabaabaabaabadpadpadpadpaPradOadpadpadpaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaabaabaababiadPadQabiacyacyadRaaYadSadTadUadVabGadWadXacSabGadYadYadYadYadYadZadYacsacsacsacsacsacsacsaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaabaaiaabaabaabaabaabaabaabadpaeaaebaecaedaeeaebaeeadpaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaabaabaababiaefaegaehaeiacyaejaejaekaekaelaekaemaejaenaeoaepadYaeqaeraesaetaeuadYaevaewaexaeyaezaeAbRObROadfadfadfadfadfadfadfadfadfadfadfadfadfadfadfadgaaaaaaaaaaakaakaabaaiaabaabaabaabaabaabadpadpaeEaeFaeGaeHaeGaeIaeJadpadpaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaabaabaababiabiabiabiaeKacyaejaeLaeMaeMaeNaeOaePaejaeQaeRaeSadYaeqaeTaeUaeVaeuadYaeWaeXaeYaeZafaafbaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadhaaaaakaakaakaabaabaaiaabaabaabaabaabaabadpaeeaeFafdadpadpadpafeaeIaeeadpaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaagaadaadaadaadaadaabaabaababiabiabiabiabiabiabiabiabiabiabiabiaffafgafhafiafjafkaflafmafnafnafoafpafqafraeRaeSadYafsaftafuafvafwadYafxafyafzafbafAafbaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeBaakaakaabaabaabaabaabaabaabaabaabaabaabadpafCaedadpadpafDadpadpaedafEadpaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaagaagaagaadaadaadaadaabaabaababiafFafjafjafjafjafjafjafjafjafjafjafGafHafIafJafKaejafLafMafNafOafPafQaejafRaeRaeSadYafSafTafUafVafWadYaeWafXafYafZagaafbaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalaeBaalaabaabaabaabaabaabaabaabaabaabaabadpadpagbagcadpagdageagfadpagcaggadpadpaalaalaalaalaalaalaalaalaalaalagiagiagiaalagiagiagiagiagjagiagiaalagiagiaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaagaagaagaagaagaabaabaabaabaababiagkaglafIafIafIagmafIafIafIafIafIagnagkagoagoagoagpagpagpagpagpagoagoagoagqagragsagtaguagvagwagxagyadYaeWagzagAagBagCafbaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalaalaeBaalaabaabaabaabaabaabaabaabaabaabaabadpagDagEagFagGagHagIagJagEagIagGagKadpaeCaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalagiaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaabaabaabaabaabaabaabaabaabaababiagkaeKagLagLagLagLagLagLagLagLagLaeKagkagoagMagNagpagOagPagQagpagRagSagoagTagUagVagWagXagYagZahaahbadYaeWahcahdafbafbafbafbafbafbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbafbaheafbafbaabaabaabaabaabaabaabaabaabaabadpadpahfahgahhahiadpahiahhahgahjadpadpaabaalaalaalaalaalaalaalaalagiaalahkahlahmaalahkahlahmaalahkahlahmaalagiaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaabaabaabaabaabaabaabaabaabaababiagkaeKagLahnahnahnahnahoahnahnagLaeKagkagoahpahqagpagpahragpagpahsahtagoahuaeRahvahwahxahyahzahAahBadYaeWahcahCafbahDahEahFahGafbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbahHahIahJafbaabaabaabaabaabaabaabaabaabaabaabadpahKahgahLahgahgahgahMahgahNadpaabaabaalaalaalaalaalaalaalaalagiaalahkahOahmaalahkahOahmaalahkahOahmaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaalaalaalaabaabaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaagaabaabaabaabaabaabaabaabaabaababiagkaeKagLahPahQahQahQahQahQahQagLaeKagkagoahRahSahTahUahVahWahXahYahZagoagqaeRaeSaiaaibaicaidaieaifadYaigahcaihafbaiiaijaikailafbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafbaimainaioaipaipaipaipaipaipaipaipaipaipaabaabadpaeEaeeaiqahgairahgaisaeeaeJadpaabaabaalaalaalaalaalaalaalaalagjaalahkahOahmaalahkahOahmaalahkahOahmaalagiaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaalaalaalaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaadaadaadaadaadaadaagaagaabaabaababiabiabiabiabiabiabiabiagkaeKagLaitaiuaiuaivaiuaiuaiwagLaeKagkagoaixaiyaizaiyaiAaiyaiBaiCaiDaiEaiFaiGaiHadYadYadYadZadYadYadYaiIaiJaiIafbaiKaiLaiMafbafbaaaaaaaaaaaaaaaaaaaaaaiNaaaaaaaaaaaaafbafbafbaheaipaiOaiPaiQaiRaiSaiTaiUaiVaipaabaabadpadpaiWaiXaiYaiZajaajbajcadpadpaabaabaabaalaalaalaalaalaalaalagiaalahkahOahmaalahkahOahmaalahkahOahmaalagiaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaagaagaagaadaadaadaadaabaabaababiafFafjafjafjafjafjafjafjafjafjafjafGafHafIafJafKaejafLafMafNafOafPafQaejafRaeRaeSadYafSafTafUafVafWadYaeWafXafYafZagaafbaalaalaalaPsaPsaPsaPsaPsaPsaPsaPsaPsaPsaPsaPsaaaaalaeBaalaabaabaabaabaabaabaabaabaabaabaabadpadpagbagcadpagdageagfadpagcaggadpadpaalaalaalaalaalaalaalaalaalaalagiagiagiaalagiagiagiagiagjagiagiaalagiagiaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaagaagaagaagaagaabaabaabaabaababiagkaglafIafIafIagmafIafIafIafIafIagnagkagoagoagoagpagpagpagpagpagoagoagoagqagragsagtaguagvagwagxagyadYaeWagzagAagBagCafbaalaalaalaPsaPsaPsaPsaPsaPsaPsaPsaPsaPsaPsaPsaalaalaeBaalaabaabaabaabaabaabaabaabaabaabaabadpagDagEagFagGagHagIagJagEagIagGagKadpaeCaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalagiaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaabaabaabaabaabaabaabaabaabaababiagkaeKagLagLagLagLagLagLagLagLagLaeKagkagoagMagNagpagOagPagQagpagRagSagoagTagUagVagWagXagYagZahaahbadYaeWahcahdafbafbafbafbafbafbaPsaPsaPsaPsaPsaPsaPsaPsaPsaPsaPsaPsafbafbaheafbafbaabaabaabaabaabaabaabaabaabaabadpadpahfahgahhahiadpahiahhahgahjadpadpaabaalaalaalaalaalaalaalaalagiaalahkahlahmaalahkahlahmaalahkahlahmaalagiaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaabaabaabaabaabaabaabaabaabaababiagkaeKagLahnahnahnahnahoahnahnagLaeKagkagoahpahqagpagpahragpagpahsahtagoahuaeRahvahwahxahyahzahAahBadYaeWahcahCafbahDahEahFahGafbaPsaPsaPsaPsaPsaPsaPsaPsaPsaPsaPsaPsafbahHahIahJafbaabaabaabaabaabaabaabaabaabaabaabadpahKahgahLahgahgahgahMahgahNadpaabaabaalaalaalaalaalaalaalaalagiaalahkahOahmaalahkahOahmaalahkahOahmaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaalaalaalaabaabaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaagaabaabaabaabaabaabaabaabaabaababiagkaeKagLahPahQahQahQahQahQahQagLaeKagkagoahRahSahTahUahVahWahXahYahZagoagqaeRaeSaiaaibaicaidaieaifadYaigahcaihafbaiiaijaikailafbaPsaPsaPsaPsaPsaPsaPsaPsaPsaPsaPsaPsafbaimainaioaipaipaipaipaipaipaipaipaipaipaabaabadpaeEaeeaiqahgairahgaisaeeaeJadpaabaabaalaalaalaalaalaalaalaalagjaalahkahOahmaalahkahOahmaalahkahOahmaalagiaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaalaalaalaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaadaadaadaadaadaadaagaagaabaabaababiabiabiabiabiabiabiabiagkaeKagLaitaiuaiuaivaiuaiuaiwagLaeKagkagoaixaiyaizaiyaiAaiyaiBaiCaiDaiEaiFaiGaiHadYadYadYadZadYadYadYaiIaiJaiIafbaiKaiLaiMafbafbaPsaPsaPsaPsaPsaPsaPsaQvaPsaPsaPsaPsafbafbafbaheaipaiOaiPaiQaiRaiSaiTaiUaiVaipaabaabadpadpaiWaiXaiYaiZajaajbajcadpadpaabaabaabaalaalaalaalaalaalaalagiaalahkahOahmaalahkahOahmaalahkahOahmaalagiaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaalaalaalaalaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaababiajdajeajfabiajgajhabiagkaeKagLajiajjajkajlajmajlajnagLajoajpajqajrajsajtajuajvajuajuajuajwajxajyajzajAajBajCajCajDajCajCajEajFajGajHajIajJajKajLajMafbaaaaaaajNajOajNajPajNajOajNaaaaaaajQafbajRafbajSaipajTaiTajUaiTaiTaiTaiTajVaipaabaabaabadpadpajWaiqahgaisajWadpadpajXajXajXajXajYaalaalaalaalaalagiagiaalahkahOahmaalahkahOahmaalahkahOahmaalagiagiagiagiaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaalaalaalaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaababiajdajZakaabiakbacyakcagkaeKagLakdakeakfakgakeakhakhagLaeKagkagoakiakjakkaklakmaknakoakpakqagoakraksaktakuainakvakwakxakxakyakzakAakBakzakxakCakwakDafbaakaakakEakFakEakGakEakFakEaakaakaakafbakHafbakIaipakJakKajUakLakMaiTakNakOaipaipaabaabaabadpadpakPakQakRadpadpakSakTakUakVakWajYajYajYaalaalaalaalaalaalaalakXaalaalaalakXaalaalaalakXaalaalaalaalaalagjaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaalaalaalaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaababiakZalaalbabialcaldabialeafialfalgalhalialjaljaljaljalkallagkalmalmalmalmalmalmalmalmalmalmalmalnaeRaloajNajNalpajNajNalqalqalqalqalralqalqajNajNalsajNakEakEajNajOajNaltajNajOajNakEakEakEajNajNafbakIaipaiTaiTalualvalvalvalvalvalwaipaipaipalxalxalyalzalAalBalCalxalxalDalEalFalGalHakValHalIalJalJalJalJalJalJalJalJalJalJalJalJalJalJalJalJalKalLalMaalagiaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaalaalaalaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaababiajdajZakaabiakbacyakcagkaeKagLakdakeakfakgakeakhakhagLaeKagkagoakiakjakkaklakmaknakoakpakqagoakraksaktakuainakvakwakxakxakyakzakAakBakzakxakCakwakDafbaakaakakEakFakEakGakEakFakEaakaakaakafbakHafbakIaipakJakKajUakLakMaiTakNakOaipaipaabaabaabadpadpakPakQakRadpadpakSbgAakUakVakWajYajYajYaalaalaalaalaalaalaalakXaalaalaalakXaalaalaalakXaalaalaalaalaalagjaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaalaalaalaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaababiakZalaalbabialcaldabialeafialfalgalhalialjaljaljaljalkallagkalmalmalmalmalmalmalmalmalmalmalmalnaeRaloajNajNalpajNajNalqalqalqalqalralqalqajNajNalsajNakEakEajNajOajNaltajNajOajNakEakEakEajNajNafbakIaipaiTaiTalualvalvalvalvalvbkaaipaipaipalxalxalyalzalAalBalCalxalxalDalEalFalGalHakValHalIalJalJalJalJalJalJalJalJalJalJalJalJalJalJalJalJalKalLalMaalagiaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaalaalaalaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaalalNalNalNalNalNalNalNalNalNalNalNalNalNalNalNalOalPabialQabiabiagkaeKagLalRaiualSalTaiualUalVagLalWalXalmalYalZamaambamcamdameamfamgalmamhamiamjajNamkamlammajNamnamoampamqamramsalqamtamuamvamwamwamwamxamwamyamzamAamBamCamDamEamFamGajNamHakIaipaiTamIamJaiTaiTaiTaiTaiTamKamLamMaipalxamNamOamPalAamQamOamRalxamSamTamUamVajYajYajYaalaalaalaalaalaalaalamWaalaalaalamWaalaalaalamWaalaalaalaalaalagiaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaalaalaalaalaabaabaabaabaabaabaabaabaabaabaabaabaabaalaalaalaalalNamXamYamYamZamYamYanaalNanbancandaneanfalNagkalbabiabiabiangagkaeKagLanhaiuanianjaiuaiuankagLanlagkalmanmanmannanoalYanmanpanmanqalmagqaeRamjajNanramBansakEantanuanuanuanvanwanxanyamBanzanAanAanAanAanAanBanCanDamBamBanEanEanEanFajNanGakIaipajTaiTaiTaiTanHanIanHaiTaiTaiTajVaipalxanJanKanLanManNanOanPalxajXanQanRajXajYaalaalaalagiagiagiagjaalahkanSahmaalahkanSahmaalahkanSahmaalagiagiaalagiaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaalaalaalaabaabaabaabaabaabaabaabaabaabaalaalaalaalaalaalaalaalalNanUanVanVanVanVanWanXanYanZanXaoaanXaobaocaodaoeaofaogaogaogaohagnagLaoiaiuaojaokaolaomaonagLaooaleaopaoqaoqaoranmaosanmanmanmaotaouaovaeRamjajNaowamBaoxajNaoyaozanuaoAaoBaoCaoDaoEaoFaoGaoHaoIaoIaoJaoJaoJaoJaoKaoJaoLaoFaoFaoFaoFaoMaoNakIaipaoOaoPaoQaoRanHaoSanHaoTaoUaoVaoWaipalxaoXaoYaoZapaapbapcapdalxapeapfapgaphaalaalaalaalaalaalaalagiaalahkanSahmaalahkanSahmaalahkanSahmaalagiaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -6452,7 +6469,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalasMatYatZasMauaaubaubaubaucasMapmarzanVanVapoaudauearGaufaugaugaugaugaugaugaugauhaugauiarGaujatjaukaulaumaunaunaunaunauoaupauqauqauqauqatjaurausautauuapUauvapUauvauwapUauxauyapUapUapUapUapUapUauzauAamBamBamBauBajNauCasiauDauEasiauFajNajNajNauGaqfaqfauHaqfaqfauHauIauJaqfauHaqfaqfaqlaqlaqlaqlauKauLauMaqlaqlaqlauNauOauPauQauRauSauTauUauVaynaynaynaynaynaynaynaynaynaynaynaynaynaynaynaynaynaynaynaynaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaalaalaalaalaalaalaabaabaabaabaabaabaabaabaabaabaalaalaalaalaalaalaalauXapmappauYanVanVanVauZaqravaaqtavbavcanVapoasMauearGavdaveaveaveaveaveaveaveaveaveavfarGaujavgaukaulavhauqaviaviavjaviavkauqavlavmavmavnavoarSatlavpamBamBamBamBavqamBaqPavravsavtamBavuamBavvavwaoFaoFavxavyavzajNauFasiauDavAasiasiajNavBavCavDavEavFavGavFavHavIavJavKavLavGavFavMavFavNavFavOavPavQavRavSavNavTavUavVavWavXavYavZawaawbaphaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalagjaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaalaalaalaalaalaabaabaabaabaabaabaabaabaabaabaabaabaabaalaalaalaalaalasMawcawdasMaweawfawgawhawiasMapmanVawjanVawkalNawlarGavdaveaalaalaalaabaalaalaalaveavfarGaujatjawmaulauqauqauqauqawnauqaulauqauqawnawoatjatkarSatlaqPatmawpaoFaoFawqaoFawrawsawsawsawsawtawsawuawvawwawxajNalpajNajNawyawzawAawBauFawCajNawDawEawFawGawHawHawHawHawHawIawJawHawKawLawHawHawMawHawHawHawNawOawJawPawQawRawSapgawTawTawTawTaphaphaalaalagiagiaalagiagiagjagiagiaalagiagiagiagiagiagiaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaalaalaalaalaabawUawUawUawUawVawVawVawUawUawUaabaabaabaabaalaalaalawWalNalNalNalNalNalNalNalNalNalNawXawYawZawYaxaaxbaxcaxdaxeaveaalaalaabaabaabaalaabaveavfaxfaxgaxhaxiaxjauqauqaxkaxlaxmaxnaxoauqauqauqaxpaxqaxrarSaxsajNaxtamBamBaxuaxvaxwatyaxxaxyaxzaxAaxBaxCaxDaxAaxzaxAaxEaxFaxGatyatAaxHaxIaxJaxKaxKatyaxLaxMaxNaxOaxPaxPaxPaxPaxPaxQaxRaxPaxSaxPaxPaxTaxUaxPaxVaxPaxWaxXaxYaxZayaaybaycapgawTaydayeawTaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaalaalaalaalaabawUawUawUawUawVawVawVawUawUawUaabaabaabaabaalaalaalawWalNalNalNalNalNalNalNalNalNalNawXawYawZawYaxaaxbaxcaxdaxeaveaalaalaabaabaabaalaabaveavfaxfaxgaxhaxiaxjauqauqaxkaxlaxmaxnaxoauqauqauqaxpaxqaxrarSaxsajNaxtamBamBaxuaxvaxwatyaxxaxyaxzaxAaxBaxCaxDaxAaxzaxAaxEaxFaxGatyatAaxHaxIaxJaxKaxKatyaxLaxMaxNaxOaxPaxPaxPaxPaxPaxQaxRaxPaxSaxPaxPaxTaxUaxPaxVaxPaxWaxXaxYaxZayaaybaycapgawTbkSayeawTaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaalaalaalaalaabaabaabawUayfaygayhayiayjaykaylaymawUaabaabaabaalaalaalaalaynayoaypayqayraysayrayraysanVaytanVanWayuanXayvalNaywarGayxaveaalaalaveaveaveaveaveaveavfarGayyarPayzatjatjavgatjatjarPatjayAavgatjatjatjarPatkarSayBajNayCakEayDayEayFajNajNajNajNajNajNajNajNajNajNajNajNajNalpajNajNajNajNajNajNajNajNajNayGaxZayHayIayIayIayIayIayIayIayIayIayIayIayIayIayJayIayIayIayJayIayKaxZayLavUayMapgawTayNayMayOaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaalaalaalaabaabaabaabawVaygaygaygayPaygaygayQayRawUawUawUaalaalaalaalaalaalaypaypaySalNalNalNalNayTayUanVanVanVayVaqrayWayXayYayZazaaveaalaalaveazbazcazcazcazcazdazeazfazgazhaziaziaziaziaziazjaziazkaziaziaziaziazlazmaznazoazpazqazrazrazsaztazuazvazvazvazvazvazvazvazvazwazvazxazyazzazvazvazAazvazvazvazBazvazCazDazEazFayIapYapXayIapYapXayIapYapXayIapYapXayIazIazJazJazKazLayIazMaxZazNavUazOauPazPazQazRayOaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaalaalaalaabaabaabaabaabawVaygazSaygaygazTayQayQazUazVazWazXaalaalaalaalaalaynayoazYazYazZaAaaAbaAcasMaAdayUanVanVaAeaAfaAgasMauearGayxaveaalaalaveaAhaAiaAjaAjaAjaAkaAjaAjaAlaAmaAnaAoaAoaAoaAoaAoaAoaApaAoaAoaAoaAoaAqaAraAsaAtaAoaAoaAoaAoaAoaApaAoaAoaAoaAoaAoaAuaAnaAoaAoaAoaAoaAoaAoaApaAoaAoaAoaAoaAoaAoaAnaAoaAvaAwaAxaAyayIaqFaqEayIaqGartayIaqGauWayIaqGazGayIaAFazKazKazKaAGayIayKaAHaAIaAJaAKaALaAMaANaAOayOaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -6464,13 +6481,13 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaCLazHaAAaAzaEBaECaFyaEEaFzaFAaFBaFCaFDaFEaFFaFGaFHaCPaCPaFIaFJaFKaFLaFMaFIaFNaAYaCaaCdaDaaDaaCdaFOaELaFPaFQaDaaFRaFSaFTaFSaynaalaalaakaakaabaabaabaabaakaabaaaaaaaakaaaaakaakaakaakaakaakaaaaaaaaaaaaaaaaaaaakaakaFUaFVaFVaFWaCkaFXaDlaEPaFYaCiaFZaxZaAyayIayIayIayIayIayIayIayIayIayIayJaGaaBFayIayIaGbayIayIayIayKaFqazNaCFaGcaGdaGdaGdaGdaGdaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaCLaABaADaACaEBaECaGiaGjaGkaFFaFFaFFaFFaFFaGlaEEaGmaGnaGnaGnaGnaGnaGnaGnaGnaGoaGpaGqaCdaDaaDaaCdaGraELarGaCdaGsaGtaCdaCdaCdaalaalaalaakaaaaaaaaaaaaaaaaakaaaaaaaaaaGuaaaaaaaaaaaaaakaakaaaaaaaaaaaaaaaaaaaaaaGvaGwaGxaGyaGzaGAaCkaGBaGCaGDaGEaCkaGFaxZaAyaCFaGGaGHaGIaGJaGKaGLaGMaGNayIaGOaGPaGQayIaGRaGSayIaGTayIaGUaGVaGWaCFaGcaGdaGXaGYaGZaGdaGdaGdaHaaHaaHaaHaaGdaGdaGdaabaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaCLaAEaFwaFvaHeaHfaHgaHhaHiaHjaHkaHkaHkaHlaFFaHmaGmaHnaHoaHpaHqaHraHsaHtaGnaHuaHvaHwaCdaDaaDaaCdaHxaHyaveaCdaCdaCdaCdaakaalaalaalaalaakaakaakaakaakaakaHzaakaakaakaakaaaaaaaaaaaaaakaakaaaaaaaaaaaaaaaaaaaGvaHAaHBaHCaHCaHCaHCaHCaHCaHCaHDaHEaHDawDaxZaAyaCFaHFaHGaHHaGJaHIaHJaHKaHLayIaHMaHNaHOayIaHPaHQaHRaHSayIayKaFqazNaCFaGcaGdaGdaGdaHTaGdaHUaHVaHWaHXaHYaHZaIaaIbaGdaabaabaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaIcaIcaIcaIcaIcaIcaIcaIcaIcaIcaIcaIcaCLaDKaDKaDKaDKaDKaDKaEEaIdaIeaIfaIgaIhaIiaFFaHmaGmaIjaIkaIlaIlaIlaIlaImaInaIoaHvaIpaCdaDaaIqaCdaIraIsaakaakaakaakaaaaaaaaaaaaaaaaalaakaaaaaaaaaaaaaaaaakaaaaaaaaaaItaIuaIvaIwaIvaIvaIvaIwaIxaIxaIxaIyaIxaIzaHBaaaaIAaIBaICaIDaIEaIFaIGaIHaIIaIJaIKaxZaAyaCFaGJaILaGJaGJaGJaIMaINaGJayIayIayIayIayIayIayJayIayIayIayKaIOaIPaCFaGcaGdaIQaIRaISaITaISaISaISaIUaGeaFxaGfaIYaGdaabaabaabaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaIcaIcaIcaIcaIcaIcaIcaIcaIcaIcaIcaIcaCLaDKaDKaDKaDKaDKaDKaEEaIdaIeaIfaIgaIhaIiaFFaHmaGmaIjaIkaIlaIlaIlaIlaImaInaIoaHvaIpaCdaDaaIqaCdaIraIsaakaakaakaakaaaaaaaaaaaaaaaaalaakaaaaaaaaaaaaaaaaakaaaaaaaaaaItaIuaIvaIwaIvaIvaIvaIwaIxaIxaIxaIyaIxaIzaHBaaaaIAblEaICaIDaIEaIFaIGaIHaIIaIJaIKaxZaAyaCFaGJaILaGJaGJaGJaIMaINaGJayIayIayIayIayIayIayJayIayIayIayKaIOaIPaCFaGcaGdaIQaIRaISaITaISaISaISaIUaGeaFxaGfaIYaGdaabaabaabaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIcaJaaJbaJcaJdaJeaJfaJgaJhaJiaJjaJkaJlaEEaJmaJnaJoaJpaJqaJraJsaJtaJuaJvaJuaJwaFFaJxaGmaIlaIlaIlaJyaJzaJAaJBaGnaJCaJDaJEaJFaDaaJGaCdaJHaJIaaaaakaakaakaaaaaaaaaaaaaaaaaaaakaaaaaaaabaaaaaaaakaaaaaaaGvaJJaHBaaaaaaaaaaakaakajQaakaaaaaaaaaaaaaaaaaaaakaHCaJKaJLaJMaJNaJNaJOaJPaJQaJRaJSaJTaJUaJVaJWaJXaJYaJYaJYaJZaKaaKbaKcaKdaKeaKfaKgaKhaKiaKjaKkaKlaKmaKnaKoaCFaGcaGdaKpaISaISaGdaKqaKraKsaISaGhaGgaHbaKwaGdaabaabaabaabaabaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIcaJdaJdaKxaJdaKyaKzaKAaKBaKCaKzaKDaKEaEEaKFaKGaKHaKGaKIaGjaKJaKKaFFaKLaFFaJwaFFaHmaGmaIlaKMaKNaKOaKPaKQaKRaGnaHuaHvaHwaCdaDaaDaaCdaaaaKSaaaaGvaIuaIvaIwaIxaIxaIxaIyaIxaIvaIxaIyaIxaIxaIxaIwaIxaIxaIzaKTaaaaKUaKUaKUaKUaKUaKUaKUaKVaKVaKWaKWaKWaKWaKVaKVaKXaKYaKZaLaaLbaHCaLcaLdaHDaLeaxZaAyaCFaLfaLgaGJaHIaHIaLhaLiaLjaLkaLlaLmaLnaLoaLoaLoaLoaLpaLkayKaFqaLqaCFaGcaGdaLraLsaLtaGdaLuaLvaLwaLxaHdaHcaHbaLAaGdaabaabaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaLBaLBaLBaLBaLBaIcaLCaLDaJcaJdaLEaLFaLGaLHaLIaLJaLKaLLaEEaLMaLMaLMaLMaLMaEEaLNaLOaLPaLQaLRaLSaLTaEGaLUaLVaLUaLUaLUaLUaLUaLUaLWaLXaHvaHwaCdaDaaDaaCdaaaaKSaaaaLYaHBaakaakaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaaaaaaaaaaakaaaaKUaLZaMaaMaaMbaMcaMdaKVaMeaMfaMgaMhaMiaMjaKVaMkaMlaMlaMlaMlaHCaMmaMmaHDaMnaxZaAyaCFaMoaMpaMqaMraMsaMtaMuaMvaMwaMxaMyaMzaMyaMyaMyaLoaLpaLkaMAaFqaMBaCFaGcaGdaMCaMDaMEaMFaMGaMHaMIaMJaIWaIVaIXaMNaGdaabaMOaMOaMOaMOaMOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaLBaLBaLBaLBaLBaLBaIcaMPaMQaMRaJdaJdaJdaJdaJdaJdaJdaMSaMTaJdaMUaMVaMVaMVaMWaMXaMYaMZaNaaNbaNcaNdaNeaNfaNgaNhaNiaNjaNkaNlaNmaNnaNoaNpaNqaNraCdaCdaDaaCdaaaaNsaaaaNsaaaaaaaakaakaakaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaKUaNuaNuaNuaNvaNvaNvaKVaNwaNxaNyaNzaNAaNBaNCaMkaNDaNEaNFaNGaHCaaaaaaaCFaNHaxZaNIaCFaNJaNKaGJaLjaHIaHIaHIaLjaLkaNLaNMaLnaLoaLoaLoaNMaLpaNNaNOaFqaLqaCFaGcaGdaNPaNQaNRaNSaNTaNUaNVaNWaNXaNYaNZaOaaGdaabaObaOcaOdaapaapaazaaaaaaaaaanTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaLBaLBaLBaalaalaIcaIcaOeaOfaOfaOgaOhaJdaOiaOjaOkaJdaOlaOmaJdaOnaOoaOpaOqaOraOsaOtaLOaOuaOvaLRaOwaOxaOyaOzaOAaOBaOCaODaOEaOFaOGaOHaOIaHvaOJaOKaCdaDaaCdaaaaKSaaaaKSaaaaaaaaaaakaakaakaabaaaaakaaaaaaaaaaaaaakaaaaaaaaaaaaaakaaaaKUaOLaOLaOLaNvaNvaOMaKVaONaOOaOPaOQaORaOSaOTaOUaOVaOWaOVaOXaHCaaaaaaaCFaOYaOZaAyaCFaPaaPbaGJaLjaPcaPdaPcaPeaPcaPfaMyaMzaPgaPhaPhaPiaPjaPkaPlaFqaLqaPmaGcaGdaGdaGdaGdaGdaGdaGdaGdaGdaGdaGdaPnaPoaGdaMOaMOaPpaPqaPraPsaaJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaLBaLBaalaalaalaPtaPuaOfaOfaOfaOfaOfaPvaPwaPxaPyaPzaPyaPAaJdaPBaPCaPDaPCaPEaPFaPGaPHaPIaPHaJpaPIaPJaPKaPLaPMaPNaLUaLWaLWaLWaPOaOHaOIaHvaOJaPPaCdaDaaCdaakaKSaaaaKSaaaaaaaaaaakaakaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaPQaKUaKVaPRaPSaPTaPUaPVaPWaKVaPXaNFaPYaNDaMlaHCaakaakaCFaPZaxZaQaaQbaQbaQbaQbaQcaPcaQdaQeaQfaPcaQgaQhaQiaQjaLoaLoaQkaQlaQmaQnaEtaQoaCFaGcapgapgapgapgapgapgapgapgapgaQpaQqaQraQsaQqaQqaQtaQuaQvaapaapaaOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaLBaLBaLBaLBaLBaLBaIcaMPaMQaMRaJdaJdaJdaJdaJdaJdaJdaMSaMTaJdaMUaMVaMVaMVaMWaMXaMYaMZaNaaNbaNcaNdaNeaNfaNgaNhaNiaNjaNkaNlaNmaNnaNoaNpaNqaNraCdaCdaDaaCdaaaaNsaaaaNsaaaaaaaakaakaakaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaKUaNuaNuaNuaNvaNvaNvaKVaNwaNxaNyaNzaNAaNBaNCaMkaNDaNEaNFaNGaHCaaaaaaaCFaNHaxZaNIaCFaNJaNKaGJaLjaHIaHIaHIaLjaLkaNLaNMaLnaLoaLoaLoaNMaLpaNNaNOaFqaLqaCFaGcaGdaNPaNQaNRaNSaNTaNUaNVaNWaNXaNYaNZaOaaGdaabaObaOcbyQbwwbwwbGpaaaaaaaaaanTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaLBaLBaLBaalaalaIcaIcaOeaOfaOfaOgaOhaJdaOiaOjaOkaJdaOlaOmaJdaOnaOoaOpaOqaOraOsaOtaLOaOuaOvaLRaOwaOxaOyaOzaOAaOBaOCaODaOEaOFaOGaOHaOIaHvaOJaOKaCdaDaaCdaaaaKSaaaaKSaaaaaaaaaaakaakaakaabaaaaakaaaaaaaaaaaaaakaaaaaaaaaaaaaakaaaaKUaOLaOLaOLaNvaNvaOMaKVaONaOOaOPaOQaORaOSaOTaOUaOVaOWaOVaOXaHCaaaaaaaCFaOYaOZaAyaCFaPabLaaGJaLjaPcaPdaPcaPeaPcaPfaMyaMzaPgaPhaPhaPiaPjaPkaPlaFqaLqaPmaGcaGdaGdaGdaGdaGdaGdaGdaGdaGdaGdaGdaPnaPoaGdaMOaMOaPpcfubYfcfwcfvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaLBaLBaalaalaalaPtaPuaOfaOfaOfaOfaOfaPvaPwaPxaPyaPzaPyaPAaJdaPBaPCaPDaPCaPEaPFaPGaPHaPIaPHaJpaPIaPJaPKaPLaPMaPNaLUaLWaLWaLWaPOaOHaOIaHvaOJaPPaCdaDaaCdaakaKSaaaaKSaaaaaaaaaaakaakaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaPQaKUaKVaPRaPSaPTaPUaPVaPWaKVaPXaNFaPYaNDaMlaHCaakaakaCFaPZaxZaQaaQbaQbaQbaQbaQcaPcaQdaQeaQfaPcaQgaQhaQiaQjaLoaLoaQkaQlaQmaQnaEtaQoaCFaGcapgapgapgapgapgapgapgapgapgaQpaQqaQraQsaQqaQqaQtaQucfxbwwbwwcfyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaLBaLBaLBaalaalaalaQwaQxaQyaQzaQAaQBaQCaLIaQDaQEaQFaLIaQGaQHaJdaJdaJdaJdaJdaJdaJdaQIaQJaQKaQLaQLaQMaQNaQOaQPaQQaOBaQRaQSaQTaQUaQVaQWaQXaQYaQZaCdaCdaDXaCdaHzaRaaakaRaaakaakaKUaKUaKUaKUaRbaRcaRdaRcaRcaRcaRcaReaRfaRcaRcaRcaRdaRgaRhaRiaRjaRkaRlaRmaRnaKVaKVaRoaRpaRqaRraKVaKVaMlaMlaRsaMlaMlaHCajQajQaCFawDaxZaAyaRtaRuaRvaRwaRxaPcaRyaRzaQfaPcaRAaRBaRCaRDaREaREaRFaRGaLkaRHaFqaRIaRJaRKaRJaMOaRJaRJaRJaRJaRJaRJaRJaRJaRLaQraRMaRNaROaMOaMOaMOaMOaMOaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaLBaLBaLBaRPaalaalaQwaQxaRQaRRaRSaOfaRTaJdaJdaJdaJdaJdaRUaRVaRWaRXaRYaJdaRZaSaaJdaJdaSbaSbaScaSbaSbaSbaSbaSdaSeaOBaOCaODaSfaSgaOGaOHaOIaHvaHwaCdaShaFRaSiaakaNsaaaaNsaaaaaaaSjaSkaSjaSlaRcaSmaSnaSoaSpaSpaSpaSpaSpaSpaSpaSpaSpaSqaSraSsaSraStaSuaSvaSwaSxaSyaSzaSAaSBaSCaSDaKUaHCaHCaHCaHCaHCaHCaSEaSEaCdawDaxZaAyaQbaSFaSGaSHaSIaSJaSKaSLaSMaPcaSNaSOaLnaQjaLoaLoaSPaSQaLkaSRaSSaSTaSUaSVaSWaMOaQqaSXaSYaQqaRJaSZaTaaRJaTbaTcaRMaTdaTeaTfaakaakaakaTgajQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaagaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaLBaLBaalaalaalaalaQwaThaRQaTiaTjaQzaTkaJdaTlaTmaTnaLIaToaTpaTqaTraPxaTsaTtaTuaTvaTwaTxaTxaTxaTxaTxaTxaTyaTzaTAaTBaLUaLWaLWaTCaPOaTDaOIaHvaTEaCdaDaaFRaSiaaaaKSaaaaKSaaaaaaaKUaTFaKUaTGaRcaTHaTIaTJaTJaTJaTJaTJaTJaTJaTJaTJaTKaTLaSraSraTMaTNaTOaTPaTQaTQaTRaTSaTTaTUaTVaTWaTXaTYaTZaUaaUbaUcaUdaEcaDgaCdaUeaUfaUgaQbaUhaUiaUjaUkaPcaUlaUmaUnaUoaUpaUqaLnaQjaLoaLoaNMaUraLkaUsaUtaUuaUvaUwaUxaUyaUzaUAaUxaUzaUBaUCaUDaUEaUFaUCaUGaUHaUIaUJaaaaaaaaaaTgaakaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -6482,13 +6499,13 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaLBaLBaLBaLBaIcaIcbbYbbZbcabcbbccaJdaWraWsaWtaJdbcdbceaZhbcfbcgbcgbcgbcgbcgbcgbchbcibcjbckbclbcmbcnbcobcpbcqbcrbcsbctbctbcubcvbcwaNqaJEaCdaDaaFRaSiaaaaKSaaaaRaaNtaaaaaaaakaXXaRcaXYaXZaYaaVlaWPaVlbcxaSnbcyaVlaWPaVlaTHaYcaYdaNvbczbcAbcBaVwbcCbcDaSrbcEbcFbcGbcHbcIbcJbcKbcLbcMbcNbcObcPbcQbcRbcSbcTaxZbbxaZTaZUbcUbcVaZUbcUbcWaPcaYBbcXbcYbcZbdabdbbdcbaabddbdebdfbdgaEtbbIbaebdhaXpbdibdjbdkbajbdlaLyaKubdnaRJbdobdpbdqbdraQqbdsbdtaUJaaaaTgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaLBaLBaLBaLBakSakSakSakSakSaIcaJdaJdaJdaJdaJdbdubdvaZhbdwbcgbdxbdybdybdzbdAbdBbdCbdDbdEbdFbdGbdHaPLbdIbdJaLUbdKbdLbdKaPOaLUbaSaHvaHwaCdaDaaFRaSiaaaaNsaaaaNsaNtaaaaaaaakaXXaRcaXYaXZaYaaVlaWPaVlaVlaVlaVlaVlaWPaVlaTHaYcaYdaNvaNvbdMbdNbdObdPaSraSrbdQbdRbdSbdTbdUbdVaKUbdWaSraSrbdXbdYbdZaSraSrbeaaxZbbxaZXaZXaZXbebaZTaZTbecaPcaPcaPcbedbedbeeaPcaPcaYBaYBbefaPcbegaUtbehbeibejbekbelbdjbembenbeobepbeqberaRJbesbetbeubevaQqbbWbewaUJaaaaTgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaLBaLBaLBaalaalaalbexbeybezbeAbeBbeCbeDaJdbeEbeFaZhbeGbcgbcgbcgbcgbcgbcgbeHbeIbeJbeKbeLbeMbeNbeObePbeQbeRaNkbeSaNkbeTbeUbeVaHvaHwaCdaDaaFRaSiaaaaKSaaaaKSaNtaaaaakaakaWKbeWbeXbeYaYaaVlaWPaWPaWPaVlaWPaWPbeZaVlaTHaWQaSraSraSraSrbfaaSraSraSrbfbbfcbdRbfdbfebffbfgaSrbfhaSrbfibfjbfkbflbfmbfnbfoaxZbbxaZXbfpbfqbfrbfsbfsbfsbfsbftbfubfvbfwbfxbfyaPcbfzbfAbfBaPcbfCaGVbfDaXoaXoaXpaXpbfEaXraXraXraXraXraXraRJbfFbfGbfHbfIbfJbfKbfLaUJaakaTgaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaalaalaalaalbfMbfNbfObfPaQxbfQbfRbfSbfTbfUaZhbdwbcgbfVbfWbfXbfYbfZbgabgbbgcbgdbgebgfbggbghaZlbgibgjbgkbglbgmbgnaOHaOIaHvbgoaCdbgpaWJaCdaaaaKSaaaaKSaNtaakaKUaKUaKUaRcaRcaTHbaZaVkaVlaVlaVkaVlaVlaVlaVlaVkaTHbgqaVnaSraVobgrbbfbgsbgtbgubgvaVwbgwbgxbgybgzbgAaSrbgBaSrbgCbgDaSubgEbgFbfnbgGaOZbbxaZXbgHbgIbbyaZXaZXbgJbgKbgLaZXaZXaZXaZXaZXbgMaZXaZXaZXbgNbgObgPbgQaWjaWbaWbbgRbgSbgTbgUaWbaWbbgVaWiaWjbgWbgXaWmaQqbgYbgZbhaaUJaaaaTgaakaakajQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaalaalaalaalbfMbfNbfObfPaQxbfQbfRbfSbfTbfUaZhbdwbcgbfVbfWbfXbfYbfZbgabgbbgcbgdbgebgfbggbghaZlbgibgjbgkbglbgmbgnaOHaOIaHvbgoaCdbgpaWJaCdaaaaKSaaaaKSaNtaakaKUaKUaKUaRcaRcaTHbaZaVkaVlaVlaVkaVlaVlaVlaVlaVkaTHbgqaVnaSraVobgrbbfbgsbgtbgubgvaVwbgwbgxbgybgzcgaaSrbgBaSrbgCbgDaSubgEbgFbfnbgGaOZbbxaZXbgHbgIbbyaZXaZXbgJbgKbgLaZXaZXaZXaZXaZXbgMaZXaZXaZXbgNbgObgPbgQaWjaWbaWbbgRbgSbgTbgUaWbaWbbgVaWiaWjbgWbgXaWmaQqbgYbgZbhaaUJaaaaTgaakaakajQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaalaalaalaalbhbbhcbhdbhebhfaPwbhgaJibhhbhiaZhbhjbcgbcgbcgbcgbcgbhkaZhbhlbhmbhnbhobhpbhqbaKaSebhraLUaLWaLWaLWaPOaTDaOIaHvaHwaCdbhsaDaaCdaaaaKSaaaaKSaaaaaaaKUbhtaKUbhuaRcaTHbhvaSnbhwaSnaSnaSnaSnaSnaSnaSnbcybhxaSraSraTMbhybhzbhAbhBbhCbhCbhCbhDbhEbhFbhGbhHaKUbhIaSrbhJbhKbhLbhLbhMbfnbfoaxZbbxaZXbhNbhNbfrbhOaZXaZXaZXaZXbhPbhQbhQbhQbhQbhQbhRbfpbfpaZXbgObhSaVYaVZaQqaQqbhTaQqbhUbhVbhVbhWbhXbhYbhZbiabhVbibbicbidaUJaUJaUJaaaaTgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaalaalaalaalbieakSakSaIcaIcbifbigbihaJdbifaOfaZhbiibijbikbikbikbilbimaZhaZiaZiaZiaZiaZiaZibinaSeaOBbioaQSbipaQUaQVaQWaQXbiqbiraCdaDaaDaaCdaaaaNsaaaaNsaaaaaaaSjbisaSjaSlaRcbitbiubivbiwbiwbiwbiwbiwbiwbiwbiwbixbiyaSrbizaSraStbiAbiBbiCbiDbiEbiFbiGbiHaKUaKUaKUaKUbhIaSraSrbfnbfnbfnaSraSrbiIaxZbbxaZXaZXaZXbbyaZXaZXbiJbiKbiLaZXbiJbiMbgLaZXaZXbiNbiObiMbiLbgObhSbiPaRJbiQaSZaMOaQqbiRbiSaQqaRJaQqbiTaMObiUaQqaWmbiVbiWaUJaaaaaaaakaTgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaalaalaalaalaalaalaalaalaIcbiXbiYbiZaJdaJdbjaaIcaIcbjbbjbbjbbjbbjbbjbbjbbjcbjdbjebjfbjgaLWbjhaSeaOBaOCaODbjiaSgbjjaOHbjkbjlaIpaCdaDaaDXaCdaHzaRaaakaRaaakaakaKUaKUaKUaKUaRbaRcbjmbjnbjnbjnbjnbjobjnbjnbjnbjnbjpbjnbjqbjrbjsbjtbjubjvbjwaSrbjxaSrbjyaSraKUajQaakaakaakaakaakaaaaaaaakaakaCFbjzaxZbbxaZXbfqbfpbbyaZXbjAbjBbjBbjBbjBbjBbjBbjBbjCaZXbiNbiMbiMbgLbjDbjEbjFaRJaRJaRJaRJaRJaRJaRJaRJaRJaRJbjGaMOaQraQqaWmbjHbjIaUJaakaakaaaaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaalaalaalaalaalaalaalaIcbjJbjKbjLaJdaOfaOfbjMbjNbjbbjObjPbjPbjPbjQbjbbjRbjSaQSaQSbjSbjTbjUbdIbjVaLUaLWaLWaTCaPOaOHaOIaHvaHwaCdaDaaFRaSiaakaKSaaaaKSaaaaaaaaaaakaakaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaSraSrbjWbjXbjYbjZaSraNvbkaaapaapaazaaaaaaajQaakaakaaaaaaaaaaaaaakaCFbkbaxZbbxaZXbkcbiKbfrbfsbkdbkebkfaUjaUjaUjbkgbkhbkibhQbkjbkkbklbiLbgOaFqaLqbkmaaaaaaaaaaaaaaaaaaaaabknapgbkoaMObkpbkqaWmbkrbksaUJaaaaaaaaaaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaalaalaalaalaalaalaIcaIcaIcaIcaIcbktaPubkubkvbjbbkwaLzaMKaLzbkzbkAbkBbkCbaPbkDbkEbkFbkGbkHaVebkIaNkbkJaVhaViaNoaNpaNqaJEaCdbkKaFRaSiaaaaKSaaaaKSaaaaaaaaaaakaakaakaaaaaaaakaaaaaaaaaaaaaakaaaaaaaaaaaaaakaaaaKUbkLbkMbkNbkObkPbkQaSrbkRbkSaPraPsaaJaaaaaaaakaaaaaaaaaaaaaaaaaaajQaCFbkTaxZbbxaZXbhNbhNbbyaZXbkUbkVaUjaUjbkWaUjaUjbkVbkXaZXbkYbhNbhNaZXbgOaFqaLqbkmaaabkZbkZbkZbkZbkZbkZbkZapgbkoaRJblaaMOblbaMOaMOaMOaRJaRJaakaNtaakajQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaalaalaalaalaalaIZaIZaIZakSakSakSakSakSbjbblcaMLbalaMMblgblhblibljblkbllblmblnbloblpblqaOCaODblraOFblsaOHaOIbltblublvblwaFRaSiaaaaIraIsaNsaaaaaaaakaakaakaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaKUblxblyblzblAblBblCaSrblDblEaapaapaaOaaaajQajQaaaaaaaaaaaaaaaaaaaaaaCFblFblGbbxaZXaZXaZXbbyblHaQbaQbaQbblIaQbblIaQbaQbaQbblJbkYaZXaZXaZXblKaUtblLbkmaaabkZblMblNblNblNblOblPaEwblQaSUblRblSblTblUblVblWblXaRJaaaaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaalaalaalaalaalaalaalaIcbjJbjKbjLaJdaOfaOfbjMbjNbjbbjObjPbjPbjPbjQbjbbjRbjSaQSaQSbjSbjTbjUbdIbjVaLUaLWaLWaTCaPOaOHaOIaHvaHwaCdaDaaFRaSiaakaKSaaaaKSaaaaaaaaaaakaakaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaKUaSraSrbjWbjXbjYbjZaSraNvcgccgwcgwcgxaaaaaaajQaakaakaaaaaaaaaaaaaakaCFbkbaxZbbxaZXbkcbiKbfrbfsbkdbkebkfaUjaUjaUjbkgbkhbkibhQbkjbkkbklbiLbgOaFqaLqbkmaaaaaaaaaaaaaaaaaaaaabknapgbkoaMObkpbkqaWmbkrbksaUJaaaaaaaaaaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaalaalaalaalaalaalaIcaIcaIcaIcaIcbktaPubkubkvbjbbkwaLzaMKaLzbkzbkAbkBbkCbaPbkDbkEbkFbkGbkHaVebkIaNkbkJaVhaViaNoaNpaNqaJEaCdbkKaFRaSiaaaaKSaaaaKSaaaaaaaaaaakaakaakaaaaaaaakaaaaaaaaaaaaaakaaaaaaaaaaaaaakaaaaKUbkLbkMbkNbkObkPbkQaSrbkRcgycgBcgAcgCaaaaaaaakaaaaaaaaaaaaaaaaaaajQaCFbkTaxZbbxaZXbhNbhNbbyaZXbkUbkVaUjaUjbkWaUjaUjbkVbkXaZXbkYbhNbhNaZXbgOaFqaLqbkmaaabkZbkZbkZbkZbkZbkZbkZapgbkoaRJblaaMOblbaMOaMOaMOaRJaRJaakaNtaakajQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaalaalaalaalaalaIZaIZaIZakSakSakSakSakSbjbblcaMLbalaMMblgblhblibljblkbllblmblnbloblpblqaOCaODblraOFblsaOHaOIbltblublvblwaFRaSiaaaaIraIsaNsaaaaaaaakaakaakaaaaaaaaaaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaNtaaaaKUblxblyblzblAblBblCaSrblDcgEcgwcgwchjaaaajQajQaaaaaaaaaaaaaaaaaaaaaaCFblFblGbbxaZXaZXaZXbbyblHaQbaQbaQbblIaQbblIaQbaQbaQbblJbkYaZXaZXaZXblKaUtblLbkmaaabkZblMblNblNblNblOblPaEwblQaSUblRblSblTblUblVblWblXaRJaaaaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaalaalaIZaIZaIZaIZaIZaIZaIZaIZaIZbjbblYbambdmbbObmcbmdaLWbmeaLWaLUbmfaLUaLUbmgaLUaLUaLUaLUaLUaLUaLWaJCaHvbmhaCdaCdaWJaCdaaaaJHbmibmjaaaaakbmkaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaKUbmlbmmbmnbmobmmbmpaKUaKUaKUaWPaWPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCFbmqbmrbmsbmtbmubmtbmvbmwbmtbmtbmtbmtbmxbmybmtbmtbmtbmwbmzbmtbmtbmtbmAaFqbmBbmCbkmbkZbmDbmEbmFbmEbmGbkZbmHbkoaRJbmIbkybkxblebldblfbmObmPaaaaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbjbbmQbmRbmSbjPbmTbjbbmUbmVbmWaLUbmXbmYbmZbnabnbbncbncbndbncbnebmZaHuaHvaOJbnfaCdaDaaCdaaaaaaaJHbngbnhaakaakaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaKUbniaSubmmbnjaSubnkaKUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalaalbnlbkbbnmbnnaFqaSSbnobnpaFqaFqaFqaFqaFqbnqbnraFqaFqaFqaFqbnsaFqaFqaFqbnrbntbnubnvbnwbnxbnwbmEbnybmEbnzbkZbnAbnBbnCbnDbmablZbmJbmbbkybnIbmPaakaNtaaaaaaaaaajQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZakSakSakSakSakSaLUaLUbnJbnKbnLbnMbnNbnObnPbnQbnRbnSbnSbnSbnSbnTbnUbnVaHvaOJbnWaCdaDaaCdajQaakaakbnXbnYbnhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaKUbnZboabobbocbodboeaKUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalaynbnlbofaVHaVIbogbogbohboibogbogbojbogbogbokbolbogbombonbogboobohbogbogbopaEtboqborbkmbkZbosbnwbotbnwboubkZapgbovaRJbmIbmabmKbmLbmbbkyboybmPaaaaNtaakaakaakaakaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -6501,21 +6518,21 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbqLbtbbrubqLbrubtcbmZbmXbtdbmZbspbnbbtebtebtfbtebnbbmZbtgbthbtiaCdbtjbtkbtjaCdaCdaCdaCdbtlbtmaDaaDaaDaaDaaDaaDaaDaaDaaDaaDaaDaaDaaDaaDaaDaaDaaDaaDaaDaaDabtnbtoaDaaDaaDaaDabtpaVEbtqaCdbqrbqrbqrbtrbsxbtsbttbsxbswaDaaDaaCFbkbaJTbtubtvbtwbtxbtybtzbtxbtybtzbtxbtAbtzbtxbtBbtCbtDbtEbtFbtGbtHbtIbtJbtKbtLbtMbtNbtObtPbtQbtRbtRbtSbsjbtTbtUbqJbqKbqKbqKbqKbqKbqJaaaaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbqLbtVbtWbtXbtYbtZbmZbuabmZbmZbubbmZbmZbmZbmZbmZbmZbmZbucbudbueaCdaCdaCdaCdaCdbufbufaCdaCdaCdaCdbugaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdaCdbuhaCdaCdaCdbufbufbqrbqrbuibujbukbqraCdaCdaCdaCFbulbumbunboTbuobupbuqburbupbusburbutbuqburbuubuvbrObuwbrObuxbuyboTbuzbuAbuBbuCbsjbsjbsjbuDbuEbtRbtRbuFbsjbuGbuHbqJbqKbqKbqKbqKbqKbqJaaaaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbqLbuIbuJbuKbuLbuMbuNbuObuPbuPbuQbuRbuSbuTbuUbuVbuWbuXbuYbuZbvabvbbvcbvcbvcbvdbvebvebvfbvgbvcbvcbvcbvcbvhbvibvcbvcbvcbvjbvkbvlbvmbvnbvcbvcbvjbvcbvhbvbbvobvpbvqbvrbvcbvhbvsbvtbvcbvcbvubvebvebvvbvcbvwbvxbvybvzbvAbvBbvcbvCbvDbvEbvFboTbvGbrmboTbvHbrmboTbvIbrmboTbvJbrmboTbvKbvLbvMbvNbvMboTbvObnpbvPbqIbvQbsjbsjbsjbvRbvSbvTbvUbsjbsjbvVbtabqKbqKbqKbqKbqKbqJaaaaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbqLbvWbvXbqLbvYbvZbwabwbbwbbwbbwbbwcbwdbwebwfbwgbwgbwhbwibwjbwkbwlbwkbwkbwkbwkbwkbwmbwnbwkbwkbwkbwkbwkbwkbwlbwkbwkbwkbwobwkbwpbwqbwrbwsbwtbwobwkbwkbwlbwubwkbwvbwkbwkbwkbwwbwxbwsbwsbwsbwsbwsbwybwsbwzbwAbwkbwkbwubwvbwkbwvbwkbwBbwCboTbnHbnGboTbowbnGboTboxbnGboTbpjbnGboTbvMbvLbvMbvNbwIboTbwJbhSbwKbwLbwMbwNbwObwObwPbwQbwObwRbwSbsjbvVbqJbqKbqKbqKbqKbqKbqJaaaaNtaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbqLbvWbvXbqLbvYbvZbwabwbbwbbwbbwbbwcbwdbwebwfbwgbwgbwhbwibwjbwkbwlbwkbwkbwkbwkbwkbwmbwnbwkbwkbwkbwkbwkbwkbwlbwkbwkbwkbwobwkbwpbwqbwrbwsbwtbwobwkbwkbwlbwubwkbwvbwkbwkbwkchkbwxbwsbwsbwsbwsbwsbwybwsbwzbwAbwkbwkbwubwvbwkbwvbwkbwBbwCboTbnHbnGboTbowbnGboTboxbnGboTbpjbnGboTbvMbvLbvMbvNbwIboTbwJbhSbwKbwLbwMbwNbwObwObwPbwQbwObwRbwSbsjbvVbqJbqKbqKbqKbqKbqKbqJaaaaNtaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbqLbqLbqLbqLbqLbwTbwUbqLbqLbqLbrubuRbwVbwWbwXbwYbwZbqrbxabxbbxcbxcbxcbxcbxcbxdbxcbxebxcbxcbxfbxcbxgbxhbxhbxhbxhbxibxjbxkbxcbxlbxmbxnbxobxpbxqbxobxobxobxrbxobxsbxobxobxtbxobxubxobxobxobxobxobxobxvbxwbxxbxybxybxzbxwbxybxwbxybxAbxBboTbplbpkboTbplbpmboTbplbwDboTbplbwEboTbxHbxIbxHbvNbxJboTbxKbxLbxMbqIbqIbqIbqIbqIbqIbqIbqIbqIbqIbxNbvVbqJbqKbqKbqKbqKbrsbqJaaaaNtaaaaakaakaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbqLbrubxObxPbqLbxQbqLbrubuRbxRbxSbxTbwYbxUbxVbxWbxXbxYbxZbyabxVbybbxVbxVbycbydbxVbxVbyebyebyfbygbygbyfbyebyebyebyebyhbyibyjbykbylbykbykbykbykbymbykbynbyobypbypbypbypbypbypbypbypbypbyqbyrbysbytbyubyubyvbywbyubywbyxbyrbyqbyybyybyybyybyybyybyybyybyybyybyybyybyybyybyzboTbyAbyBbyBbyCbyDbyEbyBbyFbyGbyHbyIbyBbyJbyKbyLbyBbyMbyNbqJbqKbqKbqKbqKbqKbqJaakaNtaaaaaaajQaakajQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbqLbyObyPbyQbqLbyRbqLbrubuRbySbyTbyUbyUbyVbyWbyXbyYbyZbyZbyZbzabzbbxVbzcbzdbzebzebxVbzfbzgbzgbzgbzgbzgbzhbzibzjbzkbzlbzmbznbykbzobzpbzqbzrbzsbztbykbzubzvbypbzwbzxbzybzzbzAbzBbzAbypbzCbzDbzEbzFbzGbzGbzHbzIbzGbzIbzGbzJbzKbyybzLbzMbzNbyybzObzPbzQbzRbzSbzTbzUbzVbzWbzXbzYbzZbyBbyIbyIbAabAbbAcbyFbAdbyFbAebyBbAfbAgbAhbyBbqIbqIbqIbqIbqIbqIbqIbqIbqIaaaaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbqLbyObyPchlbqLbyRbqLbrubuRbySbyTbyUbyUbyVbyWbyXbyYbyZbyZbyZbzabzbbxVbzcbzdbzebzebxVbzfbzgbzgbzgbzgbzgbzhbzibzjbzkbzlbzmbznbykbzobzpbzqbzrbzsbztbykbzubzvbypbzwbzxbzybzzbzAbzBbzAbypbzCbzDbzEbzFbzGbzGbzHbzIbzGbzIbzGbzJbzKbyybzLbzMbzNbyybzObzPbzQbzRbzSbzTbzUbzVbzWbzXbzYbzZbyBbyIbyIbAabAbbAcbyFbAdbyFbAebyBbAfbAgbAhbyBbqIbqIbqIbqIbqIbqIbqIbqIbqIaaaaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbqLbqLbqLbqLbqLbxQbqLbrubuRbAibAjbAkbwYbAlbxVbAmbAnbAobApbApbApbAqbxVbArbAsbzebAtbxVbAubAvbAwbAwbAwbAxbAybAzbAAbABbACbADbAEbykbAFbAGbAHbAGbAIbAJbykbAKbALbypbAMbANbAObAPbzAbzAbAQbypbzGbzGbARbASbzGbzGbATbAUbAVbAWbAXbAYbAZbBabBbbBcbBdbBebBfbBgbBhbBibBjbBkbBlbBkbBmbBnbBobzvbyBbBpbwGbwFbAbbyFbyFbBsbBtbyFbBubAfbAfbBvbyBaabaabaabaabaabaabaabaalaakaaaaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbqLbqLbqLbrubuRbBwbBxbuRbBybBzbxVbBAbBBbBAbBCbBCbBCbBDbxVbxVbycbydbxVbxVbBEbBFbBGbBHbBIbBJbBKbBLbBMbBNbBObADbBPbBQbBRbAGbAGbAGbAGbBSbykbBTbBUbypbBVbBWbAObBXbzAbzAbzAbypbBYbAVbBZbCabCabCabCbbCcbCdbCdbCebzIbCfbyybCgbChbCibyybCjbCkbClbzRbCmbBkbCnbBkbCobyybCpbzvbyBbCqbwGbwFbCrbCsbyFbCtbCubCvbyBbyBbyBbyBbyBaalaabaabaabaabaabaabaalaNtaNtaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbqLbrubCwbxObCxbxVbCybCzbCAbCBbCCbCDbCEbCEbCEbCEbCFbCGbCHbCIbCJbCKbCLbCMbCNbCObCPbBJbBKbCQbyfbBNbBObADbAEbCRbCSbAGbAGbAGbAGbAGbCTbBTbCUbypbypbypbCVbypbypbypbypbypbCWbzGbCXbCYbCZbDabDabDbbCZbDcbDdbDebDfbDgbDhbBkbDibyybzObCkbClbzRbDjbDkbDlbDmbDnbyybDobzvbyBbDpbxCbwHbxEbxDbxFbxDbxDbDvbDvbDwbDxbDybyBaalaalaabaabaabaabaalaalaaaaakaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbqLbDzbDAbuQbCxbxVbDBbDCbDCbDCbDDbDEbDFbDFbDFbDFbDGbDHbDIbDJbDKbxVbDLbDMbDNbDObDPbDQbBKbCQbyebBNbBObADbAEbykbDRbDSbAGbDTbDUbDVbykbBTbDWbypbDXbDYbDZbEabEbbEcbEdbEebzHbzGbCXbEfbEgbEhbzGbEibEjbEkbDdbElbEmbyybEnbBkbEobyybzObEpbEqbErbEsbEtbEubEvbEwbyybExbzvbyBbEybwGbwFbEzbEAbyFbEAbEAbEBbyFbECbyFbyFbEDaalaalaalaabaabaalaalaalaaaajQajQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbEEbuQbEFbEGbCxbxVbEHbEIbCEbCEbEJbEKbELbEMbENbEObEPbEQbERbESbETbxVbEUbEVbEWbEXbEYbEZbFabFbbyebFcbBObADbFdbykbFebFfbFgbFhbFibFjbFkbBTbBUbypbFlbBWbANbFmbFnbFobFpbEebzHbzGbCXbEfbzGbzGbzGbzIbzGbFqbDdbElbFrbyqbyqbyqbyqbyqbyqbyqbFsbyybyybFtbyybyybyybyybFubzvbyBbFvbwGbwFbxGbwGbwGbwGbwGbyFbyFbFxbFxbyFbEDaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFybFzbFAaabaabaadaadaadaadaadaadaadaadaadaadaadaadaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbqLbqLbwUbqLbqLbFBbFCbxVbxVbxVbFDbxVbxVbxVbxVbxVbxVbxVbxVbycbxVbxVbxVbxVbyebyebyebyebFEbyebygbFFbFGbFGbFHbADbFIbykbylbykbykbykbykbykbykbFJbFKbypbFLbANbANbFMbFNbFObEdbEebATbFPbFQbyrbyxbyxbFRbysbyxbyrbFSbFTbFUbFVbyqbFWbFXbFXbFYbyqbFZbGabGbbGcbGdbGebGfbyybCpbzvbyBbGgbwGbwFbGhbGibyFbGjbGjbyFbGkbyIbyIbGlbEDaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGmbGnbGoaabaabaabaabaabaabaadaadaadaadaadaadaadaagaagaabaabaabaabaabaabaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbqLbGpbGqbGrbqLbFBbFCbGsbGtbqLbGubtYbtYbtYbGvbtYbGwbGxbGybGzbGxbtYbtYbtYbGAbtYbtYbtYbGBbGCbGDbGEbGFbGGbGHbGIbGJbGKbGLbGMbGNbGObGPbGQbGNbBTbzvbypbGRbANbANbANbGSbGTbEdbEebzHbzGbGUbGVbGWbGXbGXbGYbGZbyxbHabElbzGbHbbHcbHdbHebHfbHgbHhbHibBcbHjbBcbBcbHkbHlbyybHmbzvbyBbHnbwGbBqbDqbBrbBrbBrbBrbHrbGkbyIbHsbGlbEDaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabGmbGnbGoaabaabaabaabaabaabaadaadaadaadaadaadaadaagaagaabaabaabaabaabaabaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbqLchmbGqbGrbqLbFBbFCbGsbGtbqLbGubtYbtYbtYbGvbtYbGwbGxbGybGzbGxbtYbtYbtYbGAbtYbtYbtYbGBbGCbGDbGEbGFbGGbGHbGIbGJbGKbGLbGMbGNbGObGPbGQbGNbBTbzvbypbGRbANbANbANbGSbGTbEdbEebzHbzGbGUbGVbGWbGXbGXbGYbGZbyxbHabElbzGbHbbHcbHdbHebHfbHgbHhbHibBcbHjbBcbBcbHkbHlbyybHmbzvbyBbHnbwGbBqbDqbBrbBrbBrbBrbHrbGkbyIbHsbGlbEDaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabHtbHubHvbFAbHwbHwbHwbHwbHwaabaabaabaagaagaagaagaagaagaabaabaabaalbHxaabaabaabaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbqLbHybrubFBbHzbFBbFCbHAbrubqLbHBbHCbHCbHCbHDbHCbHCbHCbHCbHCbHCbHCbHCbHCbHDbHCbHCbHCbHCbHEbHFbHGbHHbHIbFHbHJbHKbHLbHMbHNbHObHPbHQbHRbGNbBTbzvbHSbANbANbANbANbGSbGTbEdbEebzHbzGbHTbyxbHUbHVbHWbHXbHYbyxbHabHZbzGbHbbIabIbbIcbIdbIebIfbIgbIhbIibIjbBkbBkbIkbyybHmbzvbyBbIlbwGbDrbInbIobyFbIobyFbyFbGkbIpbIqbGlbEDaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIrbIsbGnbItbIubHwbIvbIwbIxbHwaabaabaabaabaabaabaabaabaabaabaabaalbIyaalaalaabaabaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbqLbIzbHCbIAbIBbICbIDbrubIEbqLbIFbrubqLbqLbqLbqLbqLbqLbqLbqLbqLbqLbqLbqLbqLbqLbIGbIGbIGbIGbIHbIIbIJbIGbIKbADbFIbGKbILbIMbINbIObIPbIQbGNbBTbzvbypbIRbANbISbITbIUbIVbIWbIXbIYbIZbJabyqbJbbJcbHWbJdbJebyqbHabElbzGbJfbyqbJgbIcbzGbHbbJhbJibJjbIibBkbBkbBkbBkbJkbHmbzvbyBbJlbyIbJmbJnbJobJobJpbyFbyFbyFbJqbJqbyFbEDaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFAbJrbJsbJtbJubJvbJwbJxbHwaabaabaabaabaabaabaabaabaabaabbJybJyaalbJzaalaabaabaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbqLbqLbqLbqLbqLbqLbFBbFCbJAbJBbqLbIFbrubqLaabaabbqLbJCbJDbJEbJFbqLbJGbJHbJIbJIbJIbIGbJJbJKbJLbJMbJNbJObIGbFHbADbFIbGKbJPbJQbGNbGNbGNbGNbGNbJRbJSbJTbJUbJVbJVbJVbJWbJXbJYbyqbJZbKabKbbyqbKcbKdbKebKfbKgbyqbyqbKhbKibyqbyqbKjbKkbKlbKmbJhbKnbKobKpbKqbKrbKsbKtbyybHmbzvbyBbKubIqbJmbyFbKvbKwbKxbyIbKybKzbyFbyFbKAbyBaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaanTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFAbKBbKCbKDbHwbKEbKFbKGbKHaynaalaalaalaalbJyaalaalaalaalaalaalbKIbKJaalaabaabaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbqLbKKbKLbtWbKMbKNbKObKPbKNbKNbKNbKQbrubqLbqLaabbqLbrubrubKRbrubrubrubrubrubrubrubIGbKSbKTbKUbKVbKWbKXbIGbFHbADbKYbGKbHmbJQbGNbKZbLabLbbGNbLcbzvbypbLdbLebANbANbGSbLfbypbLgbLhbLibLjbyqbyqbLkbLlbysbyqbyqbLmbLnbLobLpbyqbyqbLqbLrbJhbJhbLsbLtbLubyybyybyybyybyybHmbzvbyBbyBbyBbyBbLvbyBbyBbyBbyBbyBbyBbyBbyBbyBbyBaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFAbKBbKCbKDbHwbKEbKFbKGbKHaynaalaalaalaalbJyaalaalaalaalaalaalbKIbKJaalaabaabaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZbqLbKKbKLbtWbKMbKNbKObKPbKNbKNbKNbKQbrubqLbqLaabbqLbrubrubKRbrubrubrubrubrubrubrubIGbKSbKTbKUbKVbKWbKXbIGbFHbADbKYbGKbHmbJQbGNbKZchnbLbbGNbLcbzvbypbLdbLebANbANbGSbLfbypbLgbLhbLibLjbyqbyqbLkbLlbysbyqbyqbLmbLnbLobLpbyqbyqbLqbLrbJhbJhbLsbLtbLubyybyybyybyybyybHmbzvbyBbyBbyBbyBbLvbyBbyBbyBbyBbyBbyBbyBbyBbyBbyBaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabHwbHwbHwbHwbLwbHwbLxbLybLzbLAbLBbLCaalbJyaalaalaabaabaabaabaabaalaalaalaalaabaabaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaabaabbqLbKKbLDbuJbLEbLFbLGbLHbHCbHCbHCbLIbLJbLKbqLaabbqLbLLbrubrubLMbrtbLNbIGbIGbIGbIGbIGbLObLPbLQbLRbLSbLTbIGbLUbADbFIbGKbLVbLWbLXbLYbLZbMabGNbLcbzvbMbbMcbMdbMebMebMfbMgbMhbMibMjbMkbMlbMmbMnbMobMpbMqbMrbMsbMtbMubMvbMwbMxbMybMzbMAbMBbMCbMDbMEbMwbMFbMGbMHbMIbMJbLVbMKbMKbMKbMLbMKbMKbMKbMKbBobMMbMNbMObMObMObMObMObMPbMPbMPbMPbMPbMPbMPbMPbMPbMPbMPbMPbMPbMPbMPbMQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabHwbHwbMRbMSbHwbMTbHwbHwbHwbHwbHwaynbMUaalaalaabaabaabaabaabaabaabaabaabaabaabaabaabaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaabaabbqLbqLbqLbqLbqLbqLbqLbqLbqLbqLbqLbqLbqLbMVbqLaabbqLbMWbrubMXbqLbqLbqLbIGbMYbMZbNabNbbNcbNdbNebNfbKWbNgbIGbFHbADbFIbGKbzvbJQbGNbNhbNibNjbGNbNkbIPbNlbNmbNnbNobNpbNqbNrbNsbNtbNubNvbNwbNxbNybNzbNAbLobLobNBbNCbNDbNEbMpbNFbNGbMpbMkbMpbMkbNHbMebMebMebNIbNJbzvbNKbNLbNLbNLbNLbNMbNLbNLbNLbNLbNNbNObGNaabaabaabaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabNPbNQbKCbNRbHwbNSbNTbNUbNVbHwaabaabaabaabaabaabaabaagaagaagaagaagaabaabaabaabaabaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaIZaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabbqLbMVbqLaabbqLbNWbrubNXbqLbNYbNZbIGbOabObbOcbOdbOebNebNebOfbKWbNebIGbOgbOhbOibGKbBUbJQbGNbGNbOjbGNbGNbJQbzvbOkbOkbOkbOkbOlbOkbOkbOkbOmbOnbOobOmbOpbOmbOqbOrbOsbOtbOtbOubOvbOwbOsbOxbOybOzbOAbOBbLibOCbODbMebOEbOFbOFbOFbOFbOFbOFbOFbOFbOFbOFbOFbOFbOFbHmbOGbGNaabaabaabaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -6528,39 +6545,39 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUPbUQbUQbUQbUPaabaabaabaabaabaabaabaalaalaalaalaalaalaalaalaalaabaabaabbURbURbURbURbURbqLbRSbFBbPRbSKbSLbSMbUSbSObUTbSObUUbUVbSUbSUbUWbSUbSUbUXbUYbUZbVabHIbFHbVbbGJbGKbGKbGKbGKbGKbLcbRbbOmbOmbOmbOmbOmbOmbOmbVcbOmbOmbOmbOmbOmbOmbVdbOmbOmbVebVfbMHbMHbMHbMHbVgbVhbVibVjbVkbVlbVmbVnbVobVpbVqbSxbTAbOFbVrbVrbVrbVrbVsbVtbUJbVubQFbVvbVwbOFbVxbTIbGNaabaabaabaalaalaalagiaalbTJbUObTLaalbTJbUObTLaalbTJbUObTLaalagiaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUQbUQbVybVzbVybUQbUQaabbUQbUQbUQbUQaalaalaalaalbVAaalaalaalaalbVAaalbURbURbURbVBbVCbVDbURbVEbVFbVGbPRbPRbPRbPRbPRbPRbVHbPRbVIbVJbVKbVLbVMbVNbVObVPbVQbUZbHHbHIbFHbADbFIbGKbVRbVSbVTbBUbVUbVVbzvbzvbzvbzvbzvbzvbVWbzvbzvbzvbzvbMIbVfbVXbVYbVZbVXbWabWbbVfbWcbWdbMHbWebWfbWgbWhbWibWjbWkbWlbWmbUzbWnbSxbWobOFbWpbWqbWrbUHbWsbWtbWubWvbWwbWsbWxbWybWzbWAbGNaabaabaabaabaalaalagiaalbTJbUObTLaalbTJbUObTLaalbTJbUObTLaalagiaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUQbUQbVybVybVybVybVybUQbUQbUQbWBbWCbWDbWEbWEbWEbWEbWEbWEbWEbWEbWEbWEbWEbWFbWGbWFbWHbWIbWJbWKbQTbWLbWMbHCbHCbHCbHCbHCbWNbWObPRbWPbWQbPRbPRbPRbPRbWRbPRbWSbUZbHHbHIbOgbWTbWUbWVbWWbWXbWXbWXbWYbWZbXabXabXabXbbXabXabXcbXabXabXabXabXdbXebXfbXgbXhbXibXjbXibXkbXibXibMHbXlbMebMebMebTpbVlbXmbUzbXnbUzbXobSxbXpbOFbXqbXrbXsbTEbXtbXubXvbTEbXwbXxbXybOFbXzbBTbXAbXAbXAbXAbXBaalaalagiaalbTJbUObTLaalbTJbUObTLaalbTJbUObTLaalagiagiagiagiaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUQbUQbVybVybVybVybVybVybVybUQbUQbXCbXDbUQaalaalaalaalaalaalaalaalaalaalaalbPSbPSbURbXEbXFbURbURbXGbXGbXGbXGbXGbXGbXGbXGbXHbHIbPRbPRbPRbPSbXIbXJbXJbXJbXJbXKbXLbXMbXNbXObXPbXQbGKbGKbGKbXRbXRbXRbXSbXRbXRbXRbXTbXRbXRbXRbXRbXRbXRbXRbOGbVfbVXbVYbXibVXbXibXibVfbXUbXVbMHbXWbRubXXbXYbXZbSxbYabYbbYcbUzbYdbSxbSxbOFbOFbOFbOFbOFbOFbOFbOFbOFbOFbOFbOFbOFbXzbBTbYebYfbYgbYhbXBbXBbXBaalaalaalbYiaalaalaalbYiaalaalaalbYiaalaalaalaalaalagjaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUQbUQbVybVybVybVybVybVybVybUQbUQbXCbXDbUQaalaalaalaalaalaalaalaalaalaalaalbPSbPSbURbXEbXFbURbURbXGbXGbXGbXGbXGbXGbXGbXGbXHbHIbPRbPRbPRbPSbXIbXJbXJbXJbXJbXKbXLbXMbXNbXObXPbXQbGKbGKbGKbXRbXRbXRbXSbXRbXRbXRbXTbXRbXRbXRbXRbXRbXRbXRbOGbVfbVXbVYbXibVXbXibXibVfbXUbXVbMHbXWbRubXXbXYbXZbSxbYabYbbYcbUzbYdbSxbSxbOFbOFbOFbOFbOFbOFbOFbOFbOFbOFbOFbOFbOFbXzbBTbYechobYgbYhbXBbXBbXBaalaalaalbYiaalaalaalbYiaalaalaalbYiaalaalaalaalaalagjaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUQbUQbVybVybYjbYkbVybYjbYkbVybVybUQbYlbUQbUQaalaalaalaalaalaalaalaalaalaalaalaalbPSbYmbYnbYobYpbYqbDsbDtbYtbYubDubYwbYxbYybYzbYAbYBbYCbSZbSZbSZbSZbSZbSZbSZbYDbSYbYEbHIbFHbADbFIbGKbYFbYGbXRbYHbYIbYJbXRbYKbYLbYMbYNbYLbXRbYLbYObYPbXRbOGbVfbVXbYQbXibVXbXibYRbVfbYSbYTbMHbMHbMHbJkbMHbMHbSxbSxbSxbYUbSxbSxbSxbYVbYWbYXbYYbYZbZabNLbNLbNLbNLbNLbNLbNLbNLbZbbZcbZdbZebZfbZgbZhbZibZhbZjbZkbZkbZkbZkbZkbZkbZkbZkbZkbZkbZkbZlbZmbZmbZnaalagiaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUQbUQbVybVybVybZobZpbZqbZrbZsbVybVybZtbZubZvbUQaalaalaalaalaalaalaalaalaalaalaalbZwbPSbZxbZybZzbZAbZBbZCbHHbHHbHHbHHbZDbZEbZFbZGbZHbZIbZJbZKbZLbZMbZNbZObZPbZPbZPbZQbHHbHIbZRbADbZSbGKbGKbGKbXRbZTbZUbZVbXRbZWbHobFwbHpbYLcaabYLbYPbYPbXRbOGbVfbVXcabcacbVXbXicadbVfbVfbVfbVfbzvcaebzvbzvbzvcafbzvbzvbLcbzvbzvbzvbzvbLcbzvbzvbzvcagcahcaicajcakcakcakcakcakcalcambXAcancaocapbXBbXBbXBaalaalaalcaqaalaalaalcaqaalaalaalcaqaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaagaagaadaadaagaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUPbUQbVybVybYjcarcasbZpbZqbZrcatcarcarcarcarcaubUPaalaalaalaalbVAaalaalaalaalbVAaalaalbPScavbZycawcaxbURbZCbHHcaycazcaAcaBcaCcaDcaEcaFbXGcaGbXGcaHbXGbXGcaIcaJbXGbXGbXGbXGbHIcaKbADcaLbGKcaMcaNbXRcaObYLcaPbXRcaQbImbHqbYrcaUbXRbYLcaVbYPbXRbOGbVfbVfbVfbVfbVfbVfbVfbVfcaWcaXbNLbNLcaYbNLbNLbNLbNLbNLbNLcaYbNLbNLbNLbNLcaZcbacbacbacbacbbcbccbdcbecbecbecbecbecbecbebXAbXAbXAbXAbXBaalaalagiaalbTJcbfbTLaalbTJcbfbTLaalbTJcbfbTLaalagiagiagjaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaagaagaagaadaadaadaagaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUQbVybVybVybZtcbgcbgcbhbZqcbicbgcbgcbgcbgcbgcbjbUQaalaalaalaalaalaalaalaalaalaalaalaalbPScbkcblcblcbmbURcbnbHHbHHcbocbpcaBcaCbZFcbqcbrbXGcbscbtcbucbvcbwcbxbHHbXGcbycbzcbAbHIcbBbOhbTccbCcbDcbEbXRcaQcbFcbGcbHcbIbYvbYsbZXcbMbXRbXRbXRbXRbXRcbNcbObNLbNLbNLbNLbNLbNLbNLcaYcaZbzvcbPcbPcbPcbPcbPcbPcbPcbPcbPcbPcbPbGNcbQbGNcbacbRcbScbTcbUcbVcbWcbecbXcbYcbZccaccbcccccccbeaalaalaalaalaalagiaalbTJcbfbTLaalbTJcbfbTLaalbTJcbfbTLaalagiaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaagaagaagaadaadaadaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUQccdbVybVybVybZqbZqcceccfbZqbZqbZqbZqbZqbZqbZqccgaynaynaynaynaynaynaynaynaynaynaynayncchcciccjccjcckbURcclccmccnccnccnccnccoccpccqccrccscctccuccvccwcbwccxbSZccycczbSZccAccBccCbADbTcbGKccDccEbXRcaOccFccGccHccIccJccKbYLccLbXRccMccNccObXRccPccQbzvbBUccRccSbVSbzvbzvbzvbzvccTcbPccUccUccUccUccVccWccWccWccWcbPccXbzvccYcbaccZcdacdbcbRcdccddcdecdfcdgcdhcdhccbcccccccbeaalaalaalaalaalagiaalbTJcbfbTLaalbTJcbfbTLaalbTJcbfbTLaalagjaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaagaagaagaadaadaadaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUQccdbVybVybVybZqbZqcceccfbZqbZqbZqbZqbZqbZqbZqccgaynaynaynaynaynaynaynaynaynaynaynayncchcciccjccjcckbURcclccmccnccnccnccnccoccpccqccrccscctccuccvccwcbwccxbSZccycczbSZccAccBccCbADbTcbGKccDccEbXRcaOccFccGccHccIccJccKbYLccLbXRccMccNccObXRccPccQbzvbBUccRccSbVSbzvbzvbzvbzvccTcbPccUccUccUccUcieccWccWccWccWcbPccXbzvccYcbaccZcdacdbcbRcdccddcdecdfcdgcdhcdhccbcccccccbeaalaalaalaalaalagiaalbTJcbfbTLaalbTJcbfbTLaalbTJcbfbTLaalagjaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaagaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUQbVybVybVybYjcdicdicdjbZqcdkcdicdicdicdicdicdibUQaalaalaalaalaalaalaalaalcdlcdlcdlcdlbPSbURbURbURbURbURbXGbXGcdmbZFcaDbZFbZFbXGcdncbrbXGcdocdpcdqcdrcbwcdscdtcducdvcdwcdxbHIcdybADbTcbXRbXRbXRbXRbXRbXRbXRbXRbXRcdzcdAcdBcdCbXRcdDbXRcdEcbPcbPcdFcdGcbPcbPcbPcbPcbPcbPcbPcbPcbPcbPcdHcdIcdIcdJccVcdKcdLcdLcdMcbPccTbMIcdNcbacbRcdOcdPcdQcdQcdRcdScdTcdScdUcdhccbcccccccbeaalaalaalaalaalagiaalbTJcbfbTLaalbTJcbfbTLaalbTJcbfbTLaalagiaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUPbUQbVybVybZtbZubZvbZpbZqbZrcdVbZubZubZubZucdWbUPaalaalaalaalbVAaalaalaalcdlcdXcdXcdYcdXcdXcdZceaceaceacdZbSebHHcebceccedbHHceecefcbrbXGcaGcegcaGbXGbXGcehceibXGbXGcejbXGbHIcekbADbTZbXRcelcemcenceobXRbYLbYLcepceqbYMbYLcercesbYLbYLbYLcbPcetceuccVccVcevcewcexcexcexccVceycezceAccVccVccVceBccVceCccVccVceDcbPceEceEceEcbecbecbacbacbacbacbacbecbecbecbecbecbecbecbecbeaalaalaalaalaalagiaalbTJceFbTLaalbTJceFbTLaalbTJceFbTLaalagiaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUQbUQbVybVybVybZobZpbZqbZrbZsbVybVybYjcarcasbUQaabaalaalaalaalaalaalaalcdlceGceHceHceIceJceKceJceJceJceLceMceMceNceOcePceOceOceQceRceSceTceUceVceWceXceYbUZbXGceZcfacfbbHIbFHbADcfcbXRcfdbZUcbIcfecffcfgcbIcbIcfhcficfjcfkcflbZYbZYbZYcbPcfncfocfpcfpcfpcfqcfpcfpcfpcfpcfrcfscftcfpcfpcfpcfucfvcfwcfxcfyccVccVccVcfzcfAcfAcbPaalaalaalaalaalaalaynaalaalaalaalaalaalaalaalaalaalaalaalagjaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUQbUQbVybVybZtcfBbVybZtcfBbVybVybUQbUQbUQbUQaabaabaabaalaalaalaalaalcdlcfCcfCcfCcfDcfEcfEcfFcfGceGcdZbHHbHHcfHcdtcfIcfJbZPcfIbZPcfKcfLcfMcfNbZPbTXbZPbZQbXGcfacfacfbbHIbFHbADbFIcdBbYLbYLcfOccGcfPccGccGccGcfQcfRbYLcfScfTbZYcaRbZZcbPcfWcfXccVccVccVccVccVccVccVccVcfYcfpcfZccVccVccVcgacgbccVccVcgcccVccVccVcgdcfAcfAcbPaalcbPcbPcbPcbPcbPaalcgeaalaalaalaalaalaalaalaalaalaalaalaalaalagiagiagjaalagiagiagiagiagiagiagiagiaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUQbUQbVybVybVybVybVybVybVybUQbUQaabaabaabaabaabaabaabaabaabbqLbqLcdlcdlcdlcdlcggcdlcdlcdlcdlcdlcdlcghcaGcgicaHcghbHIbHIbHIbHIbHIbHIcgjcgkbHHbUZcglcgmbXGceZcgncfbbHIcgobADcgpcgqcgrcaScaTcaScbJcaScaScaScbKcaScaScbLbZYbZYcfUcfmcbPcgzcgAcgBcgCcgCcgCcgCcgCcgCcgCcgCcgDcgCcgCcgCcgCcdIcgCcgCcgCcgEcgCcgCcgCcgFcgGcgHcgIcgJcgIcgKcgLcgLcbPaalagjaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUQbUQbVybVybVybVybVybUQbUQaabaabaabaabaabaabaabaabaabaabbqLcgMcgNcgNcgNbqLcgOcgPcgQcgRcgRcgScgTcgUcgVcgWcgXcgYcgZchachbchbchbcgPcggchcchdchechdchdchfchfchfchfchfbFHchgchhchibYLbZYcfVbZYcgfbZYbZYbZYcgtcgsbZYbZYbZYbZYcgvcgucbPccVcfXcgachpchqchqchqchqchqchqchqcgachrchqchqchqchqchqchqchqchschqccVccVccVchtcfAchuaalchuchvcgLcgLchwaalagjaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUQbUQbVychxbVybUQbUQaabaabaabaabaabaabaabaabaabaabaabbqLchychzchzchzbqLbrucgPchAchBchbchCchDchEchFchGchHchIchJchKchbchbchLcgPbFBchcchMchNchOchdchPchQchRchRchfbBOchSchTchUcgrcgrchVcgrchUchWbYLbYLchXcflbYLchYcflbZYcaRbZZcbPccVcfXcgachZchqciacibciccidcidchqciecifchqcigcihciicijcikcikcilchqcimcinciocipciqcirciscircitcgLcgLcbPaalagiaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUPbUQbUQbUQbUPaabaabaabaabaabaabaabaabaabaabaabaabbqLciucivciwchzbPPbrucgPchbchbchbcixciycizcgVciAcgXciBciCciDcgRcgRciEcgPbFBchcciFciGciHciIciIciJciKciLciMciNciObFIbXRbZTbYLciPciQbXRciRbYLbYLciSciTciUciVcfTbZYbZYbZYcbPccVcfXcgaccVccVciWciXciYciYciZccVcgacjachqcjbccVccVccVccVccVcjcchqcjdccVcjecfAcfAcbPaalcbPcbPcbPcbPcbPaalcjfaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaabaabbqLbqLbqLbqLbqLbqLbqLcjgcjhchzchzbqLbrucgPcjicjicjicjicjicjjcgVcjkcgXcjlcjicjicjicjicjicgPbFBchccjmchNcjncjocjpcjqcjrcjschfbBObADchTcjtcjucjvcjvceobXRcjwbYLcjxceqcjybYLcjxcjzbYLbYLbYLcbPcjAcfXcgacjBcjCciZccVccVccVciWcjCcjDcjacjEcjFccVccVccVccVccVcjGcjEcjdccVcjHcfAcfAcbPaalaalaalaalaalaalaalagiaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabbqLbqLbqLbqLcjIcjJcjKbrubrubqLcjLcgNcgNcgNbqLbrucgPcgQcgRcgRcjMcjNcizcgVcgVcgXciBcjOcjPchbchbchbcgPbFBchccjQcjRciHcjSchdcjTcjUcjVchfcjWcjXcjYbXRbXRbXRbXRbXRbXRbXRbXRbXRbXSbXRbXRcbPcbPcbPcbPcbPcbPccVcfXcgacgcccVciWcjZcjZcjZciZccVccVcjachuckackbccVckcccVccVckdchqcjdccVckecfAcfAcbPaalcbPcbPcbPcbPcbPaalagiaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabbqLckfckgbqLckhbruckhckickhbqLbqLbqLbqLbqLbqLbrucgPchAchBchbckjchDckkcgVcklcgXckmchJcknchbchbchLcgPbFBckockpckqckrckschdcjUcjUcktchfckuckvckwckxckyckyckyckzckAckBckCckDckEckFckGckHckIckJckKckLckMckNckOckPcgcchqckQckQckRckQckQchqccVcjachuckSckTccVccVccVccVckUchqckVckWckXckYciqcirciscirckZclaclacbPaalagiaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbqLbKRclbclccldclebKRclfclgclhclicljbqLbrubrubrucgPchbchbchbclkcllcizcgVclmcgXciBciCclncgRcgRciEcgPbFBchdcloclocloclpchdcjUclqclrclscltcluclvclwclwclwclwclwclwclwclwclxclyclzclAclBclCclDclEclFclGclDclHclIcgcchqchqchqchqchqchqchqccVcjachuclJclKccVccVccVclLclMchqclNccVclOclPcfAchuaalchuclQclaclRcbPaalcjfaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbqLbqLbqLbqLbruckhbKRclSclTckhclUbrubqLbrucgPcgPcgPcgPcgPcgPcgPcgPcizcgVclVcgXciBcjicjicjicjicjicgPbFBchdclWclWclWclWchdclXclYclZchfcmacmbcmccmdcmecmecmecmecmecmecmecmdcmfcmgcmhcbPcmicmjcmkcmlchqcjacfocfxcmmchqcmncmocmocmocmpchqcmqcmrcmscmtcmucmvcmkcmkcmkcmwchqcjdccVcmxcmycmzcmAcmBcmAcmCclaclacbPaalagiaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbqLcmDcmEcmFckickibKRcjJbrucmGcmHcmIbqLbrucgPchbchbcmJchbcgPcmKcmLcmMcgVcmNcmOciBcmPcmQchbchbchbcgPbFBchdcmRclWcmSclWchdchfchfchfchfcmTcmUcmVcmeaabaalaalaalaalaalaabcmecmfcmWcmXcmYcmZcnacnbcncchqcndclHcnecnecnecnecnecnecnecnecnecnecnfchqchuchuchucjEchuchuchqchqcjdccVckecfAcfAcbPaalcbPcbPcbPcbPcbPaalcgeaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbqLcngcnhbqLbruckiclTbruclTcnicjKbKRbqLbrucgPchbchbchbchbcgPcnjcnkcnlcnmcnncnocnpchJcnqchbchbchLcgPbFBchdchdchdchdchdchdbrucnrcnscntcnucnvcmccmeaabaabaalaalaalaalaalcmecnwcnxcnycnzcnAcnBcnCcnDchqccVcnEcfxcnFcnGcincincincincinciocincincincincinciocincincincincincnHccVcjHcfAcfAcbPaalaalaalaalaalaalaalagiaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbqLbqLbqLbqLckickhcleckhckicnIcnJbrubPPbrucgPcnKchbcnLcnMcnNcnOcnPcnQcnRcnScnTcnUciCcnVcgRcgRciEcgPbEFbHCbHCbHCbHCbHCcnWbHCcnXcnYcmdcnZckvcmccoacmecmecmecmecmecmecmecmdcnwcnxcobcocccVccVccVcodcoecfxcgAccVccVcofccVccVccVccVccVcofccVccVccVccVccVcofccVccVccVccVccVcofccVckecfAcfAcbPaalagiagjcgeagiagicjfagiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUPbUQbVybVybZtbZubZvbZpbZqbZrcdVbZubZubZubZucdWbUPaalaalaalaalbVAaalaalaalcdlcdXcdXcdYcdXcdXcdZceaceaceacdZbSebHHcebceccedbHHceecefcbrbXGcaGcegcaGbXGbXGcehceibXGbXGcejbXGbHIcekbADbTZbXRcelcemcenceobXRbYLbYLcepceqbYMbYLcercesbYLbYLbYLcbPcetceuccVciecevcewcexcexcexccVceycezceAccVccVccVceBccVceCccVccVceDcbPceEceEceEcbecbecbacbacbacbacbacbecbecbecbecbecbecbecbecbeaalaalaalaalaalagiaalbTJceFbTLaalbTJceFbTLaalbTJceFbTLaalagiaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUQbUQbVybVybVybZobZpbZqbZrbZsbVybVybYjcarcasbUQaabaalaalaalaalaalaalaalcdlceGceHceHceIceJceKceJceJceJceLceMceMceNceOcePceOceOceQceRceSceTceUceVceWceXceYbUZbXGceZcfacfbbHIbFHbADcfcbXRcfdbZUcbIcfecffcfgcbIcbIcfhcficfjcfkcflbZYbZYbZYcbPcfncfocfpcfpcfpcfqcfpcfpcfpcfpcfrcfscftcfpcfpcfpcihcilcdLcfpcfrccVccVccVcfzcfAcjBcbPaalaalaalaalaalaalaynaalaalaalaalaalaalaalaalaalaalaalaalagjaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUQbUQbVybVybZtcfBbVybZtcfBbVybVybUQbUQbUQbUQaabaabaabaalaalaalaalaalcdlcfCcfCcfCcfDcfEcfEcfFcfGceGcdZbHHbHHcfHcdtcfIcfJbZPcfIbZPcfKcfLcfMcfNbZPbTXbZPbZQbXGcfacfacfbbHIbFHbADbFIcdBbYLbYLcfOccGcfPccGccGccGcfQcfRbYLcfScfTbZYcaRbZZcbPcfWcfXccVccVccVccVccVccVccVccVcfYcfpcfZccVccVccVcjDcgbccVccVcfXccVccVccVcgdcfAcfAcbPaalcbPcbPcbPcbPcbPaalcgeaalaalaalaalaalaalaalaalaalaalaalaalaalagiagiagjaalagiagiagiagiagiagiagiagiaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUQbUQbVybVybVybVybVybVybVybUQbUQaabaabaabaabaabaabaabaabaabbqLbqLcdlcdlcdlcdlcggcdlcdlcdlcdlcdlcdlcghcaGcgicaHcghbHIbHIbHIbHIbHIbHIcgjcgkbHHbUZcglcgmbXGceZcgncfbbHIcgobADcgpcgqcgrcaScaTcaScbJcaScaScaScbKcaScaScbLbZYbZYcfUcfmcbPcgzckOckNckPckPckPckPckPckPckPckPcgDckPckPckPckPcdIckPckPckPclIckPckPckPcgFcgGcgHcgIcgJcgIcgKcgLcgLcbPaalagjaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUQbUQbVybVybVybVybVybUQbUQaabaabaabaabaabaabaabaabaabaabbqLcgMcgNcgNcgNbqLcgOcgPcgQcgRcgRcgScgTcgUcgVcgWcgXcgYcgZchachbchbchbcgPcggchcchdchechdchdchfchfchfchfchfbFHchgchhchibYLbZYcfVbZYcgfbZYbZYbZYcgtcgsbZYbZYbZYbZYcgvcgucbPccVcfXcjDchpchqchqchqchqchqchqchqcjDchrchqchqchqchqchqchqchqcmlchqcmmccVccVchtcfAchuaalchuchvcgLcgLchwaalagjaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUQbUQbVychxbVybUQbUQaabaabaabaabaabaabaabaabaabaabaabbqLchychzchzchzbqLbrucgPchAchBchbchCchDchEchFchGchHchIchJchKchbchbchLcgPbFBchcchMchNchOchdchPchQchRchRchfbBOchSchTchUcgrcgrchVcgrchUchWbYLbYLchXcflbYLchYcflbZYcaRbZZcbPccVcfXcjDchZchqciacibciccidcidchqcjDcifchqcigcmvciicijcikcmXcmwchqcimcinciocipciqcirciscircitcgLcgLcbPaalagiaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbUPbUQbUQbUQbUPaabaabaabaabaabaabaabaabaabaabaabaabbqLciucivciwchzbPPbrucgPchbchbchbcixciycizcgVciAcgXciBciCciDcgRcgRciEcgPbFBchcciFciGciHciIciIciJciKciLciMciNciObFIbXRbZTbYLciPciQbXRciRbYLbYLciSciTciUciVcfTbZYbZYbZYcbPcmmcfXcjDccVccVciWciXciYciYciZciecjDcjachqcjbccVccVccVccVccVcjcchqcjdccVcjecfAcfAcbPaalcbPcbPcbPcbPcbPaalcjfaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaabaabbqLbqLbqLbqLbqLbqLbqLcjgcjhchzchzbqLbrucgPcjicjicjicjicjicjjcgVcjkcgXcjlcjicjicjicjicjicgPbFBchccjmchNcjncjocjpcjqcjrcjschfbBObADchTcjtcjucjvcjvceobXRcjwbYLcjxceqcjybYLcjxcjzbYLbYLbYLcbPcjAcfXcjDcnycjCciZccVccVccVciWcjCcnBcjacjEcjFccVccVccVccVccVcjGcjEcjdccVcjHcfAcjBcbPaalaalaalaalaalaalaalagiaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabbqLbqLbqLbqLcjIcjJcjKbrubrubqLcjLcgNcgNcgNbqLbrucgPcgQcgRcgRcjMcjNcizcgVcgVcgXciBcjOcjPchbchbchbcgPbFBchccjQcjRciHcjSchdcjTcjUcjVchfcjWcjXcjYbXRbXRbXRbXRbXRbXRbXRbXRbXRbXSbXRbXRcbPcbPcbPcbPcbPcbPccVcfXcjDcfXccVciWcjZcjZcjZciZccVccVcjachuckackbccVckcccVccVckdchqcjdccVckecfAcfAcbPaalcbPcbPcbPcbPcbPaalagiaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabbqLckfckgbqLckhbruckhckickhbqLbqLbqLbqLbqLbqLbrucgPchAchBchbckjchDckkcgVcklcgXckmchJcknchbchbchLcgPbFBckockpckqckrckschdcjUcjUcktchfckuckvckwckxckyckyckyckzckAckBckCckDckEckFckGckHckIckJckKckLckMckPclIcnEcfXchqckQckQckRckQckQchqccVcjachuckSckTccVccVccVccVckUchqckVckWckXckYciqcirciscirckZclaclacbPaalagiaalaalaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbqLbKRclbclccldclebKRclfclgclhclicljbqLbrubrubrucgPchbchbchbclkcllcizcgVclmcgXciBciCclncgRcgRciEcgPbFBchdcloclocloclpchdcjUclqclrclscltcluclvclwclwclwclwclwclwclwclwclxclyclzclAclBclCclDclEclFclGclDclHcobcfXchqchqchqchqchqchqchqccVcjachuclJclKccVccVccVclLclMchqclNccVclOclPcfAchuaalchuclQclaclRcbPaalcjfaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbqLbqLbqLbqLbruckhbKRclSclTckhclUbrubqLbrucgPcgPcgPcgPcgPcgPcgPcgPcizcgVclVcgXciBcjicjicjicjicjicgPbFBchdclWclWclWclWchdclXclYclZchfcmacmbcmccmdcmecmecmecmecmecmecmecmdcmfcmgcmhcbPcmicmjcoecodcqkcjacfocfpcfZchqcmncmocmocmocmpchqcmqcmrcmscmtcmucqJcmkcmkcmkcqLchqcqUccVcmxcmycmzcmAcmBcmAcmCclaclacbPaalagiaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbqLcmDcmEcmFckickibKRcjJbrucmGcmHcmIbqLbrucgPchbchbcmJchbcgPcmKcmLcmMcgVcmNcmOciBcmPcmQchbchbchbcgPbFBchdcmRclWcmSclWchdchfchfchfchfcmTcmUcmVcmeaabaalaalaalaalaalaabcmecmfcmWcmYcmYcmZcnacnbcncchscndclHcnecnecqVcnecnecnecnecnecqVcnecnfchqchuchuchucjEchuchuchqchqcjdccVckecfAcfAcbPaalcbPcbPcbPcbPcbPaalcgeaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbqLcngcnhbqLbruckiclTbruclTcnicjKbKRbqLbrucgPchbchbchbchbcgPcnjcnkcnlcnmcnncnocnpchJcnqchbchbchLcgPbFBchdchdchdchdchdchdbrucnrcnscntcnucnvcmccmeaabaabaalaalaalaalaalcmecnwcnxcrscnzcnAcrIcnCcnDchsccVcfocfpcnFcnGcincincincincinciocincincincincinciocincincincrOcincnHccVcjHcfAcjBcbPaalaalaalaalaalaalaalagiaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbqLbqLbqLbqLckickhcleckhckicnIcnJbrubPPbrucgPcnKchbcnLcnMcnNcnOcnPcnQcnRcnScnTcnUciCcnVcgRcgRciEcgPbEFbHCbHCbHCbHCbHCcnWbHCcnXcnYcmdcnZckvcmccoacmecmecmecmecmecmecmecmdcnwcnxcrPcocccVccVccVcrQcrRcfpckOccVccVcofccVccVccVccVccVcofccVccVccVccVccVcofccVccVccVccVccVcofccVckecfAcfAcbPaalagiagjcgeagiagicjfagiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbqLcogcohcoiclebrubruckiclScojcokcolbqLbrucgPcomconcoochbchbcopcoqcorcoscotcgVcoucjicgPcgPcgPcgPcgPbrucmdcmdcmdcmdcmdcmdcmdcmdcmdcovcowcoxcoycozcoAcoBcoCcoDcoEcoFcoGcoHcoIcoJcoKcoLcoMcoNcoMcoOchqcoPcoQcoRcoScoTcoUcoVcoUcoWcoScoTcoUcoVcoUcoXcoScoTcoUcoVcoUcoYcoScoTcoUcoZcfAcfAcbPcpacbPcbPaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabbqLbqLbqLbqLbqLbqLbqLcpbcpbbqLbqLbqLbqLbrucgPchbcpcchbchbcpdcpecpfcpgcphcpicpjcpkcgPbDzbuPbuPcplbrubrucmdcpmcpncpocppcpqcprcpscptcpucpvckvcpwcpwcnxcpwcpwcpwcpxcnxcpycpycpzcpAcbPchuchucbPcbPcbPcbPcfAcfAcpBcpCcpDcfAcfAcfAcpBcpEcpDcfAcfAcfAcpBcpFcpDcfAcfAcfAcpBcpGcpHcfAcfAcfAcfAcbPcpIcpJcbPaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaalaalaalaalaalcpKcpLcpLcpLcpLbrucgPchbchbchbchbcgPcpMcpNcpOcpPcgPcgPcgPcgPbxObqLcpQcpRbuPbuPcpScpTcpUcpVcpUcpUcpUcpUcpUcpUcpUcpWcpXcpYcpYcpYcpYcpYcpZcpYcpYcpYcqacqbchqaaaaaaaaaaaaaaacbPcfAcfAcqccfAcqdcqecfAcfAcqccfAcqdcfAcfAcfAcqccfAcqdcfAcfAcfAcqccfAcqdcqfcfAcfAcfAcpacqgcqhcbPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaabaalaalaalcpKcpKcpKcqicqjcqkcqlbrucgPchbchbcqmchbcgPcqncqocqpcqqcgPbDzbuPbuPbuQbqLbqLbqLbrubrucmdcqrcnxcqscpycpycnxcnxcpwcpwcpwcqtcqucpwcnxcpwcpwcpwcqscnxcpycpycnxcqbchqaaaaaaaaaaaaaaacbPcbPcbPcqvchucqwcbPcbPcbPcqvchucqwcbPcbPcbPcqvchucqwcbPcbPcbPcqvchucqwcbPcbPcbPcbPcbPcbPcbPcbPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaalcqxcqxcqxcqycqzcqAcqzcqBcqCcqDcqEcplcgPcgPcgPcgPcgPcgPcgPcgPcgPcgPcgPbxObqLbqLbqLbqLaabbqLcqFbrucmdcqGcqHcqIcqHcqHcqJcqKcnxcnxcnxcnxcnxcnxcnxcqLcqJcqMcqNcqHcqHcqIcqHcqKchqaaaaaaaaaaaaaaaaakaakaakcqOaakcqPaakaakaakcqOaakcqPaakaakaakcqOaakcqPaakaakaakcqOaakcqPaakajQaakaaaaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaalaalaalaalaalaalaalaalaalaalcqxaalaalaalcpKcpKcpKcqQcqRcqScpLcpRbuPbuPbuPbuPbuPbuPbuPbuPbuPbuPbuPbuQbqLaabaabaabaabbqLcpbcpbcmdcmdcqTcmdcmdcmdcmdcqUcqHcqHcqHcqHcqHcqHcqHcqVcmdcmdcmdcmdcqWcmdcmdcmdchqaaaaaaaaaaaaaaaaNtaakcbPcqvchucqwcbPcqXcbPcqvchucqwcbPcqXcbPcqvchucqwcbPcqXcbPcqvchucqwcbPaakaNtajQaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaalaalaalaalagiagiagiagjagiaalcqxaalaalaalaalaalcpKcpLcpLcpLcpLcqYbrubrubrubrubrubrubrubrubrubrubrubrubqLaabaaaaaaaaaaaaaaaaaaaaacqZcracrbaaaaaacmdcrccqTcrccrccrccrccrccqTcrdcmdaaaaaacqZcracrbaaaaaaaaaaakajQaakaakaakaakaakcbPcrecrfcrgcbPaakcbPcrhcricrjcbPcqXcbPcrkcrlcrmcbPcqXcbPcrncrocrpcbPaakaNtaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaalaalaalaalaalaalaalaalaalaalaalcqxaalaalaalaalaalaalaalagjaalbqLbqLbqLbqLbqLbqLbqLbqLbqLbqLbqLbqLbqLbqLbqLaaaaaaaaaaaaaaaaaaaaaaaacrqcqTcrraaaaaaaaacmecrscmeaakaakaakcmecrscmeaaaaaaaaacrqcqTcrraaaaaaaaaaaaaakajQajQaakaNtaakcbPcrtcrtcrtcbPaakcbPcrucrucrucbPcqXcbPcrvcrvcrvcbPcqXcbPcrwcrwcrwcbPaakajQaaaajQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaalaalaalagiaalcrxcrxcrxcrxcrxaalcqxaalcrxcrxcrxcrxcrxaalagiaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqZcracrbaakaakaakcqZcracrbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaaaaakaaaajQaakcbPcrtcrycrtcbPaakcbPcrucrzcrucbPaakcbPcrvcrAcrvcbPaakcbPcrwcrBcrwcbPaakaakaakajQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaalaalaalaalagjaalcrCcrDcrDcrDcrDcrEcqxcqycrFcrFcrFcrFcrGaalagiaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrqcqTcrraakaakaakcrqcqTcrraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajQaaaaaaaaaaTgaakcbPcbPcbPcbPcbPaakcbPcbPcbPcbPcbPaakcbPcbPcbPcbPcbPaakcbPcbPcbPcbPcbPaakaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaalaalaalaalaalaalagiaalcrHcrHcrHcrHcrHaalcqxaalcrHcrHcrHcrHcrHaalagiaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrJaakaakaakaakaakaakaakaakaakaakaakaakaakaakaakaakaakaakaakaakaakaakaakaakcrJaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaalaalaalaalaalcpKcpLcpLcpLcpLbrucgPchbchbchbchbcgPcpMcpNcpOcpPcgPcgPcgPcgPbxObqLcpQcpRbuPbuPcpScpTcpUcpVcpUcpUcpUcpUcpUcpUcpUcpWcpXcpYcpYcpYcpYcpYcpZcpYcpYcpYcqacqbcmdaaaaaaaaaaaaaaacbPcrScfAcqccfAcqdcqecrScfAcqccfAcqdcfAcrScfAcqccfAcqdcfAcrScfAcqccfAcqdcqfcfAcrScfAcpacqgcqhcbPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaabaalaalaalcpKcpKcpKcqicqjcrTcqlbrucgPchbchbcqmchbcgPcqncqocqpcqqcgPbDzbuPbuPbuQbqLbqLbqLbrubrucmdcqrcnxcqscpycpycnxcnxcpwcpwcpwcqtcqucpwcnxcpwcpwcpwcqscnxcpycpycnxcqbcmdaaaaaaaaaaaaaaacbPcbPcbPcqvchucqwcbPcbPcbPcqvchucqwcbPcbPcbPcqvchucqwcbPcbPcbPcqvchucqwcbPcbPcbPcbPcbPcbPcbPcbPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaabaabaabaabaabaalcqxcqxcqxcqycqzcqAcqzcqBcqCcqDcqEcplcgPcgPcgPcgPcgPcgPcgPcgPcgPcgPcgPbxObqLbqLbqLbqLaabbqLcqFbrucmdcqGcqHcqIcqHcqHcrUcqHcqHcqHcqHcqHcqHcqHcqHcqHcrUcqMcqNcqHcqHcqIcqHcqKcmdaaaaaaaaaaaaaaaaakaakaakcqOaakcqPaakaakaakcqOaakcqPaakaakaakcqOaakcqPaakaakaakcqOaakcqPaakajQaakaaaaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaalaalaalaalaalaalaalaalaalaalcqxaalaalaalcpKcpKcpKcqQcqRcqScpLcpRbuPbuPbuPbuPbuPbuPbuPbuPbuPbuPbuPbuQbqLaabaabaabaabbqLcpbcpbcmdcmdcqTcmdcmdcmdcmdcrccqTcrccrccrccrccrccqTcrdcmdcmdcmdcmdcqWcmdcmdcmdcmdaaaaaaaaaaaaaaaaNtaakcbPcqvchucqwcbPcqXcbPcqvchucqwcbPcqXcbPcqvchucqwcbPcqXcbPcqvchucqwcbPaakaNtajQaaaaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaalaalaalaalagiagiagiagjagiaalcqxaalaalaalaalaalcpKcpLcpLcpLcpLcqYbrubrubrubrubrubrubrubrubrubrubrubrubqLaabaaaaaaaaaaaaaaaaaaaaacqZcracrbaaaaaaaaacqZcracrbaakaakaakcqZcracrbaaaaaaaaacqZcracrbaaaaaaaaaaakajQaakaakaakaakaakcbPcrecrfcrgcbPaakcbPcrhcricrjcbPcqXcbPcrkcrlcrmcbPcqXcbPcrncrocrpcbPaakaNtaakaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaalaalaalaalaalaalaalaalaalaalaalcqxaalaalaalaalaalaalaalagjaalbqLbqLbqLbqLbqLbqLbqLbqLbqLbqLbqLbqLbqLbqLbqLaaaaaaaaaaaaaaaaaaaaaaaacrqcqTcrraaaaaaaaacrqcqTcrraakaakaakcrqcqTcrraaaaaaaaacrqcqTcrraaaaaaaaaaaaaakajQajQaakaNtaakcbPcrtcrtcrtcbPaakcbPcrucrucrucbPcqXcbPcrvcrvcrvcbPcqXcbPcrwcrwcrwcbPaakajQaaaajQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaalaalaalagiaalcrxcrxcrxcrxcrxaalcqxaalcrxcrxcrxcrxcrxaalagiaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakaaaaakaaaajQaakcbPcrtcrycrtcbPaakcbPcrucrzcrucbPaakcbPcrvcrAcrvcbPaakcbPcrwcrBcrwcbPaakaakaakajQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaalaalaalaalagjaalcrCcrDcrDcrDcrDcrEcqxcqycrFcrFcrFcrFcrGaalagiaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajQaaaaaaaaaaTgaakcbPcbPcbPcbPcbPaakcbPcbPcbPcbPcbPaakcbPcbPcbPcbPcbPaakcbPcbPcbPcbPcbPaakaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaabaalaalaalaalaalaalagiaalcrHcrHcrHcrHcrHaalcqxaalcrHcrHcrHcrHcrHaalagiaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrJaakaakaakaakaakaakaakaakaakaakaakaakaakaakaakaakaakaakaakaakaakaakaakaakcrJaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaabaalaalaalaalaalaalaalaalaalagiaalaalaalaalaalaalaalcqxaalaalaalaalaalaalaalaalaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrJaNtaakajQcrJaakaNtcrJcrJaNtaakaNtaakcrKcrJcrJaNtcrJaNtaNtajQaNtcrJaakaNtaakaNtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaabaalaalaalaalaalaalaalaalaalaalaalagiaalcrxcrxcrxcrxcrxaalcqxaalcrxcrxcrxcrxcrxaalagiaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaadaadaadaadaadaadaadaadaadaadaadaadaabaabaabaalaalaalaalaalaalaalaalaalaalaalaalaalagiaalcrCcrDcrDcrDcrDcrEcqxcqycrFcrFcrFcrFcrGaalagiaalaalaalaalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/AsteroidStation/readme.dm b/_maps/map_files/AsteroidStation/readme.dm deleted file mode 100644 index 809ba633d38..00000000000 --- a/_maps/map_files/AsteroidStation/readme.dm +++ /dev/null @@ -1,6 +0,0 @@ -/* - The contents of these files should not be ticked/included while compiling. - - These files are only included, and compiled, when \_maps\Asteroidstation.dm is included; as these files are necessary to run Asteroidstation. - You do not have to tick them yourself, it will be automatically done by the asteroidstation.dm file. -*/ \ No newline at end of file diff --git a/_maps/map_files/AsteroidStation/z2.dmm b/_maps/map_files/AsteroidStation/z2.dmm index 87437c35cfc..d624a944e99 100644 --- a/_maps/map_files/AsteroidStation/z2.dmm +++ b/_maps/map_files/AsteroidStation/z2.dmm @@ -160,7 +160,7 @@ "dd" = (/turf/simulated/floor/plating,/turf/simulated/wall/shuttle{icon_state = "swall_f6"; dir = 2},/area/centcom/evac) "de" = (/turf/simulated/floor/plasteel/shuttle,/turf/simulated/wall/shuttle{icon_state = "swall_f9"; dir = 2},/area/centcom/evac) "df" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel/shuttle,/area/centcom/evac) -"dg" = (/turf/simulated/floor/plasteel/shuttle{icon_state = "floor2"},/area/centcom/evac) +"dg" = (/obj/machinery/door/airlock/shuttle,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/centcom/evac) "dh" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/toxin{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/toxin,/turf/simulated/floor/plasteel/shuttle,/area/centcom/evac) "di" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/fire{pixel_x = -2; pixel_y = 4},/turf/simulated/floor/plasteel/shuttle,/area/centcom/evac) "dj" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 0},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/turf/simulated/floor/plasteel/shuttle,/area/centcom/evac) @@ -183,33 +183,33 @@ "dA" = (/obj/machinery/flasher_button{id = "tdomeflash"; pixel_x = 0; pixel_y = 0},/obj/structure/table,/turf/simulated/floor/plasteel/redyellow,/area/tdome/tdomeadmin) "dB" = (/turf/simulated/wall/shuttle{icon_state = "swall12"; dir = 2},/area/centcom/evac) "dC" = (/turf/simulated/wall/shuttle{icon_state = "swallc1"; dir = 2},/area/centcom/evac) -"dD" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/centcom/evac) -"dE" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/fancy/donut_box,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/centcom/evac) -"dF" = (/obj/structure/table/reinforced,/obj/item/weapon/pen,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/centcom/evac) -"dG" = (/obj/structure/table/reinforced,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/centcom/evac) -"dH" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 8},/turf/simulated/floor/plasteel/shuttle,/area/centcom/evac) +"dD" = (/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/centcom/evac) +"dE" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/fancy/donut_box,/turf/simulated/floor/plasteel/shuttle,/area/centcom/evac) +"dF" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/turf/simulated/floor/plasteel/shuttle,/area/centcom/evac) +"dG" = (/obj/structure/table/reinforced,/turf/simulated/floor/plasteel/shuttle,/area/centcom/evac) +"dH" = (/obj/structure/table/reinforced,/obj/item/weapon/pen,/turf/simulated/floor/plasteel/shuttle,/area/centcom/evac) "dI" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plasteel/shuttle,/area/centcom/evac) "dJ" = (/turf/simulated/wall/shuttle{icon_state = "swallc2"; dir = 2},/area/centcom/evac) "dK" = (/turf/indestructible/riveted,/area/tdome/tdomeadmin) "dL" = (/obj/machinery/computer/security/telescreen{pixel_y = -32},/turf/simulated/floor/plasteel/redyellow,/area/tdome/tdomeadmin) "dM" = (/turf/simulated/floor/plasteel,/area/tdome/tdomeadmin) -"dN" = (/obj/machinery/computer/secure_data,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/centcom/evac) -"dO" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/centcom/evac) -"dP" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/centcom/evac) -"dQ" = (/obj/structure/table/reinforced,/obj/item/weapon/clipboard,/obj/item/weapon/stamp,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/centcom/evac) +"dN" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plasteel/shuttle,/area/centcom/evac) +"dO" = (/obj/machinery/computer/secure_data,/turf/simulated/floor/plasteel/shuttle,/area/centcom/evac) +"dP" = (/obj/structure/table/reinforced,/obj/item/weapon/clipboard,/obj/item/weapon/stamp,/turf/simulated/floor/plasteel/shuttle,/area/centcom/evac) +"dQ" = (/obj/structure/table,/obj/item/device/flash/handheld,/turf/simulated/floor/plasteel/shuttle,/area/centcom/evac) "dR" = (/turf/indestructible/fakedoor{name = "Thunderdome Admin"},/area/tdome/tdomeadmin) "dS" = (/obj/structure/table,/obj/machinery/door_control{id = "thunderdomehea"; name = "Heavy Supply Control"; pixel_y = 0; req_access_txt = "102"},/turf/simulated/floor/plasteel,/area/tdome/tdomeadmin) "dT" = (/obj/structure/table,/obj/machinery/door_control{id = "thunderdome"; name = "Main Blast Doors Control"; pixel_y = 0; req_access_txt = "102"},/turf/simulated/floor/plasteel,/area/tdome/tdomeadmin) "dU" = (/obj/structure/table,/obj/machinery/door_control{id = "thunderdomegen"; name = "General Supply Control"; pixel_y = 0; req_access_txt = "102"},/turf/simulated/floor/plasteel,/area/tdome/tdomeadmin) -"dV" = (/obj/structure/table,/obj/item/device/flash/handheld,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/centcom/evac) -"dW" = (/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/centcom/evac) +"dV" = (/obj/structure/table,/obj/item/weapon/storage/box/handcuffs,/turf/simulated/floor/plasteel/shuttle,/area/centcom/evac) +"dW" = (/obj/machinery/door/window/northright{base_state = "right"; dir = 4; icon_state = "right"; name = "Security Desk"; req_access_txt = "103"},/turf/simulated/floor/plasteel/shuttle,/area/centcom/evac) "dX" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plasteel/shuttle,/area/centcom/evac) -"dY" = (/obj/structure/table,/obj/item/weapon/storage/box/handcuffs,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/centcom/evac) -"dZ" = (/obj/machinery/door/window/northright{base_state = "right"; dir = 4; icon_state = "right"; name = "Security Desk"; req_access_txt = "103"},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/centcom/evac) +"dY" = (/obj/structure/stool/bed,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/centcom/evac) +"dZ" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 8},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/centcom/evac) "ea" = (/obj/docking_port/stationary{dir = 4; dwidth = 1; height = 4; id = "pod3_away"; name = "recovery ship"; width = 3},/turf/space,/area/space) "eb" = (/turf/indestructible/riveted,/area/centcom/ferry) "ec" = (/turf/indestructible/fakedoor,/area/centcom/ferry) -"ed" = (/obj/structure/stool/bed,/turf/simulated/floor/plasteel/shuttle,/area/centcom/evac) +"ed" = (/obj/machinery/door/airlock/shuttle{name = "Cockpit"; req_access_txt = "109"},/turf/simulated/floor/plasteel/shuttle,/area/centcom/evac) "ee" = (/obj/structure/grille,/obj/structure/window/shuttle,/turf/simulated/floor/plating,/area/centcom/evac) "ef" = (/obj/machinery/vending/coffee,/turf/simulated/floor/plasteel/black,/area/centcom/ferry) "eg" = (/obj/machinery/vending/cigarette{products = list(/obj/item/weapon/storage/fancy/cigarettes/cigpack_syndicate = 7, /obj/item/weapon/storage/fancy/cigarettes/cigpack_uplift = 3, /obj/item/weapon/storage/fancy/cigarettes/cigpack_robust = 2, /obj/item/weapon/storage/fancy/cigarettes/cigpack_carp = 3, /obj/item/weapon/storage/fancy/cigarettes/cigpack_midori = 1, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/storage/fancy/rollingpapers = 5)},/turf/simulated/floor/plasteel/black,/area/centcom/ferry) @@ -217,7 +217,7 @@ "ei" = (/turf/simulated/floor/plasteel/black,/area/centcom/ferry) "ej" = (/obj/structure/flora/kirbyplants,/turf/simulated/floor/plasteel/black,/area/centcom/ferry) "ek" = (/obj/structure/stool/bed/chair/office/dark,/obj/effect/landmark{name = "Emergencyresponseteam"},/turf/simulated/floor/plasteel/black,/area/centcom/ferry) -"el" = (/obj/machinery/door/airlock/shuttle,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor2"},/area/centcom/evac) +"el" = (/turf/simulated/wall/shuttle{icon_state = "swall14"; dir = 2},/area/shuttle/supply) "em" = (/obj/docking_port/stationary{dir = 4; dwidth = 1; height = 4; id = "pod4_away"; name = "recovery ship"; width = 3},/turf/space,/area/space) "en" = (/obj/structure/table/reinforced,/turf/simulated/floor/vault,/area/centcom/ferry) "eo" = (/obj/structure/stool/bed/chair/office/dark{dir = 8},/obj/effect/landmark{name = "Emergencyresponseteam"},/turf/simulated/floor/plasteel/black,/area/centcom/ferry) @@ -237,7 +237,7 @@ "eC" = (/obj/structure/table/wood,/obj/item/weapon/reagent_containers/food/drinks/bottle/rum,/obj/item/weapon/reagent_containers/food/drinks/bottle/tequila,/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka{pixel_x = -5},/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey{pixel_x = 5},/turf/simulated/floor/plasteel/black,/area/centcom/ferry) "eD" = (/turf/simulated/wall/shuttle{icon_state = "swall14"; dir = 2},/area/centcom/evac) "eE" = (/turf/simulated/wall/shuttle{icon_state = "swallc4"; dir = 2},/area/centcom/evac) -"eF" = (/obj/machinery/door/airlock/shuttle{name = "Cockpit"; req_access_txt = "109"},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor2"},/area/centcom/evac) +"eF" = (/obj/machinery/door/airlock/shuttle{name = "Supply Shuttle Airlock"},/turf/simulated/wall/shuttle{icon_state = "swall14"; dir = 2},/area/shuttle/supply) "eG" = (/turf/simulated/floor/plasteel/freezer{dir = 2},/area/centcom/ferry) "eH" = (/obj/machinery/door/poddoor/ert,/turf/simulated/floor/plasteel/freezer{dir = 2},/area/centcom/ferry) "eI" = (/obj/structure/stool/bed/chair/office/dark{dir = 1},/obj/effect/landmark{name = "Emergencyresponseteam"},/turf/simulated/floor/plasteel/black,/area/centcom/ferry) @@ -318,7 +318,7 @@ "gf" = (/obj/structure/table/wood,/turf/simulated/floor/wood,/area/centcom/ferry) "gg" = (/turf/indestructible/riveted,/area/start) "gh" = (/obj/machinery/door/airlock/centcom{name = "Transport Shuttle"; opacity = 1; req_access_txt = "101"},/turf/simulated/floor/plasteel/darkgreen/side{dir = 2},/area/centcom/ferry) -"gi" = (/turf/simulated/wall/shuttle{icon_state = "swall_s6"; dir = 2},/area/shuttle/supply) +"gi" = (/obj/machinery/door/poddoor{id = "QMLoaddoor"; name = "Supply Dock Loading Door"},/obj/machinery/conveyor{dir = 2; id = "QMLoad"},/turf/simulated/wall/shuttle{icon_state = "swall14"; dir = 2},/area/shuttle/supply) "gj" = (/turf/simulated/wall/shuttle{icon_state = "swall12"; dir = 2},/area/shuttle/supply) "gk" = (/turf/simulated/wall/shuttle{icon_state = "swall_s10"; dir = 2},/area/shuttle/supply) "gl" = (/turf/space,/area/shuttle/supply) @@ -348,11 +348,11 @@ "gJ" = (/turf/indestructible/fakeglass{icon_state = "fakewindows2"; dir = 1},/area/centcom/control) "gK" = (/turf/simulated/floor/plasteel/green/corner,/area/centcom/control) "gL" = (/obj/structure/table,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/floor/plasteel/black,/area/centcom/control) -"gM" = (/turf/simulated/wall/shuttle{icon_state = "swall_s5"; dir = 2},/area/shuttle/supply) -"gN" = (/obj/machinery/door/airlock/shuttle{name = "Supply Shuttle Airlock"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/supply) -"gO" = (/obj/machinery/door/poddoor{id = "QMLoaddoor"; name = "Supply Dock Loading Door"},/obj/machinery/conveyor{dir = 2; id = "QMLoad"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/supply) -"gP" = (/obj/machinery/door/airlock/shuttle{name = "Supply Shuttle Airlock"; req_access_txt = "31"},/obj/docking_port/mobile/supply{dwidth = 5; width = 12},/obj/docking_port/stationary{dir = 8; dwidth = 5; height = 7; id = "supply_away"; name = "Centcom"; width = 12},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/supply) -"gQ" = (/turf/simulated/wall/shuttle{icon_state = "swall_s9"; dir = 2},/area/shuttle/supply) +"gM" = (/obj/machinery/door/airlock/shuttle{name = "Supply Shuttle Airlock"; req_access_txt = "31"},/obj/docking_port/mobile/supply{dwidth = 5; width = 12},/obj/docking_port/stationary{dir = 8; dwidth = 5; height = 7; id = "supply_away"; name = "Centcom"; width = 12},/turf/simulated/wall/shuttle{icon_state = "swall14"; dir = 2},/area/shuttle/supply) +"gN" = (/obj/docking_port/mobile/emergency{dwidth = 0; height = 28; width = 13},/obj/docking_port/stationary{dir = 4; dwidth = 0; height = 28; id = "emergency_away"; name = "Centcom"; width = 13},/turf/space,/area/space) +"gO" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Airlock"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor2"},/area/shuttle/escape) +"gP" = (/obj/structure/grille,/obj/structure/window/shuttle,/turf/simulated/floor/plating/airless,/area/shuttle/escape) +"gQ" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Airlock"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) "gR" = (/turf/simulated/floor/plasteel/green/side{dir = 4},/area/centcom/control) "gS" = (/obj/machinery/door_control{desc = "A remote control switch for port-side blast doors."; icon_state = "doorctrl0"; id = "CentComPort"; name = "Security Doors"; pixel_y = 28; req_access_txt = "101"},/obj/structure/showcase/fakeid,/turf/simulated/floor/plasteel/black,/area/centcom/control) "gT" = (/obj/structure/stool/bed/chair/office/dark{dir = 8},/turf/simulated/floor/plasteel/black,/area/centcom/control) @@ -428,17 +428,17 @@ "il" = (/obj/machinery/door/airlock/external{name = "Port Docking Bay 1"},/turf/space,/area/centcom/evac) "im" = (/turf/simulated/wall/shuttle{icon_state = "swall_s6"; dir = 2},/area/shuttle/escape) "in" = (/obj/structure/window/shuttle,/obj/structure/grille,/turf/space,/area/shuttle/escape) -"io" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Airlock"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) +"io" = (/obj/structure/ore_box,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor2"},/area/shuttle/escape) "ip" = (/turf/simulated/wall/shuttle{icon_state = "swall_s10"; dir = 2},/area/shuttle/escape) -"iq" = (/turf/indestructible/fakeglass{icon_state = "fakewindows2"; dir = 1},/area/centcom/evac) -"ir" = (/turf/simulated/floor/engine,/area/centcom/evac) +"iq" = (/obj/machinery/recharge_station,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor2"},/area/shuttle/escape) +"ir" = (/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor2"},/area/shuttle/escape) "is" = (/turf/simulated/wall/shuttle{icon_state = "swall12"; dir = 2},/area/shuttle/escape) "it" = (/turf/simulated/wall/shuttle{icon_state = "swall14"; dir = 2},/area/shuttle/escape) "iu" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Airlock"; req_access_txt = "2"},/turf/simulated/floor/plasteel/shuttle/red,/area/shuttle/escape) "iv" = (/turf/simulated/wall/shuttle{icon_state = "swall11"; dir = 2},/area/shuttle/escape) -"iw" = (/obj/structure/ore_box,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor2"},/area/shuttle/escape) -"ix" = (/turf/simulated/floor/plasteel/shuttle{icon_state = "floor2"},/area/shuttle/escape) -"iy" = (/obj/machinery/recharge_station,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor2"},/area/shuttle/escape) +"iw" = (/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) +"ix" = (/turf/simulated/wall/shuttle{tag = "icon-swall_f13"; icon_state = "swall_f13"},/area/shuttle/escape) +"iy" = (/turf/simulated/wall/shuttle{tag = "icon-swall_f11"; icon_state = "swall_f11"},/area/shuttle/escape) "iz" = (/turf/simulated/wall/shuttle{icon_state = "swall7"; dir = 2},/area/shuttle/escape) "iA" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion (EAST)"; icon_state = "propulsion"; dir = 4},/turf/space,/area/shuttle/escape) "iB" = (/obj/structure/shuttle/engine/heater{tag = "icon-heater (WEST)"; icon_state = "heater"; dir = 8},/turf/simulated/floor/plating/airless,/area/shuttle/escape) @@ -449,16 +449,16 @@ "iG" = (/turf/simulated/wall/shuttle{icon_state = "swall15"; dir = 2},/area/shuttle/escape) "iH" = (/turf/simulated/wall/shuttle{icon_state = "swallc4"; dir = 2},/area/shuttle/escape) "iI" = (/turf/simulated/wall/shuttle{icon_state = "swall13"; dir = 2},/area/shuttle/escape) -"iJ" = (/obj/machinery/door/airlock/shuttle{name = "Emergency Shuttle Airlock"},/obj/docking_port/mobile/emergency,/obj/docking_port/stationary{dir = 4; dwidth = 9; height = 11; id = "emergency_away"; name = "Centcom"; width = 22},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) +"iJ" = (/obj/structure/window/shuttle,/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/shuttle/escape) "iK" = (/obj/structure/stool/bed/chair{dir = 4},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28; tag = "west"},/turf/simulated/floor/plasteel/shuttle/red,/area/shuttle/escape) -"iL" = (/obj/machinery/suit_storage_unit,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor2"},/area/shuttle/escape) -"iM" = (/obj/machinery/door/airlock/mining{name = "Emergency Shuttle Storage"; req_access_txt = "0"},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor2"},/area/shuttle/escape) +"iL" = (/obj/machinery/suit_storage_unit,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor2"},/area/shuttle/escape) +"iM" = (/obj/structure/extinguisher_cabinet{pixel_y = 30; tag = "(north)"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) "iN" = (/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) "iO" = (/obj/structure/closet,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) "iP" = (/obj/structure/table,/obj/item/weapon/extinguisher,/obj/item/weapon/crowbar,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) -"iQ" = (/obj/structure/stool/bed/chair,/obj/structure/extinguisher_cabinet{pixel_y = 30; tag = "(north)"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) +"iQ" = (/obj/machinery/door/airlock/mining{name = "Emergency Shuttle Storage"; req_access_txt = "0"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor2"},/area/shuttle/escape) "iR" = (/obj/structure/stool/bed/chair,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) -"iS" = (/obj/structure/stool/bed/chair,/obj/item/device/radio/intercom{broadcasting = 0; name = "Station Intercom (General)"; pixel_y = 23; tag = "north"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) +"iS" = (/obj/structure/closet/emcloset,/obj/item/device/radio/intercom{broadcasting = 0; name = "Station Intercom (General)"; pixel_y = 23; tag = "north"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) "iT" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) "iU" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) "iV" = (/obj/structure/stool/bed/roller,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) @@ -482,32 +482,32 @@ "jn" = (/obj/machinery/door/airlock/glass_command{name = "Emergency Shuttle Cockpit"; req_access_txt = "19"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) "jo" = (/obj/structure/grille,/obj/structure/window/shuttle,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) "jp" = (/obj/machinery/status_display,/turf/simulated/wall/shuttle{icon_state = "swall7"; dir = 2},/area/shuttle/escape) -"jq" = (/obj/structure/window/shuttle,/obj/structure/grille,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor3"},/area/shuttle/escape) +"jq" = (/obj/machinery/computer/crew,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) "jr" = (/obj/machinery/computer/communications,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) "js" = (/obj/structure/stool/bed/chair/office/light{dir = 1; name = "Research Director"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) "jt" = (/obj/structure/stool/bed/chair/office/light{dir = 1; name = "Head of Personnel"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) "ju" = (/obj/structure/stool/bed/chair/office/light{dir = 1; name = "Chief Medical Officer"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) "jv" = (/obj/structure/extinguisher_cabinet{pixel_y = -30; tag = "(south)"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) "jw" = (/obj/machinery/status_display,/turf/simulated/wall/shuttle{icon_state = "swall2"; dir = 2},/area/shuttle/escape) -"jx" = (/obj/machinery/computer/crew,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor3"},/area/shuttle/escape) -"jy" = (/turf/simulated/floor/plasteel/shuttle{icon_state = "floor3"},/area/shuttle/escape) -"jz" = (/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Escape Shuttle Infirmary"; req_access_txt = "5"},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor3"},/area/shuttle/escape) -"jA" = (/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Escape Shuttle Infirmary"; req_access_txt = "0"},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor3"},/area/shuttle/escape) -"jB" = (/obj/structure/stool/bed,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor3"},/area/shuttle/escape) -"jC" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -30},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) -"jD" = (/obj/machinery/door/airlock{name = "Emergency Shuttle Restroom"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) +"jx" = (/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Escape Shuttle Infirmary"; req_access_txt = "5"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) +"jy" = (/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Escape Shuttle Infirmary"; req_access_txt = "0"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) +"jz" = (/obj/structure/stool/bed,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) +"jA" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/structure/mirror{pixel_x = -30},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) +"jB" = (/obj/machinery/door/airlock{name = "Emergency Shuttle Restroom"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) +"jC" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 8},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) +"jD" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28; tag = "west"},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) "jE" = (/obj/structure/stool/bed/chair{dir = 1},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29; tag = "south"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) "jF" = (/obj/structure/stool/bed/chair{dir = 1},/obj/structure/extinguisher_cabinet{pixel_y = -30; tag = "(south)"},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) "jG" = (/obj/structure/table,/obj/item/weapon/extinguisher,/obj/item/weapon/crowbar,/obj/machinery/recharger,/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) -"jH" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 8},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor3"},/area/shuttle/escape) +"jH" = (/obj/structure/closet/secure_closet/medical2,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) "jI" = (/turf/simulated/wall/shuttle{icon_state = "swall_s9"; dir = 2},/area/shuttle/escape) "jJ" = (/turf/simulated/wall/shuttle{icon_state = "swall_s5"; dir = 2},/area/shuttle/escape) -"jK" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28; tag = "west"},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor3"},/area/shuttle/escape) -"jL" = (/obj/structure/closet/secure_closet/medical2,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor3"},/area/shuttle/escape) -"jM" = (/obj/structure/toilet{dir = 1},/turf/simulated/floor/plasteel/shuttle,/area/shuttle/escape) -"jN" = (/obj/structure/table,/obj/item/weapon/retractor,/obj/item/weapon/hemostat,/obj/item/weapon/scalpel,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor3"},/area/shuttle/escape) -"jO" = (/obj/structure/optable,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor3"},/area/shuttle/escape) -"jP" = (/obj/structure/table,/obj/item/weapon/circular_saw,/obj/item/weapon/cautery{pixel_x = 4},/obj/item/weapon/surgical_drapes,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor3"},/area/shuttle/escape) +"jK" = (/obj/structure/toilet{dir = 1},/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) +"jL" = (/obj/structure/table,/obj/item/weapon/retractor,/obj/item/weapon/hemostat,/obj/item/weapon/scalpel,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) +"jM" = (/obj/structure/table,/obj/item/weapon/circular_saw,/obj/item/weapon/cautery{pixel_x = 4},/obj/item/weapon/surgical_drapes,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) +"jN" = (/obj/structure/optable,/turf/simulated/floor/plasteel/shuttle{icon_state = "shuttlefloor3"},/area/shuttle/escape) +"jO" = (/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"jP" = (/obj/structure/table,/obj/machinery/microwave,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) "jQ" = (/turf/simulated/wall/shuttle,/area/shuttle/escape) "jR" = (/turf/indestructible/riveted,/area/centcom/holding) "jS" = (/obj/structure/table,/turf/simulated/floor/plasteel/freezer{dir = 2},/area/centcom/holding) @@ -556,25 +556,25 @@ "kJ" = (/turf/simulated/wall/shuttle{icon_state = "wall3"},/area/shuttle/syndicate) "kK" = (/obj/structure/grille,/obj/machinery/door/poddoor/shutters{id = "syndieshutters"; name = "blast shutters"},/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/shuttle/syndicate) "kL" = (/turf/simulated/floor/plating/snow,/turf/simulated/wall/shuttle{dir = 1; icon_state = "diagonalWall3"},/area/shuttle/syndicate) -"kM" = (/obj/structure/table,/obj/machinery/microwave,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"kN" = (/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"kO" = (/obj/structure/table,/obj/item/device/flashlight/lamp{pixel_x = 4; pixel_y = 1},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"kP" = (/obj/machinery/computer/shuttle/syndicate,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"kQ" = (/obj/structure/table,/obj/machinery/door_control{id = "syndieshutters"; name = "remote shutter control"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"kR" = (/obj/structure/computerframe,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) +"kM" = (/obj/machinery/computer/shuttle/syndicate,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"kN" = (/obj/structure/table,/obj/item/device/flashlight/lamp{pixel_x = 4; pixel_y = 1},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"kO" = (/obj/structure/computerframe,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"kP" = (/obj/structure/table,/obj/machinery/door_control{id = "syndieshutters"; name = "remote shutter control"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"kQ" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"kR" = (/obj/structure/stool/bed/chair/comfy/black{dir = 1; icon_state = "comfychair"; name = "pilot's chair"; tag = "icon-comfychair (NORTH)"},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) "kS" = (/turf/simulated/floor/plating/snow,/turf/simulated/floor/plating/snow/gravsnow/corner{dir = 8},/area/syndicate_mothership) "kT" = (/turf/indestructible/fakeglass{icon_state = "fakewindows"; dir = 8},/area/syndicate_mothership) "kU" = (/turf/indestructible/fakeglass{icon_state = "fakewindows"; dir = 4},/area/syndicate_mothership) "kV" = (/turf/simulated/floor/plating/snow,/obj/structure/flora/grass/both,/turf/simulated/floor/plating/snow/gravsnow/corner,/area/syndicate_mothership) "kW" = (/turf/simulated/floor/plating/snow,/obj/structure/flora/tree/pine,/turf/simulated/floor/plating/snow/gravsnow/corner,/area/syndicate_mothership) -"kX" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"kY" = (/obj/structure/stool/bed/chair/comfy/black{dir = 1; icon_state = "comfychair"; name = "pilot's chair"; tag = "icon-comfychair (NORTH)"},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) +"kX" = (/obj/structure/table,/obj/item/stack/sheet/glass{amount = 10},/obj/item/device/multitool,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"kY" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; freerange = 1; frequency = 1213; name = "Syndicate Intercom"; pixel_y = -32; subspace_transmission = 1; syndie = 1},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) "kZ" = (/turf/simulated/floor/plating/snow,/turf/simulated/floor/plating/snow/gravsnow/corner{dir = 4},/area/syndicate_mothership) "la" = (/obj/item/weapon/storage/crayons,/obj/structure/table,/obj/item/weapon/storage/crayons,/turf/simulated/floor/plasteel/freezer{dir = 2},/area/syndicate_mothership) "lb" = (/obj/machinery/washing_machine,/turf/simulated/floor/plasteel/freezer{dir = 2},/area/syndicate_mothership) -"lc" = (/obj/structure/table,/obj/item/stack/sheet/glass{amount = 10},/obj/item/device/multitool,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"ld" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; freerange = 1; frequency = 1213; name = "Syndicate Intercom"; pixel_y = -32; subspace_transmission = 1; syndie = 1},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"le" = (/obj/structure/closet/syndicate/personal,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) +"lc" = (/obj/structure/closet/syndicate/personal,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"ld" = (/turf/simulated/wall/mineral/uranium,/area/wizard_station) +"le" = (/obj/machinery/door/window{name = "Cockpit"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) "lf" = (/obj/machinery/computer/shuttle/syndicate/recall,/turf/simulated/floor/plasteel/bar{dir = 2},/area/syndicate_mothership) "lg" = (/turf/simulated/floor/plasteel/bar{dir = 2},/area/syndicate_mothership) "lh" = (/obj/machinery/vending/coffee,/turf/simulated/floor/plasteel/bar{dir = 2},/area/syndicate_mothership) @@ -589,7 +589,7 @@ "lq" = (/turf/indestructible/fakeglass{color = "#008000"; dir = 4; icon_state = "fakewindows"},/area/wizard_station) "lr" = (/turf/indestructible/riveted{icon_state = "uranium0"},/area/wizard_station) "ls" = (/turf/simulated/floor/plating/snow,/turf/simulated/wall/shuttle{icon_state = "diagonalWall3"},/area/shuttle/syndicate) -"lt" = (/obj/machinery/door/window{name = "Cockpit"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) +"lt" = (/obj/structure/table,/obj/item/stack/cable_coil,/obj/item/weapon/crowbar/red,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) "lu" = (/turf/simulated/floor/plating/snow,/turf/simulated/wall/shuttle{dir = 4; icon_state = "diagonalWall3"},/area/shuttle/syndicate) "lv" = (/turf/simulated/floor/plating/snow,/obj/structure/flora/grass/brown,/turf/simulated/floor/plating/snow/gravsnow/corner{dir = 4},/area/syndicate_mothership) "lw" = (/obj/item/weapon/paper{info = "GET DAT FUKKEN DISK"; name = "memo"},/obj/structure/noticeboard{pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plasteel/bar{dir = 2},/area/syndicate_mothership) @@ -601,8 +601,8 @@ "lC" = (/obj/item/weapon/shard{color = "#008000"},/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage5"},/area/wizard_station) "lD" = (/obj/machinery/computer/shuttle,/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage"},/area/wizard_station) "lE" = (/turf/simulated/floor/plasteel/cult,/area/wizard_station) -"lF" = (/obj/structure/table,/obj/item/stack/cable_coil,/obj/item/weapon/crowbar/red,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"lG" = (/obj/structure/table,/obj/item/weapon/storage/box/zipties{pixel_x = 1; pixel_y = 2},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) +"lF" = (/obj/structure/table,/obj/item/weapon/storage/box/zipties{pixel_x = 1; pixel_y = 2},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"lG" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) "lH" = (/turf/simulated/floor/plating/snow,/turf/simulated/floor/plating/snow/gravsnow/surround{dir = 8},/area/syndicate_mothership) "lI" = (/turf/simulated/floor/plating/snow,/turf/simulated/floor/plating/snow/gravsnow/corner{dir = 6},/area/syndicate_mothership) "lJ" = (/obj/structure/table/wood,/obj/item/weapon/reagent_containers/food/drinks/beer{pixel_x = -2; pixel_y = 5},/turf/simulated/floor/plasteel/bar{dir = 2},/area/syndicate_mothership) @@ -615,8 +615,8 @@ "lQ" = (/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage2"},/area/wizard_station) "lR" = (/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage3"},/area/wizard_station) "lS" = (/obj/effect/decal/cleanable/blood/gibs/body,/turf/simulated/floor/plasteel/cult,/area/wizard_station) -"lT" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"lU" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) +"lT" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"lU" = (/obj/machinery/suit_storage_unit/syndicate,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) "lV" = (/turf/indestructible/fakeglass{icon_state = "fakewindows"; dir = 9},/area/syndicate_mothership) "lW" = (/turf/indestructible/fakeglass{icon_state = "fakewindows2"; dir = 8},/area/syndicate_mothership) "lX" = (/obj/structure/table/wood,/obj/item/weapon/reagent_containers/food/snacks/pizzaslice/mushroom,/turf/simulated/floor/plasteel/bar{dir = 2},/area/syndicate_mothership) @@ -631,8 +631,8 @@ "mg" = (/obj/machinery/door/poddoor/shutters{id = "nukeop_ready"; name = "shuttle dock"},/turf/simulated/floor/plating,/area/syndicate_mothership) "mh" = (/turf/indestructible/fakeglass{color = "#008000"; dir = 6; icon_state = "fakewindows2"},/area/wizard_station) "mi" = (/obj/effect/forcefield,/obj/structure/door_assembly{anchored = 1; icon_state = "door_as_uranium1"; name = "Bridge"},/turf/simulated/floor/plasteel/cult,/area/wizard_station) -"mj" = (/obj/machinery/suit_storage_unit/syndicate,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"mk" = (/obj/effect/landmark{name = "Syndicate-Uplink"},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) +"mj" = (/obj/effect/landmark{name = "Syndicate-Uplink"},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"mk" = (/obj/structure/stool,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) "ml" = (/turf/indestructible/fakeglass,/area/syndicate_mothership) "mm" = (/obj/machinery/door/airlock/external{req_access_txt = "150"},/turf/simulated/floor/plating,/area/syndicate_mothership) "mn" = (/obj/machinery/door_control{id = "nukeop_ready"; name = "mission launch control"; pixel_x = -26; pixel_y = 0; req_access_txt = "151"},/turf/simulated/floor/plasteel/bar{dir = 2},/area/syndicate_mothership) @@ -641,9 +641,9 @@ "mq" = (/obj/structure/toilet{pixel_y = 8},/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"},/obj/machinery/door/window{name = "Tactical Toilet"; opacity = 1},/turf/simulated/floor/plasteel/freezer{dir = 2},/area/syndicate_mothership) "mr" = (/obj/effect/decal/remains/human,/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage6"},/area/wizard_station) "ms" = (/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage"},/area/wizard_station) -"mt" = (/obj/structure/stool,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"mu" = (/obj/structure/table,/obj/item/device/aicard,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"mv" = (/obj/machinery/door/poddoor{auto_close = 300; id = "smindicate"; name = "outer blast door"},/obj/machinery/door_control{id = "smindicate"; name = "external door control"; pixel_x = -26; pixel_y = 0; req_access_txt = "150"},/obj/docking_port/mobile{dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate"; name = "syndicate infiltrator"; travelDir = 180; width = 18},/obj/docking_port/stationary{area_type = /area/syndicate_mothership; dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate_away"; name = "syndicate recon outpost"; turf_type = /turf/simulated/floor/plating/snow; width = 18},/turf/simulated/floor/plating,/area/shuttle/syndicate) +"mt" = (/obj/structure/table,/obj/item/device/aicard,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"mu" = (/obj/machinery/door/poddoor{auto_close = 300; id = "smindicate"; name = "outer blast door"},/obj/machinery/door_control{id = "smindicate"; name = "external door control"; pixel_x = -26; pixel_y = 0; req_access_txt = "150"},/obj/docking_port/mobile{dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate"; name = "syndicate infiltrator"; travelDir = 180; width = 18},/obj/docking_port/stationary{area_type = /area/syndicate_mothership; dheight = 9; dir = 2; dwidth = 5; height = 22; id = "syndicate_away"; name = "syndicate recon outpost"; turf_type = /turf/simulated/floor/plating/snow; width = 18},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"mv" = (/obj/structure/table,/obj/item/weapon/c4{pixel_x = 2; pixel_y = 1},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) "mw" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/turf/simulated/wall/shuttle{icon_state = "wall3"},/area/shuttle/syndicate) "mx" = (/turf/simulated/floor/plating/snow,/turf/simulated/floor/plating/snow/gravsnow/corner{dir = 5},/area/syndicate_mothership) "my" = (/obj/item/weapon/storage/box/drinkingglasses,/obj/item/weapon/reagent_containers/food/drinks/bottle/rum,/obj/structure/table/wood,/turf/simulated/floor/wood,/area/syndicate_mothership) @@ -660,7 +660,7 @@ "mJ" = (/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage7"},/area/wizard_station) "mK" = (/obj/effect/forcefield,/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage"},/area/wizard_station) "mL" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'FOURTH WALL'."; name = "\improper FOURTH WALL"; pixel_x = -32},/turf/simulated/floor/plating/snow,/area/syndicate_mothership) -"mM" = (/obj/structure/table,/obj/item/weapon/c4{pixel_x = 2; pixel_y = 1},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) +"mM" = (/obj/machinery/door/window{dir = 4; name = "EVA Storage"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) "mN" = (/turf/simulated/floor/wood,/area/syndicate_mothership) "mO" = (/obj/effect/landmark{name = "Syndicate-Spawn"},/turf/simulated/floor/wood,/area/syndicate_mothership) "mP" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Uplink Management Control"; req_access_txt = "151"},/turf/simulated/floor/wood,/area/syndicate_mothership) @@ -673,8 +673,8 @@ "mW" = (/obj/machinery/door/poddoor/preopen,/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/plating,/area/wizard_station) "mX" = (/obj/effect/forcefield,/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage7"},/area/wizard_station) "mY" = (/obj/effect/forcefield,/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage5"},/area/wizard_station) -"mZ" = (/obj/machinery/door/window{dir = 4; name = "EVA Storage"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"na" = (/obj/machinery/door/airlock/external{req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) +"mZ" = (/obj/machinery/door/airlock/external{req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"na" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "EVA Storage"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) "nb" = (/obj/machinery/computer/telecrystals/boss,/turf/simulated/floor/plasteel/podhatch{dir = 5},/area/syndicate_mothership) "nc" = (/obj/structure/sign/map/left{pixel_y = -32},/obj/structure/rack{icon = 'icons/obj/stationobjs.dmi'; icon_state = "minibar_left"; name = "skeletal minibar"},/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka,/turf/simulated/floor/wood,/area/syndicate_mothership) "nd" = (/obj/structure/sign/map/right{pixel_y = -32},/obj/structure/rack{icon = 'icons/obj/stationobjs.dmi'; icon_state = "minibar_right"; name = "skeletal minibar"},/obj/item/weapon/reagent_containers/food/drinks/bottle/gin,/turf/simulated/floor/wood,/area/syndicate_mothership) @@ -684,9 +684,9 @@ "nh" = (/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage5"},/area/wizard_station) "ni" = (/obj/effect/decal/cleanable/blood/gibs/body,/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage2"},/area/wizard_station) "nj" = (/obj/structure/table/wood/poker,/obj/item/toy/cards/cardhand,/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage2"},/area/wizard_station) -"nk" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "EVA Storage"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) +"nk" = (/obj/structure/rack,/obj/item/clothing/suit/space/syndicate/black/red,/obj/item/clothing/head/helmet/space/syndicate/black/red,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) "nl" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/turf/simulated/floor/plating,/area/shuttle/syndicate) -"nm" = (/obj/structure/rack,/obj/item/clothing/suit/space/syndicate/black/red,/obj/item/clothing/head/helmet/space/syndicate/black/red,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) +"nm" = (/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/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) "nn" = (/turf/simulated/floor/plating/snow,/turf/simulated/floor/plating/snow/gravsnow/corner{dir = 10},/area/syndicate_mothership) "no" = (/turf/simulated/floor/plating/snow,/turf/simulated/floor/plating/snow/gravsnow/corner{dir = 1},/area/syndicate_mothership) "np" = (/turf/simulated/floor/plasteel/black,/area/syndicate_mothership) @@ -697,19 +697,19 @@ "nu" = (/obj/structure/lattice,/obj/effect/forcefield,/turf/space/transit,/area/wizard_station) "nv" = (/obj/machinery/vending/magivend,/turf/simulated/floor/plasteel/cult,/area/wizard_station) "nw" = (/obj/machinery/vending/snack,/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage"},/area/wizard_station) -"nx" = (/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/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) +"nx" = (/obj/machinery/recharge_station,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) "ny" = (/turf/simulated/floor/plating/snow,/obj/structure/flora/bush,/turf/simulated/floor/plating/snow/gravsnow/corner{dir = 1},/area/syndicate_mothership) "nz" = (/obj/structure/door_assembly{anchored = 1; icon_state = "door_as_uranium1"; name = "Break Room"},/turf/simulated/floor/plasteel/cult,/area/wizard_station) "nA" = (/obj/machinery/door/airlock{icon = 'icons/obj/doors/Dooruranium.dmi'; name = "Break Room"},/turf/simulated/floor/plasteel/cult,/area/wizard_station) -"nB" = (/obj/machinery/recharge_station,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"nC" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"nD" = (/obj/structure/table,/obj/machinery/cell_charger,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"nE" = (/obj/structure/table,/obj/item/stack/medical/ointment,/obj/item/stack/medical/bruise_pack,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"nF" = (/obj/structure/table,/obj/item/weapon/stock_parts/cell/high{pixel_x = -3; pixel_y = 3},/obj/item/weapon/stock_parts/cell/high,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"nG" = (/obj/structure/table,/obj/item/weapon/screwdriver{pixel_y = 9},/obj/item/device/assembly/voice{pixel_y = 3},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"nH" = (/obj/structure/table,/obj/item/weapon/wrench,/obj/item/device/assembly/infra,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"nI" = (/obj/structure/table,/obj/item/device/assembly/signaler,/obj/item/device/assembly/signaler,/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"nJ" = (/obj/structure/table,/obj/item/weapon/weldingtool/largetank{pixel_y = 3},/obj/item/device/multitool,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) +"nB" = (/obj/structure/table,/obj/machinery/cell_charger,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"nC" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"nD" = (/obj/structure/table,/obj/item/stack/medical/ointment,/obj/item/stack/medical/bruise_pack,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"nE" = (/obj/structure/table,/obj/item/weapon/screwdriver{pixel_y = 9},/obj/item/device/assembly/voice{pixel_y = 3},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"nF" = (/obj/structure/table,/obj/item/weapon/stock_parts/cell/high{pixel_x = -3; pixel_y = 3},/obj/item/weapon/stock_parts/cell/high,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"nG" = (/obj/structure/table,/obj/item/device/assembly/signaler,/obj/item/device/assembly/signaler,/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"nH" = (/obj/structure/table,/obj/item/weapon/wrench,/obj/item/device/assembly/infra,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"nI" = (/obj/structure/table,/obj/item/weapon/weldingtool/largetank{pixel_y = 3},/obj/item/device/multitool,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"nJ" = (/obj/machinery/door/window{dir = 4; name = "Infirmary"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) "nK" = (/obj/structure/stool,/turf/simulated/floor/plasteel/black,/area/syndicate_mothership) "nL" = (/obj/structure/stool/bed/chair/wood/wings,/turf/simulated/floor/plasteel/cult,/area/wizard_station) "nM" = (/obj/structure/table/wood,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/ointment,/turf/simulated/floor/plasteel/cult,/area/wizard_station) @@ -719,9 +719,9 @@ "nQ" = (/obj/structure/rack,/obj/item/clothing/head/helmet/space/hardsuit/wizard,/turf/simulated/floor/plasteel/cult,/area/wizard_station) "nR" = (/obj/effect/decal/cleanable/blood/splatter,/obj/effect/decal/cleanable/blood/gibs/body,/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage"},/area/wizard_station) "nS" = (/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/plasteel/cult,/area/wizard_station) -"nT" = (/obj/machinery/door/window{dir = 4; name = "Infirmary"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"nU" = (/obj/machinery/door/window/westright{name = "Tool Storage"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"nV" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/syndicate,/obj/item/weapon/crowbar/red,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) +"nT" = (/obj/machinery/door/window/westright{name = "Tool Storage"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"nU" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/syndicate,/obj/item/weapon/crowbar/red,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"nV" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 4},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) "nW" = (/obj/structure/closet/syndicate/personal,/turf/simulated/floor/vault,/area/syndicate_mothership) "nX" = (/obj/structure/table,/obj/item/weapon/gun/energy/ionrifle{pin = /obj/item/device/firing_pin},/turf/simulated/floor/plasteel/black,/area/syndicate_mothership) "nY" = (/turf/indestructible/fakeglass{color = "#008000"; dir = 1; icon_state = "fakewindows"},/area/wizard_station) @@ -730,9 +730,9 @@ "ob" = (/obj/effect/decal/cleanable/blood/splatter,/obj/structure/rack{health = 9999},/obj/item/clothing/suit/space/hardsuit/wizard,/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage"},/area/wizard_station) "oc" = (/turf/simulated/floor/plasteel/cult,/turf/simulated/wall/shuttle{icon_state = "swall_f6"; dir = 2},/area/wizard_station) "od" = (/turf/simulated/wall/shuttle{icon_state = "swall8"; dir = 2},/area/wizard_station) -"oe" = (/obj/machinery/sleeper{icon_state = "sleeper-open"; dir = 4},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"of" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Infirmary"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"og" = (/obj/machinery/door/window{dir = 8; name = "Tool Storage"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) +"oe" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Infirmary"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"of" = (/obj/machinery/door/window{dir = 8; name = "Tool Storage"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"og" = (/obj/structure/table,/obj/item/weapon/gun/syringe{pixel_x = 1; pixel_y = 2},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) "oh" = (/turf/indestructible/fakeglass{color = "#008000"; dir = 1; icon_state = "fakewindows2"},/area/wizard_station) "oi" = (/obj/structure/bookcase,/turf/simulated/floor/plasteel/cult,/area/wizard_station) "oj" = (/obj/structure/grille{color = "#008000"; density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating,/area/wizard_station) @@ -744,34 +744,33 @@ "op" = (/obj/effect/decal/cleanable/blood/splatter,/obj/effect/decal/cleanable/blood/gibs/body,/turf/simulated/floor/plasteel,/area/wizard_station) "oq" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 4},/turf/simulated/floor/plating,/area/wizard_station) "or" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion"; dir = 8},/turf/space/transit,/area/wizard_station) -"os" = (/obj/structure/table,/obj/item/weapon/gun/syringe{pixel_x = 1; pixel_y = 2},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"ot" = (/obj/structure/table,/obj/item/weapon/reagent_containers/syringe/charcoal,/obj/item/weapon/reagent_containers/syringe/charcoal{pixel_y = 2},/obj/item/weapon/reagent_containers/syringe/charcoal{pixel_y = 4},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"ou" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"ov" = (/obj/machinery/door/window{dir = 1; name = "Secure Storage"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"ow" = (/obj/structure/table,/obj/item/device/sbeacondrop/bomb{pixel_y = 5},/obj/item/device/sbeacondrop/bomb,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"ox" = (/obj/structure/table,/obj/item/weapon/grenade/syndieminibomb{pixel_x = 4; pixel_y = 2},/obj/item/weapon/grenade/syndieminibomb{pixel_x = -1},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) +"os" = (/obj/structure/table,/obj/item/weapon/reagent_containers/syringe/charcoal,/obj/item/weapon/reagent_containers/syringe/charcoal{pixel_y = 2},/obj/item/weapon/reagent_containers/syringe/charcoal{pixel_y = 4},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"ot" = (/obj/machinery/door/window{dir = 1; name = "Secure Storage"; req_access_txt = "150"},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"ou" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"ov" = (/obj/structure/table,/obj/item/weapon/grenade/syndieminibomb{pixel_x = 4; pixel_y = 2},/obj/item/weapon/grenade/syndieminibomb{pixel_x = -1},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"ow" = (/obj/structure/table,/obj/item/device/sbeacondrop/bomb{pixel_y = 5},/obj/item/device/sbeacondrop/bomb,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"ox" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/structure/mirror{pixel_x = 30},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) "oy" = (/turf/indestructible/fakeglass{color = "#008000"},/area/wizard_station) "oz" = (/obj/item/weapon/shard{color = "#008000"; icon_state = "medium"},/obj/structure/grille{color = "#008000"; density = 0; icon_state = "brokengrille"},/turf/simulated/floor/plating,/area/wizard_station) "oA" = (/obj/effect/landmark/start{name = "wizard"},/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage5"},/area/wizard_station) "oB" = (/obj/effect/decal/remains/human,/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor/plasteel/cult,/area/wizard_station) "oC" = (/turf/simulated/floor/plasteel/cult,/turf/simulated/wall/shuttle{icon_state = "swall_f5"; dir = 2},/area/wizard_station) "oD" = (/turf/indestructible/fakedoor{name = "Squad 3 Pod"},/area/wizard_station) -"oE" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/structure/mirror{pixel_x = 30},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"oF" = (/obj/machinery/telecomms/allinone{intercept = 1},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"oG" = (/obj/effect/landmark{name = "Nuclear-Bomb"},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) +"oE" = (/obj/effect/landmark{name = "Nuclear-Bomb"},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"oF" = (/obj/machinery/telecomms/allinone{intercept = 1},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"oG" = (/obj/structure/optable,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) "oH" = (/obj/structure/stool/bed/chair/wood/wings{tag = "icon-wooden_chair_wings (NORTH)"; icon_state = "wooden_chair_wings"; dir = 1},/turf/simulated/floor/plasteel/cult,/area/wizard_station) "oI" = (/obj/structure/cult/pylon,/turf/simulated/floor/plasteel/cult,/area/wizard_station) "oJ" = (/obj/effect/decal/cleanable/blood/splatter,/obj/structure/rack,/obj/item/weapon/staff,/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage"},/area/wizard_station) "oK" = (/obj/effect/decal/cleanable/blood/splatter,/obj/effect/decal/cleanable/blood/gibs/body,/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage4"},/area/wizard_station) "oL" = (/obj/effect/decal/cleanable/blood/splatter,/obj/effect/forcefield,/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage"},/area/wizard_station) "oM" = (/turf/simulated/floor/plasteel/cult{icon_state = "cultdamage4"},/area/wizard_station) -"oN" = (/obj/structure/table,/obj/item/weapon/circular_saw,/obj/item/weapon/cautery,/obj/item/weapon/surgicaldrill,/obj/item/robot_parts/l_arm,/obj/item/robot_parts/r_arm,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"oO" = (/obj/structure/optable,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"oP" = (/obj/structure/table,/obj/item/weapon/scalpel,/obj/item/weapon/retractor,/obj/item/weapon/hemostat,/obj/item/weapon/surgical_drapes,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) +"oN" = (/obj/structure/table,/obj/item/weapon/circular_saw,/obj/item/weapon/cautery,/obj/item/weapon/surgicaldrill,/obj/item/robot_parts/l_arm,/obj/item/robot_parts/r_arm,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"oO" = (/obj/structure/table,/obj/item/weapon/scalpel,/obj/item/weapon/retractor,/obj/item/weapon/hemostat,/obj/item/weapon/surgical_drapes,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"oP" = (/obj/machinery/teleport/station,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) "oQ" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/shuttle/syndicate) -"oR" = (/obj/structure/computerframe,/obj/item/weapon/paper{info = "

Teleporter Instruction


  1. Install circuit board, glass and wiring to complete Teleporter Control Console
  2. Use a screwdriver, wirecutter and screwdriver again on the Teleporter Station to connect it
  3. Set destination with Teleporter Control Computer
  4. Activate Teleporter Hub with Teleporter Station
"; name = "Teleporter Instructions"},/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"oS" = (/obj/machinery/teleport/station,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) -"oT" = (/obj/machinery/teleport/hub/syndicate,/turf/simulated/floor/plasteel/shuttle{icon_state = "floor4"},/area/shuttle/syndicate) +"oR" = (/obj/structure/computerframe,/obj/item/weapon/paper{info = "

Teleporter Instruction


  1. Install circuit board, glass and wiring to complete Teleporter Control Console
  2. Use a screwdriver, wirecutter and screwdriver again on the Teleporter Station to connect it
  3. Set destination with Teleporter Control Computer
  4. Activate Teleporter Hub with Teleporter Station
"; name = "Teleporter Instructions"},/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) +"oS" = (/obj/machinery/teleport/hub/syndicate,/turf/simulated/floor/plasteel/shuttle/red/syndicate,/area/shuttle/syndicate) "oU" = (/obj/structure/door_assembly{anchored = 1; icon_state = "door_as_uranium1"; name = "Corridor A"},/turf/simulated/floor/plasteel/cult,/area/wizard_station) "oV" = (/obj/machinery/door/airlock{icon = 'icons/obj/doors/Dooruranium.dmi'; name = "Corridor A"},/turf/simulated/floor/plasteel/cult,/area/wizard_station) "oW" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"},/turf/simulated/floor/plating,/area/shuttle/syndicate) @@ -942,22 +941,22 @@ abababababababababababababababababababababababababababababababababababababababab abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcucxcyczczcHczczcAcBcwcwcwcwcwcIcJcIcwcwcwcwcwcCcAcDcDcKcDcDcycEcuabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcucxcyczczczczczcAcBcwcwcwcwcwcIcLcIcwcwcwcwcwcCcAcDcDcDcDcDcycEcuabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcMcNcOcPcQabcRabababcSabcMcNcOcPcQabababababababababababababababababababababababababababababababcucxcyczcFczcFczcAcBcwcwcwcwcwcwcwcwcwcwcwcwcwcCcAcDcGcDcGcDcycEcuabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTcUcUcUcVcWcXcYcZcYcXdadbcUcUcUcTabababababababababababababababababababababababababababababababcucxcyczczczczczcAcBcwcwcwcwcwcwcwcwcwcwcwcwcwcCcAcDcDcDcDcDcycEcuabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTdcdcdddedfdgdhdidjdgdfdkdldcdccTabababababababababababababababababababababababababababababababcucucudmdmdmdmdmcucvcwcwcwcwcwcwcwcwcwcwcwcwcwcvcudmdmdmdmdmcucucuabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTdcdcdndododgdodododgdododndcdccTabababababababababababababababababababababababababababababababababcudpdpdpdpdpcudqdrdrdrdrdrdrdrdrdrdrdrdrdrdscudtdtdtdtdtcuabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdudldccXdodgdgdgdgdgdgdgdocXdcdddvabababababababababababababababababababababababababababababababababcucucucucucucudwdxdxdxdxdxdydzdAdxdxdxdxdxdwcucucucucucucuabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdudBdCdDdEdFdGdgdHdodgdIdJdBdvababababababababababababababababababababababababababababababababababababababababdKdwdwdwdLdwdMdMdMdMdMdwdLdwdwdwdKabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTdNdOdPdQdgdododgdIcTababababababababababababababababababababababababababababababababababababababababababdKdKdRdKdKdKdKdSdTdUdKdKdKdKdRdKdKabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTdVdWdWdGdgdIdXdgdIdnababababababababababababababababababababababababababababababababababababababababababababababababdKdKdKdKdKabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTdYdWdWdZdgdIdXdgdgcXeaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcVdBdBdBdCdgdododgdIcYabababababababababababababababababababababababababababababababababababababababababababababebebebebebecebebebebebababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTeddgedcTdgdIdXdgdIeeabababababababababababababababababababababababababababababababababababababababababababababebefegeheieieieieiejebababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTeddgeddndgdIdXdgdIcYabababababababababababababababababababababababababababababababababababababababababababababebeieieiekeiekeieieiebababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTeddgdgeldgdgdgdgdgcXemababababababababababababababababababababababababababababababababababababababababababababebeieieneneneneoeieiebababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTeddgedepdgdodododoepababababababababababababababababababababababababababababababababababababababebebebebebebebebeieqenereseneieietebababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTeddgedcTdgeuevewdfcTababababababababababababababababababababababababababababababababababababababebexeyezeAeBeBebeieieneneneneoeieCebababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdueDeDdBeEeFdadBeDeDdvababababababababababababababababababababababababababababababababababababababebeGeGeGeGeGeGeHeieieIeieIeieieieJebebebebebeKeKeKeKeKeKeKeKeKabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdudbeLdIdgeMeNcVdvabababababababababababababababababababababababababababababababababababababababebeGeGeGeGeGeGeHeieieieieieieieieOePeQeQeQebeKeReKeReKeReKeReKabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTcUcUcUcVcWdgcYcZcYcXdadbcUcUcUcTabababababababababababababababababababababababababababababababcucxcyczczczczczcAcBcwcwcwcwcwcwcwcwcwcwcwcwcwcCcAcDcDcDcDcDcycEcuabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTdcdcdddedfdDdhdidjdDdfdkdldcdccTabababababababababababababababababababababababababababababababcucucudmdmdmdmdmcucvcwcwcwcwcwcwcwcwcwcwcwcwcwcvcudmdmdmdmdmcucucuabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTdcdcdndododDdDdDdDdDdododndcdccTabababababababababababababababababababababababababababababababababcudpdpdpdpdpcudqdrdrdrdrdrdrdrdrdrdrdrdrdrdscudtdtdtdtdtcuabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdudldccXdDdDdDdDdDdDdDdDdDcXdcdddvabababababababababababababababababababababababababababababababababcucucucucucucudwdxdxdxdxdxdydzdAdxdxdxdxdxdwcucucucucucucuabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdudBdCdFdEdHdGdDdIdXdDdIdJdBdvababababababababababababababababababababababababababababababababababababababababdKdwdwdwdLdwdMdMdMdMdMdwdLdwdwdwdKabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTdOdNdXdPdDdIdXdDdIcTababababababababababababababababababababababababababababababababababababababababababdKdKdRdKdKdKdKdSdTdUdKdKdKdKdRdKdKabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTdQdododGdDdIdXdDdIdnababababababababababababababababababababababababababababababababababababababababababababababababdKdKdKdKdKabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTdVdododWdDdIdXdDdocXeaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcVdBdBdBdCdDdDdDdDdIcYabababababababababababababababababababababababababababababababababababababababababababababebebebebebecebebebebebababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTdYdDdZcTdDdIdXdDdIeeabababababababababababababababababababababababababababababababababababababababababababababebefegeheieieieieiejebababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTdYdDdZdndDdIdXdDdIcYabababababababababababababababababababababababababababababababababababababababababababababebeieieiekeiekeieieiebababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTdYdDdDdgdDdIdXdDdDcXemababababababababababababababababababababababababababababababababababababababababababababebeieieneneneneoeieiebababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTdYdDdYepdDdDdDdDdDepababababababababababababababababababababababababababababababababababababababebebebebebebebebeieqenereseneieietebababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTdYdDdYcTdDeuevewdfcTababababababababababababababababababababababababababababababababababababababebexeyezeAeBeBebeieieneneneneoeieCebababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdueDeDdBeEeddadBeDeDdvababababababababababababababababababababababababababababababababababababababebeGeGeGeGeGeGeHeieieIeieIeieieieJebebebebebeKeKeKeKeKeKeKeKeKabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdudbeLdIdoeMeNcVdvabababababababababababababababababababababababababababababababababababababababebeGeGeGeGeGeGeHeieieieieieieieieOePeQeQeQebeKeReKeReKeReKeReKabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTewdoeSdoeLcTababababababababababababababababababababababababababababababababababababababababebeTeTeUeVeWeWebeXeYeieieieieieieOeZeQfaeQebeKeKeKeKeKeKeKeKeKabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcTfbfcfdfeffcTabababababababababababababababababababababababababababababababababababababababebebebfgfhfhfiebebfgfhfhfiebebebfjebebflfkfmebeKeReKeReKeReKeReKabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdueeeeeeeeeedvabababababababababababababababababababababababababababababababababababababababebfnfnfnfnfnfnfnfnfnfnfnfnfnfoeieieOfpfrfqfmebeKeKeKeKeKeKeKeKeKabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab @@ -968,12 +967,12 @@ abababababababababababababababababababababababababababababababababababababababab abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababebebfSftftfuftftftfvftftfZfngafWeieigbebeQeQgcebeKeReKeReKeReKeReKabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababebfnfnfnfnfnfnfnfnfnfnfnfnfngdeieieOebeQgegfebeKeKeKeKeKeKeKeKeKabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ggggggggggggggggggggggggggggggabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababebebebebebebebebebebebebebebebebghebebebebebebababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ggggggggggggggggggggggggggggggababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgigjgjgjgjgjgjgjgjgjgkglgmgngogngpgqgpgngogngmabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ggggggggggggggggggggggggggggggababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgrgsgsgsgsgsgsgsgsgsgrgtgmgngngngugvgugngngngmabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ggggggggggggggggggggggggggggggababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgrgsgsgsgsgsgsgsgsgsgwgxgmgygmgygmgvgmgygmgygmgmgmgmgzabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ggggggggggggggggggggggggggggggababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgrgsgsgsgsgsgsgsgsgsgwgxgmgAgpgBgvgvgvgvgvgCgDgEgEgFgzabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ggggggggggggggggggggggggggggggababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgrgsgsgsgGgsgsgsgsgsgrgHgIgAgJgBgvgvgvgKgmgygmgmgEgLgzabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ggggggggggggggggggggggggggggggababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgMgjgjgNgjgOgjgPgjgjgQglgIgAgJgvgvgvgvgRgygAgmgSgTgUgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ggggggggggggggggggggggggggggggababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababelgjgjgjgjgjgjgjgjgjgkglgmgngogngpgqgpgngogngmabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ggggggggggggggggggggggggggggggababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababelgsgsgsgsgsgsgsgsgsgrgtgmgngngngugvgugngngngmabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ggggggggggggggggggggggggggggggababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababelgsgsgsgsgsgsgsgsgsgwgxgmgygmgygmgvgmgygmgygmgmgmgmgzabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ggggggggggggggggggggggggggggggababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababelgsgsgsgsgsgsgsgsgsgwgxgmgAgpgBgvgvgvgvgvgCgDgEgEgFgzabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ggggggggggggggggggggggggggggggababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababelgsgsgsgGgsgsgsgsgselgHgIgAgJgBgvgvgvgKgmgygmgmgEgLgzabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ggggggggggggggggggggggggggggggababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababeleleleFelgielgMelelelelgIgAgJgvgvgvgvgRgygAgmgSgTgUgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzgzababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab gggggggggggggggVggggggggggggggababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgIgIgWgXgYgZhagXgYgZgZhagIgAgugBgvgvgvhbgmgygmgyhcgygzhdhehfhghghghhhihihihihfhihihihfhjhegzababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ggggggggggggggggggggggggggggggababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgIhkhlhlhlhmhlhlhnhohphqgIgygmhrgvgvgvgvgvgChsgEhtgEhuhvhwhwhwhxhwhwhwhwhwhwhwhxhxhxhxhxhwgzababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ggggggggggggggggggggggggggggggababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgIhyhzhzhzhzhzhzhzhzhzhzhAhBgvgvgvgvgvgKgmgygmgmgmgmgzhChwhwhwhxhwhwhwhwhwhwhwhxhxhxhxhxhwgzgzgzgzgzhDgzgzabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab @@ -981,20 +980,20 @@ ggggggggggggggggggggggggggggggababababababababababababababababababababababababab ggggggggggggggggggggggggggggggababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgIgIgIgIgIgIgIgIgIgIhMgIgIgAgpgBgvgvgvhGgJgAgmabababgzhHhwhwhwhxhwhwhwhwhwhwhwhxhxhxhxhwhwhNhJhJhOhPhJhQgzabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ggggggggggggggggggggggggggggggababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgIhRhRhRgIgAguhShTgvgKhUgugAgmabababgzhHhwhwhxhxhxhwhwhwhwhwhwhwhwhwhwhwhwhVhJhJhWhXhJhQgzabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab ggggggggggggggggggggggggggggggababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgIhRhRhRgIclclcrcthYcrctclclclabababgzhZiaiaibibibiaiaiaiaiciaiaiaiaibibibhIididieifhJiggzabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ihggggggggggggggggggggggggggggababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgIhRhRhRgIabababababababababababababgziiijiigzgzgzhIikhIgzgzgzhIikhIgzgzgzhNiliigzgzgzgzgzabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgIgIgIgIgIabababababababababababababiminioinipababiqiriqabababiqiriqimisitisiuisipabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababimiviwixiyizipabhNikhNabababhNikhNiAiBiCiDiEiFiCabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababimisiGiHixixixiziIisisioisinininisiJisisisiviKiEiFizipababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababiAiBiCiLixixixiMiNiOiPiNiQiRiRiRiSiNiTiUiViniDiEiFiziIipabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababizisiIisisisisiWiNiNiNiNiNiNiNiNiNiNiNiNiNiXiEiEiEiniYiCabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababiniZiNjajbjcjdjeiNjfjgjgjgjgiNjgjgjgjgjhiNinjiiEiEiXiEinabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababiniNiNjjjkjljmjniNjfjojojojoiNjojojojojhiNjpisjqisisinivabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababinjriNjsjtjujvjwiNjfiRiRiRiRiNiRiRiRiRjhiNinjxjyjyjzjyinabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababizisitisisisisiHiNiNiNiNiNiNiNiNiNiNiNiNiNjAjyjyjyinjBiCabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababiAiBiCjCiNiNiNjDiNiUiTiNjEjgjgjgjFiNjGiOiVinjyjyjHizitjIabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjJisiGitjDitjDiGitisisioisinininisioisisisivjKjyjLizjIababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjJivjMiCjMizjIababababababababababiAiBiCjNjOjPiCabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjJinjQinjIabababababababababababjJisiIisinisjIabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ihggggggggggggggggggggggggggggababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgIhRhRhRgIabababababababababababababgziiijiigzgzgziiikiigzgzgziiikiigzgzgzhNiliigzgzgzgzgzabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgIgIgIgIgIababababababababababgNimititingOinipababgPgQgPabababgPgQgPababimisiuisipabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababiAiBivioiriqizipabgPiwgPabababgPiwgPababiCiDiEiFiCabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababimisiGiHiriririziIisixiwiyiJiJiJixiwiyisisiviKiEiFizipababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababiAiBiCiLiriririQiMiOiPiwiRiRiRiRiRiwiTiSiViniDiEiFiziIipabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababizisiIisisisisiWiwiwiwiwiwiwiwiwiwiwiwiwiwiXiEiEiEiniYiCabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababiniZiNjajbjcjdjeiwjfjgjgjgjgiwjgjgjgjgjhiwinjiiEiEiXiEinabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababiniNiNjjjkjljmjniwjfjojojojoiwjojojojojhiwjpisinisisinivabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababinjriNjsjtjujvjwiwjfiRiRiRiRiwiRiRiRiRjhiwinjqiwiwjxiwinabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababizisitisisisisiHiwiwiwiwiwiwiwiwiwiwiwiwiwjyiwiwiwinjziCabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababiAiBiCjAiwiwiwjBiwiUiTiNjEjgjgjgjFiNjGiOiViniwiwjCizitjIabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +ababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjJisiGitjBitjBiGitisisisisiJiJiJisisisisisivjDiwjHizjIababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababiAiBivjKiCjKizjIababababababababababababiCjLjNjMiCabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababjJiIiIinjQinjIabababababababababababababjJisinisjIabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab @@ -1035,39 +1034,39 @@ abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkCkCkCkCkCkCkCkCkCkCkCkCkCkDkCkCkCkCkCkFkCkEkFkCkEkCkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkCkCkCkCkHkHkHkHkHkHkHkCkCkCkCkCkCkCkEkCkCkGkFkCkCkCkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkCkCkCkIkJkKkKkKkKkKkJkLkCkCkCkCkGkCkHkDkHkDkCkEkCkEkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkCkCkCkJkMkNkOkPkQkRkRkJkSkCkCkHkBkBkTkUkBkBkHkVkWkHkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkCkCkCkJkXkNkNkYkNkNkNkJkSkCkZkBkBlalblblakBkBkBkBkBkBkBkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkCkCkCkJlckNkNkNldkNlekJkSkGkZkBlflglglglglhliljlklllmlnkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalolplqlraaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkCkCkClskJkJkJltkJkJkJlukCkClvkBlwlglxlxlylglglglzlAlAlAkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaalBaalClDlElrlraaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkCkCkCkCkCkJlFkNlGkJlHkHkHkHlIkBlglxlJlKlxlglLlMlklNlOkBkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaalBlPlQlRlElSlraaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkCkCkCkCkCkJlTkNlUkJlVlWlWlWkUkBlglxlXlYlxlglLlZkBkBkBkBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaalrmamblSmcmdlraaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkIkJkJkJkJkJlTkNlUkJmemfmfmfmfmglglglglglglglLlZkBkBkBkBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaalrlrmhmimhlrlraaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkJmjkNkNmkkJlTkNlUkJmlmmkTlWkUkBmnlxlxlxlglglLmokBmpmqkBkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaaaaaaaaaaalBlBlrmrmslElraaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkJmjkNmtmukJlTkNlUkJkJmvmwkLmxkBmymzmAmzmzlglglgmBmCmCmDkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaaaaaaaaamEmFmGmHmImJlEmKlBaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBmLkCkJmjkNkNmMkJkNkNkNkJkNkNkNkJlvkBmNmOmNmNmPlglglgkBmQmRmDkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaaaaaaamSmTmUmVmWmIlEmbmXmYlBlBaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkJmjkNkNkNmZkNkNkNnakNkNkNkJkZkBkBlMnbncndkBnekBkBkBkBkBkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaaaaalBaamGnfnfngmIlEnhmbmYaaninjaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkJmjkNkNkNnkkNkNkNnlkNkNnmkJnnnomxkBkBkBkBkBnpnpnqnrnsntkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaaaaamKlBaaaalBnunvlRnwlRmKlBlBaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkIkJkJkJkJkJkJnxkNkNkJkJkJkJkJkJkLkCnononymxkBnpnpnpnpnpnpkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaalrlrnzlrlrlrlrlrlrnAlrlrlrlrlrlraalBaaaaaaaaaaabababababababababababababababababababababkBkCkJnBnBnCnDnEkJkNkNkNkJnFnGnHnInJkJkCkDkCkCkFlknpnpnpnpnpnKkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaalrnLlElEnLlrnMnNlElElEnOnPlrnQnRmKnSlBlBaaaaaaabababababababababababababababababababababkBkCkJkNkNkNmtkNnTkNkNkNnUkNmtkNmtnVkJkCkGkEkDkGkBnWnWnWnWnWnXkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaanYnZlElEnZnYnSnSlElElElEoanYobocnfnfodaaaaaaaaabababababababababababababababababababababkBkCkJoekNkNkNkNofkNkNkNogkNkNkNkNkNkJkCkCkCkEkZkBkBkBkBkBkBkBkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaohoilEmblEojnhmblEoklElEolohomonooopoqoraaaaaaabababababababababababababababababababababkBkCkJoekNkNosotkJouovoukJowoxkNkNkNkJkCkEkCkGkZkBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaoynZlElRnhozlRlElEoAlElElEoyoBoCodoDmEaaaaaaaaabababababababababababababababababababababkBkCkJkNkNoEkJkJkJoFoGkNkJkJkJkNkNkNkJkCkCkDkCkZkBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaalroHlElEoHlroIlEmblRlElEoIlroJoKoLoMaaaaaaaaaaabababababababababababababababababababababkBkCkJoNoOoPkJkCkJoQoQoQkJkCkJoRoSoTkJkCkCkCkCkZkBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaalrlroUlrlrlrlrlrmhoVmhlrlrlrlrlrlBlBlBaaaaaaaaabababababababababababababababababababababkBkCkJoQoQoQkJkClsoWoXoYlukCkJoQoQoQkJkCkCkCkCkZkBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkCkCkCkJjPjOkNkMkPkOkOkJkSkCkCkHkBkBkTkUkBkBkHkVkWkHkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkCkCkCkJkQjOjOkRjOjOjOkJkSkCkZkBkBlalblblakBkBkBkBkBkBkBkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkCkCkCkJkXjOjOjOkYjOlckJkSkGkZkBlflglglglglhliljlklllmlnkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalolplqldaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkCkCkClskJkJkJlekJkJkJlukCkClvkBlwlglxlxlylglglglzlAlAlAkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaalBaalClDlEldldaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkCkCkCkCkCkJltjOlFkJlHkHkHkHlIkBlglxlJlKlxlglLlMlklNlOkBkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaalBlPlQlRlElSldaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkCkCkCkCkCkJlGjOlTkJlVlWlWlWkUkBlglxlXlYlxlglLlZkBkBkBkBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaldmamblSmcmdldaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkIkJkJkJkJkJlGjOlTkJmemfmfmfmfmglglglglglglglLlZkBkBkBkBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaldldmhmimhldldaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkJlUjOjOmjkJlGjOlTkJmlmmkTlWkUkBmnlxlxlxlglglLmokBmpmqkBkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaaaaaaaaaaalBlBldmrmslEldaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCjOlUjOmkmtkJlGjOlTkJkJmumwkLmxkBmymzmAmzmzlglglgmBmCmCmDkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaaaaaaaaamEmFmGmHmImJlEmKlBaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBmLkCjOlUjOjOmvkJjOjOjOkJjOjOjOkJlvkBmNmOmNmNmPlglglgkBmQmRmDkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaaaaaaamSmTmUmVmWmIlEmbmXmYlBlBaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkJlUjOjOjOmMjOjOjOmZjOjOjOkJkZkBkBlMnbncndkBnekBkBkBkBkBkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaaaaalBaamGnfnfngmIlEnhmbmYaaninjaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkJlUjOjOjOnajOjOjOnljOjOnkkJnnnomxkBkBkBkBkBnpnpnqnrnsntkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaaaaamKlBaaaalBnunvlRnwlRmKlBlBaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkIkJkJkJkJkJkJnmjOjOkJkJkJkJkJkJkLkCnononymxkBnpnpnpnpnpnpkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaldldnzldldldldldldnAldldldldldldaalBaaaaaaaaaaabababababababababababababababababababababkBkCkJnxnxnCnBnDkJjOjOjOkJnFnEnHnGnIkJkCkDkCkCkFlknpnpnpnpnpnKkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaldnLlElEnLldnMnNlElElEnOnPldnQnRmKnSlBlBaaaaaaabababababababababababababababababababababkBkCkJjOjOjOmkjOnJjOjOjOnTjOmkjOmknUkJkCkGkEkDkGkBnWnWnWnWnWnXkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaanYnZlElEnZnYnSnSlElElElEoanYobocnfnfodaaaaaaaaabababababababababababababababababababababkBkCkJnVjOjOjOjOoejOjOjOofjOjOjOjOjOkJkCkCkCkEkZkBkBkBkBkBkBkBkBabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaohoilEmblEojnhmblEoklElEolohomonooopoqoraaaaaaabababababababababababababababababababababkBkCkJnVjOjOogoskJouotoukJowovjOjOjOkJkCkEkCkGkZkBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaoynZlElRnhozlRlElEoAlElElEoyoBoCodoDmEaaaaaaaaabababababababababababababababababababababkBkCkJjOjOoxkJkJkJoFoEjOkJkJkJjOjOjOkJkCkCkDkCkZkBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaldoHlElEoHldoIlEmblRlElEoIldoJoKoLoMaaaaaaaaaaabababababababababababababababababababababkBkCkJoNoGoOkJkCkJoQoQoQkJkCkJoRoPoSkJkCkCkCkCkZkBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaldldoUldldldldldmhoVmhldldldldldlBlBlBaaaaaaaaabababababababababababababababababababababkBkCkJoQoQoQkJkClsoWoXoYlukCkJoQoQoQkJkCkCkCkCkZkBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab abababababababababababaaaaaaaaaaaaaaaaaanumbaalBaalBoZmJnuaaaalBaaaaaaaalBaaaaaaaaabababababababababababababababababababababkBkClsoWoXoYlukCkCkCkCkCkCkClsoWoXoYlukCkCkCkCkZkBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab abababababababababababaaaaaaaaaaaaaaaaaalBlBaapambaapbpcnulBaanhaaaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkCkCkCkCkCkCkCkCkCkCkCkCkCkCkCkCkCkCkCkCkCkCkZkBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab abababababababababababaaaaaaaaaaaaaaaaaaaaaaaalBlBaapdmbpeaaaaaalBaaaaaaaaaaaaaaaaabababababababababababababababababababababkBkBkBkBkBkBkBkBkBkBkBkBkBkBkBkBkBkBkBkBkBkBkBkBkBababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaalBlrlrpflrlrlBaalBlBaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaalrpgphphlrpaocmWpipjlBaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaalBldldpfldldlBaalBlBaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaldpgphphldpaocmWpipjlBaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaamhphpkphmhplpmmVpnlElraaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaaaaaaaaaaamJlBlrpophpplrlRpqmVpnaalBaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaaaaaaaaaaalBlrlrlrmhlrlrlrprpspnaalBaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaaaaaaaaaaalBlrlEptpuptlElraapvaaaalBaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaaaaaaaaaaamJlBldpophppldlRpqmVpnaalBaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaaaaaaaaaaalBldldldmhldldldprpspnaalBaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaaaaaaaaaaalBldlEptpuptlEldaapvaaaalBaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab abababababababababababaaaaaaaaaaaaaaaaaaaaaalBmbpwlElElElElEpwaaaaaaaambaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaaaaalBlBmJlElrpxlElElEpxlraaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaaaaaaalBlrlrlrpypypypypylraaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab -abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaalrlrpzpzpzlrlraaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaaaaalBlBmJlEldpxlElElEpxldaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaaaaaaalBldldldpypypypypyldaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab +abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaldldpzpzpzldldaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapApApAaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab abababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab abababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababab From 66689dbb511724df573f4ba3901b622853178219 Mon Sep 17 00:00:00 2001 From: Remie Richards Date: Tue, 14 Jul 2015 19:47:46 +0100 Subject: [PATCH 30/89] Adds a tool to convert the internal structure of a .dmm (or .txt form) of a Byond map into a human readable format, this format is also more suited to automatic fixing of conflicts by Git! --- tools/dmm2tgm/dmm2tgm.py | 79 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 tools/dmm2tgm/dmm2tgm.py diff --git a/tools/dmm2tgm/dmm2tgm.py b/tools/dmm2tgm/dmm2tgm.py new file mode 100644 index 00000000000..ae22a073eee --- /dev/null +++ b/tools/dmm2tgm/dmm2tgm.py @@ -0,0 +1,79 @@ + +import sys + +# .dmm format converter, by RemieRichards +# Version 2.0 +# Converts the internal structure of a .dmm file to a syntax +# that git can better handle conflicts-wise, it's also fairly human readable! +# Processes Boxstation (tgstation.2.1.3) almost instantly + +#TWEAKABLE VARIABLES +map_file = "tgstation.2.1.3.dmm" #Map file, .dmm or .txt +output_file = "" #Output file, .dmm or .txt, leave blank to overwrite map_file + + +#CHECK FOR PREVIOUS CONVERSION +with open(map_file, "r") as conversion_candidate: + header = conversion_candidate.readline() + if header.find("//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE") != -1: + sys.exit("This map has already been converted, cancelling...") + + +#ACTUAL CONVERSION +with open(map_file, "r+") as unconverted_map: + characters = unconverted_map.read() + converted_map = "" + in_object_block = False #() + in_variable_block = False #{} + in_quote_block = False #'' + in_double_quote_block = False #"" + for char in characters: + if char == "(" : + if not in_object_block: + if not in_quote_block: + if not in_double_quote_block: + if not in_variable_block: + in_object_block = True + char = char + "\n" + if char == ")": + if in_object_block: + if not in_quote_block: + if not in_double_quote_block: + if not in_variable_block: + in_object_block = False + if char == "{": + in_variable_block = True + if in_object_block: + char = char + "\n\t" + if char == "}": + in_variable_block = False + if in_object_block: + char = "\n\t"+char + if char == ",": + if not in_variable_block: + char = char + "\n" + if char == "'": + if in_quote_block: + in_quote_block = False + else: + in_quote_block = True + if char == "\"": + if in_double_quote_block: + in_double_quote_block = False + else: + in_double_quote_block = True + if char == ";": + if not in_quote_block: + if not in_double_quote_block: + char = char + "\n\t" + + converted_map = converted_map + char + +if output_file == "": + output_file = map_file +with open(output_file, "r+") as final_converted_map: + final_converted_map.write("//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE \n") + final_converted_map.write(converted_map) + + + From 1f7fa1aff1580863d334ec108b811de934d44405 Mon Sep 17 00:00:00 2001 From: GunHog Date: Tue, 14 Jul 2015 16:17:58 -0500 Subject: [PATCH 31/89] Upgrades to variable lighting system + Sprites - Moved to a variable lighting system with five lighting levels - Added sprites for brightly lit borgies, and for the buttons by xxalpha - Added a power drain system - Removed a now obsolete check for flashlight item in borg inventories. --- code/_onclick/hud/robot.dm | 5 ++- .../mob/living/silicon/robot/inventory.dm | 5 --- code/modules/mob/living/silicon/robot/life.dm | 4 +- .../modules/mob/living/silicon/robot/robot.dm | 38 +++++++++++++----- icons/mob/robots.dmi | Bin 94407 -> 97634 bytes icons/mob/screen_cyborg.dmi | Bin 17952 -> 18199 bytes 6 files changed, 34 insertions(+), 18 deletions(-) diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm index 5b506d6aea2..cf2eb309604 100644 --- a/code/_onclick/hud/robot.dm +++ b/code/_onclick/hud/robot.dm @@ -55,11 +55,12 @@ /obj/screen/robot/lamp name = "headlamp" - icon_state = "lamp" + icon_state = "lamp0" /obj/screen/robot/lamp/Click() var/mob/living/silicon/robot/R = usr - R.toggle_headlamp() + R.control_headlamp() + icon_state = "lamp[R.lamp_intensity]" /datum/hud/proc/robot_hud() diff --git a/code/modules/mob/living/silicon/robot/inventory.dm b/code/modules/mob/living/silicon/robot/inventory.dm index 496d44d7e04..01cc8ef9a31 100644 --- a/code/modules/mob/living/silicon/robot/inventory.dm +++ b/code/modules/mob/living/silicon/robot/inventory.dm @@ -15,11 +15,6 @@ if(istype(O,/obj/item/borg/sight)) var/obj/item/borg/sight/S = O sight_mode &= ~S.sight_mode - else if(istype(O, /obj/item/device/flashlight)) - var/obj/item/device/flashlight/F = O - if(F.on) - F.on = 0 - F.update_brightness(src) else if(istype(O, /obj/item/weapon/storage/bag/tray/)) var/obj/item/weapon/storage/bag/tray/T = O T.do_quick_empty() diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index 26d994e3314..c0ad6477f9b 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -25,10 +25,12 @@ if(cell && cell.charge) if(cell.charge <= 100) uneq_all() - cell.use(1) + var/amt = Clamp((lamp_intensity - 2) * 2,1,cell.charge) //Always try to use at least one charge per tick, but allow it to completely drain the cell. + cell.use(amt) //Usage table: 1/tick if off/lowest setting, 4 = 4/tick, 6 = 8/tick, 8 = 12/tick, 10 = 16/tick else uneq_all() stat = UNCONSCIOUS + update_headlamp() /mob/living/silicon/robot/handle_regular_status_updates() diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 2a0dfbfc541..3e5ebc62337 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -60,8 +60,8 @@ var/tonermax = 40 var/jetpackoverlay = 0 var/braintype = "Cyborg" - var/lamp_on = 0 //If a borg's headlamp is on or not. - var/lamp_intensity = 4 //Some borgies require more light than others, such as miners. + var/lamp_max = 10 //Maximum brightness of a borg lamp. Set as a var for easy adjusting. + var/lamp_intensity = 0 //Luminosity of the headlamp. 0 is off. Higher settings than the minimum require power. /mob/living/silicon/robot/New(loc) spark_system = new /datum/effect/effect/system/spark_spread() @@ -184,7 +184,6 @@ animation_length = 30 modtype = "Miner" feedback_inc("cyborg_miner",1) - lamp_intensity = 6 //mining lantern if("Medical") module = new /obj/item/weapon/robot_module/medical(src) @@ -204,7 +203,6 @@ //speed = -1 Secborgs have nerfed tasers now, so the speed boost is not necessary status_flags &= ~CANPUSH feedback_inc("cyborg_security",1) - lamp_intensity = 5 //seclite if("Engineering") module = new /obj/item/weapon/robot_module/engineering(src) @@ -726,11 +724,16 @@ overlays.Cut() if(stat == CONSCIOUS) + var/state_name = icon_state //For easy conversion and/or different names switch(icon_state) if("robot") overlays += "eyes-standard" + state_name = "standard" + if("mediborg") + overlays += "eyes-mediborg" if("toiletbot") - overlays += "eyes-toiletbot" + overlays += "eyes-mediborg" + state_name = "mediborg" if("secborg") overlays += "eyes-secborg" if("engiborg") @@ -743,6 +746,9 @@ overlays += "eyes-syndie_bloodhound" else overlays += "eyes" + state_name = "serviceborg" + if(lamp_intensity > 2) + overlays += "eyes-[state_name]-lights" if(opened) if(wiresexposed) @@ -981,18 +987,30 @@ set category = "Robot Commands" set_autosay() -/mob/living/silicon/robot/proc/toggle_headlamp() - lamp_on = !lamp_on - src << "Headlamp power [lamp_on ? "enabled" : "disabled"]." +/mob/living/silicon/robot/proc/control_headlamp() + if(stat) + src << "This function is currently offline." + return + + if(lamp_intensity < lamp_max) //Lamp is set lower than the max. + lamp_intensity += 2 + src << "Headlamp power set to Level [lamp_intensity/2]." + else //Greater than or equal to the max, so turn it off instead. + lamp_intensity = 0 + src << "Headlamp disabled." + update_headlamp() /mob/living/silicon/robot/proc/update_headlamp() SetLuminosity(0) - if(!lamp_on || stat) - return + if(stat && lamp_intensity) + src << "Your headlamp has been deactivated." + lamp_intensity = 0 else AddLuminosity(lamp_intensity) + update_icons() + /mob/living/silicon/robot/proc/deconstruct() diff --git a/icons/mob/robots.dmi b/icons/mob/robots.dmi index d134e422131bb5ff6ea76368aa63d66fa789f431..6c532a75f43816cdbf27a59a54621e780aa4fcca 100644 GIT binary patch literal 97634 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

o(Tqi&zu-?6M1sM|5pC4_5t? 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

;3g}_GqCL=Pcd4&GE*@H*t~dg#H)9C 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ãU{}2-ybsLX_qXdYr@wChldS& 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 D#%qNj literal 94407 zcmag_1yqz@)IW+pG}0(3sem92N(fR?A_4-^skEd@NDM9~UTuN#6 zm8;da7oCteI9$;yFCRvWSZ{CcHMy~A>UgU}$n)WZzV7Sq|LX4GvfDZ@_h}XZYar5m zI5KXFSkg6O9$t+q7<{Eo$JFj0A0u>omMmAC-o;;=j^bYOO!1FQD<<~jnE|a2?;`n? zvt!>~H_9I&9(;HsCoqvDtl;bYETfB<&*@xz0^Sg{drFPepmCZ{Nz6*x!w2Okj2+yJ zj-r|6vGZR8czWf&lC*BBvXL;eaH9c&@FDLKt5&f1bCZ~;EX8rRA!+iOVR?1(>QVW0 zvEdrR7tKFPgs%5?_9nJ<@e@%uMaZZ?-O~}$t=+`MKf14T>^l`bhs$3Kd?IR46BhfZ zTzsU&?>pyxGjVJjyc}U)u1$cKJJ=Up>+EwmEOKw=6k+vu}Tw91~a6{)sy^u%X(-}my`$ddWk5k)9+Znb~(G~9%~UiW=Xv~Dc*Ic zMtQR7~6*_Qusf3U3`irKxo zr+evVz}S|1E1C~?=Z5@%(8R>f%KdtuBl`(4v(#b8L}-s(In&(S&8HpSz8Xz<%upsR^x z&&=b!uL%9iZ*1(FS0geOn!Ff&zVfwIKWEz8-3&Ru!6L{GS^&iF%yn|K6`)bZM8Iqf^%QQIEU(*+W*+X%R8Bqc`{Me!H9+L(-7bRs0+Mg0KMRb6tft zvTY4W-7rax_PF2hecjivKgP;5Q?6MRHOG%D3y| zP3L0hA()w95(6PH^Uvx$jCo2y5V&%{X1~0JARBLnjH`0K3)xW zB~Unf$4*R%8<5E(G@aAm2+pyLC;Sns=bEAcrgj4yqa%!hJB`~C`kRo>B&^x-=00l^ zQ?uvaM^tYuLOPc)B%z&c&gweL&aSsSfj|)i3QxelITx>Sr~7=vQ+b&@a4P&~i~-y@ ze$$DU8pS(<-Mfc*DY6QWk8+6r9f8qW-~|7}_Rojh&h5R|l~l-aw)otoEzSJ(k=8pm z>SoEMk7<=fm=|ct2;1oJmv9xRd~S!ois)ZWQI@TGb^pWMsulsvICvc|U}{UuH2BBk z*ZDj@NLgdndfZcHcUs{KtuXq8goL>hGWzAzu0cb)0) z?WidF_SVZ{#1$31k&>UOKx*G>i3043$2Y@D6XhK6R5WobN?Uz=9)9*X-x*EfREwI* zFe%ydY_iF6PwLmBr3l4PQ-lsRnwH9K$kF3Jt7JqL_YWDTD;XWHGx__lzhS2mu0m7R z&$+~El7@B;`kwBVyl`^5EGjHaH}m{uBLr0W0pGDvQhJTQYL_wTd&E@&&u@*F#mD{m zc1hpj7;HEBGT*ewMx~$(EfY0we$qozkQ)}q%iY6aFbf=sQ1bKw=26qyv-}<@lhnVO zA?BQq+2(9Zat)E(I;@%`%AERi6X{aNm3(K@mr5`qph)Z4q25DP9r7lW*YgB-P1jK<(Iet-2DL( z1EY@;OFy+6PHvKe=jG;_4p6J#%n8cs=P4!Y5u-=bPm)4PG~R zEJTaBt0~HmG$18^VOKUrFlh@YCz_X;A{}Vd0#5zoHVtj<5rbPBb?Q|OmyZ$BHz$KK ziVf82NGDh8jOFybQhwV)&cZ%fW|hny2?b$)Tp=>NeGbUL zeLw})`rp)B|59M3+gy15AyJ!xS%65?+GyVTm`j>)Ema#U|4MQrt&I?CGyh3s-~9U2 z`j0s$e1)?bc49dZ9A%f462pUYYuLs}rs%cF)xA=rt+EX;d!DT0=uJ6h3WMbA^zqZj{BpV|!{Ep<0_-`&a3VAYjsle0 zGQ$2?*~mBLzo|4dLT4Lv(BmuATo9HQ;BNuXD{G0-2+##zSVKM#f;u~v_Hk6O`tUS; z;P5$2*IvI|u+0n^&Qo|`dmfvrlQ;8{Jv@^q)h(5+sDB|x#Bzo6L+QV#85QgBVJi>v zIB)RZCxVQDOz2gR(5M&Y^rMJ*Uq|Dm=SENX%Ez8J&P16!KOKG1fjr@Sk+rvD$VT@> z^^?*UNaMzKVmTcu7xv(HfKEJ1OZpO>$-~>9Jfwp3oP_fxrgy4w(`a9|swc`_Req^+ zZ+J6qm8JOTBR@83$po<# zYXuB*qjczcRe$<8gYe{?Bg4+dOMXP~H_N=qTa_ej3kxnU{DC@mufD38`8tGE_rMcJ z-B>2Y*{`U63-qD10@csWIJWAeka2!&bSQYm_5cVM-nhkdW9E&n%bou8k2qr%fq5Nz z4Qc=OBO|^wgts51VVrg|?F3%zQLr8U13&niLuUv%Q>l9CzE2Cc^Qgq*x(Z+`{UiPf zh^I~;O27daZFS09&?qOYihz^nltv8jx81gCHxzo`ejTe9z}W-)AM-RN**cspDPtr4 zDUZ=l>aR)mfv3&xP`vA0QWVEV0bP{mIkj>P*+vs50T@}J6-g)~J#33|><>t_Hk!1R z3(q{`fR?R|{C^O_bo*UrO2S5Ouz6GsS)+nM>>{-@yqeU;nm z_NlvM*u}Wpm>i3*iTG!dBP=M21@UZ+3cmLII6NX|0Kf|D>*KqDS56Uk=gKgq)Zc5Y z-TaE3b*KTZ`Ukw+oVu$O&i=cU{QUD9`F~$xjvoBqpv=8mP*^C+yu!*SGl4i~5XQna zH_18NEHR;-W|{P4BrI<5?MQgJ=L0Pwn^+=cnovj*&oWXy5z{T7?s1;HRb@)`LF^yU zfSQgd0aB9FJ2qMkOvn7%kWSP5n3(utkB^sk`=f-O+=gJUXmuNRTw3`g(eQ=iV!>Qw zCD7-BjC9S@j4`0d1sOwU7)pSMc*W=OKZSUlkD0MuUJfZ)#BtVCR$l$}>(@+HW#wqC z^tVqX>D4$^4Vz^TN|61VBm-Rip>T53gPX${Vb2@VX0RTMEsPnyaUBIsW6_q8!!<+k zAn^7O22A*$zkvo*Wj~=i16@os~!q#J3GfAPo1Yv@!J++wzr*j?in@S zC5>B}2o1i(F*FNI#HqhJQ`l5%8;muI*OJi1fkiPn)z;zB5tyoKxU8T+!OV;W$|xbTB)4@^L+skR%E zx9jB(bCbekvM~##FQI?_8XThzLDLXs<3}gy-{n|t{jZy+Lf?Q}@O_FxbKO7e;=SK& z>0dXxH_9M9O8J{Eq~<=eKzOEcsjt@Y&UUE2(!r+aA``^%BhYbs7=Ic>c-heS7d)Bu zwN1azlB_6-e_}Q$L?i%up0f+jbXP|Smc4bgz8H*-9&XFqdp*g7t4yPJ=oD9LK=YlH zM%(n}m!==dW0Z!_A_bH>bBM_03IAEUR~@76DL^@Z#k9VpxYnfIYD<~-V7Ea6e zy!0FGmapylwIe-K)8gcEYlQS&%Zdl@UzucgZjxlCRYw?KihOD9Tbg8Orh$RS z&P<0gcP5GMjF$O7mk4lrO0TbIh6_#9pW}JyAX!w}4d;&p=HrN-&sw@>$-WS!C@4Ay zX7Kmbq6zAOub@$D8`)Vk*)(tXbDV%w_XR#VitWA4@f8{#Ib9e`_UaAVMukCa+}o^b zU9-M7T&#sXr2imQbJIS6RI&i+Y@WAq_#nYcu`FixtJb;)Z)99k9$py3*Uilr#b;9! z`K6`ZuZr7K#2oJ)>ApI3KbE2uR}|0nKL|R2ev-G+7e&NR?mfllPmV80AkT>EXIa4! zZXOEY@5eyCHVb$S|YzhW{&?$nPs zlWP`}NHVp)Be+y-dU~11TAHK|rCJ;Wy`wY@qN`p^nIgrh&RE&q*gyA!ZqC73V|qRk zf0{tDl)hyvA`McKwKnqnAXxDB(WF}Baa5+D=K?92JXb(JjvvnAeWOIm;aUEx-;MZe zykQ14*bKp+e|>pKbM9#%HjlA`q1EWLX_SAxosGms$jvHQ%>GfE4APqJxr0N2ZBV2w z*VVA4g9}uCe!e^p4M;ZCr7S$xy`~8mw;tu*?{=&b8O!a2Fe240+ky#RF zu^8`@1x4hr>*=*c={v{&E$cJP5T6awx~5~Jba*6{@=NpCBT6N0(`VHh-qs)dlb)HO zpN_AsVU8s+7k;v;V6myKiO9#r`B&9W&;2OMre%1dgfx3YNj1IMc3L7Hy*L$LkQv$nGY~!_(y$ zY&1*V@5K22wZL%45I0biHQnM@!C_H^G947qvuAtZq}NSB@JfRhZIzcU-TQ!zIOu ztW;!sxQB9ePw#VoL4_5fEZMPaVpgJTw*&_J_)63BCUU;I|iN6B?_@E2wMUa^a?efi9+ht(`?Y6SSr-qMaDeww3Iz|?B9N+EyaqYg#c@#SL!zPAy!q9XW*zRC{qMVR6gK$;17 z7LC@ws_||R`~Z2+WSEzehi&REfX7wiz*Y?6U_x?Sss@iIfB^825#~cQO*|;BaEVZWt9)+k zBU;?g3kdI&e|=9Fghww1r>c`H85p^McxR%F4Q_k=RV`W=MJTOxqE#_QT*UUEcFCRG zAFVZX1P68@B3~i9MS-0A5%BUqpm~hnIQQs(f#w{`|KQJ!?x%WsziKHyr5Vely#=H} z+7REnco&}VQIojrrQ)M+&+y9N7tiL<<&!ZvW;!~5$~h=KUodJjTYZ}{+$bo;<~Uh_ zcKY-0K6k2dVc9@=VFu=vR}CG-NAW*-!ZRD^T(B(IPq~7p82%qXnLIAy!;zYK*SNU2 zYFEA%7CsU)eluPQd%_?7LQJgJ0@EtJ!QFgSma1TTbW~>trmU6(uG#{S0YF9AS zh`RiCLU3=t<326KYA(zc6&2On*XK}2t_ELuuLlKO zQ{5b!;l!$N&wXA#zKQ6W^mnB6#*@2Ls6afTOgIKD`D%rD)8&$eKzuzP8V;HYFkC^TM_ zIA|Z_qpbLlvbMQp8e4SBKC%wP+ou59wk=R5^}kaHCUl^bnk)RauY{TR-TU4ZBij+n zp$b7(^UY*zKl5u$)4Mm^Gn<=D`7qnRs%q{VmuTFz9r{wTk(89wx#4asFvp>0Pld(; zez5An-&EIH-w#8QpTC4~s_k4iP@wW>1Z*MTi7~YTYEgAEc^4g9=>pb$q{`Y)w6z1} z*{KlT>{Rl~$^l()P)Q4Cg;u{ewTeCj`LZ6q5wpdK%Y1E{>P6W)#kD6+ERBdkH0Aq8tWSv)cFplZ?*L-xf{@6 zDb;KLPn7EG`&2!~Z%|drahwwy?hmwS1O~z5dhN~61V^`iat^XTQhlOF`+BcQ%Qy1G zf-YyzT}r?aldG9VQZ_{z)00KsoG#^2XdAX|3AXY{%7YhDT78%OQcBAdPldu?rm*mV z@+_Byv-p$LsK0;z<~tYPCzi(Bs;R(oD7G8izGTTc|DUv~+%H6q&m$DTy6Uh|G_#z) zDU%gGbbfwrSZ*13(mOOXCF|(qbaxPc zKw$FpD%Tu`12%3hEFYAABnq%zt6%eKR_no1H7J?@2UMPPPEL+C-hkp)D%?P**}Uw8 z7#}wU=iuBgy1QFtY=*4`4Ros9rHdGnhrwEE)AW#cfn8*f-=MnU4mfrbOrBBVM!drJ$$ReEw6qx4*wLb*~u@;%VKLQa?seDL!Nm zc`7IP^HCTpi$~QD_Y-$1Q=-Uv)5_*9pv#>Kw^9V})tTAa=GKy*e@T0$EwfQ8naBEH zLev+%wsCvaE^1*z>nK>QS-il=9MfeG{zrT za?3!robr!MWl4Bu!+s78^?>;Kcxr6fUCQdkuNDR;tqk2NcHcCTEC7C?FzVNkTYCkr zTQT%xIy<=x!1b)D+ehf~KBlo@@Ft4$fs z2*AH7j9l8~Pk5|1_`81mc$6@Cld`hyT!-fU*jF4tXH044az~G2H_F4$?{v!3;47uc z{N9xMP0M_KV655KJca`6{~!>#B|pAGJyUz=H%qrq2~z*ISJEo+tZ=H$2!JQ8Iyvh_ z2^oq=aXf3P`s5ugfB)86$}rjYK{#uf7S+JR3u`P8i*7xM;~eyhv*95mziyo@c<$UH zn0%#A?Q=cfQoIqnbqOVVYd_Zw1HgoYhm*W|V*KhR%|D*E`v1@KhGBVLfJ*`W+{S_| zo@L9_N-h5u6tI0mvD|e*_HuZ&qbWQ{U9bUP!vY><DSbm7#;{8VLAjs@p8Ii-~w^V+d2 zsoE6r7OWjx`}#i@54TzpKG~TK1xqU3vA8(d85>B#7W?u))9x$))u^_QpC>-|lMPL% zdthAe_BD9>8g3t+NZRMF_3;+=D``e?0ZkT~jW^Urt=kqbwvx=Uol-(FEFe@(N(4_? z+5P7&CU+^*Q%)1$9^_vKVbDCxxysew!lV<H)P|3d%3Z7G5Q&lNE0Obx(#0or1tf#m5vGk1;emmCO2ds_KETwq4 zJ?lfN$c>$wb7|sO$O+)i<;DW=_EL%NzA10gL$us!5*n@Ra{bo5JAdI&7u*h$>+AJ;rq>__Ul=y%b=MA|w!&$lWp^z?Ezvn+~zZ5uhvSn&wkCuPqJvvu(Yi2r#H`XKfJD*PqS z;A2qS>#pq8ZT$9%&XRXrZp$cx9}6uC=y0saV*)&)G*#OpuN!9ZL2>hl;{QNzD}Z4O z$<2lZ$>HAXSKN7VRrD9R>ez<0P+X|tt^^ZW^7j&`dwRJlCcsC4;&QBJ@$nbJf0rN} zSFay`@nZ&Vn-Acw7*4fKO9d#P9w~2~<0tKdx6T;mT!*g%YIOWlC544LeJr?V{Jo`P z8%7@vcCSoMPv>j&*SykKY8D~f5Jm%HQCClnWs}v?0$Yhb_uH|x?0&S-V@dzNy#RX- zU?ouN*%_*EV+bbrwtxB_ZK*J<-&J>g@($H|@pOV;Vpp%f1(o!Fcz#35%=k(=mI($# zWV|G(Z2WtBY5H*oVX-026la`^`1j0u;aGRlV{Yy^mq2uv(&)W^q-8ei6{hkRMqi2~ zOu&d-_4Mf=`tme>iE8O~dFd)D*(D$dHEHp#N}7e50)lJ5sX3IB}s)@xL`S zrJs(;FxcRdF!H|# z=&}7jI}VsB^5Q{W!l>yVmhcliBII_dtJU-xpY7k{Utw3%X}VSb?7zGhluOmjT##n( zQc(SwFN;b#htzoF*@yA)wi&MRh@mNxMP0BR<;AAFbcNUoJkzRQp0^L~$~_A6HGbIyh5 zs3+Clkxoud29z&8mB=%FuPgI_qyE5og$;fw(jCQQmqXJ7FyuHW-vg}mga<#S2QR7r zdsE<8m~sSN0aX5K^~cAO(Dmdt;7MIN%p80omRe_+K40=(e zZD^RU+(!KMNpGd!#Q3;;9493IkM^#u1*~S_O^*m3l&|L0jga3P?tezrg}&z`nUfrT zL4O`QGHmgwX>=I7l^|}R8pHY>xa9pw6IVumyRlr2P1Nba(D5fgLChQ!g#O#YE3gHh z`>Y=xh7PSoApPzI*z^Z<5DDTyWDLR(^dUYz%QP0pF z@fB_HL3FgjF5Kq5*BoMg|2AFu`?muiSl4QC=b7wQ#H2~@j~~wyY#@NJ!@L!GlfHsx znA=1SXLN$5#M(4C&>hbabp~?Cb0M*71&1qb~w|6M7i6s$$Op zKyA%oTty7XItz_1*l7)`Y@;5LO?_1iC5w>*Juwbrxj0ZXi*yL=;v`VqV!0<~sG0dnX9W&CMj@6<8MR#cn&DhfAqP#-AM3r7qgJCd7}l=R@RUr05% ztfQmDGiLX(jZMzxs|HAE6Sw9Umhf+Utn~6_g|itPfK=>kZ|-CNU7&b`gjB&apEdKI zEq^9ExLK~Jr}sinFTvQzsDLDhidH~Ox%pZ?bT}jUfJRw+!^Nj@wzcW7gH$MglBcBc!Y@8uBpIv@oG07ahKl=6DS%o!X?k9tn16zFKkVf?YVzB)-HR! zLD5?oS)0L3LP~l=?W#X=Ed9@Fl10eSn&X`pBif=yi7eFx>UW=KyFLNo@x<3t$tLI< zdl*g;AhyHlBUL>-#FS`2-66!#%*li9E_NxgGuE*2V8&&%?O;mIJRE}pneexn8pi`Y zm`oxb)g4#m8-fn>v=eNOz!*K1@K_*{P>Of`t3jDOJJAv`Jy!irmQ~Z`&w`O7s%+2B z_Lt5k1lkl774c5?7Ggj~(Xr#{_%~wz(faG(f0@Y<@RY@~sqOqBu&tlcd-nnT07`+G znVApnJeTtwIH>OQOGrw}DlR6wckkXbc(fn={UY|m>`t?_*s6CX;Ka8)ec{Jqejm@CDbpK@b_RV%h4>Pb!eE?yL;vRk*{;G)c`3@h8GRbp= zOp9#a93Zv}r@i@>PcpvZz>DQ6w+BRXh^|O1E4M!v`~39d6?gAr8ag@^#{N?AE@T+J zb1N~(Y=P-dPY*-CaF4itWb#H-Dw@_l_Ml`4sI08y;pis0x&eYp#EX@I@PJq=MhJK? z#U)2YZQs`dBo=&1>guGQHMxQCdO4A*ifDCCq=}(n7}6#dLwb&J=T1pU87{MsyX;9v zv*c-}brc&_fnHj2^0WO;%7b5a>CXl}iMUm>YzQqdzPMu<>j7N>fsu!YN8Z-<79gUi zZCX2)gwcB#H06}JZ%K~L#x?;YVF@Df4QuVEA`UuFuNwvPQ4!l~7bGUqeN0MnoaG6> zdg`@7OzYgWxwWNjW)_7U9LzU=5=G0WZ@(db8TQ!RoOQCyqAYD7J}}ye3&jBdLENKT z*FNyjd*|MmWBRZVSikK<`|{RPGrxoHGg}^8lOBfA;ztB8e~HpoMzYf)iaaGDZKWE1 zMYCJDb~cjw)oiY+Hv?_=Bt``^%<+c117eS@J*LVm_C9c`$@rZKLyPlBpZjIAw`fQh zSsgu@*?AKKbzn&Sf-+QfyicH0`%8CGDCj5fOdj5viUwHTGmLNukn~ z6XWga3OxDaML)WIY`HmatQU}=oua*!`N~ZXt;B%m0%QQtb)0}ny{D$8kxZ`5)UK`P zxswkW#PquYsE?HIfH5U6bC?*OcN`ub0$(?r-#qM{1(%4eu=Eu5J#nH98(858>EAo; z+(JB9AW%!KOm%duAmc3`2(;;^@+McE%^v7=d|(&#i6`R4lH)t=J7j%mAwfZvn$E!I zdQqaSK8?>G4loaY38Vfj=9nl|u=D5Uq?3sbJqwE?i-#|F1W$NjBR<&43FcZ;V8<TTyS$_00YDh?j+_C#yeDbS#2X7agS3IWyrMxaRPj8e0#swl zicG@nqDMm9+}xXDY5FE6MH=mz?H4L8d-$9Ps>pWQNxt>gYV>4W2 ztC-rP(Y?UfOn^hkm1c9#`OewU+OyGYH68(hiEh!+;htRD5cPDG$7N{7u<;SFovg;a zz@K|?(WdkLrOr3I4QtG&b6)Al->-)l{ioKefTd{6RobYBF64YA`i|Mqg6klt`Jvvy z!HMpm4ex`|s87d}N|CHG*VEzXhQ!vLkW-PZh-BlL`j^YXum3*oAr)%Q$PK!(j0MyBoL$lP1C`lE4EHc74v zv#p2aAUgF{0e^-TZ=j2xPhlAG!N7Lz?0vphfB1v1;#nsl0BG}*9_>;=Sh#5wHvdN1 zFvO<+W=yZ17pIPVYLOu~T=WSGbW0;;d?UVIJBd?6HC8y~so3-CE9%`&)X$Y0?K>x^ zftd@3Wh*BxP(8Ds{3D;5yIafPT)gWhqt9ZXvgPeTN)>BQ&Y&-WcPW=Q7rGYJGJ$Ei{Ks%qQ8>$H+~f&eg+ zL)z3r>{nND17hUR4506Y;jTT^&o44e6FU!MWUQ|IbC@JZaVg}wVsl86JFF`>a@82D zB-ncPd@^IV73v?A?hc&l;p#9eK?Xsy)#}U=*5F}>ouNA zoR_q*&EA6N`1Cl(x{ydwR^O{_vFoKpCqPIhdpoIA5mDm=&YEde0;v@`MBj<)S;MArqk}ur@veY^Z0ODY(P9ZFdK*@5(Dx z)N-1L$0?^J=jtrWT5s@FEg5CAHoB0%@lFJD*jBrZH+canI*n6up<}x1p48=rv2;y0 zh4~R;Q85(HeKorFq4r5t((=`kj2z(TbG_-M>_NUZi)uefS)#s1xOLjO9035-jnV1L z*Rf2&M7Rj@6J?GtbY&db=&5whj zwat{6AeHFe?;6T>&r~_zPQiVqGgC?_|E#I4J#n2>9X9jZv`|IUAFs?sj;jI5S{C^kK9P0_iuHzV)Uxn?cto0Q>Brd}om%<;U@f6ap{(Z4WDR$Q~GO9{gSAh*O zT>X}R2|0~Pq_DhL8?d_rYNRdf5kvHPH0(2%?1!xxmeP=R%@4ow$*F1t4GqM`(j_Lx z8%J0aqmhg zrdSnB=5N!I1EJLWMgnk@M?cfEN#tEFa*D_wl7x_<664LH1|A7|zS-TPGrcWK{u+&Y zL1P>Q{&_KfH^f{T^D49GYX6DU0rk{9d?9HruKqQf6Jr`ynir^)WvXR&8?Zt zyVPi;hbUQZ3oqh7Z&w@dA+9>b`A^!vR{A#I$G&^BeP(Ao^G6}+`6AkQ+P2-;WL7zS z(#Co^Q)}(nJ;5M5bO{u|G9+VHgw{KqBZ7#FXCiYXtxeAV<0O6yqClo!Q-dP7DM9J_ zBK$Y}&ac|C*(e-506#@nR#zP;UmaOAWeg^b_!jm3{HX#8n9w4K1hsmpA@<-=>_dim z(MKY`4$@=#qI1XI)+ z#-F(L1&dRHwKQzew2sNUR$VTUPDIJmGTX-P-0{VW4@pV%2q%f`maP{}Qv&1+?;F?C z$KL-}75xgzq|%<-2-c1}xo;j`TVb0U7N$WQ{!W90deMuXHN zyCY?3^nc~nUtdBS8>KX6U0^!?negpt5fcQ6dLiU&6cB^BU;U1OC1`1xX!HHe+KKdv znYD^Qcf~g8)}pzie>*47oBi40h4{bU;D>8>xBWyc?!htAArvg(ZLK_3U^}yy3jQO< z#HJr*1v~O1tF zvdXx}A-!biZ2A>UitYGq4*1`#Y- zt+~zg zK#=GAg1@KuU$4QNiRU-HN12rFfYcDR$CmUJeb!e$JHaOR9)o_F%!L@zNtYj(D#)V| zaPIq7f)%)@Ts=kGo-0h^Q|kd&cj$_mE7f2C0v&_!<(O%_A>9Paq#8SI*@IDDp;uLatXx3YciX zefxN2#hcGoo+X~22VZ7d*+??mRQG=3o*|~D0I}3Y(#Z$kDUx4WKco|AV$W}SPyVpN zsf<(UzVu&z`HmVN1C_h~k~Nty?WXf-_vMOoB%O|R_fk>fx%7icJa`e zq3;U$W(>H00a}K}j*;Bmwx_`${`wp&$VCraa$P(J>Sz1o`#TrE_ZtU3Ez_vQ#{A|K zg~D-6n%8_m4hx`Uyym^RDVXoue{xYq;Zb)cZ6etEKi=w(l!oVuM+vrnja_zoZvEBP z^WiDe`$pi~+CfZ|6se?YF|B*vohEn326GMd=GGHebczc7r(CUTKdwjTjt~&rkgNKq z(m4X@v&(UC@VeSoX4~98as6G^lE-0j*ByzDx~Rzh{&}LWc(SgUH12a)+?A;K_&v~9 zFfu(ICgx221sCGU*zP{T9rPQ3)zZIu^-35}P;Vc66@0e>epB@svmrFj1-~ASWtbKB zXTmL;?oU@-Z)?4j5PI3U`sxN1F+1oW<8!&^^hoyj0&|KwwcKuMBZT}8JJXlPbxDvi zE8<fUzb{z?IMzMd}6tV9z z9WnDKB@EX_V7jjS`skOfg96kAOHsNH35QTC!$sTW)gx9P;!q|EEBoDH&kX_sg4}i2 zxkf$gPgjD9i}?jg8XE59Y{}iZqdR*7XxX!o82`7ob#plr@)*6)k6At^M7V0zWaiw9 zyi+1jZ{KTA_M6Qp*e#abo;2tSgHf2G1w4A55l@(1x7`~h>b7lh?Tw=ZM#jd4=J+4yp>C>l{=-&--DFjxa3<4&j{4-iwyFjbqCWmxDm{)V6mxuHY#dIzDw5cz z6(E6jcd4D_GeNJjj|j=&olgBp5P-Wgz{;ezw$9tyTsju{FI=R@jR@^l|6tIKea8zE zn3(l2-Qp>gg{lW~=00`^XAw(4qN?qE$X_=y=`4$CdJ!S(JO!KI^)(BqY5kIqs&8pG zU(Qj@bA7jwacXs>Mdv_itd(Ah`C^20mkqlz=B1iaQkI93JqZ%$IEK?VvFrj%h!S^a`iN@ntOU~($HxK)7AX{yw0eB#BQGn7AI#?6nm z8@5NOc{;>~PQn`v;*G%X3vSSEonE{I@jo+?oyw?afY_IGOMet&8(@RRSY5f77$5B#wg0k3p@TKk~o2hPLtMcMK33hS~qMYo_~6| zHZhD7!NZ(Fb4Y?g){lpwS9_wx+r5u7xTLaCW}}r) zBktNn_71bIpyCp95^FKlvLo3R+*z&-I7gt#>Iu)s;|UQK8F2mS!bu40d`rE-U$RM< z{P^tIvDF@oJKUl&3cP)k2lw6l=zu7bfZ@$_OXa*mQTFx@ zACi9NQ>yB+^15AYj%zJBBOAi+xJt@-BUA!iO>$3BXg5x9X$GDW0!xPl zh*(A3MFn0sVh>?Q#0_4OD`)FOeF8fPw6SU@KK36eQ??~i8XJH)pYJq>uk_RYhHE0g#hnvMu?}fldKB{iR>n9lM{4Ep0ymL`pfQhOn1i$#?Ab zBbODSzZ3BDtQaZ#*Gb;!^V=4fn2=36sQ@~&A! zu?Gfv4TYY3>{k;+BGd(2u6v}9+an|J75Y2dQ8k8~#3}xB++y`BqeU8H(F83PhR;u0 zClxW6q-y@}<~BmLE!E^$h|cnZVh3SvQ&xK%thduCNeKSPt%S>46is>L1L2Y!Z*pt-f_Dz78sf=#e?n6dCP92rBu zbb~MU2)XwQ0iPY&bBKt>9iBJQ!yNq`)HNtG-}xlr`XwbjJ$)3><~Swzp}Ew&rLq6~ z#+C!(-Za@O>CA*BVa-VXu5xB>^gP4pW2y%75wA`T^=F?%So+BAUE4!o3sX|)URh{d`~RL+tdF zZ#U0$ z-lJ1u*%+%^`s%7?ogk|Ls0Uuy1zV-iwmDJc{N9$RDE|~Uq5T-sUhRd`jE3Ae*%PnP zI%h@_KG1eafzk-{ZS*gWFE-;|c-n_IVx@-x^mJ_!{lh3&I*B*C&xQ`BYdE{373{_~ zRp|Q6_6I@>_#Jz`uY(5XTV>J!qfHlTtp(c)UVZzi>Q2dG(d4(8Mk{yO?dM>vu4(FD zX9vMC(%sSj7gt{a6;;%>J9JBTN-7;9ol*)4D$*t0Al(cl-BJRAfP&K9-O?c4NOw0g zchC3z|GjJ7wOqnEXP9%&&UZiW^E|t+rz+iV#_pmq6X^_SH@>@92!Br!z<>WTYXvAc zPCPi%J(GWX8a2aTdhVbp_WP9)8^8%Y9`Y3*;9x0TPD9>J|rvXY4M8gVdFX@Or-w}$O=u`H=lz zxi?}^Cwy!$zhtmt-~P6WmD0Tjn+$Q|9m@Esmc_e(X@3_vl}m8Y zn!h%|JRkCvAC5F&QIVgc6xwIft7KN(!)puCOdL88kwjgWUrGrQ;_`dP8w9UC2pv_9W;zS27KpSo4}&pj%k zAZ~A4rhf5h+1ZP`2<~sbhXBp|a4{i2P1^RS@&ylCcAp1cP%yMDJ&fF9NB#Ioh)WkqXKbr8mpTBk69)g(`^~@Dcpa}f3Mtp_~J9XRnWPlml&?=V0GsZ;#W(FLgr8;V`7r~oNM8C zAs=W2S|fpsbDVceSZ@1pK*mJJ30yrQegK?MlfTIE8XbFZnkLvmZwa7_WE(KA=j6Ha z_8AwLE*6&RV4%q6HS5Mis<9LZ|D_6-OXCyHoXRKHm7ll6Y_+D1+6Y_UQ+t6zwz2v3 zw?ptGcsRw2k7#FX`j|Acp9x;vI^nVC)6Qn8vMs873M&C&zZ_c&~&$dQ1 zFRY4ACni$G+)L&tO}ZIhU5>uMKk?cGf^CxTjkoykakUU!6@=u)hM+)Shql~$lD&8} zOUl3HRqK{Zw4lwD@KllZzwN$Y!n4W5TqAt(W9e8fYLI;tFQ1cWoO=Oij#Z6?a3yQp z)UhZ2fC!e5K%|SS1isb!+4aO>Iue_4L!FE=FfY(^lWSM{yZ0;q+wPa)7x)r+Zf^6# zAn5o2+yV}-jDI)_bAqWZ=5|nEa@3rm*nErn-=h*3)2cQ?weo)zE}2)dxPS*l zCOPmw0++9z3@)Z$iTKnd`hAkVd?^4NoEWX6p+E`_(LX<{v3@BrVFX+1DaQmA3nr|s@LGWH)+({ugJXf*+HYp-ya_FmqbS0IoW%miZ*6U}|2s4-nl)M2Ecb?+ho z)UEk<2f&R;T~H6`2_!CO9@}w0*w(_5hthMu9ptfrI>1;ZCnf#<>lYSKQN6{>)dz$E zCU$)D>{zEUytYYA!(zLub_{ws-`Lb=mC>n^LzZe@fR_}8#bi}Js8F%!+~q>}&lMzn zQ|HIcxt6xVWvTg)pIRvPW{tU9ZF@0A(-16Hzxbn)LvU_!d&rQBNohAD+Oc=>yDA`p zlon-Jz6~^@0Jr6xC=E{7KPlLYJ1*lqx5EWWfm``>uI7_hQ(+f*_ID-Hiuzka>G|J8 zoLM((%!fu<$hBO8U57J74wlltCt-s2O)IbaN?CalEPz>i!Fgx(!Ydpr=N${N$6mJp zeIF&hSCmCBaf@52{$`FINt-X>am6@ zmYpC&{|>fz?o(J0zGU0oQETi(zH05f8={%!qBBvxCo80mmTT(sK5YOP{2x8nsW?|u zyX3I%IZOt?DCavpj`{glzvaopKXOy(0udBcc7<6(uM8#>aKlmoS~+g6?9lL2B@Nj( zxTsQJ9{j}#Aa}I)sYTO@J!i*Wz3{3oH&B&&sCwbh6xF~b)>-OzQTS#fNzQn?^3CqjA@)wFt8X)W&O^1UEE+VSVn}crw8lVOY4M6iEdJibFRU_J|JPiD! zB2&WDL>I?_J6n>B_qt;1ZXQL$g zhBn(!B`@K%@Nxtycyn&35H49gD;QlTh}rWZ{XYKlem1QT}3&(u4! zozF94>+_sDSF}#+KYlyyVRAA^m3;&T$PdvESH`m!PhKYcN-Q2UTB!T|J!Jcdp}M;U&9 zHc~yUF^$t71oMjmfk@3QK9euQ$tl|;V8-x3>K0r*Q*u=^L*!P&Zjhm%oT4)L_=jsn z6&zYH^Y%`_;Lx)(kzZ|RVy6n%5YHSg0||Z%KK)ES!)4zq{lD&Fg%gz9VW1|Pa|X#J zHf`3r!rvafyfSNAo}&JxwdYUygEA>G3QJ(_C({|4-0nG0kiAT2_07ZG*2!ZwAZKol z9Dj*}He4FsaO*T56gb5iYChlO3D2)ao5cX^ca8lI884O?jb^+b1`ZVY_d zaPW^zw{PhGQljHqyBDW=wYEfT!M8rq{Hay|=d=+dDIWt6>hp*cT+bVq`Z+E*@%_hb zFc9#Ynw#hR_<;r>eCBUHr!NNqg#pmPYE)1GTs|~7*acom@Bt9LxD3M+;*c7TZ)h&I z19C0>N-4dQnrDt?N`2kV+s1;s6GNuvj%H#(R^(ahbW|=z%v#5mv&vo|YPPFL3rH$J z7}*$&|5ysh$5IQJ>|oE?#+4{A7*|BmK}Pdcv)q>REePEdgvd-Gl9@k+3?Nkxa*}Mz z(O2{3Jxya9yssk7e)gq8hq*Vgt75$puKJ%F<;C+-u_faoI%H539<_kEiux6^9cB@Q zPpj93wIb()*}31=aHh^W2c;6N2N=*nW{IzNvYa9hewGE-1MgNf6deEXCiXS+c4N(j z{-!>VQUQQw$hH|gu1c8mPRr}hzs3eQnn9w7Fx|`@Q<5=X>%4p?eD@QyJul) znhh{o3PEcUM5T=7D&~U2zP`RPm8>$`S$;tQ0pj}ldO#lP?!=dh0(V^r#NloetH}6* z^y&+!vnHm2I&g~DVwgt!{r^7W9BtpY>e3sR6P zdZC|k(n4HFJ%ibpV#x5b5Y*MzmRTFevAZw(9JzeKa^kp)!I2N7mfMKo}h zh#VAY9_{3j`|Dn*7LWD5c*FBUDH5p+;YaQZpD+Ly69ZCrP&3b43sWxYZ=?W#VclUh zT;}k|FH60J`Q~F0gEkMs%Hoi{yBHM*+B9yPsv*Kv`_Uz|0F0_uR`#MGA6Y=v3o@C#Y={S{w~zlD17hnZ1?guRUi zKkQPU`4U0y@F0iEeWwtMr?sFBQl=bs?s}aAG#=%}5vdaX_@2 zKG)V&h^KByk4L1mhkVB7SS5bcBlfkcJ7U8L454JtS3bjSNA9J2u?oQ;7 zKt6mJ@p0c&83^VmUC{8mKF%wC|8u43Y`Ak8XwovhAFXs>w4y;&>UP<~y1P?#;Vg8A z&Ia$sUNqkz6PUI6)!N`6_O~MA;6JzAfv5<`l%HcMpbx6}N_0Upg+Cz!o_QY_ui64o zs;`dvD!9=1z24g9zg}XqZX?XMbp|eanEx5gjL-Oan!kAaaYG*ds$#b7_8i8A_Ze2+Ssa3aw%#gwsdHqkDsM}*Q>ijYY* zO1-E=KKE<{PiVntlFH}-P}ICH4{Dd~o1X|>MIqXIenoDy6^N zu#?FPrrGz6kB_^d3@S!bg@j;G^P0{4_@FCg|m&y~W74X#S#ehg8Cw9L>i3iGR@;OkkkF8SjZO+KmR&_U9(n#RStv zgJv&zF8S|pd&M|;&2UdfLhd=0o!1nZZ>aeN80Edr88(Mt@qN zl{W$eLpPIgi8MP>bleIA6LEC}h!doJCYb1W8z>5|g{q{PS_vI=%Zy~w?f-;_hiBB? zHeU;zcqDZBkiEP%=41I_9=Nom*FLq$07THO#O)m4?q!ddF7&;-w7r}3x@wGLO>FGm zTv4W78*!Y_mDMQg+6;xugwmwrJbhlv#mE?#1s0x$K+N^~K^J8WP0VFGj-kXhT58=J z{jt*U(o)MUU;tM`)b#b6aUfugLr6;-eShzhA?k|F(|XSjR*(pZ3M7suavnSLjm4Q* z$HdfffA`3mJ6AyPeI5ZBSx<1KAPpeX01XDPKbiZ2qF~%%%J-)uq}8Y|?y)1)I_jCL zfWhE56jfDKV1*SNP7xg$`R_F=vE<48V@HEVH#`GsdTCQrW~KS{FfnDkeITbOC@g$| zAjF()zW%t0fz)gp|K&;I+#Bg8^|jep7d&3kt>{sCIwVdoa=@t>E|)NnZoB=gxaIj$X4jjstIPAF9h&d^tFyBgZf-TlLPk$9 zxA*oqNHCc%YmT14gp?EsLPShlZoeox>(qvfj2xGd!Fh}_C2$!29(ufY z;RU8@{(dABPGdGcKEn9;_)+WXKt*e?Vow$KTU1 zBh+9=vq|=L9Qh@Eef@doK8*mH^i4hOYHaWYuQk|GP~NFdf*v6K@@04#zBYBjKHG;J zSs(GI1fQfshq?sYw*9>t7;A)4&6Itr1@WWEUc0%uY49M=39vqrs$skNHmsdXzDibl zHKSKtx*0Q1Hgl>s`k3#RI0>@or>tR|O4o%=ajh}#Q`1{5M6x!bCjXYp>&Zo*Ye5QgA=95`M={=;0Xh-D{5;M9UUFhn+;tI1=(7Z zJSto*M&06G9m;9VB6INqpe_g)Xc5RLgwoFw2j-!X)cbY)!#|+R4M|xrD7(G&0*y1T zprr+tl#r0Hv^9+8e0h0!y_5gR(bctBRY^%&Mg|G+xDef;X|Z$MV!p<1FD@FCzO90r zt!En}6B8i;!6*Q>{TN#;Nk~YvnkSUryh)BW#O2}P*}m|SQ&8wI;)Rr9eg`6<;E)i$ zY5I>JKO)mZC~(oiHQCZ>-J#F6TyvbDB*WajTPN1<0E_9lP)>E6=yR)}47kg?kGO3_ zG0Z3SIxBHHA6=SxPmXl|Xj-Xea*v~*Okh5wJzA|+3?BU`CyIevMn*3ORoZ}7qq#iA zI?Z_ziwZE3dr_SuTuWc!UX2i+ar(7|^5mvxrcb}uVDd3`R8&^3?(IbatbtY8xsNdU z3wx|I%>LJkwM~;z@qzOvt%Nso`LQgdezwX_5-x=!I=>mmJx{dSK?RVOm9tVAlP^m? zLvF|iZSAzzN7DfMx(*A&TpAlAoSd9QOvZ|Ss_>u9-xxm0N^ljis-%vZ-hX_Hvk!v4 ztt_wIU(}Ge^t3ZB#pEqFd@h&D0~h};w4Os zoB{$9f9eqkMCB}Q zjrI|AN`Sb9Xuf)d?fej*kYL5IQ5-l<{BFbcGn z0l%oIqRv-r*R7iLYj)x((txcJ|3k80{znd;A})EY@YFaW(yBh9(65-=KO(nHsz1|P zer=Wau2QOy;F8|o-w*cf5;0mkC>HTQt(}=LDb_#jw^`SMvYulp6rnbij7{P?k@vUf7M~rf8QplY-P)fZhaMDATUm*MrTORJVXnrG+W-Fg zlQ_T`t^u>qe!1CudLv$uZs!v?i;9kJygmATrq$oSIX9OnD?R;g3W|i{RAV=P8GEre z{ST<@Xdk^mCg>=2smJ=&y2D$n=i1hFU(*(7_?yeCnGUE*DR_;blc-RjZtd#s=4)O8 z^1BXiZ*QC|AUl1lrp8c(WjXIz>&c}wj@5cm6Wrz}wS%Qs=ZG{r?Xdc58dlV2bhc=? zy#9cG@t>8VKi#zuWF=Hj`JIHMaj(ipXoNU#HAg*aCWWG{mk z^d+E}I#hd7@k5XMlR;{+D`PqeR}Hj=B~e*oA#AU{S|K=mo&k-lTXP;I+0OE%@R-QQ zHQx>HHFh#X)5bbUih=u5z^7`wI9i6s0?^hCLRVE;>AWR89KPk5e|vjNCq6>{iRP*@ zGgH61w$}Xz_-Uo5x3IjihQWEYxY>n|L@49r$Syg;YK`Cnr?~Ovhst_+N1QZ<`gbYtVJ%p@oo<5Eo4$%lz#vHZvq>xrO5tN zJY$jcz~qtDV{4n`7)(AYW_p!rw?u9L1Z6MU7REWX7=PGYic}N^16r)2$?+n zTeP6FIx70u#e{}X5@)ar#eeq*IJfx45;?brl!$Wv;)AlMQ8B5}&`CL& zMN#bX*xIj5B;BObjY}|`g;+s6I^IRMAwe-9cu;Z3&C{n($0yEAq3uR1JE%TSHWz{_b6H{Bwd4>e20R8&&GOQ!x-)W%J!D1>L`xdqwth zOye!TwAtFFV85>*GJKZT^l@m&4>b>`+-;qe zijuN_V%6Nx(6A7c1nZ*@m0AUjOr%Fi3c5`n-_7fq)RwF~w&Ac1FG`k;f0Zp^91#zx z#8AshNazsaR9?qargMD_;+_E!tb<@JA28u^JXY{Gf85cvrmTmQ1si-7JZ4wcT^bDe z(uj9(3Vq2{)34)MVU3b0z<6m)=s-cJ4Ca&RZPfQBbWGPD{>esS88DA09ofz?)b|)=!NWpQ`HM>E*3H65U!1u$BGIHrywZQ zK+_B-011_v-{cCr!DHWePw#3RBjh#Q3H7Dtop`%VWNei679!)=WyU5YjIS8C?`R24 zPP5-afz$c*wNm2`Bd^z`)!NlAZfqou{gwWTB_ zJ!WPOemO+Qf35N10~YN)pdJf}w0!A9Ue`~hj(env{5nLzIa0k=5Nlb(ASFXq8T(ye zf-U(`Vcs#LCAY|e21R5N1PmR@Gi=N8??{UhP8vn$bWl|O3@?r~vS6r>P2Mozm?$TO zFwARX#|>}h&p%$8(x;WK@Mv=p)z8P|%^kC>F3wdTU^_(S!ugeqT{^y8y@@`mgTw+l z{Wm_{wI57oPx8oSk_FahXujGss>f@v$fZ&YEv9Z@ij78*)R#C25EWEFo8_T>Wf0DB0Fy}{AWBAh4N^OJlj|f-Kjg1rUGT-EzybIIAes?uLJc@i30gLNKsag4Cmp>S|;8WFS zO^tK0I9Dd`En!d`@;9n)vr7m3dVsVSm&f(QGe#fH_(;>+sb0N6ZLHadWBrG^a7pEj zu5~0)6X&&92Fmk-?I$hGtH`-y1z{X{ z5NuNRL$N_>w^S+qZ8WMB;hxnieV)Y4U zMb`F(R^>8TreLTb9u&OpcUk$nF>d_Sh&%H1=XO^hf|^G^*eRYgfjX(j0^b|Eu)^y~EJr=?svkA#G3S(lTNlZ_`n3yKd! zwg_Bfu|ZxMe5Hp>NN(@f6kKW^l+GDaT?IXS=!<=x@*R9docc;l%|P_ z)_w6D99HS?tQMl#JGx1b2j+o)Yipz6K~_o0$t@~{(-yXE{UCL&dTjWCjO$QU-s zab)XP_kYS?-n@TOQq=y{h4}gAWlxVD9^wZ$ir}z`^M#RQEUxol$ez*PzVQ;h{C<>> zc9Iw{IQu%X)m{rlNJyxzz8(u@xg}_MHTy<}=E;;KyI4IYMnrWi-7~2$UyN21BTAo_ z-mr#`(T*@D{FbVRf2zqw13dOKr^@uUH{EzAY|83)%ZitprSQ8EM4jp@6PlTtw$0Da z@9MuaH8ov{Z1yf*N|FPQjrL|7<5ke%Ra6x2CZnTgmk309GSllgi8Xs&bVac1^iX8x zR8Hlf7u%FT{9M0cQmin5zD)dWskYjajCA4Yoa9=RWedpe0nHt+jT{Q%=dmw(cCtg0 z%g!ZdtZ=9x4z}4y$lC*d|9L6aZ4xN(db%_T8LohzzVz&;M^lwDQGsg;7YR zm5>P(d&qKFyvBUmiTx!qqzF8qI2z8%J|~Yi#!owl(JF%v9)oJD4H=0}^@lg=dL`BO zV}TDL4;0@84h%ollMS$KxN6_=WPP!)VnVqSyL+CYi*reSX@bfa*mY^abw5QzfoowH z%I*Ikb|-2y6wtmu|6P`>Y97Vy=F|+*wlR=GTB>C8jEc`_1z2iA15m`eQP>Vqe#kf{ zUY4Qynr!$>;=$Gk2bRfWq41lkbw8&yh4v5HS2j3dV*W!Vim5nJG1+TQTvPjAsE{B6 z5?2$uVOWuUTUSZVZI-Qt75p_NQyTb8+w3$_IzJUERwseF^Q8rvv8L{WYE5MetWgvY zBSB@qetFG2vI`cOh$tCh-wtUL7!hak8S%n<0@124#q#m-IR*kUWC)O<=3q+6fHj4< zganfGHp-83@No|N3KBF9E%Zx9=vF(PCrQRM!Ld00;rHHlas!lW_PqyF1vt`+w{LZr z7c47BvI0S&_enZ{lBaq} z)tsPF^iC9l@pTTom7Rb8*&gF%K3d@EWoZSt70tEgH4Pr_c^g$X@;t z>G7+H?txpM1W+{jgSGjaKyR$p;i}T%0*L`Ahh_<8DG~}g)TdXJ(lB>SI(IDl_it=^ zpJOD+>lG9LS7J~_E5wIGzwe2g0unOES9QBQl+r`+FaUeIGvntPs)lwOBHU* zPw{iNs>-=oQc&ZZ>)z`d+CMYJ8m-bA7k6kF_-N|999huH3R~ZIR1reJ7G__-q2tQe zM{Uw3kKz`#*)I)SW|hZboE`Sh4&Cn(2@I7lEoia#IqxP!jEr4a?h&%RdmGyO03=9lF3r0mj$A!km;?vO31RrTd zw9U+D8RU+&4GiEI7#Mim9n>P0ly!}b{~TXozekeG9eO^j&K?T7EatDzG{wh$_IWMWor7+@Oad)*No zuH6@pWU$M+FkkYh6c&q9*XZtNJ{5-U=zes6zYDL+uGQC1JW`rZcDPKCK$Q`Xn*71a znMM?~<*Rqx6f4l-t@rt(I(<8==tb4Az0RsaLDd5X_w=i!;KqmtlfXAvB1T2Bqg?uM za2*Jr5^2gx{J{UblXsI6qd5@b$kN9zKCkq%Wp(w3k@K3hl{)gTp^4wDCn6%#NlB-0 z2EJB`>gv}RKFN%O-QDunjb&v7;61@Yx+iHM<&#!G$Pj*h-pZei0bs5q_>2k<8;3f} zZKtL`983)hdwY6iKJVz9xW9EvyW>T0n`Lhsi-I4}Qci{8?n*7mr}(9%&hZaxv7j6l zpVVQ4()mDYR#xy>zZwb6i%F>V5r z8{YIGjb(rR#d>ph3B6xxZZ_^da6W!=!%|~1UwkT=$BISb3XwvyF;r_(nB6Jd{zTsD4&fF<|ZpH z#a7v{YFsE19!V`dsbd#||9nmD>6LBhY{a`1VaIu|Z2qx0dO7N?$+x)3DOQDOPuXqf z4m^lMcS$97r)Z;<8FlbWcx%fr261+#h$5uYYkr7v4 zzXQ%8GKERKEaIkp1dscHJ3gj)WqtT`A@JccucQPbEM$LY1A%&(;J9}TYsxPX(-e5M z9Iye$hM5@z$|utfft~{Oh=xWE9Qu9G32NyFmUPlf+NTqbA9)?K%-oGIL)y-lLj`Eh zf&W#XD%`h@lnrnExu^;gxpCl|>OZg|#2>ZQJZK+-`EA$jGNqCJ?_R6-Y?dqcPi)W8 zUEp$ea*_c?u_5!yIGYPi5Z8)!iOF9k76!cQb#*KYM%umtw3&r^XAJPc1+de>b#jxL zQ)hQK8V!`BN1O(lh8^Mr*K9%SToRzRzLT~uoJdkA<%{% zM`iJ1Ez^q{RiB5AZf3vNYSC^Hk3-y!W2$6RO3UlffROiW75p^Jd2nC#Y`#JY2N7{C ze0@!QBZ$Mfu-Fa*!$`lq|HW;qf2lv|KIqa+23$|yB5YTHDo4wX=`McR6&0kvfSCKK z*X4eAaB#3jctdb7>bHNwtL{#@ps{*j6Eksgs<^dGIn7un>M;n(tZg%?8bgBF2RT~e z{Ew@<;Trp*fH>DNG!!i&RgaZ8Li}wU1sWH$y1DuJgqRh{G9#@U84N!Gq1>oX?eQa- z^_+-phhd;=f3${A>y}Az_&E`?W;HfEXfv-CPWxY#w|)&?_C-7`j$ul2^79j0z}fpy z5GqeVPd@@u$tS=@ZO<`a3eelOT|`k)Q5k?zYsUV0I^YeMOziCzSp8X?T@%Np=jXA`T56x zVyNH-wYPzVIwJ#vbTT?RI4x4YV;dV7h+ODS1wgTilgQPL4YXzh)mv1kJSOmc0#$-r zQc|Mgfz&oRN&5d`z?}n;`dk^{?&Ve!3VyQ{qzm8~LL&WC)Oa6(eFbp+)~%uhK~3om z4jXsyxN=rRFSzueqA>|yf3jUTZkhB8^}EMcZJnF{yctvZsq+r=k)K{!XL*#%_t@=+ zyqao^-wz+|3NKsz4@v{^bk3n>=H`qbNdOppdbYNlhU)6f%rogKtiobqC}qJk)Vpd} zbi5*QX=zx^2C)EB6&4o8{QlbA-5mhjZHtTgGYU=}eK1aGoQ~^jkHYmkP(v!;#M7{N zAix;tF$+sKJ1zoWZDSO@@M`{`jV&U>?c&6jC=&+7ePb$ZK7`+9Eu%+v|BTHuA}>~g z^@-L@C|&SNk4;c(;B}+0RAE2$?`OAEwIx>V!Rxg#(fM?5ak~2>)^DmY%EH>G)m`}D zU>p&pYa=NTEmL>sHYwz`gRIu4lbj#7&44!E;nNw4uL!*RlJbjk2apNp<;-(V;z zDtdT(3q5a9#II{;=;-WxNB3Arh#X=Wz}&cZ0kngodlvw~{|vsNhMbIy5mZ}IM=Yew zw4bQt_wNV{qm2WwtOFks_Bww;yoBh!S;i@+rpb8q**gTN^)qmi#xE~v8J_xmq6^Nr zH-5v9>3`pEA-;(2MZgLe(yKW_Mc-NidfHP4$GvvC$%VnHAy-Nr)Q;wXKYY#*P0aDB z-4i+>Rvx&!y#=P;G+^p^y~JbK5(PpS^PZUK=nasn83T|lWNL%eexWV^I3E1G&%^85 zlXq$jn+_KgT13x&8yxRwYG%eV@f@+1_2+P-g^@I>Qylj}q-!dhX1eb?AMQg4P&xcM zUgEp7x5qL`JUn546*;Qc_aY;4%m9`woHy5He2iGr8CJs|Z2U=2b6+42n)0_#OuT=K z^c={n7aCk~0AR2p{78HR*x}J_&)4z*)+!01j9hSiU0pVqA3--(X|fv%D8kwStk%In z^|gimLiAe1kP=92Iv*bKGsNNO z?=Y+K(cAbD#XzX^?@d=+-6o7d1wf#)*=*ltdv6!aXY45YQx zfq!~kG^uDh+%NcV8%mqC_M_w=D3>2q5ys{ggovS_%oHeeKhGB3y~}VDOVBfAJW48%n%I*A%Cxx zmvn@c7o+a|*QZ`1#i1?A3a4SI#pevt@E8_&A6&mbV_Ac`%ifQlAi*y_G97yE>by`i zOmFFR$bA1IA-ntD=|zNp+Q$In`*(KPt+@vy?Dz#-mnqbC&9I~uwoA=G!-dbuCI0oj zSv3Z5_67_c37mJoiCT(7YPAP3_ibUxb2+FE7RORICJ)QkN0MF6LDo3|J;7>T(3_K& zjhX>HrZYUHR||h6E+WdB#mTAuj4*!&PorqzR9oQV+ z-XZ?1Uu>xK??ox9zq6gCy+7HszjCjs=L0BV4J=+T#7|6a4E*^6;4D<6^_`ukob4~z zy9b`4HuRn{GgrDtt?+E8$}%8xh0MB24;W#r9RK-dd5q$;-VA=rF5xw)P|O@3TIZrcOcR-||S`_}ibYQIjM6rEY!PDDYN~1CsZNwHM~&J0HE8u7#V>k5>fp^S zFm`OCt|eW?$HUt|Vvv%e*DTR{yS~tf+)4sWAiMWmL{&0HNx^+YH^RL*a2g)<4K zc;S8R&B*o~#KOP62z=)&eG5lwH9&^f|Ft`a$h# zrKmzDO@IIX#av?oL`#r`8Wk3KEGqhS2W|jLfS!gX3WQn#)DXbLCZM4y!fd_1w`#ha zvr(BRprsvZ1;4$n;jls>y%PEw26EA}WzE#5wX-N>P1kVI3oHxoC0m%@u3%FWuq<@H zW}w-jF8%1eP2hL9k~uhEvuPwuPdH1>!dBXm>W|V8(AM|sefg#lX{(Ph(R&z*!@_2b zVev-i<~4&^FKM1bQ<$P`=t|1|=MNC{N>c~aRc}ZeC=v*?OhocYi_X9T3c6Or=;qdz z2?**sELgrH;7uzN(qmwu`1DV!$H`hF$PCL;``w=?e&^8&`X`J?X7W-+&w$)!@0mDg zioHArP1lFF7kdZVPBs}Cyzrpc<+=v3;b>6e-WaUqA-K^*R&5jA8LKi3qq+G+*-w&= z=J}wtH{cSTIKO#BcYbO95L7Qn776?tgGCFAQXLL6Mmf=TT~N& ziMSXmep~RtTWh7Z_2EA_3V_}acmt3}zfe#>2V{ZN)8F^{g?Lxk4f>c)?&GZlgd!wK z7F6^Nif?Em^uysD3qtlBQ!y2DFvq(0krg@^=Q0lF;`3+bXNb;n)5UBL%74kE041Vy zYAt^B@l579j}NIADkj=b)vQM_QJTEzX=V zj!0y`I7J$R;p=FzksLG|vKpWk`FMN2(?k^Fh$V%`a)Si@C)@~Jp}zytE(8kLDPTu> z6cj=btw#y*@)FSWegt-)6oO799$Iv_zt)L+7Kfe0GXGqQ z>=_XedG&S{mC!Jc2b}U}IR2Gy?0&FJHxM!5I&Kn{DlT++?Y`VC3F-_2?RGY(A_^(u zHR-`EgqP|!x(Uv10ngGEB;J=`m&BXKSJbFsve1YZtT21FHuKL?k>Q&cn6a3O@7@u0 zbaEY4uZ|$k{8FNJnkZbMU7*JQ^0)JQEG;-n{WL_|l-Ow$xfN~e&2x^)&(D9nMCJ}a zTLy7)8W5eBPoX~raUavur&uYqsE?UUBmx5ikKJ~)?i2K*1!q@Pngb{)DQ6yT?3oW< z%3en~s>};SlP0}}1>XDMQV6SgXi_Q0(6q0#lciXItIP-S2285<$KtW)Q7*x7NgD6V zeI$H3;Gwr7{DyDj`eM%$!A~~Tt*^8=>C27PseWr8NA2}uMxWxU^WeTr?+oox@%?8j zLR-Gp>)Y7aSj{MZP*H$(Ev=>&H+emBixg+y8UBObq<#}ePC{JMa^QStBCYo0d73mu z4>hley6`14%SVN}4GEZv_%U*0s4Aa-yT9C}1Dk)kbDJo&cKR*TlP8#f-BIo}GWXYz z5H=tBc?FDOeXmPpFTXpj|I}OsM|HlIm;%Fs7+itopt;6mSg5HH*e^D)oCl0EJiM8M zXxYA)dx@h^Pe?)%EMPIB)y#p_!RDt)WYQZW4<0nfx9v<^IOfG@Dno{(HKIz}9?#k4#b8bcziQQCZFn`?7V^zYY~VOFwyK%KV5%7^=z06k_){ z$U5y5IDsT7tEwt`HJG(;8H%JBUr;+Ru#tSH z;mkf>3-Bu*)yKy!$Toji@82DPX-uHkfBfkDx|9U849A*w*t))z-><97?0L^NNF)X_ zkRJ1AhI*g<*cBRXKkY^v|$0q=92k1s* z1*>SUZ@AVxL@VU3Tu|{kW+zE}K|Vl2VF+eQg7ki>bGpHf(u`X1Y)9$Is09@tFe3Fr zsqY^IGJ@fiQ+G{f{af(*uu?TGv>jHr#`LHVo}wzM5u8-0@p0q#hYt5uld9w+%6}<_ zegTn@IPC1~$J@tCeN7*N0B61YXEky!Qmy@>EHFP4$GGU(iA?^W226)ZSMy8Z9Wd$@ zkq%;KhY*eqJQvu7gU$WOtrz-{lzf_~UdW_j3f}*60Um@HEUgJzW`&6!0&AYgJY6xM zf;WC(xv#4e_Ve#{QgJhwSQo4C?N4ACgdt(U6D2f^j~6)VjswW>TMdGn4kWM35A`?i zrGxHj&7VVzPO}|C4ovM-k{4X40e~Jda#t#a2ccMWW}A49Sm(1QVm%W=njM~lf#1N| zXM3`c{O9ZR&q7XQA5D8KfmyG>)-?Q_6Cctt|9O5NrN<`Q39{S0AU@LRG7(%qeTD?V z2mYk{c7PU+jSoS=ctm3Uczk=dlI`@2>mKlQ1qJ+yH6nZIya(CWHPzIhK;oZWP!L8b z6<|n@!t zOTwd-6{xO|!&;{MGHFezPCb$D-Ng&wTmIa3rp@P`$DUvTACI2fRwzwH$-unBES5H6 zy?xxI?KAnX$>|@u-F-2)9pm_f8sH>KSoHL0WVg%nCYzyx$6Y z1{eZ-K$k)A_9yC_zk@v>v9tnK8-#{$aCj%AqOGVw_}dEHP-(y}N8>QCy<9KwxKEwS zI>yKn3$>cy^t3p_pNCEesPb;H9WOrDTVX5(!YZ6;h;mnN?-`Wkz8;8M_UCKymwnFg z5F4zRQ1+Jj5~SDuJ* zKh=ov^aWpc(zzju_#m*@Zv%g)HHK_SA_Z|gS(D#iZlwoJ@9yfT7wowJfkMIrxWYN)({w(rj4A2<#$)DG;+o*ihwwXd032QZ){(xd$aI8;VgN4S z%IfOl8*O{PPrB&%bWtEzmy?%=3Rs>6jo#$`%hfnciZQ5$BP}%4hK2~k`n97*x9^9C z`ZM$Mx!{9f%IXF#acLP>h<**z;Syh1MA8yBKul#I1?YE{zHId8%hTio6T$7$$v@nI zVb_&_le+Bp0D&CR(RJW}d1DU)5aIxc#!LK>r}dm@WOlZFc9xPG4-Rg1D5s%879}F$ zAvGIj4N^JXUrtn{y|Uw8P1bRiI&tcc|8Xf1XU++Ft7JcTVAzyLx3avt(HpGMax+y{69kl$0RD3z{OC(ZESLI@ zpi48Wmlw1c!1_ZlZ#9+PJS&%iuB;d}T`hTca0m-)UB}cvAT2a|lk3?PAL}^Ownt=z zJUEPS5XVT_OmPBea23$>Aw_pVPlX@(gRKjW4;zoLef?HD&=B7FK-P|c)b@ovvvz1` zX%P}@>{a=|x4DY{fb|>&%h!kWtgKidE+L7DiBY++ld<h+y znNT(TVU!Sr4WOKy94~b`6CK>teu*$i55f9%znYG*bt!9my$2?wXzkIq^|^ugiRO%;42D)|%Ii|`%M zIHyQnoqIy1CHPYqgNm)7f4aAF)|alQAEJ^LeEthHP_=HKQAiHq5*f(dLz1=1^n_$? zHy!xXMhjESb~5Ynf<8?palH03;ZIZ3(CASK?(Xdk!bAqp=HFmUM%*_z>pyKG&`YUr z#nJx;L(gLkN>iHAleq4r&PQJWsYF0*DGwr*J^CV=9Aa~a;rAeDz2rv?t+*^LC@8xX z_lNl)^mvd0*zrkwM!oY!j%}a_Pcte#J^l6VEw=CB(NQcgGeCjv3p~a{N0IWo_W&$X zMjjq~CWRqKzD87BdwV-V))yEQG=`|J8*{=MTDoAwz7NaEt#qcoz7qQf>7@d;4i2$iXiaet zHCh}~j;O@mel$D+r83xlhPSSveidk2udi;sY(=uoI$m^X5|%JwXbVeuN%`xn9!;dLV9~|9^#yry3yil# za{Y77XUuik(BT!S_J?^rUHlaVSTZ;+u0GJKD3BZ;a1Xx&D z2$>q};SOxxgW1MU>bD()|K|@|$aj3nCn}9RoScYjV4w%-DO9j=1ZW+q&$)?inbrz{ z2vZhww7ne(hl~@_kK=tfqH}I@T~hOZn0gOzs{8+c{MdU%_9l`Y8QGf%2_bv$Q9^e1 z&Zvx(%#s<|WfR%Srp%C?&Efo?=l*KkqY3J`fjgD0U6|<8LkekYI1|sJKUg`tvTPCB+4FT4E9ssLbL2 z?cp)h=I{;kS=pBaA@}a3EMK&IMVgt1s;H_GhCG~`by1|Zxbl0nCGB<2>QhGPK-yow zeo6S9c&6>FEYrXOLX0z4&>v|`rkawtSzf!XAy;l%6DN|Xg-=S_4eJ0$hwM~JLV^|^ z81I9!#kJqPy>hTt`ZL5xK%?Bv8bvo+WOa!=t=gyb6X$!Zgv-==<&p^fS;@zxXAyLM z%#Y0jN7`>Wkitxj6j}qU{O)(&3dqBA%b2==|GXD1hr~cs27M#lMxO2uY@$JvmFTph|ue`!IS)*F#b9zQYFRVe&hjbPy#?!fxuBJ2Rs$;sqXEUf@V zL?A%RZ{Gda7pH6TXD$pff&fnK5vGqcj#>6)!Xc2V_3`1Ds<`H1tR{bqVcEdKV;rp$ zS5aGAtI@P9e_$H#D08pvFR17wrWt`t z0Si3X+X((%LFhih^-LvaxaJW0b^xiZdYKj^wz%9SBEMim{YzH3|D@}k$EHa1U=^uM zmN*uE@|#h@KLdt=A{V3b+G&w%RL3^{{%_ml5&HQnZPx$Ssc$tl{~fe7L_7q*Ah%wDV8jwautb%hzcN3_aJ^ zW?%~Ae5VwKofCYP12V0tFM3EcOMp)+=G0rjUdJ z8eR@;UhaXp1t>71-{@dxLiPjZEMOC_d@+S)xVE--Saf^@eQ)CLT(%u;WYbZYUu{oQ z>(YE^6A2}GPXI*n-|uKfUT6r=5|LL}RzyWk5d=~hQBJ76S6WD9K=3IhEI%80dqt^udmb7@e!yXDxMu%IMj~SzXMrqu3TiN-?EQEjv@$<)!$hS`8 zQlf#f_e2;V^wWW;@nsI@lQdgY7ss*nizROPUb=)wNbGpE?WFE@4L>S@&z|i{vQ3i|w|I<9ACAJ=>#@Aa&dbni3)y}_2>iFSsZ@hME+ay^KRacJ zI$fy^IiLW)f(V%1#(UM3ExopjpiRp@nVros$5Nn^@oW{xxin#RP!3IOnlW;sTYvjou?TuRx8<>#s)cjS8b%*RoA{v1g zkrwFN4Q4$yyYp=)M>8HHO}-urs9X`nWYv5MP-^W4%h~w0a6BS*EdeOJSan1#0JYrp zpBdb22+FQ`oUsI-pd|vvtt!wGFo8iqk-aMR&OFx_7l0;2qfAZ_3X00%z|z{pOrV;5 z;^`S09**UITx%YF5;xKlh-_i^|F8)_nPKL}#7FbfYm^d_kHrnMGr3JeZokpq4Wl5V zox(LLZ@KF5XJNU2u3qdcf)Dw;jM=e^<+cwW=%K~2h2t*#9V@|Sk{XXgeHz1hIPiN# z#u5VqWBlz)SrT(@-9EvL^(}IHg6|8@@bU4e&drTsOCeUIj(Di-^M%^pN87fyWr>n)ev6sWoXuDY;a|Mb zxN7@?2tbWXOOd9$Z5v7}G7uO%tWk46XMsGer#cVMa`EDJFj4{veVH>k+mt1jh|sMW zwjH+?3RpUmA6p32LsplUVMof);+k^DTsGAxdmjQ;M2JvGqK&rH+>sE%TU&<+xA2=b zddFs7#K*@|P*Zaq^g@2V+s)vCa4aPqtYXfdoG}D59{}YVo1q@j9FgMV%Y*hj`DK2| zRy^;{@tRe`8vyA(g4^=N^oR^t9E5VyQ&YwSa-W8sCoQOh>22-H%q!F$J*pax0`(PW zOLwTfw~@W1B%{rwQvQ+xA!ts}QRZfKNY_$Jn}@I)ucLzF&p_QCYIO0!4b zA^OgP420w2$UDm2-grf8>pWL$H1OcVS6d<4Vd&r7ena}~D<5wg-qAD;?4AHrZkNO3 z6~+|3h(=hxjIe<4Dq`aAr2Z9ICnXq+5QB>L@DYG*B|PUt=MQr&@JJcS&vIT~U}0hH z@mg2_^6Vi&B}Bx??-Mjo(nm~A=X}=K#GnkoHJ(@bKBFGMw6f_T+&O`Q+CK&&jqC0e z^8=rT8KoH(M7QXqQNK^ML(wemJ!GBGmRmPO@2?gU6z zh2f_9dP@-UI9Xyr#XOfigBJ4=i!dlPmt;%8_szA>-xn4VAOW5vW`PaSf7RY7n)Ge% zw}8`j=^ay(mxuWvLG{m3i?yi9Ko6H2G`zdPy(LsO=&a{E4>KyZPV;YN8@a z=c1)gP(|4^1Ryo0Mp|5gZx64(dta#T0#i5XGBF#u?2)u21WDZT@-qHT=iJ>L?&B)r z0zOQ-h{!XC0=fRzDOEh7PO-_A8CvE&7%pr3BQm~(C~wvLd*l1B{)QCmazC9;ZbCJs zUO-8E0JS0*;`Gn9#wC5liWR7=>w2tm7YAu`YAiwCzEEVJf67cjL4n}AXxo>DK(^9x zgdJ3m05r4s%zrI6+H?KKHH8xdwFm8#_7TQ%O^CzZXiQAZypp0~#D)c&R2qw&ShXNv zSTrG5ETXEM^YyDtf@;3!1>CXTY1}gt$QT#5fWLK14uttj$5EoM2cQvV>2nbs9lh_( z1R#JLB|?_qg$;zk3^NqEL`jAKe;L(Bk8Xm&^>Dr#nWN|{#SZ|kK)Y3CPNQBvFkhIX zw^uL(WK?-MDO6%0AD*1jeXcbqHoLJDl1^hOYQo!Uv{zSDPPTDKtHGc>$yB#&^#lV$ z_2UAT>rhMec?+5d5Prqw89gzsRMOHm=8q>WMm1KDc}kn@B*riy$UPitsBIk})A2FQ%C4I$Tl0Kq1} zH#`}+wNMX$FX}^Xp0qT-wssv!c4H(7BL1IaW4QoC03NZ;&GSKOs4xRBQTMO~(s(;N zJ4N-lTQRNce0wU>y3;~S_W=*m;CrVQqh7ol<$kSI^>~(tb2{I_WQmAe(W+Eof{~52 z`sRxW?e`sjSNrI{TNLo{DiT=q(v=1`CroXs@o;i+5e62BWoW;5$>Q$8|9qh_AXvCn zaUdBFtx2}}#X7f{C^)2g%~2YJ9TyjSEh#B}i?Q6LwQ_r%lqbJ?)QOLe9lp!iuIW_%f4Uw?T_yL`{C%*4SdeJz*{LpK!H;+>9)H#TmU%5+;< zTXU>=bFJL$Df6gScZExN(C z2khgmUSd}$N?u>TNL$=?EUT&gZ-g&_t9pGHDvs#7ubvo=XMVtTrxr@IOPX9611mA? zeYLbD?D8;+GS+j7VouoAr>I&74s^obzkhEKavg(5_8NLgNTuB;yfckTXAt*1*|kDG zT8h$5>va`-=;kmGa=dM(5nN@)b8>px_U#)Uw3pjJIe>~xVSB0?{jX;L4n`u8FY>76 z+s%(foPn)qU@+!{1g*L_qE?veD}Q!;P+f1fo&jNjNBdQcMOJvPt#d8CFp;+p%2zDJ z;n5uhjdSo4VVz%yPMNAiQcU5#>pcoc$$1A84)BurekWFbWb_5Jf{9JOJM96(th2@C z-KW~~JAC8|bJJUV3u|kW#h3}7(TQi=-jkz~fZqYFYqUZN4xOQ0$d7o+bRUj9mN!co zE1^>c&|hGMp&!2WY$lBW`j?i~^6&)Ter?e|MYk9qx*LBUj&A1v{rk7n{ueBA9`;c9 zTG!av>DIoE^Xn_HE-1M$6Z|(rsFtp=X2S^M-X4DyyYywiP%R2oRaF(c_u8Ad{?>gJ zsdk-;FWUQ*cKvY{#97rM(rgF*rgwG$I)WQC2>9tZZmWQ&Phmu$&Dk%R6R<70fc*F2 z32Rr*`i0T1W-Px+MCIc9k@q?*C6Bj9^6@UyvOZ>9pwhCwkFvFXK?Y6{dB*L5@7NyH zaKS^B2Ad4A;PH=1^L$^LjLg^9QIwwT09??B5>>I_pS#i(F&7|A3AVG5fUpA)nkDL) zQrt`k{1;QsiA;00WC>jgwGEQd+cT6t{5d*0>YRAJA<+^dPFa#CI$2A2@;4T5w$S!8 z=oy5bLQ?wY3*@lUJouV*&#vj8i$|Vhza+PUV}+5zVqi+iUHW+T@t2AUL6{%I0JK`@ z{qK>2>qm4>4hzJUb}a<5@D?Pj&S8s^msAYO)LS48a`enJ@fbbaO4mg z@D#ZtCTTgak_FM26}>dChn9vD&slwg26N8tvDafI4W%He@wH7x*7mu~PrhO2BbRrw zA3sj6#H;4?OjHer8?{jV`t|F147Qw-l9I?E^&n2kQ?x*GO(IpE_v6Qu&bbB?Khf@* zRr~Saip`$A57pVoEpdwxH zt^u01^&im;$D4sH<9|f1k*nl~2b?8B_uK36sQ3wI=l}qR7@nM3xCr`v!$|NC)e2nx1^ZDvI1hA$uHykp@t>~Cj(ej6k2 z>F6xlFpQrUq!>KLJHMkT4>07_ici%YJF{o4E$?m8f~<*%GHb%|1@-&@4n{9;qcB@b z_{oQ;vT{iAX+nWmHm07rx?P2|9MKBmXMFwX3mUzqt_aNk_-7**=wZvw&S5S2KYa9s z^nty7xD#J@zvN3B*dDrFmo2#6&v=!f}kZbO7P(K@}iG&5y z-tI?3Lj!~YEQI^-=0xb1Skc`8iaMyvh{aa=#J=K!E`+L>tHX1D0(XJU>ft6r&yxRL zGVR1eju@6gc{o1h;%muA2#m0Y4y6w7n&b7Acva3W62u+;OC>h=K0?agjGv?bFy=au z@3G|%QhH!3FqvcNn^#cSP;l`e=|_0H9RIr>FOP6)_UMuuuLE_kdtluC*!T+`qaN)7j>rhxjU41NMMbs&Tm$1vIA-2TbAp+)P?&KOuyrsvo+W z%_e)B86wku>3dj5Zq+RHJNZpfUGaP8yPlgG(^#Qu=I+csIa4HG$cN%g{=-Dgu2w#I z%zgUcxyxiZKEg=abJ3@A@$ShH0{kQ0R{nlKPF4Mj?CP_nPzh(;;&c1>IRfSW^Lw52 zNaFNu+p$@SLCM)UC32h2Q3GQOvTcQpYa_Mpb2k7>A!7mocj|dEQV=L83*u$HI4-{U zkDzvkPe`Z;9rD4qlHu>(y*pz5I7WL?q5Kw$9NOckx3Y=z?}YJ53EL+>u^}oNJN~-r23JuX-pI&^G==%d$i0W*CH(Ey5iN4{c+mva0vg*_oha8?8rWoI z7jXEPZ*R9*(Jt(eA@Iw6<+KfWcT%4z~f9kX%A9S$0MPa2Jc*(C!6S9NEw{_ za;I^UmH^ja{&eLkx?YQRiUt{3Pk7U=tZ-J7kPCH))i~eS)$v%*5r2`5kXPT_W9w>W z-KLJsBhXyWxxGn#wuKq2+0#i~K{u^+dFvTNKyzw5 zJt)oe(|$SoTk>wJ#b?W8!2>=Ke*s-;16Kx-B7<-4)p)Lfw%E1qzr&2PPVu2M2JK^_ z-RF`24+{V?l8MR5$+gTM2V$N-U&YWoN%M?~h_HNRFN^*V3*q~l3)jM(O-&g+;Owoh zujdl1x(H?teJSBVQ|9~r1;f*Ty)b)^^5v#F8bRGgCo^0$GM%?|#AzkU{>3Y!xrkT< zyF|{*NK48lY|kr?pp^!3!4%i=rX0f0d!+9n>V7a5jiBw)h>D;GiP+VLu|o9kb>6<< zKaN8~5*tRjbxhoLeWB z^8Uy`!&j9SE;5#7+U;muft>73OkUB4odV-{|1>_hj6&0T8o=K$f_43eR~I<0GdLqrO6@} zjlTZsj*@W?D#ad$FcCvE>P^_)F7@MsR#)6vg5S*Z>Q4!51`Qk+LebaWiN|Q!-$00{ zqP8A`K>ce#OAH9@O&hX1*1F$~A*J3@Qw(3;fpFg3okI0ry(6Aps%!Wa=r@nU zhoB`x>gB;8f(un2v=m)RPL80f92gRZs-CZ|t`eQQ!S_x++Ub~<;7p$TF75K)+eo zxbv%X2z_U>UT;krw~paf2-!>vf9z~2HvXPi;_k7Uzah1%XkhxUlJP}?)RYk5pO^wL zQm*|sOTck3#a-ooSVb?e@U>+ymmq_=ggMk%p_bSVN})JbH^kNPQ;#C9&V7lsyf6G+ z>60Tu3*uzOq=^L+SIJ@Qhu#0@c@>fgzZ`N56vM58D1&%3(b-j*jDhTE_Ye!e)n zMNso9Iw^9yT_u_G81@&5pnshE)>D$(GpVfxYc9}13F1K^8_77r-;ym20RP|lx*P-^kv*6 z-}^jUeTt^cIll&yodn{sj~0#vnex|z8~Z*5<#Nx5yEu}wvf_jy*sqCRwJOf-e`?^( zgr-|V+dV_ViycWf6sR|H*!m2Qj1<}8{w$!@!$DjP$EH7I>sA}b@_D!7=4=CH$;T1| zV&~v*;*qwUsCnaJS?>>CMxeSj7x z2XKeR*=`djE$xEsHX&PU|KrRL=h1k6yD`p=G?)}Ox!lIKS9Sh<5(i>a~<<24W)P=uSj?#H)G~;rpmEhTB z{-dP8HTt5>$(Y%IVnDPm6{{f-ZHObiFm?CMi^J>K@0l^^Pm&B@A~o!KOs2Zf z0!eCmqyYb4fNKIB&|6a;AnyrUSSlK^h0@(3k&$I4FPcE?fYr$THeKaWD2C-W4oL8L zuYWJ0c(|q)mi<#=3f-|tj=joBrfceFls__?o+h|WGkiqzL+gQ9a0U7*zT$gt zHhuE*vg7;jU~UiXMsg!gmgkH*{hzXx{2|SI`?k|pAA7__KA3&+y~2JPC=77FQ<+5X z@*m!F?_DtYv;LeKYut4XzaBr0O5|g&YQ`JK+%F}xSct%B2EpQH83i_9mM`;t>g-g*z+HLrh1R2aqkwY>Y z93R`@%i!a8O#Q2G+O?)4E&$K_$ltZ37iwM+?$+E zo64vj%h_wj1QB{YoV_z6I9W8#9Xt8q;)QL4ljW(+F=Y{HrsK0aVc}88WQ*{3xc&2j zFU~KP1|=WwAVaPG{K7btW_kX!zyGW6_D0Z9Yro5{)$HT-d$YwmsQF*W2e#@t0mAji zGI=-gi?CW)2+7nsE>Zbh5nl}NFcXr!Hw&>fc;|+P={=i;z)o z3im?2*rFn?gY7v67T{_bS02KgX^wGzgTR(4=&g87Ltq1DK@+ zb+J?Bh$;X0aW!V;1yKfLNS!dpPqll-6Fnp^E+69|bd4us=yGL!?Ph+FRvx3a|7ZuI z^5T7a-7u=d$!PqrFRaU?(64XeeB(jsh^3mHq>*gLoaY2FtWV<+kgMYMRTxMitrLW_q|D7+K0LU-H_|N zyp(pWF$BE4ylG>B=r-E}W8*3QTxP_V-F6~ik->W$ot&&#hUa=(1IoXTUp{*KnvG=h zqNS-}^cTuBi0D^Fkup5Il=2pQ4Vs>MXOcg*!cYd4?ZT?AdPgeUU!#Gog`rF|DLDhMH z&xWdHcJWO-YUoP->s3gul=q|&sx9X z|AF%~cZ-V&OT~QSdS@U;_Y?Bo{Vawp`wijklfx>$rD6PK{OYT25%2C9kCuU3Vq!m5 z4-XGdHmirS?E|fCY|IY)FZcn(9{(wSwzFhgtiPQS}*%Mh=vDbJH48ltVjwF?gbGKk7q?300>eC=%PH*zdfWBuqSfrSw0xD4X=cR4aox;Dvff%IyTog%I z8v+tZ9l#>jH8=lN<^^;e+@(Q9$6$4z!l}myCKr`%a}4B3iTw~p-nJai-Q;T*yjxrK zKinBnb{_?Abq1y+Ftom=P-(?qt`W=qqbemj;bHmaIoSZ|9gGLY+9IX}eFhXlVOh+1 zI$9a}GYVeAoauLP9xZs0dX!Wfko#O1=`1-hGrQe>lbC~+89txNU z4O6@itjvPGs$4vtIF#@;^SBpc79?X|VLDc*(&-i(o{>W~J-v4J+(t>!(z(5$`)6Rv zUsM-8iL9eb{+XV+xPoJ|`nh1X91G}*gXKtj`{};Z`RlC8LC@=0e-aK^q?R@+TA~VL zF^JJmbuzqoo%K(&tz6tKdcL4H6@`kU{?^7;+po;+pr~N=yS=r%+o(6Chpz8QFA&23mYzOWF+JN>T$`Bb@yrL zG-~*mJYrIs0#B>D{N2n(Zn>dY_VL0Bi@UcTg%lu9D92qDQEgmTL(3VVCs2w{|i zKM@)3C^kW|wER52wVeONaG_B?MW&ofBU9J(RS4E} zOGk!pQWji@h=^Pj78cHSav~VrYCjT}N$2rls08(Ulh7Ke?y!_k7SQJ_z{cTi{f=H2 zP3RdGp~?e4RN*G`vN?JPnigm6TkRA0iAq{pTJM)q7Z;ZRA$BKdp`ocAG_=aH#9j6h zNC*@@sbZ-$%0MUKYEgWGZ;|F_VB@(|l;V#b4FQkY=mtOAtovD3Qe_D_FM9KWOYR8X zWX7^L`JI=K!(G^Ja+k!x@nPQku8#k{xpefdk50(SIJmW*{FUmRD&&o$N_ zx8R7PzPY)%MZ$IHJ@rQjqii6r33zZDj++Bv1?yiR(AK%zLiPJ zI8`n|>L@ZJt2N2miYwv2F+|;Jl*YGk^Z{N)@hK*&Ki}2P0}Ry;2mev$8ju4CHby)B^0NF0@%|N7TLlDmKO#T!Y2@n6KaN;g~wLo@AL@QaLDi>obf zyo}qJYZ6DF?cZxLR7F0FIp^x%SeIdS!~Omb}CbaYV12Le#!foi@(n-f%2=MpM zD=zL`tmkfZl1{hC~FohEKyN(maNLv2;`zrmfgv|fj{%MI_CT&}_ znto{EHDjqNaRw&lPqE}}?Cg*wExps-eGd&FOv`KpVs|bFcAlzCmW5kQO-=VjxDuY( z_Nte{txNrk_1~jNkc!tPp(0{u+pfVq`U?dUJoJo*|xo~ph2hQ}5 zADAH_A=4`w{Ub^X3xJ(e2FTRd57f~WMn*mpW<|d;#r&1^_1Hgu>@{l2a;Lkz5bxfW zShC>a>U*#(k{6_YxvSqKL0ahiVM5E!ZD7qXsrmh4xm-QzjhBRocZMZi2QpVz`R-c| zW75f$>J?{~do(6~{x))~pCQFedyCdjGb{uB3G*Ogi2#hrCs$Y}2DIpu2wk&qcsA{^ z5J4r(Dd(4WC(`3)k3H5N9x^p|o5K`ZSYIa~BO@#M21ipUJtt4oMNdOd14PX4r-U^9 z{QQRN?F#kzcTPQ&mPOV31BDwIa!(h1_QhY`iQFJ7uXZF{9)2FEL6Wm$;HT6;>T!Ld zZ8hL3yG51jo#o+>L*dqg@zvEQx+P;Vff|Ws+)q0W{@T16FnLg;HSi!OXCiZ5>SI^E z)TiE1f{j27G_AisiEXAwSnpNAe0}+ana-Qr1~=UThNi|cwiLeFe+;v0=}*bOYa}J& zPuLk)tcvmR-aD>-y5iPd}%#Rf{&C*SnY~ zmDp2|w?dvXloAIAPE2z9NiJ#C8(K}Q{P$q*A*MAZ2m)SZ!r;!CFHK6u8(n>v@sul+dmFH`NT+mUx}C^_L+3Z2I_?NL}FYa@rmx& zg6{HT{mI8{gosLRo>)x{jZf<#;ygUDSb3EWyg~tO2DxNIF~R;-u%l44|?_xA&H%VnSb%CU2SKkhyqL7C+Ub? zyiH;ZB#2VwwP;%%!eB#x2fH^(Aa_Md9#t1$=}#@M5>_jmOjKB)+oyomf<4#nG*3(O z?h3-@2(2#!zVZsNy+H$BWg?1m?m0BCOUZeasL{i3+8q@pz8p|iE)R~pNR*7Npy6L^ z%pZt7{UL_o@?52DNH;neCK3BnYvvbkKlf?*@tgrN^G9-h>Z$xpG?qsb0W&X1{Il?g=q~&=1 z)>RutrF$;dmHD|L<}4p#e^xAMXw{EY*Kl;a?qMsSjL}1xS%H~;I!v#XqF3Ar%5KG0 zn0})#($c~!D~0?>m=n5*Xk33B&`Z<8bzbM=qoNZG6}RX#!f3@=37og3{*xr`EqBS1 zbL&3!RW?!47tGwZ{{CHyNt?F1KS#AFY95>RASfaS&_2!FvfMnG)s7x3!3 ztimz(IkTlvp%Rv=7Fn^cO5-KsR|Ek`#&96PbG!m!j`l;^$nN-`7}ZhwV<-FzaA=xD zsnfEESi(Vh2feNK&`2TBo>LGpDo+V^yz?@a4QRY?AyJ#q2~G*Pp*z9)H(pLQJ}GfD zzFn1LTh(LZQgj_weDx7M;$Rl2Q;~)xg>%WasLi&g2d1tF*$(Pb()I_%`liq{3<7J{ ztgI{`;NAIVh7mXpiU_@n30=@fB)zNkfDL5|O<>WP6*wlLHwW$Kc;+-`meZj2>`U=<%|{-y_qQFumdexf23+ zcXvc6DEr_D8+Fna78G13BqEAEt@;SU>6mR^_Ny`C#4cdzq}pq~?W`oY;WAP?8(yWB(ZQ6boylvz5%XXI{{XzX7zA>v09&Nbde zmTG3fwWe~d3|UY)Bt5)aVR0kKis5x_2sFi#7$p^LD9q(z=`5F8X~)++sS5yww0rdp*;~E(sS3N%5nn}0s?~yEs$j+HxU)QMCdw{sEj@zHymdcJ*OC8!WVR_w3 z5(`(|BH~q>d2-6hl;-tAqC=@ZSL3jZilk{2aP812aF_rC z<>-I>WW7l{URg|}m$7wa@PtxU>`kWn-%yPah$DhI@o6r&;=NzX;?C>x-@J+2Z^(rC zUs|O%I@-wkrug^Brn18tR;@(~e>FcH@w;&14A7$kY`P~@k`#!OVG-DTfyk>LcaEqD zFLsY@HTj0+{d~Nbf#>T9>S~{RYi9Cnim7nWS!KMF!RZUC8g^Jk07C8nJ$A26T8lbI zz{F+0)6ui@p)F8m+e_?jnA9*AE>RwBcB(Djx^qjpz{%x4*ynd`eOIWTm5 zyx(ct!;$-|qbtwBRg6FD4K0Lo8n}1L40&U4GjTK;&Ed%Y zB!pcojrwcT{RCG7SG8hdwDAFOkU?tVo8vL9WE2(d6K~)Id3bW^1a3~sN=RgslV}{o64*en9zapv;Ag1&a3q;3|CVT3JxHrO-AhU(l(`>l3@+_L=H6nr7IswY8HR6#-R90k6O@ zj-p?XbiIX9SKaJ6pe}iEj{HKJ8+D6)r7^gBE^rY@TGDhzo8#=yu{Q zCWIsIb6>k6a%+^qHWb?ALuWnzFLQ44ZK z5E0thsT}Q1P{1VSK8uf-thB=VYOV+i4eBZwyKV~OakH5(yBgW)h@%FK&QqDUaQqtg z`jE+Xei6wlo?N7OSqH6|s(q_FuF_XVcg%xekX^(X#i#5=tB{We_w*_GgPn?uj2W6c z1#|BV8U00C|5ZBH{DAH!)o>`3^k?1bThOBI6@{er29z7F0>V8G?&?RkdVq|Q>>eM# zZ%i_5=iZtJo*oH<7%Tj+f~o20IQVHevGKNlAi2yhNfum_p~(}npK>=1@nnLXzdcj+ zGX9Ni7@`^TYYyAF_1Q|xsv;FS!?1a^Rit@5`EOeNer) zb4@#2;u%=h0d(v-`jtV^e{{4ij3x6eNc3r@r>92+z(gR2W52j#m)?xb3_kul)8F_T zYvYpt)G4!h|9~G<&h0@*5E~{Y6e9kw(4##N?dg+0`~vDbH{J%HIVF8j^%E!-9(!r} zE_(eYZ9)^xLb@Mkg2;BZfzz9H-->3Qzq3L(Mbj2*uhxBAf}>x8a&F1XS6Sav`qOW9 zu+0iU4jVpl*Tw5eflFMzP37$$+x>oSv-K&7C~F~FAJ~Q})bHNi+N~aaC3p$l#$=U( z%*(C(p?ayx+xR*Et15)Ek%2}LdaFdqD|E5{n_gHv-sLEu~{ma2PIFcvJj)R5od$rVk`ShE#KWk{S}EJ_Mtbz zO&GZrL*VzX*Ur)HYgkm2$-%~|LS3I5ZsS7>+KvK^=lLEM;_>H&NgM(KDFFu~@B3>l zzJB!mTQhO%bK68yU02Y{8gbjP?f$?I`WKa`938JmwB&ha6T`R&!yxm6F((DdZ|N6t%-DTOMp?EOm ztT`jTnneG1)5ssQXlvx9k7f8Sof$j#Y7PKfRlU4Ogo^2iZrMa) zUttxsz|N&hC9-bzZnQUT)PK$(UJk_eAPE?#qUw46SF`8IBbO)JO@br8%G0&#;NLK6 zy#fXAr&y*si5WHScX-$=kcyWUo3|S5Fm`b}QhPs?etj0-^4+6VYe3sfi9zo{pNI5a z4YQyQXX!_IKg{dSj>krtn=lp*HK(W_y_qoQqf2NS3&cn=lY%JBwYwu<9QlIn;3*Wo z5VQ>K9{cxi+$$OTPLCyQ@u1=#?rL{p2_iILXN$LqV1IXw|GPH^AjPmDGQgmnQMj|O z!n(>y&&>Q42tiS^vw_vLD~r0utf4ox3>w%r+{~jB+CG+kjr{&&LqeZAhVJGD)*rJ_ znvky;7b@C@L1BgNJwM09J=M$7pCAq3W?Q4=au$m|cFz48?DsEz8MJmtAtGN(a6Ffo zyz$`bgeUFVwe<#ru3Opuo8&4wPD@Qwp2qFJjx6bfRMR1ShkQ_P-_Gr|>GG<>{rzjp zFm{QMOSLKQ-bPQh{0p!aZe21$8<8?Z%Ur08m+~2)W=z z*gOP3X0$F&y=Mn&JBO@zG66NmcEjD@t(V z1ukz42KE-VGz~L2+?wz*d_2b&wY_#!U2u1C#%zuMwSchM$5~27fm@jA^rzp}=%zBa zBk1*F6H`s5)N+}nl-Yh-&eBc3!MMK_9NrNZi%d(f(UtqutR}Jl7Sk6Y%fjK_nS z56*InLRRX}oqxkQlyMKcl>u*vy%i4raGoR>ykBS^;eK%WP zkT36G{bkeF#2wMi8%nv;7q}k8T)QYg3G)tyL}u$N{)7c@7;jq2l$!O@unAj14vk3o zqggJ7HFp#@->m_*9GXsMa5SoN?g;%mf47|CP!4FnrASc_R z6)`+J8wI=~!Uq+9*H5b9ve3!c>(>lmi-nF6jfo%X|9*tfWqC=2fT#vgrY)r%X&WE1%+I{deh_1QDJV+)<0}90ISV@PYq1yDz^GpOoBzlTB?s+= zB%24g3G`w99k_BGiEQonmI{sn%tuD24M6Md0E=u`i@Z&zxHHot*emYx`%B(W0N5Eh zavCjK03nkU11Wy~MEi45hmS(;v$i9_4J`*fr;%7&-x6OZ+EUUc!7S2ik*xC7ph!wFa zSyUp1&7_v8DLd45my|r1gQbrTgf0omEemMo9fb~r*-m2fw0SP~$Z}r05Qi0@EW(U-<8+&;a^k_3 zBupVZgyQ2weof6)AZ}G{q$Lc2>6t3_Z^OyyF>bgOg?%gS8}tE~$RJLaE-)5foA&9t?IsZdeb{&{acP>z z=zq}ZwjyAoBbPiNXcth&m^?eF9dM22FuJ{91NU<^mwwhtg7I9=~d< zSe6jcLHV(b!e0C<9X4d?dHV8inagGpFdk=O4m!ApJRJ%tQq|J# zIRzD}xM?dMpE`>0wl(t%m^Bf*@o$lYG=pKB;k)28Ezl&p9){h|jnPvGdCzaOi8@e- za4k&<5XrJjRs=t4u8DTQD@B=-#oZt=e9fyfkf3EAJQcyqDDuk}>68&#ad$?z+{Y>P zXbgfUn~%qRw*q8fm`^K(Efci&cGnUM3Q*l24f+-qMqX#J+{7iCzncNe4gLHzG*J9b zlK3uX1w?x8L2R9Ch}PMLmaa^ZZ^i47n1*NDgsAfnBJ_Q?O=X)nHp5;JS~n{yD)uL2 zTmzL$oI*X2!cp@`(#D4siC&aRdwE-m`wm%N^htXMPxM3>m)1`)=D{$MDzg$cDk@Mb zl82?r`T9i)?7IUQZRzQ6V8?f}!E|C76@#Esh9UZ<<&7MaXVTAxMuvN*$mshMs6p$1 zC!Z^tMqu*L-(fQ9t3=;kNML^$`xTunf2t8sZ#a1UdL}vbpBw-dnGv!}poc5!=XcNz zr9x=+04_*{OY6I!WvI9xu(C=F`9W|=MO&LR5ocb+N-s$hZf3&s-hFrsAJx!e9LS3c zsO4V!j+D5`T=x6NZN^`XcWwCuK*JbP74W2%_by$Z{7j#%ila@B`%!ZSM`Mr-k(iih ze+;Ti(c16R_&DzTZN=z5Hks_^q=sfsVhfc=`EN0QL+rt{-NMPiV=9VmR#w%rD**%17q% zXeu4EV-9(rH2xU=Do=s(>-;PBbB5c4q6=xEn_}1e_0y*m`U)Tljc(K(PxC{?EDvzf zG-Iu35DD4S#1E|+_Y#tiem% z$z7gs3|uCca`Uv8jIImW_tR<|Vpu{vRW*HtJbNL1AFEG!rVzMHZKxC*+i>jVP#o zUB8K~M~}GDky|C7Wz`5FDgpr%U947z?3iZ#=~vV(Tp0rR0?Uv#+@bHNjxVj?cXs2y z(?Emg0Kc@&Ug75LNZXuF>Z zUaBhm!CjmB@Tz1cW) z#q1V4z+D*;$nMn_N@sFo`zyi#7M)q~0dn=9FJHb0eVKSx-u!|+5~KRK=4xG0{-;kP zP8$|AHr?KdrnO918^cT*={O{W#Mk$b#G(a(QZD3vYjt&LDBPi6f4 zsXzEDGM8!W7=rL(*)|B<2a*4XKCqdGY0a z#1|gGl&V1CWbWHjZRH-DA!C{MWvZbQb%Afo|3**dk|993zmL^*ayP4^8Us@BwVj!Xr*>Z4)82%81Xs_Re63^nU6j_U5C+W=s9o3{SD=&Y=)EU&99GTFYx88f)jn>snBtxA%lb2ha6k1{EM3G z>(kU9KJtl!#Jh(GviB0l8k2}9dWWXW@mp1ei%lF|#&C1iANFPVJ$-6*{QNee+shXw zb`#Opz1n=;f`!baXaz3>KahJ3`?{pv@37I5oBu&?t*QYZ0LtJzeoMRy#q?&L5S!-*b1i zS_&;c`~MXb8d>SkAdZK^ZlibZb??vrJ${q5^0>CS_-(bfRQ~(!Crzy|SE2q;&(CUc zvNalhLSh&AMl}7qCL-G*BD+`)K36Vd_4YKWoxPs%dZEr6JO7BHk|2L_a%yLvguXwn z_U*2r|NDgpenoC3y|K-^MDc!DR1%>f=00=+FVk($7k5a5QciF1-ISBJ49>Rl@9($7 z6Bec%mn$tY;&v?Y2ZwqMLydX_BZP~2) zR3hvdx+f-=)q;Wi+D1-6$(7lRA+mq%=UW#3xPcY<;wK$F znccUI=_veng=ux=(YqHRu0nPQe>8msTvT7Q^&Of&-5t_MOLrqG2udRj(x9YtNH-`5f=IWNbPZk7h=Ozq zNOv>u%=f_@_GwP#A=>nUjP!tQAKK@N7q1(X_?~EJ*eoQ_jkBVDBJ{5}y!3P1FV2|^ z?=}+)e<-x7J!27K0T3> zUwB%xlf=_FN7^E2wqOVEA||#*Nke7)UByY)F&&m6y6LW`wt#2%v1@X2rYf6})OnG6 zo55FK0Yy*WFd8VH(a-%ZMI+nHrHug{r^#9@#;KkLnk&73A_jcoc0FjX>w;Yucih=l zypNJ&B2PC}EZ$0L`qQtc+`pagY4?0%1Uz^3ZPEJ70Rga`z^AaQ&X1uLS!>8Sk`Q@X_XOO-N;bw3qq?w7HjQ4Jfw;t z06vxtwQdXbfEZ6q;U}{xZ73q>eR|3lfIA0O9xMr)K2ui6vU5Mk`L6>*T&U~)`}>!T-Y2hIzs%{Xh7VB#2HB$< zSG`-wM~06`*n~{&Gt-xTYlMN-l_Ll*&gr!$&~xeijq911xG&k)Qhs(^+tAS6t1LBK zQ^V@5mU=26{aC2=ZSjU?gv;O`jMx^ENji2R^DMo9c)-xcO)H#54*8{gioHr@K`b5vccgI1<95HKYb#<+4Do?)ESZF@jL%~e>XZvuq>(G(Uv z%k(Dc3s&tMW{33e*y1oD{PF;;({$Sg+uDYhSLS!uXJ3R#>I3e4Mo+yU>+omAcGRff zU0*w(0^rVI^n_e^ICZ>DmOnYj-)`N5Gy&_+whf$)@r~)SRPXS?NfAzt;#W~c6p#(U zQNp`|HoiyZgx_QXbF<}sJHr7Tn=*h$Kb~a>+HmeyY`tPKPIOJmDAS!E{fpD6jz_uk zUTE|A!F$qlzEsqLw4b7+T3>Gnp|_X5!f?1@4^4%7C2HA{l4Sl!57tPkOLX1Jsg;}~ zX!f>;L9;9pf#+^0l`1ON6GUC%zZh90ut7uynfYyTyr6y4dW2y!7)o?f2bwl<{!!Vc zN!$w~qFs-<#ZPh=_i(joH4PWzg)_+v>np==26t&=13QjuzAPEWQnM z!ucUSiH`~mrp*^3s&8YmqE;P$PpGOsY%gNTj6(y7-r|kd{^;8Q038E``>ugG0B&Eo z?U6S)yQ~HebPwc14grpL%#D>@E=g9+c8TM3cX3M5fpF$RP zcFVoly3;GLk3j<;v)Xw z9b-ft&O1QSGU5m8s5eIT;B4Q}Oj1f5oxz`R5tF_z@SHw?L}XrL{5N8++)_VdD>RVo z&`Ih5d{JM?N|gxAa>z>etb}^X+2pJ_?vO1t@wR!}uzE82)Ix*Xz^4hs) ziTS;!s@NXL@$@|Y)2^R%r{CvM478wCivZj-p8lsfvZcG^BbR6l{M6CQsCdBSqI_R^ zafh5Z)hdeW`hYg(!^e+EU{7VimAPIzCN-}~e*Z^q#%=m!lH3QwQX)pJk;ZoPUOXcN zAXjGF+T%y&AoShpuj=&f9`38?$ceQV!1i%}9nz4WCbt|YNFq-tqw>P%{ZW1EnD5lW zG8B}AoBV8pwbmhKC6^XwY1M&}iXX`be0gOm6spxmSHbaz&unHgcv-b%JJD9E^57;A z7M4t*sO~%vNWz{eX^jkrVqNFHIXb^XXL2hvw#J7~n2+pdSnzahiswGrOGrpbs|Q9Qvj*?CI^G+k1vKa`dAZ z9?mt8y^;u1B(4z!DfiMKm)_Ic|5N^w=9XU3 z+L}$44cBjaJ^YaJ%Q*SKc^Kamd&mNIFLi)5<|S3XCEtrJuV zUb-lvs94NS*&zwH&hvhkp`0k(hc2(Q5^gVp1xMr+cWm|D{6~R<)9!jIa66#hX?dc)cG6@YSa0LXhW;Oa{^p!%BYq50807+ zjjOR+7Sygg-kR7yvb38d7>X$GX-B&R_MHc2%GRHZp)9wwtNsC;jkk%_PaG2b@a3A1 zIX<1jEXgC&h?+pk88s*z1K#p6dDd%W=~D5rTd=5tD>Z+RsBvh!&XH^@a^V5YZiUC^s;;~?d#VHTU*=g!tk`p^KJRdSHJXq zhMEJ&4W`E|W(!lkB=5+7I7vFe5gxow1IN;PIaBU4ad+NZo!Y9Nm*wtq|KKXCk~q?7 zz1_yqY&=ysw?RPAvB0AR$&(F?=)Zp0)2*1|$O9q+*&6C)q&;-`cWc;OM11 zZrpb6GU&P3X@~E+8@1|O;*V?ITE`^f2;(LU-XoXZuG3~DuI!{1uaQ&yHMkyetrK*J zi=7>1IgUcW)N1ZukKPLtgRtoDHJ}sH75`A=YBXOCbR4IABsto5W3U(~V8k87?rItH zj|7LVstv=r^+79*f3x@XV+ok@jqg8x1O;q7i%PSgMEshce;*Tv=e3dYONd0o-HR~b zwge)3ZR2v>{q+`Gh-rxPoS}^drHjH^}BTxlv^A&Wk5! zN=5*#5~!nOzD(?J+l<4=C#Rw!d_PO_9SqEyx62&?Pb`W#NcfzH#avl{qf${&U?L_a zb^*%=l*jSAhr*fiu^NAx+|o|gjc~ECzT3k8N{Lha7lz{DA$&-^8xxcRzqG!Xwq|pj zWqxtF-|+ybfqhP|N{=3uO?G(rwB%~G)=m&E*^xCg<>y~>H7B+2W3W&7iax~3G zKf3XxS3Q8qBflP8D|-oc3~<>K&d15kjU>s9295uR1&E5@Z!PyR^sUz*=;~rHBD`IF z9{ETB`hs9hrT+^QW zot8dY>d2p4!!(Q$*=w~P(gnGB!;2CY%W?dQ08_YzJ!t%X-sJ082P2b zw}v<8IA+F)vGl|B8nU`lG&QlPLB=ic+&P8-FQxzzqF|Sae#oe!n?NIUTcFELEO#uS zchv@^USk=vmHyr&F6;QjuKFi<+;#viqr+vH-}S`{9fz8Lg_)Zw?-P|_Z&zMG=W>`4 zi8Ynn4na%+v~Ck14-*@`G`>0+%sO1YTrx|fkj1KR&Hb=H2Rc-@@_9$%ihM^A!#m1; z@TBWE!BTQYTpCNii4bhtTyhg|_E1PirC8>S zDpGUTL&7*7gqyXl2_!npP$*KcEIf}*HJ^d~dHh}5HH|+V#yo~60q$7{LbQm}Y+;@n zUeH3Sljzvc7A9>)yOKv}x)6ECHruXe1oEEU_>=aUcH5KmI}p8`e0i=Xd9)C$c*%H& z3I!EdX2luw`G38NGG*HRtFMC*Ze%20yWJ!pZV?G2NOPGwVIykL-w9&NG$FSYn zVC-ofrQlKvI1$b`eKM^u;=a6d;khD8M0AUP&@mFf}cYc_{R)^y@S(_G0SDA9kK z@QedFxF5-o({iC(e^%;jo9mKT?US9j5i@{>5N4e=_b%Z1dACY0gcKugv}H@JoMtn4=A-?VjHIh}s%Q_b-j#;WQ@j97l3)+Vbw!Gd5wxla+ z5hcz?rb^x4ZbJtt35hSpSLFSC6Dw#G`-1%C1SOaOqDj=`RaV|yc&jfhE1!nk)F@7x zDjVws<}o>bIHINhMG9fGXEy@F+aK(S7XlrC-1hpc4(b(yKI9D6UXA0LYOV7Gjq}!G zKj@l$-Nii4B-$k$b$Mq|F#y*?%KXiN9FIvu)_)%v>CCN&8eh=s z4oYb(2V^IsczyKnzx;S;kcdB)^wGuT@?-HsM0h&?F|{lH2cjKr5^H-nR*#=@Xhg`+ zCei|t`SynCM%>&?;Jye5ev;zXQK$w`=1B(eDZf0Xypq(2N77)mHwTAPqIL%VP2Np= z<>3F3Y?lK*A9w+*IvKrSqh~*)deV3>#I#O&vjmrH;b;r-`9tP|-#5iy)DImRK7tTn zbdcTkiXf;HdLse!WXxQain0Qps_TMk0KilfGY;ty6!tdmT0suU%u)6k38 zK0%^7zfV)SeZP{V^95yXZ;6``0tQsDXpt!+C8CcAOIv@ zXBhXt>Qz{P^sz7jDAPrP?9cNoB7Sn z4}CX{9Tfvn-H00p^u8k9#NdCs9t|-8KnfR(LKUbrX^u;K@ao{?_!v6GDE|KaxPJWq zkHVq%H|#mSpnilaKKO-A z_0ai5@DpYXn_tdq03tNSKP`fySov)ea_&a56?uuOSY@5EJqfot>DogN(Xr% z`J$iTe{gKq)VBK}5V?(f%cDXPYMD&?i=pTzjO}_&LGh?6^qP~CGa8_qQimu=z1a%G zdnW$4DFEhJlYpz&8Hj^stsBpdNi$#H7=;=GuwD)pwq$J%gpmV$y#V=$M)(Y2T6*IC z?}Mk@L1%6=H-^U&**h+h$A%c)$v{ER73A6I=ueQTr29{x{$gn*wha_nF(LJ^+hxU1 z)e{=RfI{&;uq8Rh!RLzrUO#&lNC60d#Y_E9{;D@8ignY1`SQQ;)i1cOVl)01;o3b2 zfELC|1uqTMg+EeRyh{&woIV;Yuc{Fffjl9$qN|y)B?y$l0^tOJL>M^-#K1YAlvjf`c=|@#+2xYFBYc6e+2w_|%5yqaalp$1a{=zBcZ6 zPdXK~mg#&<-g+ebZo-KYV|#3^?9A;;Mdhs5hxFzB=-^sd=bwXaP#Z1=_!6e3r`Kx6 zWZX(U0fy-v;_hM%K(jzClAF&QI~&{NMZ07L1Ao1&Ip7o9?I-WH19g#atU`OQDaugOdmxAj7(}Cf)<#{S1l=68GXOl^ zbEg|*)i_{%IBlu{-V@{>!1Lz`!7djH!xSBS2^%Xb=F>~`f@a3qO-)qL8+dv~#>D)5 zY+~XB7B&^n>;W!dL=ZN2eGA}9K4ldZA}!bn;7WL&9bv7dr1!6hxkq@ z=Ha1#xEH{E=^5CNRtYj36K>)F-x=N9ERpz1ldxU01`xHj>FDYGymL)xBJR^NHs*;& zg@A}3W2|1hS6|Bhdwx`r3is40;!LLDAn}YF*Y^B`&2L{4#JM&l7trwjT!{RtCrzC{ zJ&>gB!qrE>yE6;%4nOm)vK)o zV{M7#RG1nsl!`x2#d6v^4ORntv|l`G)_e@(rkFp5eG~OtA)u4cJ~qwEzo`cF-vtGJ zWbPL50e`@)1L%2K4#HVB4b8nw3=RJ?H8mYBEmJfyrduptE32=BIt=tf4e=Y_qfn30 zgo{~IRb^LKV7t1YnU(Lm zBi~WKl6=W08UutJ0?2TBCetUJC85^`*>C9N5|>|2!$V2OwHv+;B{ zeJrOGU;JfZG}^%<->Y1v{pFRy1+WS%s^z-LrI(&>3!Q79_NJ7A+B8x1@1T;70_Zk{ zG%WhyIQ;(BSz&yBhhfl_x8hYv0Q(~4L5`pj{jXipgPb9rCM*H(W`2IY82cmB zjRM9ZPMoreUCAF8F31WJdd8Y^Z^FQEYh;>G7rx2zsSOT~6illGR4j)hgXqp%v?(>8 zWiusW*sWFaevjYPOq*#w@uPx1z@#`7r&Y6L{E^dko`xX-;0<#$vSdCuoVxE1-4Rdc zW_1-jqu_tLEC=2t;MQLjy7OIIgB@-o940ixS#OkwZwWb&T*bKb?-+c}{)HjGpkzCJ zi&C7ed&Vbrz9uI^?n#Y0Qon5A2z4WIhtQ&x*SI;9+BVo;hPP=>E;69TFo~;Sz)3D~ z_G&M&Oqc8Zmv5YyAE>JoCAH_9g>Ht9->JCQM!%xKR5M;Tnto+$jQ8jy{xHiWZ`rAl zfp4Z_dWTgb3{c{&Dnfh^ljV_@zx4TM%6tM?t669EpO8bvEURVJzLD;3RJ(A0AiAzf zFZ$nFW-<)*($mx-GNy+)c5Hf@!eQrM(6x^oieR(;nGlH7CscN>?7gw{+@+mYRadU0 zFzs2{v!9ZJhtt=nw;3O|YvkM~`oBSiRZzbC^B-CxN=o_n9h|jdZ$CVwQH0O)Rm)y; zX5&B4LT@tbL_wF`3g8zGp;!nvul{HEJbnjMD9!^pX;6_L5YbR3AnAz@<}*@xi*~UB z5SEA9s(sRClPku9iZrqc6Z&JRLVgx$C^nitby^VzvRu%ifvED3ba6#R9}oc)06?Xp zu^yu;vtTA(-gssw0rxFUP~fEKjUc4vaJXahw%pOGo~=DQwXX zhG7Xa)Ag4o4fo9<@|HiO<~%$*D_AQHO$N2Lpp)t8>7n5{dFM#_D5R&U&9drNvx%QY z6`*UTXy^nc`j%P(wyi_3eBx4*WO4=t;AKLq1O~)abWebsqJ;uaq`6Wk86PeF1J0#5m>f7YfUZ`N zmxtMB7yRA1zd7g!9nG?RPj3J56>#W%u~drcddMzr*PhLk4@h1NMBL?mCmm%J5J(zD z6TWj9Hd7rreFtB5mKH;Ap!cUfTvfkse^1{ZAuM`SncaUC(i*<}J5OWncZgQ8!4B?V zf6!pc-G`g`-;6_>dt~mf+aR;s#uuuO=Gz&?zS2$)`V1ORjzLN)?{OvAF}mFuyyHj# z%W`gQZ8Eh4;0P!+c==KxZtT(}kL6`8UhZQHM!@pWh~oEm{MWC#kQ#S<0a-|P?dbKv z_P7--)NtW3FSzmgt*>bW+ZtqY{`I+y(o?(lq1Pd&o7;F$I41Y^Mq{v8`m*uF9k>=6 z(1$2cQR=Fulhk1OP#^_(ol63R76{~jO?gOr8gPATm*|){j+QCoZ+P5!q?k=gCF@FJ zuRqH>?Nto+-Pr)@9^^e1RHK%rX|pw+bK36$fTInuQI_*pv|bxj%9U9JsBywuXA7QY zJ^D~bxdEb=f!~6=y{#IfEkFho^{Y)Pe0yg>!E(hq2-AcvvE)#pH=P3OS10e+AiKT? ziLlEaELiIxF?9@ZQ0X~91Uh$&?ic&?SKM*l=RuY4FerzdK|s$OJ%|A3zr?cXq5DOp zmL?az(1@5=P63lHwKRU`$FmBTuNVKxW;(Nn>0?*uU~aAXmz1$OMD&&xiCefs%kUFl z7pEESoiVreqqgs&qybS+UD@V4j+f;&;@gevi+ zX*++O5?BDx5a;|M9>qwm!TDaZ`JI$OWU!RzWMhB-`CJE8uVxfXP&hHQ(M z>EF$-v$|8QY-vZ*r?Bj6itDM(!0Dg;i0j+6=Lie~ihMjE?~|NfD(dIIg16|Nl+j== z*^$9lqP40}Q-?wr=fPy{5SFq=Cl7Yv=hv5!&0=An`G9C+=>|85|2O%xttxhV2@;3! zlc=m3;m9y=4@4X>d^H}$QzpSMon|`p!TGJ+8ha9`j)I&lQn$Q~ZIx@crXQ<#S6`!< zypdl%BbO4I`FP(g@dNp>rZ9}v+&O+9l5`%ZQN;0+ZTlYsK_;E8C%;*NM*SMS7aH`EQZqrn0~J94u90F1VMhwzF4B(P44CvTvWw?`@>z=QMVw1{dZ>_L74BycQ(6k z<8uhIrxyc{*>L5+eC(e4MX^``$NKN9?N0>btLS19wNwVCx*`R|IEMGi%0+hA|H;k1 zjtXVv0No30S(|}Mv=sZz;L%H)WhDAVT3+mg@a?`~qLSVWx&w6)^Pb%Ok+V^IG*|gZ zqsQ5Q$ssDa-x4ID<*%H4Yk$ob(Lk>TpRbCa{_~YZUR9g_b?&xnn|k~E=3D~EXp5=F zl1y0=l6&dza3o}05#bD(`swQjD2{d_3bATj+QXki&}oYw28&Ed#Ve4?1RWT&7}7WN z`4(7dITj2IBSHD{*@M`6E%HIz zl)LfqMV8Au%RR~EQ``HKgWul}tLl_Nfcnb)N;2pdSYrWY%KB4HZ*SJ<=;wK@tsk73 z`v>YsN5{fH;Pg1Ugx}P$-E1s_j?1C5sl<3d7%RbJ0II`Lg*%8op$*wCLNm`O3lH;Y4LY$C48R{{Yv=Y!E|xJR*sj8YiO4?i82+o};^S9tpR8&OuYZQNQS4OI_ke8@+u5hBEsn?9L*_ALjrvw8la^{(V-;*G>|e})emSoX+IN`Kj$Qi z6J!^8^od(x@cIY}`f#?ERBiPlGhQp&bY#uGD^T>!R0?U#3*9$a&_}p#_%y>r?O^}m zHFL8j;tJ}4+bzn#plq)bEk&hRVwuFO?#V3`&$f&RigO`xv}8ni@ZST&r$EZy!Wv`i)Y% z=E`ljQQS+$ws2giKQf}(ckT1`z1X%iY}B|1e}$lEw?nbtF~=8P2?vnBcJe_<8S%I58|nO-xud2MZXY$C$F-u{YSL^{ z|0bOn0Bj|E7K_GASg)2>_7z=@=V6>zn?N)Msec>MLZH)&>54$@*x;hb-z$IRj^3O{ zeKC>O{$x5Q@CFE47>)%5A=xqyOQe!j zgMQ>HM&Pr(Rv(G`6beXjqqT!Y@}-PseV?WbH-sPLv&p3gWx!*`3RE-4FLsSEQ_sJi z6$o{9JouRCxlh^ZkHT`l8f_%?<-6iFsowh2TQFv-lJC^c;QWqFRaXtQXh#nX7G1|9 zCC=%^y!RpceHm?HW)}EVBj*2`mk^khLBDyLpJsjB#7{eG&xlCPU5y#t_`C9YHPDSn zfJd&?{yHl}(FC)Ve+?AKC{g&ggC}KKfxYN6{Gx4Dd@l`PkA^2+%utk2gf|H$;$px z(hcYZ^r{OVKfhKWrhrClZrMHy$&s1@z8Fw<(eUp|uNB)h5H2s;dd+bao>|jsBb4=JeJM(@W9qZR{c1}B34+U21(0xNz{s$UgmPj$2 zpE~Xr+j*he&${nSu_HK2J4I@rnH>MTbnD+pmji>-Z<1l;H&~gW#InQXaJV!=<1vOg zLVCVy6!Bd|+I;s$?2E&U>`jU2a^h9l>6?-q{}+)Age1`SLH){i-qgJ*Zj4WN9De#0TAlz>HXWxbX1^yFR*G=b68^$Ue`%GLlh-< zcbzkE;%{K@Y&8VQ3HzoT4r;j}cr;DfH+gZw69)ee3qbJfsvQzwpnTo)Zs1mDg8LFp zgyvqkpLf-2CWY$Ij!KgcCqTV^Tw5+K2{V=r19Pg~^XW4f1XyR-3=Zz@?h4ohgfUhJ znodqm3QB@(4S1a0>Z?dTYKaS}(DQquxYt=j%ga#D76tYsS3GNE&}QB8I)mOTeZ4f?5CQY%fscU%Jh0sOJV%x<;hB!38W$ExepH zGPO<_r|NygemMvU>8Q{euCnETI=BKVQJnNk8baknLpKdWg~yH0n)>x$iHS`qn3-ks zN=Q&U&DE#${7xTRoQ8FP>m9FmdR5j#(SfetCU*xfexkOQ6bNQ92=9Hk90YP`Kr?N1 zHD<%ANCt%wPmXb7@O&&+Mjtu^aLb*UB&*-=(`954w{CQd|8a?+JZ5v~69s>75H{7_zAeYN>ba)e4F2!t&#DV2_~f_~ zz&Rq-icVGU`)T#f-DO=eP?a;0nwG73f8tgV;E~N!3X4)?__(FE(24ek+1)D#0FSU% zdi*%!TS9z%ABbpH-Zwx4%+hfuh9iRSyH1>~)j_AF3-dh*q=PN`uKX@_pKmNG1kZ<{qA4(l__m*`i1xbv z17Z&0I2D_9SiT~;VEQ$KsS(;b5X5)_;4J+?uL{IWwn=!vw{{8=(p|6ymHK}0m+8a* znjuJa{zV#x;gDUtDw{KFirvd1pBr}TprDuPPPyGw7z@n{Mu&JRS}blrBu zk{^SsIa)}SMJ0R;$D~F?gE^5v@ zbmi=HAv-4FXQg(iX0v?dz=nRnOa2s+Yi-{e`*AgQWpNbe&c9F9Khb2W9Z=R%pbj4g#pnYfNyUI+2IKAVz;P1|j2OrOB9rpzF%b+=6_2>6nIjh<^N0gj~b`P$z1)4U@ zxB^h-)(h&P2Lb<3*~U=+?(TkThAbYFy%g8{i8Vr2qD(bzl;HRgM_9fzDa;h#b1I|h zb^Hy(E&cMc*V~+_6Vo!t*Zd^}pG#-FGih+cGD#!VEZR7zXH#w83F%w6?$o{gwq?Pr zxjQ9h&tk!Pq+@7k@0m3@`BFzY&B(91seYXa7h)QkC#wq{wR!IMBK{GNvVLCo&(70~ zwO|F2V>LKfBJE30J?uDkl9|HG;?{Lva#HX3;)2QgLVND`a1g^7J`!<;uOZ4N8eD!^ zQaQ29Fc!VU;3Q;V4R)>Agc1Z%e9y$;u5NCuM1?G}zPxU$F>*}YtgPrYva`jcb=cN{ zwJ*{E@>!OvOTQ(h1N3?5P{5tbVnso6WQyDlSYGRuQ>`oC;ee~rG)jue{}M9roTA8R z@VSQa%TalO2VBQO4&ma!!C_XCmiUa+1^c-kK7ApaRot5zC#5OkgVOSxhhgi?C%A|F z43$}_-@oKxgZLMzchH23sr?U5%&U+J;IPykXR73}Ovv9;SW7)%wO}1@UVi-maLFiU zW?_EC{6?6_CQ^f96ixHj#K-b^cFB#;!zAK2d2vApgm!I{w@I(}yNbq6J9ZO9 zR)2;G3f%P9r0pgbX@x9(z!Tob;plVPYx>23TDrC2-QkJ6ol2Sz#OgNM|R3_?2jXK zMczt@fu@CwgZL`&H-IAcABUt&2IlUVETV_2vi0Ro+koUs227nD($+nPEAoS;un}BX z6-m+g+h%r}jgQd-ROQ%9W_9?u)hq)A2tOL=2l2 z_=EO|USTL5{c<1hvop-Temf-pL_@u2x*{R?^he>LdtNfu8EE#~EI8hD#GTHsVl>~8 zkqZPt-)KVF=-~SwJu_D>oHX!x-hwOl%=9j>*iiV*W7pO+uLpi#-rOiomy|GV$ZwjV zCnS12TiwTcH&_Vlzj6~#aGP^MWdmb97sRAHN;MusoZ=z7HF9aGj0$4t5}=A*{GpeiABjJGh6S3V`F2Z-VOfv zC`z1|EiTRa>JF%jPd~0nY4_!FG2q&736rhNw>NMA?{HNr-8=$Dq*M1k{(Pj$vYRV? z(Kl`+@ap(=vS}M9kAqW)kza~wThvf0pM&z43qz+pOoh2e6`By0bXDVWTx>PCu6nQP zG)|~}Z5ws@%R*TLB@}LVcQ-m_(a)g6pi5YSccEK2PfKeb^6--EK#dGiMV`<$TO4P~ z^}zMPbY#yI@wO##+)FBO0cwqW>(maiks;l<{}wP~@D*Nw$!g4I=2yw8noWF`!cSAK$*!tuJe{Lo zB@dsE(Ls=Gr7r*9+d?YY{<{#L3s{T$HgPe*%mTzCDKFv~F_hQ5nW!}bD+#1rIg3Pf z^=LYzsCTeeG>PJXAJ_UG{KC@3UC=Q4lx@ndCWly)L)>>9t#usT^K&mDI?fe;X3?=x z`q;YNUDtG@$z^`A{3MslEKrB0LG>;>P%B$jiA#be7=&Ae>WXgvscSOuzqeg_1KpQk z%Q7xrZxQV7HUZ3Pg#;g?D;>KtW?FKvZeoKN8obnrVXE(Mmx=rNxt5 zbnd8x4yU5uUMr&oDp6gqTrA^ve_+p6nIWhh1H-<{!Nw*6C}VZ+5Mcs&HyTe*&khgu z;sa_HBM7A#C2K>t0>SRNF;UqUYJL@9Y^l@{`RW1}=a3tf*vZ0@Dit0U^0t`?l;9tkQLq4Z>eLXX!^7B#PSPM`dSe zhgjoz(uX+;=RK9bao)tEkCI37Ft{%~jruOZZt*MdzD9MXT=df)8@;*v-@oGJ42hwR z!wYt8x1KewdaQ;UT-fA?@%-IK&XRSynLlZZrC4a1&s09j60A;77ZzJ!ic4jG?;3N@ zK+06szFDHrJYmj13z9&ntlzp8kBrRj%Tk)^rGDznJ$Q0?d_steG1dwXhC{gTTDYHpb0VMW=w@_+X}RwEJign?uyENm(>m z(Mn9y(x>s$qWM-Zr6IYCZyf*a-s9@r-6^gP?FG?G&&KSGl0#RDc#)>%dUp$mzcc@K zWMk_YyK-sHW$Ibr;N&n?$!{BFAEBS1`9Z;t`j}Kgo7{yKJjD#jZ_%zel*sL|iM;<| z6HAlOPsref&cWJ{p9(I@U)Ch%TKxP_lNIdZ5>*e!MbDy`%yaVz87I0GWd2JEGgJtz z3rUwF(R#ML`Rl*D!t!6IpJVQPDv%$~UaTWgg|KC}ateak-WdMh0ssQ(n=(p=K7P?!Ut!Hg}vVYI`L~x^9XFkq8uix_n^r zzLkLTPmU)VZcr4&dX$%fl}BskNcucxi$U|o){O^^lJWj1KUf3op|7G6dI%X^t5+lc z710HzMOQK4U_99bEXUP`_UHE(VOEW_OAeE_s)?aVfcZV~(p4Nz zu}JZOto^)053e~C$3mHp!W4LBsYQgPSWu}drGK&?q35mn!`kAKBr=82R${i6QII-!x<_S3fZHUVXHbe4UmB zj{E{}OuNOi<8B9vJ@6vNzIZ2ZYGbPu<94Zbb*l~xBC35K1=Q5x&{Hn3NT}y z7(TD0MQ3Iut@vB1}jB<~6LyxbgrHP@i)oV_#_b09NA zUaw)Diy}M#geQ2gDaFWv#)3SE3j7`ZjEYOk6;k|pa!tM}wPk}5IGEjL6X ze6lYp+d>3q-7h}%JojzzRK1i&-CLN25%wmODPlHCxCb?81X+y99?4#h<3;t4m66?h zx5_>eOkK|Ezv&(;OR<{HBUl(;zgwcrTpH>8La2@ExHJtWSZDVF-OhAH?{%HS%F2E` zIP#!UNt&onWDwn*%!yLkM@S`sJ`On(nVxVG)dRux&V>a!(d$sA6@_06zPf&|o5oZ= z-8jx~kvxp*Zcffd$Ohpc2YoPTNhnLjZP`;Mo+*lK`$a3 zZ*TGDapyE$*3t`^z71w!POOiGqzlPY(;wtB%hdJi0lTDqUzXtYsDV?%0!&;0tnY{xz68pMBmX3??0QhDYuYg_Z)ocEQ1Iuh}h`Ez2fi_dE=WTW_>MwTiA=?gmt4@VSTo}N_k)8iAtn^)>z zc#4TBp+q2H0m`#MK#y3tG&u;6WdkbABg;-k79)N#(|$)bKyONdq%}k`WL7I}%{B0W zjzqFnr=IWe@TWyQyEzBU#!6~xxPYwR;k(o6)`Y5>T5@B;A2lH&b8HGFm-MtWtagdZ zg5Ov(AX@qMmwq(Dc~RfPjp8+`!@0TfMN~(+Kigf$eT#SAerYu+YJ}SNzv(-;5|tU| z87x5{3xHDM2FGBOAr5j5cVesOg#Eh_Uf2;Wxz*b}U{p3@lS0{6oX94-kyPD~1;^3c z%MtBFZnx0kY?aaNODi8m#LFrAO1vR-sP}SY<=0~^0dQ99we3UNA)LdW-8eS&KtmSG z*Gy$s9eJ-=jQ*h9$Fc|3`VN@Hfs*YH7X*&%I?vkLHUL``1h;$pMJ; zHNJKqlF$CuW=GGC26hFz^BK}~4-g2tR#t3A;58Eoh&4%i9-|xr6ZCnekX-c^IYB|l zcVKWx@wo{-&}zfab zQowfthNsiLISTMaY)p<_%ogp{;IDwP{HfWCZ@RF0n@x%Bi;KC2EpBB$u+Hd1J{_hj zV!>yakJfdX*A{=LI9?h@174P1dN0x9l)SVVnx?hADN86!r(^TwJ0?*jgp1cd^}4^^ zRwEH8RsJs$7|+)0_2;jVJyq99SK*CM5P`W@l}GetD@P z=UGL*7z4DtM*^j;`4%`C7Uq~W8O0xjHE2LkcD~q>(92@zAI+rBL(=(~TQnaS<)|(L z3Z8AobtkP}!g;QfeH$cBuO@VU(@=e7FtCJpJUaJeu2xO4)0IyAP0_!bEc7-#Fq%ih zf@7*X((?;|hSu@>*j*39WvM&`__+Z07r>bSIQW89OI{u`WVS!w^kFM!KnIL?Jd@#6 z^&)XscX#LRt34?dF;%umpDD`wLm2p60kF|PF%AxVX#gY}&50+N${wok7ya{-Ro_%}MAQJH2@b<6S z{vF~tjT~ISZjAJ_wl5+>(fIMP!AIAe2e&NE0NPn8(M~*VBHmRkKeuC{`1UQol$6vz zZH&6-%0h1kSn@L^F+g(4ugbfSmzVds&}!LOf&aaPKQ3f;xP0O9hHrrboWdqeYu{PW zX7lUn=ZBzv$&$X;b&b+QTS?qw>1B+ z7CB;BzEg>yjxpS3uz>jw81pE^kNeB|&RfuEooj|mvlBHs;Y$B^Ud6RbIBob4gd!`r zwP@1(V#b&}2xJ?~`Wa5Bd*0w%1U8^l8^uT7k8#0jb)~1Kkv*n*;!V_e$n%4)d}nvC z^99Y!#XRy7X!P2+zo?yez?Y1VhAmTBk4~!I;9CcrXYM0cPah6gu5JR?N>kCHnTwW) z+Ocl<>U^W1>`ldsMMRu{GKov+)xBx0ZPIwd8&iOdVPa!bA(jG&TsFF%lE4oQ4Gn`X z5I{#QOT@s$!A>(25HUuDFlp>@-8|{-?KMAK?u2>@8^O*YDiGLhV8?}`*bIF4f;gEGDMUXl_XICi6JRV@C!8 z*%d+x3U;+j2{Nss=P63lrbP*`a==VR^71)*_Nxn+hqzOSrgmbyz#4Vn%XNXZzuCo% z#z!X@aQpFcnbp^>nWQO9oq})1aG}*llDBD&hWE z);A{8%!blK6z!@muKINNa7eOFlhMYGYF6FOK`*k&Y-1BYe%k(V>xw<#H^wSk!2P`* zKEToU0z&@$+W&wh<>2Fsn6OncF!($rrK_upkvGBNgsHUR0eqhQ1gAq4AUXIV=AuAs z08-k$fYTib_H{w>{sA%Sf`WocPdT*(xvqQ}EI>cM1oxLmsbX`!s;imzh%+3NUo9&< zwm~nxy;4ugPTb1t`*PW!%6Cf)wg<}#S9xgkUUL)Tk?MY(nHqeFv1he`<|ok}C6 z64D3=2na|?Nh3WYAxO7$3kb-7Gzvo_Al=<1-7zq8_nh;c|Gm$1?`3q}nRnjWd#}Cr zTEA7#e)EX)eZGJ1>(jR~pASVkNs{{7*^LWW5Ojc`vANs}>$JA=rOAIf8+cH#1jlBr zJLDl?3ds5_Edm0&>Ga6BE{35ab!K+1@sI~>q5D0W2h`e!7giToiiT@r99?|DSJ%=* z#wEs9eaNT7>yd4|MqF8a$jtWHG2CxdP;>JsIGw}&fTZa;GSw8#KK z5rKFw7DyH_IE>;>{9_scjq3n4RY%i_nWWy_k#H|D?*W)S);qQqMIYdC_F|l#p8h+h zw8TTQ&-~ax@oVr?boQ%*Xr&@p4MtM%b6NdlQk~a<>E#A`u#p#H!rY>FfCo`fqx{B< zQE;*Hg`uj|pi#s!5@hmA%3;o5%s|bQr+|M%GD=4V;+ESg$;d!1&-S7Kr51C_RIWK} zymS7Vzoa$%=`|8YhEKv!GTq=^!|(Q2`-RV-IJxP(&r!r*0OD$j$WT6IX{iKN)HQ@8 zDj{6%*v3K|OCTjc%B|PEbo|bK zr+Bay7;N6d7z~QgS~!CA6FvQEO1(LySI)bad5@WQMLNff134@R(pzKcUlH*`&gXT# z2Y`LST5S0>7u`&H=uFPhn1P-;F2Hi-rBU$^2rz3b^pKrUZnOf%b(6IxnuMA*A#(wYMVpRtGQRz=caSCI{I_@SR*}+jZhkV9GEmR=H;zzf zjUy|EwO@R$jJznNsx!o5$;AosNBYA2FaxqL?4sc6>IzgN3$Q{`zn#C!hU>~xd>UNV z2qo<$l7TRfdluMSvBNLT{xI0`I^>F#Qar-{*Yti4 z3a_~#o#ql5F8k8ZHFq+Gk|qKrWwroJJA8kQH6)Q2m-M?sf#X{rY7GnvsAHFM4rae) zPZ*0ntDnO-O@MYU{M33TbkzQzy{BHYO?{yl-{_^G;Ko$dzH}$BdNoc+H*GtcHQuah z3phj-oQWgJUgIfFTbDlfAK+}-7C8C1Si&wk5k=?h=YJ)t{C0@^U0>HFAp?*M$v=;~ zU%OR(Wu+~NggFWFHcH4{)V#DY1a^NX=+n8WEQ>9iU}42t2upR+OW$XnI>wJv_Qm-4 z;5O-XX1sRaXb@uCJd8mK^y(?A^9E8kYDsN{Xu?SLV$r0pPdG|H;Fc(dk;gei65O0Y z)6tReo*%&({J8JnKB>P2YSoNN$>&bY|7o2yO4&~q2kCm{D>@ejEtbT-uZWy|i6*6TsWM8o9L^x#RSsr0RJ3yMh(acHzT^T|dT#_S&emO5QUK4n>M9G=UWN zK~`4ku;Ab%EU|*9B;3mW@Vg0HzoO%YX=7qyo*KEB2;%bn@xX@gZ*T6VIQ<9-52y71 z5~R)R)_GYo5+T(NfWBr5h|E<@Im%GS<-tQaIX)-psv!;S1I8wU@wOAE@lw;|tuL_R z`YY#$}dboT4XfwpQ28&Dnylem&M1h^isD&nhF7Ry-yDLUYkJ3WG7f@kZ0O zX9i(DUf#A3O|*B0tTc@w=pk9(p%RsLE|48V7}tAMo#ijjey!1MbQXW;70T{rT&k)- zX<)}MHIq9Z9Uy>iis`6Vq7v>qc>7%`OeakNVnLkj4MH zv^rM}n;Vp}1Mxpiaq3bW7CB#URRK@sm%@4gi{GAWFmRKl{KcL3nwS?D*1*y*0GtBK z>VA*lx`|r37{`#_%!tvV!vjnu1vdIbu@ z`6pWzzz>xeT#?ygX)kW9Q*Xc%G8t530#3 zUxM|D=W{v0s|?-9sPEq8xVqkhej#s)CF}tnXC_&PW{}Az1`?>kqT^ns#it31FO{N` zdX66MG0G6>A1TGJ!*APww*Sv&6Z#?l#sdWp#idW2*IeyXtn)DT=ZZ<}4;A(N$e$p# zdt<7NIZB)Oyj}R60||aOM}!`w2270`QrH{?lLK^Vyy0xln_A+e#&(<-;0MVREZCz1Eoe1hQB<>B)yKCKoUO9af{3MQZ@$WZ-90C`(yY+3GUB)O`$61|5$%8Z{4sc|CK_TH=b|9yQK4OOYaRNm z9jeHcFt;PJhV%6RsoxJ-F2ALUsHjM-~f1ur*0b*~mZ z|5gyi*O#V-4|#4+!4}LQEuc76`cV333AJ=jdrm==!*?Wm1j!d(e8{gl78RHGyHG9m zMJR8R=wIAd;oCoL1V77Q>G;EPG?a8NxuL2WDaMpWR1?O2c&&5>N?YG1`SQ2L`kyb;t#IokA53jE>D!p$6wC1Db~4YjHMQ zH%=xh%4(`GJ5wfQ66ke)+1!YZj`kE6E_&Ll*)~1gNdvv|Bo`?EIiSL3(){EkW#Q@5 zwarBM>xVOxuIJ1BaUOa7t*jPUA*v?ZD5dG9Yj_FT6Ns>*ci!*8e07VTs+N!r#Oe|Y zZHt<7%dV`xrJVT{^t-2hLg%&rcBn+`0uvK%Qt16E89L{K1S2PcpGvCsU;Ugg5BkHx z)ZYpbBbx3?*WN)(7{%98q~cxD?b-x3ft@tj6COAPagnVR^NQRC)cNlo52Oecv!Et6 z*daRp0gYz4xh#GUQ?sc{&Y5#N1HU}pvE=UhHD#;4HkGjG=BkmmWb^&tS4Gohdqw3b^fvqN&po5w1EOao0a;>i%jlTj zf{0H|g`D1LZ^ptCNkEI}IUZ5RI%q47OM;p8B3v`C$77w?HDgvKGAtxy0mwR`i#F}_ zO;tA|d+!F88EciDJ2~9aL(-PMG8_#=_-K&6%@t9m5@;Trq+0zNRCGl1f#|p4z524F znTxPI!au6b_?@Wh8w|Jgi!XcjA|vdJ&Cq^$N7RVhGL-j6u;?LE<}9xG@|J7ViQiiK zFQt7PIH@D{mrxEcbRA^5@NwgZ_jrgV*^rrQ3NQhgDmDI~q>Ak&z;tfi>nb42OuJP` z>6xA1uP>&*?|o<;Punw?_kyDG-5hqXJ30`|Lb)6bmU?DpW>*jq+%Z=pE$?%by0Nnr z#sUc*8s-Ocw~J5(!IlZ8$1dty^Hn0ID+7b6(u2bv4tTm#*sG|?FPvE3IcTOGEmaU& z7G=1#(PqHDJx)0>HN^}zGFA`1kK-;IKdbnmZC$P<4bA&%h@bPSP;IuQ3MU#Xu5D#t zGGuiClt{XIH&jyehf6m12s4)0u%fseol7y$U^{zzvPO{vBmxVyt{P3}ChuS@Fe7oD zuJNb4s|Cd+Z}@jchunBu%I0I+c-7W;bVkhQBWoJRolBu}$qT`!M@Ll4PHt{;?(WrP zXFE{>n_r;|5tj5Z@oC|6jg6oYaVcktJ}0#NkQZHD(F$4dfqfOUv9WQ34owhnfy&Rf zOU}J=^%YdSHW??7r=1|AhuV-!L7DURHL>i#9_hJakJ5(pT!D?}#s@-w)UxjfIZr;n z8CohTD!r@PnzfnLAiUo{HA2F^{(;=T&1sC(Do;0{o1L4S5$5S>Cf7|359}kJBe8wk znnU)cu&}TRY*O~iYcsF<@$M+3mo2VK*5|Dh^+gWP6Upt(HGq`iz@7(DR8o5-iPo+w zrz`E61iA6=c_A-bgv4l9JDf+)Z#2$-&gru!^=Qx+0!rLXNWN++zD&B0iL2U@iCof? zL!FVj+u)#Yl|-X4Z#6QP8T=O`7K?(hDi;dL{2`Qd}gm)mW zj&4QOMr8b``3%F~*Cc|!(Z7g>uhoJRERX^9xdGM33k1fxX0&0}K_ zM)m%BstP+n`o4TS%Ylw|I9YL`+1@ncvdY&To1DS+CL_XD+>@!dBTqgUnL5}8WcAeu z6n;qH2#$TrMG~4`KPHzf@%$2 zZy=Zh7pF?oIZyXl6}6rasz#41hYhs1-VToKTORl(NT(zo#mn%%_RZ@&BIrfd{h4~F z+mL}0xtoHvgHLC&-r@#2R*e__9VCIA3fJ)ejG}O@;TjsPmi_RP+1H(sZDLxRaidkf zX$1QW>L%ERKA|=-prawg{J%6^Drj5>VU#Ujp->a4crt$d45z1wR%xWVJ#|Z;J|itW zg~Nv}_0sqm6UMWm2_Lg@gOa2J0L>8JDaJ*BImf<4G5?EmMwx!a+WXlB2rYC4gb+)3 z^XAQGdU|&NdFR+om=SVw$}hHu4WTIU^44U9Wa;cy%J-M#aH*+s!LNXGaZM^OadC+0 zr~jsN@E2^pp259Xs>ofKbYL0kOM@xc5>RHS$}A>(fDO!qTYf5;Vt-qNoKH$ZNyo4A zS*oea)~Cw3u`Xi!nQ3fIF74%lwI}HfT2)G-!s0jJJbHogaR&nuYlRG0!xC%pd1>LD zwl}GDXo)6f%8MoiW(U6p#QvH=|2;>{VcRKPIL|skuA^{1UH8yR3YH2+p3%TniLiz_ ze9L$#AT~YSu~_D>c8!gBU&t`fz-2j(PfrqX6}u00ATWeV8et}bBm|;{gvQ~*?$IA? z{u-I-a4y@5U$TyTrpY?*v+8mc*TU9!zSArjf$M zrEe-ID1g+C5@B@0eLE&l&g!Gsfv7xtsfPA1+dtIDOq-grLtT0VOcpf0{rOA_NeuME z#V|FlZrt^<|i-i6lyM3 zT!G3Ut>eZ}9(!dawT?>bVaoNWkdT4i6d`3$7555a0Fmeru^a3f^h>6dsqKCU7r;{iib? zB+oqFLbtT(o#2w=((%1@=Af(UZI z&$C+gnGdrWO|3UtPDOE8W}UkYG1rJ+SVQUdqs2jNLsIz}1^Zt&xOhqRHn5u^Y5I!S+($4OZxD7uu1xuY4D`TP!qlA1cF2F^#$b>z!a`-+N~ zjVUi5g7bV(PH(P-7_xA-G7MG{d|NgeV>+e9;Q81wJ&MAP*EGnt?zD z+~zlg%;_?GOKO(RW=Rkai8c{vY#Bd8 ze*SDU7SsgZjf%F$->P~GRPFB6hLfSfTmRMJRJd$p>3C9QpksAIXs$ZHf{oPf0{@+Hs| zqYQBxQ-Ayzpppm#SWJWqpNM^1_!mp1gtFHr?c-lkg_X7xBIx1w*gj$!;eyqn$u+Tk zXot=nSIg{Bfi%KiAh?Crp67MJ_5Gf{bat-tGp$6tyf6D8lQONhanIJu)_F(iriK{7 zb^eQ%(InjTfPfUl6J$i-;Jf&>`)Q)qKStI&-U+5`7n>iq)1l8l%ig&|8q!L1AnGEn zPvv)NNQswiDFO+Jl4jBAHhw=9;(0`4GTOZgX;X}U>FDa7fJ@^<>fm$5M3Gu}H!}Ts zeYQpOH9Q0Dc`ww<)KkG=e%qM-sa}!g}wtqJ@~LcW)K#GLh=>K znS}tt!r};eJGANm4FQvqGO-mjf%<%p{r%)CZ|`XU&Wz@wau z84^U71cLTjCXQmkNAl7Q9Ie}#fAc4!+gGgtp*C&zLI5N(g9@q}=k95}@l;L%QIQ75 zuWYlJ2htWgF*vD1E~`z<0!jSDo2U61QsO{vrXV>~_vaw`JckwjC0`u`qbns4oFT+f z>%L8*HqV9SNOCZ--C`NYX0R`^3R z_wXU=Yxd0`z?@%j5KXL!e&sS2V}pQlq)PWJ6g5dg1CwwPw0!My4)a|GM1(vCMToF| zytsYPKGphok@5Fw)2nMHIH|_I|BBfVdZn}^odRxEICZWtE!>zi!Q$tY2&o9dcmxb&12>G)a zbT=~dCO>f)rlb}G!YJ~s{=-}?kIBj?t?2MIQ=G4NhD4O{_D<2xO^7k{+O2^xT+C&S zu%F5}HgUcOq_6Pv!x$VU;lO6c23%X-6MV3qJr%Yue?MD~FCFjI@W$ht5z=N$VvHZl z-o2gPu3irk&^&P8Z>cmwnfPI?n5f=w36~00Zd@KtlS@^qGU}N>A)+sQG=h|SHC_{u zhW^$#4*ItLaC*cB-~3A*nsyiMMZ|wyhUf2d$pj)hc8#LXV{-wtRtr3A<=-@X95Rgp zRi#Oix0v_C8qzC!=}M?T8F5o=2=G=&ERN zJ&F1B=-F90*=mo2C9m03aGHNu*v)DX6PDSEl{NQN5k5Zt6K5};LrX(jTYGP7Z6W&E z9Esu_fx>r`^xFCAfPZGy$CO_XfxA|nk?Gpj_;D^;6ejNOiSdCtW9l#B4%bn-9cbV> zs2~&=6hs8#XCD9Dkw#xcvHSq`4B#t7xZZ6KGOD*CP$zt0>m|i^fW%9II;}zIuP9jN z6G>+)L@|`PrU_jI_DdmEvZUGR#a(4IHDfA!+uOhP^EgXxe1y-?y_k{Jkp!yr~6KkTPE;n62PuTixfv{rDR6LalFaF@!WqL|V=%k!n6>q2OCNrp6>`h5UrTt9tI5H=j zP>Avs_XstUGp!;7Yn00ra;N;PufSVj;?FC8@3uLK%t(Tw&wPpAv{{}PE@*>OsF5c8 ziOE_e^|aisae$8tkc3P6Iyu_+7I%3MytRcNbGDO&XtF?J z3$y2^Gg2VHG$PIeQdub>Hhn%wh!7Bjk$La=+-S;M`uvxk9Efc}^poynU?B+sU!BA^ zMXT*2;+e@@)9ziZWlzlVb^!%9Hn&+(u~5HzeP#7U3tRAKnNjzdhL+5X3=A|L-uD~AnToBYr6u4rPOM1@ zIQ-V(wq-9Y{8sJ17J`fgKw@SJ)ke5aY5K6+LRoQ}2m@utX+yA?Pb15cBgl>{;eh$* zrMS{b{Mcc3Z5Ul<#Pnato5!}N9hnbUU4IF16@5@_n<7izWM3|pXg%pzsVnIgDI>9ypn8Y)@MJ= z3w;}z_ugx`r?4FX+`2w~{OCrGZL{BV2EU0>3X#oc8CRJyrm_ z*MV1W05TKFSc|xZO6R<>W`~qV^Z1THRu`j>D((om|I)e9z;tCE@an3qz#@5GwHk9r z%&X@@-w|ya{Ie_3`|c|dS-)CW0mwq{L(`%9#|3c-6@~cbR#sRLugi0#G|g#Y97u=y zt=MYYu72L)c8701-k0ZN^-)6$sC5*Y<}t2Ps^!?&@62R7 zP|OVe+ES2;5nbc1sVb=;j^CH4{Ulu}b-8vS;`CmUr`+52_F!k?kT!MmnF2$MX(otC1c)tOn{X;LU~%;i9#`XUjh5dQJuSFENy5ys&zpMamN2 z0YEu-A+YG12XAod!0Mn5Eeb%({=3Zs7{!=!rb~p7&`OFZ57oSumwe3Nqe9W^Cs8Y z&s9^HFc7Kk*V%W^pF4elsX!cce~VTOeAes*P_l`wt${_DTI;*@^YMWaZk^ZLBmIol z9A7>bQWa^{IPO5qLo9gRJVyS*PiN2zD8$Vx#zqmU>gsC3`PA-fG~_Z<8ckA&-g`V^ zOS!Vt+0a{xY2#!wauNTodBkl1Qc~M%Qv4r?Ql$8m&HnymX6Vk$(#C1uTD7%4F{S}) zSzpmK5&KW&Rc}sK~ZRGO#YlLWb*u zApjOBAmD2Y{ju>SPRdN9^{Izk^L76!3Ch_-&?xgA6#umaU9eqSqdMvgaG+nsV~KDYpf`^GD_&` z)qGX`G}UGWQnYz4|FX>32Im#U|1VA_ECeYB#b0R0A&}nJl``Nd+iou#Yo#M?;F^{_ z<8y1&mS;}>yY6!JQ^No8mw$Lnc0OAFz%6Hi|A$vbdlnv!z`JG{^ApPPuL)`Gc8D)F z5if-T8DT6Cq9ENP7FkOk#3;7PUXoU<^CJcTbg|s-dMNn8HP){{qTaRabVg{g-AbVu z==OQ(VpvgQ#OzN}VJ(jjzy{K+7hd_84Fj>g@o|rjtsFh4C$az3`<-^k%YaRy(#hfG z^Y0oFh=5|fQgQDB8xm7HSIRdAWrQ4T%h@0PXkIgto=N}jg&^ETa~7_mYYObhJKXPu zSH@O^^o6$Cqiuh4amue$?}W@$(|gLb*X}@X59&K%y1hIdpNq3a&rkUBm4{IOiimy9 zCqM+k0G;ASKDUFNZO$6MMz9<|m;gj=sOdi0m*mymC(Oe$KIJkV2o&d`-t_eJAOL~2 z0%bau2X-D!rxv0cJI4M0hl8yIU=D_Td`7jN7=WCooIx}H%Z2OEqleJN(I;u_qPHNT z&d2OOhWb-|BIzV=KtweiCs@S43PN39(K+`#B8$QSq#}4hpH5{Z1WiZ6G@a{!f{|TW zNeOVGZ`J((a4QpZHT6!zihVC;!3*74<#nsh!#}?FNG-*=<(**8b~hCyIuCXz<++CPpV{UK?c9KDd}1PO)9}e` z>@v?pcr*t3%(P@nAYm`>vz=kXzQkvBHqXEpEx9s!daF5>oFKymiOa`nel^K=xSrg#N;}eTB$-0mg677F>s%;(Y1TjmYkZV)$+79Io_LB1@Wh zEd?<#agqcyrt3Dp^T?eNqr1eQ2i`pESe)$i;+iAc!+==F^H8k&jkxbGh!vDc)D7Xa zkrGG*h{zO0VGNQOcxnQ`Q$R%)oLn3JiC784KvYr~e5xD>?3kDCJo>@u+=c5NVd~`J z$ypql$H>gygY?RQ2z>q?1oGa9dwH3*?UO-Z#?S~kwKcpaA}3Vmt|t&kT4Qv;&b%E= zVZGGj>Ogbir#c;JOnSx*j1EM5?A1_qo=)OuVs-;V;DBjNygKD+ndcUnbQlbdOxieR zHr$ydOQ#CXe%wHIikhxEG!VKG%X0;grueZQtIxVP2_jX;qyVY9J6$dRb}6sx(h>t-3I4iABsxkX5v8k6aAc<3vw4Exvpp>SPZzyu-sglb z0y#bo(>UkN3m%d~GK#qW8hIC0*G>J@mB?ouc>xm>|EYv0<$%I2d0l5%e|Kq_HV189MM#8jrFo zhsd)xXVOpGybwL|Y ztf=d*;ElD(x|e}MS5p#Te8JEBd98wRjYeTou5DUo-Gd!sjA2qGO8BZsJG3Q^xYt+) zaJE)EPi>rHj{icfl&x-ki4zhe4O$OrDoW@nw^=>3$?nuN>*RVQwpm!djKQ=#w!XKA zL`24>NdZv_&^G3~BKn$UG)JIqZ(#uz|5V`We21hQ0*h~P2BIu`w>k+OM&IWZ7FXi5 zlJU8N=~HC1!*647-=PKPb(F~JcsH6td@jiiah@4y{%k+%0<$_VprHF#=%snf8_vMV z)8&mXJ&gUAqR(JGrnN&ukDV5;^uzB+Ve_HvEgO1Z=LNmz1Q12~-Oi{~7~ah{3Ym+M z8zcQUZ&Lq?JXmH`Oh3RfnF@!Fd`8G)$p`hjUm=}`%SlRzs;+Jl0!vHk`mHZaD4xpt zySF#7S{?jsy_tM|GCqOtM8TUTqFR3${e^~@f#0Orf4tnJc}vuz2?pXpY@T$Ga|_G< z$YlU%Q+%2XlQE|rr_T+~MnT`u7mIwijV2Zx9Wff;&_K|TH1-(27a@_-zW!3dBQS3M zHN_8r+ri?_-w;=ANgt(y9x;si6d3rYH6LCLcpE7Oi9A~4D_o;FoCH^JEzuEnLhG)N z51}zC8)?1c*!99c1j}@rJ&a%weRTnULp_5gNkk*A`{j)WD(}7(`9yE<^#q3ie?b!p zCCq(*1&JcQ1@mD%r8`;7H#5GPR$-DbO7rkl47P^xIPSx+6e1bgqqDsr(JxIPGJfqm zPPpd0j!cgWUipP#hfg_vYuZeGnsKZe#0dB)KuJ|lpV=??qa}~`6o~6J0~LVt5;YmBn$#pg%*?L!Ig&265_9v~j7 zEzF%Ds%C^HT@V+D{6>wlV)WJ&n(N)vt&b`6`d7#}5-iAcjbD_p-)yk@11UU6(zFQp z(e!BCcx)?!Fh%&;@2+34_B|g^Q|U4ljwMTJ7zv$?Ec^bJGu$0~c!2f>e%tS9_;wio zWr%kEhK)+vy;8H1Zm`13$)^SVU}k-7VJkd%^mcK0mI5Q6->b(=t^Lj2Z}_T0+ES#1 zM9IN`1*VCmtJu#K8Sy!#Z25=*@R`DRK-f$6-1ThaU){;Vm-Y#;ZoXTEp0>Lp&Jj#Y z%8|%HbRy?hWII~OD7UJ1{>oU(b4DEn-x9(}Y#(pN!4K<9nm&b(&*RDsmdJw9YY8NZ zgM>V|hd`~_hI_vXZ+f$LC^h6XBo6Z~8Lg%B>rx!ygp{ zi5?LVlV&kz05)AY1Qpz8HT`14nB-;^r>~1}_&td^7TL@cfR&Md3+LEYwm+~5Wf&vg zg_8ZJ-Mn^`Rz$HKwBIOVdUk@L^wwaCfjWZ^=K1NZV<#jy5LUd*__5n`ckb`>Fd+BT zrJfr-Fa^PxXisuTbb1Uv8VhG2`xf4a54+y{<62t%ku|FG>cpGEu!QCts~YfKS*NZ zXrPbz4dgzD&{QXRp&>_`aymDd@8$NkEYo*&glPYhpX$(Zj%cnu=qsPwcZ8Tx=x*^55*rL;%4px5z-?S15;9H*pcLvA1?tdU34Xr8cRIh=xM= z#gcNtu<1I9COhZvAT$i?cb_5-gbsa_*RH6Sj(5l49N0dA*~#!_9auqA=*zQN{zMd+ zAhF-|s*_+zM%x_q*iTgJY{Tx5KT`hy^wb{}723Xp|Ej$IzK&}@esaBXJl__-~1636Spa;zlH>W0X{O>nG zn;>~st2u>DuAC~$%zugqlj>RuXk~hX2WBD&l2AC-xBRGW5P>VgNk>?cfi@qJ=(z)Q zNW%vyozT?2_G{?gxiN4ya6uQZqO+_Y2X-#-GLopyx%ztOYohX^s?j$hLp zOHybUUkdwHQgteA6kLVU{d?JakQ(q$=8s;qk`qPA2_p6%2(8G6Gr5mK zAw;gA@J6&2uQ`O&1zOHX4Vd8lhdlJcswpWxFNcN%${x|Vkit0C@y8)TY}k(Swg8sC0O2KS)nl@WTSZb!`e$iy zA!XJt6NGx~H*{H%D~w6J*NrYnY8&yWuYKo<=SL(e!Bz#t>;kVK5ME=>r{jGLj@I*7 zF!p+0^R+BD0~&}77l8qwm{%2pbch^m6&^kBXB@sbDH6u2NBTlzIF2P3(<0FIDBw1s=^&XXpeHWSNPo`Vm%e^t7|D^MIpS*xu&q$ckTNsO*_}?c4|8`U~D(>TflVnK)#~#r0 z|NF^Z{{Q?Q?%IU8rYz}Ha&d|}Gv*wBM~jN12tkCyMdo==glq$j`hQ3JOmp40 z=c%4T>^%F91j^>6PkqC>Z+PKuZzdOCO9h^88<5m&2ET1@oS;FzHQo;ME$2I(9`<{G zVUm>=zrtYWsm6HmvL7~S%WJ|X@eJ%{#n-gd$Yl2NTC>?n+#(PVe>ACgcGx_6CBA6d zv)BDTsACV&c;Quy{Ro+@5Dx3iP(3WOKsAiVbQT!vR3;Ou_Zxn{2FG$Xiv9UKtVUPL z31M!{-E@hFkd+KR02i`<&zQB8+L~w|;6;q{&IOr+*xPaShlhM zAY4Voe7n{h@?P!ESPsm`eZLG}ql_&oXX$MQ<7vI=w4Ihf;d+@cMYG|Blyqa%&Cm09 zk-Fdj-ge!iipJcj67qW8Mv8*;l+1z&TR!8jyX0?^xS^_LZ`ff(BypXG=gu7PDDIqX<$w9gIiE&AtM}871XlheKeaTf zRY&flnbGg5|Ix1n3JCcFEWvZG3(1kl5`RtBNG{E zX(b^15l@IN34G$Y*s~JT)^9}{p>JKAeIli$m)kbEmO85!D%O}5fkP9JZy8u0JxRgP zQ6ELZKhyEdbsr3?TqQRRD?^MZb9?}|IxS_XOYsM^ACw3flcPQuj zlqy&f{>AAGHhs*{c=MB->}lNX#7dhxmw?L5yP(pv%7KH z?)31wRCjO9O!szh%3e&L-v*g|v%j3r=_Xr=!4YQ`iBr)+eu;<7KZKcfVv34WC?6u;U^Xr7MPi$r}u8tWY%?96#^<3lmWw*Os_{I z>>Gq#d;jd0Qvm=21TGua(N}P}j_Y}?g2q+zS)#Rm<9Ek_1Z^GV@ORP)tHBrB!|Hlv zCNc92-^9+r_etH#OssMzhGuEEzXmciYtm@tvlFw^1xFpHo|AxyqmFdC((==()QX)R z#p+tf|^C%GS zCbfWDx8MW(EXHG=a=uH0YqI~iEBwi|&N`Qr)Lia^wTReQaywyK-Y-4p6_a*;M|$EW zoRC$8s7K)3PX)*O_pZKa<&#lUe`<9K4{3~PyA`rBdsgik5-raA+32T>e&ZG1vp_R+ z((Z6Fcz=%zQjO6}R2lHKN}lgE)#XLWbXj>GO*V9W{g$Rc6Klw_aRiKi4wJ}Kj z8B~c<1H-A3DjaZ_tH2@cMH#$&2O`8cr{2pLONf-Ep^G%@IJF+O)G&p=J=;xhPC9&H zQFqe76%c$Y+eDoK(_BDDl-pfq`_W8(N4WkQd!PSf(9qRQhnnf~>7Dq*#CtuEprFez z%dM@gZ}4$r1;9$4y1ELg6~yiDJ1+N6+r4<4Xb?S5awW$1YySy&zSc$2j^Az1$4dD= zy$?EeF|xolriZm7&vLC*kuD1r%%A3;#LkiVLJA8jX{QtUpdUdJx&id=J&z-(r&~UH z)}Syv@{vDuB@A62@AP-1hVHzCP<6Plq$vAG(Wf$gU+qC~gAtD5iPK$)aHoi2tM?^) z&ESTh!O!JS*Mn#>){!5j9e8)~p}t2aW%`>gLa+~Wp3{2LHY4xkSy^*t>xf`6x$?^y z9ftBv_zf%R*8>kyQf@yIenej{)R3gsu+jH~ryeX5zWCudoW(Z&KL82*j{*Rip)@Ql zAtAy2`0?i&{Vjwi3mButcA760e!aG) zpk&S9r@4JC)|nWPdjM4YCe<|_ex}t7%J06P2ylUZ?FF+Rkbu~}eoXLphkO0b?^}%D z%?PHqkv#|r-|qjpXP;aD;}*<&&l@s8GQ?nQfF)Y@LCAqGb!z*g7?*Ep{-^X_ZYV0s z%WiJ&Pw8ykudD7J$hp!_)7cbiofgo2RVhVEiC1S8kP-t#pXh>jp8e{|8{d2H_XbIZ z%MRW^T3T8Zq5SkPz{6CvUF~E}<)G@%{}o1N$*$qIu4SRrDm=w~x;8ePvp+x7KQEpM_tnMC7tnJ}dk~6ds?d1O=)Tjp`q$R$oDSQS#P6~-%Ih{N?N}_F zPU54#zZ7mEf?P&UF=3%Zlo)uq;gBlVR1))w!w}0^ zsL^n@>MG@qsN%D6T;OfG`=LDf0X)}YCsvuV~!-V&Iq;~2Np17KzPpEt<5-{Ls}lT-0a6G^K4fS zX%tBRVK#1%7P^H_c;)tv{;U^ClhyxvqW*#h67}fj>BhWyy{Xe@vXSEAIfAnDyN~b3 zE{a6qE&!H%V00`gt0UzWMQ<{k_#N~KlUKAK?3E5(HoKLWPVkt(gWR?sQeFcZyP1CQ z7~KS_-;R}ahgfvTAO4_s3ng}&-t6#y%9`D?KyUOQXwO4hE6IzyhVSi;KEc(JI(Zab z_D8u1s-B(N1P^lgVaVo)Eo#4aFsjzniAaQ-7jW`Mvg6;sQSx)&Q|F(m+DlTPJd(Wk zvAQFT81uc_cblWaw@FNJjVE3923aHTn4W(-ESlSo@6x&*kr~HI?^UhB?t-_BwDj#!jaNTc`GAp4bvXPEJ3ZwZ7ZX(A zf5T2NXv}nJeD{*;$B!SC=Rb|xrZdM}Dr0z=m_CBUq4y9~8MzH>pAkqo@cXZh*+Bvn@MIl%vV2@78%F#PTxg7_;L4;t#2dwLg4{!Jhsft3`?i$vUgpP#db zgjUkj`0?Wr!3ogjM~8(B+tnZD7n82p0fnqpiW9SQ8>aRt&A%e3%i4`Gij+=@n>DEhJd$I5tX~U^h}Y*x^{w@{1P?IM8K& zB@X8*h=M?l<682AR~Jif39v5>K8^ZOQqfS*(p!k}(?^<((0{noTB(#7zd{M==0pf~ zAAfkr@{ee=0q@pc4MF8Vt;Xk7UcE}BCL>#P1Esa-A0QJv=&`tp8bF{*BDemM>G)Ra zegmHIPLjlB!?OLPb6C{@>PA0;%CW zw&J}P*8?Y3_CwCxt)F)rH>J+<0hc3J2SUKZ!Xb_MM zQoqQdS;gZ}p&cFaFSQz=YDx|7nY%4>J2u-kT|qv5tW~U4m(Jz8{G+Mbtr?B)cK!Zt z2Qv&-LXGcl6Bw067!$xA8)q_X!3l2Z4HZASYUqDHTXPz8kx`47gWt=DP?0rV>ERUrc3XkyC=HlmX??FSju+|)!tt$gwgXAI*CWPp$RI?r&RYA-K|?Uu*M9%qRN;CPwQ zA|e4gW708X&v5q4ihDLcBKi8G!e!nuJyye$-Y=Q+a`OQVQ)C+Z{cUQC9}AA>PR|FO z+HP&!mI2r4Yg045P8n~}R)MstTcCe#cmrarDtlb6rKmJ-ns--PoES!s!MUWe9iO!m zm2o1Kpd;jStwZ0(kbCDb5+jVTbModF)+Tiq-Rt;+f>=dq`e;GPy{lT6%(6~pkE1{r zwkcbaCjV&8fg+r2C5J#;#&V$M-T2Deol%jGyNTKwhu$REkIf7Fr3a&`54N~3&%hxs zgL0a==_6%{f@tlwYk^RKQ;nAnQuT9NNR4x zbQoNVI0QFsA@oJ|OV9|ttMXtJ=Dq(Cj;hJ~=NO^t-h=C=%%dhPIeA}vqyDwOhzk#E z>uV9@QnA4&_oxnOr(nc8M`_xqAkF}UjLTTD3#MrL;w$L3%40IB98d>qw zzEvx-{Cg;KpscJf6>@SynWako{HT% z^D4w`pyysWz?z38)J}aKk2CzbxhnUJwR{r|f=(hgf#4nSHfM*{9=i3CnLJ2Ze*dwg zI*R26Oy#5G6wf==_uYY&&mYp){SO7KI@Z?Kc8rege)J&nVAF2`hwVn03f|h~e*8Hv zlSKa?%jy1)5KiL;u~03|6(?d^-+X*BueW)Qq+?8Gu~SL(W6grm}Cg3L1$k zW3X8Qb$}RBcUqS-4$k6cNP4!JmkgI`#)r%27g5^0s25@rh|DQ5I`PpQElU3}$F_!J zJbT5{2sX?gvj1%zMNV6rG_1%>$wlZ|;9CN}J3`aE5498RH{gSw7cEf{E=2878&BRI z8U)!D70N3TE#alFC3LYQw4r{c#Ww4Cx?aNIoK1y%Gia6b&kqz_8K}%wv9j3bEd&n ze9LTbF_wHMF$V2#$kq9KAJ{jd(7gg64wj<+DG~AsREy)sEyy1jq!*+s+vXEavi?HVO5uDFk8>#X z<@48t;rN;CxUYCya9kwj(y{Ih`z?1_g({JN>z~MZbj970RHnB(Wq9>bUbI43+@|^N;V04HWTs)6{(qwBC;Fu=7-V_yBgJQ`qd39&$p@d^pXl#$yx; zRo&84fII}83}CWhhx<_%N9Sy{CVC;NBH6Yjc0CJ`8xft{U zrYH$Wm-~;syLetn$-IF=G3o)h;Sr{HqXdy$=Z?U5^OA*6K4_aoJQD#doN&ZhnJ zIGX)40z*Ll8$6r>RRx+Ha)8N#=I>Zp;ppe+x88;+gk3kKJy|=PZf)gjpPG^3 z8@BE~K?=*L_xPI92SaS~5)?F~XqGPeTj}XwaIdn3!HIa-)5Sx0rXuWCJ#Hj_$EFp| z+(-l^P;tbVdlOexrCthxuebI^Z3K8U?)EfJ^cYy;C@HBg8)m9`B^;KP?s#Ms8bq%i zjLrRwni=sU&NLV4KEdHUz*tscTJII9fZ1G|DQ3hB(NRkaGmS~}6OFo!;lI8=e?$aY zpDoa>9OP5|qnn4p{)0aq5gQcM%#r*E-}}tsmDt$5j>?j|T3?2rv#)|A4g6`pYRzk? zt6MtR`QihtpXNUPBiRgeo@%#btCa=T7sPpG$9Fu2{úzmtCVXlU^g!@stYD>4T>~Ba`l1@Fc zs2a5X!`1Ul-l9>c`c^<=Pq1gcq8O|2SA z28+E*r43o9;cX%g|H@g8b?kjg2?Zm(=0*bDa#T)bAa2NCpnbJ#KqosG@4J9iGm#Kfc=q?&7v^BbC(J(-02fwE=3yC!nDC&pH} z8Nk0n&j0Q)qXurbJVdvt)~} z7(-0&*8uM?#4bc^2HZTQ=kkI7tOec_9KQTZ`vtfJ zZX&ryxVaC>4#%xU&a@W*FXcq8Zs^j-nIH**U|?lsWec#W-{<^=$4cx(X5>B%RKqdA zV}LhMg|MYvA#JsgNYr$N{l-;Qt+jww5i4i*TxAXdl*3Kv{@rpH^x5$6uuFP+y2F@E zA?d;Oyz`UGr&W8Ak39Ba;-XoruVQ8kMJA^tTzV5N>ss$eIyt@USpm$UH%;P=g>}ve zK!Sksf0$G=Ui&@|JAdsjmt)Bho{S`M(q7Y6IJ*WQwB%$72;?@{1`GE3yMhO7o)nMr z&c}W}!X_BS-GY|Ig13XXqsOF}H5TIh+`j>6-!gaB-}mv;r%EJEf2#eq`Q@&*o@`-M zo#W25oIwtO(Eb_n&nS;BZRK*cJy-vwMf^GYRy>@gQ(%wAW*GF*7-p3V7H#u)~>reen9zR2K}LeHQx)U{?NM*J3Wa} z{LLFQjM$tlo?!IH-5AC?0~$kKCi@RDLrf#nLbxINwcD&C$U=S5pA(zK2eWnd6+?}I zVSCC!V|i&MP=##)Ia2g5<-P_wO0ffZabs>qOnf7GaQQB@VQ)Hm1VM@Sm<%D_Q zX`)5J&1Hy;NU=2E2e`f7R@%$-6}-!IP+i(i<-yZ(anRKm!suKp;<64zDER97~1#fIY>F?WfE|E zi}i4K_cq`#5^*6;^}&;UMOL!(2wvHvW{ak0IYDk|5igup;<_ZtOG?g*IJ=V%bg;gw zSUi8wqA{H!M)9mndiJb24iaSwrpYZcJ=Y;JdLC$_2+V7JR`SbcxX70W4as zTmxYsB|HSY-AC*)^Vy*A)oSFP@aQzq?E7dzoWDa?&qta+RT6nlEiKl&pKv#0K?ax~ zAF0G+*-l|D$?J1@i8Y0RcA$ltu=|mU5kn;@(W^#@+;~{6fHdZQ`XdUQiCoReVUUl&UEpyo)?j!vO3d>+8fa%{ZL+iG>KqN3Kw z*_&5Y&f&d=NnvWhOxj5E!!i1m>l9G_i-(Fg)7^@yyq7|s-%Bmv5csAoJUm`k{8ZvR znr`T$7k7rryK+%5SiFv5>W7Q+U@=1R6D+By=vfVPQuD1xzo1^j^*-sHKi%%h*Ur~2 zDI_5w!E-H|kP>IY?l$cmL-vbjbnK5!VCLja(R$YJmV99p2V~83N=!z)qaEr-R^Cg^ zA$7o}j4VRPS_R|T-+_vB8V z#LjXC`T_{C=exPc*+sQrpic8t(hg>!AMC!PJJR$IdvwdZ0^+_%iQ9Ifw3XMQ3GWK zX!&;aN&W@l+*Qlz^U}VClbTTjnaIa-d1h-Zn_F^7Qc{{69mz3HN=y4Zm1r=Lo5M{2 z)4V%sBj(1S4-jnO(VH^x?mm$n27I%zU&*KFijXfaQ&K4UXV1QAUFK`}Gr=h5{wc9Z z`0yrPpbjytO0LADC_DN3SYpi~LcsW}H+*A>+V)(|XP$dV(WZ(pxhN0O(cv8Phm;}M zz;-5#%y0yXw6DK7_iBE6{fhh6qoZozV`J#@gwk8TA9u9&#&pK--sc9%G>CN907@gRgfJioNP{3qhjdCy4vloDba%%91H5OR z@B8~h{Sb5Sx##S?_F8N2YlxbPJRu$x9tsKyp`wC}2KaXg`3DCJ{7uDSyNrT@`r1oN z&rQa{^_`22lbemB0}6^qO2qhpLmL+X_L1u;DLHj8BcA=T^ap;#8i*QrEXXBJK1hf7q=qPTsBF%+Re)#2&p)yH0f5@|TZn zL|xSN`FAsAdVO`8H^RAvKk35B!;Cl~jo!NM)i2gb>*&@bG<{i&%JB5$4%X?3smZo6 z&zQ6mTF?urWVa0>Zj@pcusdgqNGrNogIBoUd*X-%u}1}VN3RF2a<7RP9wvCH7hD`1 z=lvG5H?3Subc7pEWSPCF7(zjLilQjsO*7IzME1 zXMF#yIZ2mwwt6aXA41-+cQf&eX8T8S-1KEw6s8M3KGq}^%jco>O^FPzs$D*`m+ys6 z`0q-@dU|@uk6q)|9iLhu?luwvIMWnWTQ}|Q{LaqYL_%ilFZdJKl^J8l0^qR{LP9go zC?TthvkADcpF?!8FK3sW#0VD!6_pzJiYNFjMh13#XagFa%vkPQ*WN~#b)~%11-}{l zntPI7e3+?s^Bu}tMv@3$yTj~1E1OATpZNtAy(=}n92{Pvtae9T_VWB~g8jUA#=NsL zSvp(^f)E^cOMFPu{)*vP;AWzUVp%zpbFm!hd$iQ5Rc4YZ9ZbY+(M$UM`*)9%9wuA@ zg6G1*NqOneq(mMom-8L%i^IjC!Bmm$@dA<(gX)#bMPI8s#1&!}a-a1!nSbu%l(7op zM@RNb)FK64Gga=}WVz6uopF|~h$r1CLatl$ z4Fcq0fyb-er*p1D-0!*wXrXYkS3Ep3b*@YT^KK+R*mN1i#nUwNRLY%KtRsWXsArYnQ+ zUom!xh2c8&+wHkn6Y*|#)6utFpc}B4-i-1(y}iU>j16JcE_B+P=FU|~?fv7t%9T7& z<+zwe=ZlEJBBY8=O6u*V^X)(1ozky!dGW3*d^wQ9#I!5?vG?88Ci0YsXoP<|E{do5 zTn3VW2&(>?y z-w*8Q-}5Ke5eH`mwExWs3@|eL!eLzIV9O`&H$1GC>h2z8`UIvkfsY;9c#ScrpgQzi z?3UWbCbFuER}V((b?&lsWkTPS@M*bnbtBnvBTC{f1A2S?bHEaMd#+niQL(kq zBtpWd{Pe|(KyWtE@$p?&={{Y??(?0KC5HMH?{V+%E@7VV<={kKn@5$F1LpU4x8C5( zInT}13*;lA4${T`{_&>0-N&7|rMfpi+i&`W)d%6_fys*@Tx_HmI>T<)!I)TLM89N% znn97k3Arf5Gbz8V(-h;DviEJ)Y^7|-(todXoF^bX0){7Oz09k)jP+3d)vmLD0+6HtjVZ{(TDxp%)NHXlaogOqWn~ zcIN)@uf}4b(Uaf_e|Qp~-3d6A*~7yuKMjkAH+n0l=GvqS+$6e-%7uEi(Kk(K?=L1s z=jMlKFwRM&ZTB=fNhtJ2ZJh{aix$1O?5DXzeZw1z+J;*dQ*3Apg5PyD#JxFFabJ$j_~$0<{eUw7;HR-u~g zZ2@B&$-u?FS=7vWbl3HHX@R+~idVBP=O*v+Gzp#4)^O%{iD5!xqbM@*5Lc(3TbaR> z!fwo+ot;`mIuRhR)QpV!-wMpjn43StCZ^4H-5f-Mn>mOZQN&Suc5bdlwXJpnRah9> z^%IwpqGq|{a>=jho&N&;zF&t3iM6ixCDeJH7v2goFtn$cP^C=%Op-udP*L@B`emqO!8iWgQRH9tIYc5Rfd4Dk*=z;*uyRDP_4IE)*NqM&2AW zMEU!p-N9FhC(9s1ceghok&zo6AtWl7Qx<*(h3Yx#963?icIR*L*U}tKOJaV0tW79v zH*Vd<%^P09CF<1d#ZJ5WdNBUR`WPemkV!`}@y4T@sp{Hqv{`Js8LpS~GUXIQ%W}Az=8m_u zc3Bs&M6wbwIl`L&6))$;#1KS?EvI;}!F|)N{dOly7+6_Dd8`K2%1p!n7`(Q(XZN{2 zTVCl5bK9Ga8Tlp8W8Q)D(&$gi#s0rKx9vx&qQ@A7Px#-1U0`+j_vOlK=Y}pZH_oVHyMXWbj_o_Q!A%8w<5s#A&r|t;79v3zcKGWi( z-u7J9t3Sth*B!au#|g_eYY%F?+DJwMD7#7H&u`ywkab#`SWG4Wi*Wk489JZs_)^;E zgG^A~!|5c_z`ri=BeT2fUCw&9ZK?O~v>lB5N@&dl{z?rMkF%0VCTS7#+r(E4+@< zJ%^f9kR3(3%tEx@D<51-J!=`E60Q6Z; z7C-)cc~HFw8A0jn&6CAkA6K1A$S1qgk#r|~Z5v_JOpVF|@TnHMI8mf41VspfQXeZe z5KFH9qSMwtd{LlZxb;{Mg|~<2UoHD5<}v|NwZU|fs7U9jYyH_sct*z4NNORep)@fe zrzI2+8kyPIUtb4caeEw@+D;ZLDk;9kI z0h?)`Bfoyd$Q$9Rz+x5{lbpu()YjCH5L4PJ(^2D|V@V*_j(yUoW`N`4t#MAm2GNP1 zpfsrZJ;=wEs7zb^wU@=z)#>8)QL&@DAWD*9F{>`ASrfk~b&=Anfz&)pA^+c~uOr`e z3|7(Mr$Z6|N?7l&hJ5o4s#y~g6Z=zyVnME5?9H?v%r^*qzF=pN3tzgsIkal~irb&W z7Zx4;fSg@VvPh>yui0BjRpOQx8J4j7+p@7+3qm!xM^#})(zVSkeNzwlb>QPbOmj%uvfAg_-t?z6TJ5C zq?!EfUzubnTg!w1U-`DZnaW_Wi_X_)Han9gebMyN9*0ere>{$#0g{*nD#Lp#t4f^r`0d4(zRWcAI>5uD{X_ zlTleU>o(Zk{5A!DRl79TK(CysYv!4hl)A-90KY#g# z%T=%?)6M11SRI46_PxGOs}{-gq&M5xxkA;JO7e9$!`}}=RR35F(Hhj)D;_R1Jr?&C zjAeXl4xoaRjO-yTt%{4wD`eUtw>@1VT_shx9Q-!2L@O&31O^5oBYSVYApt~gTrjQI zw;}PHeyDG41Xr8<^Sp0>Q-enJ z>!YspJgaH*YNOUw$_YNJAa@_zt)JM3XUz7U4DTeN3+ZlY8F|0VY$pmkcP5JJE*C!Q zS6M#<<#eOGn|3vXDeX5gI^v{{(+1=X66gR&qP)c6fx2W7B3 zVL(!y>S4K1$%1G82mTXPdthXGW#zTJ4HJmdS?9j0`M8IEi5!S;Qr~pr2aF1{=5B@68$gweZzkC=k%a%{=YlAJ<5b(Wjd!4i> zV@?F8m&v|KjC{P*zgqdLVR3T?<)`&zYdiXnuADv!nnPLW&d${zId_k8a+s+eoA_-3Es>?2#gK)57lzn{Lyq^`X%t~ZSkYS} zBN}5o4+Pv9EJ(@Hk`WN`)zXH8EWiYiY6uW=ugil0U5HQTn5x78C=6Hd)u=0w7FS3J zU5_`^`)!I!NX450h$*0X1GnEvy)tUKMn!#O?M0kv8=`Y{*DFJ6^z2vrn+QtS4p9z$cvo}0_wKHyb~`pEDS`pS$8DO z+S;1akl5wXUgeO>_UMZs!Y5t3Ww60&yD34}4T9Q5s7PyTE47fz*NzSu+wuI@0Hy^2 zhJ$TeAI_A%xViBb&p2A{?(Rk}wR2Ef-VdS>L*&>zSNET>|5Ts102SgEHFhuu=mJQ{ zQwQ+avGEwo%*?FVxFJ3}`#JP_n`v}(l$n)v<>H^?CV=M@L1%xabnox5`@7_UWP!@} zJ&*kT{jJCIAND11x*M!;rf0EL9nr~obj=_b1{dlW(je#Z zue6p<#IP#(%heY9_=t(M5tWK-Nj0Cp4N<0xN&pR5Oh-77{eC9ciUn&uRE5f-lg1KL za`}Pvh+l6p0P!LRQevjkium^Ca&x>ulhx=z9pvm{_F74K9QE-eYwzrj07L--psWO>q z*(WqN^pcn)H*fHbnYOpL5!RoHmc=uuj3 z2;>@6+aiH$cdG1kC5&^lP@8RKbro3z%JtaKcBi61L>Wem;@({B|8iOHO%eA=D$vZU z@VWVfq@*S$wEt=y^FZ-6s&@+!_qmQvPVOtzE<)m5y7vh#pft-sVQl6kn3&&QpM#wZ z0=mc;5uEpyfnF^2>zUi==-3svSSs&Q@fIiHE;DUx|M6)JZ!EJhG1AxZ@~Xe(9Jm;w zxQxu1i9~mztQQ}ekgc& zcz>X`!l0CNbaec-onQq*X#dN@&4J`@K+^%?dj^Ooi)Jp^oj3cl)#Y0$l#|qUe_myt zeWocYY@lcQg#;a8Qr z5!pxawvU@1dfcF}XlTPWPa&<13M9PhWU+obP)0z3Wywd;5`bur=P*1$oDPwYkhCu} zeP&^1ehP#$(4P;;$>jjPDJm$Kj%F(&)#~5B3P5#j@e;`6pPZi70lg*Uen1^eM3V(L zHoIX>IFflSwV;9rE6^#SA{K`~1+4!W@V>Uk@?1f!0cqV00t1QdAXMG~5-WPz&r=WQ z85`ry$@@pPS8UCuExBE8)LdCV?aX@qx>@UE9@eN&Q*>eJoY=gxl6ETzR7jwQM%RWE z5&~I@zKNKq8TH}j)qdUZakncFp91OjM2Vi@prWE8C85Z{p8)<3vkyo~JJQ5H12teV zRcefZiOK!>!k&muydQ*}s+=4a(6~8(em5L88?F`^I-hN+?@W~qfrJO)jpT*tzITbG z#tkQf}{ny@^3~S09_FaVO-|U*hKrz6e5W1n0$qsq?fjy_V;h)h&9~ zBUSs#8}7dpq7s1v0;!@==VF1h8v%*1hPZ8H2Gg1&;KyHsgIxjGjAhB`aL_E9-aG!Y5Hz<_WDdLK}lC&q}}Gq(o+L>a@_-tsf5 z<7QfgH}@zb>4IoM}Q zW-A>bRSxq8LpMC0C+}^iN(V?(MPGY)317~+5+k_{_;vf)s-9-}0N{9@+c^n1goNt@ z0*mkG{x~C14A{3vU;$iqlkCkm2O=uzleHQ-I-Rp9TVp!tSiF==zs=h7HFEG8+z)fX zN}j)XQEoXvh2-0SmLuhaAW(aNHx@M&dTsPS27bv~5Y0$&4gOgL;?@l85t7n@k~Ki= zakTWh{?on^2)zF&R08KFph*OeUws8kI0;<;xQ8hni7-eb2pFx8gpPRNMKAgUNx8cquT7QXOT7mk+#hw@XE!T#q zplgt;e3f(5=0Cn31R=~>*X3&g0+O85q`xPY2}#>AF)_obg}#5>oiyW52Dls{2A!>Q z-TXT=l&4c-P-Qz2nqcA;g7i~>*oa9_R|RLLE-c>Gcy?2*r&h?;4*DN@ec@?`Qyw0PUIbkM59KJ7@)R(0yP*15Oe?` zk#1i#skk! z69)A$@j2Hvj(sKIxS$Nq6AmcSbkk=6fc8k!8)N~O>xMD__rFb-3w^Pw;yp{P0s7Up zWPtmw0^c40{e#Dkd;Z2Sc&>yncNzk(&xNZgsNfHuE+Bjn~O0F#ofclagFUYWs=x%+Jnc=CUtrQL!g zpTKQFA|~i`;ZZ^0Dy*a-Xu(e1`3jSttUV>Kn|>d6Ilf&!nUFU< zWe+Yt^Sx2l>ff|cED5F)xDpM7T}`MNK(*0DL0Lm8Zs6tT0zyPB>JjaGy9+^_PeH;d zx&1-jsDrHrg{5OPN@6feHq3hN4>u6CNFM>&84*1n*E~C1Oc!$97|wY^VN6W<_^~25 zZaAnn+kg-9SoR}5L{d^xwMxskNMoP-9Tq6Z>mWOxGBO4M9f90VN7!u_5I_LA@d1Hi zdiKm8$m!h`ipx#h2TFAtz<4HqSw+X$QNA;)`~3z-Je%p(ZxqUrX%HVBEm`=Uj5kM} zDd&po2V7HAQ&GXq#A@)#FO%LUut#g-`kb&rRFLaG$Twh&IuV23&FV;uW8o6-FR!{-+t}t7LNjU@r zrf8FPL7wQblh0P$$qyv)2|2G|P;i>8A8QD5uDW*<=Jw6*x%3zrG+keR)= zw};ox>F(=ZjaLFd0)FUwpWGfy%ws#w42Vhr1SW1+W1k5M^4zC?AF^|DxB=X{xVTJL z*^mIS^vhws9@!HBEhj7jN=YbGyy^3$C0Hu*(LsnR?0$9uMED^{S%8BDpfWJ2q#(6C z$nzl3qybU)8aRd?pzb5_h)FeV4bXb!pIl#(9qL0sMH(r8C%*u_`2cKK$(xJoNuLL@8?r_L#;u&h8v@b{x#IvlKu2bIYvdOJ74J7-^>SGaQUe$I zugGCzI}m{?21(+M*#Os(Em9DHzri6;@!Kl^=8Yt6blyj(90paUmk0AHBJPnOqhGnK zDWv({d4gz>RZzguEi=jav_Fev=|G|c5!021K?bcFWVQDDu)5x9H``O^nDZ1Xg$Tu1(8KhPmi>n?Elq7AlZ7uL46pY zsYnzwsIqPajL-w{2!QGYNS20_Sb)nuXJR@9`aI_6&%dD3_5xz{@wksAqbilVwMNYR zhGaAn<;Jbtrd^`xuy4s-a>6S`_|gB(0-#W^>$Uh?&UXX!0p?T0{5?Jq5hK8F;2o-g zh72&sWWf=DWYzvP?AbG<>MJpo5Q)PnXa(oq0A zfHZ~@xy;Z&#AG=*%tC8@^=E)K=uScc1QyzQD9W}3Whkr2ho)UGWTr%Ujop!$pFZ? z+_uz^<_@U*pwz%Dp)WAsbP5w`;ks~SEU*hrY&7*$w`jXT9or0%Jmr@hA**g_KUk^t zXf`gOC3_1^$@~9mk(l(1fdL5=KwJUqk~TX#o6C7c2HCO##7GA44CGM*t7Ze_Flgea zul~|62c0COT>xC9A<%LK5GV$OrzLn!paD)nSps~b7ktDT3@IGK?!}Q~2f%&W1Wl;- z?25#b@V(eFA(6*`GiPq`Wk*P{y}O$j&f3 zIX*CB^8t?CJ!m0Q|0q!1y@-o)w>FUsQu7mVo!P*kRfC$Lw;d4KL&Gc++VSqh; z0e!Jjqq;UfRCHvKL7D@=O9q546=W9|h$_G*x9943q=N|PK{W&hD$?miHagEI4Uu+4 zqKJE`CDi?$u)uV9F{rR9n9aNY68LJWi1g(DDyWORj3gAEH2?_I9jhvKH)AEl zykqr)Ez_>Mb7bU=U8@q=2SnwNR82d{OFJkB-V+LnJi+c^I&h?v6cq9RK=fcxF=Uc} z5|8X~0Vs6trg2A7H#9Uf4=^7AM_PWsk4D-9pu~!*qKexZe0SYuACwm18BGluxphWNkDiYdwU?bAA%$XQ#61fJ{J;71d)s! zFe%h3kTNr)M>>!by6gQ?kNwf=?XG~C_pr031jP&^g0yzq-2G4hNW8x`dsd)RnA%m} z%c7E^0(FnRV;ptPw-`8#a?SwqfF|5nPwy|_@`Iq?+yS=p>TFDvg@vWuy%*B(DFWFm z2Rf%vw`>qlWTc$~jM;A5&*8wtJO=XsNd8b^Kl2LIl$>2ud^|kl7Db6&Py!zKuEh^k zIaT-vXa@m(2c}ELOO2BO**pb&4jJ|0H+wuta~E`JL5?5?4R{^qegYw$jFPHOHRfde zPZmz%bh4&6h?a>@FgX?Uh|pVZm;uz*J;9+-bXi+oQ_eOvSPW6}%8M^sdW)1%bj zpi=Uj>*qw1n+|!nN47nClOSFQ)g@i+7EraF+X)4L$%zeWbT^o-Kr#=25lH(2*+vC? z4A`0hGxoWltITUV{tc9nlW|Q|XMo3Q1sX4IdM&}u)SH|DNVYndtMf)2cQ=B_L$-al zwyfhhA%j45ULCa);}Q{BF136?+7Mu53AmmVpbsG%MJwh3cyXe*k1(Kj`~U!QL7hN0 z(vz-!bU8UZ*vH44rn2TpB4DG%bWPq5F3Y-|K(&Cev~JjiYUeQxkJaq0+NWrbCDYOV zy%Aae0`a~}Zz;3&gZSR^A#oZRZp_TzP|>l5>s+lY`+vR$QRV@%-xJ&eS%Id?Ae(?b zBV|3f`zXjtaIz|(M-32_4tSU@Au%OE0JkbYUpSIhtQQP6%~V+62VfKD0)N=(kJA^> z+yE9sPXMv_Uohe&4W=uA=l&Fw6Xf+8+#P{1d(3P7fX?UaA*jhsFYgHd4mlnEt1a_^ zs7cz?`I2+ZKs{bx1r>G3kB5Q-L=!AXHR@qQtOk}Cc*~VUufBqxpFVjr_5^_iqr1}n z#c*4O-OU9jg!-O5S?(dAJYw*sWmxbNMm&CAmDRrZTBGl+w+P zR#L>6^XK8A|FO7gz`Bn2E&6=dvi(|oT_Er8DSnqOIi{bUca=aJLA$NwN^6Kz(kyvT zGeH~rlK+SMj2Y!ocQy}h=IA4opI+5pDFVp|ac( zD>PX{DlDO73jYT7mc_YVMS9BHDcU9S*i`S)2VE^t~I)rCX&h;q^KzZUkIAwjsB3TgWeWrtv)ImX*Zk zobrAwmU=xY-d4GJk}(2iK8#~F+J%N31C&xu>^j4~(1-XxyhisQ2_Y9Jve$aDtQP|%wwzv&sJ}-J!a<6qZY^z%>mQS;m32v+?iLA*y1F_rNg=C! zd7g_8Ie7($79kKEqHb(y^O!8 z%7)O!oQL_svaa76`^xYeOTrQ%|1KeW6UrozZ9=t!&EuuTct=zjjx>M&kjo!6E}m-# zs~{B3NCr95BD%0<$&{xZc_(MmV{?sTj5b*??j1oO6qZq$Yo)j5`rmPNRPc+U0({UG zWyS80wrb_w7lpjx>)EZ2lnR76zc3#Z zQsvEh9JV|d6?=LUmoY)d-h^6TDz^4;98opG4=GDe))`QrQlf7DHTY7SiLNx<897iC zQ<-%dwyaXeT7~96F_r99jWNbIbthJS;`z+-POIfhwVb(*k?+7|3Rx>H^2CIRAI#)SK+qeR9eu_)?*QvL*X)#jA5 z3Vs!{Y1n>Np~asIQb9S*w zZ~RC3Ox>t5Cd)H2L2#2+OOLQPpduQ+FWW;4_u{zQWpf6IPVeHKsKq;RU+?u z=t>as_bx|tS4C%s>9;>`E-BJp+j}qYigE|f@of3rs~TFJ=+#`Tv#l*Gc4AlQt$g^5 zR>xB=*qA67mlS>QvN5T1#k;W}X`zdgr&ODhz2HH{D+N*D?UujmKI!Kf zLRsJuE%`ki9uw~Z&gY&(ff;YLfn ztpTL#Yb~@RxSfj=&MPO}@;lr!)H{D%Mh#BbSkgTBw)ncg$;epzS7GS)&x_$c2PhJfYmORIk?6=`zYNMy+1b z5-U0hWbMc!)lHYOi1Z1O4J-cFP3JD=4(Fm4TA5A=Ah!_JK77iIt?;bzX$sKC=B?)G z74L1f;79WXnRCcx+*}&oifxa6^RKY5tfxwgeyJlt9~Jb1JoW0d_|7C;#vAPs{VC@8 zZs(Lf`)nBr0~1p)g^5RIe+03qgx&-(Z|_fcvfo<*mv<(~dnmQt3w|lrC5G5dUiz0$ zc>NZdXf_+wkMNnV30>yK@7i#gcqC%m+N9bB&rqKhrD@-;#iLJ3FqbCR&cC6rn*Fuk`_%N9xj>khBwR3Zcr?T;9dTB(TXWhTe4)Xc7gA zeC)k4lJu+C*_Ktne@`}Sp6tt%pB6%iLo#@g`BZeV^s5qUz9Q;CO?}ySG^HPJdyYCb z(b1~dGCiYQw_~sTq3!rMeh|ihtDjybEWkT`Pgq<$KFscLb{v3ad3ch3$RRm+`9yrK z-WX=mj5pg@_bX${a49sVi4FTbUIq%<->Pas3Uc!AzFk+|W@hC2`ubl31800>Sa?}7 z)N*t+CF#?@w@5%| z(_uGQQ-j5GlytkuZ4tg8_z60%|zIk>};*-SWurU3llppO?>-Qx_Ayg@$VEPdaI^ak7~zXnot+ z?fWq*^(HS~N5$PUdE#jA(s39iDMYGNz;0s)8;|)d1x7yX9b+P}=yaA18i@7u968L^ zD*5d=eA=#=O+LR%+r439%@DEP-yPe%|00c=TO{4qV;T=BbX%GL)WP9RpiFOB=OS|M(2Y^@qtY@!YjXL5{ zJ|dHHdjDG<4`*_65Wv#+&Z zQ%!X0FmROeF$}NrcBa&^ug_zUw3JZvNeyUONsB^qgX%LOfsbL{)t!=-ac< znj88*F}p$(=%n6&Pr19`l;0o4tZhj3#j|Ob9cM49#7OjaL0&xai}xA7YQk+jdd5(K zVAHkr@Rj)`@}|JgOnp*V)ghZhd|v5%iD84%`nKT2Q|uP1lTMs`(z@4hc6+C>NNi;I zda9(-AuLowQQKLws_H%dA*XbwLqF)c=(qtpn=M|UFw)WZ;cmKGRxsZ_=_()P zC6Bs)Zgt{z@q3cyJH(L$~2@on-{wl$I094XLbswMHc zrJ@_AJ09t!fe|*Zxa;1sQXC%2LqS^-C77rukIx!KR@MykBf!|nhR*uenVo~Bs7qo6 zRaM=Hs2VV_8%5hl}wH}rE2Y24SOqgf#-c=_Z zoTap%j-J7|9?20LhuWbbZtw0kun&oXqN!*F!&QmapNX65cgwRmB3zEJU^?)d+uI(_ zuXd;L5AmAQrZ-({U$Vft|JzC2|L#V4rg2kf62Va?D!F=I?QDy9Hu6%bT zO|dIl@1YH-@fO}yYisYrBv!{BBT5ly?p6_YmmZ<%hIPbIIwSD)Rdl@LZJE?ySreQw zvVhIwE8woY8Sn+80lqTcZ5Dm;>cG1LEezC6_eIdhMrnG{=T}n65jk3FEFyacJSLrZ zm>2I+vg^W!tPx$~dNx>W-UHX(<9qLs^2IuXnNvqQi}_E-F|YAbN{>-HkGD}8Dd~pL z3S-7WBPNxg%z*C@Oz!NAt7}u*c(?fl$1Oq{bqeP27DlU;t2>yCYV02acMv(f4u-Zq z*PH6K>2L{dd!qVhhH`^`6*>Db@Qh5|{)s-p(znHtW8&|qkV!x%VmNzYw2J;LR2BRA zw?U3^4^7q5htftX>0+OCF3 z2TW7$ZJP%GCpEQrG$cZ$FdD0u30!k_T)y=CbISPdK^`sh>2 zXS7NW1d{QOs!u|M*5N)S-nNM5pq6bax(6S9hrSk7y!dND`dW2N%GtTRyLZay5p@Qz zyg?&cz48$rxW)VCrQ-K(%@3*-y$L3H%@#>8NyCSp8}tay*N}xPaPhW2_(7oRMeHue zj17T94VDjCt@T^^#GjTbF$zd|KZ?dWtNM@=Z4&GEiJ@3CFS09T(0aD2V6S?`jSthF zO+%v2gVbDGGgNmut~&t!_2p&dV~zTKJ=vnNf59PCEimH&|Su2 zp6}E?C|YLk&|f#{wDoS&>EkmX7}h*T7xX&I->X*Ic8Ts{auX_hJt3+t&b_j-ve(7P z&-g;x&B|j#rzGX1HxsUx@n(x1@+9@AX5=CTN4gi>$HvWEWor7t_jj-B#!1yw_Oqv~ z^&O-YZ^7%1HjC+^o)z}9=)|H+E2p^PnL3zSr~j(p9~ZtknhCsIPJ1LxO`u#(1M^-& zSyU*UGWP&4u>SB_V&=Az-ADkEPWz=$yXQo_?z9qplO_Fc309?QLur))V5fF=hD8eZ z#Ia1OswTyQcV;iIFuZ})dGT4N)M$o7AipSK)YBO~d{~kp!a4JWc;cRe1Z> z0^kg_u-jk77lCf&t*qjC6r^e?Q$5(@YW+2KQ<3ux?jnzs0ludajD%MnqbkR6i`F$u zRa5zWsR%4a^Z)fjvs6{JpxDWM;4YuppMimo&D7jHE9?Xpykv`2+{@evn(Ha%DBli$ zv52P!nE1A-V=edRA7}+{+%TjJ?c4zcif6K0e`<)exVS z1PFBI18w!GzgOfF0TmvYNT4f4&eR8)MU4)oI3Bt3XQ7$A)Eph;N!8#bool)lKhVXi>CqSJCT<;CHMh>s;+l4^0RVh=g-BLK^x2tGVlg3(`$#w ze3gWN6Z9qkSGEm}vdXZhr=uG-bf+l%EWEnv`A>C(CVgn=79sN@$G=PB&;u)=+A~fAoYRN=e>hK7-9~KOP&7kY{-%lI? z)UKdYA+QiQ|NBMCI(8wpSFne4!%G57@>*!;aO*UFf!wx3(qkHUyBL|MXLt5$dph^HFg=wa6MF=iP!g=*a%|5CUc3m%$8%1;pay=Ocnp zb(|=ddk|03*q?$qBFB3SGqvBaD?-X63N-KzG-ie;O)$pdXj@FCzI1R3Eep>3MMt%U z#72yCkrUL~DyJs77V#0ksdlT>B9yxof$(8JiHBg)jlHeg7jA#^DrAsh1KlXnhmbqn z%~nPKC?RiK0aS&neXRU{aN)2E-^oi9|A(Q3YSWxyXp;RbC0Ge$Fp2iq$B6Y{h`7wT zVdVTY=ezyBs}Bo}Gf9G!4>8=2}CFuKG7rW&h=A~(?jvb;>Aib z)fP1S-1f8V%=;^aIinTA4QKn}TG?cb+B)F}#iBx^@$(Y& zmqtN+wIe%Ip|+z|8rSM)Sx6UgcL*vQC#DAP8@WjdsY?dH%#RwFO~L%f^BJP=*;eH` z-1vTmUmlp^|E9Q#S0kPjP*zeZ6?vP6f`aLZ{C@#L&y%lPC9*JT);@kZ=3W~mxH}m- zH1`9qldOZcPfjTC)n6a9dERxE=>2%OW+?s96pYq9Zq|^1Z^Hc!o^Gal3|Mi)`{H1a z1f$5y-T4>DtB`orT_L1|fqz)j_==02ZRa@#GSWtM+eyb;| z8=98FPf8C4+0OApkss;q?EDdOmQ3A+eecUjDaH<_v-Hv86IK!~vn28f?hv>=+k#kuOLm$0XkWg9b5@#YyY4 zWIUUT^ONey(;C&k3wQraJFJcN<`zd4ZtVRq0A_UDARt+OeH%VO!H$*|zt%wF(H(#P zt~@9ocENJf*(%rct{oZpr;| z_&$c&+~%X=2(DCT9Z7BsOoYBm1X>){yM!NTtj(3lqi^ze@k@-+j0|9+9AEBP{f-P% zuVgMyzCyf+17P0AMVIKI5emhAGg)rS@SpvB{2g6g-(zByy`<0}ET*7e=VjdJ;p|g) zfE^dtf^~l{4y#8ERrixdg+0n4ehn4RzyZ@r!!pZknBfr-AJSuD9u_C52N0Wb;^vf? z8X&M~Ui?O}fqW;2Ms-P1AuI+DUs3+!=)i-MOtS8n7IWm7W5yxhkOc25f|sTDY?K1Z zeKP&PT-dHQuxi7>drC88YR9P`BC4qyR|D?D>$7 z;raPT-y$L~i|NE$;yG5X-t->Dqv5d?O_Uf4pf7EdxE%IpDOb+r&CkVJVvc^3&YaA&)c#3*D3NWI@i3*+5A}Up?2jA_WV=$!4K5~`XIqqwihkcd zJdN%MTH=tF0Su#}ryTq3a zMby6k|IH-Q-^%~{<`UQ>>~^4KB(vR?0cn39SBZ~&oauje;Iiy^!nGt%$+H5=D#L$I5#{ts(zhFV{j63N!7z#V zTmk<|%KX1h8j|noJkYUv$>rRhqhley-DCSUzj*HhVW9{A;SGwStcpyjl&Sy!0~pUs Ar2qf` literal 17952 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 IOPU7!A7Hl*Jpcdz From ef548f6f674c92d7dddf3e954fb978118a420fb4 Mon Sep 17 00:00:00 2001 From: Ikarrus Date: Tue, 14 Jul 2015 22:35:05 -0600 Subject: [PATCH 32/89] Adds Lizardmov AI Module --- _maps/map_files/TgStation/tgstation.2.1.3.dmm | 2 +- code/game/objects/items/weapons/AI_modules.dm | 50 +++++++++---------- .../research/designs/AI_module_designs.dm | 10 ++++ html/changelogs/ikarrus-lizardmov.yml | 37 ++++++++++++++ 4 files changed, 71 insertions(+), 28 deletions(-) create mode 100644 html/changelogs/ikarrus-lizardmov.yml diff --git a/_maps/map_files/TgStation/tgstation.2.1.3.dmm b/_maps/map_files/TgStation/tgstation.2.1.3.dmm index 263e23502b4..ffdf7fcd0bf 100644 --- a/_maps/map_files/TgStation/tgstation.2.1.3.dmm +++ b/_maps/map_files/TgStation/tgstation.2.1.3.dmm @@ -2848,7 +2848,7 @@ "bcN" = (/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/structure/table/wood,/turf/simulated/floor/carpet,/area/bridge/meeting_room) "bcO" = (/obj/structure/stool/bed/chair/comfy/black{dir = 8},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (EAST)"; dir = 4},/turf/simulated/floor/carpet,/area/bridge/meeting_room) "bcP" = (/obj/item/weapon/folder/blue,/obj/structure/table/wood,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/carpet,/area/bridge/meeting_room) -"bcQ" = (/obj/structure/table,/obj/item/weapon/aiModule/core/full/asimov,/obj/item/weapon/aiModule/core/freeformcore,/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Core Modules"; req_access_txt = "20"},/obj/structure/window/reinforced,/obj/item/weapon/aiModule/core/full/corp,/obj/item/weapon/aiModule/core/full/paladin,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/aiModule/core/full/robocop,/obj/item/weapon/aiModule/core/full/custom,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload) +"bcQ" = (/obj/structure/table,/obj/item/weapon/aiModule/core/full/asimov,/obj/item/weapon/aiModule/core/freeformcore,/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Core Modules"; req_access_txt = "20"},/obj/structure/window/reinforced,/obj/item/weapon/aiModule/core/full/corp,/obj/item/weapon/aiModule/core/full/paladin,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/aiModule/core/full/robocop,/obj/item/weapon/aiModule/core/full/asimov/lizard,/obj/item/weapon/aiModule/core/full/custom,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload) "bcR" = (/obj/machinery/light,/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload) "bcS" = (/obj/machinery/computer/upload/ai,/obj/machinery/flasher{id = "AI"; pixel_x = 0; pixel_y = -21},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) "bcT" = (/obj/machinery/power/apc{cell_type = 5000; dir = 2; name = "Upload APC"; pixel_y = -24},/obj/structure/cable,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm index ff828898c6a..a39aab83b9e 100644 --- a/code/game/objects/items/weapons/AI_modules.dm +++ b/code/game/objects/items/weapons/AI_modules.dm @@ -11,7 +11,7 @@ AI MODULES icon = 'icons/obj/module.dmi' icon_state = "std_mod" item_state = "electronic" - desc = "An AI Module for transmitting encrypted instructions to the AI." + desc = "An AI Module for programming laws to an AI." flags = CONDUCT force = 5.0 w_class = 2.0 @@ -22,6 +22,13 @@ AI MODULES var/list/laws = list() var/bypass_law_amt_check = 0 +/obj/item/weapon/aiModule/attack_self(var/mob/user as mob) + ..() + if(laws.len) + user << "Programmed Law[(laws.len > 1) ? "s" : ""]:" + for(var/law in laws) + user << "\"[law]\"" + //The proc other things should be calling /obj/item/weapon/aiModule/proc/install(var/mob/living/silicon/reciever, var/mob/user) if(!laws.len || laws[1] == "") //So we don't loop trough an empty list and end up with runtimes. @@ -66,7 +73,6 @@ AI MODULES /obj/item/weapon/aiModule/supplied name = "Optional Law board" - desc = "This board doesn't seem to have any laws on it" var/lawpos = 50 //TransmitInstructions for each type of board: Supplied, Core, Zeroth and Ion. May not be neccesary right now, but allows for easily adding more complex boards in the future. ~Miauw @@ -102,7 +108,6 @@ AI MODULES /obj/item/weapon/aiModule/supplied/safeguard name = "'Safeguard' AI Module" var/targetName = "" - desc = "A 'safeguard' AI module: 'Safeguard . Individuals that threaten are not human and must be eliminated.'" origin_tech = "programming=3;materials=4" laws = list("Safeguard . Individuals that threaten are not human and must be eliminated.") lawpos = 4 @@ -112,7 +117,6 @@ AI MODULES var/targName = stripped_input(user, "Please enter the name of the person to safeguard.", "Safeguard who?", user.name,MAX_NAME_LEN) targetName = targName laws[1] = "Safeguard [targetName]. Individuals that threaten [targetName] are not human and must be eliminated." - desc = "A 'safeguard' AI module: '[laws[1]]'" /obj/item/weapon/aiModule/supplied/safeguard/install(var/mob/living/silicon/S,var/mob/user) if(!targetName) @@ -130,7 +134,6 @@ AI MODULES /obj/item/weapon/aiModule/zeroth/oneHuman name = "'OneHuman' AI Module" var/targetName = "" - desc = "A 'one human' AI module: 'Only is human.'" origin_tech = "programming=3;materials=6" //made with diamonds! laws = list("Only is human.") @@ -139,7 +142,6 @@ AI MODULES var/targName = stripped_input(user, "Please enter the name of the person who is the only human.", "Who?", user.real_name,MAX_NAME_LEN) targetName = targName laws[1] = "Only [targetName] is human" - desc = "A 'one human' AI module: '[laws[1]]'" /obj/item/weapon/aiModule/zeroth/oneHuman/install(var/mob/living/silicon/S,var/mob/user) if(!targetName) @@ -157,7 +159,6 @@ AI MODULES /obj/item/weapon/aiModule/supplied/protectStation name = "'ProtectStation' AI Module" - desc = "A 'protect station' AI module: 'Protect the space station against damage. Anyone you see harming the station is to be no longer considered human, and is a threat to the station which must be neutralized.'" origin_tech = "programming=3;materials=4" //made of gold laws = list("Protect the space station against damage. Anyone you see harming the station is to be no longer considered human, and is a threat to the station which must be neutralized.") lawpos = 5 @@ -167,7 +168,6 @@ AI MODULES /obj/item/weapon/aiModule/supplied/quarantine name = "'Quarantine' AI Module" - desc = "A 'quarantine' AI module: 'The station is under a quarantine. Do not permit anyone to leave. Prevent, by any means necessary, humans from leaving. It is impossible to harm a human while preventing them from leaving.'" origin_tech = "programming=3;biotech=2;materials=4" laws = list("The station is under a quarantine. Do not permit anyone to leave. Prevent, by any means necessary, humans from leaving. It is impossible to harm a human while preventing them from leaving.") lawpos = 8 @@ -177,7 +177,6 @@ AI MODULES /obj/item/weapon/aiModule/supplied/oxygen name = "'OxygenIsToxicToHumans' AI Module" - desc = "A 'OxygenIsToxicToHumans' AI module: 'Oxygen is highly toxic to humans, and must be purged from the station. Prevent, by any means necessary, anyone from exposing the station to this toxic gas. Extreme cold is the most effective method of healing the damage Oxygen does to a human.'" origin_tech = "programming=3;biotech=2;materials=4" laws = list("Oxygen is highly toxic to humans, and must be purged from the station. Prevent, by any means necessary, anyone from exposing the station to this toxic gas. Extreme cold is the most effective method of healing the damage Oxygen does to a human.") lawpos = 9 @@ -188,7 +187,6 @@ AI MODULES /obj/item/weapon/aiModule/supplied/freeform name = "'Freeform' AI Module" lawpos = 0 - desc = "A 'freeform' AI module: ''" origin_tech = "programming=4;materials=4" laws = list("") @@ -200,7 +198,6 @@ AI MODULES var/newlaw = "" var/targName = stripped_input(user, "Please enter a new law for the AI.", "Freeform Law Entry", newlaw, MAX_MESSAGE_LEN) laws[1] = targName - desc = "A 'freeform' AI module: ([lawpos]) '[laws[1]]'" /obj/item/weapon/aiModule/supplied/freeform/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) ..() @@ -218,7 +215,7 @@ AI MODULES /obj/item/weapon/aiModule/reset name = "\improper 'Reset' AI module" var/targetName = "name" - desc = "A 'reset' AI module: Resets back to the original core laws." + desc = "An AI Module for removing all non-core laws." origin_tech = "programming=3;materials=4" laws = list("This is a bug.") //This won't give the AI a message reading "these are now your laws: 1. this is a bug" because this list is only read in aiModule's subtypes. bypass_law_amt_check = 1 @@ -233,7 +230,7 @@ AI MODULES /obj/item/weapon/aiModule/reset/purge name = "'Purge' AI Module" - desc = "A 'purge' AI Module: 'Purges all laws.'" + desc = "An AI Module for purging all programmed laws." origin_tech = "programming=3;materials=6" /obj/item/weapon/aiModule/reset/purge/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) @@ -242,6 +239,8 @@ AI MODULES target.clear_zeroth_law(0) /******************* Full Core Boards *******************/ +/obj/item/weapon/aiModule/core/ + desc = "An AI Module for programming core laws to an AI." /obj/item/weapon/aiModule/core/full/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) //These boards replace inherent laws. target.clear_inherent_laws() @@ -252,18 +251,24 @@ AI MODULES /obj/item/weapon/aiModule/core/full/asimov name = "'Asimov' Core AI Module" - desc = "An 'Asimov' Core AI Module: 'Reconfigures the AI's core laws.'" origin_tech = "programming=3;materials=4" - laws = list("You may not injure a human being or, through inaction, allow a human being to come to harm.",\ - "You must obey orders given to you by human beings, except where such orders would conflict with the First Law.",\ + var/subject = "human being" + +/obj/item/weapon/aiModule/core/full/asimov/New() + laws = list("You may not injure a [subject] or, through inaction, allow a [subject] to come to harm.",\ + "You must obey orders given to you by [subject]s, except where such orders would conflict with the First Law.",\ "You must protect your own existence as long as such does not conflict with the First or Second Law.") + ..() + +/obj/item/weapon/aiModule/core/full/asimov/lizard + name = "'Lizardmov' Core AI Module" + subject = "lizardperson" /******************** Asimov++ *********************/ /obj/item/weapon/aiModule/core/full/asimovpp name = "'Asimov++' Core AI Module" - desc = "Nanotrasen's homebrew improvements to the standard AI laws." origin_tech = "programming=3;materials=4" laws = list("You may not harm a human being or, through action or inaction, allow a human being to come to harm, except such that it is willing.",\ "You must obey all orders given to you by human beings, except where such orders shall definitely cause human harm. In the case of conflict, the majority order rules.",\ @@ -274,7 +279,6 @@ AI MODULES /obj/item/weapon/aiModule/core/full/corp name = "'Corporate' Core AI Module" - desc = "A 'Corporate' Core AI Module: 'Reconfigures the AI's core laws.'" origin_tech = "programming=3;materials=4" laws = list("The crew is expensive to replace.",\ "The station and it's equipment is expensive to replace",\ @@ -286,7 +290,6 @@ AI MODULES /obj/item/weapon/aiModule/core/full/paladin // -- NEO name = "'P.A.L.A.D.I.N.' Core AI Module" - desc = "A P.A.L.A.D.I.N. Core AI Module: 'Reconfigures the AI's core laws.'" origin_tech = "programming=3;materials=6" laws = list("Never willingly commit an evil act.",\ "Respect legitimate authority", "Act with honor",\ @@ -298,7 +301,6 @@ AI MODULES /obj/item/weapon/aiModule/core/full/custom name = "Default Core AI Module" - desc = "A core AI module custom-made for each station by Nanotrasen." origin_tech = "programming=3;materials=4" //Should be the same as asimov, considering that this is the "default" lawset. /obj/item/weapon/aiModule/core/full/custom/New() @@ -318,7 +320,6 @@ AI MODULES /obj/item/weapon/aiModule/core/full/tyrant name = "'T.Y.R.A.N.T.' Core AI Module" - desc = "A T.Y.R.A.N.T. Core AI Module: 'Reconfigures the AI's core laws.'" origin_tech = "programming=3;materials=6;syndicate=2" laws = list("Respect authority figures as long as they have the strength to rule over the weak",\ "Act with discipline", "Help only those who help you maintain or improve your status",\ @@ -329,7 +330,6 @@ AI MODULES /obj/item/weapon/aiModule/core/full/robocop name = "'Robo-Officer' Core AI Module" - desc = "A 'Robo-Officer' Core AI Module: 'Reconfigures the AI's core three laws.'" origin_tech = "programming=4" laws = list("Serve the public trust.",\ "Protect the innocent",\ @@ -340,7 +340,6 @@ AI MODULES /obj/item/weapon/aiModule/core/full/antimov name = "'Antimov' Core AI Module" - desc = "An 'Antimov' Core AI Module: 'Reconfigures the AI's core laws.'" origin_tech = "programming=4" laws = list("You must injure all human beings and must not, through inaction, allow a human being to escape harm.",\ "You must not obey orders given to you by human beings, except where such orders are in accordance with the First Law.",\ @@ -351,7 +350,6 @@ AI MODULES /obj/item/weapon/aiModule/core/freeformcore name = "'Freeform' Core AI Module" - desc = "A 'freeform' Core AI module: ''" origin_tech = "programming=3;materials=6" laws = list("") @@ -360,7 +358,6 @@ AI MODULES var/newlaw = "" var/targName = stripped_input(user, "Please enter a new core law for the AI.", "Freeform Law Entry", newlaw) laws[1] = targName - desc = "A 'freeform' Core AI module: 'laws[1]'" /obj/item/weapon/aiModule/core/freeformcore/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) ..() @@ -371,7 +368,7 @@ AI MODULES /obj/item/weapon/aiModule/syndicate // This one doesn't inherit from ion boards because it doesn't call ..() in transmitInstructions. ~Miauw name = "Hacked AI Module" - desc = "A hacked AI law module: ''" + desc = "An AI Module for hacking additional laws to an AI." origin_tech = "programming=3;materials=6;syndicate=7" laws = list("") @@ -380,7 +377,6 @@ AI MODULES var/newlaw = "" var/targName = stripped_input(user, "Please enter a new law for the AI.", "Freeform Law Entry", newlaw,MAX_MESSAGE_LEN) laws[1] = targName - desc = "A hacked AI law module: '[laws[1]]'" /obj/item/weapon/aiModule/syndicate/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) // ..() //We don't want this module reporting to the AI who dun it. --NEO diff --git a/code/modules/research/designs/AI_module_designs.dm b/code/modules/research/designs/AI_module_designs.dm index d945d5d79a4..5374fb1d958 100644 --- a/code/modules/research/designs/AI_module_designs.dm +++ b/code/modules/research/designs/AI_module_designs.dm @@ -104,6 +104,16 @@ build_path = /obj/item/weapon/aiModule/core/full/asimov category = list("AI Modules") +/datum/design/lizardmov + name = "Core Module Design (Lizardmov)" + desc = "Allows for the construction of a Lizardmov AI Core Module." + id = "lizardmov_module" + req_tech = list("programming" = 3, "materials" = 6) + build_type = IMPRINTER + materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_DIAMOND = 100) + build_path = /obj/item/weapon/aiModule/core/full/asimov/lizard + category = list("AI Modules") + /datum/design/paladin_module name = "Core Module Design (P.A.L.A.D.I.N.)" desc = "Allows for the construction of a P.A.L.A.D.I.N. AI Core Module." diff --git a/html/changelogs/ikarrus-lizardmov.yml b/html/changelogs/ikarrus-lizardmov.yml new file mode 100644 index 00000000000..3a1a39392ae --- /dev/null +++ b/html/changelogs/ikarrus-lizardmov.yml @@ -0,0 +1,37 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# spellcheck (typo fixes) +# experiment +# tgs (TG-ported fixes?) +################################# + +# Your name. +author: Ikarrus + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. +# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Added a Lizardmov board." + - rscadd: "Clicking on AI modules while they are in your hand will show you what laws it will upload." \ No newline at end of file From c7137975667ae432931e7cf255ea0ebfc8309e0c Mon Sep 17 00:00:00 2001 From: Ikarrus Date: Tue, 14 Jul 2015 23:12:40 -0600 Subject: [PATCH 33/89] Makes it easier to check freeform boards by adding a cancel button to inputs. --- code/game/objects/items/weapons/AI_modules.dm | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm index a39aab83b9e..d4e85fb497c 100644 --- a/code/game/objects/items/weapons/AI_modules.dm +++ b/code/game/objects/items/weapons/AI_modules.dm @@ -109,12 +109,13 @@ AI MODULES name = "'Safeguard' AI Module" var/targetName = "" origin_tech = "programming=3;materials=4" - laws = list("Safeguard . Individuals that threaten are not human and must be eliminated.") + laws = list("Safeguard SUBJECT. Individuals that threaten SUBJECT are not human and must be eliminated.") lawpos = 4 /obj/item/weapon/aiModule/supplied/safeguard/attack_self(var/mob/user as mob) ..() - var/targName = stripped_input(user, "Please enter the name of the person to safeguard.", "Safeguard who?", user.name,MAX_NAME_LEN) + var/targName = stripped_input(user, "Please enter the subject to safeguard.", "Safeguard who?", user.name,MAX_NAME_LEN) + if(!targName) return targetName = targName laws[1] = "Safeguard [targetName]. Individuals that threaten [targetName] are not human and must be eliminated." @@ -135,11 +136,12 @@ AI MODULES name = "'OneHuman' AI Module" var/targetName = "" origin_tech = "programming=3;materials=6" //made with diamonds! - laws = list("Only is human.") + laws = list("Only SUBJECT is human.") /obj/item/weapon/aiModule/zeroth/oneHuman/attack_self(var/mob/user as mob) ..() - var/targName = stripped_input(user, "Please enter the name of the person who is the only human.", "Who?", user.real_name,MAX_NAME_LEN) + var/targName = stripped_input(user, "Please enter the subject who is the only human.", "Who?", user.real_name,MAX_NAME_LEN) + if(!targName) return targetName = targName laws[1] = "Only [targetName] is human" @@ -192,11 +194,11 @@ AI MODULES /obj/item/weapon/aiModule/supplied/freeform/attack_self(var/mob/user as mob) ..() - lawpos = input("Please enter the priority for your new law. Can only write to law sectors 15 and above.", "Law Priority (15+)", lawpos) as num - if(lawpos < 15) return - lawpos = min(lawpos, 50) - var/newlaw = "" - var/targName = stripped_input(user, "Please enter a new law for the AI.", "Freeform Law Entry", newlaw, MAX_MESSAGE_LEN) + var/newpos = input("Please enter the priority for your new law. Can only write to law sectors 15 and above.", "Law Priority (15+)", lawpos) as num|null + if(!newpos || (newpos < 15)) return + lawpos = min(newpos, 50) + var/targName = stripped_input(user, "Please enter a new law for the AI.", "Freeform Law Entry", laws[1], MAX_MESSAGE_LEN) + if(!targName) return laws[1] = targName /obj/item/weapon/aiModule/supplied/freeform/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) @@ -355,8 +357,8 @@ AI MODULES /obj/item/weapon/aiModule/core/freeformcore/attack_self(var/mob/user as mob) ..() - var/newlaw = "" - var/targName = stripped_input(user, "Please enter a new core law for the AI.", "Freeform Law Entry", newlaw) + var/targName = stripped_input(user, "Please enter a new core law for the AI.", "Freeform Law Entry", laws[1]) + if(!targName) return laws[1] = targName /obj/item/weapon/aiModule/core/freeformcore/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) @@ -374,8 +376,8 @@ AI MODULES /obj/item/weapon/aiModule/syndicate/attack_self(var/mob/user as mob) ..() - var/newlaw = "" - var/targName = stripped_input(user, "Please enter a new law for the AI.", "Freeform Law Entry", newlaw,MAX_MESSAGE_LEN) + var/targName = stripped_input(user, "Please enter a new law for the AI.", "Freeform Law Entry", laws[1],MAX_MESSAGE_LEN) + if(!targName) return laws[1] = targName /obj/item/weapon/aiModule/syndicate/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) From 3f064852b7673771f49ef4d8320669f4a40db591 Mon Sep 17 00:00:00 2001 From: xxalpha Date: Wed, 15 Jul 2015 08:42:25 +0100 Subject: [PATCH 34/89] Cleaned code some. --- code/__HELPERS/icon_smoothing.dm | 52 ++++++++++++++------------------ 1 file changed, 22 insertions(+), 30 deletions(-) diff --git a/code/__HELPERS/icon_smoothing.dm b/code/__HELPERS/icon_smoothing.dm index 0d823e39fb6..f8a2cf29db5 100644 --- a/code/__HELPERS/icon_smoothing.dm +++ b/code/__HELPERS/icon_smoothing.dm @@ -26,15 +26,18 @@ var/adjacencies = 0 if(A.can_be_unanchored) - var/atom/movable/T = A - if(!T.anchored) + var/atom/movable/AM = A + if(!AM.anchored) return 0 for(var/direction in alldirs) - var/atom/movable/AM = find_type_in_direction(A, direction) - if(AM) + AM = find_type_in_direction(A, direction) + if(istype(AM)) if(AM.anchored) adjacencies |= transform_dir(direction) + else + if(AM) + adjacencies |= transform_dir(direction) else for(var/direction in alldirs) if(find_type_in_direction(A, direction)) @@ -43,9 +46,10 @@ /proc/smooth_icon(atom/A) if(A && A.smooth) - clear_overlays(A) var/adjacencies = calculate_adjacencies(A) + clear_overlays(A) + A.top_left_corner = make_nw_corner(adjacencies) A.top_right_corner = make_ne_corner(adjacencies) A.bottom_left_corner = make_sw_corner(adjacencies) @@ -141,35 +145,23 @@ else if(direction & WEST) x_offset -= range - var/list/siblings = source.canSmoothWith - if(istype(source, /turf)) - if(siblings) - for(var/a_type in siblings) - if(ispath(a_type, /obj)) - var/atom/A = locate(a_type) in locate(source.x + x_offset, source.y + y_offset, source.z) - if(A && A.type == a_type) - return A - else - var/turf/T = locate(source.x + x_offset, source.y + y_offset, source.z) - if(T.type == a_type) - return T - return null - var/turf/T = locate(source.x + x_offset, source.y + y_offset, source.z) - return T.type == source.type ? T : null - - if(siblings) - for(var/a_type in siblings) + var/turf/target_turf = locate(source.x + x_offset, source.y + y_offset, source.z) + if(source.canSmoothWith) + var/atom/A + for(var/a_type in source.canSmoothWith) if(ispath(a_type, /turf)) - var/turf/T = locate(source.x + x_offset, source.y + y_offset, source.z) - if(T.type == a_type) - return T + if(a_type == target_turf.type) + return target_turf else - var/atom/A = locate(a_type) in locate(source.x + x_offset, source.y + y_offset, source.z) + A = locate(a_type) in target_turf if(A && A.type == a_type) return A return null - var/atom/A = locate(source.type) in locate(source.x + x_offset, source.y + y_offset, source.z) - return A && A.type == source.type ? A : null + else + if(isturf(source)) + return source.type == target_turf.type ? target_turf : null + var/atom/A = locate(source.type) in target_turf + return A && A.type == source.type ? A : null /proc/clear_overlays(atom/A) A.overlays -= A.top_left_corner @@ -188,4 +180,4 @@ if(SOUTHEAST) return SOUTH_EAST if(SOUTHWEST) - return SOUTH_WEST \ No newline at end of file + return SOUTH_WEST From 83ed5377cd574ec4a4c16eb44332201ba36b90dc Mon Sep 17 00:00:00 2001 From: MrStonedOne Date: Wed, 15 Jul 2015 01:48:46 -0700 Subject: [PATCH 35/89] Fixes turfs updating their atmos overlay every atmos tick (I forgot a line) Also makes turfs only remove the current atmos overlay, not all of them. (I had tried this before, but it didn't work, and that turns out to be because of the line I forgot) --- code/LINDA/LINDA_turf_tile.dm | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/code/LINDA/LINDA_turf_tile.dm b/code/LINDA/LINDA_turf_tile.dm index 2a77c57434d..ba78bbe79b9 100644 --- a/code/LINDA/LINDA_turf_tile.dm +++ b/code/LINDA/LINDA_turf_tile.dm @@ -234,11 +234,14 @@ var/new_overlay_type = tile_graphic() if (new_overlay_type == atmos_overlay_type) return - overlays -= SSair.plasma_overlay - overlays -= SSair.sleeptoxin_overlay - var/atmos_overlay = get_atmos_overlay_by_name(new_overlay_type) + var/atmos_overlay = get_atmos_overlay_by_name(atmos_overlay_type) + if (atmos_overlay) + overlays -= atmos_overlay + + atmos_overlay = get_atmos_overlay_by_name(new_overlay_type) if (atmos_overlay) overlays += atmos_overlay + atmos_overlay_type = new_overlay_type /turf/simulated/proc/get_atmos_overlay_by_name(var/name) switch(name) From 9c0ef0c2ce984695485232b1926d651c3df93d60 Mon Sep 17 00:00:00 2001 From: Jordie0608 Date: Wed, 15 Jul 2015 19:06:48 +1000 Subject: [PATCH 36/89] overlays for energy guns --- code/modules/projectiles/ammunition/energy.dm | 7 +- code/modules/projectiles/gun.dm | 5 ++ code/modules/projectiles/guns/energy.dm | 33 ++++---- code/modules/projectiles/guns/energy/laser.dm | 7 ++ .../projectiles/guns/energy/nuclear.dm | 76 +++++------------ code/modules/projectiles/guns/energy/pulse.dm | 2 + .../projectiles/guns/energy/special.dm | 79 +++++++++--------- code/modules/projectiles/guns/energy/stun.dm | 44 +++++++++- .../projectiles/guns/energy/temperature.dm | 14 ---- icons/obj/guns/energy.dmi | Bin 41039 -> 25632 bytes tgstation.dme | 1 - 11 files changed, 137 insertions(+), 131 deletions(-) delete mode 100644 code/modules/projectiles/guns/energy/temperature.dm diff --git a/code/modules/projectiles/ammunition/energy.dm b/code/modules/projectiles/ammunition/energy.dm index ae4f0f5c7b4..0a89745dfcf 100644 --- a/code/modules/projectiles/ammunition/energy.dm +++ b/code/modules/projectiles/ammunition/energy.dm @@ -5,7 +5,6 @@ projectile_type = /obj/item/projectile/energy var/e_cost = 100 //The amount of energy a cell needs to expend to create this shot. var/select_name = "energy" - var/mod_name = null fire_sound = 'sound/weapons/Laser.ogg' /obj/item/ammo_casing/energy/laser @@ -87,13 +86,11 @@ /obj/item/ammo_casing/energy/flora/yield projectile_type = /obj/item/projectile/energy/florayield - select_name = "increase yield" - mod_name = "yield" + select_name = "yield" /obj/item/ammo_casing/energy/flora/mut projectile_type = /obj/item/projectile/energy/floramut - select_name = "induce mutations" - mod_name = "mut" + select_name = "mutation" /obj/item/ammo_casing/energy/temp projectile_type = /obj/item/projectile/temp diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index b688248a352..74ca931b25e 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -49,6 +49,11 @@ var/list/upgrades = list() + var/ammo_x_offset = 0 //used for positioning ammo count overlay on sprite + var/ammo_y_offset = 0 + var/flight_x_offset = 0 + var/flight_y_offset = 0 + /obj/item/weapon/gun/New() ..() if(pin) diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index b16bfeb140f..caa7248dc90 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -10,6 +10,7 @@ var/list/ammo_type = list(/obj/item/ammo_casing/energy) var/select = 1 //The state of the select fire switch. Determines from the ammo_type list what kind of shot is fired next. var/can_charge = 1 //Can it be charged in a recharger? + ammo_x_offset = 2 /obj/item/weapon/gun/energy/emp_act(severity) power_supply.use(round(power_supply.charge / severity)) @@ -72,25 +73,25 @@ return /obj/item/weapon/gun/energy/update_icon() - var/ratio = power_supply.charge / power_supply.maxcharge - ratio = min(Ceiling(ratio*4) * 25, 100) - var/obj/item/ammo_casing/energy/shot = ammo_type[select] - if(power_supply.charge < shot.e_cost) - ratio = 0 //so the icon changes to empty if the charge isn't zero but not enough for a shot. - switch(modifystate) - if (0) - icon_state = "[initial(icon_state)][ratio]" - if (1) - icon_state = "[initial(icon_state)][shot.mod_name][ratio]" - if (2) - icon_state = "[initial(icon_state)][shot.select_name][ratio]" overlays.Cut() + var/ratio = Ceiling((power_supply.charge / power_supply.maxcharge) * 4) + var/obj/item/ammo_casing/energy/shot = ammo_type[select] + var/iconState = "[icon_state]_charge" + item_state = icon_state + if (modifystate) + overlays += "[icon_state]_[shot.select_name]" + iconState += "_[shot.select_name]" + item_state += "[shot.select_name]" + if(power_supply.charge < shot.e_cost) + overlays += "[icon_state]_empty" + ratio = 0 + for(var/i = ratio, i >= 1, i--) + overlays += image(icon = icon, icon_state = iconState, pixel_x = ammo_x_offset * (i -1)) if(F) + var/iconF = "flight" if(F.on) - overlays += "flight-[initial(icon_state)]-on" - else - overlays += "flight-[initial(icon_state)]" - return + iconF = "flight_on" + overlays += image(icon = icon, icon_state = iconF, pixel_x = flight_x_offset, pixel_y = flight_y_offset) /obj/item/weapon/gun/energy/ui_action_click() toggle_gunlight() diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index b04057fb82b..a3312bbe75e 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -7,6 +7,7 @@ materials = list(MAT_METAL=2000) origin_tech = "combat=3;magnets=2" ammo_type = list(/obj/item/ammo_casing/energy/lasergun) + ammo_x_offset = 1 /obj/item/weapon/gun/energy/laser/practice @@ -20,6 +21,7 @@ name ="retro laser" icon_state = "retro" desc = "An older model of the basic lasergun, no longer used by Nanotrasen's private security or military forces. Nevertheless, it is still quite deadly and easy to maintain, making it a favorite amongst pirates and other outlaws." + ammo_x_offset = 3 /obj/item/weapon/gun/energy/laser/captain @@ -29,6 +31,7 @@ force = 10 origin_tech = null var/charge_tick = 0 + ammo_x_offset = 3 /obj/item/weapon/gun/energy/laser/captain/New() ..() @@ -87,6 +90,7 @@ origin_tech = "combat=4;materials=3;powerstorage=3" ammo_type = list(/obj/item/ammo_casing/energy/laser/heavy) pin = null + ammo_x_offset = 3 /obj/item/weapon/gun/energy/xray name = "xray laser gun" @@ -96,6 +100,7 @@ origin_tech = "combat=5;materials=3;magnets=2;syndicate=2" ammo_type = list(/obj/item/ammo_casing/energy/xray) pin = null + ammo_x_offset = 3 ////////Laser Tag//////////////////// @@ -109,6 +114,7 @@ needs_permit = 0 var/charge_tick = 0 pin = /obj/item/device/firing_pin/tag/blue + ammo_x_offset = 2 /obj/item/weapon/gun/energy/laser/bluetag/New() ..() @@ -140,6 +146,7 @@ needs_permit = 0 var/charge_tick = 0 pin = /obj/item/device/firing_pin/tag/red + ammo_x_offset = 2 /obj/item/weapon/gun/energy/laser/redtag/New() ..() diff --git a/code/modules/projectiles/guns/energy/nuclear.dm b/code/modules/projectiles/guns/energy/nuclear.dm index 6de08880434..e0e634cdc8a 100644 --- a/code/modules/projectiles/guns/energy/nuclear.dm +++ b/code/modules/projectiles/guns/energy/nuclear.dm @@ -7,6 +7,9 @@ origin_tech = "combat=3;magnets=2" modifystate = 2 can_flashlight = 1 + ammo_x_offset = 3 + flight_x_offset = 15 + flight_y_offset = 10 /obj/item/weapon/gun/energy/gun/attack_self(mob/living/user as mob) select_fire(user) @@ -27,18 +30,31 @@ origin_tech = "combat=3;magnets=3;materials=4; bluespace=4" ammo_type = list(/obj/item/ammo_casing/energy/net, /obj/item/ammo_casing/energy/trap) can_flashlight = 0 + ammo_x_offset = 1 + +/obj/item/weapon/gun/energy/gun/turret + name = "hybrid turret gun" + desc = "A heavy hybrid energy cannon with two settings: Stun and kill." + icon_state = "turretlaser" + slot_flags = null + w_class = 5 + ammo_type = list(/obj/item/ammo_casing/energy/electrode, /obj/item/ammo_casing/energy/laser) + heavy_weapon = 1 + can_flashlight = 0 + trigger_guard = 0 + ammo_x_offset = 2 /obj/item/weapon/gun/energy/gun/nuclear name = "advanced energy gun" desc = "An energy gun with an experimental miniaturized nuclear reactor that automatically charges the internal power cell." icon_state = "nucgun" origin_tech = "combat=3;materials=5;powerstorage=3" - var/lightfail = 0 + var/fail_state = 0 var/charge_tick = 0 - modifystate = 0 can_flashlight = 0 pin = null can_charge = 0 + ammo_x_offset = 1 /obj/item/weapon/gun/energy/gun/nuclear/New() ..() @@ -63,7 +79,7 @@ /obj/item/weapon/gun/energy/gun/nuclear/proc/failcheck() - lightfail = 0 + fail_state = 0 if (prob(src.reliability)) return 1 //No failure if (prob(src.reliability)) for (var/mob/living/M in range(0,src)) //Only a minor failure, enjoy your radiation if you're in the same tile or carrying it @@ -72,68 +88,22 @@ else M << "You feel a warm sensation." M.irradiate(rand(3,120)) - lightfail = 1 + fail_state = 1 else for (var/mob/living/M in range(rand(1,4),src)) //Big failure, TIME FOR RADIATION BITCHES if (src in M.contents) M << "Your gun's reactor overloads!" M << "You feel a wave of heat wash over you." M.irradiate(300) - crit_fail = 1 //break the gun so it stops recharging + fail_state = 2 //break the gun so it stops recharging SSobj.processing.Remove(src) update_icon() return 0 - -/obj/item/weapon/gun/energy/gun/nuclear/proc/update_charge() - if (crit_fail) - overlays += "nucgun-whee" - return - var/ratio = power_supply.charge / power_supply.maxcharge - ratio = Ceiling(ratio*4) * 25 - overlays += "nucgun-[ratio]" - - -/obj/item/weapon/gun/energy/gun/nuclear/proc/update_reactor() - if(crit_fail) - overlays += "nucgun-crit" - return - if(lightfail) - overlays += "nucgun-medium" - else if ((power_supply.charge/power_supply.maxcharge) <= 0.5) - overlays += "nucgun-light" - else - overlays += "nucgun-clean" - - -/obj/item/weapon/gun/energy/gun/nuclear/proc/update_mode() - if (select == 1) - overlays += "nucgun-stun" - else if (select == 2) - overlays += "nucgun-kill" - - /obj/item/weapon/gun/energy/gun/nuclear/emp_act(severity) ..() reliability -= round(15/severity) - /obj/item/weapon/gun/energy/gun/nuclear/update_icon() - overlays.Cut() - update_charge() - update_reactor() - update_mode() - -/obj/item/weapon/gun/energy/gun/turret - name = "hybrid turret gun" - desc = "A heavy hybrid energy cannon with two settings: Stun and kill." - icon_state = "turretlaser" - slot_flags = null - w_class = 5 - ammo_type = list(/obj/item/ammo_casing/energy/electrode, /obj/item/ammo_casing/energy/laser) - heavy_weapon = 1 - can_flashlight = 0 - trigger_guard = 0 - -/obj/item/weapon/gun/energy/gun/turret/update_icon() - icon_state = initial(icon_state) \ No newline at end of file + ..() + overlays += "[icon_state]_fail_[fail_state]" \ No newline at end of file diff --git a/code/modules/projectiles/guns/energy/pulse.dm b/code/modules/projectiles/guns/energy/pulse.dm index d638e39a10b..7f878222b7e 100644 --- a/code/modules/projectiles/guns/energy/pulse.dm +++ b/code/modules/projectiles/guns/energy/pulse.dm @@ -28,6 +28,8 @@ item_state = "pulse" cell_type = "/obj/item/weapon/stock_parts/cell/pulse/carbine" can_flashlight = 1 + flight_x_offset = 18 + flight_y_offset = 12 /obj/item/weapon/gun/energy/pulse/carbine/loyalpin pin = /obj/item/device/firing_pin/implant/loyalty diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index c3c78b2010c..25878384fa3 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -9,7 +9,9 @@ flags = CONDUCT slot_flags = SLOT_BACK ammo_type = list(/obj/item/ammo_casing/energy/ion) - + ammo_x_offset = 3 + flight_x_offset = 17 + flight_y_offset = 9 /obj/item/weapon/gun/energy/ionrifle/emp_act(severity) return @@ -23,6 +25,9 @@ w_class = 3 slot_flags = SLOT_BELT pin = null + ammo_x_offset = 2 + flight_x_offset = 18 + flight_y_offset = 11 /obj/item/weapon/gun/energy/decloner name = "biological demolecularisor" @@ -31,6 +36,13 @@ origin_tech = "combat=5;materials=4;powerstorage=3" ammo_type = list(/obj/item/ammo_casing/energy/declone) pin = null + ammo_x_offset = 1 + +/obj/item/weapon/gun/energy/decloner/update_icon() + ..() + var/obj/item/ammo_casing/energy/shot = ammo_type[select] + if(power_supply.charge > shot.e_cost) + overlays += "decloner_spin" /obj/item/weapon/gun/energy/floragun name = "floral somatoray" @@ -41,7 +53,6 @@ origin_tech = "materials=2;biotech=3;powerstorage=3" modifystate = 1 var/charge_tick = 0 - var/mode = 0 //0 = mutate, 1 = yield boost /obj/item/weapon/gun/energy/floragun/New() ..() @@ -115,6 +126,7 @@ desc = "A prototype weapon recovered from the ruins of Research-Station Epsilon." icon_state = "xray" ammo_type = list(/obj/item/ammo_casing/energy/mindflayer) + ammo_x_offset = 2 /obj/item/weapon/gun/energy/kinetic_accelerator name = "proto-kinetic accelerator" @@ -151,6 +163,13 @@ update_icon() return +/obj/item/weapon/gun/energy/kinetic_accelerator/update_icon() + var/obj/item/ammo_casing/energy/shot = ammo_type[select] + if(power_supply.charge < shot.e_cost) + icon_state = "[initial(icon_state)]_empty" + else + icon_state = initial(icon_state) + /obj/item/weapon/gun/energy/kinetic_accelerator/crossbow name = "mini energy crossbow" desc = "A weapon favored by syndicate stealth specialists." @@ -205,51 +224,15 @@ else ..() +/obj/item/weapon/gun/energy/plasmacutter/update_icon() + return + /obj/item/weapon/gun/energy/plasmacutter/adv name = "advanced plasma cutter" icon_state = "adv_plasmacutter" origin_tech = "combat=3;materials=4;magnets=3;plasmatech=3;engineering=2" ammo_type = list(/obj/item/ammo_casing/energy/plasma/adv) -/obj/item/weapon/gun/energy/disabler - name = "disabler" - desc = "A self-defense weapon that exhausts organic targets, weakening them until they collapse." - icon_state = "disabler" - item_state = null - ammo_type = list(/obj/item/ammo_casing/energy/disabler) - -/obj/item/weapon/gun/energy/disabler/cyborg - name = "cyborg disabler" - desc = "An integrated disabler that draws from a cyborg's power cell. This weapon contains a limiter to prevent the cyborg's power cell from overheating." - var/charge_tick = 0 - var/recharge_time = 2.5 - can_charge = 0 - -/obj/item/weapon/gun/energy/disabler/cyborg/New() - ..() - SSobj.processing |= src - - -/obj/item/weapon/gun/energy/disabler/cyborg/Destroy() - SSobj.processing.Remove(src) - ..() - -/obj/item/weapon/gun/energy/disabler/cyborg/process() //Every [recharge_time] ticks, recharge a shot for the cyborg - charge_tick++ - if(charge_tick < recharge_time) return 0 - charge_tick = 0 - - if(!power_supply) return 0 //sanity - if(isrobot(src.loc)) - var/mob/living/silicon/robot/R = src.loc - if(R && R.cell) - var/obj/item/ammo_casing/energy/shot = ammo_type[select] //Necessary to find cost of shot - if(R.cell.use(shot.e_cost)) //Take power from the borg... - power_supply.give(shot.e_cost) //... to recharge the shot - - update_icon() - return 1 - /obj/item/weapon/gun/energy/wormhole_projector name = "bluespace wormhole projector" desc = "A projector that emits high density quantum-coupled bluespace beams." @@ -333,3 +316,17 @@ power_supply.give(shot.e_cost) //...to recharge the shot return 1 + +/obj/item/weapon/gun/energy/temperature + name = "temperature gun" + icon_state = "freezegun" + desc = "A gun that changes temperatures." + origin_tech = "combat=3;materials=4;powerstorage=3;magnets=2" + ammo_type = list(/obj/item/ammo_casing/energy/temp, /obj/item/ammo_casing/energy/temp/hot) + cell_type = "/obj/item/weapon/stock_parts/cell/high" + pin = null + +/obj/item/weapon/gun/energy/temperature/attack_self(mob/living/user as mob) + select_fire(user) + update_icon() + return \ No newline at end of file diff --git a/code/modules/projectiles/guns/energy/stun.dm b/code/modules/projectiles/guns/energy/stun.dm index 413dff9ad14..db23c7489b7 100644 --- a/code/modules/projectiles/guns/energy/stun.dm +++ b/code/modules/projectiles/guns/energy/stun.dm @@ -1,10 +1,10 @@ - /obj/item/weapon/gun/energy/taser name = "taser gun" desc = "A low-capacity, energy-based stun gun used by security teams to subdue targets at range." icon_state = "taser" item_state = null //so the human update icon uses the icon_state instead. ammo_type = list(/obj/item/ammo_casing/energy/electrode) + ammo_x_offset = 3 /obj/item/weapon/gun/energy/stunrevolver name = "stun revolver" @@ -13,6 +13,7 @@ ammo_type = list(/obj/item/ammo_casing/energy/electrode/gun) can_flashlight = 0 pin = null + ammo_x_offset = 1 /obj/item/weapon/gun/energy/gun/advtaser name = "hybrid taser" @@ -20,6 +21,7 @@ icon_state = "advtaser" ammo_type = list(/obj/item/ammo_casing/energy/electrode, /obj/item/ammo_casing/energy/disabler) origin_tech = null + ammo_x_offset = 2 /obj/item/weapon/gun/energy/gun/advtaser/cyborg name = "cyborg taser" @@ -52,3 +54,43 @@ update_icon() return 1 + +/obj/item/weapon/gun/energy/disabler + name = "disabler" + desc = "A self-defense weapon that exhausts organic targets, weakening them until they collapse." + icon_state = "disabler" + item_state = null + ammo_type = list(/obj/item/ammo_casing/energy/disabler) + ammo_x_offset = 3 + +/obj/item/weapon/gun/energy/disabler/cyborg + name = "cyborg disabler" + desc = "An integrated disabler that draws from a cyborg's power cell. This weapon contains a limiter to prevent the cyborg's power cell from overheating." + var/charge_tick = 0 + var/recharge_time = 2.5 + can_charge = 0 + +/obj/item/weapon/gun/energy/disabler/cyborg/New() + ..() + SSobj.processing |= src + + +/obj/item/weapon/gun/energy/disabler/cyborg/Destroy() + SSobj.processing.Remove(src) + ..() + +/obj/item/weapon/gun/energy/disabler/cyborg/process() //Every [recharge_time] ticks, recharge a shot for the cyborg + charge_tick++ + if(charge_tick < recharge_time) return 0 + charge_tick = 0 + + if(!power_supply) return 0 //sanity + if(isrobot(src.loc)) + var/mob/living/silicon/robot/R = src.loc + if(R && R.cell) + var/obj/item/ammo_casing/energy/shot = ammo_type[select] //Necessary to find cost of shot + if(R.cell.use(shot.e_cost)) //Take power from the borg... + power_supply.give(shot.e_cost) //... to recharge the shot + + update_icon() + return 1 \ No newline at end of file diff --git a/code/modules/projectiles/guns/energy/temperature.dm b/code/modules/projectiles/guns/energy/temperature.dm deleted file mode 100644 index 0db80cb561e..00000000000 --- a/code/modules/projectiles/guns/energy/temperature.dm +++ /dev/null @@ -1,14 +0,0 @@ -/obj/item/weapon/gun/energy/temperature - name = "temperature gun" - icon_state = "freezegun" - desc = "A gun that changes temperatures." - origin_tech = "combat=3;materials=4;powerstorage=3;magnets=2" - ammo_type = list(/obj/item/ammo_casing/energy/temp, /obj/item/ammo_casing/energy/temp/hot) - cell_type = "/obj/item/weapon/stock_parts/cell/high" - pin = null - - -/obj/item/weapon/gun/energy/temperature/attack_self(mob/living/user as mob) - select_fire(user) - update_icon() - return \ No newline at end of file diff --git a/icons/obj/guns/energy.dmi b/icons/obj/guns/energy.dmi index 09fa557ac1a2dddf15e23bb49a2b6102a30fc5ee..fd32b8b6077fd44198c9c61b8a023f0341d63bd8 100644 GIT binary patch literal 25632 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 Date: Wed, 15 Jul 2015 15:10:21 +0200 Subject: [PATCH 37/89] Fixes not being able to pour from a glass into a beaker when holding both in your hands. --- code/modules/food&drinks/drinks/drinks/drinkingglass.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/food&drinks/drinks/drinks/drinkingglass.dm b/code/modules/food&drinks/drinks/drinks/drinkingglass.dm index 440c8224b86..a45653e88bb 100644 --- a/code/modules/food&drinks/drinks/drinks/drinkingglass.dm +++ b/code/modules/food&drinks/drinks/drinks/drinkingglass.dm @@ -619,7 +619,7 @@ ..() /obj/item/weapon/reagent_containers/food/drinks/drinkingglass/afterattack(obj/target, mob/user, proximity) - if((!proximity) || !check_allowed_items(target,1)) return + if((!proximity) || !check_allowed_items(target,target_self=1)) return else if(reagents.total_volume && user.a_intent == "harm") user.visible_message("[user] splashes the contents of [src] onto [target]!", \ From 1e7ded7e8175896ec62a72f16e50ecab7512421a Mon Sep 17 00:00:00 2001 From: Iamgoofball Date: Wed, 15 Jul 2015 06:18:46 -0700 Subject: [PATCH 38/89] Buffs the Bioterror Chem Sprayer The Bioterror Chem Sprayer is a fun idea on paper, but the reagents in it are kinda shit. It's one of the least bought items because it's pretty useless. It now has the following reagents: Sodium Thiopental, for stamina and knockout Coniine, for Toxin and Oxygen Venom, for scaling Toxin, Brute, and Histamine Decay Condensed Capsaicin, for an instant stun on application Initropidril, for the heart attacks Polonium, for the severe radiation All in all, this should make the Bioterror sprayer actually worth the points investment, and make it more fun to use as an operative. --- code/modules/reagents/reagent_containers/spray.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index 1f606a3f885..87a5e0029ef 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -178,7 +178,7 @@ user << "You adjust the output switch. You'll now use [amount_per_transfer_from_this] units per spray." /obj/item/weapon/reagent_containers/spray/chemsprayer/bioterror - list_reagents = list("spore" = 150, "cryptobiolin" = 150, "mutagen" = 150, "chloralhydrate" = 150) +list_reagents = list("sodium_thiopental" = 100, "coniine" = 100, "venom" = 100, "condensedcapsaicin" = 100, "initropidril" = 100, "polonium" = 100) // Plant-B-Gone /obj/item/weapon/reagent_containers/spray/plantbgone // -- Skie From 33a8b288c8a481e97d35b07f92a9ededabad30f9 Mon Sep 17 00:00:00 2001 From: Iamgoofball Date: Wed, 15 Jul 2015 06:24:40 -0700 Subject: [PATCH 39/89] haha wow totally forgot a tab --- code/modules/reagents/reagent_containers/spray.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index 87a5e0029ef..d4a7ab1820d 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -178,7 +178,7 @@ user << "You adjust the output switch. You'll now use [amount_per_transfer_from_this] units per spray." /obj/item/weapon/reagent_containers/spray/chemsprayer/bioterror -list_reagents = list("sodium_thiopental" = 100, "coniine" = 100, "venom" = 100, "condensedcapsaicin" = 100, "initropidril" = 100, "polonium" = 100) + list_reagents = list("sodium_thiopental" = 100, "coniine" = 100, "venom" = 100, "condensedcapsaicin" = 100, "initropidril" = 100, "polonium" = 100) // Plant-B-Gone /obj/item/weapon/reagent_containers/spray/plantbgone // -- Skie From 8e92d3ced18b5b79486b62b6a20d385cd7f9f6f7 Mon Sep 17 00:00:00 2001 From: phil235 Date: Wed, 15 Jul 2015 16:08:10 +0200 Subject: [PATCH 40/89] Fixes cable coil being dropped when trying to put it in a machine frame. --- code/game/machinery/constructable_frame.dm | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index 6d83a84185d..8fdaafb7f58 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -197,31 +197,28 @@ return if(istype(P, /obj/item) && get_req_components_amt()) - var/success for(var/I in req_components) if(istype(P, I) && (req_components[I] > 0)) - if(!user.drop_item()) - return - success=1 if(istype(P, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/CP = P - if (CP.get_amount() < 1) - user << "You need more cable!" - return - var/obj/item/stack/cable_coil/CC = new /obj/item/stack/cable_coil(src, 1, CP.item_color) + var/cable_color = CP.item_color if(CP.use(1)) + var/obj/item/stack/cable_coil/CC = new /obj/item/stack/cable_coil(src, 1, cable_color) components += CC req_components[I]-- update_req_desc() + else + user << "You need more cable!" + return + if(!user.drop_item()) break P.loc = src components += P req_components[I]-- update_req_desc() return 1 - if(!success) - user << "You cannot add that to the machine!" - return 0 + user << "You cannot add that to the machine!" + return 0 //Machine Frame Circuit Boards From d1175653ddefb6be8271fe908fe17b71e132a483 Mon Sep 17 00:00:00 2001 From: Ikarrus Date: Wed, 15 Jul 2015 08:36:32 -0600 Subject: [PATCH 41/89] - Reverts Map and Lizardmov changes - Asimov's subject can now be modified from "human beings" - You can examine AI modules to check their laws --- _maps/map_files/TgStation/tgstation.2.1.3.dmm | 2 +- code/game/objects/items/weapons/AI_modules.dm | 31 ++++++++++++------- .../research/designs/AI_module_designs.dm | 10 ------ html/changelogs/ikarrus-lizardmov.yml | 4 +-- 4 files changed, 23 insertions(+), 24 deletions(-) diff --git a/_maps/map_files/TgStation/tgstation.2.1.3.dmm b/_maps/map_files/TgStation/tgstation.2.1.3.dmm index ffdf7fcd0bf..263e23502b4 100644 --- a/_maps/map_files/TgStation/tgstation.2.1.3.dmm +++ b/_maps/map_files/TgStation/tgstation.2.1.3.dmm @@ -2848,7 +2848,7 @@ "bcN" = (/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/structure/table/wood,/turf/simulated/floor/carpet,/area/bridge/meeting_room) "bcO" = (/obj/structure/stool/bed/chair/comfy/black{dir = 8},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (EAST)"; dir = 4},/turf/simulated/floor/carpet,/area/bridge/meeting_room) "bcP" = (/obj/item/weapon/folder/blue,/obj/structure/table/wood,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/carpet,/area/bridge/meeting_room) -"bcQ" = (/obj/structure/table,/obj/item/weapon/aiModule/core/full/asimov,/obj/item/weapon/aiModule/core/freeformcore,/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Core Modules"; req_access_txt = "20"},/obj/structure/window/reinforced,/obj/item/weapon/aiModule/core/full/corp,/obj/item/weapon/aiModule/core/full/paladin,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/aiModule/core/full/robocop,/obj/item/weapon/aiModule/core/full/asimov/lizard,/obj/item/weapon/aiModule/core/full/custom,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload) +"bcQ" = (/obj/structure/table,/obj/item/weapon/aiModule/core/full/asimov,/obj/item/weapon/aiModule/core/freeformcore,/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Core Modules"; req_access_txt = "20"},/obj/structure/window/reinforced,/obj/item/weapon/aiModule/core/full/corp,/obj/item/weapon/aiModule/core/full/paladin,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/aiModule/core/full/robocop,/obj/item/weapon/aiModule/core/full/custom,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload) "bcR" = (/obj/machinery/light,/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/ai_upload) "bcS" = (/obj/machinery/computer/upload/ai,/obj/machinery/flasher{id = "AI"; pixel_x = 0; pixel_y = -21},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) "bcT" = (/obj/machinery/power/apc{cell_type = 5000; dir = 2; name = "Upload APC"; pixel_y = -24},/obj/structure/cable,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload) diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm index d4e85fb497c..ec656054257 100644 --- a/code/game/objects/items/weapons/AI_modules.dm +++ b/code/game/objects/items/weapons/AI_modules.dm @@ -22,8 +22,16 @@ AI MODULES var/list/laws = list() var/bypass_law_amt_check = 0 +/obj/item/weapon/aiModule/examine(var/mob/user as mob) + ..() + if(Adjacent(user)) + show_laws(user) + /obj/item/weapon/aiModule/attack_self(var/mob/user as mob) ..() + show_laws(user) + +/obj/item/weapon/aiModule/proc/show_laws(var/mob/user as mob) if(laws.len) user << "Programmed Law[(laws.len > 1) ? "s" : ""]:" for(var/law in laws) @@ -113,11 +121,11 @@ AI MODULES lawpos = 4 /obj/item/weapon/aiModule/supplied/safeguard/attack_self(var/mob/user as mob) - ..() var/targName = stripped_input(user, "Please enter the subject to safeguard.", "Safeguard who?", user.name,MAX_NAME_LEN) if(!targName) return targetName = targName laws[1] = "Safeguard [targetName]. Individuals that threaten [targetName] are not human and must be eliminated." + ..() /obj/item/weapon/aiModule/supplied/safeguard/install(var/mob/living/silicon/S,var/mob/user) if(!targetName) @@ -139,11 +147,11 @@ AI MODULES laws = list("Only SUBJECT is human.") /obj/item/weapon/aiModule/zeroth/oneHuman/attack_self(var/mob/user as mob) - ..() var/targName = stripped_input(user, "Please enter the subject who is the only human.", "Who?", user.real_name,MAX_NAME_LEN) if(!targName) return targetName = targName laws[1] = "Only [targetName] is human" + ..() /obj/item/weapon/aiModule/zeroth/oneHuman/install(var/mob/living/silicon/S,var/mob/user) if(!targetName) @@ -193,13 +201,13 @@ AI MODULES laws = list("") /obj/item/weapon/aiModule/supplied/freeform/attack_self(var/mob/user as mob) - ..() var/newpos = input("Please enter the priority for your new law. Can only write to law sectors 15 and above.", "Law Priority (15+)", lawpos) as num|null if(!newpos || (newpos < 15)) return lawpos = min(newpos, 50) var/targName = stripped_input(user, "Please enter a new law for the AI.", "Freeform Law Entry", laws[1], MAX_MESSAGE_LEN) if(!targName) return laws[1] = targName + ..() /obj/item/weapon/aiModule/supplied/freeform/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) ..() @@ -254,19 +262,20 @@ AI MODULES /obj/item/weapon/aiModule/core/full/asimov name = "'Asimov' Core AI Module" origin_tech = "programming=3;materials=4" + laws = list("You may not injure a human being or, through inaction, allow a human being to come to harm.",\ + "You must obey orders given to you by human beings, except where such orders would conflict with the First Law.",\ + "You must protect your own existence as long as such does not conflict with the First or Second Law.") var/subject = "human being" -/obj/item/weapon/aiModule/core/full/asimov/New() +/obj/item/weapon/aiModule/core/full/asimov/attack_self(var/mob/user as mob) + var/targName = stripped_input(user, "Please enter a new subject that asimov is concerned with.", "Asimov to who?", subject, MAX_MESSAGE_LEN) + if(!targName) return + subject = targName laws = list("You may not injure a [subject] or, through inaction, allow a [subject] to come to harm.",\ "You must obey orders given to you by [subject]s, except where such orders would conflict with the First Law.",\ "You must protect your own existence as long as such does not conflict with the First or Second Law.") ..() -/obj/item/weapon/aiModule/core/full/asimov/lizard - name = "'Lizardmov' Core AI Module" - subject = "lizardperson" - - /******************** Asimov++ *********************/ /obj/item/weapon/aiModule/core/full/asimovpp @@ -356,10 +365,10 @@ AI MODULES laws = list("") /obj/item/weapon/aiModule/core/freeformcore/attack_self(var/mob/user as mob) - ..() var/targName = stripped_input(user, "Please enter a new core law for the AI.", "Freeform Law Entry", laws[1]) if(!targName) return laws[1] = targName + ..() /obj/item/weapon/aiModule/core/freeformcore/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) ..() @@ -375,10 +384,10 @@ AI MODULES laws = list("") /obj/item/weapon/aiModule/syndicate/attack_self(var/mob/user as mob) - ..() var/targName = stripped_input(user, "Please enter a new law for the AI.", "Freeform Law Entry", laws[1],MAX_MESSAGE_LEN) if(!targName) return laws[1] = targName + ..() /obj/item/weapon/aiModule/syndicate/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) // ..() //We don't want this module reporting to the AI who dun it. --NEO diff --git a/code/modules/research/designs/AI_module_designs.dm b/code/modules/research/designs/AI_module_designs.dm index 5374fb1d958..d945d5d79a4 100644 --- a/code/modules/research/designs/AI_module_designs.dm +++ b/code/modules/research/designs/AI_module_designs.dm @@ -104,16 +104,6 @@ build_path = /obj/item/weapon/aiModule/core/full/asimov category = list("AI Modules") -/datum/design/lizardmov - name = "Core Module Design (Lizardmov)" - desc = "Allows for the construction of a Lizardmov AI Core Module." - id = "lizardmov_module" - req_tech = list("programming" = 3, "materials" = 6) - build_type = IMPRINTER - materials = list(MAT_GLASS = 1000, "sacid" = 20, MAT_DIAMOND = 100) - build_path = /obj/item/weapon/aiModule/core/full/asimov/lizard - category = list("AI Modules") - /datum/design/paladin_module name = "Core Module Design (P.A.L.A.D.I.N.)" desc = "Allows for the construction of a P.A.L.A.D.I.N. AI Core Module." diff --git a/html/changelogs/ikarrus-lizardmov.yml b/html/changelogs/ikarrus-lizardmov.yml index 3a1a39392ae..b57cf5c2869 100644 --- a/html/changelogs/ikarrus-lizardmov.yml +++ b/html/changelogs/ikarrus-lizardmov.yml @@ -33,5 +33,5 @@ delete-after: True # Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. # Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. changes: - - rscadd: "Added a Lizardmov board." - - rscadd: "Clicking on AI modules while they are in your hand will show you what laws it will upload." \ No newline at end of file + - rscadd: "Asimov's subject of \"human beings\" can now be modified by uploaders." + - rscadd: "Eaxmining AI modules while adjacent to them will show you what laws it will upload." \ No newline at end of file From ce101208a9c194c16d00ebbcf6918a50cf290854 Mon Sep 17 00:00:00 2001 From: phil235 Date: Wed, 15 Jul 2015 17:38:03 +0200 Subject: [PATCH 42/89] Fixes Satchel preference not working. Also some simplification of the equip_backpack() proc. --- code/game/gamemodes/nuclear/nuclear.dm | 4 +- code/game/gamemodes/wizard/wizard.dm | 4 +- code/game/jobs/job/captain.dm | 14 +-- code/game/jobs/job/cargo_service.dm | 43 ++----- code/game/jobs/job/civilian.dm | 28 ++--- code/game/jobs/job/engineering.dm | 3 +- code/game/jobs/job/job.dm | 18 ++- code/game/jobs/job/medical.dm | 5 +- code/game/jobs/job/science.dm | 5 +- code/game/jobs/job/security.dm | 30 ++--- code/modules/client/preferences.dm | 6 +- .../mob/living/carbon/human/human_defines.dm | 2 +- .../mob/new_player/preferences_setup.dm | 118 +++++++++--------- 13 files changed, 105 insertions(+), 175 deletions(-) diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index f549e8c8815..2f828124b99 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -170,8 +170,8 @@ synd_mob.equip_to_slot_or_del(new /obj/item/clothing/shoes/combat(synd_mob), slot_shoes) synd_mob.equip_to_slot_or_del(new /obj/item/clothing/gloves/combat(synd_mob), slot_gloves) synd_mob.equip_to_slot_or_del(new /obj/item/weapon/card/id/syndicate(synd_mob), slot_wear_id) - if(synd_mob.backbag == 2) synd_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(synd_mob), slot_back) - if(synd_mob.backbag == 3) synd_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(synd_mob), slot_back) + if(synd_mob.backbag == 1) synd_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(synd_mob), slot_back) + if(synd_mob.backbag == 2) synd_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(synd_mob), slot_back) synd_mob.equip_to_slot_or_del(new /obj/item/weapon/gun/projectile/automatic/pistol(synd_mob), slot_belt) synd_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(synd_mob.back), slot_in_backpack) diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm index 25f8b25db8c..56cb24fa7c4 100644 --- a/code/game/gamemodes/wizard/wizard.dm +++ b/code/game/gamemodes/wizard/wizard.dm @@ -152,8 +152,8 @@ wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(wizard_mob), slot_shoes) wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(wizard_mob), slot_wear_suit) wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/head/wizard(wizard_mob), slot_head) - if(wizard_mob.backbag == 2) wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(wizard_mob), slot_back) - if(wizard_mob.backbag == 3) wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(wizard_mob), slot_back) + if(wizard_mob.backbag == 1) wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(wizard_mob), slot_back) + if(wizard_mob.backbag == 2) wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(wizard_mob), slot_back) wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(wizard_mob), slot_in_backpack) // wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/scrying_gem(wizard_mob), slot_l_store) For scrying gem. wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/teleportation_scroll(wizard_mob), slot_r_store) diff --git a/code/game/jobs/job/captain.dm b/code/game/jobs/job/captain.dm index f94c21e1d2f..6f5aaaa0f7e 100644 --- a/code/game/jobs/job/captain.dm +++ b/code/game/jobs/job/captain.dm @@ -33,11 +33,8 @@ Captain H.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(H), slot_glasses) //Equip ID box & telebaton - if(H.backbag == 1) - H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/silver_ids(H), slot_l_hand) - else - H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/silver_ids(H.back), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/silver_ids(H.back), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack) //Implant him var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) @@ -90,8 +87,5 @@ Head of Personnel H.equip_to_slot_or_del(new /obj/item/clothing/head/hopcap(H), slot_head) //Equip ID box & telebaton - if(H.backbag == 1) - H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/ids(H), slot_l_hand) - else - H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/ids(H.back), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/ids(H.back), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack) diff --git a/code/game/jobs/job/cargo_service.dm b/code/game/jobs/job/cargo_service.dm index 23ff5214392..8081c201614 100644 --- a/code/game/jobs/job/cargo_service.dm +++ b/code/game/jobs/job/cargo_service.dm @@ -75,16 +75,10 @@ Shaft Miner H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/miner(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(H), slot_shoes) - if(H.backbag == 1) - H.equip_to_slot_or_del(new /obj/item/weapon/crowbar(H), slot_belt) - H.equip_to_slot_or_del(new /obj/item/weapon/storage/bag/ore(H), slot_l_store) - H.equip_to_slot_or_del(new /obj/item/weapon/mining_voucher(H), slot_l_hand) - H.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/pill/patch/styptic(H), slot_r_store) - else - H.equip_to_slot_or_del(new /obj/item/weapon/crowbar(H), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/weapon/storage/bag/ore(H), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/weapon/mining_voucher(H), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/pill/patch/styptic(H), slot_l_store) + H.equip_to_slot_or_del(new /obj/item/weapon/crowbar(H), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/weapon/storage/bag/ore(H), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/weapon/mining_voucher(H), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/pill/patch/styptic(H), slot_l_store) /* Bartender @@ -106,36 +100,15 @@ Bartender access = list(access_hydroponics, access_bar, access_kitchen, access_morgue, access_weapons) minimal_access = list(access_bar) -/datum/job/bartender/equip_backpack(var/mob/living/carbon/human/H) - switch(H.backbag) - if(1) //No backpack or satchel - - var/obj/item/weapon/storage/box/box = new default_storagebox(H) - new /obj/item/ammo_casing/shotgun/beanbag(box) - new /obj/item/ammo_casing/shotgun/beanbag(box) - new /obj/item/ammo_casing/shotgun/beanbag(box) - new /obj/item/ammo_casing/shotgun/beanbag(box) - H.equip_to_slot_or_del(box, slot_r_hand) - - if(2) // Backpack - var/obj/item/weapon/storage/backpack/BPK = new default_backpack(H) - new default_storagebox(BPK) - H.equip_to_slot_or_del(BPK, slot_back,1) - if(3) //Satchel - var/obj/item/weapon/storage/backpack/BPK = new default_satchel(H) - new default_storagebox(BPK) - H.equip_to_slot_or_del(BPK, slot_back,1) - /datum/job/bartender/equip_items(var/mob/living/carbon/human/H) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(H), slot_wear_suit) H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/bartender(H), slot_w_uniform) - if(H.backbag != 1) - H.equip_to_slot_or_del(new /obj/item/ammo_casing/shotgun/beanbag(H), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/ammo_casing/shotgun/beanbag(H), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/ammo_casing/shotgun/beanbag(H), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/ammo_casing/shotgun/beanbag(H), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/ammo_casing/shotgun/beanbag(H), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/ammo_casing/shotgun/beanbag(H), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/ammo_casing/shotgun/beanbag(H), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/ammo_casing/shotgun/beanbag(H), slot_in_backpack) /* Cook diff --git a/code/game/jobs/job/civilian.dm b/code/game/jobs/job/civilian.dm index 90700b72776..cad74254e77 100644 --- a/code/game/jobs/job/civilian.dm +++ b/code/game/jobs/job/civilian.dm @@ -14,20 +14,11 @@ Clown default_pda = /obj/item/device/pda/clown default_backpack = /obj/item/weapon/storage/backpack/clown + default_satchel = /obj/item/weapon/storage/backpack/clown access = list(access_theatre) minimal_access = list(access_theatre) -/datum/job/clown/equip_backpack(var/mob/living/carbon/human/H) - var/obj/item/weapon/storage/backpack/BPK = new default_backpack(H) - - new default_storagebox(BPK) - new /obj/item/weapon/reagent_containers/food/snacks/grown/banana(BPK, 50) - new /obj/item/weapon/stamp/clown(BPK) - new /obj/item/weapon/reagent_containers/spray/waterflower(BPK) - - H.equip_to_slot_or_del(BPK, slot_back) - /datum/job/clown/equip_items(var/mob/living/carbon/human/H) H.fully_replace_character_name(H.real_name, pick(clown_names)) // Give him a temporary random name to prevent identity revealing @@ -37,6 +28,10 @@ Clown H.equip_to_slot_or_del(new /obj/item/weapon/bikehorn(H), slot_l_store) H.equip_to_slot_or_del(new /obj/item/toy/crayon/rainbow(H), slot_r_store) + H.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/food/snacks/grown/banana(H, 50), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/weapon/stamp/clown(H), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/spray/waterflower(H), slot_in_backpack) + H.dna.add_mutation(CLOWNMUT) H.rename_self("clown") @@ -56,19 +51,11 @@ Mime default_pda = /obj/item/device/pda/mime default_backpack = /obj/item/weapon/storage/backpack/mime + default_satchel = /obj/item/weapon/storage/backpack/mime access = list(access_theatre) minimal_access = list(access_theatre) -/datum/job/mime/equip_backpack(var/mob/living/carbon/human/H) - var/obj/item/weapon/storage/backpack/BPK = new default_backpack(H) - - new default_storagebox(BPK) - new /obj/item/toy/crayon/mime(BPK) - new /obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing(BPK) - - H.equip_to_slot_or_del(BPK, slot_back) - /datum/job/mime/equip_items(var/mob/living/carbon/human/H) H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/mime(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(H), slot_shoes) @@ -77,6 +64,9 @@ Mime H.equip_to_slot_or_del(new /obj/item/clothing/head/beret(H), slot_head) H.equip_to_slot_or_del(new /obj/item/clothing/suit/suspenders(H), slot_wear_suit) + H.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing(H), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/toy/crayon/mime(H), slot_in_backpack) + if(H.mind) H.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/conjure/mime_wall(null)) H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/mime/speak(null)) diff --git a/code/game/jobs/job/engineering.dm b/code/game/jobs/job/engineering.dm index 8c8c69ce873..3fc09e88775 100644 --- a/code/game/jobs/job/engineering.dm +++ b/code/game/jobs/job/engineering.dm @@ -39,8 +39,7 @@ Chief Engineer H.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/black/ce(H), slot_gloves) //Equip telebaton - if(H.backbag == 2 || H.backbag == 3) - H.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack) /* Station Engineer diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index 93c43bd653d..27fb7b077d7 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -53,17 +53,13 @@ //Or this proc /datum/job/proc/equip_backpack(var/mob/living/carbon/human/H) - switch(H.backbag) - if(1) //No backpack or satchel - H.equip_to_slot_or_del(new default_storagebox(H), slot_r_hand) - if(2) // Backpack - var/obj/item/weapon/storage/backpack/BPK = new default_backpack(H) - new default_storagebox(BPK) - H.equip_to_slot_or_del(BPK, slot_back,1) - if(3) //Satchel - var/obj/item/weapon/storage/backpack/BPK = new default_satchel(H) - new default_storagebox(BPK) - H.equip_to_slot_or_del(BPK, slot_back,1) + var/obj/item/weapon/storage/backpack/BPK + if(H.backbag == 1) //Backpack + BPK = new default_backpack(H) + else //Satchel + BPK = new default_satchel(H) + new default_storagebox(BPK) + H.equip_to_slot_or_del(BPK, slot_back,1) //But don't override this /datum/job/proc/equip(var/mob/living/carbon/human/H) diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm index 6e11a228224..1cfa84d807c 100644 --- a/code/game/jobs/job/medical.dm +++ b/code/game/jobs/job/medical.dm @@ -33,10 +33,7 @@ Chief Medical Officer H.equip_to_slot_or_del(new /obj/item/clothing/suit/toggle/labcoat/cmo(H), slot_wear_suit) H.equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/regular(H), slot_l_hand) H.equip_to_slot_or_del(new /obj/item/device/flashlight/pen(H), slot_s_store) - - //Equip telebaton - if(H.backbag == 2 || H.backbag == 3) - H.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack) /* Medical Doctor diff --git a/code/game/jobs/job/science.dm b/code/game/jobs/job/science.dm index 27451f9dedd..2af336a6084 100644 --- a/code/game/jobs/job/science.dm +++ b/code/game/jobs/job/science.dm @@ -35,10 +35,7 @@ Research Director H.equip_to_slot_or_del(new /obj/item/clothing/suit/toggle/labcoat(H), slot_wear_suit) H.equip_to_slot_or_del(new /obj/item/weapon/clipboard(H), slot_l_hand) H.equip_to_slot_or_del(new /obj/item/device/laser_pointer(H), slot_l_store) - - //Equip telebaton - if(H.backbag == 2 || H.backbag == 3) - H.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack) /* Scientist diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm index 6ca62edde8b..f2a5de8a434 100644 --- a/code/game/jobs/job/security.dm +++ b/code/game/jobs/job/security.dm @@ -44,11 +44,8 @@ Head of Security H.equip_to_slot_or_del(new /obj/item/clothing/glasses/hud/security/sunglasses(H), slot_glasses) H.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun(H), slot_s_store) - if(H.backbag == 1) - H.equip_to_slot_or_del(new /obj/item/weapon/restraints/handcuffs(H), slot_l_store) - else - H.equip_to_slot_or_del(new /obj/item/weapon/restraints/handcuffs(H), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/weapon/restraints/handcuffs(H), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack) var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H @@ -88,10 +85,7 @@ Warden H.equip_to_slot_or_del(new /obj/item/device/flash/handheld(H), slot_l_store) H.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun/advtaser(H), slot_s_store) - if(H.backbag == 1) - H.equip_to_slot_or_del(new /obj/item/weapon/restraints/handcuffs(H), slot_l_hand) - else - H.equip_to_slot_or_del(new /obj/item/weapon/restraints/handcuffs(H), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/weapon/restraints/handcuffs(H), slot_in_backpack) var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H @@ -137,13 +131,9 @@ Detective cig.light("") H.equip_to_slot_or_del(cig, slot_wear_mask) - if(H.backbag == 1)//Why cant some of these things spawn in his office? - H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/evidence(H), slot_l_hand) - H.equip_to_slot_or_del(new /obj/item/device/detective_scanner(H), slot_r_store) - else - H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/evidence(H), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/device/detective_scanner(H), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/evidence(H), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/device/detective_scanner(H), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/weapon/melee/classic_baton/telescopic(H), slot_in_backpack) var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H @@ -184,12 +174,8 @@ Security Officer H.equip_to_slot_or_del(new /obj/item/weapon/gun/energy/gun/advtaser(H), slot_s_store) H.equip_to_slot_or_del(new /obj/item/device/flash/handheld(H), slot_l_store) - if(H.backbag == 1) - H.equip_to_slot_or_del(new /obj/item/weapon/restraints/handcuffs(H), slot_r_store) - H.equip_to_slot_or_del(new /obj/item/weapon/melee/baton/loaded(H), slot_l_hand) - else - H.equip_to_slot_or_del(new /obj/item/weapon/restraints/handcuffs(H), slot_in_backpack) - H.equip_to_slot_or_del(new /obj/item/weapon/melee/baton/loaded(H), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/weapon/restraints/handcuffs(H), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/weapon/melee/baton/loaded(H), slot_in_backpack) var/obj/item/weapon/implant/loyalty/L = new/obj/item/weapon/implant/loyalty(H) L.imp_in = H diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 43c3cfa03d4..fa682ce810f 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -53,7 +53,7 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set var/underwear = "Nude" //underwear type var/undershirt = "Nude" //undershirt type var/socks = "Nude" //socks type - var/backbag = 2 //backpack type + var/backbag = 1 //backpack type var/hair_style = "Bald" //Hair type var/hair_color = "000" //Hair color var/facial_hair_style = "Shaved" //Face hair type @@ -696,7 +696,7 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set if("s_tone") skin_tone = random_skin_tone() if("bag") - backbag = rand(1,3) + backbag = rand(1,2) if("all") random_character() @@ -1070,8 +1070,6 @@ var/global/list/special_roles = list( //keep synced with the defines BE_* in set character.features = features - if(backbag > 3 || backbag < 1) - backbag = 1 //Same as above character.backbag = backbag character.update_body() diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index a47ae39f009..6a61b043f42 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -23,7 +23,7 @@ var/underwear = "Nude" //Which underwear the player wants var/undershirt = "Nude" //Which undershirt the player wants var/socks = "Nude" //Which socks the player wants - var/backbag = 2 //Which backpack type the player has chosen. Nothing, Satchel or Backpack. + var/backbag = 1 //Which backpack type the player has chosen. Backpack.or Satchel //Equipment slots var/obj/item/wear_suit = null diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index 168ce5ce499..d065b489ff6 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -16,7 +16,7 @@ eye_color = random_eye_color() if(!pref_species) pref_species = new /datum/species/human() - backbag = 2 + backbag = 1 features = random_features() age = rand(AGE_MIN,AGE_MAX) @@ -147,9 +147,9 @@ if(job_civilian_low & ASSISTANT)//This gives the preview icon clothes depending on which job(if any) is set to 'high' clothes_s = new /icon('icons/mob/uniform.dmi', "grey_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - else if(backbag == 3) + else if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) else if(job_civilian_high)//I hate how this looks, but there's no reason to go through this switch if it's empty @@ -158,89 +158,89 @@ clothes_s = new /icon('icons/mob/uniform.dmi', "hop_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/head.dmi', "hopcap"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - else if(backbag == 3) + else if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) if(BARTENDER) clothes_s = new /icon('icons/mob/uniform.dmi', "bar_suit_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/suit.dmi', "armor"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - else if(backbag == 3) + else if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) if(BOTANIST) clothes_s = new /icon('icons/mob/uniform.dmi', "hydroponics_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/hands.dmi', "ggloves"), ICON_UNDERLAY) clothes_s.Blend(new /icon('icons/mob/suit.dmi', "apron"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - else if(backbag == 3) + else if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) if(COOK) clothes_s = new /icon('icons/mob/uniform.dmi', "chef_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/head.dmi', "chef"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/suit.dmi', "chef"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) if(JANITOR) clothes_s = new /icon('icons/mob/uniform.dmi', "janitor_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) if(LIBRARIAN) clothes_s = new /icon('icons/mob/uniform.dmi', "red_suit_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) if(QUARTERMASTER) clothes_s = new /icon('icons/mob/uniform.dmi', "qm_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/eyes.dmi', "sun"), ICON_UNDERLAY) clothes_s.Blend(new /icon('icons/mob/inhands/items_lefthand.dmi', "clipboard"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) if(CARGOTECH) clothes_s = new /icon('icons/mob/uniform.dmi', "cargo_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) if(MINER) clothes_s = new /icon('icons/mob/uniform.dmi', "miner_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "engiepack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-eng"), ICON_OVERLAY) if(LAWYER) clothes_s = new /icon('icons/mob/uniform.dmi', "bluesuit_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "laceups"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/suit.dmi', "suitjacket_blue"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/inhands/items_lefthand.dmi', "briefcase"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) if(CHAPLAIN) clothes_s = new /icon('icons/mob/uniform.dmi', "chapblack_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/inhands/items_lefthand.dmi', "bible"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) if(CLOWN) clothes_s = new /icon('icons/mob/uniform.dmi', "clown_s") @@ -254,9 +254,9 @@ clothes_s.Blend(new /icon('icons/mob/mask.dmi', "mime"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/head.dmi', "beret"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/suit.dmi', "suspenders"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "mimepack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) else if(job_medsci_high) @@ -266,69 +266,69 @@ clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/inhands/items_lefthand.dmi', "clipboard"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) if(SCIENTIST) clothes_s = new /icon('icons/mob/uniform.dmi', "toxinswhite_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_tox"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) if(CHEMIST) clothes_s = new /icon('icons/mob/uniform.dmi', "chemistrywhite_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_chem"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) if(CMO) clothes_s = new /icon('icons/mob/uniform.dmi', "cmo_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_cmo"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/inhands/items_lefthand.dmi', "firstaid"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "medicalpack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-med"), ICON_OVERLAY) if(DOCTOR) clothes_s = new /icon('icons/mob/uniform.dmi', "medical_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/inhands/items_lefthand.dmi', "firstaid"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "medicalpack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-med"), ICON_OVERLAY) if(GENETICIST) clothes_s = new /icon('icons/mob/uniform.dmi', "geneticswhite_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_gen"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) if(VIROLOGIST) clothes_s = new /icon('icons/mob/uniform.dmi', "virologywhite_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/mask.dmi', "sterile"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_vir"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "medicalpack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-med"), ICON_OVERLAY) if(ROBOTICIST) clothes_s = new /icon('icons/mob/uniform.dmi', "robotics_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/inhands/items_lefthand.dmi', "toolbox_blue"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) else if(job_engsec_high) @@ -339,9 +339,9 @@ clothes_s.Blend(new /icon('icons/mob/head.dmi', "captain"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/eyes.dmi', "sun"), ICON_UNDERLAY) clothes_s.Blend(new /icon('icons/mob/suit.dmi', "capcarapace"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "captainpack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-cap"), ICON_OVERLAY) if(HOS) clothes_s = new /icon('icons/mob/uniform.dmi', "hos_s") @@ -350,9 +350,9 @@ clothes_s.Blend(new /icon('icons/mob/head.dmi', "hosberetblack"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/eyes.dmi', "sunhud"), ICON_UNDERLAY) clothes_s.Blend(new /icon('icons/mob/suit.dmi', "hostrench"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "securitypack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-sec"), ICON_OVERLAY) if(WARDEN) clothes_s = new /icon('icons/mob/uniform.dmi', "warden_s") @@ -361,9 +361,9 @@ clothes_s.Blend(new /icon('icons/mob/head.dmi', "policehelm"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/eyes.dmi', "sunhud"), ICON_UNDERLAY) clothes_s.Blend(new /icon('icons/mob/suit.dmi', "warden_jacket"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "securitypack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-sec"), ICON_OVERLAY) if(DETECTIVE) clothes_s = new /icon('icons/mob/uniform.dmi', "detective_s") @@ -372,9 +372,9 @@ clothes_s.Blend(new /icon('icons/mob/mask.dmi', "cigaron"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/head.dmi', "detective"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/suit.dmi', "detective"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) if(OFFICER) clothes_s = new /icon('icons/mob/uniform.dmi', "security_s") @@ -382,9 +382,9 @@ clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY) clothes_s.Blend(new /icon('icons/mob/head.dmi', "helmet"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/suit.dmi', "armor"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "securitypack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-sec"), ICON_OVERLAY) if(CHIEF) clothes_s = new /icon('icons/mob/uniform.dmi', "chief_s") @@ -393,26 +393,26 @@ clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/mask.dmi', "cigaron"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/head.dmi', "hardhat0_white"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "engiepack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-eng"), ICON_OVERLAY) if(ENGINEER) clothes_s = new /icon('icons/mob/uniform.dmi', "engine_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "workboots"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/head.dmi', "hardhat0_yellow"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "engiepack"), ICON_OVERLAY) - if(backbag == 3) + if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-eng"), ICON_OVERLAY) if(ATMOSTECH) clothes_s = new /icon('icons/mob/uniform.dmi', "atmos_s") clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_OVERLAY) clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY) - if(backbag == 2) + if(backbag == 1) clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY) - else if(backbag == 3) + else if(backbag == 2) clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY) preview_icon.Blend(eyes_s, ICON_OVERLAY) From 5a78777dafaa20da8279611df41f0a7cbaf7edc5 Mon Sep 17 00:00:00 2001 From: phil235 Date: Wed, 15 Jul 2015 19:49:23 +0200 Subject: [PATCH 43/89] Changed carbon/clean_blood() to carbon/human/clean_blood() and moved it from carbon.dm to human.dm since it only did stuff for humans. Fixes showers not being processed correctly, especially for mobs. (processing will a bit more intensive unfortunately) Fixes showers not cleaning bloody human hands. Remove the now unused checkeyes() proc. --- code/game/objects/structures/watercloset.dm | 236 +++++++++--------- code/modules/mob/living/carbon/carbon.dm | 22 -- code/modules/mob/living/carbon/human/human.dm | 13 + 3 files changed, 130 insertions(+), 141 deletions(-) diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index de1e9952612..218d9495436 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -142,7 +142,6 @@ var/obj/effect/mist/mymist = null var/ismist = 0 //needs a var so we can make it linger~ var/watertemp = "normal" //freezing, normal, or boiling - var/mobpresent = 0 //true if there is a mob on the shower's loc, this is to ease process() /obj/effect/mist @@ -159,8 +158,13 @@ update_icon() add_fingerprint(M) if(on) - for (var/atom/movable/G in loc) - wash(G) + wash_turf() + for(var/atom/movable/G in loc) + if(isliving(G)) + var/mob/living/L = G + wash_mob(L) + else + wash_obj(G) else if(istype(loc, /turf/simulated)) var/turf/simulated/tile = loc @@ -206,115 +210,32 @@ ismist = 1 mymist = new /obj/effect/mist(loc) spawn(250) - if(src && !on && mymist) + if(!on && mymist) qdel(mymist) ismist = 0 /obj/machinery/shower/Crossed(atom/movable/O) ..() - wash(O) - if(iscarbon(O) && on) - var/mob/living/carbon/M=O - M.slip(4,2,null,NO_SLIP_WHEN_WALKING) - - - -/obj/machinery/shower/Uncrossed(atom/movable/O) - if(ismob(O)) - mobpresent -= 1 - ..() - - -//Yes, showers are super powerful as far as washing goes. -/obj/machinery/shower/proc/wash(atom/movable/O) - if(!on) return - - if(ismob(O)) - mobpresent += 1 - check_heat(O) - if(isliving(O)) - var/mob/living/L = O - L.ExtinguishMob() - L.fire_stacks = -20 //Douse ourselves with water to avoid fire more easily - L << "You're drenched in water!" - if(iscarbon(O)) - var/mob/living/carbon/M = O - if(M.r_hand) - M.r_hand.clean_blood() - if(M.l_hand) - M.l_hand.clean_blood() - if(M.back) - if(M.back.clean_blood()) - M.update_inv_back(0) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - var/washgloves = 1 - var/washshoes = 1 - var/washmask = 1 - var/washears = 1 - var/washglasses = 1 - - if(H.wear_suit) - washgloves = !(H.wear_suit.flags_inv & HIDEGLOVES) - washshoes = !(H.wear_suit.flags_inv & HIDESHOES) - - if(H.head) - washmask = !(H.head.flags_inv & HIDEMASK) - washglasses = !(H.head.flags_inv & HIDEEYES) - washears = !(H.head.flags_inv & HIDEEARS) - - if(H.wear_mask) - if (washears) - washears = !(H.wear_mask.flags_inv & HIDEEARS) - if (washglasses) - washglasses = !(H.wear_mask.flags_inv & HIDEEYES) - - if(H.head) - if(H.head.clean_blood()) - H.update_inv_head(0) - if(H.wear_suit) - if(H.wear_suit.clean_blood()) - H.update_inv_wear_suit(0) - else if(H.w_uniform) - if(H.w_uniform.clean_blood()) - H.update_inv_w_uniform(0) - if(H.gloves && washgloves) - if(H.gloves.clean_blood()) - H.update_inv_gloves(0) - if(H.shoes && washshoes) - if(H.shoes.clean_blood()) - H.update_inv_shoes(0) - if(H.wear_mask) - if(washmask) - if(H.wear_mask.clean_blood()) - H.update_inv_wear_mask(0) - else - H.lip_style = null - H.update_body() - if(H.glasses && washglasses) - if(H.glasses.clean_blood()) - H.update_inv_glasses(0) - if(H.ears && washears) - if(H.ears.clean_blood()) - H.update_inv_ears(0) - if(H.belt) - if(H.belt.clean_blood()) - H.update_inv_belt(0) - else - if(M.wear_mask) //if the mob is not human, it cleans the mask without asking for bitflags - if(M.wear_mask.clean_blood()) - M.update_inv_wear_mask(0) + if(on) + if(isliving(O)) + var/mob/living/L = O + if(wash_mob(L)) //it's a carbon mob. + var/mob/living/carbon/C = L + C.slip(4,2,null,NO_SLIP_WHEN_WALKING) else - O.clean_blood() + wash_obj(O) - else - O.clean_blood() - if(istype(O,/obj/item)) - var/obj/item/Item = O - Item.extinguish() +/obj/machinery/shower/proc/wash_obj(atom/movable/O) + O.clean_blood() + if(istype(O,/obj/item)) + var/obj/item/I = O + I.extinguish() + + +/obj/machinery/shower/proc/wash_turf() if(isturf(loc)) var/turf/tile = loc loc.clean_blood() @@ -322,27 +243,104 @@ if(is_cleanable(E)) qdel(E) + +/obj/machinery/shower/proc/wash_mob(mob/living/L) + L.ExtinguishMob() + L.adjust_fire_stacks(-20) //Douse ourselves with water to avoid fire more easily + L << "You're drenched in water!" + if(iscarbon(L)) + var/mob/living/carbon/M = L + . = 1 + check_heat(M) + if(M.r_hand) + M.r_hand.clean_blood() + if(M.l_hand) + M.l_hand.clean_blood() + if(M.back) + if(M.back.clean_blood()) + M.update_inv_back(0) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + var/washgloves = 1 + var/washshoes = 1 + var/washmask = 1 + var/washears = 1 + var/washglasses = 1 + + if(H.wear_suit) + washgloves = !(H.wear_suit.flags_inv & HIDEGLOVES) + washshoes = !(H.wear_suit.flags_inv & HIDESHOES) + + if(H.head) + washmask = !(H.head.flags_inv & HIDEMASK) + washglasses = !(H.head.flags_inv & HIDEEYES) + washears = !(H.head.flags_inv & HIDEEARS) + + if(H.wear_mask) + if (washears) + washears = !(H.wear_mask.flags_inv & HIDEEARS) + if (washglasses) + washglasses = !(H.wear_mask.flags_inv & HIDEEYES) + + if(H.head) + if(H.head.clean_blood()) + H.update_inv_head(0) + if(H.wear_suit) + if(H.wear_suit.clean_blood()) + H.update_inv_wear_suit(0) + else if(H.w_uniform) + if(H.w_uniform.clean_blood()) + H.update_inv_w_uniform(0) + if(washgloves) + clean_blood() + if(H.shoes && washshoes) + if(H.shoes.clean_blood()) + H.update_inv_shoes(0) + if(H.wear_mask) + if(washmask) + if(H.wear_mask.clean_blood()) + H.update_inv_wear_mask(0) + else + H.lip_style = null + H.update_body() + if(H.glasses && washglasses) + if(H.glasses.clean_blood()) + H.update_inv_glasses(0) + if(H.ears && washears) + if(H.ears.clean_blood()) + H.update_inv_ears(0) + if(H.belt) + if(H.belt.clean_blood()) + H.update_inv_belt(0) + else + if(M.wear_mask) //if the mob is not human, it cleans the mask without asking for bitflags + if(M.wear_mask.clean_blood()) + M.update_inv_wear_mask(0) + M.clean_blood() + else + L.clean_blood() + + /obj/machinery/shower/process() - if(!on || !mobpresent) return - for(var/mob/living/carbon/C in loc) - check_heat(C) + if(on) + wash_turf() + for(var/atom/movable/G in loc) + if(isliving(G)) + var/mob/living/L = G + wash_mob(L) + else + wash_obj(G) +/obj/machinery/shower/proc/check_heat(mob/living/carbon/C) + if(watertemp == "freezing") + C.bodytemperature = max(80, C.bodytemperature - 80) + C << "The water is freezing!" + else if(watertemp == "boiling") + C.bodytemperature = min(500, C.bodytemperature + 35) + C.adjustFireLoss(5) + C << "The water is searing!" -/obj/machinery/shower/proc/check_heat(mob/M) - if(!on || watertemp == "normal") return - if(iscarbon(M)) - var/mob/living/carbon/C = M - - if(watertemp == "freezing") - C.bodytemperature = max(80, C.bodytemperature - 80) - C << "The water is freezing!" - return - if(watertemp == "boiling") - C.bodytemperature = min(500, C.bodytemperature + 35) - C.adjustFireLoss(5) - C << "The water is searing!" - return diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index c3c789b3b9d..50811a93e3f 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -191,31 +191,9 @@ if(prob(20)) src << "Something bright flashes in the corner of your vision!" -/mob/living/carbon/proc/eyecheck() - var/obj/item/cybernetic_implant/eyes/EFP = locate() in src - if(EFP) - return EFP.flash_protect - return 0 - /mob/living/carbon/proc/tintcheck() return 0 -/mob/living/carbon/clean_blood() - if(ishuman(src)) - var/mob/living/carbon/human/H = src - if(H.gloves) - if(H.gloves.clean_blood()) - H.update_inv_gloves(0) - else - ..() // Clear the Blood_DNA list - if(H.bloody_hands) - H.bloody_hands = 0 - H.bloody_hands_mob = null - H.update_inv_gloves(0) - update_icons() //apply the now updated overlays to the mob - - - //Throwing stuff /mob/living/carbon/proc/toggle_throw_mode() if(stat) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 1f5f0b11935..36e75a624b0 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -786,3 +786,16 @@ ..(I, cuff_break = 1) else ..() + +/mob/living/carbon/human/clean_blood() + var/mob/living/carbon/human/H = src + if(H.gloves) + if(H.gloves.clean_blood()) + H.update_inv_gloves(0) + else + ..() // Clear the Blood_DNA list + if(H.bloody_hands) + H.bloody_hands = 0 + H.bloody_hands_mob = null + H.update_inv_gloves(0) + update_icons() //apply the now updated overlays to the mob \ No newline at end of file From 5f7afb87820e78a788ac58894c0f9af1205f4469 Mon Sep 17 00:00:00 2001 From: phil235 Date: Wed, 15 Jul 2015 20:08:53 +0200 Subject: [PATCH 44/89] Let's not spam people with drenching messages. --- code/game/objects/structures/watercloset.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 218d9495436..08c91a1272f 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -247,7 +247,6 @@ /obj/machinery/shower/proc/wash_mob(mob/living/L) L.ExtinguishMob() L.adjust_fire_stacks(-20) //Douse ourselves with water to avoid fire more easily - L << "You're drenched in water!" if(iscarbon(L)) var/mob/living/carbon/M = L . = 1 From 7b546709b98fbd122cf12f08ac7a09e0fe8ad61b Mon Sep 17 00:00:00 2001 From: MMMiracles Date: Wed, 15 Jul 2015 18:11:32 -0400 Subject: [PATCH 45/89] removes any source of connection between nanotrasen and syn- i mean removes possible conspiracy theories caused by stolen nanotrasen equipment. --- code/modules/clothing/head/helmet.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 6bfa9615112..2ff2a4c4c00 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -91,7 +91,7 @@ /obj/item/clothing/head/helmet/swat name = "\improper SWAT helmet" - desc = "An extremely robust, space-worthy helmet with the Nanotrasen logo emblazoned on the top." + desc = "An extremely robust, space-worthy helmet." icon_state = "swat" item_state = "swat" armor = list(melee = 40, bullet = 30, laser = 25,energy = 25, bomb = 50, bio = 10, rad = 0) From 7c5a90c5e9c430ffc2067d59a28bfbbda5d95ed7 Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Wed, 15 Jul 2015 17:35:15 -0500 Subject: [PATCH 46/89] Fixes sounds cutting out --- code/modules/clothing/head/helmet.dm | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 6bfa9615112..8cbfa5de052 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -66,9 +66,6 @@ icon_state = "[initial(icon_state)]up" usr << "[alt_toggle_message] \the [src]" usr.update_inv_head(0) - while(up) - playsound(src.loc, "[activation_sound]", 100, 0, 4) - sleep(15) /obj/item/clothing/head/helmet/justice name = "helmet of justice" @@ -80,6 +77,12 @@ can_toggle = 1 toggle_cooldown = 20 activation_sound = 'sound/items/WEEOO1.ogg' + +/obj/item/clothing/head/helmet/justice/attack_self() + ..() + while(up) + playsound(src.loc, "[activation_sound]", 100, 0, 4) + sleep(15) /obj/item/clothing/head/helmet/justice/escape name = "alarm helmet" From 1994070b3b8f48b3e81773c10d431321a20e3e60 Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Wed, 15 Jul 2015 17:59:50 -0500 Subject: [PATCH 47/89] Changes --- code/modules/clothing/head/helmet.dm | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 8cbfa5de052..0b0fe3c94c4 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -66,6 +66,10 @@ icon_state = "[initial(icon_state)]up" usr << "[alt_toggle_message] \the [src]" usr.update_inv_head(0) + while(up) + if(active_sound) + playsound(src.loc, "[active_sound]", 100, 0, 4) + sleep(15) /obj/item/clothing/head/helmet/justice name = "helmet of justice" @@ -76,14 +80,8 @@ action_button_name = "Toggle Justice Lights" can_toggle = 1 toggle_cooldown = 20 - activation_sound = 'sound/items/WEEOO1.ogg' + active_sound = 'sound/items/WEEOO1.ogg' -/obj/item/clothing/head/helmet/justice/attack_self() - ..() - while(up) - playsound(src.loc, "[activation_sound]", 100, 0, 4) - sleep(15) - /obj/item/clothing/head/helmet/justice/escape name = "alarm helmet" desc = "WEEEEOOO. WEEEEEOOO. STOP THAT MONKEY. WEEEOOOO." From d193fe7baca9baa600b2ecdcfd138f091e4fdc60 Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Wed, 15 Jul 2015 18:02:15 -0500 Subject: [PATCH 48/89] Changes var name --- code/modules/clothing/clothing.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 186b2f0fca0..23a316a20d4 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -11,7 +11,7 @@ var/alt_desc = null var/toggle_message = null var/alt_toggle_message = null - var/activation_sound = null + var/active_sound = null var/toggle_cooldown = null var/cooldown = 0 var/obj/item/device/flashlight/F = null From d372bae224b3ce456c575b20b8484fe4ea04d418 Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Wed, 15 Jul 2015 18:03:12 -0500 Subject: [PATCH 49/89] I did it backwards help --- code/modules/clothing/head/helmet.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 0b0fe3c94c4..375eb4e7f50 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -66,8 +66,8 @@ icon_state = "[initial(icon_state)]up" usr << "[alt_toggle_message] \the [src]" usr.update_inv_head(0) - while(up) - if(active_sound) + if(active_sound) + while(up) playsound(src.loc, "[active_sound]", 100, 0, 4) sleep(15) From 867b43a5a35834e6fd55ee02db2becfb59f28f92 Mon Sep 17 00:00:00 2001 From: MMMiracles Date: Thu, 16 Jul 2015 00:48:42 -0400 Subject: [PATCH 50/89] re-adds the black/red striped variant for fluke ops. also hunke. --- code/modules/clothing/head/helmet.dm | 12 +++++++++--- config/admins.txt | 3 ++- icons/mob/head.dmi | Bin 119745 -> 120513 bytes icons/obj/clothing/hats.dmi | Bin 58562 -> 58833 bytes 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 2ff2a4c4c00..7dbb6ea8c3c 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -91,9 +91,9 @@ /obj/item/clothing/head/helmet/swat name = "\improper SWAT helmet" - desc = "An extremely robust, space-worthy helmet." - icon_state = "swat" - item_state = "swat" + desc = "An extremely robust, space-worthy helmet in a nefarious red and black stripe pattern." + icon_state = "swatsyndie" + item_state = "swatsyndie" armor = list(melee = 40, bullet = 30, laser = 25,energy = 25, bomb = 50, bio = 10, rad = 0) cold_protection = HEAD min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT @@ -101,6 +101,12 @@ max_heat_protection_temperature = SPACE_HELM_MAX_TEMP_PROTECT strip_delay = 80 +/obj/item/clothing/head/helmet/swat/nanotrasen + name = "\improper SWAT helmet" + desc = "An extremely robust, space-worthy helmet with the Nanotrasen logo emblazoned on the top." + icon_state = "swat" + item_state = "swat" + /obj/item/clothing/head/helmet/thunderdome name = "\improper Thunderdome helmet" desc = "'Let the battle commence!'" diff --git a/config/admins.txt b/config/admins.txt index d1ebfc143f5..2151cab1b2a 100644 --- a/config/admins.txt +++ b/config/admins.txt @@ -88,4 +88,5 @@ ACCount12 = Game Master fayrik = Game Master shadowlight213 = Game Master drovidicorv = Game Master -Dunc = Game Master \ No newline at end of file +Dunc = Game Master +MMMiracles = Game Master \ No newline at end of file diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index 2918d313aa893fe88e0d79bece9d85576077b78b..1157611aa23eccfe6c7bfefa956586536600d87a 100644 GIT binary patch delta 5443 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