From 7dde8a5e662719ef34642d577fcdac1859dca774 Mon Sep 17 00:00:00 2001 From: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Date: Mon, 21 Nov 2022 23:30:46 -0600 Subject: [PATCH] Adds 5 new Heretic spells. Rebalances some aspects of Heretics. Refactors some spells as well, and makes it so emote spells require free hands. (#71044) ## About The Pull Request - Adds 5 new heretic spells! - For Flesh: Flesh Surgery. This spell is a touch spell that can either be used to heal your minions or extract organs from mobs. - For Void: Cone of Cold. This is a simple spell - it shoots out a cone, of cold, that freezes and damages people caught in it. - For Ash: Volcano Blast. This spell functions like Tesla Blast, but instead of electricity, it shoots out of a beam of fire that hurts to walk over. - For Blade: Realignment. Think of this like "Fleshmend but for stuns / stamcrit". It rapidly regenerates stamina damage and reduces stuns, while making you a pacifist. It can also be cast in rapid succession, but this will increase the cooldown. - For Rust: Rust Construction. Point at a rusted tile, and a wall will be raised where it was instantly. This even damages people and throws them aside - Or, if on a multi-z map, can lift up. - Number of influences has increased. - 5 at 1 heretic - 9 at 2 - 12 at 3 - 14 at 4 - 15 at 5 - 16 at 6, and so on - Heretics are given a 5th sacrifice target, selected randomly. On average an additional sacrifice is needed for their objectives. - Being sacrificed grants you a permanent phobia of the supernatural. Phobia of the supernatural has been expanded to cover heretic items and mobs. - The equation for offhand damage of blade heretics was tweaked. Actual result unchanged, it's just more resilient to future changes now. - Touch spells were refactored a bit, and overall expanded to be easier to use - Charged spells were added, and charged beam spells. Tesla blast uses this. - Cone spells were refactored to be easier to setup. - Jaunting will now hide your runechat when it triggers, to make it less easy to follow. - Heretic Ghouls now take less stamina damage based on how low their health pool is. - Emote based spells now require hands to be unblocked to be cast, like mime spells. - Yes this gets rid of handcuffed invisible walls... Not 100% on this, but I figured it's good for consistency? Open to discussion ## Why It's Good For The Game A lotta feedback has passed through about heretic and it's time to address some of it - Problem: Not enough cool flash spells. Makes Focus not worth it. - Solution: Adds some more spells to encourage focus use. - Problem: Sacrifice targets being too willing or not harmed enough - Solution: A permanent trauma. - Problem: Not enough ways to power up. - Solution: Adding more influences around, though I think there should be more variety in knowledge rituals as well. - Problem: Ash Passage sucks - Solution: Makes it a smidge better to stay hidden with it. - Problem: Heretic Ghouls get one hit by batons - Solution: Stamina modifier should put them on par with unmodified humans. ## Changelog :cl: Melbert add: Added five new heretic spells, one for each path. They come after the Ritual of Knowledge. add: Cone of Cold, for Void heretics. Shoots out a freezing chill in a cone which deal damage and freezes. add: Flesh Surgery for Flesh heretics. A touch spell which can either heal minions or be used on mobs to extract organs without surgery. add: Volcano Blast for Ash heretics. A beam spell, like Tesla Blast, which fires out a beam of fire that bounces between people. add: Realignment for Blade heretics. Fleshmend, but for stuns and stamina damage. Makes you a pacifist, but rapidly regenerates stamina. add: Rust Construction for Rust heretics. Places a wall of rust on the target rusted flooring. Can even be used to ascend z-levels! balance: Nerfed the cooldown of Cleave slightly, buffed the cooldown of Lesser Cleave slightly. balance: Slightly more influences will spawn on the station per heretic. balance: Heretics require an additional sacrifice on average for ascension, but are given a fifth sacrifice target (randomly selected). balance: Being sacrificed by a heretic now gives you a permanent phobia of spooky things, including heretic mobs and items. balance: Heretic ghouls now take reduced stamina damage, depending on how small their health pool is. balance: Using Jaunts will conceal your runechat for their duration. balance: Spells which require emoting (Mime spells) require your hands not be blocked to use. refactor: Touch Spells were improved a bit. Added some new template spells - Charged spells, and Charged beam spells. fix: Fixes a runtime from losing heretic. /:cl: --- .../__DEFINES/{bitfields.dm => _bitfields.dm} | 0 code/__DEFINES/actions.dm | 7 + code/__DEFINES/magic.dm | 10 + code/__DEFINES/sound.dm | 1 + code/__DEFINES/traits.dm | 3 + code/__HELPERS/mobs.dm | 2 + code/_globalvars/phobias.dm | 19 +- code/_globalvars/traits.dm | 1 + code/datums/chatmessage.dm | 2 + code/datums/mind/antag.dm | 3 + code/datums/mutations/fire_breath.dm | 6 +- code/datums/mutations/touch.dm | 1 + code/datums/status_effects/gas.dm | 5 +- .../antagonists/heretic/heretic_antag.dm | 82 ++++--- .../antagonists/heretic/heretic_knowledge.dm | 60 +++-- .../modules/antagonists/heretic/influences.dm | 6 +- .../antagonists/heretic/knowledge/ash_lore.dm | 30 ++- .../heretic/knowledge/blade_lore.dm | 69 ++++-- .../heretic/knowledge/flesh_lore.dm | 22 +- .../heretic/knowledge/general_side.dm | 2 +- .../heretic/knowledge/rust_lore.dm | 27 +- .../sacrifice_knowledge.dm | 39 +-- .../heretic/knowledge/starting_lore.dm | 6 +- .../heretic/knowledge/void_lore.dm | 33 ++- .../antagonists/heretic/magic/blood_cleave.dm | 16 +- .../antagonists/heretic/magic/blood_siphon.dm | 2 +- .../antagonists/heretic/magic/fire_blast.dm | 178 ++++++++++++++ .../heretic/magic/flesh_surgery.dm | 232 ++++++++++++++++++ .../heretic/magic/madness_touch.dm | 32 ++- .../antagonists/heretic/magic/manse_link.dm | 1 + .../antagonists/heretic/magic/mansus_grasp.dm | 29 ++- .../heretic/magic/nightwatcher_rebirth.dm | 7 +- .../antagonists/heretic/magic/realignment.dm | 80 ++++++ .../heretic/magic/rust_construction.dm | 117 +++++++++ .../antagonists/heretic/magic/rust_wave.dm | 18 +- .../heretic/magic/void_cold_cone.dm | 36 +++ .../antagonists/heretic/magic/void_phase.dm | 15 +- .../antagonists/heretic/magic/void_pull.dm | 5 +- .../heretic/status_effects/debuffs.dm | 6 + .../heretic/status_effects/ghoul.dm | 7 + .../equipment/spellbook_entries/offensive.dm | 2 +- code/modules/spells/spell.dm | 15 +- .../spells/spell_types/charged/_charged.dm | 158 ++++++++++++ .../spells/spell_types/charged/tesla_blast.dm | 62 +++++ code/modules/spells/spell_types/cone/_cone.dm | 49 ++-- .../spells/spell_types/cone/cone_of_cold.dm | 67 +++++ .../spell_types/conjure/invisible_chair.dm | 1 + .../spell_types/conjure/invisible_wall.dm | 1 + .../spell_types/conjure_item/invisible_box.dm | 1 + .../spells/spell_types/jaunt/_jaunt.dm | 16 +- .../spell_types/jaunt/ethereal_jaunt.dm | 2 +- .../spells/spell_types/pointed/_pointed.dm | 13 +- .../spells/spell_types/pointed/finger_guns.dm | 1 + .../spells/spell_types/self/forcewall.dm | 1 + .../spells/spell_types/self/lightning.dm | 125 ---------- .../spells/spell_types/touch/_touch.dm | 124 ++++++++-- .../spell_types/touch/duffelbag_curse.dm | 55 +++-- .../spell_types/touch/flesh_to_stone.dm | 9 +- .../modules/spells/spell_types/touch/smite.dm | 38 +-- icons/hud/screen_alert.dmi | Bin 129907 -> 127861 bytes strings/phobia.json | 4 +- tgstation.dme | 11 +- .../tgui/interfaces/AntagInfoHeretic.tsx | 10 +- 63 files changed, 1539 insertions(+), 443 deletions(-) rename code/__DEFINES/{bitfields.dm => _bitfields.dm} (100%) create mode 100644 code/modules/antagonists/heretic/magic/fire_blast.dm create mode 100644 code/modules/antagonists/heretic/magic/flesh_surgery.dm create mode 100644 code/modules/antagonists/heretic/magic/realignment.dm create mode 100644 code/modules/antagonists/heretic/magic/rust_construction.dm create mode 100644 code/modules/antagonists/heretic/magic/void_cold_cone.dm create mode 100644 code/modules/spells/spell_types/charged/_charged.dm create mode 100644 code/modules/spells/spell_types/charged/tesla_blast.dm create mode 100644 code/modules/spells/spell_types/cone/cone_of_cold.dm delete mode 100644 code/modules/spells/spell_types/self/lightning.dm diff --git a/code/__DEFINES/bitfields.dm b/code/__DEFINES/_bitfields.dm similarity index 100% rename from code/__DEFINES/bitfields.dm rename to code/__DEFINES/_bitfields.dm diff --git a/code/__DEFINES/actions.dm b/code/__DEFINES/actions.dm index ca206810699..eb1edc8d623 100644 --- a/code/__DEFINES/actions.dm +++ b/code/__DEFINES/actions.dm @@ -7,6 +7,13 @@ ///Action button checks if user is conscious #define AB_CHECK_CONSCIOUS (1<<3) +DEFINE_BITFIELD(check_flags, list( + "CHECK IF HANDS BLOCKED" = AB_CHECK_HANDS_BLOCKED, + "CHECK IF IMMOBILIZED" = AB_CHECK_IMMOBILE, + "CHECK IF LYING DOWN" = AB_CHECK_LYING, + "CHECK IF CONSCIOUS" = AB_CHECK_CONSCIOUS, +)) + ///Action button triggered with right click #define TRIGGER_SECONDARY_ACTION (1<<0) diff --git a/code/__DEFINES/magic.dm b/code/__DEFINES/magic.dm index e92e17ea23c..d6a099562d1 100644 --- a/code/__DEFINES/magic.dm +++ b/code/__DEFINES/magic.dm @@ -95,3 +95,13 @@ DEFINE_BITFIELD(antimagic_flags, list( "MAGIC_RESISTANCE_HOLY" = MAGIC_RESISTANCE_HOLY, "MAGIC_RESISTANCE_MIND" = MAGIC_RESISTANCE_MIND, )) + +/** + * Checks if our mob is jaunting actively (within a phased mob object) + * Used in jaunting spells specifically to determine whether they should be entering or exiting jaunt + * + * If you want to use this in non-jaunt related code, it is preferable + * to instead check for trait [TRAIT_MAGICALLY_PHASED] instead of using this + * as it encompasses more states in which a mob may be "incorporeal from magic" + */ +#define is_jaunting(atom) (istype(atom.loc, /obj/effect/dummy/phased_mob)) diff --git a/code/__DEFINES/sound.dm b/code/__DEFINES/sound.dm index d9a830d9460..88bf2fb8dc6 100644 --- a/code/__DEFINES/sound.dm +++ b/code/__DEFINES/sound.dm @@ -7,6 +7,7 @@ #define CHANNEL_AMBIENCE 1019 #define CHANNEL_BUZZ 1018 #define CHANNEL_TRAITOR 1017 +#define CHANNEL_CHARGED_SPELL 1016 ///Default range of a sound. #define SOUND_RANGE 17 diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index 25776c1c6b6..e0ff56dd136 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -965,6 +965,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// Makes a species be better/worse at defending against tackling depending on their tail's status #define TRAIT_TACKLING_TAILED_DEFENDER "tackling_tailed_defender" +/// Is runechat for this atom/movable currently disabled, regardless of prefs or anything? +#define TRAIT_RUNECHAT_HIDDEN "runechat_hudden" + /// some trait sorces dirived from bodyparts BODYPART_TRAIT is generic. #define BODYPART_TRAIT "bodypart" #define HEAD_TRAIT "head" diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index b2d60995ce7..03906dd656f 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -802,6 +802,8 @@ GLOBAL_LIST_EMPTY(species_list) return BODY_ZONE_CHEST if(BODY_ZONE_PRECISE_EYES) return BODY_ZONE_HEAD + if(BODY_ZONE_PRECISE_MOUTH) + return BODY_ZONE_HEAD if(BODY_ZONE_PRECISE_R_HAND) return BODY_ZONE_R_ARM if(BODY_ZONE_PRECISE_L_HAND) diff --git a/code/_globalvars/phobias.dm b/code/_globalvars/phobias.dm index f803088ea46..7547a8a17c5 100644 --- a/code/_globalvars/phobias.dm +++ b/code/_globalvars/phobias.dm @@ -69,6 +69,7 @@ GLOBAL_LIST_INIT(phobia_mobs, list( /mob/living/simple_animal/hostile/construct, /mob/living/simple_animal/hostile/dark_wizard, /mob/living/simple_animal/hostile/faithless, + /mob/living/simple_animal/hostile/heretic_summon, /mob/living/simple_animal/hostile/imp, /mob/living/simple_animal/hostile/retaliate/bat, /mob/living/simple_animal/hostile/retaliate/ghost, @@ -335,16 +336,25 @@ GLOBAL_LIST_INIT(phobia_objs, list( )), "the supernatural" = typecacheof(list( + /obj/effect/floating_blade, + /obj/effect/heretic_influence, + /obj/effect/heretic_rune, /obj/effect/rune, + /obj/effect/visible_heretic_influence, /obj/item/clothing/head/hooded/cult_hoodie, /obj/item/clothing/head/wizard, + /obj/item/clothing/mask/madness_mask, + /obj/item/clothing/neck/heretic_focus, + /obj/item/clothing/neck/eldritch_amulet, /obj/item/clothing/suit/hooded/cultrobes, /obj/item/clothing/suit/wizrobe, /obj/item/clothing/under/rank/civilian/chaplain, + /obj/item/codex_cicatrix, /obj/item/cult_bastard, - /obj/item/gun/magic/staff, - /obj/item/gun/magic/wand, + /obj/item/gun/magic, /obj/item/melee/cultblade, + /obj/item/melee/rune_carver, + /obj/item/melee/sickly_blade, /obj/item/necromantic_stone, /obj/item/nullrod, /obj/item/restraints/legcuffs/bola/cult, @@ -356,13 +366,16 @@ GLOBAL_LIST_INIT(phobia_objs, list( /obj/item/staff, /obj/item/storage/toolbox/haunted, /obj/item/tome, + /obj/item/toy/cards/deck/tarot, /obj/item/toy/eightball/haunted, + /obj/item/toy/eldritch_book, + /obj/item/toy/reality_pierce, /obj/item/warp_whistle, /obj/machinery/door/airlock/cult, /obj/narsie, /obj/structure/destructible/cult, + /obj/structure/destructible/eldritch_crucible, /obj/structure/spirit_board, - /obj/item/toy/cards/deck/tarot, )), "aliens" = typecacheof(list( diff --git a/code/_globalvars/traits.dm b/code/_globalvars/traits.dm index 56279ee7f6d..ee5a741866e 100644 --- a/code/_globalvars/traits.dm +++ b/code/_globalvars/traits.dm @@ -204,6 +204,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_SNOWSTORM_IMMUNE" = TRAIT_SNOWSTORM_IMMUNE, "TRAIT_VOIDSTORM_IMMUNE" = TRAIT_VOIDSTORM_IMMUNE, "TRAIT_WEATHER_IMMUNE" = TRAIT_WEATHER_IMMUNE, + "TRAIT_RUNECHAT_HIDDEN" = TRAIT_RUNECHAT_HIDDEN, ), /obj/item/card/id = list( "TRAIT_MAGNETIC_ID_CARD" = TRAIT_MAGNETIC_ID_CARD, diff --git a/code/datums/chatmessage.dm b/code/datums/chatmessage.dm index 55f8510fc57..3d22279ad2b 100644 --- a/code/datums/chatmessage.dm +++ b/code/datums/chatmessage.dm @@ -260,6 +260,8 @@ /mob/proc/create_chat_message(atom/movable/speaker, datum/language/message_language, raw_message, list/spans, runechat_flags = NONE) if(SSlag_switch.measures[DISABLE_RUNECHAT] && !HAS_TRAIT(speaker, TRAIT_BYPASS_MEASURES)) return + if(HAS_TRAIT(speaker, TRAIT_RUNECHAT_HIDDEN)) + return // Ensure the list we are using, if present, is a copy so we don't modify the list provided to us spans = spans ? spans.Copy() : list() diff --git a/code/datums/mind/antag.dm b/code/datums/mind/antag.dm index 54ec61bdfa0..1e2b87f2a1d 100644 --- a/code/datums/mind/antag.dm +++ b/code/datums/mind/antag.dm @@ -218,6 +218,9 @@ for(var/datum/objective/objective as anything in get_all_objectives()) to_chat(current, "[objective.objective_name] #[obj_count]: [objective.explanation_text]") obj_count++ + // Objectives are often stored in the static data of antag uis, so we should update those as well + for(var/datum/antagonist/antag as anything in antag_datums) + antag.update_static_data(current) /datum/mind/proc/find_syndicate_uplink(check_unlocked) var/list/L = current.get_all_contents() diff --git a/code/datums/mutations/fire_breath.dm b/code/datums/mutations/fire_breath.dm index 5b32c16b3c7..97e5459f82c 100644 --- a/code/datums/mutations/fire_breath.dm +++ b/code/datums/mutations/fire_breath.dm @@ -76,10 +76,8 @@ living_cast_on.setDir(original_dir) /datum/action/cooldown/spell/cone/staggered/fire_breath/calculate_cone_shape(current_level) - // This makes the cone shoot out into a 3 wide column of flames. - // You may be wondering, "that equation doesn't seem like it'd make a 3 wide column" - // well it does, and that's all that matters. - return (2 * current_level) - 1 + // This makes the cone shoot out into a 3 wide column of flames no matter the distance + return 3 /datum/action/cooldown/spell/cone/staggered/fire_breath/do_turf_cone_effect(turf/target_turf, atom/caster, level) // Further turfs experience less exposed_temperature and exposed_volume diff --git a/code/datums/mutations/touch.dm b/code/datums/mutations/touch.dm index 806dfe20d83..0964492d1ca 100644 --- a/code/datums/mutations/touch.dm +++ b/code/datums/mutations/touch.dm @@ -32,6 +32,7 @@ cooldown_time = 12 SECONDS invocation_type = INVOCATION_NONE spell_requirements = NONE + antimagic_flags = NONE //Vars for zaps made when power chromosome is applied, ripped and toned down from reactive tesla armor code. ///This var decides if the spell should chain, dictated by presence of power chromosome diff --git a/code/datums/status_effects/gas.dm b/code/datums/status_effects/gas.dm index 00353be157f..29b2cccf821 100644 --- a/code/datums/status_effects/gas.dm +++ b/code/datums/status_effects/gas.dm @@ -52,6 +52,10 @@ duration = 8 can_melt = FALSE +/datum/status_effect/freon/lasting + id = "lasting_frozen" + duration = -1 + /datum/status_effect/hypernob_protection id = "hypernob_protection" duration = 10 SECONDS @@ -80,4 +84,3 @@ var/mob/living/carbon/human/human_owner = owner human_owner.remove_movespeed_modifier(/datum/movespeed_modifier/reagent/hypernoblium) REMOVE_TRAIT(human_owner, TRAIT_NOFIRE, type) - diff --git a/code/modules/antagonists/heretic/heretic_antag.dm b/code/modules/antagonists/heretic/heretic_antag.dm index 1c13a7a257e..8aa5711bded 100644 --- a/code/modules/antagonists/heretic/heretic_antag.dm +++ b/code/modules/antagonists/heretic/heretic_antag.dm @@ -49,15 +49,8 @@ var/static/list/scribing_tools = typecacheof(list(/obj/item/pen, /obj/item/toy/crayon)) /// A blacklist of turfs we cannot scribe on. var/static/list/blacklisted_rune_turfs = typecacheof(list(/turf/open/space, /turf/open/openspace, /turf/open/lava, /turf/open/chasm)) - -/datum/antagonist/heretic/Destroy() - LAZYNULL(sac_targets) - return ..() - -/datum/antagonist/heretic/ui_data(mob/user) - var/list/data = list() - - var/static/list/path_to_color = list( + /// Static list of what each path converts to in the UI (colors are TGUI colors) + var/static/list/path_to_ui_color = list( PATH_START = "grey", PATH_SIDE = "green", PATH_RUST = "brown", @@ -67,8 +60,20 @@ PATH_BLADE = "label", // my favorite color is label ) - data["charges"] = knowledge_points +/datum/antagonist/heretic/Destroy() + LAZYNULL(sac_targets) + return ..() +/datum/antagonist/heretic/ui_data(mob/user) + var/list/data = list() + + data["charges"] = knowledge_points + data["total_sacrifices"] = total_sacrifices + data["ascended"] = ascended + + // This should be cached in some way, but the fact that final knowledge + // has to update its disabled state based on whether all objectives are complete, + // makes this very difficult. I'll figure it out one day maybe for(var/datum/heretic_knowledge/knowledge as anything in get_researchable_knowledge()) var/list/knowledge_data = list() knowledge_data["path"] = knowledge @@ -83,10 +88,17 @@ knowledge_data["disabled"] = !can_ascend() knowledge_data["hereticPath"] = initial(knowledge.route) - knowledge_data["color"] = path_to_color[initial(knowledge.route)] || "grey" + knowledge_data["color"] = path_to_ui_color[initial(knowledge.route)] || "grey" data["learnableKnowledge"] += list(knowledge_data) + return data + +/datum/antagonist/heretic/ui_static_data(mob/user) + var/list/data = list() + + data["objectives"] = get_objectives() + for(var/path in researched_knowledge) var/list/knowledge_data = list() var/datum/heretic_knowledge/found_knowledge = researched_knowledge[path] @@ -95,21 +107,12 @@ knowledge_data["gainFlavor"] = found_knowledge.gain_text knowledge_data["cost"] = found_knowledge.cost knowledge_data["hereticPath"] = found_knowledge.route - knowledge_data["color"] = path_to_color[found_knowledge.route] || "grey" + knowledge_data["color"] = path_to_ui_color[found_knowledge.route] || "grey" data["learnedKnowledge"] += list(knowledge_data) return data -/datum/antagonist/heretic/ui_static_data(mob/user) - var/list/data = list() - - data["total_sacrifices"] = total_sacrifices - data["ascended"] = ascended - data["objectives"] = get_objectives() - - return data - /datum/antagonist/heretic/ui_act(action, params) . = ..() if(.) @@ -122,9 +125,9 @@ CRASH("Heretic attempted to learn non-heretic_knowledge path! (Got: [researched_path])") if(initial(researched_path.cost) > knowledge_points) - return + return TRUE if(!gain_knowledge(researched_path)) - return + return TRUE log_heretic_knowledge("[key_name(owner)] gained knowledge: [initial(researched_path.name)]") knowledge_points -= initial(researched_path.cost) @@ -183,7 +186,7 @@ /datum/antagonist/heretic/on_removal() for(var/knowledge_index in researched_knowledge) var/datum/heretic_knowledge/knowledge = researched_knowledge[knowledge_index] - knowledge.on_lose(owner.current) + knowledge.on_lose(owner.current, src) GLOB.reality_smash_track.remove_tracked_mind(owner) QDEL_LIST_ASSOC_VAL(researched_knowledge) @@ -218,8 +221,8 @@ . = ..() for(var/knowledge_index in researched_knowledge) var/datum/heretic_knowledge/knowledge = researched_knowledge[knowledge_index] - knowledge.on_lose(old_body) - knowledge.on_gain(new_body) + knowledge.on_lose(old_body, src) + knowledge.on_gain(new_body, src) /* * Signal proc for [COMSIG_MOB_BEFORE_SPELL_CAST] and [COMSIG_MOB_SPELL_ACTIVATED]. @@ -476,7 +479,7 @@ .["Adjust Knowledge Points"] = CALLBACK(src, PROC_REF(admin_change_points)) -/* +/** * Admin proc for giving a heretic a Living Heart easily. */ /datum/antagonist/heretic/proc/give_living_heart(mob/admin) @@ -489,9 +492,9 @@ to_chat(admin, span_warning("The heretic doesn't have a living heart knowledge for some reason. What?")) return - heart_knowledge.on_research(owner.current) + heart_knowledge.on_research(owner.current, src) -/* +/** * Admin proc for adding a marked mob to a heretic's sac list. */ /datum/antagonist/heretic/proc/add_marked_as_target(mob/admin) @@ -510,7 +513,7 @@ add_sacrifice_target(new_target) -/* +/** * Admin proc for removing a mob from a heretic's sac list. */ /datum/antagonist/heretic/proc/remove_target(mob/admin) @@ -536,7 +539,7 @@ if(tgui_alert(admin, "Let them know their targets have been updated?", "Whispers of the Mansus", list("Yes", "No")) == "Yes") to_chat(owner.current, span_danger("The Mansus has modified your targets.")) -/* +/** * Admin proc for easily adding / removing knowledge points. */ /datum/antagonist/heretic/proc/admin_change_points(mob/admin) @@ -575,7 +578,7 @@ . += "None!
" . += "
" -/* +/** * Learns the passed [typepath] of knowledge, creating a knowledge datum * and adding it to our researched knowledge list. * @@ -589,10 +592,11 @@ return FALSE var/datum/heretic_knowledge/initialized_knowledge = new knowledge_type() researched_knowledge[knowledge_type] = initialized_knowledge - initialized_knowledge.on_research(owner.current) + initialized_knowledge.on_research(owner.current, src) + update_static_data(owner.current) return TRUE -/* +/** * Get a list of all knowledge TYPEPATHS that we can currently research. */ /datum/antagonist/heretic/proc/get_researchable_knowledge() @@ -606,13 +610,13 @@ researchable_knowledge -= banned_knowledge return researchable_knowledge -/* +/** * Check if the wanted type-path is in the list of research knowledge. */ /datum/antagonist/heretic/proc/get_knowledge(wanted) return researched_knowledge[wanted] -/* +/** * Get a list of all rituals this heretic can invoke on a rune. * Iterates over all of our knowledge and, if we can invoke it, adds it to our list. * @@ -629,7 +633,7 @@ return sortTim(rituals, GLOBAL_PROC_REF(cmp_heretic_knowledge), associative = TRUE) -/* +/** * Checks to see if our heretic can ccurrently ascend. * * Returns FALSE if not all of our objectives are complete, or TRUE otherwise. @@ -640,7 +644,7 @@ return FALSE return TRUE -/* +/** * Helper to determine if a Heretic * - Has a Living Heart * - Has a an organ in the correct slot that isn't a living heart @@ -666,7 +670,7 @@ /datum/objective/minor_sacrifice/New(text) . = ..() - target_amount = rand(2, 3) + target_amount = rand(3, 4) update_explanation_text() /datum/objective/minor_sacrifice/update_explanation_text() diff --git a/code/modules/antagonists/heretic/heretic_knowledge.dm b/code/modules/antagonists/heretic/heretic_knowledge.dm index 3296fc74e93..89bc9b978d8 100644 --- a/code/modules/antagonists/heretic/heretic_knowledge.dm +++ b/code/modules/antagonists/heretic/heretic_knowledge.dm @@ -50,14 +50,15 @@ * This is only ever called once per heretic. * * Arguments - * * user - the heretic who researched something + * * user - The heretic who researched something + * * our_heretic - The antag datum of who researched us. This should never be null. */ -/datum/heretic_knowledge/proc/on_research(mob/user) +/datum/heretic_knowledge/proc/on_research(mob/user, datum/antagonist/heretic/our_heretic) SHOULD_CALL_PARENT(TRUE) if(gain_text) to_chat(user, span_warning("[gain_text]")) - on_gain(user) + on_gain(user, our_heretic) /** * Called when the knowledge is applied to a mob. @@ -66,8 +67,9 @@ * * Arguments * * user - the heretic which we're applying things to + * * our_heretic - The antag datum of who gained us. This should never be null. */ -/datum/heretic_knowledge/proc/on_gain(mob/user) +/datum/heretic_knowledge/proc/on_gain(mob/user, datum/antagonist/heretic/our_heretic) return /** @@ -76,8 +78,9 @@ * * Arguments * * user - the heretic which we're removing things from + * * our_heretic - The antag datum of who is losing us. This should never be null. */ -/datum/heretic_knowledge/proc/on_lose(mob/user) +/datum/heretic_knowledge/proc/on_lose(mob/user, datum/antagonist/heretic/our_heretic) return /** @@ -165,7 +168,7 @@ selected_atoms -= sacrificed qdel(sacrificed) -/* +/** * A knowledge subtype that grants the heretic a certain spell. */ /datum/heretic_knowledge/spell @@ -179,7 +182,7 @@ QDEL_NULL(created_spell_ref) return ..() -/datum/heretic_knowledge/spell/on_gain(mob/user) +/datum/heretic_knowledge/spell/on_gain(mob/user, datum/antagonist/heretic/our_heretic) // Added spells are tracked on the body, and not the mind, // because we handle heretic mind transfers // via the antag datum (on_gain and on_lose). @@ -187,11 +190,11 @@ created_spell.Grant(user) created_spell_ref = WEAKREF(created_spell) -/datum/heretic_knowledge/spell/on_lose(mob/user) +/datum/heretic_knowledge/spell/on_lose(mob/user, datum/antagonist/heretic/our_heretic) var/datum/action/cooldown/spell/created_spell = created_spell_ref?.resolve() created_spell?.Remove(user) -/* +/** * A knowledge subtype for knowledge that can only * have a limited amount of it's resulting atoms * created at once. @@ -225,7 +228,7 @@ LAZYADD(created_items, WEAKREF(created_thing)) return TRUE -/* +/** * A knowledge subtype for limited_amount knowledge * used for base knowledge (the ones that make blades) * @@ -247,11 +250,12 @@ continue banned_knowledge += final_knowledge_type -/datum/heretic_knowledge/limited_amount/starting/on_research(mob/user) +/datum/heretic_knowledge/limited_amount/starting/on_research(mob/user, datum/antagonist/heretic/our_heretic) . = ..() + our_heretic.heretic_path = route SSblackbox.record_feedback("tally", "heretic_path_taken", 1, route) -/* +/** * A knowledge subtype for heretic knowledge * that applies a mark on use. * @@ -264,11 +268,11 @@ /// The status effect typepath we apply on people on mansus grasp. var/datum/status_effect/eldritch/mark_type -/datum/heretic_knowledge/mark/on_gain(mob/user) +/datum/heretic_knowledge/mark/on_gain(mob/user, datum/antagonist/heretic/our_heretic) RegisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK, PROC_REF(on_mansus_grasp)) RegisterSignal(user, COMSIG_HERETIC_BLADE_ATTACK, PROC_REF(on_eldritch_blade)) -/datum/heretic_knowledge/mark/on_lose(mob/user) +/datum/heretic_knowledge/mark/on_lose(mob/user, datum/antagonist/heretic/our_heretic) UnregisterSignal(user, list(COMSIG_HERETIC_MANSUS_GRASP_ATTACK, COMSIG_HERETIC_BLADE_ATTACK)) /** @@ -316,7 +320,7 @@ mark.on_effect() return TRUE -/* +/** * A knowledge subtype for heretic knowledge that * upgrades their sickly blade, either on melee or range. * @@ -327,11 +331,11 @@ mutually_exclusive = TRUE cost = 2 -/datum/heretic_knowledge/blade_upgrade/on_gain(mob/user) +/datum/heretic_knowledge/blade_upgrade/on_gain(mob/user, datum/antagonist/heretic/our_heretic) RegisterSignal(user, COMSIG_HERETIC_BLADE_ATTACK, PROC_REF(on_eldritch_blade)) RegisterSignal(user, COMSIG_HERETIC_RANGED_BLADE_ATTACK, PROC_REF(on_ranged_eldritch_blade)) -/datum/heretic_knowledge/blade_upgrade/on_lose(mob/user) +/datum/heretic_knowledge/blade_upgrade/on_lose(mob/user, datum/antagonist/heretic/our_heretic) UnregisterSignal(user, list(COMSIG_HERETIC_BLADE_ATTACK, COMSIG_HERETIC_RANGED_BLADE_ATTACK)) @@ -369,7 +373,7 @@ /datum/heretic_knowledge/blade_upgrade/proc/do_ranged_effects(mob/living/source, mob/living/target, obj/item/melee/sickly_blade/blade) return -/* +/** * A knowledge subtype lets the heretic curse someone with a ritual. */ /datum/heretic_knowledge/curse @@ -492,7 +496,7 @@ chosen_mob.remove_filter(name) -/* +/** * A knowledge subtype lets the heretic summon a monster with the ritual. */ /datum/heretic_knowledge/summon @@ -540,7 +544,7 @@ /// The amount of knowledge points the knowledge ritual gives on success. #define KNOWLEDGE_RITUAL_POINTS 4 -/* +/** * A subtype of knowledge that generates random ritual components. */ /datum/heretic_knowledge/knowledge_ritual @@ -599,7 +603,7 @@ // 1 uncommon item. required_atoms[pick(potential_uncommoner_items)] += 1 -/datum/heretic_knowledge/knowledge_ritual/on_research(mob/user) +/datum/heretic_knowledge/knowledge_ritual/on_research(mob/user, datum/antagonist/heretic/our_heretic) . = ..() var/list/requirements_string = list() @@ -634,7 +638,7 @@ #undef KNOWLEDGE_RITUAL_POINTS -/* +/** * The special final tier of knowledges that unlocks ASCENSION. */ /datum/heretic_knowledge/ultimate @@ -644,16 +648,15 @@ priority = MAX_KNOWLEDGE_PRIORITY + 1 // Yes, the final ritual should be ABOVE the max priority. required_atoms = list(/mob/living/carbon/human = 3) -/datum/heretic_knowledge/ultimate/on_research(mob/user) +/datum/heretic_knowledge/ultimate/on_research(mob/user, datum/antagonist/heretic/our_heretic) . = ..() - var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user) var/total_points = 0 - for(var/datum/heretic_knowledge/knowledge as anything in flatten_list(heretic_datum.researched_knowledge)) + for(var/datum/heretic_knowledge/knowledge as anything in flatten_list(our_heretic.researched_knowledge)) total_points += knowledge.cost log_heretic_knowledge("[key_name(user)] gained knowledge of their final ritual at [worldtime2text()]. \ - They have [length(heretic_datum.researched_knowledge)] knowledge nodes researched, totalling [total_points] points \ - and have sacrificed [heretic_datum.total_sacrifices] people ([heretic_datum.high_value_sacrifices] of which were high value)") + They have [length(our_heretic.researched_knowledge)] knowledge nodes researched, totalling [total_points] points \ + and have sacrificed [our_heretic.total_sacrifices] people ([our_heretic.high_value_sacrifices] of which were high value)") /datum/heretic_knowledge/ultimate/can_be_invoked(datum/antagonist/heretic/invoker) if(invoker.ascended) @@ -689,6 +692,9 @@ var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user) heretic_datum.ascended = TRUE + // Show the cool red gradiant in our UI + heretic_datum.update_static_data(user) + if(ishuman(user)) var/mob/living/carbon/human/human_user = user human_user.physiology.brute_mod *= 0.5 diff --git a/code/modules/antagonists/heretic/influences.dm b/code/modules/antagonists/heretic/influences.dm index 6b53a08963f..d24a1b6e637 100644 --- a/code/modules/antagonists/heretic/influences.dm +++ b/code/modules/antagonists/heretic/influences.dm @@ -1,6 +1,6 @@ /// The number of influences spawned per heretic -#define NUM_INFLUENCES_PER_HERETIC 4 +#define NUM_INFLUENCES_PER_HERETIC 5 /** * #Reality smash tracker @@ -65,10 +65,6 @@ * and the number of minds we're tracking. */ /datum/reality_smash_tracker/proc/generate_new_influences() - // 1 heretic = 4 influences - // 2 heretics = 7 influences - // 3 heretics = 9 influences - // 4 heretics = 10 influences, +1 for each onwards. var/how_many_can_we_make = 0 for(var/heretic_number in 1 to length(tracked_heretics)) how_many_can_we_make += max(NUM_INFLUENCES_PER_HERETIC - heretic_number + 1, 1) diff --git a/code/modules/antagonists/heretic/knowledge/ash_lore.dm b/code/modules/antagonists/heretic/knowledge/ash_lore.dm index 551d17d341b..b83c7d43b58 100644 --- a/code/modules/antagonists/heretic/knowledge/ash_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/ash_lore.dm @@ -12,6 +12,7 @@ * * Mark of Ash * Ritual of Knowledge + * Fire Blast * Mask of Madness * > Sidepaths: * Curse of Corrosion @@ -39,11 +40,6 @@ result_atoms = list(/obj/item/melee/sickly_blade/ash) route = PATH_ASH -/datum/heretic_knowledge/limited_amount/starting/base_ash/on_research(mob/user) - . = ..() - var/datum/antagonist/heretic/our_heretic = IS_HERETIC(user) - our_heretic.heretic_path = route - /datum/heretic_knowledge/ashen_grasp name = "Grasp of Ash" desc = "Your Mansus Grasp will burn the eyes of the victim, causing damage and blindness." @@ -53,10 +49,10 @@ cost = 1 route = PATH_ASH -/datum/heretic_knowledge/ashen_grasp/on_gain(mob/user) +/datum/heretic_knowledge/ashen_grasp/on_gain(mob/user, datum/antagonist/heretic/our_heretic) RegisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK, PROC_REF(on_mansus_grasp)) -/datum/heretic_knowledge/ashen_grasp/on_lose(mob/user) +/datum/heretic_knowledge/ashen_grasp/on_lose(mob/user, datum/antagonist/heretic/our_heretic) UnregisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK) /datum/heretic_knowledge/ashen_grasp/proc/on_mansus_grasp(mob/living/source, mob/living/target) @@ -110,9 +106,21 @@ grasp.UpdateButtons() /datum/heretic_knowledge/knowledge_ritual/ash - next_knowledge = list(/datum/heretic_knowledge/mad_mask) + next_knowledge = list(/datum/heretic_knowledge/spell/fire_blast) route = PATH_ASH +/datum/heretic_knowledge/spell/fire_blast + name = "Volcano Blast" + desc = "Grants you Volcano Blast, a spell that - after a short charge - fires off a beam of energy \ + at a nearby enemy, setting them on fire and burning them. If they do not extinguish themselves, \ + the beam will continue to another target." + gain_text = "No fire was hot enough to rekindle them. No fire was bright enough to save them. No fire is eternal." + next_knowledge = list(/datum/heretic_knowledge/mad_mask) + spell_to_add = /datum/action/cooldown/spell/charged/beam/fire_blast + cost = 1 + route = PATH_ASH + + /datum/heretic_knowledge/mad_mask name = "Mask of Madness" desc = "Allows you to transmute any mask, four candles, a stun baton, and a liver to create a Mask of Madness. \ @@ -209,6 +217,12 @@ var/datum/action/cooldown/spell/fire_cascade/big/screen_wide_fire_spell = new(user.mind) screen_wide_fire_spell.Grant(user) + var/datum/action/cooldown/spell/charged/beam/fire_blast/existing_beam_spell = locate() in user.actions + if(existing_beam_spell) + existing_beam_spell.max_beam_bounces *= 2 // Double beams + existing_beam_spell.beam_duration *= 0.66 // Faster beams + existing_beam_spell.cooldown_time *= 0.66 // Lower cooldown + user.client?.give_award(/datum/award/achievement/misc/ash_ascension, user) for(var/trait in traits_to_apply) ADD_TRAIT(user, trait, MAGIC_TRAIT) diff --git a/code/modules/antagonists/heretic/knowledge/blade_lore.dm b/code/modules/antagonists/heretic/knowledge/blade_lore.dm index 26aeeec86e1..c354690d12a 100644 --- a/code/modules/antagonists/heretic/knowledge/blade_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/blade_lore.dm @@ -12,6 +12,7 @@ * * Mark of the Blade * Ritual of Knowledge + * Realignment * Stance of the Scarred Duelist * > Sidepaths: * Carving Knife @@ -49,10 +50,10 @@ cost = 1 route = PATH_BLADE -/datum/heretic_knowledge/blade_grasp/on_gain(mob/user) +/datum/heretic_knowledge/blade_grasp/on_gain(mob/user, datum/antagonist/heretic/our_heretic) RegisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK, PROC_REF(on_mansus_grasp)) -/datum/heretic_knowledge/blade_grasp/on_lose(mob/user) +/datum/heretic_knowledge/blade_grasp/on_lose(mob/user, datum/antagonist/heretic/our_heretic) UnregisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK) /datum/heretic_knowledge/blade_grasp/proc/on_mansus_grasp(mob/living/source, mob/living/target) @@ -112,10 +113,10 @@ /// Used instead of cooldowns, so we can give feedback when it's ready again var/riposte_ready = TRUE -/datum/heretic_knowledge/blade_dance/on_gain(mob/user) +/datum/heretic_knowledge/blade_dance/on_gain(mob/user, datum/antagonist/heretic/our_heretic) RegisterSignal(user, COMSIG_HUMAN_CHECK_SHIELDS, PROC_REF(on_shield_reaction)) -/datum/heretic_knowledge/blade_dance/on_lose(mob/user) +/datum/heretic_knowledge/blade_dance/on_lose(mob/user, datum/antagonist/heretic/our_heretic) UnregisterSignal(user, COMSIG_HUMAN_CHECK_SHIELDS) /datum/heretic_knowledge/blade_dance/proc/on_shield_reaction( @@ -201,12 +202,11 @@ /datum/heretic_knowledge/mark/blade_mark/create_mark(mob/living/source, mob/living/target) var/datum/status_effect/eldritch/blade/blade_mark = ..() - if(!istype(blade_mark)) - return - - var/area/to_lock_to = get_area(target) - blade_mark.locked_to = to_lock_to - to_chat(target, span_hypnophrase("An otherworldly force is compelling you to stay in [get_area_name(to_lock_to)]!")) + if(istype(blade_mark)) + var/area/to_lock_to = get_area(target) + blade_mark.locked_to = to_lock_to + to_chat(target, span_hypnophrase("An otherworldly force is compelling you to stay in [get_area_name(to_lock_to)]!")) + return blade_mark /datum/heretic_knowledge/mark/blade_mark/trigger_mark(mob/living/source, mob/living/target) . = ..() @@ -215,7 +215,18 @@ source.apply_status_effect(/datum/status_effect/protective_blades, 60 SECONDS, 1, 20, 0 SECONDS) /datum/heretic_knowledge/knowledge_ritual/blade + next_knowledge = list(/datum/heretic_knowledge/spell/realignment) + route = PATH_BLADE + +/datum/heretic_knowledge/spell/realignment + name = "Realignment" + desc = "Grants you Realignment a spell that wil realign your body rapidly for a short period. \ + During this process, you will rapidly regenerate stamina and stuns, however, you will be unable to attack. \ + This spell can be casted in rapid succession, but doing so will increase the cooldown." + gain_text = "In the flurry of death, he found peace within himself. Despite insurmountable odds, he forged on." next_knowledge = list(/datum/heretic_knowledge/duel_stance) + spell_to_add = /datum/action/cooldown/spell/realignment + cost = 1 route = PATH_BLADE /// The amount of blood flow reduced per level of severity of gained bleeding wounds for Stance of the Torn Champion. @@ -239,7 +250,7 @@ /// Whether we're currently in duelist stance, gaining certain buffs (low health) var/in_duelist_stance = FALSE -/datum/heretic_knowledge/duel_stance/on_gain(mob/user) +/datum/heretic_knowledge/duel_stance/on_gain(mob/user, datum/antagonist/heretic/our_heretic) ADD_TRAIT(user, TRAIT_NODISMEMBER, type) RegisterSignal(user, COMSIG_PARENT_EXAMINE, PROC_REF(on_examine)) RegisterSignal(user, COMSIG_CARBON_GAIN_WOUND, PROC_REF(on_wound_gain)) @@ -247,7 +258,7 @@ on_health_update(user) // Run this once, so if the knowledge is learned while hurt it activates properly -/datum/heretic_knowledge/duel_stance/on_lose(mob/user) +/datum/heretic_knowledge/duel_stance/on_lose(mob/user, datum/antagonist/heretic/our_heretic) REMOVE_TRAIT(user, TRAIT_NODISMEMBER, type) if(in_duelist_stance) REMOVE_TRAIT(user, TRAIT_HARDLY_WOUNDED, type) @@ -298,6 +309,10 @@ a flurry of blades, neither hitting their mark, for the Champion was indomitable." next_knowledge = list(/datum/heretic_knowledge/spell/furious_steel) route = PATH_BLADE + /// How much force do we apply to the offhand? + var/offand_force_decrement = 0 + /// How much force was the last weapon we offhanded with? If it's different, we need to re-calculate the decrement + var/last_weapon_force = -1 /datum/heretic_knowledge/blade_upgrade/blade/do_melee_effects(mob/living/source, mob/living/target, obj/item/melee/sickly_blade/blade) if(target == source) @@ -317,18 +332,36 @@ /datum/heretic_knowledge/blade_upgrade/blade/proc/follow_up_attack(mob/living/source, mob/living/target, obj/item/melee/sickly_blade/blade) if(QDELETED(source) || QDELETED(target) || QDELETED(blade)) return - // Sanity to ensure that the blade we're delivering - // an offhand attack with is actually our offhand + // Sanity to ensure that the blade we're delivering an offhand attack with is ACTUALLY our offhand if(blade != source.get_inactive_held_item()) return + // And we easily could've moved away if(!source.Adjacent(target)) return - // Blade are 17 force: 17 + 17 = 34 (3 hits to crit, unarmored) - // So, -5 force is put on the offhand blade: 17 + 12 = 29 (4 hits to crit, unarmored) - blade.force -= 5 + // Check if we need to recaclulate our offhand force + // This is just so we don't run this block every attack, that's wasteful + if(last_weapon_force != blade.force) + offand_force_decrement = 0 + // We want to make sure that the offhand blade increases their hits to crit by one, just about + // So, let's do some quick math. Yes this'll be inaccurate if their mainhand blade is modified (whetstone), no I don't care + // Find how much force we need to detract from the second blade + var/hits_to_crit_on_average = ROUND_UP(100 / (blade.force * 2)) + while(hits_to_crit_on_average <= 3) // 3 hits and beyond is a bit too absurd + if(offand_force_decrement + 2 > blade.force * 0.5) // But also cutting the force beyond half is absurd + break + + offand_force_decrement += 2 + hits_to_crit_on_average = ROUND_UP(100 / (blade.force * 2 - offand_force_decrement)) + + // Save the force as our last weapon force + last_weapon_force = blade.force + // Subtract the decrement + blade.force -= offand_force_decrement + // Perform the offhand attack blade.melee_attack_chain(source, target) - blade.force += 5 + // Restore the force. + blade.force = last_weapon_force /datum/heretic_knowledge/spell/furious_steel name = "Furious Steel" diff --git a/code/modules/antagonists/heretic/knowledge/flesh_lore.dm b/code/modules/antagonists/heretic/knowledge/flesh_lore.dm index 67684c00773..d315a566ea9 100644 --- a/code/modules/antagonists/heretic/knowledge/flesh_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/flesh_lore.dm @@ -17,6 +17,7 @@ * * Mark of Flesh * Ritual of Knowledge + * Flesh Surgery * Raw Ritual * > Sidepaths: * Blood Siphon @@ -45,11 +46,8 @@ limit = 3 // Bumped up so they can arm up their ghouls too. route = PATH_FLESH -/datum/heretic_knowledge/limited_amount/starting/base_flesh/on_research(mob/user) +/datum/heretic_knowledge/limited_amount/starting/base_flesh/on_research(mob/user, datum/antagonist/heretic/our_heretic) . = ..() - var/datum/antagonist/heretic/our_heretic = IS_HERETIC(user) - our_heretic.heretic_path = route - var/datum/objective/heretic_summon/summon_objective = new() summon_objective.owner = our_heretic.owner our_heretic.objectives += summon_objective @@ -68,10 +66,10 @@ cost = 1 route = PATH_FLESH -/datum/heretic_knowledge/limited_amount/flesh_grasp/on_gain(mob/user) +/datum/heretic_knowledge/limited_amount/flesh_grasp/on_gain(mob/user, datum/antagonist/heretic/our_heretic) RegisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK, PROC_REF(on_mansus_grasp)) -/datum/heretic_knowledge/limited_amount/flesh_grasp/on_lose(mob/user) +/datum/heretic_knowledge/limited_amount/flesh_grasp/on_lose(mob/user, datum/antagonist/heretic/our_heretic) UnregisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK) /datum/heretic_knowledge/limited_amount/flesh_grasp/proc/on_mansus_grasp(mob/living/source, mob/living/target) @@ -219,7 +217,19 @@ mark_type = /datum/status_effect/eldritch/flesh /datum/heretic_knowledge/knowledge_ritual/flesh + next_knowledge = list(/datum/heretic_knowledge/spell/flesh_surgery) + route = PATH_FLESH + +/datum/heretic_knowledge/spell/flesh_surgery + name = "Knitting of Flesh" + desc = "Grants you the spell Knit Flesh. This spell allows you to remove organs from victims \ + without requiring a lengthy surgery. This process is much longer if the target is not dead. \ + This spell also allows you to heal your minions and summons, or restore failing organs to acceptable status." + gain_text = "But they were not out of my reach for long. With every step, the screams grew, until at last \ + I learned that they could be silenced." next_knowledge = list(/datum/heretic_knowledge/summon/raw_prophet) + spell_to_add = /datum/action/cooldown/spell/touch/flesh_surgery + cost = 1 route = PATH_FLESH /datum/heretic_knowledge/summon/raw_prophet diff --git a/code/modules/antagonists/heretic/knowledge/general_side.dm b/code/modules/antagonists/heretic/knowledge/general_side.dm index fafaa3f77ba..b771108e272 100644 --- a/code/modules/antagonists/heretic/knowledge/general_side.dm +++ b/code/modules/antagonists/heretic/knowledge/general_side.dm @@ -34,7 +34,7 @@ if(!target_finder) CRASH("Heretic datum didn't have a hunt_and_sacrifice knowledge learned, what?") - if(!target_finder.obtain_targets(user)) + if(!target_finder.obtain_targets(user, heretic_datum = heretic_datum)) loc.balloon_alert(user, "ritual failed, no targets found!") return FALSE diff --git a/code/modules/antagonists/heretic/knowledge/rust_lore.dm b/code/modules/antagonists/heretic/knowledge/rust_lore.dm index ac33a74387c..f18eefa9a8f 100644 --- a/code/modules/antagonists/heretic/knowledge/rust_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/rust_lore.dm @@ -12,6 +12,7 @@ * * Mark of Rust * Ritual of Knowledge + * Rust Construction * Aggressive Spread * > Sidepaths: * Curse of Corrosion @@ -39,11 +40,6 @@ result_atoms = list(/obj/item/melee/sickly_blade/rust) route = PATH_RUST -/datum/heretic_knowledge/limited_amount/starting/base_rust/on_research(mob/user) - . = ..() - var/datum/antagonist/heretic/our_heretic = IS_HERETIC(user) - our_heretic.heretic_path = route - /datum/heretic_knowledge/rust_fist name = "Grasp of Rust" desc = "Your Mansus Grasp will deal 500 damage to non-living matter and rust any surface it touches. \ @@ -53,11 +49,11 @@ cost = 1 route = PATH_RUST -/datum/heretic_knowledge/rust_fist/on_gain(mob/user) +/datum/heretic_knowledge/rust_fist/on_gain(mob/user, datum/antagonist/heretic/our_heretic) RegisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK, PROC_REF(on_mansus_grasp)) RegisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK_SECONDARY, PROC_REF(on_secondary_mansus_grasp)) -/datum/heretic_knowledge/rust_fist/on_lose(mob/user) +/datum/heretic_knowledge/rust_fist/on_lose(mob/user, datum/antagonist/heretic/our_heretic) UnregisterSignal(user, list(COMSIG_HERETIC_MANSUS_GRASP_ATTACK, COMSIG_HERETIC_MANSUS_GRASP_ATTACK_SECONDARY)) /datum/heretic_knowledge/rust_fist/proc/on_mansus_grasp(mob/living/source, mob/living/target) @@ -87,11 +83,11 @@ cost = 1 route = PATH_RUST -/datum/heretic_knowledge/rust_regen/on_gain(mob/user) +/datum/heretic_knowledge/rust_regen/on_gain(mob/user, datum/antagonist/heretic/our_heretic) RegisterSignal(user, COMSIG_MOVABLE_MOVED, PROC_REF(on_move)) RegisterSignal(user, COMSIG_LIVING_LIFE, PROC_REF(on_life)) -/datum/heretic_knowledge/rust_regen/on_lose(mob/user) +/datum/heretic_knowledge/rust_regen/on_lose(mob/user, datum/antagonist/heretic/our_heretic) UnregisterSignal(user, list(COMSIG_MOVABLE_MOVED, COMSIG_LIVING_LIFE)) /* @@ -144,7 +140,18 @@ mark_type = /datum/status_effect/eldritch/rust /datum/heretic_knowledge/knowledge_ritual/rust + next_knowledge = list(/datum/heretic_knowledge/spell/rust_construction) + route = PATH_RUST + +/datum/heretic_knowledge/spell/rust_construction + name = "Rust Construction" + desc = "Grants you Rust Construction, a spell that allows you to raise a wall out of a rusted floor. \ + Anyone overtop the wall will be throw aside (or upwards) and sustain damage." + gain_text = "Images of foreign and ominous structures began to dance in my mind. Covered head to toe in thick rust, \ + they no longer looked man made. Or perhaps they never were in the first place." next_knowledge = list(/datum/heretic_knowledge/spell/area_conversion) + spell_to_add = /datum/action/cooldown/spell/pointed/rust_construction + cost = 1 route = PATH_RUST /datum/heretic_knowledge/spell/area_conversion @@ -221,7 +228,7 @@ TRAIT_NOBREATH, ) -/datum/heretic_knowledge/ultimate/rust_final/on_research(mob/user) +/datum/heretic_knowledge/ultimate/rust_final/on_research(mob/user, datum/antagonist/heretic/our_heretic) . = ..() // This map doesn't have a Bridge, for some reason?? // Let them complete the ritual anywhere diff --git a/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm b/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm index 3415b9f5603..0e629388134 100644 --- a/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm +++ b/code/modules/antagonists/heretic/knowledge/sacrifice_knowledge/sacrifice_knowledge.dm @@ -16,6 +16,8 @@ cost = 0 priority = MAX_KNOWLEDGE_PRIORITY // Should be at the top route = PATH_START + /// How many targets do we generate? + var/num_targets_to_generate = 5 /// Whether we've generated a heretic sacrifice z-level yet, from any heretic. var/static/heretic_level_generated = FALSE /// A weakref to the mind of our heretic. @@ -23,27 +25,29 @@ /// Lazylist of minds that we won't pick as targets. var/list/datum/mind/target_blacklist /// An assoc list of [ref] to [timers] - a list of all the timers of people in the shadow realm currently - var/return_timers + var/list/return_timers /datum/heretic_knowledge/hunt_and_sacrifice/Destroy(force, ...) heretic_mind = null LAZYCLEARLIST(target_blacklist) return ..() -/datum/heretic_knowledge/hunt_and_sacrifice/on_research(mob/user, regained = FALSE) +/datum/heretic_knowledge/hunt_and_sacrifice/on_research(mob/user, datum/antagonist/heretic/our_heretic) . = ..() - obtain_targets(user, silent = TRUE) - heretic_mind = user.mind + obtain_targets(user, silent = TRUE, heretic_datum = our_heretic) + heretic_mind = our_heretic.owner if(!heretic_level_generated) heretic_level_generated = TRUE - message_admins("Generating z-level for heretic sacrifices...") + log_game("Generating z-level for heretic sacrifices...") INVOKE_ASYNC(src, PROC_REF(generate_heretic_z_level)) /// Generate the sacrifice z-level. /datum/heretic_knowledge/hunt_and_sacrifice/proc/generate_heretic_z_level() var/datum/map_template/heretic_sacrifice_level/new_level = new() if(!new_level.load_new_z()) - message_admins("The heretic sacrifice z-level failed to load. Any heretics are gonna have a field day disemboweling people, probably. Up to you if you're fine with it.") + log_game("The heretic sacrifice z-level failed to load.") + message_admins("The heretic sacrifice z-level failed to load. Heretic sacrifices won't be teleported to the shadow realm. \ + If you want, you can spawn an /obj/effect/landmark/heretic somewhere to stop that from happening.") CRASH("Failed to initialize heretic sacrifice z-level!") /datum/heretic_knowledge/hunt_and_sacrifice/recipe_snowflake_check(mob/living/user, list/atoms, list/selected_atoms, turf/loc) @@ -79,7 +83,7 @@ /datum/heretic_knowledge/hunt_and_sacrifice/on_finished_recipe(mob/living/user, list/selected_atoms, turf/loc) var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user) if(!LAZYLEN(heretic_datum.sac_targets)) - if(obtain_targets(user)) + if(obtain_targets(user, heretic_datum = heretic_datum)) return TRUE else loc.balloon_alert(user, "ritual failed, no targets found!") @@ -94,7 +98,7 @@ * * Returns FALSE if no targets are found, TRUE if the targets list was populated. */ -/datum/heretic_knowledge/hunt_and_sacrifice/proc/obtain_targets(mob/living/user, silent = FALSE) +/datum/heretic_knowledge/hunt_and_sacrifice/proc/obtain_targets(mob/living/user, silent = FALSE, datum/antagonist/heretic/heretic_datum) // First construct a list of minds that are valid objective targets. var/list/datum/mind/valid_targets = list() @@ -143,18 +147,12 @@ valid_targets -= department_mind break - // Final target, just get someone random. - final_targets += pick_n_take(valid_targets) - - // If any of our targets failed to aquire, - // Let's run a loop until we get four total, grabbing random targets. + // Now grab completely random targets until we'll full var/target_sanity = 0 - while(length(final_targets) < 4 && length(valid_targets) > 4 && target_sanity < 25) + while(length(final_targets) < num_targets_to_generate && length(valid_targets) > num_targets_to_generate && target_sanity < 25) final_targets += pick_n_take(valid_targets) target_sanity++ - var/datum/antagonist/heretic/heretic_datum = IS_HERETIC(user) - if(!silent) to_chat(user, span_danger("Your targets have been determined. Your Living Heart will allow you to track their position. Go and sacrifice them!")) @@ -216,9 +214,9 @@ if(!LAZYLEN(GLOB.heretic_sacrifice_landmarks)) CRASH("[type] - begin_sacrifice was called, but no heretic sacrifice landmarks were found!") - var/obj/effect/landmark/heretic/destination_landmark = GLOB.heretic_sacrifice_landmarks[our_heretic.heretic_path] + var/obj/effect/landmark/heretic/destination_landmark = GLOB.heretic_sacrifice_landmarks[our_heretic.heretic_path] || GLOB.heretic_sacrifice_landmarks[PATH_START] if(!destination_landmark) - CRASH("[type] - begin_sacrifice could not find a destination landmark to send the sacrifice! (heretic's path: [our_heretic.heretic_path])") + CRASH("[type] - begin_sacrifice could not find a destination landmark OR default landmark to send the sacrifice! (Heretic's path: [our_heretic.heretic_path])") var/turf/destination = get_turf(destination_landmark) @@ -241,6 +239,7 @@ // If our target is dead, try to revive them // and if we fail to revive them, don't proceede the chain + sac_target.adjustOxyLoss(-100, FALSE) if(!sac_target.heal_and_revive(50, span_danger("[sac_target]'s heart begins to beat with an unholy force as they return from death!"))) return @@ -283,7 +282,8 @@ // If our target died during the (short) wait timer, // and we fail to revive them (using a lower number than before), // just disembowel them and stop the chain - if(!sac_target.heal_and_revive(75, span_danger("[sac_target]'s heart begins to beat with an unholy force as they return from death!"))) + sac_target.adjustOxyLoss(-100, FALSE) + if(!sac_target.heal_and_revive(60, span_danger("[sac_target]'s heart begins to beat with an unholy force as they return from death!"))) disembowel_target(sac_target) return @@ -368,6 +368,7 @@ sac_target.remove_status_effect(/datum/status_effect/unholy_determination) sac_target.reagents?.del_reagent(/datum/reagent/inverse/helgrasp/heretic) sac_target.clear_mood_event("shadow_realm") + sac_target.gain_trauma(/datum/brain_trauma/mild/phobia/supernatural, TRAUMA_RESILIENCE_MAGIC) // Wherever we end up, we sure as hell won't be able to explain sac_target.adjust_timed_status_effect(40 SECONDS, /datum/status_effect/speech/slurring/heretic) diff --git a/code/modules/antagonists/heretic/knowledge/starting_lore.dm b/code/modules/antagonists/heretic/knowledge/starting_lore.dm index ad05e3f55e3..756d00f2eee 100644 --- a/code/modules/antagonists/heretic/knowledge/starting_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/starting_lore.dm @@ -51,10 +51,9 @@ GLOBAL_LIST_INIT(heretic_start_knowledge, initialize_starting_knowledge()) /// The typepath of the organ type required for our heart. var/required_organ_type = /obj/item/organ/internal/heart -/datum/heretic_knowledge/living_heart/on_research(mob/user) +/datum/heretic_knowledge/living_heart/on_research(mob/user, datum/antagonist/heretic/our_heretic) . = ..() - var/datum/antagonist/heretic/our_heretic = IS_HERETIC(user) var/obj/item/organ/where_to_put_our_heart = user.getorganslot(our_heretic.living_heart_organ_slot) // Our heart slot is not valid to put a heart if(!is_valid_heart(where_to_put_our_heart)) @@ -93,8 +92,7 @@ GLOBAL_LIST_INIT(heretic_start_knowledge, initialize_starting_knowledge()) else to_chat(user, span_boldnotice("You don't have a heart, or any chest organs for that matter. You didn't get a Living Heart because of it.")) -/datum/heretic_knowledge/living_heart/on_lose(mob/user) - var/datum/antagonist/heretic/our_heretic = IS_HERETIC(user) +/datum/heretic_knowledge/living_heart/on_lose(mob/user, datum/antagonist/heretic/our_heretic) var/obj/item/organ/our_living_heart = user.getorganslot(our_heretic.living_heart_organ_slot) if(our_living_heart) qdel(our_living_heart.GetComponent(/datum/component/living_heart)) diff --git a/code/modules/antagonists/heretic/knowledge/void_lore.dm b/code/modules/antagonists/heretic/knowledge/void_lore.dm index f7c5489fcca..df7e921273d 100644 --- a/code/modules/antagonists/heretic/knowledge/void_lore.dm +++ b/code/modules/antagonists/heretic/knowledge/void_lore.dm @@ -12,6 +12,7 @@ * * Mark of Void * Ritual of Knowledge + * Cone of Cold * Void Phase * > Sidepaths: * Carving Knife @@ -37,11 +38,6 @@ result_atoms = list(/obj/item/melee/sickly_blade/void) route = PATH_VOID -/datum/heretic_knowledge/limited_amount/starting/base_void/on_research(mob/user) - . = ..() - var/datum/antagonist/heretic/our_heretic = IS_HERETIC(user) - our_heretic.heretic_path = route - /datum/heretic_knowledge/limited_amount/starting/base_void/recipe_snowflake_check(mob/living/user, list/atoms, list/selected_atoms, turf/loc) if(!isopenturf(loc)) loc.balloon_alert(user, "ritual failed, invalid location!") @@ -63,10 +59,10 @@ cost = 1 route = PATH_VOID -/datum/heretic_knowledge/void_grasp/on_gain(mob/user) +/datum/heretic_knowledge/void_grasp/on_gain(mob/user, datum/antagonist/heretic/our_heretic) RegisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK, PROC_REF(on_mansus_grasp)) -/datum/heretic_knowledge/void_grasp/on_lose(mob/user) +/datum/heretic_knowledge/void_grasp/on_lose(mob/user, datum/antagonist/heretic/our_heretic) UnregisterSignal(user, COMSIG_HERETIC_MANSUS_GRASP_ATTACK) /datum/heretic_knowledge/void_grasp/proc/on_mansus_grasp(mob/living/source, mob/living/target) @@ -94,11 +90,11 @@ cost = 1 route = PATH_VOID -/datum/heretic_knowledge/cold_snap/on_gain(mob/user) +/datum/heretic_knowledge/cold_snap/on_gain(mob/user, datum/antagonist/heretic/our_heretic) ADD_TRAIT(user, TRAIT_RESISTCOLD, type) ADD_TRAIT(user, TRAIT_NOBREATH, type) -/datum/heretic_knowledge/cold_snap/on_lose(mob/user) +/datum/heretic_knowledge/cold_snap/on_lose(mob/user, datum/antagonist/heretic/our_heretic) REMOVE_TRAIT(user, TRAIT_RESISTCOLD, type) REMOVE_TRAIT(user, TRAIT_NOBREATH, type) @@ -113,15 +109,26 @@ mark_type = /datum/status_effect/eldritch/void /datum/heretic_knowledge/knowledge_ritual/void + next_knowledge = list(/datum/heretic_knowledge/spell/void_cone) + route = PATH_VOID + +/datum/heretic_knowledge/spell/void_cone + name = "Void Blast" + desc = "Grants you Void Blast, a spell that shoots out a freezing blast in a code ahead of you, \ + freezing the ground and any victims within." + gain_text = "Every door I open racks my body. I am afraid of what is behind them. Someone is expecting me, \ + and my legs start to drag. Is that... snow?" next_knowledge = list(/datum/heretic_knowledge/spell/void_phase) + spell_to_add = /datum/action/cooldown/spell/cone/staggered/cone_of_cold/void + cost = 1 route = PATH_VOID /datum/heretic_knowledge/spell/void_phase name = "Void Phase" desc = "Grants you Void Phase, a long range targeted teleport spell. \ Additionally causes damage to heathens around your original and target destination." - gain_text = "The entity calls themself the Aristocrat. They effortlessly walk through air like\ - nothing leaving a harsh, cold breeze in their wake. They disappear, and I am left in the snow." + gain_text = "The entity calls themself the Aristocrat. They effortlessly walk through air like \ + nothing - leaving a harsh, cold breeze in their wake. They disappear, and I am left in the blizzard." next_knowledge = list( /datum/heretic_knowledge/blade_upgrade/void, /datum/heretic_knowledge/reroll_targets, @@ -204,7 +211,7 @@ RegisterSignal(user, COMSIG_LIVING_LIFE, PROC_REF(on_life)) RegisterSignal(user, COMSIG_LIVING_DEATH, PROC_REF(on_death)) -/datum/heretic_knowledge/ultimate/void_final/on_lose(mob/user) +/datum/heretic_knowledge/ultimate/void_final/on_lose(mob/user, datum/antagonist/heretic/our_heretic) on_death() // Losing is pretty much dying. I think RegisterSignal(user, list(COMSIG_LIVING_LIFE, COMSIG_LIVING_DEATH)) @@ -243,7 +250,7 @@ * * Stop the storm when the heretic passes away. */ -/datum/heretic_knowledge/ultimate/void_final/proc/on_death() +/datum/heretic_knowledge/ultimate/void_final/proc/on_death(datum/source) SIGNAL_HANDLER if(sound_loop) diff --git a/code/modules/antagonists/heretic/magic/blood_cleave.dm b/code/modules/antagonists/heretic/magic/blood_cleave.dm index 8bcd35c1107..c62312f3dd4 100644 --- a/code/modules/antagonists/heretic/magic/blood_cleave.dm +++ b/code/modules/antagonists/heretic/magic/blood_cleave.dm @@ -7,15 +7,18 @@ ranged_mousepointer = 'icons/effects/mouse_pointers/throw_target.dmi' school = SCHOOL_FORBIDDEN - cooldown_time = 35 SECONDS + cooldown_time = 40 SECONDS - invocation = "CL'VE" + invocation = "CL'VE!" invocation_type = INVOCATION_WHISPER spell_requirements = NONE cast_range = 9 + /// The radius of the cleave effect var/cleave_radius = 1 + /// What type of wound we apply + var/wound_type = /datum/wound/slash/critical /datum/action/cooldown/spell/pointed/cleave/is_valid_target(atom/cast_on) return ..() && ishuman(cast_on) @@ -27,7 +30,7 @@ nearby += nearby_human for(var/mob/living/carbon/human/victim as anything in nearby) - if(victim == owner) + if(victim == owner || IS_HERETIC_OR_MONSTER(victim)) continue if(victim.can_block_magic()) victim.visible_message( @@ -45,17 +48,18 @@ ) var/obj/item/bodypart/bodypart = pick(victim.bodyparts) - var/datum/wound/slash/critical/crit_wound = new() + var/datum/wound/slash/crit_wound = new wound_type() crit_wound.apply_wound(bodypart) victim.apply_damage(20, BURN, wound_bonus = CANT_WOUND) - new /obj/effect/temp_visual/cleave(victim.drop_location()) + new /obj/effect/temp_visual/cleave(get_turf(victim)) return TRUE /datum/action/cooldown/spell/pointed/cleave/long name = "Lesser Cleave" - cooldown_time = 65 SECONDS + cooldown_time = 60 SECONDS + wound_type = /datum/wound/slash/severe /obj/effect/temp_visual/cleave icon = 'icons/effects/eldritch.dmi' diff --git a/code/modules/antagonists/heretic/magic/blood_siphon.dm b/code/modules/antagonists/heretic/magic/blood_siphon.dm index 406d3123d78..1609991a6eb 100644 --- a/code/modules/antagonists/heretic/magic/blood_siphon.dm +++ b/code/modules/antagonists/heretic/magic/blood_siphon.dm @@ -10,7 +10,7 @@ school = SCHOOL_FORBIDDEN cooldown_time = 15 SECONDS - invocation = "FL'MS O'ET'RN'ITY" + invocation = "FL'MS O'ET'RN'ITY." invocation_type = INVOCATION_WHISPER spell_requirements = NONE diff --git a/code/modules/antagonists/heretic/magic/fire_blast.dm b/code/modules/antagonists/heretic/magic/fire_blast.dm new file mode 100644 index 00000000000..e6c70203d87 --- /dev/null +++ b/code/modules/antagonists/heretic/magic/fire_blast.dm @@ -0,0 +1,178 @@ +/datum/action/cooldown/spell/charged/beam/fire_blast + name = "Volcano Blast" + desc = "Charge up a blast of fire that chains between nearby targets, setting them ablaze. \ + Targets already on fire will take priority. If the target fails to catch ablaze, or \ + extinguishes themselves before it bounces, the chain will stop." + background_icon_state = "bg_ecult" + icon_icon = 'icons/mob/actions/actions_ecult.dmi' + button_icon_state = "flames" + sound = 'sound/magic/fireball.ogg' + + school = SCHOOL_FORBIDDEN + cooldown_time = 45 SECONDS + + invocation = "V'LC'N!" + invocation_type = INVOCATION_SHOUT + spell_requirements = NONE + channel_time = 5 SECONDS + target_radius = 5 + max_beam_bounces = 4 + + /// How long the beam visual lasts, also used to determine time between jumps + var/beam_duration = 2 SECONDS + +/datum/action/cooldown/spell/charged/beam/fire_blast/cast(atom/cast_on) + if(isliving(cast_on)) + var/mob/living/caster = cast_on + // Caster becomes fireblasted, but in a good way - heals damage over time + caster.apply_status_effect(/datum/status_effect/fire_blasted, beam_duration, -2) + return ..() + +/datum/action/cooldown/spell/charged/beam/fire_blast/send_beam(atom/origin, mob/living/carbon/to_beam, bounces = 4) + // Send a beam from the origin to the hit mob + origin.Beam(to_beam, icon_state = "solar_beam", time = beam_duration, beam_type = /obj/effect/ebeam/fire) + + // If they block the magic, the chain wont necessarily stop, + // but likely will (due to them not catching on fire) + if(to_beam.can_block_magic(antimagic_flags)) + to_beam.visible_message( + span_warning("[to_beam] absorbs the spell, remaining unharmed!"), + span_userdanger("You absorb the spell, remaining unharmed!"), + ) + // Apply status effect but with no overlay + to_beam.apply_status_effect(/datum/status_effect/fire_blasted) + + // Otherwise, if unblocked apply the damage and set them up + else + to_beam.apply_damage(20, BURN, wound_bonus = 5) + to_beam.adjust_fire_stacks(3) + to_beam.ignite_mob() + // Apply the fire blast status effect to show they got blasted + to_beam.apply_status_effect(/datum/status_effect/fire_blasted, beam_duration * 0.5) + + // We can keep bouncing, try to continue the chain + if(bounces >= 1) + playsound(to_beam, sound, 50, vary = TRUE, extrarange = -1) + // Chain continues shortly after. If they extinguish themselves in this time, the chain will stop anyways. + addtimer(CALLBACK(src, PROC_REF(continue_beam), to_beam, bounces), beam_duration * 0.5) + + else + playsound(to_beam, sound, 50, vary = TRUE, frequency = 12000) + // We hit the maximum chain length, apply a bonus for managing it + new /obj/effect/temp_visual/fire_blast_bonus(to_beam.loc) + for(var/mob/living/nearby_living in range(1, to_beam)) + if(IS_HERETIC_OR_MONSTER(nearby_living) || nearby_living == owner) + continue + nearby_living.Knockdown(0.8 SECONDS) + nearby_living.apply_damage(15, BURN, wound_bonus = 5) + nearby_living.adjust_fire_stacks(2) + nearby_living.ignite_mob() + +/// Timer callback to continue the chain, calling send_fire_bream recursively. +/datum/action/cooldown/spell/charged/beam/fire_blast/proc/continue_beam(mob/living/carbon/beamed, bounces) + // We will only continue the chain if we exist, are still on fire, and still have the status effect + if(QDELETED(beamed) || !beamed.on_fire || !beamed.has_status_effect(/datum/status_effect/fire_blasted)) + return + // We fulfilled the conditions, get the next target + var/mob/living/carbon/to_beam_next = get_target(beamed) + if(isnull(to_beam_next)) // No target = no chain + return + + // Chain again! Recursively + send_beam(beamed, to_beam_next, bounces - 1) + +/// Pick a carbon mob in a radius around us that we can reach. +/// Mobs on fire will have priority and be targeted over others. +/// Returns null or a carbon mob. +/datum/action/cooldown/spell/charged/beam/fire_blast/get_target(atom/center) + var/list/possibles = list() + var/list/priority_possibles = list() + for(var/mob/living/carbon/to_check in view(target_radius, center)) + if(to_check == center || to_check == owner) + continue + if(to_check.has_status_effect(/datum/status_effect/fire_blasted)) // Already blasted + continue + if(IS_HERETIC_OR_MONSTER(to_check)) + continue + if(!length(get_path_to(center, to_check, max_distance = target_radius, simulated_only = FALSE))) + continue + + possibles += to_check + if(to_check.on_fire && to_check.stat != DEAD) + priority_possibles += to_check + + if(!length(possibles)) + return null + + return length(priority_possibles) ? pick(priority_possibles) : pick(possibles) + +/** + * Status effect applied when someone's hit by the fire blast. + * + * Applies an overlay, then causes a damage over time (or heal over time) + */ +/datum/status_effect/fire_blasted + id = "fire_blasted" + alert_type = null + duration = 5 SECONDS + tick_interval = 0.5 SECONDS + /// How much fire / stam to do per tick (stamina damage is doubled this) + var/tick_damage = 1 + /// How long does the animation of the appearance last? If 0 or negative, we make no overlay + var/animate_duration = 0.75 SECONDS + +/datum/status_effect/fire_blasted/on_creation(mob/living/new_owner, animate_duration = -1, tick_damage = 1) + src.animate_duration = animate_duration + src.tick_damage = tick_damage + return ..() + +/datum/status_effect/fire_blasted/on_apply() + if(owner.on_fire && animate_duration > 0 SECONDS) + var/image/warning_sign = image(icon = 'icons/effects/effects.dmi', icon_state = "blessed", layer = BELOW_MOB_LAYER, loc = owner) + owner.flick_overlay_view(warning_sign, initial(duration)) + warning_sign.alpha = 50 + animate(warning_sign, alpha = 255, time = animate_duration) + + return TRUE + +/datum/status_effect/fire_blasted/tick(delta_time, times_fired) + owner.adjustFireLoss(tick_damage) + owner.adjustStaminaLoss(2 * tick_damage) + +// The beam fireblast spits out, causes people to walk through it to be on fire +/obj/effect/ebeam/fire + name = "fire beam" + +/obj/effect/ebeam/fire/Initialize(mapload) + . = ..() + var/static/list/loc_connections = list( + COMSIG_ATOM_ENTERED = PROC_REF(on_entered), + ) + AddElement(/datum/element/connect_loc, loc_connections) + + if(!isturf(loc) || mapload) // idk if this would ever be maploaded but you never know + return + + for(var/mob/living/living_mob in loc) + on_entered(entered = living_mob) + +/obj/effect/ebeam/fire/proc/on_entered(datum/source, atom/movable/entered) + SIGNAL_HANDLER + + if(!isliving(entered)) + return + var/mob/living/living_entered = entered + if(IS_HERETIC_OR_MONSTER(living_entered) || living_entered.has_status_effect(/datum/status_effect/fire_blasted)) + return + living_entered.apply_damage(10, BURN, wound_bonus = 5) + living_entered.adjust_fire_stacks(2) + living_entered.ignite_mob() + // Apply the fireblasted effect - no overlay + living_entered.apply_status_effect(/datum/status_effect/fire_blasted) + +// Visual effect played when we hit the max bounces +/obj/effect/temp_visual/fire_blast_bonus + name = "fire blast" + icon = 'icons/effects/effects.dmi' + icon_state = "explosion" + duration = 1 SECONDS diff --git a/code/modules/antagonists/heretic/magic/flesh_surgery.dm b/code/modules/antagonists/heretic/magic/flesh_surgery.dm new file mode 100644 index 00000000000..44f97365bc1 --- /dev/null +++ b/code/modules/antagonists/heretic/magic/flesh_surgery.dm @@ -0,0 +1,232 @@ +/datum/action/cooldown/spell/touch/flesh_surgery + name = "Knit Flesh" + desc = "A touch spell that allows you to either harvest or restore flesh of target. \ + Left-clicking will extract the organs of a victim without needing to complete surgery or disembowel. \ + Right-clicking, if done on summons or minions, will restore health. Can also be used to heal damaged organs." + background_icon_state = "bg_ecult" + icon_icon = 'icons/mob/actions/actions_ecult.dmi' + button_icon_state = "mad_touch" + sound = null + + school = SCHOOL_FORBIDDEN + cooldown_time = 20 SECONDS + invocation = "CL'M M'N!" // "CLAIM MINE", but also almost "KALI MA" + invocation_type = INVOCATION_SHOUT + spell_requirements = NONE + + hand_path = /obj/item/melee/touch_attack/flesh_surgery + can_cast_on_self = TRUE + + /// If used on an organ, how much percent of the organ's HP do we restore + var/organ_percent_healing = 0.5 + /// If used on a heretic mob, how much brute do we heal + var/monster_brute_healing = 10 + /// If used on a heretic mob, how much burn do we heal + var/monster_burn_healing = 5 + +/datum/action/cooldown/spell/touch/flesh_surgery/is_valid_target(atom/cast_on) + return isliving(cast_on) || isorgan(cast_on) + +/datum/action/cooldown/spell/touch/flesh_surgery/cast_on_hand_hit(obj/item/melee/touch_attack/hand, atom/victim, mob/living/carbon/caster) + if(isorgan(victim)) + return heal_organ(hand, victim, caster) + + if(isliving(victim)) + return steal_organ_from_mob(hand, victim, caster) + + return FALSE + +/datum/action/cooldown/spell/touch/flesh_surgery/cast_on_secondary_hand_hit(obj/item/melee/touch_attack/hand, atom/victim, mob/living/carbon/caster) + if(isorgan(victim)) + return SECONDARY_ATTACK_CALL_NORMAL + + if(isliving(victim)) + var/mob/living/mob_victim = victim + if(mob_victim.stat == DEAD || !IS_HERETIC_MONSTER(mob_victim)) + return SECONDARY_ATTACK_CALL_NORMAL + + if(heal_heretic_monster(hand, mob_victim, caster)) + return SECONDARY_ATTACK_CONTINUE_CHAIN + + return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN + +/datum/action/cooldown/spell/touch/flesh_surgery/register_hand_signals() + . = ..() + RegisterSignal(attached_hand, COMSIG_ITEM_REQUESTING_CONTEXT_FOR_TARGET, PROC_REF(add_item_context)) + attached_hand.item_flags |= ITEM_HAS_CONTEXTUAL_SCREENTIPS + +/datum/action/cooldown/spell/touch/flesh_surgery/unregister_hand_signals() + . = ..() + UnregisterSignal(attached_hand, COMSIG_ITEM_REQUESTING_CONTEXT_FOR_TARGET) + +/// Signal proc for [COMSIG_ITEM_REQUESTING_CONTEXT_FOR_TARGET] to add some context to the hand. +/datum/action/cooldown/spell/touch/flesh_surgery/proc/add_item_context(obj/item/melee/touch_attack/source, list/context, atom/victim, mob/living/user) + SIGNAL_HANDLER + + . = NONE + + if(isliving(victim)) + var/mob/living/mob_victim = victim + + if(iscarbon(mob_victim)) + context[SCREENTIP_CONTEXT_LMB] = "Extract organ" + . = CONTEXTUAL_SCREENTIP_SET + + if(IS_HERETIC_MONSTER(mob_victim)) + context[SCREENTIP_CONTEXT_RMB] = "Heal [ishuman(mob_victim) ? "minion" : "summon"]" + . = CONTEXTUAL_SCREENTIP_SET + + else if(isorgan(victim)) + context[SCREENTIP_CONTEXT_LMB] = "Heal organ" + . = CONTEXTUAL_SCREENTIP_SET + + return . + +/// If cast on an organ, we'll restore it's health and even un-fail it. +/datum/action/cooldown/spell/touch/flesh_surgery/proc/heal_organ(obj/item/melee/touch_attack/hand, obj/item/organ/to_heal, mob/living/carbon/caster) + to_heal.balloon_alert(caster, "healing organ...") + if(!do_after(caster, 1 SECONDS, to_heal, extra_checks = CALLBACK(src, PROC_REF(heal_checks), hand, to_heal, caster))) + to_heal.balloon_alert(caster, "interrupted!") + return FALSE + + var/organ_hp_to_heal = to_heal.maxHealth * organ_percent_healing + if(to_heal.damage < organ_hp_to_heal) + to_heal.setOrganDamage(organ_hp_to_heal) + to_heal.balloon_alert(caster, "organ healed") + playsound(to_heal, 'sound/magic/staff_healing.ogg', 30) + new /obj/effect/temp_visual/cult/sparks(get_turf(to_heal)) + caster.visible_message( + span_warning("[caster]'s hand glows a brilliant red as [caster.p_they()] restore \the [to_heal] to good condition!"), + span_notice("Your hand glows a brilliant red as you restore \the [to_heal] to good condition!"), + ) + else + to_heal.balloon_alert(caster, "already in good condition!") + + return TRUE + +/// If cast on a heretic monster who's not dead we'll heal it a bit. +/datum/action/cooldown/spell/touch/flesh_surgery/proc/heal_heretic_monster(obj/item/melee/touch_attack/hand, mob/living/to_heal, mob/living/carbon/caster) + var/what_are_we = ishuman(to_heal) ? "minion" : "summon" + to_heal.balloon_alert(caster, "healing [what_are_we]...") + if(!do_after(caster, 1 SECONDS, to_heal, extra_checks = CALLBACK(src, PROC_REF(heal_checks), hand, to_heal, caster))) + to_heal.balloon_alert(caster, "interrupted!") + return FALSE + + // Keep in mind that, for simplemobs(summons), this will just flat heal the combined value of both brute and burn healing, + // while for human minions(ghouls), this will heal brute and burn like normal. So be careful adjusting to bigger numbers + to_heal.balloon_alert(caster, "[what_are_we] healed") + to_heal.heal_overall_damage(monster_brute_healing, monster_burn_healing) + playsound(to_heal, 'sound/magic/staff_healing.ogg', 30) + new /obj/effect/temp_visual/cult/sparks(get_turf(to_heal)) + caster.visible_message( + span_warning("[caster]'s hand glows a brilliant red as [caster.p_they()] restore [to_heal] to good condition!"), + span_notice("Your hand glows a brilliant red as you restore [to_heal] to good condition!"), + ) + return TRUE + +/// If cast on a carbon, we'll try to steal one of their organs directly from their person. +/datum/action/cooldown/spell/touch/flesh_surgery/proc/steal_organ_from_mob(obj/item/melee/touch_attack/hand, mob/living/victim, mob/living/carbon/caster) + var/mob/living/carbon/carbon_victim = victim + if(!istype(carbon_victim) || !length(carbon_victim.internal_organs)) + victim.balloon_alert(caster, "no organs!") + return FALSE + + // Round u pto the nearest generic zone (body, chest, arm) + var/zone_to_check = check_zone(caster.zone_selected) + var/parsed_zone = parse_zone(zone_to_check) + + var/list/organs_we_can_remove = list() + for(var/obj/item/organ/organ as anything in carbon_victim.internal_organs) + // Only show organs which are in our generic zone + if(deprecise_zone(organ.zone) != zone_to_check) + continue + // Also, some organs to exclude. Don't remove vital (brains), don't remove synthetics, and don't remove unremovable + if(organ.organ_flags & (ORGAN_SYNTHETIC|ORGAN_VITAL|ORGAN_UNREMOVABLE)) + continue + + organs_we_can_remove[organ.name] = organ + + if(!length(organs_we_can_remove)) + victim.balloon_alert(caster, "no organs there!") + return FALSE + + var/chosen_organ = tgui_input_list(caster, "Which organ do you want to extract?", name, sort_list(organs_we_can_remove)) + if(isnull(chosen_organ)) + return FALSE + var/obj/item/organ/picked_organ = organs_we_can_remove[chosen_organ] + if(!istype(picked_organ) || !extraction_checks(picked_organ, hand, victim, caster)) + return FALSE + + // Don't let people stam crit into steal heart true combo + var/time_it_takes = carbon_victim.stat == DEAD ? 3 SECONDS : 15 SECONDS + + // Sure you can remove your own organs, fun party trick + if(carbon_victim == caster) + var/are_you_sure = tgui_alert(caster, "Are you sure you want to remove your own [chosen_organ]?", "Are you sure?", list("Yes", "No")) + if(are_you_sure != "Yes" || !extraction_checks(picked_organ, hand, victim, caster)) + return FALSE + + time_it_takes = 6 SECONDS + caster.visible_message( + span_danger("[caster]'s hand glows a brilliant red as [caster.p_they()] reach directly into [caster.p_their()] own [parsed_zone]!"), + span_userdanger("Your hand glows a brilliant red as you reach directly into your own [parsed_zone]!"), + ) + + else + carbon_victim.visible_message( + span_danger("[caster]'s hand glows a brilliant red as [caster.p_they()] reach directly into [carbon_victim]'s [parsed_zone]!"), + span_userdanger("[caster]'s hand glows a brilliant red as [caster.p_they()] reach directly into your [parsed_zone]!"), + ) + + carbon_victim.balloon_alert(caster, "extracting [chosen_organ]...") + playsound(victim, 'sound/weapons/slice.ogg', 50, TRUE) + carbon_victim.add_atom_colour(COLOR_DARK_RED, TEMPORARY_COLOUR_PRIORITY) + if(!do_after(caster, time_it_takes, carbon_victim, extra_checks = CALLBACK(src, PROC_REF(extraction_checks), picked_organ, hand, victim, caster))) + carbon_victim.balloon_alert(caster, "interrupted!") + return FALSE + + // Visible message done before Remove() + // Mainly so it gets across if you're taking the eyes of someone who's conscious + if(carbon_victim == caster) + caster.visible_message( + span_bolddanger("[caster] pulls [caster.p_their()] own [chosen_organ] out of [caster.p_their()] [parsed_zone]!!"), + span_userdanger("You pull your own [chosen_organ] out of your [parsed_zone]!!"), + ) + + else + carbon_victim.visible_message( + span_bolddanger("[caster]'s pulls [carbon_victim]'s [chosen_organ] out of [carbon_victim.p_their()] [parsed_zone]!!"), + span_userdanger("[caster]'s pulls your [chosen_organ] out of [carbon_victim.p_their()] [parsed_zone]!!"), + ) + + picked_organ.Remove(carbon_victim) + carbon_victim.balloon_alert(caster, "[chosen_organ] removed") + carbon_victim.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY, COLOR_DARK_RED) + playsound(victim, 'sound/effects/dismember.ogg', 50, TRUE) + if(carbon_victim.stat == CONSCIOUS) + carbon_victim.adjust_timed_status_effect(15 SECONDS, /datum/status_effect/speech/slurring/heretic) + carbon_victim.emote("scream") + + // We need to wait for the spell to actually finish casting to put the organ in their hands, hence, 1 ms timer. + addtimer(CALLBACK(caster, TYPE_PROC_REF(/mob, put_in_hands), picked_organ), 1) + return TRUE + +/// Extra checks ran while we're extracting an organ to make sure we can continue to do. +/datum/action/cooldown/spell/touch/flesh_surgery/proc/extraction_checks(obj/item/organ/picked_organ, obj/item/melee/touch_attack/hand, mob/living/carbon/victim, mob/living/carbon/caster) + if(QDELETED(src) || QDELETED(hand) || QDELETED(picked_organ) || QDELETED(victim) || !IsAvailable()) + return FALSE + + return TRUE + +/// Extra checks ran while we're healing something (organ, mob). +/datum/action/cooldown/spell/touch/flesh_surgery/proc/heal_checks(obj/item/melee/touch_attack/hand, atom/healing, mob/living/carbon/caster) + if(QDELETED(src) || QDELETED(hand) ||QDELETED(healing) || !IsAvailable()) + return FALSE + + return TRUE + +/obj/item/melee/touch_attack/flesh_surgery + name = "\improper knit flesh" + desc = "Let's go practice medicine." + icon_state = "disintegrate" + inhand_icon_state = "disintegrate" diff --git a/code/modules/antagonists/heretic/magic/madness_touch.dm b/code/modules/antagonists/heretic/magic/madness_touch.dm index a3e20477e9b..632643becd7 100644 --- a/code/modules/antagonists/heretic/magic/madness_touch.dm +++ b/code/modules/antagonists/heretic/magic/madness_touch.dm @@ -12,23 +12,21 @@ spell_requirements = NONE antimagic_flags = MAGIC_RESISTANCE|MAGIC_RESISTANCE_MIND -/datum/action/cooldown/spell/touch/mad_touch/cast_on_hand_hit(obj/item/melee/touch_attack/hand, atom/victim, mob/living/carbon/caster) - if(!ishuman(victim)) +/datum/action/cooldown/spell/touch/mad_touch/is_valid_target(atom/cast_on) + if(!ishuman(cast_on)) return FALSE - - var/mob/living/carbon/human/human_victim = victim - if(!human_victim.mind || IS_HERETIC(human_victim)) + var/mob/living/carbon/human/human_cast_on = cast_on + if(!human_cast_on.mind || !human_cast_on.mob_mood || IS_HERETIC_OR_MONSTER(human_cast_on)) return FALSE - - if(human_victim.can_block_magic(antimagic_flags)) - victim.visible_message( - span_danger("The spell bounces off of [victim]!"), - span_danger("The spell bounces off of you!"), - ) - return FALSE - - to_chat(caster, span_warning("[human_victim.name] has been cursed!")) - if (isliving(target)) - var/mob/living/target_mob = target - target_mob.add_mood_event("gates_of_mansus", /datum/mood_event/gates_of_mansus) + return TRUE + +/datum/action/cooldown/spell/touch/mad_touch/on_antimagic_triggered(obj/item/melee/touch_attack/hand, atom/victim, mob/living/carbon/caster) + victim.visible_message( + span_danger("The spell bounces off of [victim]!"), + span_danger("The spell bounces off of you!"), + ) + +/datum/action/cooldown/spell/touch/mad_touch/cast_on_hand_hit(obj/item/melee/touch_attack/hand, mob/living/carbon/human/victim, mob/living/carbon/caster) + to_chat(caster, span_warning("[victim.name] has been cursed!")) + victim.add_mood_event("gates_of_mansus", /datum/mood_event/gates_of_mansus) return TRUE diff --git a/code/modules/antagonists/heretic/magic/manse_link.dm b/code/modules/antagonists/heretic/magic/manse_link.dm index d3e62bc9b1d..b8775d334dd 100644 --- a/code/modules/antagonists/heretic/magic/manse_link.dm +++ b/code/modules/antagonists/heretic/magic/manse_link.dm @@ -13,6 +13,7 @@ invocation = "PI'RC' TH' M'ND." invocation_type = INVOCATION_SHOUT spell_requirements = NONE + antimagic_flags = MAGIC_RESISTANCE|MAGIC_RESISTANCE_MIND cast_range = 7 diff --git a/code/modules/antagonists/heretic/magic/mansus_grasp.dm b/code/modules/antagonists/heretic/magic/mansus_grasp.dm index 46e3dfa512d..37743b6945c 100644 --- a/code/modules/antagonists/heretic/magic/mansus_grasp.dm +++ b/code/modules/antagonists/heretic/magic/mansus_grasp.dm @@ -16,24 +16,26 @@ hand_path = /obj/item/melee/touch_attack/mansus_fist +/datum/action/cooldown/spell/touch/mansus_grasp/is_valid_target(atom/cast_on) + return TRUE // This baby can hit anything + /datum/action/cooldown/spell/touch/mansus_grasp/can_cast_spell(feedback = TRUE) return ..() && !!IS_HERETIC(owner) +/datum/action/cooldown/spell/touch/mansus_grasp/on_antimagic_triggered(obj/item/melee/touch_attack/hand, atom/victim, mob/living/carbon/caster) + victim.visible_message( + span_danger("The spell bounces off of [victim]!"), + span_danger("The spell bounces off of you!"), + ) + /datum/action/cooldown/spell/touch/mansus_grasp/cast_on_hand_hit(obj/item/melee/touch_attack/hand, atom/victim, mob/living/carbon/caster) if(!isliving(victim)) return FALSE - var/mob/living/living_hit = victim - if(living_hit.can_block_magic(antimagic_flags)) - victim.visible_message( - span_danger("The spell bounces off of [victim]!"), - span_danger("The spell bounces off of you!"), - ) - return FALSE - if(SEND_SIGNAL(caster, COMSIG_HERETIC_MANSUS_GRASP_ATTACK, victim) & COMPONENT_BLOCK_HAND_USE) return FALSE + var/mob/living/living_hit = victim living_hit.apply_damage(10, BRUTE, wound_bonus = CANT_WOUND) if(iscarbon(victim)) var/mob/living/carbon/carbon_hit = victim @@ -84,9 +86,12 @@ /obj/item/melee/touch_attack/mansus_fist/suicide_act(mob/living/user) user.visible_message(span_suicide("[user] covers [user.p_their()] face with [user.p_their()] sickly-looking hand! It looks like [user.p_theyre()] trying to commit suicide!")) var/mob/living/carbon/carbon_user = user //iscarbon already used in spell's parent - var/datum/action/cooldown/spell/touch/mansus_grasp/source = locate() in user.actions - if(!IS_HERETIC(user)) - return + var/datum/action/cooldown/spell/touch/mansus_grasp/source = spell_which_made_us?.resolve() + if(QDELETED(source) || !IS_HERETIC(user)) + return SHAME + + if(user.can_block_magic(source.antimagic_flags)) + return SHAME var/escape_our_torment = 0 while(carbon_user.stat == CONSCIOUS) @@ -102,7 +107,7 @@ carbon_user.emote("scream") carbon_user.adjust_stutter(26 SECONDS) - source?.cast_on_hand_hit(src, user, user) + source.cast_on_hand_hit(src, user, user) escape_our_torment++ stoplag(0.4 SECONDS) diff --git a/code/modules/antagonists/heretic/magic/nightwatcher_rebirth.dm b/code/modules/antagonists/heretic/magic/nightwatcher_rebirth.dm index 589862ead7d..9d0a93f6bc5 100644 --- a/code/modules/antagonists/heretic/magic/nightwatcher_rebirth.dm +++ b/code/modules/antagonists/heretic/magic/nightwatcher_rebirth.dm @@ -35,11 +35,12 @@ return things /datum/action/cooldown/spell/aoe/fiery_rebirth/cast_on_thing_in_aoe(mob/living/carbon/victim, mob/living/carbon/human/caster) - new /obj/effect/temp_visual/eldritch_smoke(victim.drop_location()) + new /obj/effect/temp_visual/eldritch_smoke(get_turf(victim)) + victim.Beam(caster, icon_state = "r_beam", time = 2 SECONDS) //This is essentially a death mark, use this to finish your opponent quicker. - if(HAS_TRAIT(victim, TRAIT_CRITICAL_CONDITION) && !HAS_TRAIT(victim, TRAIT_NODEATH)) - victim.investigate_log("has been killed by fiery rebirth.", INVESTIGATE_DEATHS) + if(CAN_SUCCUMB(victim)) + victim.investigate_log("has been executed by fiery rebirth.", INVESTIGATE_DEATHS) victim.death() victim.apply_damage(20, BURN) diff --git a/code/modules/antagonists/heretic/magic/realignment.dm b/code/modules/antagonists/heretic/magic/realignment.dm new file mode 100644 index 00000000000..7ba184ed4d8 --- /dev/null +++ b/code/modules/antagonists/heretic/magic/realignment.dm @@ -0,0 +1,80 @@ +// Realignment. It's like Fleshmend but solely for stamina damage and stuns. Sec meta +/datum/action/cooldown/spell/realignment + name = "Realignment" + desc = "Realign yourself, rapidly regenerating stamina and reducing any stuns or knockdowns. \ + You cannot attack while realigning. Can be casted multiple times in short succession, but each cast lengthens the cooldown." + background_icon_state = "bg_ecult" + icon_icon = 'icons/obj/implants.dmi' + button_icon_state = "adrenal" + // sound = 'sound/magic/whistlereset.ogg' + + school = SCHOOL_FORBIDDEN + cooldown_time = 6 SECONDS + cooldown_reduction_per_rank = -6 SECONDS // we're not a wizard spell but we use the levelling mechanic + spell_max_level = 10 // we can get up to / over a minute duration cd time + + invocation = "R'S'T." + invocation_type = INVOCATION_SHOUT + spell_requirements = NONE + +/datum/action/cooldown/spell/realignment/is_valid_target(atom/cast_on) + return isliving(cast_on) + +/datum/action/cooldown/spell/realignment/cast(mob/living/cast_on) + . = ..() + cast_on.apply_status_effect(/datum/status_effect/realignment) + to_chat(cast_on, span_notice("We begin to realign ourselves.")) + +/datum/action/cooldown/spell/realignment/after_cast(atom/cast_on) + . = ..() + // With every cast, our spell level increases for a short time, which goes back down after a period + // and with every spell level, the cooldown duration of the spell goes up + if(level_spell()) + var/reduction_timer = max(cooldown_time * spell_max_level * 0.5, 1.5 MINUTES) + addtimer(CALLBACK(src, PROC_REF(delevel_spell)), reduction_timer) + +/datum/action/cooldown/spell/realignment/update_spell_name() + var/spell_title = "" + switch(spell_level) + if(1, 2) + spell_title = "Hasty " // Hasty Realignment + if(3, 4) + spell_title = "" // Realignment + if(5, 6, 7) + spell_title = "Slowed " // Slowed Realignment + if(8, 9, 10) + spell_title = "Laborious " // Laborious Realignment (don't reach here) + + name = "[spell_title][initial(name)]" + UpdateButtons() + +/datum/status_effect/realignment + id = "realigment" + status_type = STATUS_EFFECT_REFRESH + duration = 8 SECONDS + alert_type = /atom/movable/screen/alert/status_effect/realignment + tick_interval = 0.2 SECONDS + +/datum/status_effect/realignment/get_examine_text() + return span_notice("[owner.p_theyre(TRUE)] glowing a soft white.") + +/datum/status_effect/realignment/on_apply() + ADD_TRAIT(owner, TRAIT_PACIFISM, id) + owner.add_filter(id, 2, list("type" = "outline", "color" = "#d6e3e7", "size" = 2)) + var/filter = owner.get_filter(id) + animate(filter, alpha = 127, time = 1 SECONDS, loop = -1) + animate(alpha = 63, time = 2 SECONDS) + return TRUE + +/datum/status_effect/realignment/on_remove() + REMOVE_TRAIT(owner, TRAIT_PACIFISM, id) + owner.remove_filter(id) + +/datum/status_effect/realignment/tick(delta_time, times_fired) + owner.adjustStaminaLoss(-5) + owner.AdjustAllImmobility(-0.5 SECONDS) + +/atom/movable/screen/alert/status_effect/realignment + name = "Realignment" + desc = "You're realignment yourself. You cannot attack, but are rapidly regenerating stamina." + icon_state = "realignment" diff --git a/code/modules/antagonists/heretic/magic/rust_construction.dm b/code/modules/antagonists/heretic/magic/rust_construction.dm new file mode 100644 index 00000000000..b3daea21ba5 --- /dev/null +++ b/code/modules/antagonists/heretic/magic/rust_construction.dm @@ -0,0 +1,117 @@ +/datum/action/cooldown/spell/pointed/rust_construction + name = "Rust Formation" + desc = "Transforms a rusted floor into a full wall of rust. Creating a wall underneath a mob will harm it." + background_icon_state = "bg_ecult" + icon_icon = 'icons/mob/actions/actions_ecult.dmi' + button_icon_state = "cleave" + ranged_mousepointer = 'icons/effects/mouse_pointers/throw_target.dmi' + check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_HANDS_BLOCKED + + school = SCHOOL_FORBIDDEN + cooldown_time = 5 SECONDS + + invocation = "Someone raises a wall of rust." + invocation_self_message = "You raise a wall of rust." + invocation_type = INVOCATION_EMOTE + spell_requirements = NONE + + cast_range = 4 + aim_assist = FALSE + + /// How long does the filter last on walls we make? + var/filter_duration = 2 MINUTES + +/datum/action/cooldown/spell/pointed/rust_construction/is_valid_target(atom/cast_on) + if(!isfloorturf(cast_on)) + if(isturf(cast_on) && owner) + cast_on.balloon_alert(owner, "not a floor!") + return FALSE + + if(!HAS_TRAIT(cast_on, TRAIT_RUSTY)) + if(owner) + cast_on.balloon_alert(owner, "not rusted!") + return FALSE + + return TRUE + +/datum/action/cooldown/spell/pointed/rust_construction/before_cast(turf/open/cast_on) + . = ..() + if(!isliving(owner)) + return + + var/mob/living/living_owner = owner + invocation = span_danger("[owner] drags [owner.p_their()] hand[living_owner.usable_hands == 1 ? "":"s"] upwards as a wall of rust rises out of [cast_on]!") + invocation_self_message = span_notice("You drag [living_owner.usable_hands == 1 ? "a hand":"your hands"] upwards as a wall of rust rises out of [cast_on].") + +/datum/action/cooldown/spell/pointed/rust_construction/cast(turf/open/cast_on) + . = ..() + var/rises_message = "rises out of [cast_on]" + var/turf/closed/wall/new_wall = cast_on.PlaceOnTop(/turf/closed/wall) + if(!istype(new_wall)) + return + + playsound(new_wall, 'sound/effects/constructform.ogg', 50, TRUE) + new_wall.rust_heretic_act() + new_wall.name = "\improper enchanted [new_wall.name]" + new_wall.hardness = 10 + new_wall.sheet_amount = 0 + new_wall.girder_type = null + + // I wanted to do a cool animation of a wall raising from the ground + // but I guess a fading filter will have to do for now as walls have 0 depth (currently) + // damn though with 3/4ths walls this'll look sick just imagine it + new_wall.add_filter("rust_wall", 2, list("type" = "outline", "color" = "#85be299c", "size" = 2)) + addtimer(CALLBACK(src, PROC_REF(fade_wall_filter), new_wall), filter_duration * (1/20)) + addtimer(CALLBACK(src,PROC_REF(remove_wall_filter), new_wall), filter_duration) + + var/message_shown = FALSE + for(var/mob/living/living_mob in cast_on) + message_shown = TRUE + if(IS_HERETIC_OR_MONSTER(living_mob) || living_mob == owner) + living_mob.visible_message( + span_warning("\A [new_wall] [rises_message] and pushes along [living_mob]!"), + span_notice("\A [new_wall] [rises_message] beneath your feet and pushes you along!"), + ) + else + living_mob.visible_message( + span_warning("\A [new_wall] [rises_message] and slams into [living_mob]!"), + span_userdanger("\A [new_wall] [rises_message] beneath your feet and slams into you!"), + ) + living_mob.apply_damage(10, BRUTE, wound_bonus = 10) + living_mob.Knockdown(5 SECONDS) + living_mob.SpinAnimation(5, 1) + + // If we're a multiz map send them to the next floor + var/turf/above_us = get_step_multiz(cast_on, UP) + if(above_us) + living_mob.forceMove(above_us) + continue + + // If we're not throw them to a nearby (open) turf + var/list/turfs_by_us = get_adjacent_open_turfs(cast_on) + // If there is no side by us, hardstun them + if(!length(turfs_by_us)) + living_mob.Paralyze(5 SECONDS) + continue + + // If there's an open turf throw them to the side + living_mob.throw_at(pick(turfs_by_us), 1, 3, thrower = owner, spin = FALSE) + + if(!message_shown) + new_wall.visible_message(span_warning("\A [new_wall] [rises_message]!")) + +/datum/action/cooldown/spell/pointed/rust_construction/proc/fade_wall_filter(turf/closed/wall) + if(QDELETED(wall)) + return + + var/rust_filter = wall.get_filter("rust_wall") + if(!rust_filter) + return + + animate(rust_filter, alpha = 0, time = filter_duration * (19/20)) + +/datum/action/cooldown/spell/pointed/rust_construction/proc/remove_wall_filter(turf/closed/wall) + if(QDELETED(wall)) + return + + wall.remove_filter("rust_wall") diff --git a/code/modules/antagonists/heretic/magic/rust_wave.dm b/code/modules/antagonists/heretic/magic/rust_wave.dm index e7f4d267d7e..baf7fce7d89 100644 --- a/code/modules/antagonists/heretic/magic/rust_wave.dm +++ b/code/modules/antagonists/heretic/magic/rust_wave.dm @@ -1,7 +1,9 @@ // Shoots out in a wave-like, what rust heretics themselves get /datum/action/cooldown/spell/cone/staggered/entropic_plume name = "Entropic Plume" - desc = "Spews forth a disorienting plume that causes enemies to strike each other, briefly blinds them(increasing with range) and poisons them(decreasing with range). Also spreads rust in the path of the plume." + desc = "Spews forth a disorienting plume that causes enemies to strike each other, \ + briefly blinds them (increasing with range) and poisons them (decreasing with range). \ + Also spreads rust in the path of the plume." background_icon_state = "bg_ecult" icon_icon = 'icons/mob/actions/actions_ecult.dmi' button_icon_state = "entropic_plume" @@ -25,19 +27,21 @@ target_turf.rust_heretic_act() /datum/action/cooldown/spell/cone/staggered/entropic_plume/do_mob_cone_effect(mob/living/victim, atom/caster, level) - if(victim.can_block_magic(antimagic_flags) || IS_HERETIC_OR_MONSTER(victim)) + if(victim.can_block_magic(antimagic_flags) || IS_HERETIC_OR_MONSTER(victim) || victim == caster) return victim.apply_status_effect(/datum/status_effect/amok) victim.apply_status_effect(/datum/status_effect/cloudstruck, level * 1 SECONDS) victim.reagents?.add_reagent(/datum/reagent/eldritch, max(1, 6 - level)) /datum/action/cooldown/spell/cone/staggered/entropic_plume/calculate_cone_shape(current_level) - if(current_level == cone_levels) - return 5 - else if(current_level == cone_levels - 1) + // At the first level (that isn't level 1) we will be small + if(current_level == 2) return 3 - else - return 2 + // At the max level, we turn small again + if(current_level == cone_levels) + return 3 + // Otherwise, all levels in between will be wider + return 5 /obj/effect/temp_visual/dir_setting/entropic icon = 'icons/effects/160x160.dmi' diff --git a/code/modules/antagonists/heretic/magic/void_cold_cone.dm b/code/modules/antagonists/heretic/magic/void_cold_cone.dm new file mode 100644 index 00000000000..05e62eb34cf --- /dev/null +++ b/code/modules/antagonists/heretic/magic/void_cold_cone.dm @@ -0,0 +1,36 @@ +/datum/action/cooldown/spell/cone/staggered/cone_of_cold/void + name = "Void Blast" + desc = "Fires a cone of chilling void in front of you, freezing everything in its path. \ + Enemies in the cone of the blast will be damaged slightly, slowed, and chilled overtime. \ + Additionally, objects hit will be frozen and can shatter, and ground hit will be iced over and slippery - \ + though they may thaw shortly if used in room temperature." + background_icon_state = "bg_ecult" + icon_icon = 'icons/mob/actions/actions_ecult.dmi' + button_icon_state = "entropic_plume" + + school = SCHOOL_FORBIDDEN + cooldown_time = 1 MINUTES + + invocation = "FR'ZE!" + invocation_type = INVOCATION_SHOUT + spell_requirements = NONE + + // In room temperature, the ice won't last very long + // ...but in space / freezing rooms, it will stick around + turf_freeze_type = TURF_WET_ICE + unfreeze_turf_duration = 1 MINUTES + // Applies an "infinite" version of basic void chill + // (This stacks with mansus grasp's void chill) + frozen_status_effect_path = /datum/status_effect/void_chill/lasting + unfreeze_mob_duration = 30 SECONDS + // Does a smidge of damage + on_freeze_brute_damage = 12 + on_freeze_burn_damage = 10 + // Also freezes stuff (Which will likely be unfrozen similarly to turfs) + unfreeze_object_duration = 30 SECONDS + +/datum/action/cooldown/spell/cone/staggered/cone_of_cold/void/do_mob_cone_effect(mob/living/target_mob, atom/caster, level) + if(IS_HERETIC_OR_MONSTER(target_mob)) + return + + return ..() diff --git a/code/modules/antagonists/heretic/magic/void_phase.dm b/code/modules/antagonists/heretic/magic/void_phase.dm index 10588e35f37..166a3b5ad19 100644 --- a/code/modules/antagonists/heretic/magic/void_phase.dm +++ b/code/modules/antagonists/heretic/magic/void_phase.dm @@ -11,7 +11,7 @@ school = SCHOOL_FORBIDDEN cooldown_time = 30 SECONDS - invocation = "RE'L'TY PH'S'E" + invocation = "RE'L'TY PH'S'E." invocation_type = INVOCATION_WHISPER spell_requirements = NONE @@ -21,13 +21,14 @@ /// The radius of damage around the void bubble var/damage_radius = 1 -/datum/action/cooldown/spell/pointed/void_phase/is_valid_target(atom/cast_on) - // We do the close range check first - if(get_dist(get_turf(owner), get_turf(cast_on)) < min_cast_range) - owner.balloon_alert(owner, "too close!") - return FALSE +/datum/action/cooldown/spell/pointed/void_phase/before_cast(atom/cast_on) + . = ..() + if(. & SPELL_CANCEL_CAST) + return - return ..() + if(owner && get_dist(get_turf(owner), get_turf(cast_on)) < min_cast_range) + cast_on.balloon_alert(owner, "too close!") + return . | SPELL_CANCEL_CAST /datum/action/cooldown/spell/pointed/void_phase/cast(atom/cast_on) . = ..() diff --git a/code/modules/antagonists/heretic/magic/void_pull.dm b/code/modules/antagonists/heretic/magic/void_pull.dm index f8063f8635f..36be3e12792 100644 --- a/code/modules/antagonists/heretic/magic/void_pull.dm +++ b/code/modules/antagonists/heretic/magic/void_pull.dm @@ -10,7 +10,7 @@ school = SCHOOL_FORBIDDEN cooldown_time = 40 SECONDS - invocation = "BR'NG F'RTH TH'M T' M'" + invocation = "BR'NG F'RTH TH'M T' M'." invocation_type = INVOCATION_WHISPER spell_requirements = NONE @@ -29,8 +29,7 @@ new /obj/effect/temp_visual/voidin(get_turf(cast_on)) // Before we cast the actual effects, deal AOE damage to anyone adjacent to us - var/list/mob/living/people_near_us = get_things_to_cast_on(cast_on, damage_radius) - for(var/mob/living/nearby_living as anything in people_near_us) + for(var/mob/living/nearby_living as anything in get_things_to_cast_on(cast_on, damage_radius)) nearby_living.apply_damage(30, BRUTE, wound_bonus = CANT_WOUND) /datum/action/cooldown/spell/aoe/void_pull/get_things_to_cast_on(atom/center, radius_override = 0) diff --git a/code/modules/antagonists/heretic/status_effects/debuffs.dm b/code/modules/antagonists/heretic/status_effects/debuffs.dm index 30ed6f32772..9763aabae78 100644 --- a/code/modules/antagonists/heretic/status_effects/debuffs.dm +++ b/code/modules/antagonists/heretic/status_effects/debuffs.dm @@ -14,10 +14,12 @@ icon_state = "void_chill" /datum/status_effect/void_chill/on_apply() + owner.add_atom_colour(COLOR_BLUE_LIGHT, TEMPORARY_COLOUR_PRIORITY) owner.add_movespeed_modifier(/datum/movespeed_modifier/void_chill, update = TRUE) return TRUE /datum/status_effect/void_chill/on_remove() + owner.remove_atom_colour(TEMPORARY_COLOUR_PRIORITY, COLOR_BLUE_LIGHT) owner.remove_movespeed_modifier(/datum/movespeed_modifier/void_chill, update = TRUE) /datum/status_effect/void_chill/tick() @@ -27,6 +29,10 @@ duration = 10 SECONDS cooling_per_tick = -20 +/datum/status_effect/void_chill/lasting + id = "lasting_void_chill" + duration = -1 + /datum/movespeed_modifier/void_chill multiplicative_slowdown = 0.3 diff --git a/code/modules/antagonists/heretic/status_effects/ghoul.dm b/code/modules/antagonists/heretic/status_effects/ghoul.dm index 5857dc28bd1..079acda6596 100644 --- a/code/modules/antagonists/heretic/status_effects/ghoul.dm +++ b/code/modules/antagonists/heretic/status_effects/ghoul.dm @@ -5,6 +5,8 @@ alert_type = /atom/movable/screen/alert/status_effect/ghoul /// The new max health value set for the ghoul, if supplied var/new_max_health + /// What, if any, stamina modifier we applied to the ghoul mob + var/stamina_mod_applied /// Reference to the master of the ghoul's mind var/datum/mind/master_mind /// An optional callback invoked when a ghoul is made (on_apply) @@ -51,6 +53,9 @@ human_target.revive(ADMIN_HEAL_ALL) // Have to do an admin heal here, otherwise they'll likely just die due to missing organs or limbs if(new_max_health) + if(new_max_health < human_target.maxHealth) + stamina_mod_applied = (new_max_health / human_target.maxHealth) + human_target.physiology.stamina_mod *= stamina_mod_applied human_target.setMaxHealth(new_max_health) human_target.health = new_max_health @@ -78,6 +83,8 @@ var/mob/living/carbon/human/human_target = owner if(new_max_health) + if(isnum(stamina_mod_applied)) + human_target.physiology.stamina_mod /= stamina_mod_applied human_target.setMaxHealth(initial(human_target.maxHealth)) on_lost_callback?.Invoke(human_target) diff --git a/code/modules/antagonists/wizard/equipment/spellbook_entries/offensive.dm b/code/modules/antagonists/wizard/equipment/spellbook_entries/offensive.dm index 8992bffd731..f75f4bd8b61 100644 --- a/code/modules/antagonists/wizard/equipment/spellbook_entries/offensive.dm +++ b/code/modules/antagonists/wizard/equipment/spellbook_entries/offensive.dm @@ -45,7 +45,7 @@ /datum/spellbook_entry/teslablast name = "Tesla Blast" desc = "Charge up a tesla arc and release it at a random nearby target! You can move freely while it charges. The arc jumps between targets and can knock them down." - spell_type = /datum/action/cooldown/spell/tesla + spell_type = /datum/action/cooldown/spell/charged/beam/tesla category = "Offensive" /datum/spellbook_entry/lightningbolt diff --git a/code/modules/spells/spell.dm b/code/modules/spells/spell.dm index 39dfd210c19..7a0272ae19f 100644 --- a/code/modules/spells/spell.dm +++ b/code/modules/spells/spell.dm @@ -181,10 +181,12 @@ if(spell_requirements & SPELL_REQUIRES_WIZARD_GARB) var/mob/living/carbon/human/human_owner = owner if(!(human_owner.wear_suit?.clothing_flags & CASTING_CLOTHES)) - to_chat(owner, span_warning("You don't feel strong enough without your robe!")) + if(feedback) + to_chat(owner, span_warning("You don't feel strong enough without your robe!")) return FALSE if(!(human_owner.head?.clothing_flags & CASTING_CLOTHES)) - to_chat(owner, span_warning("You don't feel strong enough without your hat!")) + if(feedback) + to_chat(owner, span_warning("You don't feel strong enough without your hat!")) return FALSE else @@ -208,6 +210,7 @@ /** * Check if the target we're casting on is a valid target. * For self-casted spells, the target being checked (cast_on) is the caster. + * For click_to_activate spells, the target being checked is the clicked atom. * * Return TRUE if cast_on is valid, FALSE otherwise */ @@ -384,7 +387,7 @@ return FALSE spell_level++ - cooldown_time = max(cooldown_time - cooldown_reduction_per_rank, 0) + cooldown_time = max(cooldown_time - cooldown_reduction_per_rank, 0.25 SECONDS) // 0 second CD starts to break things. update_spell_name() return TRUE @@ -400,7 +403,11 @@ return FALSE spell_level-- - cooldown_time = min(cooldown_time + cooldown_reduction_per_rank, initial(cooldown_time)) + if(cooldown_reduction_per_rank > 0 SECONDS) + cooldown_time = min(cooldown_time + cooldown_reduction_per_rank, initial(cooldown_time)) + else + cooldown_time = max(cooldown_time + cooldown_reduction_per_rank, initial(cooldown_time)) + update_spell_name() return TRUE diff --git a/code/modules/spells/spell_types/charged/_charged.dm b/code/modules/spells/spell_types/charged/_charged.dm new file mode 100644 index 00000000000..7646f763956 --- /dev/null +++ b/code/modules/spells/spell_types/charged/_charged.dm @@ -0,0 +1,158 @@ +/** + * ## Channelled spells + * + * These spells do something after a channel time. + * To use this template, all that's needed is for cast() to be implemented. + */ +/datum/action/cooldown/spell/charged + /// What message do we display when we start chanelling? + var/channel_message + /// Whether we're currently channelling / charging the spell + var/currently_channeling = FALSE + /// How long it takes to channel the spell. + var/channel_time = 10 SECONDS + + // Overlay optional, applied when we start channelling + /// What icon should we use for our overlay + var/charge_overlay_icon + /// What icon state should we use for our overlay + var/charge_overlay_state + /// The actual appearance / our overlay. Don't mess with this + var/mutable_appearance/charge_overlay_instance + + // Sound optional, played when we start chanelling + /// What soundpath should we play when we start chanelling + var/charge_sound + /// The actual sound we generate, don't mess with this + var/sound/charge_sound_instance + +/datum/action/cooldown/spell/charged/New(Target, original) + . = ..() + if(!channel_message) + channel_message = span_notice("You start chanelling [src]...") + + if(charge_sound) + charge_sound_instance = sound(charge_sound, channel = CHANNEL_CHARGED_SPELL) + + if(charge_overlay_icon && charge_overlay_state) + charge_overlay_instance = mutable_appearance(charge_overlay_icon, charge_overlay_state, EFFECTS_LAYER) + +/datum/action/cooldown/spell/charged/Destroy() + if(owner) + stop_channel_effect(owner) + + charge_overlay_instance = null + charge_sound_instance = null + return ..() + +/datum/action/cooldown/spell/charged/Remove(mob/living/remove_from) + stop_channel_effect(remove_from) + return ..() + +/datum/action/cooldown/spell/charged/can_cast_spell(feedback = TRUE) + . = ..() + if(!.) + return FALSE + if(currently_channeling) + if(feedback) + to_chat(owner, span_warning("You're already channeling [src]!")) + return FALSE + + return TRUE + +/datum/action/cooldown/spell/charged/before_cast(atom/cast_on) + . = ..() + if(. & SPELL_CANCEL_CAST) + return + + to_chat(cast_on, channel_message) + + if(charge_sound_instance) + playsound(cast_on, charge_sound_instance, 50, FALSE) + + if(charge_overlay_instance) + cast_on.add_overlay(charge_overlay_instance) + + currently_channeling = TRUE + UpdateButtons(status_only = TRUE) + if(!do_after(cast_on, channel_time, timed_action_flags = (IGNORE_USER_LOC_CHANGE|IGNORE_HELD_ITEM))) + stop_channel_effect(cast_on) + return . | SPELL_CANCEL_CAST + +/datum/action/cooldown/spell/charged/cast(atom/cast_on) + . = ..() + stop_channel_effect(cast_on) + +/datum/action/cooldown/spell/charged/set_statpanel_format() + . = ..() + if(!islist(.)) + return + + if(currently_channeling) + .[PANEL_DISPLAY_STATUS] = "CHANNELING" + +/// Interrupts the chanelling effect, removing any overlay or sound playing (for the passed mob) +/datum/action/cooldown/spell/charged/proc/stop_channel_effect(mob/for_who) + if(charge_overlay_instance) + for_who.cut_overlay(charge_overlay_instance) + + if(charge_sound_instance) + for_who.stop_sound_channel(CHANNEL_CHARGED_SPELL) + // Play a null sound in to cancel the sound playing, because byond + playsound(for_who, sound(null, repeat = 0, channel = CHANNEL_CHARGED_SPELL), 50, FALSE) + + currently_channeling = FALSE + UpdateButtons(status_only = TRUE) + +/** + * ### Channelled "Beam" spells + * + * Channelled spells that pick a random target from nearby atoms to cast a spell on. + * Commonly used for beams, hence the name, but nothing's stopping projectiles or whatever from working. + * + * If no targets are nearby, cancels the spell and refunds the cooldown. + */ +/datum/action/cooldown/spell/charged/beam + /// The radius around the caster to find a target. + var/target_radius = 5 + /// The maximum number of bounces the beam will go before stopping. + var/max_beam_bounces = 1 + /// Who's our initial beam target? Set in before cast, used in cast. + var/atom/initial_target + +/datum/action/cooldown/spell/charged/beam/Destroy() + initial_target = null // This like shouuld never hang references but I've seen some cursed things so let's be safe + return ..() + +/datum/action/cooldown/spell/charged/beam/before_cast(atom/cast_on) + . = ..() + if(. & SPELL_CANCEL_CAST) + return + + initial_target = get_target(cast_on) + if(isnull(initial_target)) + cast_on.balloon_alert(cast_on, "no targets nearby!") + stop_channel_effect(cast_on) + return . | SPELL_CANCEL_CAST + +/datum/action/cooldown/spell/charged/beam/cast(atom/cast_on) + . = ..() + send_beam(cast_on, initial_target, max_beam_bounces) + initial_target = null + +/datum/action/cooldown/spell/charged/beam/proc/send_beam(atom/origin, atom/to_beam, bounces) + SHOULD_CALL_PARENT(FALSE) + CRASH("[type] did not implement send_beam and either has no effects or implemented the spell incorrectly.") + +/datum/action/cooldown/spell/charged/beam/proc/get_target(atom/center) + var/list/things = list() + for(var/atom/nearby_thing in range(target_radius, center)) + if(nearby_thing == owner || nearby_thing == center) + continue + + things += nearby_thing + + if(!length(things)) + return null + + return pick(things) diff --git a/code/modules/spells/spell_types/charged/tesla_blast.dm b/code/modules/spells/spell_types/charged/tesla_blast.dm new file mode 100644 index 00000000000..efad0e4a692 --- /dev/null +++ b/code/modules/spells/spell_types/charged/tesla_blast.dm @@ -0,0 +1,62 @@ +/datum/action/cooldown/spell/charged/beam/tesla + name = "Tesla Blast" + desc = "Charge up a tesla arc and release it at random nearby targets! \ + You can move freely while it charges. The arc jumps between targets and can knock them down." + button_icon_state = "lightning" + sound = 'sound/magic/lightningbolt.ogg' + + cooldown_time = 30 SECONDS + cooldown_reduction_per_rank = 6.75 SECONDS + + invocation = "UN'LTD P'WAH!" + invocation_type = INVOCATION_SHOUT + school = SCHOOL_EVOCATION + + channel_message = span_notice("You start gathering power...") + charge_overlay_icon = 'icons/effects/effects.dmi' + charge_overlay_state = "electricity" + charge_sound = 'sound/magic/lightning_chargeup.ogg' + target_radius = 7 + max_beam_bounces = 5 + + /// How much energy / damage does the initial bounce + var/initial_energy = 30 + /// How much energy / damage is lost per bounce + var/energy_lost_per_bounce = 5 + +/// Zaps a target, the bolt originating from origin. +/datum/action/cooldown/spell/charged/beam/tesla/send_beam(atom/origin, mob/living/carbon/to_beam, bolt_energy = 30, bounces = 5) + origin.Beam(to_beam, icon_state = "lightning[rand(1,12)]", time = 0.5 SECONDS) + playsound(get_turf(to_beam), 'sound/magic/lightningshock.ogg', 50, TRUE, -1) + + if(to_beam.can_block_magic(antimagic_flags)) + to_beam.visible_message( + span_warning("[to_beam] absorbs the spell, remaining unharmed!"), + span_userdanger("You absorb the spell, remaining unharmed!"), + ) + + else + to_beam.electrocute_act(bolt_energy, "Lightning Bolt", flags = SHOCK_NOGLOVES) + + // Bounce again! Call our proc recursively to keep the chain going (even if our mob blocked it with antimagic) + if(bounces < 1) + return + var/mob/living/carbon/to_beam_next = get_target(to_beam) + if(isnull(to_beam_next)) + return + send_beam(to_beam, to_beam_next, max(bolt_energy - energy_lost_per_bounce, energy_lost_per_bounce), bounces - 1) + +/datum/action/cooldown/spell/charged/beam/tesla/get_target(atom/center) + var/list/possibles = list() + for(var/mob/living/carbon/to_check in view(target_radius, center)) + if(to_check == center || to_check == owner) + continue + if(!length(get_path_to(center, to_check, max_distance = target_radius, simulated_only = FALSE))) + continue + + possibles += to_check + + if(!length(possibles)) + return null + + return pick(possibles) diff --git a/code/modules/spells/spell_types/cone/_cone.dm b/code/modules/spells/spell_types/cone/_cone.dm index e7a03426cd3..e1364a1d0f3 100644 --- a/code/modules/spells/spell_types/cone/_cone.dm +++ b/code/modules/spells/spell_types/cone/_cone.dm @@ -70,39 +70,50 @@ left_dir = SOUTH right_dir = NORTH - for(var/i in 1 to cone_levels) + // Go though every level of the cone levels and generate the cone. + for(var/level in 1 to cone_levels) var/list/level_turfs = list() + // Our center turf always exists, it's straight ahead of the caster. turf_to_use = get_step(turf_to_use, dir_to_use) level_turfs += turf_to_use - if(i != 1) - left_turf = get_step(turf_to_use, left_dir) - level_turfs += left_turf - right_turf = get_step(turf_to_use, right_dir) - level_turfs += right_turf - for(var/left_i in 1 to i -calculate_cone_shape(i)) - if(left_turf.density && respect_density) + // Level 1 only ever has 1 turf, it's a cone. + if(level != 1) + var/level_width_in_each_direction = round((calculate_cone_shape(level) - 1) / 2) + left_turf = turf_to_use + right_turf = turf_to_use + // Check turfs to the left... + for(var/left_of_center in 1 to level_width_in_each_direction) + if(respect_density && left_turf.density) break left_turf = get_step(left_turf, left_dir) level_turfs += left_turf - for(var/right_i in 1 to i -calculate_cone_shape(i)) - if(right_turf.density && respect_density) + // And turfs to the right. + for(var/right_of_enter in 1 to level_width_in_each_direction) + if(respect_density && right_turf.density) break right_turf = get_step(right_turf, right_dir) level_turfs += right_turf + // Add the list of all turfs on this level to the turfs to return turfs_to_return += list(level_turfs) - if(i == cone_levels) - continue - if(turf_to_use.density && respect_density) + + // If we're at the last level, we're done + if(level == cone_levels) break + // But if we're not at the last level, we should check that we can keep going + if(respect_density && turf_to_use.density) + break + return turfs_to_return -///This proc adjusts the cones width depending on the level. +/** + * Adjusts the width of the cone at the passed level. + * This is never called on the first level of the cone (level 1 is always 1 width) + * + * Return a number - the TOTAL width of the cone at the passed level. + */ /datum/action/cooldown/spell/cone/proc/calculate_cone_shape(current_level) - var/end_taper_start = round(cone_levels * 0.8) - if(current_level > end_taper_start) - return (current_level % end_taper_start) * 2 //someone more talented and probably come up with a better formula. - else - return 2 + // Default formula: (1 (innate) -> 3 -> 5 -> 5 -> 7 -> 7 -> 9 -> 9 -> ...) + return current_level + (current_level % 2) + 1 /** * ### Staggered Cone diff --git a/code/modules/spells/spell_types/cone/cone_of_cold.dm b/code/modules/spells/spell_types/cone/cone_of_cold.dm new file mode 100644 index 00000000000..c60c8613e4e --- /dev/null +++ b/code/modules/spells/spell_types/cone/cone_of_cold.dm @@ -0,0 +1,67 @@ +/datum/action/cooldown/spell/cone/staggered/cone_of_cold + name = "Cone of Cold" + desc = "Shoots out a freezing cone in front of you." + + school = SCHOOL_EVOCATION + cooldown_time = 30 SECONDS + cooldown_reduction_per_rank = 4 SECONDS + + invocation = "ISAGE!" // What killed the dinosaurs? THE ICE AGE + invocation_type = INVOCATION_SHOUT + + cone_levels = 4 + respect_density = TRUE + delay_between_level = 0.05 SECONDS + + /// What flags do we pass to MakeSlippery when affecting turfs? + /// null / NONE / TURF_DRY means the turf is unaffected + var/turf_freeze_type = TURF_WET_PERMAFROST + /// How long do turfs remain slippery / frozen for? + /// 0 seconds means the turf is unaffected, INFINITY means it's made perma-wet + var/unfreeze_turf_duration = 45 SECONDS + + /// What status effect do we apply when affecting mobs? + /// null means no status effect is applied + var/datum/status_effect/frozen_status_effect_path = /datum/status_effect/freon/lasting + /// How long do mobs remain frozen for? + /// 0 seconds means no status effect is applied, INFINITY means infinite duration (or default duration of the status effect) + var/unfreeze_mob_duration = 20 SECONDS + /// How much brute do we apply on freeze? + var/on_freeze_brute_damage = 10 + /// How much burn do we apply on freeze? + var/on_freeze_burn_damage = 20 + + /// How long do objects remain frozen for? + /// 0 seconds mean no objects are frozen, INFINITY means infinite duration freeze + var/unfreeze_object_duration = 20 SECONDS + +/datum/action/cooldown/spell/cone/staggered/cone_of_cold/do_turf_cone_effect(turf/target_turf, atom/caster, level) + if(!turf_freeze_type || unfreeze_turf_duration <= 0 SECONDS) // 0 duration = don't apply the slip + return + if(!isopenturf(target_turf)) + return + var/turf/open/frozen_floor = target_turf + frozen_floor.MakeSlippery(turf_freeze_type, unfreeze_turf_duration, permanent = (unfreeze_turf_duration == INFINITY)) + +/datum/action/cooldown/spell/cone/staggered/cone_of_cold/do_mob_cone_effect(mob/living/target_mob, atom/caster, level) + if(target_mob.can_block_magic(antimagic_flags) || target_mob == caster) + return + + if(ispath(frozen_status_effect_path) && unfreeze_mob_duration > 0 SECONDS) // 0 duration = don't apply the status effect + var/datum/status_effect/freeze = target_mob.apply_status_effect(frozen_status_effect_path) + if(unfreeze_mob_duration != INFINITY) + freeze.duration = world.time + unfreeze_mob_duration + + if(on_freeze_brute_damage || on_freeze_burn_damage) + target_mob.take_overall_damage(on_freeze_brute_damage, on_freeze_burn_damage) + + to_chat(target_mob, span_userdanger("You feel a bitter cold!")) + +/datum/action/cooldown/spell/cone/staggered/cone_of_cold/do_obj_cone_effect(obj/target_obj, atom/caster, level) + if(unfreeze_object_duration <= 0 SECONDS) // 0 duration = don't apply a freeze + return + if(!target_obj.freeze()) + return + if(unfreeze_object_duration == INFINITY) // Infinity duration = don't set an unfreeze timer + return + addtimer(CALLBACK(target_obj, TYPE_PROC_REF(/obj/, unfreeze)), unfreeze_object_duration) diff --git a/code/modules/spells/spell_types/conjure/invisible_chair.dm b/code/modules/spells/spell_types/conjure/invisible_chair.dm index e0694898c09..1fa727a68a5 100644 --- a/code/modules/spells/spell_types/conjure/invisible_chair.dm +++ b/code/modules/spells/spell_types/conjure/invisible_chair.dm @@ -4,6 +4,7 @@ background_icon_state = "bg_mime" icon_icon = 'icons/mob/actions/actions_mime.dmi' button_icon_state = "invisible_chair" + check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_HANDS_BLOCKED panel = "Mime" sound = null diff --git a/code/modules/spells/spell_types/conjure/invisible_wall.dm b/code/modules/spells/spell_types/conjure/invisible_wall.dm index 9433fbd7df0..3124277453f 100644 --- a/code/modules/spells/spell_types/conjure/invisible_wall.dm +++ b/code/modules/spells/spell_types/conjure/invisible_wall.dm @@ -4,6 +4,7 @@ background_icon_state = "bg_mime" icon_icon = 'icons/mob/actions/actions_mime.dmi' button_icon_state = "invisible_wall" + check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_HANDS_BLOCKED panel = "Mime" sound = null diff --git a/code/modules/spells/spell_types/conjure_item/invisible_box.dm b/code/modules/spells/spell_types/conjure_item/invisible_box.dm index 64e14179474..adc66994bd8 100644 --- a/code/modules/spells/spell_types/conjure_item/invisible_box.dm +++ b/code/modules/spells/spell_types/conjure_item/invisible_box.dm @@ -6,6 +6,7 @@ background_icon_state = "bg_mime" icon_icon = 'icons/mob/actions/actions_mime.dmi' button_icon_state = "invisible_box" + check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_HANDS_BLOCKED panel = "Mime" sound = null diff --git a/code/modules/spells/spell_types/jaunt/_jaunt.dm b/code/modules/spells/spell_types/jaunt/_jaunt.dm index cd1c713b186..9b6b417d2fd 100644 --- a/code/modules/spells/spell_types/jaunt/_jaunt.dm +++ b/code/modules/spells/spell_types/jaunt/_jaunt.dm @@ -19,6 +19,9 @@ /// What dummy mob type do we put jaunters in on jaunt? var/jaunt_type = /obj/effect/dummy/phased_mob +/datum/action/cooldown/spell/jaunt/before_cast(atom/cast_on) + return ..() | SPELL_NO_FEEDBACK // Don't do the feedback until after we're jaunting + /datum/action/cooldown/spell/jaunt/can_cast_spell(feedback = TRUE) . = ..() if(!.) @@ -49,10 +52,16 @@ * Returns the holder mob that was created */ /datum/action/cooldown/spell/jaunt/proc/enter_jaunt(mob/living/jaunter, turf/loc_override) + SHOULD_CALL_PARENT(TRUE) + var/obj/effect/dummy/phased_mob/jaunt = new jaunt_type(loc_override || get_turf(jaunter), jaunter) RegisterSignal(jaunt, COMSIG_MOB_EJECTED_FROM_JAUNT, PROC_REF(on_jaunt_exited)) spell_requirements |= SPELL_CASTABLE_WHILE_PHASED ADD_TRAIT(jaunter, TRAIT_MAGICALLY_PHASED, REF(src)) + ADD_TRAIT(jaunter, TRAIT_RUNECHAT_HIDDEN, REF(src)) + // Don't do the feedback until we have runechat hidden. + // Otherwise the text will follow the jaunt holder, which reveals where our caster is travelling. + spell_feedback() // This needs to happen at the end, after all the traits and stuff is handled SEND_SIGNAL(jaunter, COMSIG_MOB_ENTER_JAUNT, src, jaunt) @@ -68,6 +77,8 @@ * Returns TRUE on successful exit, FALSE otherwise */ /datum/action/cooldown/spell/jaunt/proc/exit_jaunt(mob/living/unjaunter, turf/loc_override) + SHOULD_CALL_PARENT(TRUE) + var/obj/effect/dummy/phased_mob/jaunt = unjaunter.loc if(!istype(jaunt)) return FALSE @@ -92,13 +103,10 @@ SHOULD_CALL_PARENT(TRUE) spell_requirements &= ~SPELL_CASTABLE_WHILE_PHASED REMOVE_TRAIT(unjaunter, TRAIT_MAGICALLY_PHASED, REF(src)) + REMOVE_TRAIT(unjaunter, TRAIT_RUNECHAT_HIDDEN, REF(src)) // This needs to happen at the end, after all the traits and stuff is handled SEND_SIGNAL(unjaunter, COMSIG_MOB_AFTER_EXIT_JAUNT, src) -/// Simple helper to check if the passed mob is currently jaunting or not -/datum/action/cooldown/spell/jaunt/proc/is_jaunting(mob/living/user) - return istype(user.loc, /obj/effect/dummy/phased_mob) - /datum/action/cooldown/spell/jaunt/Remove(mob/living/remove_from) exit_jaunt(remove_from) if (!is_jaunting(remove_from)) // In case you have made exit_jaunt conditional, as in mirror walk diff --git a/code/modules/spells/spell_types/jaunt/ethereal_jaunt.dm b/code/modules/spells/spell_types/jaunt/ethereal_jaunt.dm index 2aafab3b1b7..bbcc6300717 100644 --- a/code/modules/spells/spell_types/jaunt/ethereal_jaunt.dm +++ b/code/modules/spells/spell_types/jaunt/ethereal_jaunt.dm @@ -23,7 +23,7 @@ /// List of valid exit points var/list/exit_point_list -/datum/action/cooldown/spell/jaunt/ethereal_jaunt/enter_jaunt(mob/living/jaunter) +/datum/action/cooldown/spell/jaunt/ethereal_jaunt/enter_jaunt(mob/living/jaunter, turf/loc_override) . = ..() if(!.) return diff --git a/code/modules/spells/spell_types/pointed/_pointed.dm b/code/modules/spells/spell_types/pointed/_pointed.dm index 591d99e187f..8ddbd8f4fc9 100644 --- a/code/modules/spells/spell_types/pointed/_pointed.dm +++ b/code/modules/spells/spell_types/pointed/_pointed.dm @@ -87,12 +87,17 @@ to_chat(owner, span_warning("You cannot cast [src] on yourself!")) return FALSE - if(get_dist(owner, cast_on) > cast_range) - to_chat(owner, span_warning("[cast_on.p_theyre(TRUE)] too far away!")) - return FALSE - return TRUE +/datum/action/cooldown/spell/pointed/before_cast(atom/cast_on) + . = ..() + if(. & SPELL_CANCEL_CAST) + return + + if(owner && get_dist(get_turf(owner), get_turf(cast_on)) > cast_range) + cast_on.balloon_alert(owner, "too far away!") + return . | SPELL_CANCEL_CAST + /** * ### Pointed projectile spells * diff --git a/code/modules/spells/spell_types/pointed/finger_guns.dm b/code/modules/spells/spell_types/pointed/finger_guns.dm index 3ecd66ec7d2..3f53e7d6242 100644 --- a/code/modules/spells/spell_types/pointed/finger_guns.dm +++ b/code/modules/spells/spell_types/pointed/finger_guns.dm @@ -5,6 +5,7 @@ background_icon_state = "bg_mime" icon_icon = 'icons/mob/actions/actions_mime.dmi' button_icon_state = "finger_guns0" + check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_HANDS_BLOCKED panel = "Mime" sound = null diff --git a/code/modules/spells/spell_types/self/forcewall.dm b/code/modules/spells/spell_types/self/forcewall.dm index e037c1ae689..150338a2db0 100644 --- a/code/modules/spells/spell_types/self/forcewall.dm +++ b/code/modules/spells/spell_types/self/forcewall.dm @@ -45,6 +45,7 @@ background_icon_state = "bg_mime" icon_icon = 'icons/mob/actions/actions_mime.dmi' button_icon_state = "invisible_blockade" + check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_HANDS_BLOCKED panel = "Mime" sound = null diff --git a/code/modules/spells/spell_types/self/lightning.dm b/code/modules/spells/spell_types/self/lightning.dm deleted file mode 100644 index ecc2ad448e1..00000000000 --- a/code/modules/spells/spell_types/self/lightning.dm +++ /dev/null @@ -1,125 +0,0 @@ -/datum/action/cooldown/spell/tesla - name = "Tesla Blast" - desc = "Charge up a tesla arc and release it at random nearby targets! \ - You can move freely while it charges. The arc jumps between targets and can knock them down." - button_icon_state = "lightning" - - cooldown_time = 30 SECONDS - cooldown_reduction_per_rank = 6.75 SECONDS - - invocation = "UN'LTD P'WAH!" - invocation_type = INVOCATION_SHOUT - school = SCHOOL_EVOCATION - - /// Whether we're currently channelling a tesla blast or not - var/currently_channeling = FALSE - /// How long it takes to channel the zap. - var/channel_time = 10 SECONDS - /// The radius around (either the caster or people shocked) to which the tesla blast can reach - var/shock_radius = 7 - /// The halo that appears around the caster while charging the spell - var/static/mutable_appearance/halo - /// The sound played while charging the spell - /// Quote: "the only way i can think of to stop a sound, thank MSO for the idea." - var/sound/charge_sound - -/datum/action/cooldown/spell/tesla/Remove(mob/living/remove_from) - reset_tesla(remove_from) - return ..() - -/datum/action/cooldown/spell/tesla/set_statpanel_format() - . = ..() - if(!islist(.)) - return - - if(currently_channeling) - .[PANEL_DISPLAY_STATUS] = "CHANNELING" - -/datum/action/cooldown/spell/tesla/can_cast_spell(feedback = TRUE) - . = ..() - if(!.) - return FALSE - if(currently_channeling) - if(feedback) - to_chat(owner, span_warning("You're already channeling [src]!")) - return FALSE - - return TRUE - -/datum/action/cooldown/spell/tesla/before_cast(atom/cast_on) - . = ..() - if(. & SPELL_CANCEL_CAST) - return - - to_chat(cast_on, span_notice("You start gathering power...")) - charge_sound = new /sound('sound/magic/lightning_chargeup.ogg', channel = 7) - halo ||= mutable_appearance('icons/effects/effects.dmi', "electricity", EFFECTS_LAYER) - cast_on.add_overlay(halo) - playsound(get_turf(cast_on), charge_sound, 50, FALSE) - - currently_channeling = TRUE - if(!do_after(cast_on, channel_time, timed_action_flags = (IGNORE_USER_LOC_CHANGE|IGNORE_HELD_ITEM))) - reset_tesla(cast_on) - return . | SPELL_CANCEL_CAST - -/datum/action/cooldown/spell/tesla/reset_spell_cooldown() - reset_tesla(owner) - return ..() - -/// Resets the tesla effect. -/datum/action/cooldown/spell/tesla/proc/reset_tesla(atom/to_reset) - to_reset.cut_overlay(halo) - currently_channeling = FALSE - -/datum/action/cooldown/spell/tesla/cast(atom/cast_on) - . = ..() - - // byond, why you suck? - charge_sound = sound(null, repeat = 0, wait = 1, channel = charge_sound.channel) - // Sorry MrPerson, but the other ways just didn't do it the way i needed to work, this is the only way. - playsound(get_turf(cast_on), charge_sound, 50, FALSE) - - var/mob/living/carbon/to_zap_first = get_target(cast_on) - if(QDELETED(to_zap_first)) - cast_on.balloon_alert(cast_on, "no targets nearby!") - reset_spell_cooldown() - return FALSE - - playsound(get_turf(cast_on), 'sound/magic/lightningbolt.ogg', 50, TRUE) - zap_target(cast_on, to_zap_first) - reset_tesla(cast_on) - -/// Zaps a target, the bolt originating from origin. -/datum/action/cooldown/spell/tesla/proc/zap_target(atom/origin, mob/living/carbon/to_zap, bolt_energy = 30, bounces = 5) - origin.Beam(to_zap, icon_state = "lightning[rand(1,12)]", time = 0.5 SECONDS) - playsound(get_turf(to_zap), 'sound/magic/lightningshock.ogg', 50, TRUE, -1) - - if(to_zap.can_block_magic(antimagic_flags)) - to_zap.visible_message( - span_warning("[to_zap] absorbs the spell, remaining unharmed!"), - span_userdanger("You absorb the spell, remaining unharmed!"), - ) - - else - to_zap.electrocute_act(bolt_energy, "Lightning Bolt", flags = SHOCK_NOGLOVES) - - if(bounces >= 1) - var/mob/living/carbon/to_zap_next = get_target(to_zap) - if(!QDELETED(to_zap_next)) - zap_target(to_zap, to_zap_next, max((bolt_energy - 5), 5), bounces - 1) - -/// Get a target in view of us to zap next. Returns a carbon, or null if none were found. -/datum/action/cooldown/spell/tesla/proc/get_target(atom/center) - var/list/possibles = list() - for(var/mob/living/carbon/to_check in view(shock_radius, center)) - if(to_check == center || to_check == owner) - continue - if(!length(get_path_to(center, to_check, max_distance = shock_radius, simulated_only = FALSE))) - continue - - possibles += to_check - - if(!length(possibles)) - return null - - return pick(possibles) diff --git a/code/modules/spells/spell_types/touch/_touch.dm b/code/modules/spells/spell_types/touch/_touch.dm index f5dff19fd52..384d722bf2c 100644 --- a/code/modules/spells/spell_types/touch/_touch.dm +++ b/code/modules/spells/spell_types/touch/_touch.dm @@ -1,3 +1,23 @@ +/** + * ## Touch Spell + * + * Touch spells are spells which function through the power of an item attack. + * + * Instead of the spell triggering when the caster presses the button, + * pressing the button will give them a hand object. + * The spell's effects are cast when the hand object makes contact with something. + * + * To implement a touch spell, all you need is to implement: + * * is_valid_target - to check whether the slapped target is valid + * * cast_on_hand_hit - to implement effects on cast + * + * However, for added complexity, you can optionally implement: + * * on_antimagic_triggered - to cause effects when antimagic is triggered + * * cast_on_secondary_hand_hit - to implement different effects if the caster r-clicked + + * It is not necessarily to touch any of the core functions, and is + * (generally) inadvisable unless you know what you're doing + */ /datum/action/cooldown/spell/touch check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_HANDS_BLOCKED sound = 'sound/items/welder.ogg' @@ -12,6 +32,8 @@ var/draw_message = span_notice("You channel the power of the spell to your hand.") /// The message displayed upon willingly dropping / deleting / cancelling the touch hand before using it var/drop_message = span_notice("You draw the power out of your hand.") + /// If TRUE, the caster can willingly hit themselves with the hand + var/can_cast_on_self = FALSE /datum/action/cooldown/spell/touch/Destroy() // If we have an owner, the hand is cleaned up in Remove(), which Destroy() calls. @@ -23,6 +45,10 @@ remove_hand(remove_from) return ..() +// PreActivate is overridden to not check is_valid_target on the caster, as it makes less sense. +/datum/action/cooldown/spell/touch/PreActivate(atom/target) + return Activate(target) + /datum/action/cooldown/spell/touch/UpdateButton(atom/movable/screen/movable/action_button/button, status_only = FALSE, force = FALSE) . = ..() if(!button) @@ -42,6 +68,9 @@ . = ..() if(!.) return FALSE + // Currently, hard checks for carbons. + // If someone wants to add support for simplemobs + // adminbussed to have hands, go for it if(!iscarbon(owner)) return FALSE var/mob/living/carbon/carbon_owner = owner @@ -49,8 +78,9 @@ return FALSE return TRUE +// Checks if the mob slapped with the hand is a valid target. /datum/action/cooldown/spell/touch/is_valid_target(atom/cast_on) - return iscarbon(cast_on) + return isliving(cast_on) /** * Creates a new hand_path hand and equips it to the caster. @@ -59,6 +89,8 @@ * Otherwise, registers signals and returns TRUE. */ /datum/action/cooldown/spell/touch/proc/create_hand(mob/living/carbon/cast_on) + SHOULD_CALL_PARENT(TRUE) + var/obj/item/melee/touch_attack/new_hand = new hand_path(cast_on, src) if(!cast_on.put_in_hands(new_hand, del_on_fail = TRUE)) reset_spell_cooldown() @@ -69,10 +101,7 @@ return FALSE attached_hand = new_hand - RegisterSignal(attached_hand, COMSIG_ITEM_AFTERATTACK, PROC_REF(on_hand_hit)) - RegisterSignal(attached_hand, COMSIG_ITEM_AFTERATTACK_SECONDARY, PROC_REF(on_secondary_hand_hit)) - RegisterSignal(attached_hand, COMSIG_PARENT_QDELETING, PROC_REF(on_hand_deleted)) - RegisterSignal(attached_hand, COMSIG_ITEM_DROPPED, PROC_REF(on_hand_dropped)) + register_hand_signals() to_chat(cast_on, draw_message) return TRUE @@ -83,8 +112,10 @@ * If reset_cooldown_after is FALSE, we will instead just start the spell's cooldown */ /datum/action/cooldown/spell/touch/proc/remove_hand(mob/living/hand_owner, reset_cooldown_after = FALSE) + SHOULD_CALL_PARENT(TRUE) + if(!QDELETED(attached_hand)) - UnregisterSignal(attached_hand, list(COMSIG_ITEM_AFTERATTACK, COMSIG_ITEM_AFTERATTACK_SECONDARY, COMSIG_PARENT_QDELETING, COMSIG_ITEM_DROPPED)) + unregister_hand_signals() hand_owner?.temporarilyRemoveItemFromInventory(attached_hand) QDEL_NULL(attached_hand) @@ -95,6 +126,26 @@ else StartCooldown() +/// Registers all signal procs for the hand. +/datum/action/cooldown/spell/touch/proc/register_hand_signals() + SHOULD_CALL_PARENT(TRUE) + + RegisterSignal(attached_hand, COMSIG_ITEM_AFTERATTACK, PROC_REF(on_hand_hit)) + RegisterSignal(attached_hand, COMSIG_ITEM_AFTERATTACK_SECONDARY, PROC_REF(on_secondary_hand_hit)) + RegisterSignal(attached_hand, COMSIG_ITEM_DROPPED, PROC_REF(on_hand_dropped)) + RegisterSignal(attached_hand, COMSIG_PARENT_QDELETING, PROC_REF(on_hand_deleted)) + +/// Unregisters all signal procs for the hand. +/datum/action/cooldown/spell/touch/proc/unregister_hand_signals() + SHOULD_CALL_PARENT(TRUE) + + UnregisterSignal(attached_hand, list( + COMSIG_ITEM_AFTERATTACK, + COMSIG_ITEM_AFTERATTACK_SECONDARY, + COMSIG_ITEM_DROPPED, + COMSIG_PARENT_QDELETING, + )) + // Touch spells don't go on cooldown OR give off an invocation until the hand is used itself. /datum/action/cooldown/spell/touch/before_cast(atom/cast_on) return ..() | SPELL_NO_FEEDBACK | SPELL_NO_IMMEDIATE_COOLDOWN @@ -114,12 +165,11 @@ */ /datum/action/cooldown/spell/touch/proc/on_hand_hit(datum/source, atom/victim, mob/caster, proximity_flag, click_parameters) SIGNAL_HANDLER + SHOULD_NOT_OVERRIDE(TRUE) // DEFINITELY don't put effects here, put them in cast_on_hand_hit if(!proximity_flag) return - if(victim == caster) - return - if(!can_cast_spell(feedback = FALSE)) + if(!can_hit_with_hand(victim, caster)) return INVOKE_ASYNC(src, PROC_REF(do_hand_hit), source, victim, caster) @@ -131,22 +181,43 @@ */ /datum/action/cooldown/spell/touch/proc/on_secondary_hand_hit(datum/source, atom/victim, mob/caster, proximity_flag, click_parameters) SIGNAL_HANDLER + SHOULD_NOT_OVERRIDE(TRUE) // DEFINITELY don't put effects here, put them in cast_on_secondary_hand_hit if(!proximity_flag) return - if(victim == caster) - return - if(!can_cast_spell(feedback = FALSE)) + if(!can_hit_with_hand(victim, caster)) return INVOKE_ASYNC(src, PROC_REF(do_secondary_hand_hit), source, victim, caster) + return COMPONENT_SECONDARY_CANCEL_ATTACK_CHAIN + +/// Checks if the passed victim can be cast on by the caster. +/datum/action/cooldown/spell/touch/proc/can_hit_with_hand(atom/victim, mob/caster) + if(!can_cast_on_self && victim == caster) + return FALSE + if(!is_valid_target(victim)) + return FALSE + if(!can_cast_spell(feedback = TRUE)) + return FALSE + + return TRUE /** * Calls cast_on_hand_hit() from the caster onto the victim. + * It's worth noting that victim will be guaranteed to be whatever checks are implemented in is_valid_target by this point. + * + * Implements checks for antimagic. */ /datum/action/cooldown/spell/touch/proc/do_hand_hit(obj/item/melee/touch_attack/hand, atom/victim, mob/living/carbon/caster) + SHOULD_NOT_OVERRIDE(TRUE) // Don't put effects here, put them in cast_on_hand_hit + SEND_SIGNAL(src, COMSIG_SPELL_TOUCH_HAND_HIT, victim, caster, hand) - if(!cast_on_hand_hit(hand, victim, caster)) + + var/mob/mob_victim = victim + if(istype(mob_victim) && mob_victim.can_block_magic(antimagic_flags)) + on_antimagic_triggered(hand, victim, caster) + + else if(!cast_on_hand_hit(hand, victim, caster)) return log_combat(caster, victim, "cast the touch spell [name] on", hand) @@ -155,8 +226,13 @@ /** * Calls do_secondary_hand_hit() from the caster onto the victim. + * It's worth noting that victim will be guaranteed to be whatever checks are implemented in is_valid_target by this point. + + * Does NOT check for antimagic on its own. Implement your own checks if you want the r-click to abide by it. */ /datum/action/cooldown/spell/touch/proc/do_secondary_hand_hit(obj/item/melee/touch_attack/hand, atom/victim, mob/living/carbon/caster) + SHOULD_NOT_OVERRIDE(TRUE) // Don't put effects here, put them in cast_on_secondary_hand_hit + var/secondary_result = cast_on_secondary_hand_hit(hand, victim, caster) switch(secondary_result) // Continue will remove the hand here and stop @@ -216,6 +292,22 @@ remove_hand(dropper, reset_cooldown_after = TRUE) +/** + * Called whenever our spell is cast, but blocked by antimagic. + */ +/datum/action/cooldown/spell/touch/proc/on_antimagic_triggered(obj/item/melee/touch_attack/hand, atom/victim, mob/living/carbon/caster) + return + +/** + * ## Touch attack item + * + * Used for touch spells to have something physical to slap people with. + * + * Try to avoid adding behavior onto these for your touch spells! + * The spells themselves should handle most, if not all, of the casted effects. + * + * These should generally just be dummy objects - holds name and icon stuff. + */ /obj/item/melee/touch_attack name = "\improper outstretched hand" desc = "High Five?" @@ -224,7 +316,7 @@ righthand_file = 'icons/mob/inhands/items/touchspell_righthand.dmi' icon_state = "latexballon" inhand_icon_state = null - item_flags = NEEDS_PERMIT | ABSTRACT + item_flags = NEEDS_PERMIT | ABSTRACT | HAND_ITEM w_class = WEIGHT_CLASS_HUGE force = 0 throwforce = 0 @@ -243,7 +335,7 @@ if(!iscarbon(user)) //Look ma, no hands return TRUE if(!(user.mobility_flags & MOBILITY_USE)) - to_chat(user, span_warning("You can't reach out!")) + user.balloon_alert(user, "can't reach out!") return TRUE return ..() @@ -254,7 +346,7 @@ * However, if you want to consume the hand and not give a cooldown, * such as adding a unique behavior to the hand specifically, this function will do that. */ -/obj/item/melee/touch_attack/mansus_fist/proc/remove_hand_with_no_refund(mob/holder) +/obj/item/melee/touch_attack/proc/remove_hand_with_no_refund(mob/holder) var/datum/action/cooldown/spell/touch/hand_spell = spell_which_made_us?.resolve() if(!QDELETED(hand_spell)) hand_spell.remove_hand(holder, reset_cooldown_after = FALSE) diff --git a/code/modules/spells/spell_types/touch/duffelbag_curse.dm b/code/modules/spells/spell_types/touch/duffelbag_curse.dm index 0416350ca69..1ca5d0e1ffc 100644 --- a/code/modules/spells/spell_types/touch/duffelbag_curse.dm +++ b/code/modules/spells/spell_types/touch/duffelbag_curse.dm @@ -14,11 +14,7 @@ hand_path = /obj/item/melee/touch_attack/duffelbag -/datum/action/cooldown/spell/touch/duffelbag/cast_on_hand_hit(obj/item/melee/touch_attack/hand, atom/victim, mob/living/carbon/caster) - if(!iscarbon(victim)) - return FALSE - - var/mob/living/carbon/duffel_victim = victim + /// Some meme "elaborate backstories" to use. var/static/list/elaborate_backstory = list( "spacewar origin story", "military background", @@ -28,52 +24,57 @@ "upbringing on the space farm", "fond memories with your buddy Keith", ) - if(duffel_victim.can_block_magic(antimagic_flags)) - to_chat(caster, span_warning("The spell can't seem to affect [duffel_victim]!")) - to_chat(duffel_victim, span_warning("You really don't feel like talking about your [pick(elaborate_backstory)] with complete strangers today.")) - return TRUE + +/datum/action/cooldown/spell/touch/duffelbag/is_valid_target(atom/cast_on) + return iscarbon(cast_on) + +/datum/action/cooldown/spell/touch/duffelbag/on_antimagic_triggered(obj/item/melee/touch_attack/hand, mob/living/carbon/victim, mob/living/carbon/caster) + to_chat(caster, span_warning("The spell can't seem to affect [victim]!")) + to_chat(victim, span_warning("You really don't feel like talking about your [pick(elaborate_backstory)] with complete strangers today.")) + +/datum/action/cooldown/spell/touch/duffelbag/cast_on_hand_hit(obj/item/melee/touch_attack/hand, mob/living/carbon/victim, mob/living/carbon/caster) // To get it started, stun and knockdown the person being hit - duffel_victim.flash_act() - duffel_victim.Immobilize(5 SECONDS) - duffel_victim.apply_damage(80, STAMINA) - duffel_victim.Knockdown(5 SECONDS) + victim.flash_act() + victim.Immobilize(5 SECONDS) + victim.apply_damage(80, STAMINA) + victim.Knockdown(5 SECONDS) // If someone's already cursed, don't try to give them another - if(HAS_TRAIT(duffel_victim, TRAIT_DUFFEL_CURSE_PROOF)) - to_chat(caster, span_warning("The burden of [duffel_victim]'s duffel bag becomes too much, shoving them to the floor!")) - to_chat(duffel_victim, span_warning("The weight of this bag becomes overburdening!")) + if(HAS_TRAIT(victim, TRAIT_DUFFEL_CURSE_PROOF)) + to_chat(caster, span_warning("The burden of [victim]'s duffel bag becomes too much, shoving them to the floor!")) + to_chat(victim, span_warning("The weight of this bag becomes overburdening!")) return TRUE // However if they're uncursed, they're fresh for getting a cursed bag var/obj/item/storage/backpack/duffelbag/cursed/conjured_duffel = new get_turf(victim) - duffel_victim.visible_message( - span_danger("A growling duffel bag appears on [duffel_victim]!"), + victim.visible_message( + span_danger("A growling duffel bag appears on [victim]!"), span_danger("You feel something attaching itself to you, and a strong desire to discuss your [pick(elaborate_backstory)] at length!"), ) // This duffelbag is now cuuuurrrsseed! Equip it on them ADD_TRAIT(conjured_duffel, TRAIT_DUFFEL_CURSE_PROOF, CURSED_ITEM_TRAIT(conjured_duffel.name)) - conjured_duffel.pickup(duffel_victim) - conjured_duffel.forceMove(duffel_victim) + conjured_duffel.pickup(victim) + conjured_duffel.forceMove(victim) // Put it on their back first - if(duffel_victim.dropItemToGround(duffel_victim.back)) - duffel_victim.equip_to_slot_if_possible(conjured_duffel, ITEM_SLOT_BACK, TRUE, TRUE) + if(victim.dropItemToGround(victim.back)) + victim.equip_to_slot_if_possible(conjured_duffel, ITEM_SLOT_BACK, TRUE, TRUE) return TRUE // If the back equip failed, put it in their hands first - if(duffel_victim.put_in_hands(conjured_duffel)) + if(victim.put_in_hands(conjured_duffel)) return TRUE // If they had no empty hands, try to put it in their inactive hand first - duffel_victim.dropItemToGround(duffel_victim.get_inactive_held_item()) - if(duffel_victim.put_in_hands(conjured_duffel)) + victim.dropItemToGround(victim.get_inactive_held_item()) + if(victim.put_in_hands(conjured_duffel)) return TRUE // If their inactive hand couldn't be emptied or found, put it in their active hand - duffel_victim.dropItemToGround(duffel_victim.get_active_held_item()) - if(duffel_victim.put_in_hands(conjured_duffel)) + victim.dropItemToGround(victim.get_active_held_item()) + if(victim.put_in_hands(conjured_duffel)) return TRUE // Well, we failed to give them the duffel bag, diff --git a/code/modules/spells/spell_types/touch/flesh_to_stone.dm b/code/modules/spells/spell_types/touch/flesh_to_stone.dm index c6693c7c904..a239c09adff 100644 --- a/code/modules/spells/spell_types/touch/flesh_to_stone.dm +++ b/code/modules/spells/spell_types/touch/flesh_to_stone.dm @@ -12,14 +12,13 @@ hand_path = /obj/item/melee/touch_attack/flesh_to_stone -/datum/action/cooldown/spell/touch/flesh_to_stone/cast_on_hand_hit(obj/item/melee/touch_attack/hand, atom/victim, mob/living/carbon/caster) - if(!isliving(victim)) - return FALSE +/datum/action/cooldown/spell/touch/flesh_to_stone/on_antimagic_triggered(obj/item/melee/touch_attack/hand, mob/living/victim, mob/living/carbon/caster) + to_chat(caster, span_warning("The spell can't seem to affect [victim]!")) + to_chat(victim, span_warning("You feel your flesh turn to stone for a moment, then revert back!")) +/datum/action/cooldown/spell/touch/flesh_to_stone/cast_on_hand_hit(obj/item/melee/touch_attack/hand, mob/living/victim, mob/living/carbon/caster) var/mob/living/living_victim = victim if(living_victim.can_block_magic(antimagic_flags)) - to_chat(caster, span_warning("The spell can't seem to affect [victim]!")) - to_chat(victim, span_warning("You feel your flesh turn to stone for a moment, then revert back!")) return TRUE living_victim.Stun(4 SECONDS) diff --git a/code/modules/spells/spell_types/touch/smite.dm b/code/modules/spells/spell_types/touch/smite.dm index 6a7c17aae5a..f31e844bfb9 100644 --- a/code/modules/spells/spell_types/touch/smite.dm +++ b/code/modules/spells/spell_types/touch/smite.dm @@ -14,26 +14,28 @@ hand_path = /obj/item/melee/touch_attack/smite -/datum/action/cooldown/spell/touch/smite/cast_on_hand_hit(obj/item/melee/touch_attack/hand, atom/victim, mob/living/carbon/caster) - if(!isliving(victim)) - return FALSE - +/// Smite is pretty extravagant, so whenever we get casted, we blind everyone nearby. +/datum/action/cooldown/spell/touch/smite/proc/blind_everyone_nearby(mob/living/victim, atom/center) do_sparks(sparks_amt, FALSE, get_turf(victim)) - for(var/mob/living/nearby_spectator in view(caster, 7)) - if(nearby_spectator == caster) + for(var/mob/living/nearby_spectator in view(center, 7)) + if(nearby_spectator == center) continue nearby_spectator.flash_act(affect_silicon = FALSE) - var/mob/living/living_victim = victim - if(living_victim.can_block_magic(antimagic_flags)) - caster.visible_message( - span_warning("The feedback blows [caster]'s arm off!"), - span_userdanger("The spell bounces from [living_victim]'s skin back into your arm!"), - ) - caster.flash_act() - var/obj/item/bodypart/to_dismember = caster.get_holding_bodypart_of_item(hand) - to_dismember?.dismember() - return TRUE +/datum/action/cooldown/spell/touch/smite/on_antimagic_triggered(obj/item/melee/touch_attack/hand, mob/living/victim, mob/living/carbon/caster) + caster.visible_message( + span_warning("The feedback blows [caster]'s arm off!"), + span_userdanger("The spell bounces from [victim]'s skin back into your arm!"), + ) + // Off goes the arm we were casting with! + var/obj/item/bodypart/to_dismember = caster.get_holding_bodypart_of_item(hand) + to_dismember?.dismember() + // And do the blind (us included) + caster.flash_act() + blind_everyone_nearby(caster, caster) + +/datum/action/cooldown/spell/touch/smite/cast_on_hand_hit(obj/item/melee/touch_attack/hand, mob/living/victim, mob/living/carbon/caster) + blind_everyone_nearby(victim, caster) if(ishuman(victim)) var/mob/living/carbon/human/human_victim = victim @@ -45,8 +47,8 @@ new /obj/effect/gibspawner(get_turf(victim)) return TRUE - living_victim.investigate_log("has been gibbed by the smite spell.", INVESTIGATE_DEATHS) - living_victim.gib() + victim.investigate_log("has been gibbed by the smite spell.", INVESTIGATE_DEATHS) + victim.gib() return TRUE /obj/item/melee/touch_attack/smite diff --git a/icons/hud/screen_alert.dmi b/icons/hud/screen_alert.dmi index 6292810e99e1a34b8417442108869e2141d3bdc9..051cc1bd686121fbff3e778ffdb6689424d503fb 100755 GIT binary patch literal 127861 zcmYg$1yEbT_BZbC?k+`(Yl~Cdi#rsD;u4B`in|ndZGqxa+zPZvDFk;58X%A_eeeBe zzBzN}-n+ZW+&#X(bK7xv-uGGXK{Kc7*fzT^InYsd}t(y?k*LNTcs~o2%P-;BR zPd}=D>mkAu=W3t3fw$|IRvl6+Y3Qb4D}Sk#JoL3otNW&5exTaV?Kt55>NDv9d0N|q z2y@CZ0_}rDv|*)PiK|Yy5EI(;yxO=GZDH_uYyCGjlP)JeVd2R_v>;VyUnJqK2H*Cu z*^HtnImipe7q171cj!%1Mm(?DpFHQn&Jvn# ztd%6%@<|gPMI$4cEidm&+n-jZsxw9pd667q#1BvxZ)JlCv4e%+b_(GI)khJZRtzEw(G0sr^-U>)`b*WDshUrL4y7%pTww;u)M_ zjK;q}J1dWiR)FyVKc~57DbV+cnK`g|K7%tbu+nU*W?(YO?z^d!9BQmv7LH8M6;xXL>x+C2BBy>9FmN z2^Qt$S4tJSO8y>nUHciR`>u}6n>~Z`bWjvacV`GY1%D}A8TrQ#a*2qGpN_kntHFu7 z1}w_CW~NHQF`VimYA*XOD#`2>jb23H)UsLF{bD=bh{#l{6fLN>=ZE5!*>aE)=8VseEIJ~E* zS~2X4h9P}NXXf){MxhnJ;WX6t>HZG9)dBT-dTx^KmvX06(+|*W<0<%{?liBrAQ3RQ zpcXL5_U&@V=4rhVLw`+4mJz*%v zA!CYT3(M_cBTB>q{$hV5@OOIYYtuBWL=AsDC8a5S?6|rUZ+lt=?|v^|n_8`7JoPN{Z*&4Wsw!3lP@ql`&l?bN$|zKi>; zgaHMA>N%Xz?ttWP)6)mIuTZR8Ko2Pq{&Y(^xx1=CCzJ`MXCL0aMNW1!^D#>Sl!9ajZkNs8x`YZLIEFqj<;kx4PhaXuyr8fH0-c?w zy`P@}G-5-G`A^*q{Cqy2I7zXEhEq6wWhbKb! z`ow05QSj}PTr#NzoLQMw^`im9>Pnh3g~0&RkNU+Rl~Fb*!xRQ1*8W@6G;w`+kD&rs@Vz;q9Q~-Oi&yZw>+ykqxh;H9 z*kAZ^tIvNdiXH$Zrx%w)zI;r=53GI=Q%2xXB^q2t!L3h~OVjO(|Q7fo)VQ z>>7F^iLNv}{Aa|M*W7&p(E*;y$N7Kvn8 zIKf7SM3aAvDlzd)Cab6$xi5eVk!ee6TTrmV-~5IO1ytUSRC8$B$Ug)mz3_NbBBx2 zZn1e^mlWL~KGI%TMy+SX{^HpS$)mKuRd zvMr^r`3*S24I?R}C+-|{yR>N*FNzO$MMn|c*IJlG5c+(%fxPcYLjU;uITIis3~;3a zzzOC-Z7JMG$$zhtVVdBW1stjLSDl)TdwEjaSN!|8JA+=d{$LFE1QC+=kx*7Y%SOvb z0oIVGdUKIJXE}MLs6IY5$tubnyQGDOq_CrS%GB0>h=ni2i# z+%fahk(;Z+jUSR{#T@Z-Hd_J>4(<=0?u9C8)LjyC<@@`{=?JeaK<9c|L5c7~_so=w=d z7tw-17uN4bl+#YUs+h8*iLwvrygRmL~VKI&Vn?G((b@L*w{KZ{ZXzM%^=y^Y>Tsn1b@qi&dXQ8$x#8k1N zm=UC9KMXMP*>A`!c*so90fG)URPJu7ig*9%!S(9xeTVBh)pfaXizlPGo14JYw!nWq zq--(dge{KV_tWui)f&B~IkiC$yRsm4pZ-^}@cw`$Wy@Q80@V;FiXyQujgrbxl zoBb*KH-T~C{H;IA8)$n?e80qBn$%FZHl!o}^(x64`Sj)VH+&4r&=yXAPeVrvQVHvl ze%Q~4YX;rHZ2nmH)7{8t2FGG*RvGh$-iIpobeXfHC|KsVj@nmbdKr31H2agRMmneF z71AraVjMHM%4CWk7vGU5L-+;q1O@=|yU|%Z_q(K43eg7qU4HJ9aXs%MX=z`w%xov#*QkurG#f)cV=A8=TGi)X=+zWL z$TNBWe!|}UKQ6(UMXz(y}vpl+yXuA-1{a zJ@`&Z6_c-y@#WZ48HPA+LI1s#R!alC>n*|D~DptsPhZ&It(LMB8 zXzN8hel!+z3|x3-kqmnl+U*Rknd~hDGzG=lZ*=EOgiQKqvPvsU61sigoPM2Nbi$Ca zrpeHOYx;_0myB@SjrsGMQc&aDr)=A?R9mzX9!Eq}9tKfqTZ%9PgUlf3ayeONSD%xm zL%kxppPC=Ha^6)QMib!0maVb2s-NW7)Yj@&ftAN(|11c;3JL9w-(LLv`o9l}$;mrI z%N_X~FG-J&URx(?8YKN8C{SPK&1@~A7v3Eyn1|{XRP^YW`QYjcR*?DD%zB{UoiIAw zjzcCwNBOT3(>B|0=iPi;QN#j{9d$?_A`p8z>xH*s6N~_S{ZPSdb3c}BH*3v8c+^84OarCav+`r~{y(0xN8DV^%h zM!F>2{Nbd{)&2N6??cE>o>aDkzl0d9QnQd9t;(0}%uNk)vw_>_s`(|V8eg3&20hb@ zW^wUfjfE;cSv+H|ZLIHNR6jx=9jhmMX~Rd$o+hf0Oz~E{OQ?xw&61}J#MugPM#S9) z5NO4iXHi1U(X8vI%cFxr3K_>gQ8GhcK($Q=jO(P-2am>NfvrMC5HPuXY2q7@CIGA6 z#c5!1d9363WK|@&STL;gZ4B&!MmCSOAVuJffj;4)Lv{`MjRA!|*EkeEv7sdGxTixA@jqHAIg2+h*F zX{4x~JqG7m4GW?=w(YE+$pVj z5eXPvN$KKrZr5KHyTy+luJkM;_ORbegk4&8JlWD2 zHLg+geJw=dLAnto&;&O%liKutS$gGd*6ZX`i^}T9e!uySG;rXobFTTd$q;DB{ z)7gt-k5@%(7hpLkkMm`$rNoL1iPPfz{3J~-xDSNRWg&lX=bNR``$e0VwL@_YjvcnH zWtP7U`qj@HmHKcFyDC^fE5mFhc1jkBve*E@LF&$HBXnBmXqZp%)Qn>5~~<7l~WUw403vYN>_O<@z1W@f)_T!F|j78f#lEADU=6!FzJ=@ny~ldBrB5SKB83I}R$y5Tr&im2@yB(#jaYV2FQ0?!hWJQm_t(|dTU zV|5dk>Bi2^HHO%o9`qfScgfZ#w-yC^ZCcy8{s4OOzKdc1c|C{y!q8XbW&q*_H#eNG zzww8gcudFT0PI}7d7|M7POa(^ctPS(={9DB6$c*l&%3^#KM{CE=V8v1KL|5Fzr?%0 zOp);>1kz6IS$}*!vdyOa5XtsN#!?}qH)ax&ht=m*-@^JkV4UyNZ>*;>!h?p|uX`-n z!`Y41*qGv)3P|5H@Nv0HMg;Bv+@VAJ4(}5aY%KJ|!**7dN=vrgk~tU{sxvzHBXE4NO2k{)_QJzItYj-+MPBBZQp979QuK?xL!o+^roP$ zt|)`knKJkQUpZ&V@xWJqN7|glnnfl0mM<9BUY8S*qxb0CAK^?40%g}Q2TZbgG#(&x zg`z-_Va5CL7)!4wdyw2$`Il*_yYqEg^8@^c^z$*582ACVGz!vi8l_o1Zj#hb+!Mu! zK1~}a<};Hc;X^roWL1LfJuyPgIHmC8pp4u@8Ngsj^X;5CK^|A2t8MH_P3hTSUtuW6mc64E#s5ti zSCrcgK_mhxEtQ9t$LKh@^ZENUEk>8;FK=6X)5HJ!n~>1c9nK;clbm}2lE4z!8I#{7 zmSm%yWs;8wS=b>oY@#=dKI22<+#lXz@U~=A>wYO;s-^LOi6!0ovp+miDXUJuh7EE& z;BpS&){pmaJ3I_*1edl92i#`k$i6^2ObSDc>uHDgBE<7>gDU2R9RNbQPvMobnt57q z|H0!zMHvxyc(&Vw=Rbt=vt<)mC%dZU2GJ_rQB*DJWPi?5#m|8b4kfHiw?~ypO8zWf(9>w$0l0w@|AwuKb{<7wmkRX9#Kc(dI_gIx(3A96 zq9{MU=!(OWCs&O{clM20exY2g_l}gjg}3kw(F^U^6%i%eSm0)~WGonnd1BX%o z{2f7wCqXL)v@Q_7mN~U2gO9<&BFk`$hq|fFo~9SPD74ACxP}=KsK6w+P2CS`xp@w; z8*Yl>U7Qf2^kVy$e1>%Pl4?FxDrE_^ZjC2@^*v|BZ6MhABal9vy22nQ^2Nz3giH~F z$j8_tymQEt&?WsOfqrDmUZo5@RDvc`i(+a#7Ow% z9zLtoL8(N5dAVc2K*0NP8T$`0X*;a?;IbLe5l8m#@aV4JYy2`M9jp99w00nVW&h86 z2c>P2cvqGXbId+4c7DkIn zBs#&(?u!pSTs^;jT!Qm)XpM4z%ontOU*y}f^$=d%0}zr8ggMOid=umhgW@hjNUFyM z<+!o5vQR6zS$i3lAUD|`1V@Em#v#h4@6)zV)V#RBN5^Uj^fMHNZ$esH1UUN|Nvend zN}-{;A?BQ#tYHrr5YjOOSQg#?pMW7HjjIv@13=B@$yif*Nh(Hip=FZSkOIo;+6slxe>gZI8U`a~ zmA73;a<8H5cjw}&=30|I+E3=?n}6?O0|)PDYG1dV{X}c0{WC!C2LPh`gU0{em;Gc% z|J`LzU+82TpG5GNo!0|G#DfD*&MduO0{wm97cdA~v(nm07gf`kD9XHlKnYkE7^SZ% z{0&Fof#jB2QIscL6GQkZm*L_I@P}n$>(MUv*2{ZfcngeTQx=|Oy{w4M!YFcgu_~@d zv$8MALL*TZLeQQ<=KJ6-5v&kv2&kKM;+XEyIp;V}Wf*q2xGpn<0S zrNdB2d}L%eP6u}1O11W|2iLT*XaGE%#>t>i%&c4srLw9;P-6FuhH)V;(W=IS;oNH3 zNvCV4hvq!PL1GJh*FhIP1`j2?Kq2qTz0KbN8;tY#~QeRsH%Zfq^K*zS!HQL%w&^(KU`@7tuGgKbBpy68O#-lo9)Jc97uv?HQ+;yD(r z409m7a-dkj$~l7c1wkhIL{s+N#YS+M9>a*#^BE~(sw|*3)4B)Zo^O4&a(TNmms~xV zQshT=vn;1aT)C7|E^7uqALl#rj?u@JJ1fb;AeX+cSLPQ}JhBvAOxNOO8Xd{Vm}0Rz zxvojhBq`8e0Mgg8&-h-e=aU+Q|lSdPT$!WEeIWxkdxjXau6*`~xGV%$e6&r=Da0C|q8adC>9#cC)% zeN^Ok*%~@D4qZAN%jSunMROA@fXGcxcqF0!dM*5O?sAr3XT=@8Lgc|Df*jON%69DS3aXcSC!K$MC{&lVaYyd{935X+;=HkJh(`t<<$6c zEC~Aez*qmWO3(!&~*ejFEBh7(AF7cUjxk_s&Qw_~VC)mTlkx zq$wSL{^!pDOF=C55UA}SI@1q!p|mcG#w-nm}P6A6io6gzFSMls3I6Wkk< zod8<8;?z-#a1&v88nI#ZKSs~B0@}XrZ(6y)aJXrHU=I3i%Q{W;83BUX!a%@?(aL2jC zcey)i&y}J&KHZD4-M@%7PXO$Clr^BZ^d0((9W4dusISDsQK%uc?5eV=dtg$xKNEy~ z2n_rP~b2{}tkF!^ehd;l)R|61+dj=j7quE(TnN zl4a;)SbhwVe#uP=*q&&DyNj9P)3?A}s&s3mAUF69u3w%{$cI!!QnCMG2XOQtF|s%V z!N|a1J;M_@z~*aVt)~yP^-8-GbcdX`Q zp2|-Gb}R$7qG=;a)Wq%6y6fc6m05W(kdSIKgp4MeB@{zwKd9WrMMiMckYRF`z43c^ z<{Bhx(^6E_AyLdCWu?dY3Z=>wwkFHhq7UsR&f)*Wbv&{{q zU4~=qYrf(aUu>nj;UQZi{|BJdB8J zOtOWLa~12VevLO##EkM~D4L{z9)+AZ=*Mm99k8qz73PNLumMR&8rb`c zbys$Ncf-0Nm2UZE-@HbHfTX{)_DcyDr#xypudKe+3^7e8?}rO3{K$5m-{ziq6O6GX z4tn&3-&zm8EpJS#C=hs<`Rdd;f#I{cuK+07mZgc~Z|PI^+G)GDwPy zD5(iEmm{oJ-nbCDpPjibG%*IVVj>bIvQk#gKQk_ngERR#9^*1#)AYK#Q1RLv$B%RH zYskFrwKZS`Q~?o6WHky(QL&O61Q=t8HL#Hqyvt>*W5y1;OSFzP&~1)e@j)gd#X$Sg zP1-;436nZ)gbm}F4)q;UDM~HU2zH@eM&6MulU~1VI0$xSFsLGjP$5I_;b8Zf7^8VJ z(nJu-yT)bfIypr zt7ybNn@3q;Gu{!T!*+5nO7tH-?@eVd&d&>=9+tKB^?F--F;?C$cK zRK0|A+dxZx`#=m{AmC<n+9zl15g&H2-bOHb{Y##NKb`T#b%TvlX8uJ)8w1%3b8# zxN$AgSM~fVyaL_^Dn)>IMN!9OlTdt-P7j^hDypi|)6);=&y@8tR-S+y37oLa!osum zzCIamAIHaJlz^T~^AYLU?~aw$->^_ZvA)sYUn{HPwO85JWT8O0U9E#(Ri>$7E)r7y z#$)6Dc!8g8Ppm4Lwz^P?S84PL+&vum6I3%v7t2M9neer*uurJ-d+^eSx{{1M{jJue z<~B%%FlT6%)wgceV}IP{mjf!q^IpjIF`S{SVX}S(_T3Xd#KUCIvdw->W{Wfr+HE(_ zj8;U*r7~RB%*A4lr`ubMk2B02y!8^x5%*zZMaRENn~J6!zkDKm!`Q09X4aa-kZ^hxkUAum453O7(jT8U;@sW@hs z6DUXZXGR=UiCaNGqOg8qPOGzR_LbWQCR@hRzW#^HD9s4wRFM7_=$l_dUJ^?3u4wca zU~c2_5gqP`pP5o6f4R0lO4H5pN96JlD-yP?9-|X+^~P^bUH!agR;|ncXEv+BzVP41 zhL+o_^cZrL(RrIV*yCB97(lMEE%YD}l!Xn+(d(h&=u-``t$#>efRZz0A9==S&X13e zd}a#iJtg%K^#pd~S_5{QxeoFb(C}yq0h;Z*g{&rT24B^k6jp@Z@zK(icfYk)icc@m zO7@Z@!@>FK(Na>)CDN9w&9AbV?iP}k{#Nr-x*{vq22f&^zeJZQA&NBGJw1LA4PBf^ zl_a>Ar?JDEf&&-Dsr|jcgrK`lxsic$hp~zt$!RSWYyVC%{^s=q0ZOy6Yi-qBBojAA zsS3ZaimDEoqj@h0BB`qI7Y;$XVPApVgJSn@-@e@h97H%F&XYViq75QNproP1F<_*| zU}KF7Rtr|kYriRpVunThTB1uz)8;ZXHB~otOo`#l6Mi>eK6A~f!jLcwCS{GFA2i&< z2*aqRB@W}-U0(M$n0~CkAtyW_-9&6`40~VbN(8r_bH4kLZQ1k`F`uFsnEp43RTc`Z zuytQA$lg)heqaFF=5c=AZ~gy>IA}-n5@PbjTwL`Ut#l`;!RbHk5Fc2K4KlS+k9S2g zA@M5wMbJtJBt5NU?W{=fN@ydhtBa^RU^KG7vBDS3 z!)SoZ`C*j)I>NYnfsnT%&g~nC>7%%))xB#7CkI~ryAz_`s=yJw{KR36=re3bae_a0 zcBGjPi`TqdHbnzpkh#wJ-;C5m+#D1~ce2sfXn$TuMyIhD6j(c7-&lFp@8b&rGp@4X zCh!*0Ue%j4^|zn?w9hu^W^G9RTi^fUYqCRXq|b*R>r9Svcw#%6ru&G@6%6`NI^;fR zkM{*Hro~JoadsKFz^EGa$wFsWQJFXw5xcdNpPPU|Jxd_>-A(R{-K5~Y*j4T~>tU}E z^zq_c*?>zqAhRf6wl=>U!)8@mTeeU(NqTy&(!jx6QdAb5A<@H~Qf%_Ix{hCXns*Q6 zlKgMN(s=I-_#+vVUQ!4?6QSwEe+E+8$zoU!$bQ0ReG{fbl+uI6hHLpb=F&hsf*x%I z<&E~!yL8`cExEAJ(9n5w!v1A-|2+derHJ@(J~Y5j_4{n@sw5QRR1iP3Ytk#VM3udN z)m~BS$J}IHT~T9u`=JKNxnryzHlIQZJxODIORYHS`|TU9i&E_xw6)cmrFsU-l}hNv zP14UvLuV}9gGIg&>X1#k?t=rARg2ig{Vufq+vtIh&zJ3K>-aouL~?^#TaX&~$lV|& z{&;_<;W59woUM<@HbkzdLyD$h{t}+o2aqGxn!2$%uU90UYWDl>{XRuhn){S^W8-o5 zs?~I+9G!8qwJU?If3taFzXThr71b}SbiqdCdaGo3`L@tv4RSez#5)Tw}lf>jz@#o^2+ZabwTL>GqG}TBigo6lz$j!ABLp*$gU- z47`xTbQH)?&|L7959m`BQneZ0sStb~w&tl#P$a`pa*z3-GDwESn7|~Tj;T8D0J*H= zLVBOY=Cv!73%O0yGNpnQW{2KPWTjprS_IhVdxORIhE7esW5l66%jnC?CA(IsF{N>o z)*^i{-b&KLK1HYMjZ6=G88Oa)y8glE6&FUzz(L{25#FB1)E03$*~LKAP>52Tn4@B} zFpa{PY2nh&ggbepRpAO0jLSFbQ=Rm3mEd#&D?$Gv@V-Y<7aOsHPKRC~$jf4XN2VT1f-n0bPUe( z^k|4}Jj{tqqys zvV=Pg?T`+4`-?^)%)Xae3mbKgzUvSB%$2*uJC#7`}rK>I*uHSeAuF%eF$WV^74ET?SI4EkKPfeMS|LS z``fYC(K0xH@#4A_R@TvTbaX`6(In0qf>;fh`n5OCRM(8c=-(LK--ur#F;tK@5By`H ztj)#z*F-t2FWbj1;0#u4=F>g2S+c)5c{3QJOwy@%);IF< z6O;GUut*Sc?dNn>D_^V}W_quex~5m@hE0uGpg_mfySk=EJY?iF1rCZI_JYp4WwjiH z9p#p(0+>jp3|6`Z+6G9aaV7@e4#MOI%4%~ANKrn8*KUjER^!Avr?Z5Rn`wu>KH8^wG$2htW+Lke;y%vAT&r{BG7?Z58X2#ZR*a<~jSVWa{Dpoj0dczoey_Howp zz(+NeSx>{U?1(YED0z9xCKEq(U`#5FAQ16tuJQjF@anwgjGBiJUX=}^OVL356EhAB z;jj4Qv>d0(|78Z7%LRocR*nKi5#d_LjlLEu4Qr?7l$e*W!!Zgvjy6GQQb}A=O;|vo z+DV8+)mNj=JUIScpkYAM6P1DGno{Pf-GP;$wT6?IT95mbRzNwr6I&uJ4_NmEkbtcu{S37#>1x{D)TTM>>Y- zhjFgUmN}NoERe$8oKWDl3dKm%&-tU_kH%+|BpHWMQ8IOz&qkK!ZkT8jX)KS5goAc( zNKot)nd0B$MG-N|ab9Vmuo$qiU}Pu?4>7joiu3hLC50#r zH%SK{Ex=8!3T|oWpK_zyC^!m66y*cspnrfrA){*r-~0U%5x(}`Z!OS<()~4;E|A6w zgI@IS2+eIK2qm7Sv0T0E$5?Y+T&ZWT1b0gq^Ut|IRd)@_QXYUjQOUdlxdN#ka%rd- zF$qyQ5>ij6J}aptl+fB4qtRdkctk5*-?1Y0MhTSGJ`K$|J za=W)Mqt1L*(XGu z3jaK#Bu2qf!l9C;z)ys%$K*DskdBZLp-S*I#kw?(hg-#|VOT+jrMgxn0wJO#^-Jvn z$J8`_tjYH6)#Gm?BXu@CVLVZ)u;B!uvR%q3eBTb?Dx$c#XDdJUg{<%>FQmXTdX#z zy!6W9El?4)vK|4ot#as>E5GFHJ$8vflJ9IT_TUC_jS)9Ej>T>qGwzjAf zS$7D)qX;ka{Q$NbQSU)ySGqFy63LPuAfgv5gKD-hhnH|T4!?()vspjWQZtX2P3YrB z*|J1FaREzu4T2k<<50hH0y5qdk|Nmcw;C|cx&Ua}!J_Wu46>(;LA z6D$u1BA59F`n%y(BJK}F=9}@NJD+Np*9Bvk$6+@Yn~Vh zFSD+;qMd=yrx@m`AL9X(4XWYgj_6oOi1Guq9Cp}9$qqses@tXH7IBP4^OxOSK~65x zKNJInD9q9nZFhoc)_;vG@hY3Neocg$tWNWqjBv{5E}P=F*qk-ETEHdGYR~$yZ*{=T zfR+#hdAh)jEkwvHJq!)rX&=lZy)Ll4zU49v3Mzn)nSby3^&&|Eu8VlP@wH;svW#O^ zP3LB`AL$o|+DFSr(6vV8FDZ%$3Y{RbvtqlYxV>HBm7}f5Ch}&x30E1<_U5aL`@tIb z6&V5@*HpJSmZ_vf1ZGtcoo~(ye+${gtpTz?P{vfIkwwJ%3s(oUnVxIGs#uG<>R3Q+ z5dy9v-E1)k|JNw@WgG-Q5n zmm1_5uG!?X{K{buRnXdu&#;_*<}Mh8ln7WH`gP|%BwiPML6nW{e>QycP0R%A^3=t{ zXGq(KLWcy5dt(dFmC6xFQRMw53|-{59{WAGvC+1|zfVa&dG=dz>wbT6LBf|UZ{@;4 zb?5uS>~TtH z^Cq`|G42i&7`pvhp7SQer8ux=4L6l2#kvWhby`>TstXrzVPN1GW;AxFsXA|0eZOcE z)+D7r`2ApZ_~jdwp$wUwCuV&J4~BXo1yqCeqOTjM-v12{*PJnax5Feip?y*HT?%l$ zPPA12o$MYYJ;w{c-1<)B{-BPbnHzs_zkK;iZw~ye__fmL$;jivS0u@K+wd-F3(F>7 zv3Q?nR$X!C?*z%^R)5(}Z?AsMm#H53JeKZ^aW~U^ZACAisTn>AGT*_$g(%k( z7Q90}yboOM2o<{4G;RDIED01Wt9E^d^;4YNZf;Vz>;{_z646#oM=XS$*8jhJe7HGO?6EI9D5y@l8}hZ7EXgk|Y%+ zMon!NHAOsbLP7*i4wF3!(dN|?r=dZ+3D3MO%=Py8LwM??%)VHwO}gva|jjQpzFXLN;N5A!{kZk-C2OHF5s&+!4(> z3}O7{`^$NT1e+9k^6Oe@T2_eUNI8N0&toVGA+Lej_JS;)ZsG6IO%JXXK$`(Iy9p)q z!rSlMbq7A7RN6G8U0A|D`~EZzI~c=q*M$$&vm5l|`pLx;^zt4B6mihP9k`b%`tV2n zlgjRLb0PnO`Ct;(p?~Uf@4#PM1vSeYo}ZpSk^|tT3iX~Vs;;Fv8ug%Y{2M0a$F%7I zZ#0BE=@#*{%hI|*JIE-!`A@GU0F}%VS?tt#og(oGcwP9T8_FY$C zlp2yE!Q8VF0OOVyT-e9{>xMDFo`xdgWEciSKQD!==dO~VJ)s(Vk>t9@{%01h8v1nh zz{j$IHLY4mgm&7AqI7L)Nh#7V>!Q61(}-h!=*}{VpJ{}hvDt@?u{vS;%v~)9EBC*y zSb3SvHEpJ;SW_fC)dkR5$tg{f-mWegX5^7V&93EGj;WgjrcxHgYj%AD#S|zpEuLLJ z{c9o+F|+7*t6d0-A|pZ$X>>D-v#mmEWZI8a5$<9OPx)JM!fj-?<5C3(?g5Ww?fuzb z`&1Q=5G@~p`_rx1dm37A@%vNj6EgOPHeph+j;i$KPw>RKxv`F1;OaZkHg)CD0;v_Q zSn}iyuWEBg;v9=Jfr($&x_j1}kD;aDSLA*)&cD9ieo)f|0c+oA-9yd|i~U+p>q0%V zrZ)kkNc<4XXe!Du{W{V?t%|b~>lqkr_<`l{_4vr2x5LcjE_R*0foj{K@vhv>g*%Rx zaS{UoR|09;g4xCMw@xgj^ZJYN2_7u6%$O-L^jbMJ+hg4Pa}}ty@7#mdTuxy%YpMG|SZez$((*fC)PY5Yk5R!Y9=BN+r{|y1huf&K=Xh|8 z)gDnIA|^G_Z~VeVamYA{QWEVtu$?Bt9f$)AKHH}v_NxVw2OuH8Ip0S5ejwDp(62)9 z-jeVU%}?C_?w0<2Xt^ojljJwsP)6p+cP0+*O+X+o8A%;wBF82;ws}G@fq{Swg+=Fw zO~>NJEt7(Z24KiYkuaa3WLz+8fH46DRlW{Cg9XWuIICGri$7|_&c=Zu{DtB(4$RY0 zbk_l&wJ)RIW@6!$h+FH9q=Z8FQ7(44(v`ZQj(2C|vXD>C+TsLktq*yXj~RO?4g$vF zXUob~*rHq>OKOrRtf;lp@>weZ^Be6}aTay8w{Q>qUYh3psqB-g#NmVZh3OpN9W;y7J2aPGT)=6++gkl{V~2p5ctjIvd4vL zHseV!h=tpbuH2PQe&8mFVhs5e&yiJD?W;nx@@_9j@;JwIpLIB6mj0z9o7-LYNHjk) z3kXy>a-Ue3KPa!7otHX%eY>6ZD=TtAr#L(5Us2Kg(DUcc{UT2S3J=jynnD#{xIr4f za+;~OK}4;ZryTLSRt}~wdoPSmxnI7FC(p~54`-;JW&!vy-GTTl$Bfu0 z+>xa9+4Mo*(7^`gCm9J#t?HE#PRyf1uaf>qB0^u#C3!LNAmy(va!}llbzkVQW8z2naMEz!c?W*AGB4bKAlrm>nbq2wgBnjHO_Yi7*(zT_6p+3+0q=zj;TCMN=n0(% zS9!C=P3VRji3ochRCe^{b#T9P@C#%4QRcS1==;$XOPlEPqQ2uiFg`iPNF@J5|PcNBRX2x(xuYSafHwrgp$eS?16v!|`dv7xbDS1{7S8N5RvB)dORL|1vS<18IC!R+4DDN`$|Xe7wm${A+F$l# zJ#5|~8oFmO_h%Cw5ld)}Q1aR=gGuT7ml{(+XHB1~cepz}md#3mPZoPww37rcB&0*d zDp;4-bdgCLU+5F2?Uz@7SIjsOOhn;~WfD_(Tu!({gLpKJY$@ISzv8`Om&}h1&-7yP zWZI#gqSPH(Uazd#1{xq9`~E+w&N?cpFK+jwQUcQ5B`qP{AsxcdrL=VS3?fK_bT`r^ z-QC?vcXtmp+~e{ai%-Lt}eZKKLpA8v0e3qr@ykPFUQH3ou-4-0>F8l(P zq2BAF2FazDY5mpa=ru)Mc!iYQ9th9!3^`ix3(N?zlY~7)Qgtp-mo+anSuL}J@OpFt zUNA%MV22;k4O-pG^NuQ*vr<^Ht6i9elob_B2lw;}n>gU=qTeF%#_#*01g- zyU&E8h}HaihoJ2V@93vkQ0q&#tR`Wh&m@;U{O{%g}u8zqsSn_X?#<=g>;uI3v;VCOJRUU_T z2vO4NBb>KB(TIp9IOb=Ij1Dh(ba8Rm+F4H2gv0;6igYDdu6pzM=T&wy`zK$DuobWY z64Aj$u}7+U&+_GW#PemU&&uh>kqS{E5WWO3cgYRtzDZ?fdvaaf5Z1bU{;J94h1SbLRQh zo>u!KRljDKM2W!q0YfUFJ9(y=Qo`<8PBrbNWVbq?jy4t~*NP(F6jNfgj=TGqdwQAe(^#&mXIOQ>lLe6f1jCgB>XF>@Tc-*e8-3y#$#zKx2i-}aNfdG!aWP5@>W zu4Pp9>#a08I)!let%I4k?!3q)H>PQ9A>r9?vJSH%^8dP*_y_hLl9#$Dt^4jXCl^YKwQ`{a5(=o0 z*a8^^o;RPGmy`w7tcV&6!#gi&te~dJ1Vi!rKe9wzEF#djnqk+u*T5E^cQ`#(1pX8n zoUsq}R`;dx%{wH;g6Ww03*1#YGL+t>*&;))W=g-zQg+@q`1YWl&u?{HvKKXvqMByC zp~;hWZoJa;MLbtGC2aH2v?v;{A6t4p4Oc{}IjS0R_%u@n9YIMuavHs^R`nl~Xgpd% zuvi$)>p=gakzLl9rse<_ZjO2V=QsbK@I_Ik_V$Ae4GY%x>}HpB$28M#29x*GaD_?5 zQMrAKdruaYjH+hl@A6o7-G$qVjRHz8lV|Sz)K;V(9)k|R= z!B)gffd5n-f%?~i%SjrPVn^{1g|i`*pHs)Y5#{PXHB^~Xj7k$&*l|Ykb7=nre!aWD zna#9|4+cB?A*mw4=((b7=c;>jHinR^5kQfp1!W6mlH_4S#dl+pkXz&2eCz8t&&oSy zVXn2INdBS*{XD+-<%(|7FKfXQFxK_y$GqqBv4 zTsL29lsKgiQP7U9HWo92e}sH`^BrdrHuRn9T6WOWSuZD28ayQD$Yn=&sVEx|7iP>S z`-E30!v$YE%eN-nQFa`v`GKf7--LDNl{clD|NoU49{%qA^XM-tI`aK$WcXCxyd_3~ zsyD#|QRh3KGF7stBY`BC$G4|o8y90MheNTBHl#l>D>+^FAkf@rllF;^ zEp#yzOo3dsOnwpp0sg$PC&bgH0s;O3T3dy2Ij0D`=m?+a7?=jR2-JIvnaJKEEoJOkNs9+~IExX#>I%U+0J|1!x^Q$ozi*ank=auf|R%bE``r&xV{2wY*w_Wi0-}Tg6n*53;3X1~p=66>#Hd8;de9ylA{ueW6aM^#$?Hlu3 zjD`HMb8LEJH&1R`!~1veYOPeRQv5tT+|RWcRTdR?)8U%s8pN@(aJ}`*^sp^LL7oZ{1Xbi)feEM7$s;S(&S?Tj>m^TIG1}jwKw2eL z+#(9pcAC=ERoJ0t%A4jlI(FAR#gI*w(~EPH z4$>rfLPO2A$+JDfU_|2mBdpI+qu1G~N<}4M%Gmqi@zQ_&O{CxG(Xx$yxmR!u-Dd}f61Oa@cGk-@vIbRt)ffStLRGFH zsS^TqkQZShg2Aj#gSi3J$<4nw9g@pblwrqqywsx4Z*%|UmZHquXh=yZw%`frvz!## zk68FfIQ(Px*UV__k0^$p%sL7hw+C-`^I{nOz>kr?OAR*rmCM(LDLv?bZI)GlV*Uax z*wqM->O23;L(g2AY6E&NBRIMbZAQS59h{(4&x5yHsP$_{QEP~iql!W2To{A2-pce) zs$y`0%=y)U9?RpS*cxQ=fOOx|fsWRd?iW8!J2OhjJ5|TWHiSbhbWhTm zZrFI(H?{Hh2$R%F5FxgwHYkvHjdSZD{@}3Y&Ac3X6#GbZBc{HBn&g7kU8P@Q!>K4! z2sp?&>2=inH$O}T2sxuA7B-HQyGzkV*r~=??a79?LrW~W30jaREnB2kTqyGQ?|<=w z+{2MualawD22_KsoDn>u}jTz(9Q8*l?OkY2ifEV5(Aq$aKF2-8ksHwv%EJe*gVzGB%-1_}tqFCb2Bp9~&VE zWQ6cPX#d7U_E>QXV*{}a2}7?;CvF@B zMQAH`tnP;?xxglN@w>y3zn6Cnnp4x##-@jbQnejRnhw_%A*}ygWt7e3iRIK-$jEBg z>VJ*a;=h>45Wd?Krqoul>r*VYxqSkM#NmkC-1B{27=89v@QKK3o^B=ic=y}CrgiZi z`XiPLC}R4(4&!3Ik+I#jS8yA7bvmOv`S*wXLjwK{ab4OnefG|11Ty&XB1uMi|ODw9XeK~m< zql5LdvSD38joOCrB_&}ir;`&uV(_z7g!k!@-!|lm(zY^5E0D+MB)7qRIQ@epnJu5=9A57WTy>_r zDmf%}3j(LRW7^4~O1^geFLJB^R21*j$<#WWEGN>3z*228LEkXIZmV8qMDW&+G0E%p_pm$Qi)*?d&`r3sQ|CKj*lRaiKp<(Ln{BH8qu(3|HAA_? zNN*toHTD4V#$j*jJxga*?x$8s<}=^W^Ct{=ODb~S8ck=Wx>z5hteqMoPZpwTO2bco zIrVKvF0lf(=wiIunEkB%4idX10_@Qj4%}})cv~-pdf)#!6L>g(FT(Ycxyu-_F z7*EeIifSs45;zdGnGiMaG{^PP1S#vE53`KGIRk7b5B?0fk}%!G7#jAEV%f=bNcdbx zs306iMYI*PWMrnF=FQ)LClEf`lx^K6M)2=Ynv-0)3f3*eYO@r94NeEW^3kiu1&0sZ zLIHjT7h8vL1KzMP0Xqr;c^b0o&s>(D--oIP6}kSrLv6M*Ws!0AuQ(}}5;QDQ6 z=ACC1cZ>pmK#%2p|NS`HkK6%+^DR6xwN#vK2Anw}s;ogy{~xDCbaOs5ZEdk~?@0yH z2s)@|z=iCk#w~fj;mV-&FqM&x27|$~X59}l7b6T*hQ8>ZS=04ccN3K0bU0CQ46A;mRCX?MVGnz2E?SnsCY!2 z=6&aa_YwJUTNh`Ku3J@q*RDDq)Z^7MR8FkHd-@!`tcvldsYu3Z63I>_eHR{KgEdXh z7!+lF@qFSnAG7svilA-WrsG|-g=6v>#25;$vm@KP-+7hk%Ll{8%y!S;iq&;^c<(N1 zf2i9@{eE@YN_F0)!9kFP!xf~+P23GZ5?(h7TiucAUYaq->1{T(k7net z{(GBVMiRZ;1E@m&E{EQCrjO^0^OQWqs749W^eP1Rk+K2W^y;B;GT^)zlO~GGP>oPi z>JB18D`8ZGed(Wr^$a@oNP|P;6!onY5+fke(5Fp#N9J?f7-KG+^jrXt1BP>Rdu=Bm z;Dst=61`Kv6FYo#Y}w6kCzpIxALuD)Cob~W>U4qW zM~2LrhYkxGl9~FZT*mOJD$)WT0n?eruPDRso}wsU(j4}#y(}u4%VrE;3dv)?p5PhV zETuS&Pt^Q{j!_&1`AtfDKVGe5kThGrU!_0%@N_%RSlnVz7a(X9n@lRjC4rv;Iph{C$ zezD$VJY8URK5BBBb?Qfd^BZd@tUv$j-YEQ6#*;3WGHCHnlj%weoFNA~93>#p-sZzW zWq{brXFS0L0?yBVRvi$?4Ocw3I>ayLl>SKe??y(@ZtfD5t`?pUqgB+(& z$XfxJ55qkaH+Jm}-!jk7w9?{{sHhL51D*dQ*R-Awk6S++hECkaGxvJ`l$yK`-|(Zn zy^o1eSEt7gES?Su&?^fs@-!weyUZ#GVGM)gcV==Rc z7K?QbHnogIz20wRgxX}KQ8ke524^+Z`Xt?(lK^poNk$Y;Wd<&@6x-S%+Zp^I@0yfc zwGejs+*dmJOh{{fd<7`ao*Sz3_Z}OESH0ccWUmmoybeCO{=lF`9S#d)X7Ox${wjwo zK(wi7V;?>}_s?AL|BK#tiwiRqyeautp?N7rL}IbZAMX3sKca1Y?9DQ}4DX7@>yHi* zdv&QO=P!#B;nV4jupWiy{;)*t@iOMbd^B`H;p=*P`+nVFxzWi$43Jwp0s3nGsFyC! z1Y)syPej3a0#*M3#I^L5lj|F%E*=}b8Zx{#sz4+p5FRK_gvB6PU8!OL%`bRPd_ClE zepqg@U##%QH%x(o<&io5hi`)LHS}Txh5Q(z$|Sil8>Dq!8D}X$vLyGweU>%BteH)+A}XS@Ugq80B!(5 z>w3VUE?f>aIVm4IqUV{SamhF;QX?>*&zBqqYzxoyJ$x8yOhd(V_trLNSWf)>;H#Yt zbm(!3F(niy-~KSjdhiVsh5S4bx-Gd;{`jmab`{8y8CY=Ws~F@9m}LGtnlKs+*R)4f&VNX5QZA5ISNK9X{t4&phTI3EP0~mJYsNo(A(lMYmuma; z<`v)U?^??&ziGGD3y#+P0Q+(~Ii>PCDm0V|18NZwRh}G4hf=QnGi}5u+b(;L@cC8Q zCM=1c0BMm%P>N^iH@}Na8m}_;TdHI2xo?;V-{5(VhkJIMQK`C2u$$B3+a1N<^x>M& z1PGb~i5(+RYKOxWeUj#paxLRh)N7d8Gt4sm_w1>A%bB<(0`!I#w$W^NWqS|}Zb=lY)T`MPS*`=k(~=N9j|xEj`>=C5w8bo_c8lV0ZL$EB5f4f&aY zT+^Z&%3-=SyRvRy2%l%ViBv*NQvZvA8s@5jwv>- za!cUMj$mF_e}i%%{XalQ$UmSXBa>msS{4k5t4lAr0f>?)rdHhz-Ud90~EgP{o@Ws;qZ+9)bHrJ=c?4tj#E#u?<|y zc)L;bf*csQGD}s(ws~0Xqmr-;uRMIsh!$uX=y_!J`^0%HLyQWm}aY-%2e%ZL6r~osJ zu_HDX2ab!23kPz$Y6M3@N}9rLc{*69ggOd%KMI|-Jk{~urNA) z$UemP*XLRzS&Iy+Zwyqw);Y>n&xB(CFvx7aah*?JE)jg2p(1>863>staTNH~uPx>} zqJX2+vCwJG&e*+wfOO1)Wnle|^5Eg6d!uFAuBf`V*{$POS$-}zC;zsi257zSiQGf<6iG2QLE%9n?@MK&zB)WN2-~mq6YEMy_`DaFoc4A$tQ{<)X6ueKL^8h`A|GC~ zd(xCS7Um4#4O~4s+}&Dd2$Tr4-ZW@XZ8h+jmZTC40dSsa+boE9m8E8DNIiBb(hz`)(yN}5plAF zN6DuCz-%zBlaP4^-`U%`Grq=}m6ms`R?_wZcy{X3|3HUF!8c105l3HbNarKGxs(~j z{4cS57zLqM?7w&UA#| z+wwjAX&blfxcB!cIS1s^s;(|XFwvI5F>teKBK#JE^vbifs|U%SgKb6um(QI8_Qtd| zPUoMu2%Lpj;mVBGjkH)SwFg*4Y47owHX;c1qpnHf%w->+ZRR6Sd2ytv6)<7`!?_N( z%8T~^flgQew0dyAyfIM9>kqMS&VMXS>PU54_rT)h<3Ja{AU`o2{ERQKEN5&?xw5h{ z_*t!V!=yzP{IcvSe+PIxokE+8DVEH zSCU}3C>rBwCsXP!Prm$^rwFsgwHa0MTXowRt%*Z!r~Dmkbc+c|*7|HFiCGENc&O`* z_J&Hh)9?9fFWgw;>MIAjzPM3at#7Grr-5NsWqU84=Wf#vts5^s7p1zLRgD>_%&%y|u`sr0;mX60H(gU(-X6>RP1iLm{MLg| zg`)K|m?DQtz}hmE@;)!3JLUfP)!xQoA)}q_1MS$&C=+wI*M91+HAh41DZ4x@8i9K< z>k3uqPXKjvKxlA~?y-2ek3sk$n85k`@fBP;+|sJ&R9ac(;aV($E1gdLvnA~9Ky(n& z4aOvZq4NGAbp2)IZKcYW$WIcy8No?j4~SI3DKTg3j()fSRty|#@@Jzma{{ma4Vr03 zp;-S(ll6p=E8l_Do^i>rC7ldjWnjNE3^H{-*IEZRgTaS!&-#e%uB5V6O^WHmi zZmIfo1l%wM?Gwu`zEw{aVSKdnQ_^5Qf9TH4K*u;J8d;^629=}d3&cBpTxYkcPPrnJ z)+-U!ozIT#WR!_Tmi$@`Sb2NBO+u0O6RDyO4#M|!?UzYaLyl4(G9g zD}H|9Lera6dGbApB8a=rZ*9%Vn(uf}AO~+KHQ_&WvXfCKZkGxjaO$uo9?K!s@? z0B0LytA$PvsEQM=nE!rycJi#o%U1E-^V`YHKT<)WNw+OMxbogQdQ{l%8R5!jUySxv zPcX8}A(O3YN#Xum$10UrWdYJ8ZJ1ffOuIcM*P@wv7?$gJne2%hKDT}|;B6TF{3PUb z&bZZ{h}K@Pyk2P8n%WohQ2_dh&*iGRu}hnvcA;$WbFxrjfJlo?QCZn~x$elm;G(?p z7?_!bBzyE|G2 z{%ol|<=;dsJS9NhKM@}G;)AtmL?Z+95CxuC)rasK{94sSEE<@ufA7DgiEQJ-Px}~6 zFR2TvYMPej4x65yAHSSYt!cbF!BYK!(E8ZV%$o^iX4z8*G$gd|R{cy9yj$g}2I0TQ z)pD5D7fuQ4>+5i7=*^#j4)!r<{jW=MqJe{{Z<^7@(M!)o zQsMBckR29XzII~**JfKyEv-#gL3t0Mp^=HtGX=_I5%DFNHD6_1DbWeW^9l-n@WQIs zXSBaeZH0zbOQ@nC16lL0Rd`=)KEIz+QT4UbLyD?asKGsE6X_|OOWb6bF15et`^iZh z0Hw4B@X@F`Lp=wFvm!VDxL!3>ddm1OGkh;3QUSS4 zxlCvug1Hp}ycX=Y#r@+H(5>z4y6j!Pc>JAXd6_VbGVzf*Pbthqjn;<$H{N>HPl`Qq zs*p&=?k$M`a!W-#<=DkiB@e+F?&X{wzt!Y=3xS}T6k0d7qr2UHzi5JoW^c#6H~991 zEoA=ReH}))ik@t1lZ`Le)$0hABbfYJMVR3& zxKwYq_24la;4=Ji97*Ie-Z}u~^kTa7Xg%Uq7x*57gqtAHYYEX}HIOruLda7p9>-6hveF4*1SCbNF?>2t~7Gt%{*J&G$p;3o}>k!?J7*kl8F*%xX_26)64dA7m{O6RbKw zMz#a7Uy=}IFsT(R!dw)s4vPf5X1ZWsX)g{cCSoc&#>6zf*gu%6OZ4AdY`Nm|EZ$r8 zsy0JF&4DGK0zYO4otSzT9`eRx_J2V1q|p6)eDJE8Wc#U$^~%X zBV>^%qAh2y9C)6H);5Vie?2cut8h(-qD2;Zq?n=KBoY>zpV{Hqb_+M}Uc-6bE_;u> zIZH$qTdl^2o2w$#RloNf(RzZ3yQa5e)eH@1uJE$^3+&({GL|7I$yzjr&-~qx;S)KU zk@Nni)D^=b08s(p*wZRm@XF`NbJt7m)G7MXmyAK>Bli}@Hr(L>mU;dZzfY2%gk5Gd zR)@6wo6%|o(%;rXI@xR+!FG! z$H8jxELO>+#(H?-?Cz>?PO3s>2x-Sf;rD{=vKFoM)imK~W$)RYhK9y>D(scr{=1QY z4{2`-M}DlG73NrX90h9m)5c`QAi23E0n!pB-^qR0>=0*4xNF(`-@p829!npl6el8! zaU-WFO5WvEoooCXRq2E$$jivd`}{(VmvMcu4Z^*bk@rqsm?Uy%wP%Y(_dM}GsRm4C z0}xPZDI{HA4P~WBl&2etd_2_K9UqbUIof!2N%Ovg`mv}yQnol-(9v;*Ybr(2K8ikP ziCb6d*bGe$8>wD&Uy{VUAk*$;gG4@ESq{EHlB=gbWLLgNRoWMg3e~iwBQmhV_CPm2 zKK{HHS5+3YCibz0PXhDIgaT!qoXG5Av+sDp@VnEK28;37^xXOw-Dq}QyjZI+zriI3GPKR{4Pcfe{-!dWD<~P?5&aZx3;#ncw(H8=9ZQ? zh6AMnVCOKVxkPldwAk9n|E%CxeSRa2m+`Ye51s^MB8++qGL)cHJ9Mmec(fo91y3X? zB@~b#mX)3E#2lW%IX-qg1z0vh*jB0i&Xs1Xf~+ugcOF0HB*vSPIa?ct5@&NQsj7CO3*l6|+r{VQ#E)?-b( z94*^1qnKAEF($}2(vkLbM~MpIvgNu!hR>JpKf7_=x-oY-T3Z>#RTb`v7X0Gl#jc|x z@Grt`wr{`RwL-5gD`N%B*j}5Vj5<}EALj4!q7+-`HI!X_D+@`7ToG700a)i3Q8i&N zVnwP=(3htVp_@VfgYblEJzvO^$bsNt%kI^8qA!-?IO`h5wm3?O)^ex_>X#$K!(m>? zY^Vhd4N3j|ve!zJ#m7M@pA!bF74HZal%U}%{EBh|7-Q`7 zJC&vf#rX5w7O@jTm2v5U<_DG%R$AjjN$1_z#Dg#LlPyY&qElpw;PM~S@wM}YBUSt< z>cZ#?OK(9wHWh8ci*E|JRt|iB?+i9_r4FPaacQacdEQZSpSC4b9U`8%AwXRm#JG0t zFh#jcM+Z7AJ>C$XvZhDzY;yuLZ7VE#DS<#6<7wkgwNa~#pGEMX6CL6e`fsDW(9QQ2 zR>v%Lt@Zc~e9L8+<(2!%qP1cQ9PSuAe<}jmLG(VG<7! zDtk;gw|b-raJor3;^@%$F15)Hs$769a`m`h{oTJXS<&Bv#?K8mQNs7(;GFTD6!E`F zel#yaP`;9OxPa~b-MRZ&r5?~HeK)GV)gOl%<;0c4{51%p~v z4m+*qAmWTvFp+gKr7%O$%Zr#2=2bL*1uSs%XiZ4)@Szdf1SBvu)o)bzWH~u`{dZMZ zS~Z+84}8I;>s83f)F*(@{|rB>o1MWIU?p3}PrXln%t}Xu!NoVDET_(ohjQWMM=N5N zAtw^txoIY=`(9!2qpT4{+y48G`_$^FpT^bT?Bdud>57XBR|FCd;%*-n#z3*XQaeD7 zI_{xLGOwp+;@M*THX$mD+-zKXsmRZDH#y3f%bL0B7ic{l#4`n}e02jfUoP-yI5XWYAM{$Lhy_dOq)kVv8mCx1MkJZ$0~Y z*rxjPwy_yA@eX9pmqnFIL2ih{Ct+k6kmq zX3y`?&iNnqDjZ`ZvSH*uPJoJ!p27PnOOMFX>S_dk(P%zd)cN@nj|E$;!>^=F@7{F@ zaT2xd9WG=(@cZ}wAb5gx4c1kQJzC#9R_;3QI+P@vnPcj7%8pjE;^+Q+IeuYTzLU zkCD(zWMpfIz|83W5~XlRa6|9?XTN?CY{uwU`-VEEGmWb+eF-|Ja7BBG|EoGC-2YH+WQFzo1_%7U>ih9J|kFUM? z8@SLx{TY8cf^&Im3baY2X4Ls#qnll->We`-W$uJ`w*kIsXCza^xfF@=t{`*-X*>Kr=HwCC1j z4lQcdGPBWrq{qL|z*{aBd2t4r?RAmo4xiBk9ZS`ScDia0Yy!G3Q$A5hktOuFxRjnZ zhp2)iCVE@QgqF+nslkD9=SoEePsSG}t_gn_Dp<_CZbn!1VrLuTCwcu+){6agHG6kv zGEk8^g4d^?bqsjKlVl?>ISUN(AX{Ba_$x)FxxZWI_A)0FIocvBZYvr$odp+L;P|~ZXxxwg zZlr1$y{8He{`!J5#_QRQy{@Ba;!C6C%Q0E31{q>qh&abpS702r#eUnjH~XTJUopOX z9e=llZ<9{(;}86_vp+YV$c{NehK}qfh|dRmIcSQk#<#7mKXb-32r~m74Gl8#)07w+ z|6?%xm#+c&Rh0A(#=yDO_tq`b3C6iN$ZZytoMXyqG?U9!Y2&GFsUtPw;)4?*jY?O8 zd`jQqtr$>NRKy_o<(0kt%1IDyvfsGF(sl=av@F?X&;Y7@0~@~S#^39u%t-!-9cdEd z!CaW(*czJ`i{ljRqP!ZkWlHEPtDNrW*=VjWhU|tc!HhC&FE6s%{<1TmC17hr%sN@! zC@CvL%Jv@l`2NVq>t<)aIW;vk*)7lc4PzB>x=sI0sNOH)AqOsHZ6Cq==e=AzGuZFQ z%t`~H4OA!9TH+0n%qdeyGmcX2GWQVLXb}uYME=&bF8U!*$jG;C!M*i?JL>GskuX zy1VMYa(LEXbQ-`y)S}vxO3_d3^Y)aiR&Y@3B4}C}=cwiGa4a&~NHkwCgG}N}1r)C{ zYFPi9G%Q-__+yT1H7yJlWn@39rv+jj!302{xUDdIV=jr53^byeMJQBAsWBT#8^5Ms zbbz}7OsceHP_%=m$p3;=q0nZ4c<4`bIrGP|apfOHRn=1|Yb^OGw}Jd|mv21x>AUgN ziYE36GD()-y_c51>2GOr`YBH(b-JVI%28vFQ{oYRPZ_O-br~HhTfBA(FJj#dV!x&K<2LuGn zI@aX>D7-U&@oUB9i>eYo|VXGD1Ksgae z0i1~zqupaOG9v#RNnvs;!QXnd@@HT+H#h$%&-w`@ya788xX$ScWE}UuK8KZv8TR$D zh^!caA5ZchbqP`^m|~cZZ#mPlCeF48vwG_acxg-akEB>}NtGf$k6+A$ zGKb;9chh^7-iHwKv!;Gw=*);Xn&2<>DtSy9y%KZt{ru^Cg#&;!yQ%JbWPHclLM1_6 zOR!fgS-c)q8`4bCg#XbE_7(wS&Yx29-tH+hM2;b+h9Jc)NGD{S79at?Sy|BDCcs?L zKmB-vIJEefBZWmix-cSmvi~ruq*TaiWN1iHM_HKQ6Uo85(wdr;#4=fc5{v?w@=E$R zLV>e!=T4zq^3)#=$^Dxy;L-?=y-Nx^xO(Y}%d)@ktNEGU#H7Gk0>{Dcfm~CAE^v%B zxpuboTh(;LE#g$QjqXcFVV3HeH^4orT(ntoR5&5q;&=-V@=$8y}&pc6EY5$<6z?ov0tp=`&?iR{8K@}#R7wj zkKh;UCn9H|&>sbe>NsTkieN8j>!P5kP)$tY0E<}0lR|jisM|l3v8kYcDMY(6N;Y2O zq7MYJ=2i2^=e%u*`SW}H7A$=HgVdfx&Q+2E{b=7RJo9M=I`H~s!7|G=LvC;DKjP@( zorbDN!nJqnZZoM^0BN1tZR;4vw(QaYCSdF3h>e+(3<&ach z+7+d5sVfs+yRHIu-Aibyblx!!_VU_(&?uaE+46>=|C4;&tooegqXV>i6czW_%P-{@&esdO_TK>nrC}gpPpfLKVPsO zOj}NhdUh`+);8_lamHkIw%;s|OEcFBV9rYJfhydLeATTQSe z21&ip%LIfy4R+h{m*L+Drd#hM+%AQTpbujmtTsi>PC3+db*{T==M6c^W*+2biL058 zYa(x=tEzmVADT}pNJ;e9{PafajWwSV6F;1V?go_U8S~O(A(8$m*iC`bY;?G-xZO<6 z)~cbk-rl0SBd9dq8@=T#9RbTxQ7Qw@_ z>$@i;8G$A9+QmLFPF^Uwy~xG68v@?9)1UKdOBGD6$x46Chyi^j6?V1+-Vm|@18%Ss z^>G-0eabJv&?yh}SL(>Jk3$U~l18Ztl7x;~R3pF#!)44h8dmhSH!TJGwZhLQW@*L(J!23k%{W;O< zl`zFKTgz6+pTZ4S$NrFX8dgBanCdeG6To!0v{ea2k3QnOZCbJV;(?dXx1Z(Ag>XaT$g|v#_~LiaQMJ? zw5fAb!UX;N-J}pYKPre`s0|hU5kqocte>i)jFu zB7q`pbP6-h?2tnyy?jd0gw#!>cBv_~L>$Y?4`xL`XQV%@z$_Taix-7mWT%WmFT*b? z+=qHD-(S-WRLg+E8it6#(b>d)n*{RDz1zHcUfMtcjM704mg0SbhSLTCLPJMgo>kxo z8anvbHrb5<8u`y!{vOe0gEBHQJbZi~v!t%?_Qv-U;3Nys>{^6n`_7Kgi89w~(_Tsd zlS-_&kIzDr%U=F-2+&F~b&6%#506@VJQ4O%Sx0351iEzp_9BvPis|@DVpkoJ2O;>I zJpvRSiL>-4>UNwWYLlj;-~sHF=N>N9jL)Tn>Jh_Jxu{@w$;Ipf)~^1196IQ5d%R%w z!J4F`sa34h0;+-B1&y4eheF$yWa_#Rp6PinTRLGtEEdzB9?%OqcN1t7& zFLcyG6V&(h11@GT>dC^uY6J$C^NA)N6UOQB4q}$VHzpbuGz$6L?z2Lv*yQ*8gRNTJ zi@ar%&o`H4%_ zUym>rwY42=|J;)Hj-9=rxHz=EU9{XdjX0TG+;rfrLM!^dm`~E5;q!@@!M+p}NRk1b zj&SM1Vewi}3vgE4oJoBERZxn{r}vn_h*=Yb_t5efmqqo^LJP)I8kVIe8Tir+^$Ws8 zDZlNHtS6=zn#tKaovhH@%aY(n)4Q z@bisUu&h6{YX&j1$1$5i)XIOR$c#9_49TO5)PXy%GFYD@h%hiQP#G^aCFZFboKZ0r z;3tD%{zy=S_x>@UmyX|vJ63fV8YdkvfB>1a{h@{uM+J;0$=EK|bU;@EV{p$koM)Ta z1V<-f-~*c-p8goW(&t%ml&b}=Yx~pOkFh_$fhA1x$|J9T63eI$qQ8<)GN+UO(rHGc ztj<}?oGDM$(ca!}H6rqooz%qWRq(&~QplAOF)GlHzLpD4I>ET{&t%2{)K{VB15yF+ zR}Bo=@L~7Etp4*yFo3XTUg&XKuaQx=@jagZ`{3t&t20T=(!mYchld9sLzl&r`r8!T z{{j71o6CVg>&%GBal7mzXDBmNj3k|$-_##j@Xf7z;F@@TvM>6SCx19h?@R6Lmw0aJQ8 zo!sgj7IX5+&%`$}H6{xN2yd)gA5m?W-jo)vyK-%`C3VdV{`!MvYknN6#ob}kr{FK1 zlaRRy7(*!$bTE7|hOrf}y4JBB;mo7j?3sn(^h6`+>7W=dNb2IHl7f)wJ z30due=pb4U`)w4^%19IX)ALozr*iFVHFE59d;MD~6ROIuvF8Szr?s3uRpVLt{YQ<6 zH9<1tEEGe=uHxGE=F_(qGb1(qwH-tVqYG{&xHNB6CQeOmU9>IgAUnV8hcFm$Z7ri6 zZ}7DzS5_hmD_>6t1%D1DAEI--Nvc=}3V}Gz0?G-adX@F9Vn#82!7M?TWmczN=j_to!O zsa#j!p{#qxOb`;U-KOHZIiTuPZipcWv?Ki7!qReB$^#3#Zwc` z@Ii9NTCFLfGYZ4VkNj0zjqcc3)!77!178=BB_jN}Un}WA3i<);;as-IzCquIC7kPR$)n@Bh#hJ2$ru3${!+m1az2r)+-yJAzf4wDNZ@XKoGt_Wxdbt;S z9;!b~cX|FF6_HRb42`mbOOZcM6;OR#Yg1g~F7Umcp&IJZ9@K=#j=Y2S<>C~|F72Fr zt7eXi==ZEsMi2l_$j-;XKpGl##YXctE#NJIjXT!qY~78m!#+3m*ZMv0t|6PjucS6a zRt$Q#%~(D8_~};P7&@6oCWoFEE~?Ny6}?{1Q_{TovfADMxB%aX!&LsQQ)qM}gaM&P zoZJy<{|^!sCKVP_5K!-k_DWi@4ffjmeuZZQdHY1JHNNE=c$bOv8?sCX=YktYsYHAq z5$I4m!2;$aioh}Gpo{sT)lH><16I#hOFT%deM_xLhpz^r6Q2@ZPc|c#!IMxwM?+AN z5Qj$y@W(wzNBCZ%U_{j^o}d4v)&1rl@>ALae?mkyzp?lH?koxs{+VrK06TlO2$^j* zT?E?Bv+mK}I>^9wgcFw4%I>oj20>>vs{K!W)Dw)gRM7$R7Sn&-1baAohCIw<*}k^9 zdnDx0?JX3_#4pKw0)MddkaYX7%3*gGPOgj+iC&BQbZq#4nEDE!w%TCrBqV5XcXtXD zx8hzX4nc|)cef(JwNRkNo#IlwxVua7QmlA!C=NH@z4OofnPf=j06AyhJ-hqvKKrb3 zld0O3+4v@^@HJ?_VDGekoZsN$?Z=3$%v`C}87o9>rxph0sDlr%!D*(w8q$9~LdE|| zi3@T``(rs$^UcHcS8oJbSO9BEg}i>f3Pk;~T-P_AHoT_&U8g)amQ7{>V&|W%&e51l zvIAzq)Y6WrJD*#+e;9nXNES(cMQYjsWO*bBPHjOIVmA$+=*G$uC1wHq!o?HQCDfho3Q@3D{k|aP7 zRLW`UNEbvY>G>wENNV*rl4I{@jc?>uMG zXocgJYSO1ill40foGL6c)BAW$aH#@s%}!d6IA4X=1Fvo>n$}7BbAy*s=|0pNktC?oFh4S(kRQlMR@!h$uI<{9>3>Prqp~EMVjHcfsu2GKcqJ{D3|ai!{N!tVLpkMm5Vxe z&gzMGO6`_GSoih;DZKp~vic;F+Yd9e_Tg0cohObDlFeL5F#4qpvL78f4dyGZK~kGA zZ;6QPHhrJhX>6PNIm}sHJ>|*1*Ieo>+BR9~1v|yS@2~#Us~XTn&72?*#4 z14_&>kk4Ub=tlZih^SX) zsX`8Z+ua_qXW50SLmt0kn=UKeX3j3x>cOX%IPtQiH&OOf4yBFi!8nMg~rA7 zt#T(Kyg|v9YV0*#h{oyM@Rp&wN>f8y%&e#LwFNaq!i#)l@#E|qkGci7A-|x?QNFHjS;vfa=S_T++a`x< zJ{ZY3D<10S=jT(%DC5;4ujfBV^qwS2#gYY?M9t;=`wp_VO~Li~;Y?II>blKDWP-VJ z8$iLza`ts+4p|2FOX9_abZ4i@+p8C!DJo;v-FUz8X6mceQhLXH2zVMqU5Jso7>W7ypTX5*|^qtpV`eHa2tj@{}zj z#<7WSSzB@O;Eu;Koth2sF;F7G(3t3?>m@KFGqW+MYY9`(M$P7CJxBua>f#plX(59m ze^vp#OZ^m4{8T+UIvR|KHgK;&CmC(-vJg}QZ{kduZK3bqiS<(u*rbv1@qTkcZgMvk zjsi)=e=~D)p%i5gwJ?Yz9nN9G0bcSj&s*onlO-&c9oG+|3cjlUynXTbZTnTia>oq> zpv(=+sRNUUcF>q%R?S+laggQD4>=BxTJQ960|FQ!kNc-VDTMq1%)$*WK;6nr_}MZ= zWAz`)JbOae6b6VI&{i`Sinc$5>`vVKOXq6B?ec#0%)63q?IS_csnvj-`ddtnX80L} zLZu2dJDNO)hS`I5q6wYb@<%8FJ9R@1MJ8>4`6%FUv!c_!Ze%7H(~BT5JxeIG2Mt&h zh*DS;4A{=0|8>>|ma~hXhD%Ei-pAIbVx-!r8CgH_ob@D`AnWP{t>0@ekNw%(yL^5) z)zZ|&TdS_EP2`;vLW0*Da&2Z?z7UxLCZGQ}vBU2Z?J#o!Na~j>FU(G&&|OUP*11ct-jX8M!h3v=K|=dh;hu4CPfben zJstF)Cyh;|c3d9c@c&R1Mtj$k4gzxMvU}06Q!sHT#r<(uoL~D-4|O7Ai3cjxEQ)$) z9>%RKkp4A*GIik^7>?u9RPpF03M__k1?5>c&o_u{dCF6v%k{jT`{H}=TEFWbBDyws1Ue87pA~_S=6w@9c=I!LynXv&Y@s>6^)!`j-~$Y zV+gHY$uj!E0jI2ng?krHcCD!BD@-|!{iCBkhX@R7`_=Z<99sK_q|cV=lBMhYdrKaO zx!w{UmkTfb#q$=qI=oB}p|7`PEZt#L@N{GC#^|{k^EUukYAuGKYKv(HxTbT0lwvdH zGvRO0KLC&=9f^@RbYg8npxkWWE5$GD)YsVVr8x0k>H@^A2U3WYy0^KSO1c^Tupvfz z9nUzTlY9AR$uVa|`5}WbSvmxRjsA8ug@KwNvdi>b_n(8|MGIX|&AjqE8p+hyw!ET{SZ5-wBwxxH5$i5B{npO`XeNb?YWuIG%sb@4xmR3 z{s(YFTSdi5L#YXU?B<+=fYbmF#31%yk6RB6sDs6f-Uhu__c#U`44m{& zir|a~pN9dG4G?mB{Y^NXAx(vFuv8pLinG-Jue(x6Hi8paf0v;v_l*^AjOBjQ)n?O( zJ*zG9y$mh5yEr~*u*4SfPp};D@y(h~!19-uA2>b;ERc}(QAbJ%#tG5f?5xmf`y~Qh zLC4M>+i1U77x;9)?`6MO{pmU2x9{Hhzg6eUlIO(%^0uI|_Mio%|GJ#gJ3A4ThBZZc zTW(r{z%eqClRjK+H8!4(Q+8GtWD`ixq)nXGq1#hVl{*3yJYZ{LsqpY1zYelHUticvz3DGU|4dmr?44VV#H z54c$y`m|M4zHC89fOT0S@uYNnH`UnkB!2e?|G%jJ`KmH?Pb`nF!&PR!n=)W)F)BEON}JWhaY~u-17wUnt202;~{~-cyP@qP9BB|&<}(o zDS7s-8lWd~693+{P=_D;c2a?s`SR#(0*msfRLbplZNdriJf7YkfM69>;eF7nfD<} zc$_BMzZ6J1ArEtxlst| zN2qBb;~25c?e2v7P9-li)fI~??-{!VMDv4y zW60DVf>bwi%R-Sgynrq5wO;S}Mg-E@kWo9F zon&QGp7iOJ6%o^uuB}-y?l^RP%n&mjg4A8cYYWKTRmbED<33M1n{)A_UBX)V(KRIQP|I5T&s7 z=;X>xL|}~V=}R7>2uPA5<(xn*P=OiM(gx}QTsf!(hyu>8kn;yYhvK+k4(x5O_w`7W0Qhf9!O@`4?EnVF0Du@^oI`{*e;O(&@<~%$#tkX09tX1>zW;e? zUUJUEv?8p+Lb8`?!(2iP(oKsNWeOUe*&G1ik2u5Ic%{C2a%2j^2}CzV+Ta2OywW5zH}Gz*Qh6@2AAQ((eEGfbo)&@_-NUCkrLbh{ICG^P4W+dzaawov-e? zO+&&ZYyPkre;0i2x@yi@JlgTlS^E7OOCR&!(WRhSFIbii*Td7(b?@H+xl5Ksii7EH z!&)JIgLbG!NnLeywbWwQ!;FHBt4eebc4I*Cxmu1`bVyR{*8hq1Ep9O=3=I%Q!z3d~ zTHyXE&hR-GiMcQG==Ck-8r(h!Q!nxJS*zjhgp)?7EfR z^Li$q9!}b@0cS<{5``rx9SiP%Y?7Zw*}sFEdMbx*u6#`6vRwAEy$ka5fx)M(-@5*; zC&XImK6Eu~S`P$eJtKi+hcMRKyq&xLqywEkr-|U-+GI_h-nja$cZY<4WEo9?DHWwumn(&iJ@ku9dmO78>({I4UabatiZ~YP(y7xDgI_50ic#86kMiNau{k@=sb|Q214cRa7cLx#lBfZRLA>n z*1U7?MwoNsu!99W54Ba&xTQ|1NuD?Qo|>=f^aBC=hUZp-WaNWYcymzPW1Cz?;iT%AOq zOS&B}4q%u0SEzE-$vQ9Z8ZIeKa5&|;CS+1+%w{bCWC?xIu`c^Ga4w@@#pfX(@=v!H zlz^}g-Otu8nAQFKX>m45AGzT4a2G%+q*a35lo=4hC27+}v4r9;MI*#Rfktu*sCl0= ze}Z|i5ro$!`0Ycct0CkS2-vQ4x!OPkC@$$ z!vWYhh)b%Y2W#3;ASnYuAaqGu@No#>doeAPrngRL;xg^)HXLK+zA>DfjBG35%zTVd zGis|48+-Np)A*jc@HUHwc5 z&Ty71A37XLi3Wu7=Ds+nE}EiqFPF5m~A<7p9>6YzBpQcQEB|6QRu>JAN)-hijkND>j)(v#kRTRysa+(r$Je zp>?G)P<-8$yfDT-;74txbN9ybEltSf`&U+2*<-pKKib9NF zQYT)&CD-jqbrZ0p^d8HC@q#U*O!d_xB7uk zGN0@MO)AV1@F@gE5*0Y#z%nzyG%!zsOr)HT8-fammoG8AzzY$VHZ3A}!+{}=r}PjM z_~|^;^B5(19&YRsns`qcIw8G#!C@5?i;rq?ByI*~cQ_QKTmPgT`F~F)$$M ztf))*^GZp9VJnF!Bid{u9>bW4=~ts>jik?Asv!-Dkw0q*C}&g8QnbTO6hY4tO1&@4 zO1EX-HuTHDP6q~xvx2mg&1AFAjM~SkF0l->bRDQ==C_<1nhHUTX$xLWW653_)X@{~ z)I)3?iTfmSlT84U0_ojIEMF|gr}@sJ29YlLG208^c4T~bI=)!FA$1&oRXp5`;sN;l zn7RNfRhhB^IH-mNT?HTw4HZ*Gl3~5jCQMbvgXx5;&UI^{`$j3brgC}X{vda0n@Y@E z-0sn-9ThnLz#tLOHRBNqd*&r}%?19lo=n{MeEa%h?uJ}dFluMjsJ{x}bWMTghlwxA zJdlu>YY6$Jd__V(@ZJBJux=F-W=-)Q`*w1s$-s3 zPJ}UT^YAXMMqjLcAKUTq2I27a^z@>WoSxX85$=z9pndw>)13_@{tIO~lc*5aG41to zLW>FL%p8d`30&E2U3)3BA&CKR(F4uvfs*-TACy>dOd%kF4cV(tHU3~Dlnsm!@CN4R z5o&-pYB#-1WW;qfhTk~XJ13<;W=5&)3sgn*(^hWL#9v8|@03FZcP_KQ!TZoND=A5# z%6t!L+ExoL#S&^S>26jwHWE;mzKpEdbQM5XRR*^Rb*2;#$_ovlK+#3I;Kz(9m)`Nc z!U4_6Vzi1fQ0#!0R5+yTpuw83S#|hWYTNMrH65g2jn;$F#}NH%8tVmb(#Ab?{~2?( zR>+Sc_2_gu#8iW76N*0TDOM@djX1;(yDN~v=jNE8_5{b5HLLFWHl&;MRtj~Va_ z0UksQ{n1mt`mn#=dLiOfP-Zb-{#D4g4ie~00zlqiX6%7cOGQ}bl|9vqSfcG8pUY@9 zehGN;cpE|e9iIKJc`bb`PbKASlkZ=tYTb$S;5zZ0weC`f{MS+R;4%9%g?6wNGWUZn z+{qWR(8&vnIdXNi7RPFbQ21h?5(9>R$TJUO0{2tYIq|iTn(-uGXW;fY<=qpw@Sbhw z@^a7~bfk_9znX9D`A7cg;%%eYN0Nt6{aAGFl>3o!hNCk%LCKGSS?W4zYJQu0zJDs% zV*YwjV1qY`zznix!RW{{#<}J>9(&8+mU?eu&oaJ@~`>!9d6VLHjnnN&6O{ zu74#Se{IBX1Iex>H@FI%t-~PgYG@GqwY+Q<|2a~Bml41PB!fBdIrVoY^uMNoQNzRf zzhEKnOL{DHyH98l-BQCpv*?PvxL4vEN2pTt)x7Nrq}sj|V^YEsH`mYnYUzp$@8(vA z5n1<|A*i*v%VW6v0AE5N-5N2v$!IiSTxHr?2fn#v92bB}EjYs|2gQseYo1RQwMPjs z$A=lbnFJ38qtvS;Bk1HP2qgOcq{e|!2Bx_080mX@9EAR$0Qz^_HmQ%E!=JY$o&iH@ z0-@y&x+ZqLIncyM8%1HqC}}V8z5$nbjOlOG!+>BPW_C-kcN426e$5lvkHB@_dPr5%*K-Y(zk__ zItIxO^Z5Ejb#6ZUU0~}c=FWE^9~=?sCPrcZjq0|Phan^h(z_jpzm7wc-u)#kO~X9W zXfj_^Qy8)aTJ9dAI1+ql>--AMOOwa^R^OZ@LK5{EALQBN! zNR&$W$C|q3{pn@~i~RW}vSL8ot?pnT^A|Zaz7a2a+q6pk(3f~$v=fh(8g_ZBH)!D7 zK7z3q%7yJy%yoNKQ9*e%QOSjw8Jq2X#?P@F~DXxwWA))j%HaY5_|;t-8joQ#d3g)hQjlAV2`&!7FykB~JtN&(kkO(_5!uCd$9#VPU-F2z9+(CX~$yqI_@m!%ZobP#USMVJGf)6-R5pKTj*{lcZ#+uGxDKwa1e z)k#Xx^?N(y^9mKF%TYy!_Q4&ufrrXbTGo*!{;wK6M|gl;nF=jCeasa16u=v;zM=6+~Rqq zQs}ue!z>+QrcLLJH=SeNMX z`CJPXbI@hOs(CGEK7l8+j}!67$hpO~h6HlPh1-iiIbfh^ONt>b2q0Dt09SY`H(OQ&U#Q3KABiW6@nA897N=X z$qbJ}*Z{Y&g42)K1-I%n8{Z4Q^jg)2nxR(eR)ku%Oc)9qTaY+)%-g-6b<(<`_?~+`DdcCu1b%jKUQ*Us(zNo=x{H%WUbZKxP2(ROSMDh!S7=I3W}t({IVnE=Z+VSICpD?pM>* z(4Ocs%p{1DatjGQpE|FcvZy11F=bLyAc^|~7y?04BBUmMu_ zOSNm}qOr}RS!T*o&3({T4{p;ZdsV^{pc}cbTsUHX{?t_|T3NwLt(bsTV*UIn-q2b+ zxQVPk;^q$_fFvsZT(j7M-1>{dUg;WDjtG_3sq0{B7v_;cWMDWELPC>2?a%mgk0{5_{Pp?kMQP9W|WgI8&Y+%6vCi=-{o(f4}8V}l$Z zDZYjVM}pDjU&GDxR^D{--$O~V3!3|di+&--yl)3Qwd4E2Nd$ zws{p@J)v#MoBWuQKG;;ot)P9^mD-vW*F)go!I;F<99O*B=i)$qe{;&4!Zis(i*KMd zEmpJQswdFSTe4a-a>f1r_BHY{0O-Xb#sw<1O=tc__R@ zW8O%m9edp(1=euHD$0fw$g;D6x*eKm@S-_hXnXD{MZNeU?d5iEjs2Kk1Aec zPaY~YVq_T{hm?S{-94L)$YnK*?2&9g2^6EkB0|ecQ6u|m3^-6(c`hz5xQj|q5E?Aq zLqpOld#(fF7z@!fFsoli5ML~ck8@vh3HN>_CVM%;AzUDKxUr?9a~5_DUXg+bgTEURrfB#~8fc?*2>~rCBn4 z?$A%N83J~r5vTlrjR--X_1e12LMp$7H5=qC*I2fn4?WzwhbFEIGW}zIv+?Uk?cdr} z1%;61jL-aYY0-AhHRF^0j=cHk$z>fLKPJN1z7;N|SVV#6mN^Xtem@=6g|Fj&nh_Ig zljnFLv6v83&W;4i!lMS(083lf5_~N*ve~KgbAZ5yEqNP=fVRQYOg9Ly`&;n|fC_fXDx-o!KXi<@$@>D!H zrS;?Cminc2(41`=B{KpdA{qkpLK-gWH=Es$39_!s9@72(y+1#ac`cAv2V|1MRPBhh z1E6(G3^5blNLA22Z5(v&F!+wpSvy)CM<^|rfFLmntgq4IB1V@4j^CyUmjNKY3TfC~ zh-QrEuUFf4qswrM3PFXCwC)N?lW>ju5Sv@hM#9at8Ul2~+$swxU44F2_z{R?{Dpp@f4XATccpslR_c7R$0g9UkNguH05JV>z4si8mYCU>&r2wyZ5MG zkj*T)jMi^)dG~(!1Fz+Rb#;S(!>Ko2a6nu%Q%)$f-~cM@cujQqIrX$$Y}Gka0Ye}gm>5JQ z4q>Fvu!u6`H?ePB;efdEUUPxa55kCDuT2Je1ddI4j9VsQ)_N%EXLc|B7E61J!B-== z4E8^o+Kist?CgH16g5mDS9U~boYATbv$ILVk|bH>G|Xs0!2kmN-~zT=_CEM94=e&W z<+>qE6{3%*Z$VfP1EoM()3NL}&G)LjS~v1xmFu{S55QgLrR6N_%D|4|-TVsHH3|kY zaVwP?{VJL;I5&78T<*;0%`_ioM!}Xdz(OC0|5pBWI#`Ip>&jPbgMRL7u)e?Vax_bM ze=pxxmE&O!=S)>}ZX@=&*8@QRcxqdXTo96gNqjK90I#q4yHq^8kS2B>sOoe(D zQ>9P0U62~VfG=lig)rnR~!;RXv;ySF4Tn>$xwc>OxAR3bK7Xb>%$bpi&)0T*8Tem2J9Jy>vZ)(q1s@?bFH}UBzxa^^M>@}rjUylDT}`(| zM9&E7w6c#2>zOmGxm0<+!4hhg;zpQ^Yv&mJUdMF-tj#V(fe!BB;gAfjK5@FLaiKy@kJl7J@iM{mr!4~*#8tnWK0FX@zk#*8 zXb|@CTwabc_qpAJOVPPOJp<294qpK&(dH4ov_2$6xXP}n(R~<6VejO^2kQ_fyu3UF zCq&wW3oMOm2EZT6H>4k)n)2qRXoGh5AszY8IPHe-6!+pSeH6(rHIP4_V*9C~Z3J^f z&yWR>Yi=eN(1rPlm@PKM8NYZbQ^+wQools9QcH+YVmllRR5JrE@vwUhFElO#)Ffu- z#!9+iQS}cGH7L37#+Fz(>9L;UxE>2G|A;fVf2>Zs91Hx`Qhoj$muM1~oyGO3*9FzE`ypo4?pd2^{m`I)i0JOWcRsoL&*!2n49 znPD#68z@6K1i&*l4w483?o#0Nw6wmF9i32dw|9~Y7Oyi1EgUCWw%n0uY`3lRYNwI> z<#yH%&>S!_y9kJ)=o1nP1{lDAT4l&xAeCZta7t)pSxx#Y)VFvrX>}%4A^fXQOJ4$4 zihCF`krbS310|oJ$fIB zMnR3lE09j&S1G3NdQL?HQ!5m7`R1s_te#{F+(P3n0Su*HUG-FY>ew*6SyRmzsg*!DY6)BU zg5To{horph2CFLwFPmrEIpN&-xH%HPeDHgkMzPYw<0GjyKx zGYuB%N~p0P%M+mw+lnJVR)F0yqJ_*y!2kP~P()cwr=YgfzYWP!6JSa&L^+r-N49_t zeV>j_4G*=;a5flVP&ir^P$$|T#Tx4CJe=Z&`GLk0F!&mKt>}b^VyrSp!KRd06!Zj^ zzIUh(NS{NcxDlnU3QS^qU>54gnX<ZdQOG>L) zn6CC;1S~i&137a!P7Alp$%?^fZIFA6B4d|@8i0YW!R`(%!-%>J zEz4&!{PAWO#zrWP9FS2p=#ve$Aviyt(M3}SBE!#Z%5I@wjZ}lkW?1J8v<|Y#mTaKk zKh>aGHH;))Ykk96A+b6bKA&mOGZRcx`Kuhf&1NAC(m{lNyG3;zNZnN<=a8%6#Otq# zE|<34>dVLyv{)s*0x&DbF=0D#N39f;=s;oKgB+a9}T(;fqm)xG=# zHg|ZatqFQs${Mk}Fk^SD! zk30Vx3G-A|Fin~Opu5_p@=rx$!EMbavvqdJwopYGjt@RbPI$=>ic(BoWggC(j*bl& zkr8*;cFe9wv8ipSeJVA;LUqk__qI`;4-u?}n4w;bFMMq*Xtv^h9P)1UT8t@xO_^OiRfXzp zUixZi2mqN4)%q-WsuBjG54&h%s(Df>#j5K(c}YUFXf{}-WaGQHFKO}mtVxlXlF{ZY zB(Us_j&`EN+KYR1sQXOp&6~e!$Iwij0EX&VYF1K!u!+!HN-OriRv4&7XFeUKuwvUI zLuYYxzza=GCTU8UC?oF{6x09*>hLS(b8D-H5~OsO6F~bUH++raP~&Zg)-hAMBlM&j zoKh=#y3{LyZ-@Orpn9e5uq{m=e`AwM;8s0a%0klCR*ZN8O0YU=d2y4I@8zfOgJ-F6 zSV5UViLg~B8NV2AuvlOI^a-4K!~Px03wc4aS;HdY*pXVegbmUD8YH0k!eArPnW%qk z@+6_WL;vIbS>F?6iT>Z_$(yGSA$^U%x4VF!pDmgP2C!gN#Xu$Q9#inzT4&q`Cbn)1 z_ZLRT_fzBn|7>_5iiem;X4nzAyIy@d@L1f5LyFPaHO@63(}FSHPAAm=ADcJMJi<3! z?ji)vTn<6FPcYqPW3ZynCs%T+{*gWeqtRPzMbO9w`>j96hjidr5S|{rKmLU=*>erIoD(L z+w|t=(9IHt?x7s-M3hq^)_;JPfNcZ=&(Ox!!!431MnO`y7JxxqHaZejtZDqeo5{i$fn9b#n~KqGfR|!Zj?sIgZY*m;?Z_ zDL5!Y+~PTAlmmCZ``35sFm3p6IJQ+p=$ch1^TtgX?uc0(45i&uSE|&MB`fedN_cp< zI^n?lhFc49%$Ad}Rw@c8@b*#s&$0u#vCr{5Cfe=Ws`e4wB*rt2SpP_*4smQY^cdVE z`n*I`^veqz)JRD}2vd(3AlGu3twPDCyrQJ7m0N;3SiJ^KvI2VeVF&e_3rT=6wq(t} zuT|eAvXmZ?Q^&d_5lSsQXOOVCJ?<{FajrmUlW|+vida7Ea)2kE|NYnf3qk0nSm74= zvARtkX_|e&?$W;YgVhYbk?%+qfS4DJuIE6WsB6#F+kH}hK zPf_P$@#JpZkDxZn>_C$z<;>};qnw$qUe!)$&c> z4}_tax86dCGFi$-t&}wMUUyfkb8Ek8i&FId=K8`H33x+I z?j_!?PH>EWe8>LPw8lK2MdWg}`{r%FE(Y_Gce9ZrhTOR>3T>N1i25dGq)}YC@EDVd zi%(xq<5b7J+mp0LWfGm{%B@#Q=66b}TK z?Hn2|ch6_hO_!9d9|@Zac=L7@NStt%aj}(T88sH>2_loiVQ=GxHVGD-BRXqfOjE%dh(B?K)6GKm2LWUj)01@@#h8ZNt& z{4+7F{o0P0>@(WfNy;;IMa&rCuSom7-?4MLH$g(*awQY2D}55v(NwSDD?f=Cq&~i; zh6cfq%*Fq;$L{A|?m(#GAO4&5M%wf3RPO7VdTw0*OVZ|1VK4N2MD~#@{Q&Xq8u1Q0 z7~7of zXyMxTM(Un0uhOD*!Tod(xV_+5D2Gc-YunVmTHSQJvz(p?Fh1Q41al}=Q78%n+7I03 zABxUqjlT~OrxfW(32zmDS;+nC@IBg0B&zt@9`M(t#p}nlSBn=y_n5fnDW*b)*#O$B zK2iwgrcO|7)s{8qqEob;{Zn9&JJUIkukpsCrRn5X?G7TQ?6CmRv%^?oF6VmwcZnpn zd3&9g&cw=Kmt<@?8BsAMOy+$Ndyx!dn^-E8=yKC*#|m%X>OIaOezFh*&$BVCStBr? zEG#S}udNF1-#+fwcQOaonNJ2&Yv#6#kvFl7Si8nt%&f#rb-bx&U_qp#v{XZ;y3YOH zFsBJzDbWf7O5sNdh9;+in#z*V4mhw*yL^_z`mP6n5Q`!qM1Z$jIrOb(diOcfBNm(b z55#?EXoNXYS8%J7@~gFP=b|L^RF94v9D$E{i>0GQNl?+MKAW zfW#Ip(}xQH;Gl+%#|82ya~EUAEgswj+x}F#BpIZ?&<%_*(EQ%n2oJJFcjk8hHWz{1 zgRWkvVG@H0Oe^)orDf$Yf7&i{BI38Ysm?f~;pW$(z+0YR@(kS$Zh-)8^{)Yetba@a zqCkJ^k8K8?y|06#GUQRf;w&|CL)a10M}(>s>zi&Z`Z*>a>X$RxK%IVTjK3(+e_G=O zMUL$xs82K^F3ZfOsss2^m{ib=SjV>iw;b&FTg5Vd^o=jK2@+Tzb7e2ctBPWdKIsQZ zdH>rAD2zU`tmxW6$o7+G(5F^`>-ZBHeFXBeRFQjkg|B3J=8Y}KnOLJl`=e%u#w*5Z z#91`H!W$sNV-!ay%}PoPKPS$t6 zhQqNRQT(bLv^q5XwDv1xNY4fdbeI?~2YSW^mP?b_7VB#Wi)V(^`M{*%z#pn#hPPF$ z?Ve39(%MrfZ!|I~_40HW?|9CT@TxjuH@rXy8;%5jd6jD4&BBVS;~C7&x&6|jK@dQZ z_LZmM6^EjctAeDVFc0_HdCHNI?l-l>ruO!`Dh1$1c$J~odZWcbxy7m_UQp&3p~POM zJ#jXE_!ZX$u9(;h5=Zt>Gfg3WLkLqf`g@d^Gm{lgMgs~9>t^=`|cy& z5!vY!3mTSn+Zm#@N?O=SjfRP|;kR=01)RxQAo!7_yQ=p15%8$rjW}@6EdyiGMnd6` zbMT*9dT|)zdyWU2Z=u!e0yBiA%jv#|;6+vYrVUYDWehCbkjpKBip9YbmLF8#hT45w zt~pNOJG+1C`eZ23Hg_9D+PA(^<38qc#vAbT=@x-2u(B8VChWd@Mc;`4NhXlF*EAdR zK++CcfGF97=FnZ_Ujix+p;>*Jg8!lIEyJSf-oD{s=FOrfQe^wUH|*OpXYr(yziIy3kS@>?Af!{+UGjg`HRzpdW_Jy zHZ9jQvt23$BeZRtH;DyZM=Xf{EABFNJfILNU$~wUei!ddpr!oS>4A(phR4VQAi>DD zNZxd$!OU!A!O^ZY#SE}asMo4p_! z^aVX?`-rI|F@cQ%zG!ZU4*Y4%^|0%m`u67QD}B9;2sEA*Bi}Ef^u-PAWm_zwg5e zD))m|NFdgecVaW{)7cv0Mur#2 zr4rMV6(`v99LrD_aTsWbZC}WCFDGD(ZAN6~FLpG0hCqmXTu0Z?>%f7NecX+}nA{<{ z0u->`y|{a{lP$k@Bge`slzPH&FL z@(MClMb}i`m_36t1Q7)voM!PFXX?7lMH13~yNRz~3>c}Uy<_f@uTRMX!y{4(PQsEK zH&xA2A}`6dPuyY8;Els(t&X&a16%31v9Yn5-`u68r9Oa?<#p< zkqUZV*#hgxEhBl9>!c#JH3lmC42`Q}B#MXrF;WX)F^0~o);mbcIU-h1yt$DplAO4S z_5zNAB4U4i=23SG%jbiQ$077>1%Z358JmHG_k(33mKnR7S7y}ykkD}WrJ_g1(w10R zfIw!J#i|y)3U223~3`U{PE6eBUW)N&7&r3iRiruo_@3#~%Dz?9^elJ~@P zGEBR*ARa$RSy>sL224W!`9a#MLCTsImkW>TNfT{O&H^7Vbp?`mi~EDQ|L;k7i{|In4TPyR3NlLV<5 zg`x!O!E3c?HU~GMFqh59OS^uh-q`(c|^#V9gnZE&U zMVs9up($vem&%+Flpb3YxQ%{YTAQp!z7(@9(bG-LeScg@c}$lBCbdIIc3ZmF(|bpInJ z@|J@yMVR@;z0BuoeRJX>dSuT=43C~Mf4LnQYVCg&JU{1!ktx<1R3-krc0xxQocC^g z`5a;KQ~vhsJ0RV10!n_I6pjxgp!O~LTCsmqQ-6s^uCF*eDv4!1FzQ59>x8aPnv7-sSLT21IJ>t>0`J$;&#KB!Vryl9LxD{2P}>qAI@ zOM(j%zkZcVvA&sUGo1NO;?+EDVKUP6riCS&1qV!_hz9Cb$u753ua=1H9Wc&rbCgjZ zlZown$dUVkv}s7Ms}K)_+#nQ2g>y<#;J~UmOB?17AT;3W>Aw&|=X1S8YT8I+mlmTe zAp-Pf!;tR-z%Amv0yvdPzm&xRE*M#V@b2!OmonGEo6`G;l7H@j%QtUZbC7)|`)izL zzBOV?N4}x-sWAO8&zCLI|34`xl)YbYD{_TOmpnViyFQOIJB}^3R3mpSUy8gWAAI^T z!lb#gY-S59^9j#RL>0i&2(bq6UogPp1jgyiU}HCt6JmgsZV$mh2ZIxLxTyFHJR-@4 zPRSz;Z`wIGj3S*fO@j_!ff}ayYQ(E6J+oc_)ft7*e%i{)+HAF!7DhgO0CH!ns0_68 z)J*6nY)ajN;c?352z}RJ>rJ5FW(1M@oX}3T&teYjdlrofXW;#iRathef&e$1;vvCQUpOjcQ?N z$-?-;^nfVf`WV^b-%HJm^4<4N%b*Q%`So4!lcOv6w@7b~QH4pvuTIGNlgM9w!Tn>~ znnmqbhRHMS8dhR}{E~zu`=?C=8?NGe#fqanxq|6PElvzPJVjj@G=T_A&P*d7s)+v7 z{o$%NsFBEz)gUNvB{k_0UCpuz7hfBBp^)V?dup+k1N4q8(B)eeH$O?PtRxiJnsl_H6S?Q_Z%B8h#^(_FFYV0h6uD@nMYOzHv+UG za)rjF@pqmeBipc<7RlzmaZp!zY|--YJI`ecLYwfqFBo%jI8zvEvX7yS44kFO*0c;G zz!M{O;6>pdCa`#Tf(?flip16{(Bol*%sT>10_6SCVs-XB)K|LA+hEZHUOx$UcP3Lw;!Sce!hUF+i>6 zwqN8a4zWWs0yH%T`3k3p8z7(t0(3Cc!dphq>RSrH6=I>e2!FzZ1N#5U2)W8Fnx1W# zB7{u8eU%3sEzW;WgNR75c+8=VJO-KJ^A=d86rUg@3?r;0C;j~b6FQVlJo_csQ9sdw zp-HJ5WGX2FYO!&z4h{{^5;>9WA4uL5aXBoQ@b$VCeN42o81HX(7&uFkof$3u?MovQ zvDN3w7}0yo_a}FO01pXVN_WQKo4w-i zwZ~lq`wfO}t!^1T-B5E$KI=x;7BamlRS&v7K7D}$``kJB>&xoAILhPLTVzan{ux^) zZH61y`@HY&FK1}JQK^CTupPZ*S5{*buBunlF;rM z9Tr*plfmVmbI@i?`#Bo~2-IR@Ai?b*eG*$;-<4r{X?V6&p{ z#@kt#oA#*3YZj-BYDl7@Z5pGs(G-N&)b#oznt5?B(4$qz{GNX~@p}%ry#-aRbLEFt zeG`ZZo2bC5ZzE=^$4@Al$79-F5o?}vvwema zvGAh5?yZ;uxGIB%2r~>qOI0YN?=9+QNJTg8$~}DoHlK_o;S5PGlP#v>N~TGP+?TsbQq25qDW(HG<%PlolID7Ofb%e;y`4Aolg^ z{$<}wnh=owTP`UZ8jp8e!kP)}eI#IAZFAiBu3?z$LIg%uVS15KK&Z>Fl6n-oVV`9V z9;T<_t9t#^iB>+lG%@x&Y}b)H_A4t)gMm|*6jvR@DsT>dq$)>@qB#og}Tw?6RG+^&_ngi9;~(JiRM-4p+Fd;`WZ2(j2D;oDX69)V^!|0(y99ev8H1ep2q-*F2iv0boBsem7>JFJJ0V6pQJ+RUn z@f*rH#^W5Zpyt6xI

~fEv<((NjAP0&yKYiIILeP^Kl6BuugycM1>xgjx>LVxXn* zSS%Bh6@!PBlU(eAjOvD+=vWOSN(WF(14KG4O6!hg3n!pgvA*8W$q2wU@CUmXS+-=a z@9oP{ha_Rf)tgKPq`&^t%)@?0preU~25B;YZa-^yFCc&qmXjowdrYB;rjBD{_zZ>{ zmjjMEBrR*nXb?DMDAB@6Q7KulX>{z_S2qiKr2H00Nyn5ns2GnrHRd6FKOH+HmhZm! zAY*oV@8IO)E`GpoX+t*`KKBL#MVw>$l!`puTwd9l;EJ+7uI$OdCeN*^*WPp*4xwd5 zzZ6LDFwxXl$wNHFTt}Vd=Ob`&@WED(!G-`_Y9BuJ75YNh=j)H{O-SYkpRu20Ayr&7 zRiS7A>9H;j5oKTXHt{hzH*_e~Xq25COz<#MOYwqq#srH}F+wi&D+CRI`ejKj=A9ah zcuyL6Dyl+1QQUZ8|G){~tBKV%xBh9USSfG{x6#c6fTM~Us5t-^EtYpZVAPoknBrnb ztHM%4%U@qhlbhyvT6;@iJ*zJh&QlGcq-8KC!Fw;m37vClSaj4%=RD1M#+1e=qCyuH zXE=RrBx7~l0hwQ7ho$+s^*AL@u(Qm)c!?EO*d_`ZDI*xI+@ zw^z}p(IKBkY9ekgfZobG9ScOg&xbc0`6y>$RvQ|OZ~p}r*VqUF0gpoW?ZWL$Zjw~% z$Yq7$lsy-XlT(tKKsYM|2kj;9gLfEA1;igsKCaPH@$>_cP(br)vthK=l%Vr(4AyMz zqLUzF#lmFVak7SIqYJ|7gqTFGY3KU&&W|Z){;x&e^ zh=f?CV(4@$kACexdbSc{;l)fR?;S|y#335sK9e>EomIt6#tgg%TjfGQXEh?tP@IV3YPzZS!*6l=-ncuI7w;s`Un#2oxz<-t8IN-XUvl-)kCL=RD_Vn@1f_w z6Uy1T0NL_Uu)@U@!IpXYxk1l0Y~reBgmPSDdGFmJJAvW2poW90EUT5OoB)l-Ol%SP zL?#R&B|xXhNfA-?_Ohz#D(=-8%Zq%`XJcVumNb7B4|flbhDzXa6hPXF9nLv6g07BZ z^f=k2F%}>xdJI>|4{sp3ZjIxl~v+k!0jX!BPDa4`kC9D=aXeX57eW>Eolm3Heclx zV3X6NQ&aX2G&VFboE?a8RvlRo&iv8ElqhA3PoyQf*>CuW)##l>gf2VAcqKs$vN6epHJu1C5D*z`579M4 zFVS(g-J?A$RvCrFcKSDbZFn_LPbU-at++XxBr-AkSqt3E@bKgw(~yXczXO#DxJy;a%q71}1lU%!20tAyW&vEuMx*Uth82u_q7gcJG?7OMVf zGWLC>n+SDm(U%FE;DI8piYJYl_6kZt`Tay79<9R$1J<{(4xuq7{84OXhC%Bef>6sA z-`9%fy z`#&Yux3}AUll`ha_&hbkwwQTNOFkb+&gO}Ej-kIx3=6*hXr4ZMnR%I0BbobyWAWNw zY`o9s@=kqbkafO=)`2qnV8P1hl#R$cbB=hTU6Y;iQyq*fN<#er+irInIm{d(vgx-zn)5lGr9V8{CJpy6@QXT%3h$X;;7W^iA~IZw`@`Q5CGXyj zYIAP`-OSg9iYd!zw4XCdWfWiGTIqT|@4ac6rfZN*eTa~uirokZHD_dueRFCqu#1Bg z?i@A0@rE$w#9@ zIt%T4nl{Mp=_mJ)=5x#srO|)p%y+jzg&(-8jyo6^IS>bzwaq$;Zny--UjS&Cmq*l0 zo5Jox>(#O8>aA`)#T!E1J>?a10DgTC&j@-@SbYmd{(P+<7h!)HTh(e*J2UgbW%cjs zmv%Q%kd~(AfVWEO?+cCoF=OT+L_+;*T?ZSh7K?S3zz5{qy#qJnWFyVGwCqG~8TKkQ zc@D0QDgukw63aVl0UfJDiO07sXad^_;R6n7d;7&{A5YW9IyF)u8yp`!i$C{u3XUcW zBB+2?K6@{+2DS`qbkTwfD<>?BTlW%X+juAj0W{9VLHe5Q{mYs3cc8iLcZUEXJni)i zp8r6ZsSMiW^>THade!H-6pDGW!ZL~#tF?b?A+VUU^B#{Ajca+4xFc&t3951mgAl)$ zKeDI}d=|2dH}MDm{VhV3yq}dP>eBKlKfpDXOLi*y&}oR}+H`)fP%Gg*bT|E~wio{$ zfD!e`QkZ~Tn+^6o3~Hs~)X<=;CuJgvuS^_0ES7mOPTpIUnlV3*G!OiwGDj+*w|$hdtPd%oApO(<=1YW{PUX`>EFt$JWyE{Bv zAdSNQB@w2fr=N=?XkYMqrcd-{k@8t{)d!h7wZeo+heQ!3+v6}muSd01RmjhFT!!A z^uqH(BjDjq?GHm~e81M{h5)7oRXC-I5wShK(Uwn%uhkrxWi&3#BOA0Tu!s!sAl{B$ zA|=mgHv~@a7`3r#+sNu93%}=TvPfgOIyiQ*)?5DvhN$Ke;I&lhES75l44L)SKKvpe z*(u@~b(YG01);@n()jd&pWrXOLjYDqak@C}T6BmrtpogCRZrbYyPTwyVWVSV_)amA z64|qUlw8sbpTKjCXnj;tS*=@0Sa_)-^yy*v_J#dfRrUfsae#j^7rijFZF#H8EPdke zA-TvxpSN;u;zs~P*f|+yLKVgFeI;f1tAFntRVZdYZ#Rf&n+)Dxr8e=HYg1pg+tyS13QlHHykiF^$0Cs>=XIGSl3 z%0hd7Gz(0}NSp2BPuAVTd85E5y2C7O0k~xM;DCYDyu|(Bp>ks0EbP0AYqo$lk*(#% zyACCfCvggHK?mjjk~rU@rDx`_0*0?1sY>JsxP4R+^5mJtqyGNSg?6NoP1YlvO?LDm zjx0L>-S3>Y&E_EZfar@-lWfQs&1u4jt7)8t30Z3r%O`eu*j99>v^y^UKRfdk?q^c+ zwes&roenqc$#X*q`%#Rd6oa3P%lKwbjJuz~Bd97koi%R1maJQRf|jAxYGv)$=`79y z;M%DVa;DBi{oSz{5lU_dAg)@n$qpNXS3PIn1;5>cJ#zK(YAw|a^Be4alHj!8ETgc4 zk317@HIY_>Tm2~~Uv(XmPQgh_0sId#6px2T_;P)n5%Fg}d5pu0Gyy&ooO!1oOWN-} z3`cB;mXzCwlkyj@490bLFmV&F@32A7;P}*lMq;dON$uyXIxRXLN|lBRH<7L96!YM~ zQ7CEfJwGomF$dXNAh#ZY8Z7-agH#X$=tReUE7aezm%p-x;X+!n!`Y;FUvLE$lX-w* z5ceVgoqS`tt9=nFO=0@r=4V|^w-6;#JN%%R3lrIAIV=L$VRUwiSEUuaP@5NdxN@Tq zvU!T61l3t(6{qenDULAJKJ&-nR?+1RYtKebK^ z*RDS4FIoNA1a$tocL14j37fPT%SHo<(LMZ-BV-doSEl#jnI#qutIy{fo_vYR$q>t6 zry+u+Cze>wPIl1kxkj=i+c#3HCx9&?cqtRrWAKMaYL`@EB#8w+p)vBa?P2FctUAN$>WzkeVC_cl(uNv?b( z(fM4<;>~GJx=FB-n@XpEPEgznQc2k9uLG73BTadk+RxPNQuugs19@rWAta$Spmh`;Ry>?!xgAftd+xKb<+ru3@VQsj+nD}BW3V2(7I- zUs1ei43;Ju%M~p`iD$yhj88rPs`xNaD#l1_jnkdc6wu;ZZR zN98Q{^|Q+t!!#dzCmCZO+4C&^@$NCIx~|{rKyUq9Z%X>@>P~d!IQSkwj(Pw+o3k|w z>&(qn2s~78MA_9!Vy0LJ{K+_VM0*Ck)HVZdaT)^@U{&Fxtr&B08SE;4n&d3H#K`Ch z7Axdj6XQEt(J1>mrVsCEyyPGp$g&TS2}F#%;5hQ^YOF6tcSmEm!^jJMfM#mK zErK9&<{nEeS1Zo&n+6U6GPnnhs~OqXm^3poV**I-A;i!Z;-$>4QgwLt4Z4l3Wu`@rOttz1CFiWcOzl13o8+XfjqT9vmb|!4SGB=^urb&pz^ZlCs zIAoErKBD)?%W^sI*_x`~{LyAY@3@Ssc+ZO#HB8!^d8Sv;C z@Br#(G@Us{&Vtvtaf5iE2B2%w1yZ8Xnh-Dwq1Bg>)(R5=W!p5b`;!s=p@4Xu)aPat zq{A<^jHS>QwbWea1fgBM!PoUbr40rfH@=J?9rO-H9Z6h1**uoLqHSc8m|0%!z2gAN z=8kb2s9Oswtl(}VnITwKzRaZi6%P;s+K<=ze75jGgIinKQ*+Tn&)hc_!O%Q|!FdBy zrsdW~QZw(aQzIu{KdD=sr-z5G;JI#yEW`P{XE4hSeb35|$=-z%?C%r&(zmv~gd^v%o4JinbvOWxcu@3xW` z0ZGd%z3>G?sO_aE?E^Uk!olw-gts6eGw@R@4kajaNiU}DdN_TJf3+1+a_T90-5gA` z)U<(S3@nwwi?|8D4V*CKZi&DrEfOkqkN6nxR%bi~?zsm(1h_9A>ayG(A7v8hTx$u3 z_Z0=;Z}Z+T1vPF_x7K@JU^Z2T#E-DuExsCjn{5+EMI8B&Hvn{sN;ZMpVfmUZeh(Tb z=ieWuAwsHbqc4e!9b3&r5(3&e=F^=_O5!Yp9!I%^sTM49iRpD zi&%|;S7;S6>l}yt?)iDWZl5z7n>+-V0aF2BcnaWkA1M(l?qWvBxx??%>vk)>4o4_C z=+qQCV8+4EH2bdB@9K>PC(qF9`dGyqDjhevR)0CWl{Uun%mCu? zOv*W>GbAx}Z&xY0ZeFC#ds$OO%KNc2?K-1dRM{^`Sres95xXgMKPv7!cHWcmcM)Ci z@7f%go%MQRI(&wiC0Asdtr={ju98^|#!6kSn_X8XI zqbTcdCx7tB)othSW^Ey+cknEgQwr9}to|%EnK4Td=dTRVN?i>GD@Fv#!3P1fA;5UH zQoABSbL3s+A|VH;yieCgqo@7%;Sew#!s!|7zc6O=C!M8ce!2KGpAGdLG%+dBb6>aOx*eE{MeVPaUtnL7ojM@k1Zbr@R2 zjQouSTD@%>cD%j&JvAAbpD03+kzu*6f80!&k@0Z%dT=w8Dvpso?d<^G$$S%dk(`$? zTgxE6Ed1`IgLrWx11UuKF?;SxSPCX4-VXgP1IiD{dxe=EZPwJwsQ!#F%PfGhtVLwF z@k{N`@O;a%lP+WNhTqj2XL0pm`c6Y$FLCD1;$+7IKjSs{%;+2hUUMGdMos!JUfLZW z4gmpm^ma9w5IOUWS(!ofyww;n`qmF~Uhf_CQ~#ip5w?J5JNG-}K+^x?$y(>WJ^Roo-QZn2MK zRbw~9ScLC)GH#vnPY)u^nN8kz>lw#ca=Zv(l8D4kWM-DZ*-StkS`MEWqa*dDZ#kKW zC5=oIJ8)q!cjHe9TZj!DC2EB-XJpdL}btA(o$v>vR z;;rwlt)#GUK(p{2QShk&#F6&q#^>-mir`UC@Q`;yMGZqON74D%;p(MdAy4a=qev1L zmab$Af$@qTbp|=(9MAYruMQ4uJkx%O9FF;7NM{0@xi`t?y=tY$llQBdw&p2^kE*u$ zzDfi8&CAu*5Y`5vn4}|n4esa-QFOb%X=2Tq@8<&UOUqt_otK{ z{%(%taM8nf10M7@?_x5Jlp8VdO?;tRH-8UZO;UD$DB)r>eERadl=~=PVATpLDy6|; ziObh{CbY3%%V$E$zR@){buMi-x<$6T-V|IujZjRB&slkXw6WF~;Y}IkhRU#%;*C%s=VQm$tafA_9V&+gT9sX2hGP0s z>Z39D765%l@T9AP=uZ(~e9&Uyj?`b8!s+<_S+m&NdH2xpyN0b=@5Voo4qD!u)02Fp z2~m-Z=o-}zyZ-~wO|bsV58k*rUO^zbf(e)44lMi+`HSjAwAbmU?buJEib3QV%peSe zRCcY1BVySyw3=$g20i53yPK|}B0F6VpEGAqkWIAc?ag2#!2o6C=YZ!^B+-dFVTp;b zpyHO(p;=46JCZ}HPn)Z6cd0(v`q7=*2C0n&OKMP<3;-i3!4We4LR75}SyH}O$8jcz z7?gvH_2UWD!GY)u3jch7g8w=Ox2;_BBT|KUsJIyt;q7N55n$gi!c8;29CT6|J$noM{JrguS?W>*488V-pt3Rm%jd)U9T2Sp8 z^dtkB0FLcgfT#!=L6JgMCLy;uy9s9Y+y=pIpq+##!IpNBTS;#3B?N9Q4Ad$Yfj*ne zD&?5zpHEZ1Ze`XY#zf&A4?Wo8J$la%;lm?L|1TnN5JgfYHhac}k?DkVGq(kKXNUBFJhk62>6QPW4e z)JX!yhuMf5%vK@h9%`BxFg$z;SMgOtQ6uT@Zgh~vRwuqQkQ5>)qNW;F?J@vbYcGSu z*hgF#KmD7+-0jgA?w%YmQIggo&SJf=%|PU)b@SE5`q1;q6+)K>%t^t!eZYf8{DumF zfJHG$0)41{E=*yQLM04ehxE7f)LpfMH4b1>3qh`{X?APWz(iM<1rp~Pqp(2j9POkl zEUwu3P=D+XZcj+QsS!*>n|&Yex1s&k7KC+;AqvJ8De9=kTbbF0H8v&m_S^}xX9dw- zGr;@{AH+VN>#zm){^Bw}?oxKUd>U;VegupY7l$|t=6lwHgp@=~Khp)^F!`A+dA&k> zmBS%a1H1;86F%_0(0WK_!n+Rfc(NI|XokIRSaW$SO+Ic;YyG`Y8Ii zo*P;rA^ZVN+z*qig|Hw8Z~QK}zju`C0X3Td(XMI zowEePOXwu7UCl}Lck{x-w=AovR9;FawKhB*>vT2#=ZJQFr@@5TIifOB6nzYs;Rh9m z&&Mlk1I$bgh?7v}o?!)6i@p>ce1PiPSAXP~*Dk_)L#;kQjV+PMeqdC6dtfsVlWlT6 z3r}AXvUuAye0#Heeun2-=@VDm(9W~Mr8W)ra~uLJ#HAQbmX~*(9r}SY@9^EHJ$Yx^ zyAn2{Z;l%6K*pjZZ)hkPciOUGBpi5x7CSQX>h+uWVa~xz+|5^sqDU8RZbA1U0uL|G zPhGWy<74@Z$JiCbzBUKs*Pc7>CE_P<;#+fq(@;Q=pjn*oXKL)L%AZ|J*CI<@)BRcw5o>mYs^O2}-cR_Pk`1N1W; z{3h=!V<-P~^4sEuR*V{tR%SP4UrYQy`9SXEb)jXM2fytsddTExX2uLX%V_<&(bRrB zrFydM^4!kMch8H%$aXg;W$cxw8Xek>DwVU` z1}4^^$;3H7l(6MrDT2zo7QyS~oCPBgbmm8;E3J|RtxLeB2EnX{#~K9Ovr;O{(Vj(q za)}Hbsv}o|J6OP0=2UosW7o&22NPn1WUbEO#+EQ+?(#4uhk0S*b|HFga>BjmwBYl` z9g{zOU5c^Kp~0&@FP0C{PF5pV?=1gZ&zW@MmbP@x5O#8ibO5F>T|nRkZOJG2llQ&D;n0I;4JH;D zj>BWOMJ7)`2XFDQLrxk_qaHzb3Vfti>iLvh7w`8+r|&cSRsV1YNS_E9%loEow$YAQ z^d^+dwgUVX<^(IA*IzK-0STQodWg5FKVNc|eu#YVGU;krkp5TNjY6?WwstOESLjHOP{HteeS`lR0t%qR|yjS|xQPmJ&p+`~p z>gF);yc9&TTwh_>-cGz4Bf`VO_*+I$l(Z( zaAq*C`SU*)EQ4Xw6PsVD3Hh(mlqSJr)HbwTr3W?*DTf}5&oeW#HfNpeD9iFQ8Ep2-a^}1 zMCekR1?F^2pOY5r>0DYPnUV*{h66-1RO-mXKiqkC=CgH&T~3ZE^UJ*b!cAbDBOuVX zKo)bzGFXXB!2@*AAs7(&W}vCiS;xoniEPHiQJ{TMDmFo}(w5$oI7DOxHbis;6zmcnRdk7&yL#uxukX_qh~MlrLhB;-Qpa}A$IE^KEh}`IHLb!g zB8veB?6YIV0@BU8F`$nNXDl8_Z1Ekzk*FCS&>`<3%^#@1BL_SZnSkvmk7?zy(_k!& zpveVCdVcs@aA;eL@0&4{7D=f49qz-Sm$@Lqh&CE%E5$OI$3_POZGOXyz}BQiNg_7g zEMYFrU7O6e1|tzrpAZW1vOhn`o+X7$QpknL%1}u#gfbz)=iSvokYTj*#c^TnxP&c3 zXbH=e7Sd7~dnO}GS(zJ6OKjk?u4=ERJlDWV zU9w>*(a3&bBhTov$Z|CGs!c}76Fs#hBtXmc0(J_k`Qyj)gK+IbI5wKXrmBpG<9Dkv z{q8Ig;lfWf1Z_iCJHAXHt>l6vpp4v)z12NDYZ-b68ckdW6h5;h(AgLlBYE@{Uhe)c zjR;r@foh&802IUvLsjU_Yw)U%BqTlqwKm`+-d$mdC9eV4*D?a6l% z*!9qf=k#1E#{L`3!%l}D03C`)w>gJj!d9KL_W6EKPdZ8gIbs4PT4KaSc#hK^SctXCsW2J<#$tkFf{d zMC*RVc9YcqAwlli+IF9Pms;8o{~H=#os`G*e4p>R%!G7HK1mp_gm>8hY&7qgfxc-X zu&Q93Womeq!~5qx0>Jjppt&3FEwzRYP1~PIxznpD6tW!!fj$qMB$&|u>RZ(@O$3&f z+mkXpPdG3uo8LY6zd`XN)WWcn7#D@<+qH+sFK(Eh2QdJDODG5V^$V&`u>wz1IrHh^ z$`|_iA%=v63&h>IdM`drlHeRCXXQ%oX%NaCwizzXi5BF(Nga&1>oP@7Mh(*^C}dU) zT(Kqpl={NICMp`_ro*`53CDQgq+Ud{m`Zv9ymZ>LzQ*|cwy~q6gy*gJq^t7}NNrwS z9nm>t8RQ{K3)-bT1-92bG_5dq6Py+GrejGE+u)#EM$vFCS(0dWf+*lyK6Lm6p9+du z_`AV`3;xRh^<19}z}vE7F%n?4_*8|S*|6_pfSEb%&pnT?hhuN5G@2r)0XXP^gct3{kVASkVK<1$;n&;B-)Uq*V`O|D9 zBRLH>yz9v52*CE3v$A@cn+fSf>)OhjYu&D{KGjHF9lo>Xb3z0_&GNTf_myL$%_u~P zeB3M&de-x#F-6$O95-4$8)*tt((mEMFOB`Try^L)ObMDcxdVPlD6FiX4DCtIN^Luh z`MUyk_XhAZ%Jj$A{CYRrC;VFQbPONXc@uBm>m+RFPQWBT8mn1@Z2Wy}K|Dr+f><^i z8PI2GTm`U>-_#7+8M({q?{z(m8QJ==9MY9J<@QyYpR4d6Q}`|tdYO`%nhiN`*}0*4 z%n#`p!KsnIRA+;P!GItAzksxKTKmHre#->u6~2=oj5z=(WWt9$$H`F%*^F=zTC5xI9$DX>gQO29aZG*I=V8b70b36JeavZD zFIQ2cVqf6@>I_PKK;4l-oOwDg zPJ-_i&CHiO%Qu0;Z9Cd3^6E?R(D*%(Oo$*24q6kf?w3!6u=7w(nxtdl5?OCbQP~0S z`*dpNvu+4qMIoBZ=23`M{#RzGxXgE_~h^`DJA z-!bIqZG6!83CH>KBeA^O;J)S6miKaK7oIKXAR?r-t&xy6fjE_2Cqck+O#nSegEM~R z_CLtcq4bHWZb;`@^Sq-$Lm`%g_fc%HG~%N9?c+X2ZW+WnYV0BNx`gY-x?mjxpIQYA zASZ0}84DH~8~3ei6!oKjfiM$9JOD~6=`Sk>0Kn$^X#B~ZzzJ_bj(sjruM9hTi(7)T zxF765J00M&(*@Sir3{t1pfK}yQtx#ML}HO%<|jff466@HDWw4)lM*9w%uvApJV{N(ijLnOiRa{eGO~TNRpW zLHs3ZthUe2x=0Gnb*!=vVXInJK9ihD5~;VV_TFo$)lzZ5p6|-9&3(L`I4z71-Yt4q>mrewA|_ zCj{aR7r%y43`e|PITjR0=>S@%vEUHe{PWZHouQp>pZJ1vE5pM6S24wbSgF>bi6RGr zdAFz>6tW!pTpC_U2r~8CK&kuN+`f7YJ<3dk9pkvF6DVbEzVXlF2R*{1W$&S}eFFQ%QF~!&Js*$DNL%u2cBF}s zT+O%Fa%4U+rnGZ)5cfK;#=-)D3px0HTqHO^hudiVi_p(1;*Q{&uGAPc-nGZKI8d1Z zSbheY9G*sGC%vgJrwpTS1oPxSrSxBY9_#+6`GV2E;I`n(j2KgJ5Lh)Xd8Foqx!0x$@9_Ek?O^K z^%NKdPG{Wl9bK*Bs%KPY+D&jrLU7+PS98GQV?dk{XGbZdL2~x8^XmVMrBw? zU1Jg=_z8alo<+DmuTquxllFOipCo;F<>ur9Hi?w0JrBME>2wInBfGjg^sz^eQBe=Uou2LuumSp z4pF)+uj1-CO{l*dL27)yJ2s;{=FV2b+@|?5r_3y z3Fu8c^s9Usc%zS@qm?pi#cr>}J6<`zyAFicg+AMY%oXbf?3sq^gqtVLkPGM_r1zS9 zTYKufmhS$b=6HydySvZBi6X+0Fu|q@5a7mU@UH)fkl0{RY1iJv@%?-ci(l88YtG=3Dzt>Ki!X1oKVpv#R8n5+j?$X{J(1%Qk4@VSoe;3{Gn z0Xs$^ebq1xfDI_ft^Yq?j86SgyA{wMPbB96C-~LZcjAi#SrouyaCxhPB6<%d(Fy^^ zaJLcKrvp*42^XVK03}2@+DQuYTwVhkjm+oZ)mX|^(8v>2-8FRL0A|zrdb8lZNiL|4 zVUp!EuDI^Zrh#YJ(eZ+6#$^to1{&A2c0?O(kn+f$4>alSED%zNAdD<>gATfG)kn{Ib7`3SiqS?BEinU350sV;i2WjMgMy^Mp->Pd4GzY} zBE68Z5GlIG^sqzCZIDU&7Pho)u|LsJD#q|m-g0;*8wbdHX6&YD$v>G=y&TEU6)Vzp zQ8O-G?=RxI99uts;pbH`33(^g#VmzzWHFK4`1X(@KT?jH&SpN9b^hkIpJTp@k75#Js||4A$9gAjMS`n{AYEqO>zon(+;m*!Bb9Z-VR!3ANgrKyve85Sb z2l(jhY|FYji{X#iON359)Dot#`SjnB8)RW9VdK(oaHQMIlF*uJnMh%LcjPAf8!hUQVTzB*gt;y>69e+ z(aksSxpeE+YXRVc+S)yrH#A%e0Poy%)1J@1@y4}-9s7#f+C2wi+v|4bmRt5rdj0i& zW%EC*aiX008dP=_rm7Yct04sNe>j0jVDVMTGrxu%`~LKE`osD6(#OD{D)>jT(yCC7 z&SXF)P@sSwf(g^8gIGx+1r0JFKc~P%3S0!xQu0gENq>5BAN&5)McUWUN3JHP>1s^G z^SB1zg+zf90C>EM670gqxEYghIXVGchTZVu2Pz?ZSPKY(017D(AN%(@oqn+Cc20;MV5a3GsIJ~$YDqce$c^VA)9>P>W zh&~7(e$v*-)RteSb%S7<hxcjM<-t*TVaQQ0tPs%0;h2to!Ey;d>*}+h;9IR0QKT(|n$ODfz0CWM72zpGPLlgYuIQ3&A zsi3z5d66EAV%3OW~rf}SKQq4?i!JGr;G4;IYOfN1~?kiU^$`l|MU z`QMon^8NUtIuBOzJxU;vUOcM4L+jWnz13hj=2mz~aM+hjT@%S928fZ*P5X1VR@CP$O2%(hr z$7l8bIS4+9uOC$0T<|W?OD()@*U6J3+Mha|Afp&=sb<7{EcL~&0E!=MR(6eBx*8vxk9WXYZ@w`{rg;Egx# z$!A$4k{wZ586#-mtPh6 zS$MnoLG!}!ue5Ib2o6Gy{Q}1>`X|WPN~_&=q0@P*^j(}niF+6S|D1)g7n4v;XA+P$ z?8C?SZ)!&uS%d}}CLpcaH(|w3a1c{59l$IAX9#edMkCah0ij=`)p9q!A7scTs{$4p z03I8tOqYe$k(MBVz2thDhlwb0?=^qyoF$dQLur5~s;!c4*l@3DPML!-EvOIAqFV@X z3Lsy^%b1E6Ak$}|5Csg|8$3=+tg?0pEUut_3SuRm)(FFwcB%@0DY{z@bEQ)&l^_kG zlsMp5f-tkigb#Pnuw^1{M<@Qv?DpOyzd1>V39a1CVS;pO*#&%b@ua=8Nv_PqF8`;A||)vtEH&rHpmtx2Y-IC3V) z&6*@BtkTRD=fz5IgdJqQN`U}=kF<;wDC*!j2Bg9%20st-s=uH6ZcnmUbA}-9r=P5q;o2jSr%}Ag1pGYOb0I_HR zX{!(tZjx5`50Pig5wkt=mK3qhgBfKY2V1z_OKwsAKveC^e|^q`&)pb#t7!*&n?e|Q z_ScmXu*5^Qqn8%Zi^(h+nsCo#OX-A3<5T~%MVx;Aef*iDj0^q#B)$J z4G~F!s%c;dfvTzf2s27dG&R1a1qP}A$vJ$0VF(04Ac~@ZVHlW998pz`Mj|p*RSgV7 zpsGpnX-XHUkpMe8+stEe;q@S7A_0yEzL5a0y7bav9cQ1}jJe_AkHh!=M<1mmKmeE# z3}Smh0ZJqZmu}s9?G?4Pd;Zhmz*0%V^Z!g-+X4q8~X8_E8^UXLB&JWg5XtV_~R=)m2%g-f0 zQKm(LU3D*-wIUnhbN(967qY}3cT(2l%K?aBlH z>|6ZPe=gcOmH1g^mSCNEJRn{6O|9B|B{<{(I7uS(c}ya=;a!-(!U;2u(!%fw5Ys*+^)1k`Spypjd|D-kIdQ5|fVF0a@sNp_JnbQRBUF;E|kYe6<)%)md?1BwY4iL&u zCjNKd5JGlFCV&02z3bcG^IbwFsDK5~2n&XRj3(8C04cy(x)(EG#dL5VKFJq$9cKK6 z9a2QNpP%F~tK6h(wC&OkTrW9EzN3Kh>R~p3$*Ps(2s!v`<`l0|a`9!F&@q{H*gsIw z)6S}szoM>cC44=zOVQ|DhOy_VQ2Y#_Qkw6eHYNbzEP#pFh!U~{gx(4k*LY4bKguts zX37Il03r~;1AE^p`se2_wVLO15x(m0)yYf%f+kah6e>xF7^%3Lz8{{7>ppk@O_9%< ziavj%)bYEg@=Z5<-9PD#U)WE7^PhdQn8}n7F9p>IkOzW3W532sd9*b7WEBsYAsNW85!mqY=3FeiEzZH zfKH>>zDGE{XukBud#%E4lbMM1^ifkV?`R}gaXrc%vozsUJL8#hvGy%mz}!j>X{{4} zH2Gh20_bczH73MUT0SKy0i93yM#TjHCKC_4-G)dc0*Av9CmR5WL}Y}+5+q3i!!S@3 z6~H;pVHg&&q02-+d;wgjh&LBQbR{zHdu(PwxoR^n}RB5P2OH4@}PUr5ft`4); z>(#S<;siKe_&Na&m;6RUfI0~p3Gm>JH|}Y*+c7;HhJ{kR&vCdu97e}YH{c7KU&rel zhgP#0Hxq)XgkWDV2s?l>RmCd>1t<#!p;@gcFE7XRk3Ys{yB$1$f^Zl_mQl=cu&XKv z!@w7Ns3yJs`nB^LMG6avy!s?}RGMh!Z@wci)jorocKpuNI<-&1#W&Fka0!Hd)J)CxCc45)ujt=kRI*$5Vn?0D1wb4{FofO!ukXLiyG)QZqa$a{WlI#%;t=`jRR1qXQuvj8{%_z-<~j}g!Y0{R6?)ss~2&Li@PvwT3? zWNw}FU}(CnST4|fgrXGq)2o&?J}j$M%eCUB-%dU=i#c6XaF3LiTrD5m+> zDARB;fC2)r03-kw3Y^6m6rc#z#G;<2@EsyyL_j$!cnT=t?tHcMsy-VgME{=}frc}L zdRzz}+Q1#Za=ARiW8;W9pc0`Jymb=gNGlL7X4FU#(S$1(O zV-Q@1eefY41?1|3e`T5uwOD+`5rs~uRIQo<%VfW5`V;fH6Jq6GCZ5V;G;1L-PoAmT zxFASmH?+2PrYrm>bm1$^r2I;ii*T$uOeI>t0)Ky z9Dj-JI`S&lxoB1RL6nm>p#dMf#I#RzBEK}OnfEtxr~kCyDl%nyk<)=z#baLAcSv~jM@2gf6 zXdk}JbX)vFfOU?dEXRsxs-;v;|xXnh*k5(ZQN5THO20ku$2GX*FCHPLg& zh`rJOxf%l_u8z{bGPTFNB9X8p>CH@L#s$O&{Q|udW}mCqBb4;CUe&y%Ym& zB>2Ozq3|b7oH)D#_Vr<(`6DbXSTL;J&YV4)G%i=+_rqs0L8BCAo`)QXK-%lZ-jWiO zRM>FkbPa*OcHwnD#dL;&qG{;iI9wG9p_OGZEf9e7n1EIQGb9Nuf&flckFhxWvg`yUL9(cjjKD}JAI+k!H_>Ig%1hi=Y!-8B^tCh}L9xnOQFNK!!k2LAP zll-ZguSuKfZ07&m|HQS<`&uMAl)glwL+DEY3MgvZ}geYg4(09vXdNEi45rXzt ziN9B3{j)wVmm&f-IDwQ|ub`ZImeSCNkcCokG@rn;iHQUO-_*ID(%=q8rW07o5DF@2 zP$LwA1Dwi&(1{FNUapu=xmXV=)-+RCP}n?4FsT~LcY%SzK(i9+Ylc(=&GPPVxYLs= z6-V_qD2Fc1f;<2wa7-77$)b^>YpET7BQ!6hnJv@7;1+&F3!zQ~MvsFQG>%q_d0~Qi%Hhvv=MBa$V)!e$H*vXLhz1t+ZP8 zUTsP4y<%gUuuUK|Q^E%!5D0{l1W14Y2@nXO1yU$6rrBWQZp%fIE!mc=YPD6_-lxwk z=l%W|?RwQ^Ti_JG|IEytJNKPC<^1k*-g2s&gHR%YGrC)qgJC7bXOvqrCy1ICvV|(X z_VnM|pIiKX|3Bwm7u3!2^R>@DV)u7#F*C)K>Go~#bCD%mBTqb*>MMt$!IW8EXw$DV z3=d(p!~@$%h$=)4YxI7zbLV=?oD}z+(ytuQ-*gikj^}1T664%vu^gIp&o70 zuNbiW$jlXlnr@KlV56a}X#peqRmod#xKn-1t|wKdE#cZd_gRI_dsWxedP!O}+GLMG z&t4<@^ncnN*LXa+-@1g3{J z0+g-*N}Ia)r2cI?RLW#VmDU=ij4|?4b#>Kdp-`ZzDrwoarF`GVbzL0WKdpD${|P|EiMwANx6#&{g@=<)xI^a5>aZ9nBoyc0#}ziThhiNbVR7TyZW zmeKiG&x?LPEx-Nk%Fb)AU6(S=%H!K_U)gcpb?a97K7C3-CPU-$sbtH-w)^%oE8-Bh zJ*4R4T-(CH-M#diCO$A?82mcApLE$F(3+NVnd%_GvMe&TO*#m$Cx{IG)hT)!PhssVu z3U)#)b}Js;>W-e%q!RIhgryZ}G6Q3Dvyt7Ou`}X|KW~!PG<&&s9Wa$)u8F>0u4SK5 z*L9CEoCpWuc(d3+NnwTXs+UO89u>o^Mfod5m)GmSj44_3z3|@4{<<{dtZ&JT(F3ZK z$yt7)PKQhj)xTG}A=3!rlXTd43Z*7#3KvLe^KZhv=iXSHvivP>YqDKGhG8xuq$?Mw zWzLG4xVj15*rxZ=#sYlsJ;Z%X`Ozw|%^`5V=UVYsV=@TL0p%J>ENui+FtZyBH(k=9 zV4hIUDNp4@rI$*GUSL0@rb&oh0*eXL1UybF&3tIdJN>WU_p#91aH+_|=>f5~^M6>AS6N8AZ)| zlUw^-&ro@~BhLPZt&u5~8)7jKfk(a<+OL!Zu_kSw_bE4qrE0Kvi?M{g+y2XmUi4vi zs`&_tg+j1H`MIn)SUt;2O|Kb^SxXHSlnm{=Vg&63ElEk_x}{LsZ@Jpmm{Bo(ZAed* z%DZY5iJ9S=NkOQmTaB6>QYOzzf1t5$U@(`slJd-WaHLM!C_JsaZ zsnlWdQ-=l7QmItj1c=9DreP>$nkKI6QZAPaz2_MPC}-AL%5iKl3}waRu^^u>;<}Y7 zPu~w16F=YgQOZzfv=`{pkKMgpFvfB>UGK*}`91DmhEeqECYqktF&P7u&H zRAhK}7fLCf%a?hqoL>RJ?R$?*s)?o68{$(`io9iEc^-X{2xSq{BE&?f`|WR6_FsGL zx=oP?m)&;TN<>~e>s3C|t7u*sq#ycL_=jo_!}H$awx;SO!VnbuO>ftOYAC)4C$hL$ z{mVy#cvGBsUq^5KS*yWmgG5~ruNzgK6BUzckOUMq;O{Rv*~UFSEf)m#RsUL=Bc`!> z?T4M8t^BA934uRm-jjc2buM{x&}8*s^dB+`1CN>`)l($8H)ah)JA=@{t+oB$aG$;C zdZRHG530h=%9?Rm(A1vpYLZ^~)+b=a6wpt@^hKrWV&3re2Fis`X*XLNwmL@r@{DRf z8LicJ`c2woKs~u*yEQU9>b;I(t}7Ol@0i-Or(jWwGB*hBph2P#*z|)=Abq=3J~2~; z`tDWvA-6E6w;$3q8mkV+-2{C@Q12T>e^hjBQb+B6Wd?(Yu2VXBw?q?BZ56szIc4gN z?BbGO7GhdTb3ot_s63RPRDoM3^BjS7e;?T!tMMZ_4{w$4O(qYG*9Gx`YNKE-#Zf!K z{;6O_C0(-C=F0@`*ZtP!UX5w>o+^mzY?q6fQwdFNIwP_uh z8<9DbA%4(5;r}*z%aOwL;amR$fUhij^AXz%-#zg$GAeW8=T71OOxTJ1E2YSEW{4jQ zK)~`HoRWho7f24*V+8?@w$WK36$_(cQFP7ulyV;7s6)Ba!&d>`eFk+is>!8=vQt1| zgI0J>kti0~NEX|+j+^b7$z-SqAXt{A!r_n_8PQT*oiaVolTgUU_k9(Kgo#EY1gQ(9 zTrLw1hbWgl6$AmLQrWCbi57!WsVrl$MAvl%l=3`JY}-<2i~u{gY{<`9vMM%p)YySp$C@B3Iezv4%$R3%YlqAi9utsPx)PAs)P z?0Fc5fooZqS|dP71a&w|lrixGsNw(vs!l~EGSaPz)wMymWo1xb&KYj!AeokVL2~Q; z#z4ygooHGe#N8fvZzIUFpw0pbKz#>lt^jEenq` z>$La!78+C**u-C*wZi{1o}i~NqV6-AMNK-_tB==8XzKM|ty#h-+ua%$8XAK*7BD2B z!CVTA!uvD8LdXq4I2Ty?yef6gGe)a-5x?wxg=xEgVhzu1@#|Rv9FAGcj(Rq6<Bx!5r2x!`rgO$t7!a_^wYFyAw6ym=@|k?{izfahXEx7ibZ#3j;V=am2d746`3zqu3&s6J`EMA;&*g#FV%dtW;)T@ zHt&une`B3@)@y^7Wfyx*8-Ezy*RfL-Hm`Mhho7V5#4wCn)aF8I_NNjc4^)z)Bn4lY zTZ!F{M1eetC&BF1dh#?$C0F^O(PzzaVl)U(o+)WM3}mKMl5Fy15FVd5PY=<@)wx5; z3x&jr%n2fUe(ZEN-R#y)xj0Ba_SeS2+L;pT*=yw7YOnd67KQWxmsY0D)suouhi7ds zT?bxzvJMpXG8`>2fgU5h3k}2J0Ef0HuFL+g*6swI+DP0b=Gky58w@d|2Y6A zw@o>&5RTbbRzEL@N7G@lKY3CDJlg+>tm<#BXXLMLAHO|aJCT18A=zBg-A;h7j-n0);x$)N-y zf?*u-;VTgtAO8(Q;W*CWtWO8WaU>cI8iDJC>3(YP}!JWdgCoIfct;?-TX@-z{h|6 zbwn)yW+)^DlLJ3)42s|Yj|zBfq=lajt~ZLQkeFTdW-i}FY0@q)S$CGiC_rkC4t1|L zvxB`@lU6~`Hjok|H^I+-1ZTe*=9~-hN8sM|K{8Pe?XeSvu9_s#nwdee;ZtsW&G*Cm zFF30>1+!9WQMg-$qn^}Y8{VNu)Ra&NGdx!$rwl*yoEk}78-%1+1zR2o4b+ExE8VCg z$^|afY?WL%dpTWWl|6+t-&3c1pD(G{cMxZy~er8n>=-K*!a7p{7pE%&_4N#mkef zYE*3c9aOb~8WeJ6h1CR|9l}M;iXDzypDr0*)g&c@`^=(OHb_=$$KGmMb(3_g`COe~ zt3o^~7ZE2Ru;?w;xadu^10DO15y2A);#Zcv`3NF>sRU@<@!BIqaO~E z3b_-KSL5V%Mh1FGrBW}M0LP|WkLT-D^mj@E92$C_;2dXM&~V*~XdRyF923E}EqW_I z;MsBUJ4WCfht;cBbL*|Q9o#cLPAp$2#`3va#%t~(1+hMDQ32)EtR6l{f`{7~4sAKVhW<%2NyDvI1QioTTvh5G zHVZT=$OC~8O^Hd4n~C91s@K05-6O9{Eig)@z_0c%FtkpIB;s1JMUiv;G@hcz78-v6 zJ>3TBDbO}qc%TGN_Cs-xV$o#bvsXh;q`0*ESw&3^3>1W9UX?wRvbCsiHBL!LhBfaZ z#YfbLokUq3v3C#-)O zUj0@DKE&hDI|TJpOVf9+QS_O@g3FXDtyRI$8Z%Qr+fRw9FiZlVnQGp7#nt{mem0Av zt7Ow-Ukk_Duku=^wgl&|^bCT!;0&hpbvCrBgYAD2@6kQ$;-HJ^;Yq9++gP9=g9Ew|J< zBLp}mcqbCZ(;>l=`fpBBj)!prlW;DA9*(1W;`kARfsGkVWkW>ag#^=v^wesYdJe_1 zPj|;4&9fT_JWZq_j_-I-iW064AqZ~V!}e=PB;yr&Gt6VpuPTLM7)mLHg(%-`Z|IjPy+*lOq$dzzOPB8l4B(jW;7a6BH;VJgu`Le zaU2;O>>n?tKcnjbo-78qZ|Ad&j*h9~md3_oV}}#t2B8o;Z@6Kd0{(`J35GVaHSOsgN4aJ^n9Gm}8stDMfolgXpwvrvK(Q&lkj>B{gW~@N8v= ztX6J0qTK#|D>v{jD!=6sZ_>3>73R6ZYd#HfK+!ZwctZfVppxJh!TKtU%z{6U!L%EN z%p)-RBSAMj1+JV2lyKrx%xZrN$gv3Q=vr(GKf*A z(K?C=b-fC^p;8zx%i)io1-%GTmw-PA!*@VBA$ZFbi#j1&C3yRwa7Y-L0$Uz(dS_Wd zgbc`bg_>UJP{XiV&0d{hnz6{s7<$(s)2t8qzSU|dC4w@wa;AFeX|5s^g4m;qzFs)* zHG;k$yvO0D>!AB9!sIzH=qOUNpkY{u&VzLap?a+%c9oJk5AoXx)IN-G0|k6ONP!lL zY^ImncK);drUTlRwzyk0`CXDMKA^09d+fof@$!s@8=>`C;oVadJ!_z53tZT(I6n~7 zey}pIY#|ip!wrie7!ceH4E73(&r$5_Qm#254D42!NijdgN_u6QArvb4=}Lr)<7;3YVu;c83|;Xs{C|^FgeI-sbirk5P*24O)N`x`hzv|bZF;JyKn8U ztbD<^4k6kZ}1jgG0Zy zGSy9D)y?&jzK_IH{0o6x#f8$$cTPrNC!dZyT@j2wb>;|gJmPWv^*nR??Z*h@sYvi- z1eiOJBZ5b`7$Q=L5FSimSTOKRhG;wlKy`f@zZ|fC$03?p8woiM1A{{}R@bs?%`Rpy znT|p*a~4DcA{|iz+apjWg;0j_NEyd*(4vnhR#!@q&*#xvOEelWY}+sl1Hb1V{3(#>tG#rFnH~1D9+k|A*VGTY2&)lu(eMV6=49o;) ztFW_AxOf4u8?wX7ed;^rz!K9QBX;(yMfSw~H za*B?hDFO(ZuXP)x_ArrJ3d~9z1CQiLr3>p>+{j-Hoy8kYuFr^eXgIJ)$G?6dzAOcZ^H+sy*{^8^(xkGQY5N`R1%(k zP;tfAHP8HoLGv7lreVj^ij8-G@mq!HN`&N^&uFUGgDev^Kdy?SS>+!10bR9!LQ++! z200*o#(mPkd)dZru1T~>WbvithR1JbrF(u$$oLgUp!wja#- z!a!EBHB8YEic1a<;7n8Mmqg;ysOHwH8< zY6Jt6C z@Jy`8K1P94XDy(qwLP|P=VsD1^)ERKb)5W;5~_(r*VfiXM@L8H2YHzM)~;PkM@Pr= zF~H*x;KWSPqho;c?!0s5)~l{scX_eMt%(FF5eD7dinrP@WvS-Yrwo=iRGsv^HuR3L z+R*IR!g@^JXe(wPek~%@C`E^DW1A*d{_0oH6W}iX>FPgq_ilg4Tvqdl4D715WaTYx zYjVGYX#g^yhJit_QWmB4HbzL`(jr~oNYeE742^dsnf=jG;=M4^2akWx;PST#)-oWe zu=+6;ws1=*%f5*XdL$r9~Tfme{llgBnWe8RGIivV5cJYzo;fVhzu^)^OQ$6Bl8#A#hYu5xz_4ny+Y?3r(}a z)b}c^4o%B7K7lrwmv9KXKB-Ub}6-)Nj=3`ucw z!tvWF$4X{#_G?}X(H)BW?o=$hBm^Uh+)o{XQH2E1Xn_@IBG0;X7Rt=a3CZc;uYk#C zL1?bfu?9M~i`u=$?#j23UUq}m+C0?_)PPhHqIhuxcwOtY43no!KsoT(d~n?fh44%h zU^JcPHJ|@H`N2Uh|ImlH_aFY@xV}!80IkC%SowWa_pVN=s#A=tc@Q;uA^8J267e`77=c3Bl`-AOSd`r|p63xy z*%*dF09aPVf4N*%j$;~@Wf;EiQz{jWbh--P_W;H2-FsAXb2HJ#8AP>6u8>pd>M9N$ zI-si3RrEi3pOPsH85tQN9#0$|?-|RQ5fMQ|E6?+Y$5V!382XG5;KWjdu`JLr@_YKR z`{>-VVVum)R2|^u16(m%q+SJk}B(e&aWCGuR4rQwbvWK>esNIvU2zlrRb&h5^HO zLG`>0frdzWl=u?xT(Ite`PT?`6xafCK16D<4jizu{g0W&IV;Qc)?~uWuFxZs6vV`A zUPhw)h%9~ey}4{##II6=peMn)A;meb))ajMv%$lC93mG%>>L+7mvE{g&V&VCrJw+r z{fdr9VaA<8`(jPV(pAoG%$1jVlc`q_VKYVEM~>GJKxu?zPp6%mHlv&po80j4j6%(; zwd3y)wz`U@I|K4nVZzmA+&&@HCO9c5Z1kzRu1skgxSODmg~TG^+z&$k4}eanS|z;c zqopN%LqtP4Ot4DKd{-Zo0&W*GT2gga5#MGfTf zM!}g2`WY~$f#rKt&w&0z5V{xotDwFLNWuI+6?%KkT;WN>tD7D~2Rl`%+Liy5bLE{3 z(x85+hIfn_mk)~VMX&Z!moLvJdmgefH9HN=sAfx_V)m#;mkmON0ZdnSF!V%-yK&3&lCZ!<%3i`a6N_L;Y!%#@a_2X=YQ~&)3!(ZS4yEp6N!XL z#1jl#3Canf{20Vqqj+IZ+Ms)9A8pIqF#<)YlxNqreT2d`UZ5!&9;%cl999G&$PVr% z+Pnzy6ef5VQRf|P*<@^j|tgV_sJRVc2R7wSb z7SlA&3;~u3d8%p~VCS>6%wHZ`a_(guO@3#h4)A0|cdG2q)6D`s8RZ>qZEbCwefHVh zdh4yn#1W5<3yvkjv@|vzA%bJ8Jg7Imaa}r}$FnSoR9Y2GS*qZvfT2g8BJMcEPEu#s z)zbs#pT(4=iuFfLhnhgVRAPz<8z%_-vzJ`5Zg{?OR^M8Bu2@pD7uS|*$%4cbUajB= z`1N4E>Pmvh6l}*O7960Ez6E2ri_nigjPju7W?%s9ImnrDeELvV} z7~E?N1Tm$#Sis>I#T?g1EG$YuH59f|PNPFATuG}p_QE+gYMwjy`!v=46fqk~w5`Jn zw_y)GLHxqeN|FB9Vk$!dCB@>u7I;=*gJNX8ke;Kovr0^Aftasg2}bQ@F%}c$!KQs=vz?>&chyh4Bu%dc=KDZ5B!eU zMMHGDuO<6~Pq8p243!iF0wUBmg4!T3K;X~8SIwAC6)A>g?{HSlNiQa3LOwDR(@bik z@th#C`8m6%F6lKk%}^A7APl|b^CWKQp%kZax0}_ft1ZaJPWY z1HFpgJ&NQsaT=zSBQ0}vwBtc5uR8S}y3|t?x#(mBR`@Rb?3Pa+kqNqB@wG&f4$lqb z$(RN~!XX{AXphF3)%q%S-tn7p5&X*PN(N~BsWV##SkC2$rqkoMb1tb&jh>4BPUPP- zO~T1i0XV2Uae;1)iG>nMvcM=QI5X9VA}bv)vSsI7EG3)Mh*1ghI-k~r`H9H!eJY)SCi#V$2zDs>sNFNBVV zdFGq2_#znHE2Pd*kcCJ)^sO^<&Qn3suEJy~s1*{S%%5NTd3lCz`X#QK)ghs1Szfp* zFyk@p$QEF(B6T5zqT7i1-EeRz;brr9=g%BODZY1839714kpwM6|H8qTz$1#T6tus( zk`-G#1jA8tH0P_L$|<8RtfOKmq%4cmbCf~>2Z+SEgoz zy+~6=!le%LFG4fKQU^4tMx(=jj(^$w)zH>ii>#W2FDhKr1l7PS$UF_k*>57%dpFd- z4zj;y!@eJ~d3OVEuWp8U|46K)XngD!sI3Mp)OZIfF*>HefnO5e3 z$1RMy?}!4lf?=!Y#L%-OWQrYEw!hvem-b7^AFa$ls3^3gGbHtFnDlxGMR@Puy^(vj zPGk4C{um4!GK!LA(%&i6*)Vw(cs&sA0n>w;c8L`C8s%~vnRcm8>>1+x#9o%wy+h!K zCnvCp6gcae8;OTab`>&o*XJ274nQGKt{_M_#*{=YvscY!$J%Y!0G3l1B2(V;qs5YAOaj);la>0;rbA=FG*R0idk5V4sH<&MkQk5#2ohT z??lCIMuvtcNVzh@RP=~Mql}cY1P-KXQk3lgZF$%c2Ne;5f*_88Q*EP^A{=%O)0sgi zQ?BBm%*&&CK;UT=TcbF`FB9SP$Y#yad zs?sU62tg2tVHo2LvMtM0L7;WTe@H2HR2jt41opcB_sLi|8e?Rjw?cS_?MHwA@%+Sn zCJND*_;nxLd)&IfGev;Y4*MG0|8(Mir%QkUvuDpfp%9)(1WzP>6Sp5tfB?U$sv;c( z%or)~gyWz?Hnv+naaLJ8e(VqXBy<=kMLA^Q_`s>23 zFR(+lgtLc?vN5Vd><7CIoc#Szy$lLl!3-mAm|wU21or+rctCI?ES*j0w~vAW5&`QR zU{rYgO$w*o>015X0BKmGX{=|6}N@fk+Bayl2rf?26Z; z+wrop3tzlH7@=`YUdDf)KUL?NH z&tw)Gi31x#BlVj-W;B9#2ojx-L(M%%_GyTp%fpY)A?CTrTR(@|y#}`4M>x@p+gMqD zap*ai^EOaLA?bqIDUoOI3H2zAwEbze-I|3VeF`-!zf(SQ`}UeS(*P7=_~KN}G2%V< z0}l!AbC7uM5twxz=n@d;+5NMKMM99-1Pe<*1I~~`_1OkY4e%d_(soEphsE!QTqdYG zw9XtE&QdT767hNsKbZ_1ywf4D2}7jr!SF(OqkAZ4524*5BBn<=7Ny3nr74mkS8~~L zI63BcF}W8@fU^g`%+!@D>D;`Ts+JaFH8u3_-c8-~>Es6o8R_h#W#K}&_Y3T(`STY> zfQG^Y%Kc@cC5uwd!!aD}ydpPL#4HGQ2#P&9jG|BzNs=iJU=$VQav2{`B_S4#QSh?F z%?O4Wp;RuBj6^U!1IhxX;3eI|6JP> zJWM*BJ}nVE75R-lK3e?NUVZhtNzo|7r4k1WgR*0iG)*{8Lz(*5{>2gE*Z!8zlFQ|e zAi?9-2pI;xsSpK&fo8w&LpsgctFK;{JD2*&EvmSGofPAi6-c!ivv(<}T3$?24TcHQ zYasi7!1oTMdAMr6zN+2 znQXIEDMBH!TT9z(p>_!5N#FvoL*R}Q=uL_Mgan8$l}yw}H8R_v z;R-)4djtuPruHDU|CvbtoDXJd_$eqGN{!bOb06W}a*-eJzJjfVCZbW7cl5{T>(bou zuDKX%9-_UWlGyRf4;WnaP9f3*`5ct?hy8&CZvOFmA|0>(%hG&I4@}{{dyV}I7OCl} z9_3}bJgJ>Ys&BVFYWPmDWsPFSN{x32g7!&B!2)w11N-~ASf}}X?h3Yi>6Gc2NG1_kYq&vB0K_Eki zj6&~DBWtzcOqu3KQ(>w62c7}HW*%bhWd1FW;=~ffOgN`*AK$xc4TJi@*hB)fi@ijg8roxJTEYQJ z0^+7Y+Hr_mA!4RbF6tA;|6VKsF2DB+)X$hfesB;c8YNa!Lw<0OXgW=PaFAF{4Ta%h z@`Hoa&zJ$bzI;LwJf8nj*~79d9N%H6F+j=|c1;Km!48EP%w?!b*AP!f(1ShnWd{h? z#VPcaKr~h~jEBY#X=-Y#DN&|~OQbdoX_LT&(vSyjnsmv*bzK4%0$mZMQppv|vQ#pe zG(g0*9Tkg30U;ibkcn;UV^~aK@glg2Ke)Dd@g_O+dmjPhUCsAHc|Y>$PYLn`JG7u zoB#nq{=R$erLlBP!wahaJ6!?<*s){B2?=nbed53`S@z2V+`8m>(Hpz9?dMmS@9XPh z$BrH2-C!n);MmIUJy&17Zpd-4U6*04sN>9;@_m%6DLW>H7w}pU{wbH^!n^NYdEV%C zqD=2gPkh~Y-K6VuQ?^@|_jX&O@h27BB5(kL+Q}$C#+94y;O~2`qiS)HA9k)Je8^)~ zypvXy!HVx^!P_hOR;35Pr~&$+>1?Pi6`F^CDaGn}ME>>q==#_HX>rzbM%G;(Q8(6J z5mZxP=z+g?KDYP+e@eJ6FuSuxHg>m8Bn^er2=*f%gIOOYHsx-@(EzXCWb2-0YRY-u zSm=Z9`$+D)8^1+k7vYKzYrIYcwZhAE|`s{Q-uXp3`c)W(yU z3`f>6rBA4zEfm)Y+zozG$hbz?zA`YBR%&3Y%2!_@QQ0d>Db=lZ$-d+z`W&_?hERp6 z3%qJCBRX?H(TosX1%7A}((-yfzw-cn{v=E#Tsv(mw>`a>v%*^-+KxZm&X$LFvSdVP zIY$UAfpZlr&Q=`k^u64#4Nb~3`}X-cZ>&utALgp}y`T1Gk3!(kU}U(I9n8P<5Xd4(Sh!h%*)aTbMX4HS zgxSlXrz^1avl49DXZ186ARZgkxrfWzee)NBX7+#?C{;UK$NUZ>7~Cy|*6DsKXjaG* z3S|i@7>24ViHH7`R4B(ZH9)QqVstRX?rbA(Ji88^A7!*rs2zmJ4DdUErC{xW#B2$5 z4+r!)Drfd9HM4**I2>3FYB+eh^SrE}=akqzraQqeZY#B+Lk9XXQm~4YiUq1`Yl+4p zcv+X$sgp^>~VH&u;FlkaV`}Xgry1JS|p-8Dzq`IbtXe^5Bx=flpnPe<3#$oac0{<{Y`YMyj z1*4-`BOH#)F?qhnBe3Ju)*a6Dj7^=j;0Wz}|oV)M+Z9!g4IC2&f7I?y)Q`Jlua&?esoDvm9FSHZS$ax5AgNxT!R``8|@9 z?ZEjE?*^Xv8qB|e$yZ*?uG}~I<+c`9&E3a>YrhEV-vR>)(n6*H$@^gHMM9(i+^6X6 z1ZR?29^Nkna$28zeYq)lqf{*)0XE6CTp>1x)VHquNB72GeI$14^*7|^6wWo=(tc27 zA@dm2TvCSkGfb}r4rn@zI!s?PJ)K1^y9_n>w?sDWBHO939ijI*MXIJ!r>OP|@u)be z9X8zR?6Y;?w|+U8J-1cD)Ul3X!b+484$0b%L3>V>9oT&jS|h0?emZtRB@5QCnTC_u z%WD@$ze77x5h!Q40VXJ7jk z2M5wT`|+Jnd$0 zrPum_8WIy#$m?ll-+7<*{z~tZ-z7(tbJ=Iy_Iuu^U?w!Y8`LAqkaPZ?-@U&T3GU4e2()?*|G(Hmj(ftD~l`RJ6)B%iWUiT%f{l zzR~x@AgK-llLaMguU{3+PRv)~{D4_389JuYg0ev=A9eQ!S@)hWswu|1znfxncQgO7 zItj%zbUlI@WH2k)@`w-42yk~L1f5A!8r^9Zo33&b@n#8?uOJlJPJvDpIUNEUqreBY zuIGWR>-pNvH<1ztU8*H;!3z}KXzn|>_oVdqq6qL_*z?$9BUGXOWE_lgkVmQbUH*nUm%i5SNeXUux(2X z4Gq)U+A6kfk9BELN-4=^vnm`85ekJc3=_jJ7#SU5+Vpn14)qXLr3k*=zu zCY_eCB75KW@jM@;KtyQ~rStg$kw^lq<;7=#wgBPiv9YL=(chUMz_C>yj<#?#&UvqU zTkK5q0__|cI!6556EwNrxNIZnCF76t`TVJmf0Pj3_xjhbn^i7jSr!AO02j@~bty7K zLq{aRh z^nn9L#(O%bU34x`OJy4HwqL^y0>e?xnzENkP8O-Y8kN2j68GU&t>Aa(J;~}%XsY5+ z8ifHZM5+}|Gfscr%5S{i=)CHU#mNi;hCrHI5LS0|SogIp_Y&t`R?I606`!d?feHLZ z5vmj9Hzw*0b0NF~<_uGBWZ2Nt!161vMa7EHeHYSVQC_D>n6Ph)V);#iw;9|p9Ng&) z`CSA-NYs*#`0Zv9lRgEu%u`($euG51H=7InUR8=L)rpczV5NXQMe#AgYTSnm{tUHE zkamS{2K4WWQg26)(6i9pPps-+Sn|e7v);vRLX`!jGz{$susS;X@ES3_afjYZT7CHsGm4I<@3IrKV^}9P@mtg1dBf^e)0xIle2c zs&Ri_UEgtAcy3bBHT|q|ZEO%n`6x0VwIJCPM)%jC{`06@Cq^*J0_y;3;95A;3m08S z(RmFc`@R7+LLvs~BzSR{K8yT zXpr|c`|b(%s!kZ*Vidhc^=Ldwx>t+UV6g+3ed-w8kwWsPKmG}q%v*8F|KIVlGG7P* z&K~?SPBco>+_~fi2F3-jI66wIsfoJj(<|dy2k zfGQSCq|<3;OrIwCd|rja5n3lTF+4m|JUtV}8nDbuuwpchCKivN_Ux^PMwn!w#r8nLZ8;b#+X#$*BVlmczX6&}A zwt;Xoeo7KN-PIsYH4VCI)hcdT`+SMRiEP7$4HOE6=lh8s$38GHz>lh{nQ?ew+ps)8 zHM1U*8LmrjclYz<3*Y=;B@KDPwyxtGdp#!Gy@1JvPwDV{_eRU2M}*eHQ?zQSzcN;@ zW%%ncKN)p}1|)ks#gW~xaI>O(kx;ZQA@(ODSQ|HE)E7vGzJ%ZPCFHjA$j|=}LHt7$ z`yXKWTc3cXkm-lgW+=>4q#~L`$d8(qHrp3ble|b`WMI>mLS2ilai5?lx3(?zz=pa| z5W@x@03!g(f~TPrZo}$&1SZ#@&30^Q=ei3T@b38!OsfNRmd2Z0$8hriwOTN31wF#P zVZ}hRkem{jc0`AYQ6XT^b$z=;s1;ty8g|%X}NvMYYqpAd{GgKC=xfD z6!w)+2Ov1R8rmbAom)m|?fuB;5X#ZepehM7#R@Uj&IMb89uk5nAkT;nb|MG2nZs5@ zl)qmYlb1-?Y(``;e^+k>AvQp~PCFxmMrpy@y?Q$XJPS{L+hF-uYH+&ykd{$&|981} zbrP*w$Obo18tlS3^e98+G*u12J@Cli8LYTev$sdF_#C15ZyTYr)ixj@D`z|AN=hwu;0Kpgu2W8P^?;8!aHYOc06QDTiP_}waH<>(&q13ooXZhu zOc2%et= z4Ter8ll1m>kNbZ?1UR;;!`QUv$UyJ-+Iw@)y)-sLWpUgwu{zUPpqDLKbxa0oRc!-5 z|HkKz*mkmb;0sv|qEsp!GwnHiIPG}iwy^}4qv>zMh7C;GyO-x08;?Bp1hJZX(M9Wg zU~Zv6pJ|fR8m}r0qosZEKX>u zKLSIa0F#dp|2P;`ec0c67x~{o=+iLiJRk%I?@*+Nh387b+$GlVwnwd@R261z)U)GL zl@S>xGG|%2R%dyYp@5vKtO);VDnY~%NbCU?K(z;h>>|xB46jo2*Z+@TRzdu#N^@ou zu@P*1S4B8WAg;#p@2;fY-4^>h=+%e5zw8#KxQhWBzW5)`*UG*p<;S-C3W92!6*n6 zp+1G*5yLECxaq5~Q*9DgLmHY5^a!!Sqmn6oiEXv7W4_UZ3YWzy4;r3b)*<=0V$~Of zd*3|3%IOeZDj3yWc->uOf42i&yr0_7ewMzEL0{P5{3!xk!Lp$CS~$2-So@XmHd+bA zTP4I=Ag@?dt!wprOKJLG;1>CqwNxFn7D&^yCTW^h?-E=m1VuspL~*$zbl&*^Y)>fe z1lNaP@Ga;TuxD%~e(1+|1K`e3v|b{xAG#k`G=v1}3Qg@3X4&h8A=}8Or)rZz;T7}L^XLYGzK_y-~fsGdg4#{%pUwQ@uphbLg9!c7`IR$)zowZ@lAZ)$^8pT zf$Mr?LwO<{CccbfWnw6+(%?LqaL9I-NY=(sMNK?vGt@ImR6>vozy#0MXl0@VMl-|I zPL2@xntb&TUXX=D1!A2-#>t?MYUDrW|InfCpuWDw%4V}V5(yt(%1;P|9LePhDw&Mq z`vHz)%kc29a%>yl_mtLJ0^i4UO+;W|V32q`E?R4{*+Nh*yFsy7mcvvi6aBwn0-QMQ zIdNUSG2-jovVrASuZ|sW&AyjHfGzWv$HwaY^7$MyS6mbu8R(_CZ8~rM*cW5Bf9vnY z)#qdsc-rd$9;Y5K7KV+h;~HNSymJIHne z4hT^Zq9H2X68;fd>frHBAPL2Rr-T)Mq%lpH*Q)#{XA*8|_v3y>X=|~Vqy@DfWgNod zY^b@!_~KKyn14Cd^t$A&#xxEJ=01gaP?57V@hZjEA1SVUl@L1@*Z|U^D!w~FO#w%s zYj5TK=LVpDl~6ql)r%FfNQZLw8Lk!4jU<5A%8Xz*n8_hMpzJD2{$VXFJ` z^JC${h2!NAW91M1yLXRIo7&+pHEnG?e(nd3c^}8~KPCvVwitUR4N|+U8SS~KFj$@q zBB)kj=(#La)k#38N>|apcMxS5MC+rtMGsw4SXGKdO&ni5GHs*e8gh7H7coo%+b5Ap z9wWeG{zIXNxNZ=nQV~l88C&%MP|;{q=W+$3s;Z(X_4W1A+uMg>D3Zw}u3JU~EXyL9 zOo;FM6bhxlFf47`h-Enhfff;=zrXMJ0(d$xxKbg<$UrZ}V*Zrbm&beV#Sq}7H{KF! zoZNl{{hi3y&%g1x{OkVTCu7U6ULCvtr{B%L6at)Rj#EkB9TUN$$#D1KAK-ZMP^rXu z=bn2?0tB!;k9!gc4p|oSibWz?)91w2uMhGo#)R$Gr;Jm^9478l=fu|=S`b5FAT+ox zVi*(*g9lLKbwz7f(MjC8=J zZyQ|rc1y!?#v>#xvp@=%(rg24g9TQW0f zVzau9E5I1hs^*)_8U2Nf?s>}UZm11Xef#V#<$KNbGoZdv5kwTZ4ozQ1(f_C-wOeR> zwUBI5$Q(gLQP!~bs|KsSCL~&nteKHGc?Fv_*x*I+3d5K&lvC6y8;eSuTHH{<2r;Um z4m9ZGkc6BXz*UrE!oq6>-3&%pkR6I*0WvOND-yLDI|>(U*Zk(Y2Ck)8J|qn9HHY{7 z&g#qd8*Zdl+og8gaEJ&8fc+J*l4=EE`Kl`TJ@@X2W!!&JJLcMDCjyRBry^DJy_(EE zMe8!*;fD;St`Iu*DJD&UzCm#Nq53&!ib6Ol3}2`SYN2Koh*GHEK$ovFgI#8R!E&z& z1(Ji&Ul?UZb(YJxjwbc>t^?F^sg;^BNl$8z>a^5Vx;OY$(0@?TzZ2HD24X6Ro4uE5X@Mj^f~$g{SV4f58*6nbj^V>6LjYqFhLL5@0+VZi6!h~vJboU5V zHAz6zP+Lj#^9nu@EJ9Td+6Z76{CEKw7{$pJae%<^2^^QK${y`s09B#245Oo37mLN9 zsw!!WEoK`8fp#2Q0YQI%zc~h0)zwvp^D{gQ!z2`PL~D)K0r`AE4-Jjza@m!!X;#nk zj~@SDSSOg_!Cp!S^G9TZ9!+^I^OwgOC%1DZ32@?ig2((QbJ=4uPe%rNX`I~tg8d(l z04Gj^I)}F%O?&x#o=4}E4rj$2j+KVPr$vBUueoNOS6hqid6aygoMBKlO+;%3%-DLR zHD$mQ!4sicDaxh+S_niiltQ#dn}mlY@YV!(rr_ zYt~)x$E--a${u~_j&R59*A|+iwS?<0l+^T$>&?25V)bl^>{xFPQWU8^U*(-9i52>d za`SaM($Eyd6JZ<)6y}BYz}~G=s-LOj)%7~E`(ISnZZkORwdE;(pVle_RafdLRq(oH z!3_FCU?m3i*5&|qnj_e!5&PKu0kem8SoG$gsqz0= zak4>n+r291%phFw4Bfd$4d?bn`qFhlxMq=#&zT>@=rOP+n|(zk(fzyZo^(|Z4NnTH zO958>YjkY?L1UyQDiO6ihw{>yh`;ZrcK@L#&HR+}gWAdG_%U@*kc2vI0z85Q zsnFmN8QL39JXQKq>i{Rl1OeVK{UP#$gX9MXX_`BCyd(nPp(XD;>3cYt|HR}3g@jE} zXK_0nBAFP)syx~bu**Ktz68=7FtRC+V>oC}uwxcFEJTtad<|G8 zpd1en!zMABIG$^PN`nuj6iO)_1e$O-tjc9qD`g_0BpkL45ho}Xi)IB#D#<&BVGs_7 z1yGiSxUMguP?$s_p+X^VOeA$h?1ldR-f^EVhyb6u_x4kk8H`rqez7x2fX5@hmcvu9 z#bTaFBzACBTVxyi$nswjRzJ4IfE>bLPxp?xKs)C_5`6*LC{Lx8U})t<+JP>7iC6E+O`41>BLpa4_{ z0n>e-dqW}SluGQhZCdZVbEWFMNT!Tx*M81T?07IdP<^>qH~6H=4nANE7VAmve9*{G zS`j1*^OZMeg>w6yCe&2z#rxM9eGQlChC;V;XPx8Mwk`K- zw%u-bcg2j+(0)p@XM2;a>4vTD)`&7tlQb(Y^>ZZszoC<#bpF;DNwn&4c9&5SLGlVe zU9TgNI&r%98M$(&;f5Ogv~_M^2XQ1AL94P-N+YSsfxTd+U&CX{?hTC5m2WRkuAZc0 zss_+HMjCh&SV(0pz(HVCpie=Qz)B&gLQ<(9ocNhxjy_{#Qf~^v+t!%T(hr9Z;qCCE^&n6J53Y?5DZgpH zpP0Hhs2wRO&zgynoO-^8>}e9iB|NW8bf_8~bx|WGHWrL%Y}3FWbqOVH0#C3a;3kWt2V>+@ zWs1=(HsIT3GAeUK0?fo(z|qmlbCzY2%jI-58Zq?Y`B4$UacrGP#0(M9N-4uI%)QT=V+K&813cd+a2)!SB0M=p&!Hk)> z+I2hwAZz#iOK5sN8kM~p-H|DCL(%KrH@GCXSGiBE3GJ_@9BQ~WNU#Oyhv)_3BtqIA ze#Xe|$(s2>C*G7rx*;{+NR`n+-69<`w6Nwj=U{!6jxN8-uif>e-T#eur=R-Z=SNn^ zWDB}A^Z{+uAzUuE!|;w!3GEr#!F0}b^On)#l9(Deb>+Znis%p*V}vG&#UXHW1etC# zmzo~LYZpj7HcvvaYH^$zG3zJkC^5+PDRM-J}t3p;*FZ>$Eh@nSC;?ZbNRYj$UGnyxaY=O%b=C4e z4`zz15d)-4K@_Zch%_p38`0*lQkl(0xl}aNXs`CQk2Y(Kxb>_UUMqoJCGR6bu3Tg4 z$oV)^i&CFhB_Ua3;LQ|WGL0fj6~-aKkD%2~bZnM{pL*6jkSGhatAmKK3nP3ER!C#5 z{e^QdNkBPF;KoHlj@Z-yPs5@4wr4%==-7FF{q(E+loS+ds=!pa>cFS1AGcg5_0jgg z<{)GXrt7zeZeFYtRYe`%{~>3$J%X+)N@!=s9C1Xe=BT!7Ulr6$31dZ)gf{)qJ}`HM zUq>UD0~l69jL{z4j(y>w`Kw9|J8DAZvtL!JVNlV(j$GX|iPHhhWpA!iHKyk2Xt%aA z(X1_glWk@W6-%A}%y8{Y9XAqSR$*2Ri8J*|uhB2!lfudNPzZJ^F@}}lEEY4@q1@ur zs<78mgG0+DKRL-_|8+cC`)fiuhk{waDTE1ZpTPF9U7<9ZA+fs}J-v+Dqp^GkRWGQ1i*iKJ zF-@Vli0Q`|nKVGAxd_U_jg&aQ|Miv5{3r6COp0MBrL`8@uB-xnIEz!X)|jR#T0!Q6Z9sjLaOn5{KIgr|W; z;B~1W_bk~=pHfpg<+t3VZYED@?|02hYZBUZt_qZKk5*N&;ix*-jJSuywM&lw@aN3~ zE3cE5$v3)Fx}G(M8`IkE+GOThrb^PURmu#MvO2}289ZCL{sCnFFBv2-%v4NUJ;PFN zs19sY6XG20hVCEK9mkTsIa zN_psznYrK`cgFc2aHs14DMj%~0ENo*=B%(E%}j<+mFSD=ytGltSwPhbGjncwW}923 zW??FawZJ~MaC7fL^UnRxSqI#I)H$!2#LP*OE;I^8EpqVZp}w92zVA=d@x8ZOU3JY8 zKL2gy_Cs5YOzSj1nk^cBBrHx6<;;C`&^Yv<(dj-(uzQ>8bJ`8N@Q94IUQ?u zE7v~eSxQ4U7yqLv@E<5Hwx?6sC+T+i3b=C3diwsZx`7MBLn{r%lx{s2~2*Hk*}Z|w2Q=6_zqjy<@) z(ztfXym=gz`Etza@0H@r@OWa(m`!YbHqkb2+*nylaDqL(bt?cDPnp7B{oB7O0O#V1 z*KITmW&&{$hC?9|o`e@?1}JDv zQfv0wHj_P%LDOUhuvlx{2OnGsaN+1h+j*Ku*RKifi77W};f9NloNrWj+|K@`pAQyf z_89pCx5~l9<*L4}P9g{XOAai0J@dRN_^v~FbRQ*S6o05g75WZXg}ImeP0^XynMWj7 zcO^BJtsJJpLo1B+7jMuj^j0ty%L<10ApvuUDdac6WKivb*p&=JIjAtE0IJerOK(I* zzis5xf2-p-m5fa002(M&G81JhWOk8{FD7CH7%C|+xw1~+U@|ZwhkV1E$w7OYCT!w%e|tl_z2Q zkJvhBL3J84hteZi%S)94Ra=E!_OyydMRpvp3e!`5Bx@S#fI_|c?`1aD;q#iR9+Mc0 z3hTshEW&0jhBPQ`9KujLfOxrg;*#q;lVBnvQ-s|lTb}>qRzY@v5HE% zAEYl5)7W#2+PZg2N@^9wjpD`6#z6rO3JqUqo;d#S2N{2wTEX{^H~#&%@o!nyc!|PT zvW#h(hzQ|uh(sbzG+Jq-W15wo%$ZD%NF+=)nC@WZeel7R z3l87!xc1t0qd|Z;mH+A7JMUa6z>e3ye%++oZd*C`b+22u`R6}hIehu$>so*|&!hjL zhgODwb+38Ny4rG?%gbekA9!G8Kd}DwuV0tA?Y5N$kh=ETb?$F}JH8^k9JGF;0-bMO zDXHc_R&WJ|46$NgpA4Jlne{3js5;T9y3eq8%}>I?%^I(Nkbo#7>>^9NfSOuKv8PlKKMFj0V2{0c%3}ZW!ndM7jb2^&diNpqm-X|c$`9~DP4ZRt@@Hz2 z3a!7x?mnyDi>GgrM)`(9M-X$q+*Z@XKcBC;H@sA}5SDFJ1N)^3SN&~uo{MW{agOw` zV_>>*PP6A%d7BK4!fbu7KFAGX*YBjQx;hxts0OB}V$dMrnbTx;p-W{GZ#2G!LG#uJ z)a#}bq(TkKq*sR6O};T2%nUax%|89ak_DX02$e?9F%W})Q|rWz&E+~em`^7S4ty{4~E|Xz3EK`XQ0NKjw>hwXVp9iMhAlq^tAJ})lG16G0t#A!-)dEth zksYdEjd1VwyRA#+O!FJ*;NRH{(qKVd@ZP4I)dyBz!ncWXoUsNAs5bwv| zj(zp!i*uv(Z<37z8RKd-MT5!D7{U=#y+I97=j@=&3RzRvs-7OrnK$PTXfM^GBZ)aU zAimnoR(Bo?6Z2(PZI?0AtkHLE|CX_M#<{xMN(-^K@E^3WlxCSK7c11$FykU@T8tn5 z^oiKzH>Ps8Go;@V_Y6mp@(2g1Q&ZLKV}#-59RL2C`8SL)Qc{(+WlCY11|neCCdvw7 z+ZN@rhoDJS*HJ8%vBL&6k;M24495xio!0n2wvg?(e?yInpkY`_DO=gLrOIVjL<~}? zYKp~@*mgu}Y9bT;pYR>1haP%})vIsLy&NC-t+)O-4!o@X|K^YX_>^DINOd(;CrOHV zDX$qLz=_kLEfWL^VBsZ~tosp__4}Z*g2Y%8?U!m7uDSTHDY1woH?T+6Y**IIIq&h` zi)I1)coSh}k)_g9(FEoKn+^xw7ag8@+t25z;a|}#Ax$+x6;IH_s|b_CCr^ewbhDF9 zoXvJxna@GqNf+lclW#Jhl8o?|Z4owV>Ns#G@vGL@ZhNJ1=-MMY)XtUq+P3BocmH8BR5M`Y2?Ebvjv3KME6#k4*;QFY$OU z9#ItYiBKe@!mN`tbBsLg>KTUQAK9sYPM_*w89C~W>Ewefzu-U)qf_hk`cAjoh(7fQ$J^~x?Y{9a|}^Sfj3jnb@Z{CIvz*( z6nXxJ$$XAs24$aeS*)&LK;EFX%GuNa?Z7h%TGd-6B7Z`j%=&LQ(^h`e`vfL;vWpc| z)0O=)KTG^2v*`z!EO5BbDvATR>{5LaLvtURJZUZfWid<}P0YaN^^{aCWw`}U)ezHd zv;qee^vhqc#rUFJ3GAXvJ;=Z1&Xo_v6MR9^{1tV$SaeE`$vwMOv1z*ehA3xs-%Vq4 z3!Q{f(xYaOP~W9XhLtIAkp>zmfGR3D2(m~}Yt<9X<0tfRHcMm)v*?ilv^u1wJv`-s zw$-a|mct|NA9not>3^!jiPM{j&Hsj96Vm%gf`xxAPSde8pa||KsBKe|h|Uxkb=A>J9xtlTeQHfxNu_yAS?B zKJ=G+uKyK##a^-he)fNT{C!yku)n`MoJ=N}Scb56-6b)unttRfnvWIiRong{f4U9_ z2KvJN{oUcCKZN7?Kam|>5@Ec6sml}k?>{8vag-{q1f!lK6P4)(b{&X#CWybkv7r) z@54^z|Ew=BCUYor%9@+PCz@HgZ5#C;`xtLDm#}@y2L2)b-BbFXuCC&&FE8eScddEl zAODKIVz1aq$G@FBH^*kpS~xzgPHgt^#1oIiR<67-zlsakv2IOl#o6cOPb8FQdi?$R zcfJ(6WWmDcH+=CgV;^|eM_%&y|FR32zWl`w(90itsO01W)8Y zIVpL#3&V+f=^0novvS)umH@B&!1d$XKePotbHNWz>iZe)J7qV9SL_vg#r|*F(c|CB zl^5o>=k>({_ooH=x^+H#}0=TD^la*?1~kU zBVN0Hf{4A?^-xbW{!S#nf8V@;w=7&fetXG+h47_Mo{|KOKX9h~izdJu&R(DY)e|dX zO(ae!f-AOsIsdZ@akt6Ss5y$38}XU!L0f zIrR7CsjH9i5ApAwR!8_(2=Enq#a^+~8UJR@T9{wAu0ntn(Q}wRdtrX|>=PVd)`I+w zozKROPKr5Gz7|Bb|Oe zH*xLS@~68Z&;P6#;PFThm_6&~ zc}8Ej!~f|qK!EG7zn)t<-pzO0zRfKi?}qr9Sq}{0qWFdK`#SfBau1)f=zi(wpgSJ(5&PkwUz@f+K|%}{?Y-);Lg4Gpd1Bna@nS)X}P1b9*W zLTS3L`S*727v0e%Cli6C-}{oxy8o%)oBy4hd@y~v&wq96YBA=UFZj4Oa+4T`7do4G zf9&zt{h$8$C+bw@)mD{?mLh_8ERM^vwzxz5oIo z8~nTf`i>*E|IpsUTfJ!~+}8Bh*U|mgcbt5`!;ADbUDwP-cXY||XlP9Q_H*QtEI=;sp($n>TM};lhPy#Q*Wezp;du*|W#! z&t;4T|4;;YOx@pM(L0`3$yozFwuqMet-a_;R0rZ+q{N$7okbT8_J|siktP z-gNJg`@QGb@Adot^6POCI2jF@e}1H|w|-fTZ+pj4`;Pg4$9rCV%Kzx;`XBoa-*Wi7 zd&fzRIrg2NN&g!*Y&h+4XYBj`~Z_g*f){BrKS_ueBu*n982mo;nFaKQx^9CO?k zOMq8=?%SB}dKcgM&UctKYZfALUC9eBIu||* zpZnCe_~d8bdqV%gmyi4mhu$?v_2F%MU-kUJalxg}Uy<+HF>uQN>FN3(`~K}NIq7ll zT3Ppd@xOfea(;H}?Wa86x#uk(zrSy9*QxzqSZP^!s_*}FY@+y0+y8he4hH;KWGf_foC_faK?<23ScqtS-)fZ_;l#;-pBt+0z5|Wj<%yZ z#=MX#kZIFeW8eMmcaNqz?!No(V~B6;`8)5tlWVTI=7{6I7y`Uw(-)b3`7&N#Ul|nc z0nWP&J_p>outI_#D*iL~-F!21x|WmkDzAOOzMV_F>oMNcjJ~Vy1rgxs*oBuIIUUjT z*Vl0&&;-X!As%gi{I=CEc>p-t{}h_wl7(=1I`j|i{||ls6UAq28uS7dVo;e5J(<1Z zJ+D5g0K6Fg6Cba+fAbmh-*!nI9S`)MRQ!&9eD%8i-~0Jb6u+Y%KlbQ`-|P2(Jn@_O zxUsSEq#`&*f~PzFO`MV4xpPBIWO@FC^mm2{aE$&2N|pHI=3Tp3IAaF2;m9$s9Vivq zyldC^{S#5(|2hI3w=>W&=4k&*m(Gt}dF7Qy2;a%XZ_KW_<{Iv};||8AN?$Yq9?oU> z!uP+=O~Hq`rSFS8I%^geUU(rljs2mO;<6wAn6H2Rc8uHWiT-UDmwn=$eEO4L=d3Rj zx#_77zaRoU9eenJ&CFc0e|+#Cvr`TJ0D~h#XT*QoC3Vk>-(fqI_?=1rFX#EMxqma~ zHOw0qzcD+N_yP21&W!&TBYtPf|3r~{A>wzY{7)3Q7b1RV;`=X`%QQANzF_eK$mjE? z92-wI{?3}UFt1dlIDW;7$T4Ht+I4GUt5#l+A3Z@Y&=*U9n|JLRuK_&O=QFn7i74=Y z9Ra?WjxjGZ1~?{u^Z)6eDgrojCiDO4pSW$pK4Z`E{`Uj$@s18Yf5#n!LLol1(}{im z>`4BF5+IwNznfcXanJI1GqVMPInQtZ&P~7_H`BBocJ;&7rM2Agg%2}*{#W|CjUp*WACE^O$$a{eJdu5B=W!pN_p4|0g2B6N%!> zasHFenI zj(+^Vk^o;w$C%T-0{PHRCw5P(%lv=(CqCcS#>YE4#`kmGN=DQjcib^9cEiLV(cGgx%n4EfYr6l+_CA4Jn%UmHER~;g%=(>^YHM)EO_W4zObp4>e}byLr2E} ze;=J-PKSKPG9f?xSATxS{qLunj#KROtpX7J{rG>m&tGo|p!eka+_(*u}$a1|`(90sIpx0|b5U+?VRVfyV)QS`;8YqQGp$)X9>6)}@n!Pz$PIA_n-yd^k zGH1=%NBar(PZhxeIxn!}Et4gpGX0b>}?%U?d9 zSrb5ihCOo*yt!w@SMF$mG3#GMk_$N2-e! zFa*|3uMxQYGOYKki`{|Tvo5RpZnv8&R$Ri@zjjMf$GiInKQo+LGM3C-z|ly}Y>8re zsp==w|LP7zuNA5y@QEd#bSFD2I~@YdvsgKK=1e2Tm&i_@Ig>n#)rcE@*a=W5FCRZx zR#r(@SDQ3;Y?&w1iRcCi>R+bW>tY2#rLwY0Pgj@bBqH^1*<+Wp-O!)U_PJx~i=tdM zZUS9xE&SUfp9)(GaE;}E89!wf`Gtk--}w$-yzjSER#q}@+&Ie1%c-rcrLL}y&dyFc zIyz`;YvajVzs&e4vj8}HXfIa29P$Lb|)VyEfSN?s>oL z!`S{mcAvhkbDxuc{CMV$kd$E+OcUVsQ1qccxEFkVla1D6KDc1_)RW-vH3DQlsH z2tj`_*|=}dZv0T_!J6Yo<{J8`cS6Xu0*9uyL68Z zmY%=$SKVI?i$SY%zSfq^FAEfLY|=1Y>%Pqo6H|xyEZfpIt9ZODb+_v1)$@dF*ml*m z&_gtAU6cbQ1Ye8rbTORPbfKEdV=-(I>G3IG-38TR805&XcC4(lU7L^=?dqRWdQN64 zo^k}>p*{bwN2yq(U39=qW%@OE-(T#OtJjjH^Cz47;7`lpf?%=iHcDF>srgSFuf5&B z?=2<}J24Wr?+x;G11808>DS4&@oW;m^vmn`Gc6NF`>FmMVuU~7RGUIoc*c`b)#F98 zdgJ|B;0cAax8=!Yz8(3rUVd;5)-kHhzac=vPm{8bRt^yUD9E(t*u|qG5G?6F#Cp>6UH{D@`%6m}iOG`1jqEA8ZmxfEK8y1v3$sYX?&@1C^Wml~~`6 z58)}auoXQ3K0i8Zezy_NK%IK)K02S=re1Z*QI2B@e@-JA!iR?B_JaDP8_9>B`a=}! zLf9|bUdAY*1LS^|&Hy!}pXG?-sQ^#XFO~^iZ1N#OWBQW~${{x=9KIOi)-ck_DOiR9 zF2#sqL`JYIFkaqY2sjS^2faGcIB_BLb3`_cu!Q2fWCjUwxf!#Lb0E#>c5JRu3XCS+G#u2NH zkWvS1F4kgLfLfAm+VQEU{N1)Km|-1(LaOW3rk}$*=x#YGwn-uFEpMzLcLsWj!QY5uo$i}Lb*7BogoQI>k(!{ zk8RGpN!+~s{yU;3aE~S0S5wn%#FOAXT+?>Q6}o50ub3DORn-j3O*2VQR2 zVwXZW8b+9ezP{DGY+`A?Q{1dBJ{r>fzXG_S)>j%lLue@tlpI(9Q9bF{Z-`-tWNj+j zb!@Iy@eQM&aL{a5|2tf<$8=?wKutiv_szU-5DQ<>H&a#BS23Xt=#%%92%$E0p}^3e z*WF}Ta?jU6&pxdOaeO47Le=wcXSze|4j%W{#@3OC?PS7U@D&bN7O(--t>FVVF1S+} zihqyT+a35qEbgmwSu+V2(&NktZ1))Uxzs~4~d{5GhX-<1($|DYY(H{9dZ>j*DB}uT?}o<$6`VV z!Y@V@C>DRQB>Y>(OZ1u)|FVE!s!}K2(=ZbxVSDriHKY`iKj`vXjl0mn8#}W>cFsF56j~Vn?^9> zpD8NRC2_p5bm&eO+jy=>E)R2s@5+Pm5cm)DDtxImYcMW0c6m#LNnsmJtzSRhj7IWS ztuDrQnN{UH{oVPZIgaDAx)drd?gCY}sd#q?rpYxi!e9bXD1Vh>Kk|J@@sIbKNe1oh ztG`F$3eJX=2KWpu6`h$=SUNg{iye-@PM|Yc(PotTt))1>y+C>mw-@51PD=zR{IT?%0M?nDMPl#gcEuu7FX95$GR8G zR2cOkE}jnLMicnBQO8VCLAutf z`KUrZF@zc*IIf_=Bq|18jS`$)d4l+{?!gA6A=DSbuA}7)ch#3qK4tg&Rj1A5dG<%T(`@U zjlrygi2t7D7?D0UOpH|q{oda?O*VfKdRuk6WpVM_I(FnYkr6HV(kM;dNBaCMCK3d% zrdD_1gXzt@v`3e272(8dYnORwaJvtx#QIsFNR4>!HUg15gX&TDpv~P8E$w`p*#ssl z=)Ts?7JG?qXK zBB19PxPtxvn>(@k*f@HhSVzL!w%sqwx8Ybq@x>N%~I`@2yCnoZWRBsT1mKhJgisR&k?=VB$q zl*eu@F2?@4AfBZc{sw#;H6gc=f@x>itm`gSDXTa(y4x+T83-W(bVBFf+4r>Nf~7Ii z1g64{9yNJnc~_0HtRSe2;nE#GhrA5%_Y0jCjG0|rHJ|pSun=?uU4^G*CQ36b*Mm0x zoFuA>cG1}fLz*X+BJh4W7vqUZd!LQzcR?$IL4u!O9!X%qZ1+WL^O=o$pb3uR1t{-T zPZ?b*40;9ofe`dOkl!w@_ymiY#&!=;Dzp3`b{-ZkGOP@)@;%q}zXo2Qol78_upkLb zk|SvsEm$lIejp6d!)Q^oj(wMMJvYW_^=Lk%cZ=rp$f@)INaMxxUpT`v!sJcwmevMI z%2yU`*lPywknO?McR>{E6GBb}Zn-^7&*FUI3#SYE!4s%q|O zs`_z>R1cnQ7*%KDTzTQh{MF_2@Y97&lQq_-zLeR2p`D zOk28pjB|ilq2m;klx4%!5bhhLMB+;pX`LuD*VC!eR( zs9Tl0&rT;wJlEt-n%$ELVaxEQ%_Z1=p9A<$FqI_h(*+QtUbz+d z2Hhp=Y}&f)Lk3U*KZSiiUQvqmBD18^2f$pZdKtki%(FT=&K~1^(X!qdX3#7DsyukK^6-oPy8;Ae=iqwYB%EqO^bzv&bTfDVJ>eAT zaifY?$KYAk<67&%0cyTmBHwPXp~QPuioF*oR5Xz?p7d&i{(xzC4_z6%D5*B9Z+aV0 zD+0+5wgV!SU1`UgspJZJfImJ-FlEPjxjX9${r&Y_8Eu=wfuR+3ROqfAga7jt|8CO9 zWKU7OzZXf`61qg$CEo6rp|e$Z%YTfD*WJtJY`ux8QAbyJyGXGvxCbR0D}#j(s`RHn zZP*u1{(}4W1lxOmRWb~U&#(oK7MjkL?54XokFa{iy1QwW(NbHwpIiut;=kkiyfSuP z0h{6hA@uoTeAEyMRiKEpW2*Q|is#SV{Gf5ibr|;gVMb*|<@X$I!Q2Hct$2N@evUdD3;6HSNvEDf>AHA0jzxN`%i%WP{WbfXY z##ms9>YyS%+x=B+^rn2?L>~G|Xr)XO@-0mJdtJ0|bQq!}4mvYM*eH&LHV0m^UD40a zr(D+;`vny=3XSD*zj_TMk^@od?xa750KZBrrF50I$@sRrg^4$G`^Lzco?lb(s~3!z z;|?ufNbRTSxVzThs)e3IrWOfbTo{yZyL8olTW0qjvWn!s0uw}TF)==Q$tEUoBN#s< zeaK2D;`Z#)xz;VMD?dZkYm_iM^%LOB&%?`*nxzIn^!Q{q&P}#{pIng5ES@wvHy_eb z!fi?$VwIY1mC@^bzA>o%*4aLtXqMY5-u3M`Ry*{&TmiOYh=0}05|t*ekwXUx^${5P>CJg1PXZTqq_$2T1lb0mKqij^xtZ>Ze zVv3a{z@9(v8{*(;PaTTThls`M#dqJ@5zFzO8;N*-%LbRLZEupRmO>yeXRAHL=$wXI zKHB~`S>+3_POGgM9IDW7Eqjs^ea!?0;+(*MaQmnC=0&fsu*!qT9va-4T!-R&7ZQNqM3DK99*Zg6iPNV@0;lCdl&=D(8*=wxkd?n{sCvVm0CI>L5$- zO$S(08AS1^!n{w8=~bj6AMgckUR6d30h_npaz^Eh=Xf7KFuvI~l`kL#`iEk$mqxz} z+h6&hN%i>%ZJ=qpFG>+d4S@wir&I2*bjlqqyC-7oYXcVY>x=I&e~h~f>Tom+S?Lh{ z7<|jsFhL@=w!KpXxzzf&J(DK^wb^nWu4Pbt$iOG~MMtceo)kO&Rq$_Le_>k!SRMN1 zO7-!=>vfKcdYR^cX@!bY^zn$5JgTyTwtRU@J`>=1q#3N>?v~d2Mt&xWB8r470l)SX zyR=UWT_Q>7)OC2&Fj7C<@$csS9cTVj7BcsAxw@LZHPSP{DmC)B_BP#Yk@fqZioS^~ zWVdmLg1MV4e1v$lXvB!_t#=N<^yQ*?3 zNncC-U{71OWdY?3`=%s(!-y288Gp)FmK_E2S0j<rc-Ncx!S$JZaf}} zMZOv~z9|?+(VQ`Hm5%ejxKjBsF^pX1)S23j{J{IgU@+|H^U;hCo9DulrlvQOhAe?^ zk6a6EN$7GP9X@5`BaP1%^1>wY2>$M%b$0ZY`agfO_rGY6lI$p^X?Q-@X%dXS<{UE) zN9Iexa3_cUvDl0IY#!Kd(vTs|(tKY#RQ`cb(|-NNIIuKkr*R6^G_w-d*ynSQOIA7t ztRFL&f)6cQAvo4X4?j@s7j+q97bHg41se(2wh?~Mbfbj+7}`E%u5IJt8Ql?=6U%Hc zYu~fNZs3QNM=bzCju^r@7BXo=n3|^I5b=Wb;3I5WTv*PIvA0vO7M@22<(bi~@nm)O zJIyu@ml-c3>%@VS8>=jN6(oH zy$5+avB)>=H5)R_t)^jE3EXRT)hT6X5EbrtpzFD4uDpf(+8UOFRJp`U?wVtyEb?%< zv)1t9vo0}SJ8pM1S%e%i;e>GEgVX4V-2VMV7XdGhIGk+-WgOtr{ltKSQh$`D(j}FG z#>P^7JvUOyV*3r#Qv?Ot*e*xUnQ-+MAgm7EOzSsVOVoo|Lk!v>3?hdC#Yet*wcYSd zlqh=v8Z%Qb4?2J9gAn+dXZ(I>5gh%ux@=KhQ#VdaJ>se~I3=pbD@&LOc#e0zEs8Ws z758&gFbrRh!8EyKZXAdGyt9URdj-8u$ASbYEF#<-8MQb?kNMC{-mHWdQSye9dKon} z)GhuA_b02K#)sat2;YV;f_Vo=90ixnkhrFedhVY4n zg#~41b827C^EQn{wEWx@k-l17vD>p_53Z4zPW-~XSu+Jjs+^DM?_yOTnT&`vc#Bk z-Irt8gNJP#pG^#*?stUhG323so@il4ocG=>`++}#@$PItC=`3Ln%8CX{Ih9X#p))E zJjc@v1~QLZfIyhGD?L$CJH&79=Nf{sb-y$LLqLtzGb?igliuF9=Tj~2ci!oZu@7#W zCb60Z)!ntVNudRWD3Os!keGwHa0p>k1qLZ*9AZ7%b=`2$5KXV@(?cu^I8k5Va~=hf zplN-D=IYvCJA@t|&IyKIxVl^KXgD?d>3XC7XSz^7vg`gc=iR)kjjF+rpw7`};cO&9 z&S_eC@#I1FJ)6dVpN0YExM~ylGgPD-aa7v5j4+QgjA~4fa(Y!kGfd;sElEmT3RwE!>I)q5P1Ygh#nO7k6vMUTo*~1eYLK zdKKRGHyp?bt%P5&RlOcxY1=N*{on|O>f?X0v)IkTB3I69CTSIHVJt(rP1i6oR;~T^ z%~NiA0~E0pbYLir)#@xMZBN;~|3;XP=Pd)BM8+xdpsbKKJ}s5u@En7|4eq`+>vkZf zR$AlFA$*{q8bX?o0+|^`_PoyZ&CO~w+`6Cv& z@H7&qee>&|4-b^ivPA14aM&GX-2LUmujOMs|(qkVug(qxHd0bhk(z z`;(3=0R;;=k#Y;fIxD;J+5>uf_5%3Xz0W$NJAvk3n+Ze+x=DezkquY&+j43GMcnoa zzUb@6R8+{lRcT#ISUR&B|H-AC`_a>~t*kr-KI!^TlSij88}R&s_jp)2FlIzGt|!8V z$+^2mw946%8_DB8!!C(dSRznwHQ+TjY)6cqUxF zku@f36z3A8vh2%!kK32K2Hkc9<#s}5hCx?dL9>SEr}QVU#BUK{%?*O9ZpPtqMw7`%;f;3cb zei>>NS1PJ_%;$(&<(yM=IiKFCH}{6=?Wn9UL+(WvU9E0{<2t9Ql(ZOxo&uxz{nc8$ z_4Q&K+JiAORi4AZi8XQGm5g{jQ+~9sGlifADzxVSv2!m$zk9|wB96or{qvPZ)Q$}b z&vg&9Yp>Cj03G2_8~Fxu3#;JM63r+T^cQnJh_FJx$uPEY?*NkGif9LMx>K8*wOPyH0-=eFNEQn=EU2FlG3VV;xEsSv1J!~ zKRRIptF;v#GAExx82;Spg-F&08$$>{RR^#$iZp;NZ$eA8K*iLqSG=Jwe zNivWt=^cpok!yrg()v&vkL>stiSXJyfQkx3hjkezBES&|K#HalV2879(l@atzb`=* zUF^yrtoELQ;_x8XpV!8{Z>95fN%y$tno%IwM#$Uf@!bH?!@v67keED)AU@xU+I}9^ zrWN`J)dK>A5JN2TCL$!n{*5_n+3M#4v^x8#m&7iDw7wC?ncdfbd9j#4g1vBn)E3to z-kc2>NXSCA&OtvHlnW)y?+J_jH}^bNd&Lty$+OSDTEwWRcYc+_v5q6a!>bL<5exhg zu<3i`3OdL@ydE=w{y03e_Vf4u11~J%FWQZKb|T0GzlON(4av^fedOwGU&u9UGSd=^ zG5eTXB}tp~0VCn*lt4oxp-3CSkE(d+YVnS1dCHl10FIa? zb0ZHG^~|E@qto|{m)=cJR^h-C@*|ZzXRU~tDA^9Fhs1|(nU3$azk%WoB9x|nL9Qjk zfm7YLek=MF8!maj`o7(TrgXuUpyu7@I~pQ+wVIl`pF7Iid|#IMN*lL*RsTN5PJ8vY zluC#EC-^^p79;gWCw+T%rPf6}<#)E-i->vuW#u!Qo0Ie`l%C>WvrW49b~L=rfm%{~ zBS>gygkMfMg96CF`V&95K7xR_}df*mJcI0z_Hr`M-B#7bs{*L%WZEB(S{;xF7 zH4w{kVM>BTRl)&hqrcNe^BD>Fh?M+uKy+*5>Te=@XG<#tm z>yclf$*kiwHK}L{`QBx7>8`KUMZ**ifeFg3*_!{ zI_(cKb`BCY6$l zuotW@KQ`T+UBA5`bM9O^RMCM|DFq!Kl4Adx(B+T9y2LOudUqHjR>MzO?}88fi?Lj1 z)|ZG_X)65}OAjE-e=b-@6@yHrcS95QaeVJSa&ryyQT1!PDLo}Aa%>1TG6z2unmJR0 z>E}$q+a^@+?vwT&xLsRrfKK*x1KJrbh)v;nu&PSdsdz{0TKkfjuEB4SgZ#lkN#b&t z9e+oKsgV85D7OAy>lvn#yd&vQ0`_t)y?y=Q58ludnbKj1xs}i9i;2(1=g#iSo4TdA zxH!ZRftx^l1qvd`m+&45Kd2*lNjIG)89r{CDb`sXbvKd1krsH_dcZ3*%_F5|dw`K-}SoIR9$4)G&A&YFe<_!s1`v|J{fdEAc=uOS+Ajb<^K zm%UTUkmURKE?PyRRdez~dxAFAsZJaU!U@)pa-OcE=X-5anno&3`rfq}o#yEy>eDpa zaaVcwm$#>LEc4sSb`-|Sz=p^vHr`ef%0#~WxJ_$XXl6;b@jqFUQ^rNVkoG;&a`3x+ zsE7Q|PxQoa)zr_Qsh6Lq4+OnhEn~IV-N9(OUF`k>269$*Kg}(7AGm0#WD%w#Luapo zGQW>&cEP4zb_rXr!)<7COhmVlk{Ggv;D#j>3zcK;`z?n3b-lLxz}W-E5`Hz;3CW3n zI1`ij@|DCMnsgVGW=Y6sj*j$#ZaNqnqB$}w8Ip;1jyFcN9F<{?kt#VvyMrr}j{BSA z3O`JOn%TEk@I3Vy^*!3-_Ru7Cy96uZn&2&W6_N$N&5qtJYSkqihWqn;MB$v*KxTnu z>Izns*s9LE0`0&7?n9L>bOOmr2P zKb(v6iCk}LCbQJtz*IJIBkU5*9ST~>LS3GnP4+BIoy1MCC`QiJ>QvF0^wna7n;#Kg-HQURA2R+z>}H_?=Hb z`PAHGt@|*?aC=-_#Qj4sm%6i~V?hb@Oh$uIaBp^NsG`I6p7-m2AJ7${FBpc&F-S-P zBZVSIi9LTJ1Pd1~s32p!upZ!u^y}p0lw&YTzf~U34yQwdhr~h}GqX2dtlcV!plo6d z?ZutBNI9p{daVajTK_Z!c)VE$5D2bcv{Kc63>5VZW=i}NR4#(>5W4#I6kepTW@DIV z2nk#HC{#WA{nePN`|5fpx#s*yWAk6iz+?5B=ZKha#C{a{yx9fu@3(krA|19TLcA9% zW>v6Or@4H6k4t*FM;kh1=<}n^^QNe-ljRT>r zep0KZvznzG68|lYp8W3Dj}Y0sVK`ctrz>k;(tCm0&_S_tc(%&qzd|XOcbLWqPjUsA zr-(fjG^xJ(ECt``UwDX@7|jh`_*-bS<`JyIg$$>~=i96gnRzpt#2+iJ>V;=dk(a&+ zi9@a&t5A|hK(gtd&Q$6NFKm$n`*AZ@t%4?-7GS=6<0~Go_%szfiSK zoPzl)yr9mj?|VsjA5ck#Qc>dOe1Nf5A0ZbN{?yhjy8A6K@FJypTJi2V`)Ul>=7VW-V!OO~kTOK89Ev6w6kHF4F3uQ|< z*^PI2U1&VjZ;zAg1?LQ_UJo(;)VP@pfwo-~IxVpM(5&EdRCbw{_ z_U5NSryN5Hl-76Wot`3>U~pzu%ef8@ zv|T~v!e7IqhTE5_oKxYM$`y?%7-d%g=-}UuaA;OdtXY9;`KkS2lBIW>^ zFf1fQBja54!Y%~E2?S*#3|{Aj4*RaNJ1h9-#svw>F&bcKgfLtrEqtT^w0rX%dTuz-VM`U2@HEOI2GJS_pcy}WI9FKM3-0iZn@r)?N%}F9QntPBnc9q!V3g55TKF)FfC znl#uWtEhAkaydA2{s#TMMtKM*#n3UhnCsJ=>L?2^Ah`C!=HUxw$B+(~H9vZIHMn-% zQ@du2Vgz9P3=bEPX-Avx$C<{K0#vz6WR2ONX~ZY2;Jb}?yv1l#4OyXrQ@VgMZ$f;Z zE0MOTSjo7@sT?U(Y72mT}%Yb8enWkKTTZ;^Ljn9 zb^U+c>=U`vB;~!uxSop=n+gs*OM1QkH5L3DeVQyOt39Zfid=N3pDYEj4CJA&vxGQ5 zac3{Ur^(6OXIoj|&Er}67Tz5;C-XenR@rZ(NHvvH!Y1d?ydt%~@=u$e6fQ7>lH-Hn zCRF5HnMOs^u3QBhCQ+2jYC5RfOoYLMJisUyKsI-6WFbVuj{UKvj!+Xi)}FSo*g> zoX(*Lm*641TO;fwPw^hG-^yOaQKAV}TU@S`&cnnbh}2-+O`XeIEdB*mgc@=E;Tq*> zE-8nlwk;@y)JyH$qvSVSLYP{VDh}`2UEfS73d_G&wW`Ck@}VS{wFJJ=Wa%aKjk^IQ zN^IklU7YjVcwzWbB_h7?sx;thl>0GCSaQG19ay_&u1P{dAX$^>s;`>$_dkLMSb4*$ zYMqXDzi~bB5N+)Uk$lyk%PZ`8A|j4|zV=$-YJJPk(0+z8>4n`}9ifjncC_}qm-CQ2 z64~d^DFQWL!EE()9#oMKPVY-oB0Y3MdK-hn0ZTs*PetLa4OxX7^G_vEBry_%oHcC{ zZBorzKl8+YCzh#BK;GK%0)`G-us>5rA0=Tnk4=wtg-eNk7r*`3fkl~Nbu~czeWNq zC_bVCBO0TCx0NLQT?EfmRt2bmX;%S|oF|Z{-C2}SFHK(`Q0w$}1ZQVN#(WU_Kn&aT zr|zXbM>}q|H}32hfr-qCf+e%@7^6647}4+0yi_EAy-5owKqAG{A`KkqKu1Bf9Zu#% zK_hEb(Q^qXWcaQJMo_zY&ojirB>BtUN3X5A_#f7^Lt~|tqS|vXgnf`4}-rp z(mJ8ic-6GWgXfy|lhnGN$=PIU^A`FsrzT`C5HcpEI$qDs^`NZQwYNY%fk;mhdYqX`{}Fu1ht8#4XlGzdtW%^VUJ7T%-!F-|u?=ZGbQqdo2{ldq_54;( zmJjV75%S6W5)24_@3=Wf=oa!@CZy;j$qgnuaq)6j8#LaziisfjGJ19pJ*s-S=Luiq z!b$xOVhY~cTY-HO>J3&<)g#0~_lm^2 zwB@&}@dav553w6L-c=gegoE`}$1n-oz1V7YXOW3dYg2b{?Hm+?^D={HLBaE1y5Nfo zZxDa6**`>hJfxYb6^V0J^dGZ0!MjJ`O;;{|Ka6#gZ)Xm6v}sn)i}hFxb1z<9&MG)J z?M%;bi}Kj@n3X(0+VOC<>n+LyVL#en>mMP_&1ApfbcVp9_#hm@OcAgnfhWO-5VqPj z1ffmQpJp)c!k4Y8Geh~jAZAe`Bd1wmkg6eIG=YhAq7&CET7dhu9|*LvO3OPg<@nrF zTB`IhPx@=vcTva|Vh;x;rHp#@{i7bwd}(DR+vS{k`r1^~1z0spC^S8=nkzr?zoyu1 zdt+-j);aPJg&!d1^sEZ&g7?jyWenwA(WB9%Sj&046`e+vT(NGwgMxDIv-%TNW8(cQ zq}S?@7dhC9b`qW#^YzjR0s$rQO;dLj1k8XRhb{zlhhr zu^o#II>N2q_^&B<_4E#8=W_9liB`H0EOe^!0+!ad4<1=H)U|qsj45x`-DpZ5&Aksy z?9Ie4y@x36LNS4}={;2m{c~)==(OUWww`>Rf*IOj6Or9~w{(J`>2tOFd+Sg=a>U+^ zUh-}o)8Dhv^(qBjKgjdnB~M~Zb6Jt4z~;wxrqVeYXf$;|SKkKTUXuPO1nODVZ$>Tf`RGXCqw~ITmuZHXhOK&dyc=ET>z;$u`(535O$% z?vjS|fjwAiL7J3j8TLp2Jz0Nd*kdD;dv{#8X0gV7t9JO-MOD>Q7V=W{c0$~3e0h3wrLu($ogvk1&rO=e+cR#A9)_!uMvNviGMV9z^#nS!`p2FI)a{Jv)x_>v3g zeAW;UfH^WJWTTXcwSFJ^jF`%HkHFdD!3s#omW$2mydA~q?!|dvTZ?!4?6jI%U7lvJ z1I_vrSLU)Jr@59LiTDMyz){9vf81eZ;^6b9uCnqonCjbJ!o%S`U!Ww8lsI5@tB}#W zK03M(SrSL>KfFYOv#fw|v}{sMTiYVv2V9@dB}743J1}t)-1*SazWN+;DeeZDimrZr zS~xvjyLuxeNNJ%otPxnFQ!N8CYMCaQyE&QUp3Pd_w6s4siNveQY#Mns;<3YJfk84V zGJ&2^_mV$Xb_^znddkY8eeBAt7~pD-aTm8w{JU#)A{vI+e&0YT5+(Q?=j#v9P{^3gN!w zd_62Rbzxy)^V8PW);*7p z6M|Vyi8iq3=l#2`Lq>*Y*DDyHy=CofRH^WvQ+LdhlS??lx^P5z`?^H$CQ;#x2RQLZ9r@@W;>zM?PvH6s z?O=yO?@xF{%LUu@9;bq_#sF76E@|R7F`Z?K$Ag1|dEux}@+X*K62`{eOM5pMI+e0@ zYZrReG=y=obt_eR)r&X?v0*Avg^U;#6=f9_@Ye!H=Gelr*g~8)DC+pgvg%qJ)EGc1 zB=M0vgGzSO<2&^dehis3+BSjNnD4Rp(>DmL8kPx3zJiTUs(61p zq*mR?3x3sZ>1j#26~bGA9_sugc0Kv5GUW(vxtn4+ILwE{)8~T|b=c@Fy;kzH`0|?8 zT|xHJ!}sp%E7M6&2iYC>juYi}Dau8*we71mjlSFrf2izlHzeIN2geb$lr<2?R;FGB7eSPLq?vPo;u{93@_#uZ7b6>p2iQ|!hdg(pZ>!^rlYkR&lbHCqC(A|H(Y$VZW2e4Gy%XX|f~0;Jyro{xN*( ze-(2KYgmA#v)xA|=dJj)`ya2?e1_SHG$dTqUJNi1)I%n!bF{d!$>mAZ$Rfx-`u#2V z4=EQG?ck#{F^z^F6rXwQjC5mWHOh~8*+ui_4|@O_woW)pK`9}k^l)-iUsL4v@Qhxy z+GE&V;}|fsFpU?8K*TPJD&f2VY7zeNNJ4sXd(<6J;&pd87O;y~3rC3VG{8WNuwFO~ z@Pp2*buGe_lQFswpa(Z_99d*-f})BxG+@|*y`=VF-HwW^I#S$VVQgXVv>Hy*aIIgL zF*UK)yiXeOeJSjPrD^h#{geM~Px*$0qf#WwJ9X*8Nr;Zf`u=F1&VEq)P_ygf`-ECvkatkNA&q9Rw6A8tjp+XqiF-3(E7xH8&R3uK@^1_nPQ&-1E4gv`}$Mi&u0I) zX$N{&e)U9AK8pgj+HSTiGzwNUXe7Ewe6*V*htKk5oShv@+U3qPNY3*A-y-52T(qVa z`qUdG1Y#I4aCZ!?lx$LZ9`QBYBVPe}M9KR;(DhU4M|M?uVn(tIS!k-{#x-zdA1%S`|uw7zJ?#|qV zuJZOy#5DySj{TCQs0nocdy{~(8BHtF$T_wA)GB=Uru2{fnuJE6bO}%YVNeoi!%o*RtmX0nvaC^>^2;nZ+Q29{pS68eaMPiP;uM) z1a$NK%%*Y#{Bp4x7EQ1aQcA9SCs*NMuV=KuE+F7F>pdUXcXa22PS`E1O9%s#cJ)`zsA!=lv-Xpg99qVY&+3iFlE|${(gt22!5L(Qrng!^$!rq4 z;Ok8DYXXBM4?5xI(vNwv_E1BHKYJ%ga_vU|=_u%0UsBM8bzdS`% z;z}z`gnO&(5=dYUm#ffIwc+3D47BD3J8_x^(mYo8p20X*VayxpbA;Ar{~~Mg$FJq zprkgwEH#eWyo}}t4`7*Vv*uNmseaDZKaq!0X^FQ41gs8IHR)Vrcpr_cD|1VEsCu=U z(*LZMr_){g#KTB)2tMJNmKfC6Y}q2^o!rQGSeu|;Du%swiG_z%v2F@)kt=QGT+i|}f2;r8wHmH!dpsvHVdhebU0j(&-;C*NG2nNI z&u)38lFxPTduBzlkz4PKn*pdYlv!DXaOIj9PPuCx5`Fj_Qa(%3+ZG#JXHlXYA^=@J zHSTFwt0`;$nboe8%v^ClEOqLznjC^mnyWz2Jfz#{yaK7Jwu2*!XGMAO4U!?&U>>o* zbWEJ&Ku5TT|BnITmVjT{c!S*`WC2>>4r%nrkqj;YJ&Q>hJ?2t4moLsrMXd4W_g%%>>+kl`f8 z2Zn}_yg?x*A)!%0o2L4nps?*W2+56yw?ePXbK}JZi6j6-?Ql&i3`mogj}eq%3`!v@ z({OWnhg+bsoktd{B``zUC-CX%)t1vpPWTUSMq#OV%9tzq*L#N;XDn|lS z&R}#Rh!+YG1f61gUVyz;n*z~#mFRo()UD!$wPn(rQytdEF+Vc{I+lAXaeoRZ=kp@j~ zdyP&1Zb19poZZzW%$T6%0vdHW&WdvUa-jLa{H9EOO8^%+aSrTkI`#E6r)Y0E2>DB7}OjU^lHxXFoYD-k$; z`6@m};=Bto8PE8Su=M6f<0OO>OND0s1$bicW{aI?CeYfRx6-%f@l{NuN2 zypi%nf?T{>-26aDza@C8N(E?<-u!j7|=M~<;1?L z?m?Zj+!xEZdMqtMZbmo=cTNc3zszkt#hGm6k|AJJ#4g<%IPEphv)M)$iiQI@9_qG1 z3K*TLcgtIwCyV4VACTJYVV7-_Q|CyO!mA|S&Zh1EYw9Y)qHKdT9SV}t64E6r9m-M* z(j}deOP5Hqw9;YF-Q6J|Dc#*5(kvkj3k&D<`@VCovw!y5{j={gJ2TJ3J@){B05nb( z)yKKu079a{cv8=GccB3QwGGpFDWOiv&d#3Qq&tM+E==<#0X=mjX2up@1QJrPMh@F?{FlOd&ci5h2$&F@CP9@Ju`FlaOH9PE=$f^|Wfk{FO0;O|-F7CFIre4-9 zv0`CrpZU%xbB#&ifrxJMrGobU1uPB9PmB`$x^RzeAc@my%UH@IIqrlk?U zeG`eq-*ARXf732y=Jzem0dkQZ6m&pw1qgAT;{=71VRB_xI{*Pn=}gJ~Q}a9ja>JCd zoxY6|9NIAunW8;*(kB!r-V2+#-`OH{nVdbeVtQzU1y(f(Z{km!k@?W)OD@bAP4e`6 zZ?okuL@lK{7Oqv8CfmK#8Ni431o6gAJ#PN%A%$X{^EQ{Uv<*?OrJkeYIxvm zt%S_-3Gr2TecI@ooJ%k|2;1;E$#)E!;|`L0*Kd{W(UiFw*gae(B7KYZBW1~Xo{2@3 zNV@K;>cVpP0erc)4LQ@=UJmBkCYKKo_)K=vJ34_ot^`AIuY67N`CwSabE?tb^e4uM z${FBjl^C#!O3Esl!xdAH>9T)>?Gql#zpE3H3e>>BG#)&AIzmeRz+BFn^{3R0e~SP- zTV>Jw)$|`Q26*Ltm(SMTT2tjsr4K&#?*37Sp6Cl(W79GK3O}r%pdh7XdKzb$+|`A4 zdU^^7lFB(#9;2yEKpq8eL8RgQ+dD)noor6~MCZO23&>o;=$Q*-WKz(Fez{6jS ztP=a}X(?iouZe9^vBPdE(HXCPh#2q#j1>DYjqG+AKh+v!CT)wNU|GVrRJBC(Juw{K z{S}Z>yvKqdX?7@c;aG=&b5dY>D9wC3T|nzBJ*`|oIOOZW5<%cBW7Lm%Nhj;aUPuzJ zjSinLBW&ghb27Q2N*2oFf0O7Po*0z?fKM^UJW!PA{yvtVCmNT94*jiG3bl_!&~}*j zXLyAK4>Nh2UkK^Q(rW>Cy)m?rO?ECVwCMp=4}V~GL!)hb=l-$lS`JG*Atp(cw#2p?)kcC0cl)SNrBbk)Y*sq^Nw3U|uf4v86sXU&*t>Lw>7x z6uDdb_fty=+-OQyVlSysdwFX&;0N~BcTp#J?_vLq0+Buw8^O)MENI~oj(Z_O zlF+nu5R`iXJB=k6$W^x(`~YVXI*%@K`k;pLtdGhCe_pOY1P4@HlrXtxsotHzfowI= z`AN}dvA<^2oot;>BY3dK1E$`^p9(ii!_do$XA;)u`U9xtW`Prue*fYN&L5V&#&?Q& zbtZ5OCbCz@xNGQeW5s*((4|d_?PV{ z6>7}o0^!6r`yTo!q)L=*fK_DKv6t05T8DHeH9dbUleQbt)f;Q{tRCzo(KXYVjvJeJ z6AeZ+8{HB{HLIOOe6-ewRi1vKmCF|O+jh?(O8F;H7@U67ZlK6*S1uhX?Q z|B={Rf&Qt4r@-9kY?k2NfKc}=MO2-ISwQ?I_RrzV>0+K!Kx9>nW`3a9!q?|Yl%>+2 z+T09BqL-Oo$9nHPm46*b6RWTrufp*ZEe!;#E)x?=KLW;#x!~QYd%lw9ey9R9n$F)1 z!`fCHrBm00czta+yjW1Kef4L^)k**6YpEk)^q;Z`^lu&N_0>q#aj=4IK@>kXI3X({qD$0^xq7UX0WYnLGQrlpiG_y+UHY#Z80=By+FoX$kLarb9uZ?K%szJm~v z5dU0}Ze65mS#xHxnkk1OIgqLnJZ#!7Z1?Xdu6eQ*)8J@j1pN{xm4#_?s>%`RJ4c{B zCL1oO?HLO=CRDUeQ?g0kzEdc)3HMyV_VqmhBW^|(Ux>yCXuS4#HQF`M;U9ddz2;x2 zj$eRSmeTesWM@ZHlJRd|L9UgW%_5@~9#|9uf=bMc`Lb>l4vQUtQN1TfB1zaqli{Kr zFc&-a31uq$p~oje0bqQ5@p{SGA9lUx&`VzIG{kuX1eFQ3$^k&dbEt-6=q5-uKp*g> zB_(VTLEY=1Fm5@Hu4^EoFWSc_Cdq0GaAezN4JdhnuZP(V&f4Dck~(Lz;>P-_@S|VJ zTrGLFKnViYEPs13RUDdfWc`I3O?k&H!rGc_`{cWhSZ)KHWInoUE;NONUku{cKcxg~ zuH~!5h=(e7Zd6lAb0AfDF+}#=+ix^a9l-vbe#ciYzI-6h)_PuXx>x!2*!7?4Z z4nKc#Rohe+HF)~m7UnisIpNpQ2X1)wE8eFts?fo~f6OK+9ef@fg)XHgdZz|2a#0NONrRb?eXBqX&aYYN~CIo7e%BO9(3Qzym63dRUV zWvD|0Q{iz0d1>7B`+_CaNVP5iyz|vnsdsUmJ+Va1#q(OC;K4jW%MwH~G`}QMg?suf zI9CbS?71Np|K`E1@Zi>{T2%d97G3rtBS63a% z->6XtK!HFY{jR8(n7mIuqSM#Ck0(sQ%BGqztt+JDB#Q*9if`x%f0_~DmNP)ho;x)z z5n(vQWT|`$lt77uL@S~!l-&{QX)$S{4L7M2Z>}$1ZsM>}e>Kry=&-QOE zhH?PdYxDI#qCNUEn$!Jw?Sbl4T9r;&7{9dmaHQ(#vOD!glB)HP%5?j3mrfuj?1C=s z$C1$}!WEyI?oP}MPT_xY3OjR3G%mX^nWPy_YDydZmY(hTi^&}FsoyfrOgRcze|A#y z+MUnZFGee1^YB^efJd9XZh{S@{;+YsO6nn4BO%sW?|ZTcm(GSJu3m6P!7xOKGM$onPs{)cfoypCJdF3Y8+?F4;^ zQe0bO+?+N`gRTfrHE;nB@@)J4RYQ+gQ7u`zTZ(J6&fxni52?8YYXN0l?U;?Y7Qg`gJJ z>WlzA4Vzu=XK{CDKuZoy~Fl6Zr6{p#Ve!;Y$z zI7}}-TV>!?inTs2h*)lEh#N~^ax7yyUI2^Rads6-2j*VFu11AyJ@+|<^K#sJtnIdj zUbLXKj}3*e*Lptu;6{0MRwxSOKQ4yIl87mOS0QC}D0~I7WVtx_Bx@#*-57~QQ0Wsx zX{}O_`@j|%DIRVsGMrFLJ_(z!9c{Pxd9t@jUP`;GrPwwwX5#yT0Z3u}35~aySH&s& zP^2X}m{icn>oj9G4JD+1Xz!PmG)HX99xA$T#Fignx6Lv38E}hFQDmtEg&VVu==&n@ z{{XBZDn0ldx zZebc4R(w@5=s~Gf+#G+&U-QL^29n~!58Tqd3E`-+lZG0|%;K;@*QL=foL#~+UckQE z)`uf9W6yO6t)H2n2BUNH8J|vw$V01!=O)P4ofqBX)mXzlDp`g<)mZEGD_R)p!}U^& zQo2w)5XHBSO~hY;YEX^_ef$Zv@vVTyAg)eGCET0E@>KCHIX@#B|I&`r{Q7+-P>=nq zp=9%TQCk&G=lv#kmjMP^^`WGZ=~Op8XZQ=c_`kP-%8SXT-~2#=A|$c)O=nr7jY~D% zkN5AGZplOP6V!dZRKO{}NeJmN>olt_O4uAX_sWJi&5Ucvt&aOr2ATpr9sxqCSqz7S z)}WlCpta+^owH)`%*^%mckWQAZoR%kNk#G}l*#h{Cu$o!-WmIGnYkCq7uUQZ{v31c zT4>4;p>!^_vHO$d7CLbcM=`(!U!F%~zZ;jzvyPc`4xP1mA#6@m=x-MIl7O)8dqCD# zsijw-;gQHk_>ZQ|0|(Sna@cIN{3%Dy5n1wAu!0$y1m;doaRW{hzl*^r^Ej)ZsU5g` zD;~_#Ml5s{wd}K2Z*;lrTUMKJUPwccc~YThQu-R8vNi`KdXGk45r8O56hrTLSv%rv zEavF09^QXMneswY?BmtL@7k4-#%OZh69Gt@0FDc`2z}-xQ&7jBKUF1(d?XNc_m+=9 z-IFaMVh*mQ9J&6eU|m&9{cYICkAFN{-y|^B;W$b>qoT4hHI)ED46T);?4;2#C6obe z^6({fmi{!Q24Y1)fo?NR&&iUX34;HbfszHaRM62C@Gf8&RYo!;mo3VRUmnlu(rESxX%%nu-a zB#o6&scTz1jxMFMX)*Dc_)&TkTC^TIQP$F;8S%k?QQseccQvY}@DEs5>q>EoV7!g( zlcp!cDZMH#M`wE;@vSP~s5&L2e=O8XCif~T|VSQ}(B&Oh@Zb&+m^!83OIg?zq zT_pkPWIu|yh|Q-vK7)yNf{K#w?-%o+7>(e?f#_|1bCKqWw6%7H2ag3y9q8dR+RYly zcA)9|kQoi*P0OZjzrD+aN6qy`m-p%kQ?|3lu0A>JeE3#cY1Z`|7g5h#DE@Hc{;rRo z05+?n|C169)P5|NbkAmaa?hz(9ZkEw;Nt3psy_Brnx6A65-7v@q-HGcUsYDd8H3wW$iWs@tzRxWuzrG%K0M_Cn%`;H`#tZ$vHzZalexZ)9>HgIoBy`(tj;^l^F+z@rzyEDQ@^<^@L(>?ufBn zMq9MiVIn9W;l(*|Gl9XrUlG|1JbviG@*>9c!?^x&4T$(PTy2yAn|RgD&$0A4BFJ5b z+%}%-;K*Zo#*y`^w5o==+1Zqd3mNFnxf=qL&J7uoDS1`JdGs=DSFB>OuLaq)srPxB zBrqc@y3_lXba1FIlMp$oQqHfT^6+!d<9%I591rX-oobpMiR*7#&oDn`#-eKVVZubfz84k)fR@Bs6Not zG+S<(KyQlAZ$0lZ`CJ_nBPc4WpDVil#xJ&S@T-&Er~+FhXq=XDLzUk=2`eo)L0>3ppx%dohqd(iOvYWfj zzJihpD?gK~Wxk10gPc(IB?&n_!N)%~t5=Y(f0))(-AeaZMFp|hx9Rsd+S!gugL{*$ zGX}OtQmYp>3CjKd(NRAD=}+9DL(gEJj6+;*6Zs3T52p~;3>>wmT)WjHK%gGA>ol5Xi$X=U+Oy@#oDViBH5~G7950uO?IeB@nNd)3;d}-uq7macr-=s-P`=ruO=HAOf5ql+T3ci9< z>GFS{Mg)z2p&~$GugurjTNBu8PJ=t&l}0B4d~S=D^&=_wHwI{++_lA9R?jEqc2tv5 zN`sh(zj7IFR^`OFzJB2vLJ+=x3kNXp6oQlS8f3d^9m3!GHIiz-+plp_xsSXO8%9mO zda0S*2Id>vwt0dMjJVMfS(W_nk57;7lpBwJuG5Hzx3M`deC9B@9}0e(VG{h%jQQ@k z+}DpsfM@n>DYC7%naB3{##Wsm_JC4xE+GL3_X@$Cn`Q1fOIsJAKXzslq&ALky|KHD zQ+KKub-B~VJgaPv58bikSgSIeKe{fo=_E}|V{C01HXJ{lO-?g?wPU`TnQZOm4xtsQ zznD}%8q+oL=n79W5&hR=URJYqY+=`3uU3p-Cf-kvcx7^L%@q>VTJ8An7sjqnf4Z7I zUKt8ZzrDHG>y{AbK^CV#H0&bn_mBk+7@A2`gEasH6qRpw&_UgYf@!}rk=^RjUrsLP(r2MBJ3JA$g({eO zF~xL4H;|*usQ-+r4EN7)Il59E;%2#vA!8|HOp*5M8QWGq*xgRW8;-7|w}xGNT0c*> zNVxk2{=y77YqmN-7i1(&bNba*IvesjO_XQt6LySj09j(sCnTVoHACv$!sS5iAb#{*&YVTVP?sFGa$f)>0&JR z6kPsUwOvizOFCsR;Aa5(?O6;QGVw;|H<2d}a}5u+MTs^U)hUeCT|5nBXAV=MZ&!Ri z{xvuh+C4hzMbR4F3|dADPWvQEr6Q9}9@%ZF#>Ek#si0sG3#&kL9H6`vhQR zjw;=@ozwP9fa8aC>FJ*n_|)z7Vyc(y@E^cuRs_TXe|Ym%7|s6d1a48S!8+13&MPK< z(%L($P~_g)-!E}aXkQ$KEcK~D5Dj7Bl>F4YXx_wrMw0DzF@JWjNHg>DKoZTkfupK0 zepp)8{VFpH_Lu(m$bJSjBNMvbsQ13GD&;MN2)E(oD(7x+cVhCWUpQANiS0k0bqfcS zB4HR2DTnBDUHuTqh)Rw9Rb^X!G(I3YTpNu2l-$H;iqiFcie?)0>EDN@d21+vD~G0! zcart{_nWM=od!Gp@0`D=1+WD5xUDLB%;M4=#aer_)$&>VJqi_!WbQikdgQ3s5a#;W=Zb8C>l@{5(z7e*|C$_2hp94= zQHP?_g{#^gKaNwz%-{1wN^gzRw-OIa0$|}w*O-v)+~Y@3riRWrT=66pQT%8N95vP^ zBV)QVnoCgER3rQ?HpMiwp!3Z8^3UY_!n@-=;^{mbH4k0D&TC}8;q9D!Tk0m(i*WVb zK18&6-zl$MaW{Tsi4|f;KJo~xMqb=4yk$4)J=Uv5PQ^Ws8xotrmD$N%-@Ld8)HWk21PCzn}EubSs@n?sc|ZcXfhz~!KsJYFbRRkMl%_W zuWAvUYmd{5d{pmDj z>hjLrfFOB`OD>>#mHauF-j*3>B?d$GQx(r>1mVCe8U&-IFhJITXfP}D2PVXDdTw;t zEK<^&9KZey+*8Z{sP5?r@RyWz(!RjGtXk!rO(MTu{Y8ihL&@a-)b};dAN5VJ$|@%{ zfl&%y%QjS#V$W#9iI@28s(I@=Y2}IClc`tskAAT`uPaKzUYqNQkE1v6I_RFcP(0+f zHN`mfa(F21B$oZ_&;eWiHY2>Cwnm!sI%-{Qg`aAg4K%TTB0txKaTg&Q_$|RjH=sR< z&3SwLB?db|ueQ6FT#fkEo$8%|cP|N>zoiF7%s4Xh3|w5lKYJ1u#y!-F9-^M5 z0&7lRc7N-Zz_4>=yx@r=LhH9%D~yl42%S)I?&Wa6nSM3%o1mfC@WE3t>1=9@LGSOl;gU4g4ms&-enFFB1^3LLPxxqW`O6qCoxEdl)u(C>zf%LDg#J z7<1=``-6*ItdBNa85sBRGYsz$xjX`XxYqMA{ydpjo56Ld*Q+KAQ{_h>)ia{|ZMe6x->s4FhPl`t~g|F@ZxU=N7|7}V? zE~~Spf(=xfexI~f%fJ*?%jrQlQriFCVRoA^@->hUYj1VYK9w3}((-#vCM>}JRm$T7 z*49g6_!NoR`>BDUm#8$9`{o~l7^a?qpy4m(yV6Zc{`EqD;>!pYhTykIUo>~YHFAg9 z<=?=HiL+wTKd7Q|i%0JUH9V)9sG)Wr6x*MpSs5|I#Dl0_)9zC%nSe^OV5!YGn6w(Sza{XdJ-P)Q~?-=7B3&XUJOi+;4Y_(wMnLWt>|m)X=zxW$Q3Z4tS` zomAE-2($hPkGul9=aS=4(Ejtqau)#y=8y@KX2dE0S^iuGnbavjz#mKJZ=0okJkd}2 zFTv}gG3{Q$S4!e#fRjQC+GeH8air`Y&9^khpPoh}RYog>$!i!}TZ;wJ=T-37B0i{g z?y}NL(5nuSUf@~Cw@XYVVtsbIZ_DvNypntKul!X$p{Mb?p>f~pZ%pbnC=trAjHD6P z`z<%&zJFgw>mf>r5$LkPJ8`U_0{w#l_wcLx*W!RvnR4}=OD={VQMe&Q`n~{Gc(7qE zWn}b>vmJqXA@ixyf71i4V+RZy!JT;6pnHg$0(T+8R_fc_>axYZ8?IX`h1M&_u~ QQGk~`L`9}T$~5SI05qYc=l}o! literal 129907 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

ExdvD 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

PV{luQOcV-ir)83TkS`Q*`sPK`OYx#p=IGe%D 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

wTV}*QwPn!M-6go(iewF6jljWsX>kX;AnFW) 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 { - Follow your Living Heart to find your targets. Bring them back to a  - transmutation rune to  + transmutation rune in critical  + or worse condition to  sacrifice them for  knowledge points. The Mansus{' '} ONLY accepts targets pointed to by the  Living Heart. + + - Make yourself a focus to be  + able to cast various advanced spells to assist you in acquire  + harder and harder sacrifices. + - Accomplish all of your objectives to be able to learn the{' '} final ritual. Complete the ritual @@ -304,7 +310,7 @@ export const AntagInfoHeretic = (props, context) => { const [currentTab, setTab] = useLocalState(context, 'currentTab', 0); return ( - +