From d718af991324e8a570d0a509aff996e3985c09e3 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Sun, 24 Dec 2023 23:54:11 +0100 Subject: [PATCH] [MIRROR] Bridge Assistant Station Trait [MDB IGNORE] (#25667) * Bridge Assistant Station Trait * Diffs * fixes * Update job_traits.dm --------- Co-authored-by: Fikou <23585223+Fikou@users.noreply.github.com> Co-authored-by: Giz <13398309+vinylspiders@users.noreply.github.com> Co-authored-by: Gandalf <9026500+Gandalf2k15@users.noreply.github.com> --- code/__DEFINES/atom_hud.dm | 1 + code/__DEFINES/jobs.dm | 74 +++++++------- code/__DEFINES/traits/declarations.dm | 6 ++ code/_globalvars/traits/_traits.dm | 4 + code/_onclick/hud/new_player.dm | 2 +- .../subsystem/processing/station.dm | 4 + code/datums/components/twohanded.dm | 16 +++- code/datums/components/wall_mounted.dm | 2 + code/datums/id_trim/jobs.dm | 22 +++++ code/datums/records/manifest.dm | 33 +++++++ code/datums/station_traits/_station_trait.dm | 3 +- code/datums/station_traits/job_traits.dm | 90 ++++++++++++++++-- code/datums/station_traits/neutral_traits.dm | 6 +- code/game/gamemodes/dynamic/dynamic.dm | 3 + code/game/objects/items/storage/belt.dm | 20 ++++ code/modules/admin/verbs/list_exposer.dm | 7 +- code/modules/bitrunning/job.dm | 2 +- code/modules/clothing/outfits/plasmaman.dm | 7 ++ code/modules/jobs/job_types/assistant.dm | 8 +- code/modules/jobs/job_types/prisoner.dm | 2 +- .../station_trait/bridge_assistant.dm | 79 +++++++++++++++ .../job_types/station_trait/cargo_gorilla.dm | 50 ++++++++++ code/modules/mob/dead/crew_manifest.dm | 38 -------- .../modules/mob/dead/new_player/new_player.dm | 6 +- code/modules/mob/dead/observer/observer.dm | 5 +- code/modules/mob/living/silicon/silicon.dm | 5 +- .../computers/item/role_tablet_presets.dm | 12 ++- .../modules/unit_tests/station_trait_tests.dm | 2 + icons/hud/lobby/signup_button.dmi | Bin 676 -> 668 bytes icons/mob/huds/hud.dmi | Bin 9853 -> 10588 bytes icons/obj/card.dmi | Bin 23297 -> 24234 bytes .../modules/title_screen/code/new_player.dm | 6 +- tgstation.dme | 3 +- .../tgui/interfaces/common/JobToIcon.ts | 1 + 34 files changed, 400 insertions(+), 119 deletions(-) create mode 100644 code/modules/jobs/job_types/station_trait/bridge_assistant.dm create mode 100644 code/modules/jobs/job_types/station_trait/cargo_gorilla.dm delete mode 100644 code/modules/mob/dead/crew_manifest.dm diff --git a/code/__DEFINES/atom_hud.dm b/code/__DEFINES/atom_hud.dm index 7a1ca9705ac..180bb317fed 100644 --- a/code/__DEFINES/atom_hud.dm +++ b/code/__DEFINES/atom_hud.dm @@ -95,6 +95,7 @@ #define SECHUD_BARTENDER "hudbartender" #define SECHUD_BITRUNNER "hudbitrunner" #define SECHUD_BOTANIST "hudbotanist" +#define SECHUD_BRIDGE_ASSISTANT "hudbridgeassistant" #define SECHUD_CAPTAIN "hudcaptain" #define SECHUD_CARGO_TECHNICIAN "hudcargotechnician" #define SECHUD_CHAPLAIN "hudchaplain" diff --git a/code/__DEFINES/jobs.dm b/code/__DEFINES/jobs.dm index 9b65e8a9c55..5de94c3fca5 100644 --- a/code/__DEFINES/jobs.dm +++ b/code/__DEFINES/jobs.dm @@ -48,6 +48,7 @@ #define JOB_RESEARCH_DIRECTOR "Research Director" #define JOB_CHIEF_ENGINEER "Chief Engineer" #define JOB_CHIEF_MEDICAL_OFFICER "Chief Medical Officer" +#define JOB_BRIDGE_ASSISTANT "Bridge Assistant" //Silicon #define JOB_AI "AI" #define JOB_CYBORG "Cyborg" @@ -146,41 +147,42 @@ #define JOB_DISPLAY_ORDER_ASSISTANT 1 #define JOB_DISPLAY_ORDER_CAPTAIN 2 #define JOB_DISPLAY_ORDER_HEAD_OF_PERSONNEL 3 -#define JOB_DISPLAY_ORDER_BARTENDER 4 -#define JOB_DISPLAY_ORDER_BOTANIST 5 -#define JOB_DISPLAY_ORDER_COOK 6 -#define JOB_DISPLAY_ORDER_JANITOR 7 -#define JOB_DISPLAY_ORDER_CLOWN 8 -#define JOB_DISPLAY_ORDER_MIME 9 -#define JOB_DISPLAY_ORDER_CURATOR 10 -#define JOB_DISPLAY_ORDER_LAWYER 11 -#define JOB_DISPLAY_ORDER_CHAPLAIN 12 -#define JOB_DISPLAY_ORDER_PSYCHOLOGIST 13 -#define JOB_DISPLAY_ORDER_AI 14 -#define JOB_DISPLAY_ORDER_CYBORG 15 -#define JOB_DISPLAY_ORDER_CHIEF_ENGINEER 16 -#define JOB_DISPLAY_ORDER_STATION_ENGINEER 17 -#define JOB_DISPLAY_ORDER_ATMOSPHERIC_TECHNICIAN 18 -#define JOB_DISPLAY_ORDER_QUARTERMASTER 19 -#define JOB_DISPLAY_ORDER_CARGO_TECHNICIAN 20 -#define JOB_DISPLAY_ORDER_SHAFT_MINER 21 -#define JOB_DISPLAY_ORDER_BITRUNNER 22 -#define JOB_DISPLAY_ORDER_CARGO_GORILLA 23 -#define JOB_DISPLAY_ORDER_CHIEF_MEDICAL_OFFICER 24 -#define JOB_DISPLAY_ORDER_MEDICAL_DOCTOR 25 -#define JOB_DISPLAY_ORDER_PARAMEDIC 26 -#define JOB_DISPLAY_ORDER_CHEMIST 27 -#define JOB_DISPLAY_ORDER_VIROLOGIST 28 -#define JOB_DISPLAY_ORDER_CORONER 29 -#define JOB_DISPLAY_ORDER_RESEARCH_DIRECTOR 30 -#define JOB_DISPLAY_ORDER_SCIENTIST 31 -#define JOB_DISPLAY_ORDER_ROBOTICIST 32 -#define JOB_DISPLAY_ORDER_GENETICIST 33 -#define JOB_DISPLAY_ORDER_HEAD_OF_SECURITY 34 -#define JOB_DISPLAY_ORDER_WARDEN 35 -#define JOB_DISPLAY_ORDER_DETECTIVE 36 -#define JOB_DISPLAY_ORDER_SECURITY_OFFICER 37 -#define JOB_DISPLAY_ORDER_PRISONER 38 +#define JOB_DISPLAY_ORDER_BRIDGE_ASSISTANT 4 +#define JOB_DISPLAY_ORDER_BARTENDER 5 +#define JOB_DISPLAY_ORDER_BOTANIST 6 +#define JOB_DISPLAY_ORDER_COOK 7 +#define JOB_DISPLAY_ORDER_JANITOR 8 +#define JOB_DISPLAY_ORDER_CLOWN 9 +#define JOB_DISPLAY_ORDER_MIME 10 +#define JOB_DISPLAY_ORDER_CURATOR 11 +#define JOB_DISPLAY_ORDER_LAWYER 12 +#define JOB_DISPLAY_ORDER_CHAPLAIN 13 +#define JOB_DISPLAY_ORDER_PSYCHOLOGIST 14 +#define JOB_DISPLAY_ORDER_AI 15 +#define JOB_DISPLAY_ORDER_CYBORG 16 +#define JOB_DISPLAY_ORDER_CHIEF_ENGINEER 17 +#define JOB_DISPLAY_ORDER_STATION_ENGINEER 18 +#define JOB_DISPLAY_ORDER_ATMOSPHERIC_TECHNICIAN 19 +#define JOB_DISPLAY_ORDER_QUARTERMASTER 20 +#define JOB_DISPLAY_ORDER_CARGO_TECHNICIAN 21 +#define JOB_DISPLAY_ORDER_SHAFT_MINER 22 +#define JOB_DISPLAY_ORDER_BITRUNNER 23 +#define JOB_DISPLAY_ORDER_CARGO_GORILLA 24 +#define JOB_DISPLAY_ORDER_CHIEF_MEDICAL_OFFICER 25 +#define JOB_DISPLAY_ORDER_MEDICAL_DOCTOR 26 +#define JOB_DISPLAY_ORDER_PARAMEDIC 27 +#define JOB_DISPLAY_ORDER_CHEMIST 28 +#define JOB_DISPLAY_ORDER_VIROLOGIST 29 +#define JOB_DISPLAY_ORDER_CORONER 30 +#define JOB_DISPLAY_ORDER_RESEARCH_DIRECTOR 31 +#define JOB_DISPLAY_ORDER_SCIENTIST 32 +#define JOB_DISPLAY_ORDER_ROBOTICIST 33 +#define JOB_DISPLAY_ORDER_GENETICIST 34 +#define JOB_DISPLAY_ORDER_HEAD_OF_SECURITY 35 +#define JOB_DISPLAY_ORDER_WARDEN 36 +#define JOB_DISPLAY_ORDER_DETECTIVE 37 +#define JOB_DISPLAY_ORDER_SECURITY_OFFICER 38 +#define JOB_DISPLAY_ORDER_PRISONER 39 #define JOB_DISPLAY_ORDER_SECURITY_MEDIC 100 //SKYRAT EDIT ADDITON #define JOB_DISPLAY_ORDER_CORRECTIONS_OFFICER 101 //SKYRAT EDIT ADDITON #define JOB_DISPLAY_ORDER_NANOTRASEN_CONSULTANT 102 //SKYRAT EDIT ADDITON @@ -245,6 +247,8 @@ /// Combination flag for jobs which are considered regular crew members of the station. #define STATION_JOB_FLAGS (JOB_ANNOUNCE_ARRIVAL|JOB_CREW_MANIFEST|JOB_EQUIP_RANK|JOB_CREW_MEMBER|JOB_NEW_PLAYER_JOINABLE|JOB_REOPEN_ON_ROUNDSTART_LOSS|JOB_ASSIGN_QUIRKS|JOB_CAN_BE_INTERN) +/// Combination flag for jobs which should be there for every station trait job. +#define STATION_TRAIT_JOB_FLAGS (JOB_CANNOT_OPEN_SLOTS|JOB_HIDE_WHEN_EMPTY|JOB_LATEJOIN_ONLY&~JOB_REOPEN_ON_ROUNDSTART_LOSS) #define FACTION_NONE "None" #define FACTION_STATION "Station" diff --git a/code/__DEFINES/traits/declarations.dm b/code/__DEFINES/traits/declarations.dm index 60366b69a12..b0ca10a8d88 100644 --- a/code/__DEFINES/traits/declarations.dm +++ b/code/__DEFINES/traits/declarations.dm @@ -489,6 +489,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// Is the mob standing on an elevated surface? This prevents them from dropping down if not elevated first. #define TRAIT_ON_ELEVATED_SURFACE "on_elevated_surface" +// Prevents you from twohanding weapons. +#define TRAIT_NO_TWOHANDING "no_twohanding" + // METABOLISMS // Various jobs on the station have historically had better reactions // to various drinks and foodstuffs. Security liking donuts is a classic @@ -817,6 +820,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai /// Similar trait given to temporary bodies inhabited by players #define TRAIT_TEMPORARY_BODY "temporary_body" +/// Trait given to objects with the wallmounted component +#define TRAIT_WALLMOUNTED "wallmounted" + /// Trait given to mechs that can have orebox functionality on movement #define TRAIT_OREBOX_FUNCTIONAL "orebox_functional" diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index 4cb5a3b8e79..1b543c0352c 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -98,6 +98,9 @@ GLOBAL_LIST_INIT(traits_by_type, list( /datum/wound = list( "TRAIT_WOUND_SCANNED" = TRAIT_WOUND_SCANNED, ), + /obj = list( + "TRAIT_WALLMOUNTED" = TRAIT_WALLMOUNTED, + ), /mob = list( "TRAIT_ABDUCTOR_SCIENTIST_TRAINING" = TRAIT_ABDUCTOR_SCIENTIST_TRAINING, "TRAIT_ABDUCTOR_TRAINING" = TRAIT_ABDUCTOR_TRAINING, @@ -305,6 +308,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_NO_SOUL" = TRAIT_NO_SOUL, "TRAIT_NO_STRIP" = TRAIT_NO_STRIP, "TRAIT_NO_TRANSFORM" = TRAIT_NO_TRANSFORM, + "TRAIT_NO_TWOHANDING" = TRAIT_NO_TWOHANDING, "TRAIT_NOCRITDAMAGE" = TRAIT_NOCRITDAMAGE, "TRAIT_NO_UNDERWEAR" = TRAIT_NO_UNDERWEAR, "TRAIT_NO_ZOMBIFY" = TRAIT_NO_ZOMBIFY, diff --git a/code/_onclick/hud/new_player.dm b/code/_onclick/hud/new_player.dm index 6edd9c65d2a..a51b61cd396 100644 --- a/code/_onclick/hud/new_player.dm +++ b/code/_onclick/hud/new_player.dm @@ -40,7 +40,7 @@ var/y_offset = 397 var/y_button_offset = 27 for (var/datum/station_trait/trait as anything in GLOB.lobby_station_traits) - if (!trait.can_display_lobby_button()) + if (!trait.can_display_lobby_button(mymob.client)) continue var/atom/movable/screen/lobby/button/sign_up/sign_up_button = new(our_hud = src) sign_up_button.SlowInit() diff --git a/code/controllers/subsystem/processing/station.dm b/code/controllers/subsystem/processing/station.dm index 731ceec42f9..5c9795b87fd 100644 --- a/code/controllers/subsystem/processing/station.dm +++ b/code/controllers/subsystem/processing/station.dm @@ -11,6 +11,10 @@ PROCESSING_SUBSYSTEM_DEF(station) var/list/selectable_traits_by_types = list(STATION_TRAIT_POSITIVE = list(), STATION_TRAIT_NEUTRAL = list(), STATION_TRAIT_NEGATIVE = list()) ///Currently active announcer. Starts as a type but gets initialized after traits are selected var/datum/centcom_announcer/announcer = /datum/centcom_announcer/default + ///A list of trait roles that should be protected from antag + var/list/antag_protected_roles = list() + ///A list of trait roles that should never be able to roll antag + var/list/antag_restricted_roles = list() /datum/controller/subsystem/processing/station/Initialize() diff --git a/code/datums/components/twohanded.dm b/code/datums/components/twohanded.dm index 37df7308217..89db2d27c83 100644 --- a/code/datums/components/twohanded.dm +++ b/code/datums/components/twohanded.dm @@ -173,17 +173,25 @@ /datum/component/two_handed/proc/wield(mob/living/carbon/user) if(wielded) return + var/atom/atom_parent = parent + if(HAS_TRAIT(user, TRAIT_NO_TWOHANDING)) + if(require_twohands) + atom_parent.balloon_alert(user, "too weak to wield!") + user.dropItemToGround(parent, force = TRUE) + else + atom_parent.balloon_alert(user, "too weak to wield with both hands!") + return if(user.get_inactive_held_item()) if(require_twohands) - to_chat(user, span_notice("[parent] is too cumbersome to carry in one hand!")) - user.dropItemToGround(parent, force=TRUE) + atom_parent.balloon_alert(user, "can't carry in one hand!") + user.dropItemToGround(parent, force = TRUE) else - to_chat(user, span_warning("You need your other hand to be empty!")) + atom_parent.balloon_alert(user, "holding something in other hand!") return if(user.usable_hands < 2) if(require_twohands) user.dropItemToGround(parent, force=TRUE) - to_chat(user, span_warning("You don't have enough intact hands.")) + atom_parent.balloon_alert(user, "not enough hands!") return // wield update status diff --git a/code/datums/components/wall_mounted.dm b/code/datums/components/wall_mounted.dm index 8d1722f89fe..00482592f2b 100644 --- a/code/datums/components/wall_mounted.dm +++ b/code/datums/components/wall_mounted.dm @@ -16,12 +16,14 @@ on_drop = on_drop_callback /datum/component/wall_mounted/RegisterWithParent() + ADD_TRAIT(parent, TRAIT_WALLMOUNTED, REF(src)) RegisterSignal(hanging_wall_turf, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) RegisterSignal(hanging_wall_turf, COMSIG_TURF_CHANGE, PROC_REF(on_turf_changing)) RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(drop_wallmount)) RegisterSignal(parent, COMSIG_QDELETING, PROC_REF(on_linked_destroyed)) /datum/component/wall_mounted/UnregisterFromParent() + REMOVE_TRAIT(parent, TRAIT_WALLMOUNTED, REF(src)) UnregisterSignal(hanging_wall_turf, list(COMSIG_ATOM_EXAMINE, COMSIG_TURF_CHANGE)) UnregisterSignal(parent, list(COMSIG_QDELETING, COMSIG_MOVABLE_MOVED)) hanging_wall_turf = null diff --git a/code/datums/id_trim/jobs.dm b/code/datums/id_trim/jobs.dm index 72a23adf768..ea46cc91319 100644 --- a/code/datums/id_trim/jobs.dm +++ b/code/datums/id_trim/jobs.dm @@ -203,6 +203,28 @@ ) job = /datum/job/botanist +/datum/id_trim/job/bridge_assistant + assignment = "Bridge Assistant" + trim_state = "trim_assistant" + department_color = COLOR_COMMAND_BLUE + subdepartment_color = COLOR_COMMAND_BLUE + sechud_icon_state = SECHUD_BRIDGE_ASSISTANT + minimal_access = list( + ACCESS_COMMAND, + ACCESS_EVA, + ACCESS_GATEWAY, + ACCESS_MAINT_TUNNELS, + ACCESS_RC_ANNOUNCE, + ACCESS_TELEPORTER, + ACCESS_WEAPONS, + ) + extra_access = list() + template_access = list( + ACCESS_CAPTAIN, + ACCESS_CHANGE_IDS, + ) + job = /datum/job/bridge_assistant + /datum/id_trim/job/captain assignment = "Captain" intern_alt_name = "Captain-in-Training" diff --git a/code/datums/records/manifest.dm b/code/datums/records/manifest.dm index 7b43b7644ef..4ab24ee69c9 100644 --- a/code/datums/records/manifest.dm +++ b/code/datums/records/manifest.dm @@ -174,3 +174,36 @@ GLOBAL_DATUM_INIT(manifest, /datum/manifest, new) target.rank = assignment target.trim = trim + +/datum/manifest/ui_state(mob/user) + return GLOB.always_state + +/datum/manifest/ui_status(mob/user, datum/ui_state/state) + return (isnewplayer(user) || isobserver(user) || isAI(user) || ispAI(user) || user.client?.holder) ? UI_INTERACTIVE : UI_CLOSE + +/datum/manifest/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if (!ui) + ui = new(user, src, "CrewManifest") + ui.open() + +/datum/manifest/ui_data(mob/user) + var/list/positions = list() + for(var/datum/job_department/department as anything in SSjob.joinable_departments) + var/open = 0 + var/list/exceptions = list() + for(var/datum/job/job as anything in department.department_jobs) + if(job.total_positions == -1) + exceptions += job.title + continue + var/open_slots = job.total_positions - job.current_positions + if(open_slots < 1) + continue + open += open_slots + positions[department.department_name] = list("exceptions" = exceptions, "open" = open) + + return list( + "manifest" = get_manifest(), + "positions" = positions + ) + diff --git a/code/datums/station_traits/_station_trait.dm b/code/datums/station_traits/_station_trait.dm index 0ef8a631392..54a711aaba6 100644 --- a/code/datums/station_traits/_station_trait.dm +++ b/code/datums/station_traits/_station_trait.dm @@ -83,7 +83,7 @@ GLOBAL_LIST_EMPTY(lobby_station_traits) return /// Return TRUE if we want to show a lobby button, by default we assume we don't want it after the round begins -/datum/station_trait/proc/can_display_lobby_button() +/datum/station_trait/proc/can_display_lobby_button(client/player) return sign_up_button && !SSticker.HasRoundStarted() /* SKYRAT EDIT REMOVAL @@ -127,4 +127,3 @@ GLOBAL_LIST_EMPTY(lobby_station_traits) var/datum/hud/using_hud = hud_owner.hud_used using_hud?.show_hud(using_hud?.hud_version) lobby_buttons = list() - diff --git a/code/datums/station_traits/job_traits.dm b/code/datums/station_traits/job_traits.dm index fc176aa0415..4d6de5e6951 100644 --- a/code/datums/station_traits/job_traits.dm +++ b/code/datums/station_traits/job_traits.dm @@ -1,3 +1,7 @@ +#define CAN_ROLL_ALWAYS 1 //always can roll for antag +#define CAN_ROLL_PROTECTED 2 //can roll if config lets protected roles roll +#define CAN_ROLL_NEVER 3 //never roll antag + /** * A station trait which enables a temporary job * Generally speaking these should always all be mutually exclusive, don't have too many at once @@ -7,16 +11,24 @@ abstract_type = /datum/station_trait/job /// What tooltip to show on the button var/button_desc = "Sign up to gain some kind of unusual job, not available in most rounds." + /// Can this job roll antag? + var/can_roll_antag = CAN_ROLL_ALWAYS + /// How many positions to spawn? + var/position_amount = 1 /// Type of job to enable - var/job_to_add = /datum/job/clown + var/datum/job/job_to_add = /datum/job/clown /// Who signed up to this in the lobby var/list/lobby_candidates /datum/station_trait/job/New() . = ..() + switch(can_roll_antag) + if(CAN_ROLL_PROTECTED) + SSstation.antag_protected_roles += job_to_add::title + if(CAN_ROLL_NEVER) + SSstation.antag_restricted_roles += job_to_add::title blacklist += subtypesof(/datum/station_trait/job) - type // All but ourselves RegisterSignal(SSdcs, COMSIG_GLOB_PRE_JOBS_ASSIGNED, PROC_REF(pre_jobs_assigned)) - /* SKYRAT EDIT REMOVAL /datum/station_trait/job/setup_lobby_button(atom/movable/screen/lobby/button/sign_up/lobby_button) RegisterSignal(lobby_button, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(on_lobby_button_update_overlays)) @@ -40,7 +52,6 @@ SIGNAL_HANDLER overlays += LAZYFIND(lobby_candidates, lobby_button.get_mob()) ? "tick" : "cross" */ - /// Called before we start assigning roles, assign ours first /datum/station_trait/job/proc/pre_jobs_assigned() SIGNAL_HANDLER @@ -52,16 +63,19 @@ if (!LAZYLEN(lobby_candidates)) on_failed_assignment() return // Nobody signed up :( - var/mob/dead/new_player/picked_player = pick(lobby_candidates) - picked_player.mind.assigned_role = new job_to_add() + for(var/_ in 1 to position_amount) + var/mob/dead/new_player/picked_player = pick_n_take(lobby_candidates) + picked_player.mind.assigned_role = new job_to_add() lobby_candidates = null /// Called if we didn't assign a role before the round began, we add it to the latejoin menu instead /datum/station_trait/job/proc/on_failed_assignment() - var/datum/job/our_job = job_to_add - our_job = SSjob.GetJob(our_job::title) - our_job.total_positions++ + var/datum/job/our_job = SSjob.GetJob(job_to_add::title) + our_job.total_positions = position_amount +/datum/station_trait/job/can_display_lobby_button(client/player) + var/datum/job/our_job = SSjob.GetJob(job_to_add::title) + return our_job.player_old_enough(player) && ..() /// Adds a gorilla to the cargo department, replacing the sloth and the mech /datum/station_trait/job/cargorilla @@ -69,6 +83,7 @@ button_desc = "Sign up to become the Cargo Gorilla, a peaceful shepherd of boxes." weight = 1 show_in_report = FALSE // Selective attention test. Did you spot the gorilla? + can_roll_antag = CAN_ROLL_NEVER job_to_add = /datum/job/cargo_gorilla /datum/station_trait/job/cargorilla/New() @@ -80,7 +95,6 @@ . = ..() overlays += LAZYFIND(lobby_candidates, lobby_button.get_mob()) ? "gorilla_on" : "gorilla_off" */ - /// Remove the cargo equipment and personnel that are being replaced by a gorilla. /datum/station_trait/job/cargorilla/proc/replace_cargo(datum/source) SIGNAL_HANDLER @@ -96,3 +110,61 @@ // monkey carries the crates, the age of robot is over if(GLOB.cargo_ripley) qdel(GLOB.cargo_ripley) + +/datum/station_trait/job/bridge_assistant + name = "Bridge Assistant" + button_desc = "Sign up to become the Bridge Assistant and watch over the Bridge." + weight = 2 + report_message = "We have installed a Bridge Assistant on your station." + show_in_report = TRUE + can_roll_antag = CAN_ROLL_PROTECTED + job_to_add = /datum/job/bridge_assistant + +/datum/station_trait/job/bridge_assistant/New() + . = ..() + RegisterSignal(SSatoms, COMSIG_SUBSYSTEM_POST_INITIALIZE, PROC_REF(add_coffeemaker)) +/* SKYRAT EDIT REMOVAL +/datum/station_trait/job/bridge_assistant/on_lobby_button_update_overlays(atom/movable/screen/lobby/button/sign_up/lobby_button, list/overlays) + . = ..() + overlays += "bridge_assistant" +*/ +/// Creates a coffeemaker in the bridge, if we don't have one yet. +/datum/station_trait/job/bridge_assistant/proc/add_coffeemaker(datum/source) + SIGNAL_HANDLER + var/area/bridge = GLOB.areas_by_type[/area/station/command/bridge] + if(isnull(bridge)) //no bridge, what will he assist? + return + var/list/possible_coffeemaker_positions = list(/area/station/command/bridge, /area/station/command/meeting_room) + var/list/coffeemakers = SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/coffeemaker) + for(var/obj/machinery/coffeemaker as anything in coffeemakers) //don't spawn a coffeemaker if there is already one on the bridge + if(is_type_in_list(get_area(coffeemaker), possible_coffeemaker_positions)) + return + var/list/tables = list() + for(var/turf/area_turf as anything in bridge.get_contained_turfs()) + var/obj/structure/table/table = locate() in area_turf + if(isnull(table)) + continue + if(area_turf.is_blocked_turf(ignore_atoms = list(table))) //don't spawn a coffeemaker on a fax machine or smth + continue + tables += table + if(!length(tables)) + return + var/picked_table = pick_n_take(tables) + var/picked_turf = get_turf(picked_table) + if(length(tables)) + var/another_table = pick(tables) + for(var/obj/thing_on_table in picked_turf) //if there's paper bins or other shit on the table, get that off + if(thing_on_table == picked_table) + continue + if(HAS_TRAIT(thing_on_table, TRAIT_WALLMOUNTED) || (thing_on_table.flags_1 & ON_BORDER_1) || thing_on_table.layer < TABLE_LAYER) + continue + if(thing_on_table.invisibility || !thing_on_table.alpha || !thing_on_table.mouse_opacity) + continue + thing_on_table.forceMove(get_turf(another_table)) + new /obj/machinery/coffeemaker/impressa(picked_turf) + new /obj/item/reagent_containers/cup/coffeepot(picked_turf) + new /obj/item/storage/box/coffeepack(picked_turf) + +#undef CAN_ROLL_ALWAYS +#undef CAN_ROLL_PROTECTED +#undef CAN_ROLL_NEVER diff --git a/code/datums/station_traits/neutral_traits.dm b/code/datums/station_traits/neutral_traits.dm index 5e864738f8e..5d49155a3c1 100644 --- a/code/datums/station_traits/neutral_traits.dm +++ b/code/datums/station_traits/neutral_traits.dm @@ -2,7 +2,7 @@ name = "Bananium Shipment" trait_type = STATION_TRAIT_NEUTRAL weight = 5 - report_message = "Rumors has it that the clown planet has been sending support packages to clowns in this system" + report_message = "Rumors has it that the clown planet has been sending support packages to clowns in this system." trait_to_give = STATION_TRAIT_BANANIUM_SHIPMENTS /datum/station_trait/unnatural_atmosphere @@ -10,7 +10,7 @@ trait_type = STATION_TRAIT_NEUTRAL weight = 5 show_in_report = TRUE - report_message = "System's local planet has irregular atmospherical properties" + report_message = "System's local planet has irregular atmospherical properties." trait_to_give = STATION_TRAIT_UNNATURAL_ATMOSPHERE // This station trait modifies the atmosphere, which is too far past the time admins are able to revert it @@ -197,7 +197,7 @@ /datum/station_trait/birthday/proc/announce_birthday() - report_message = "We here at Nanotrasen would all like to wish [birthday_person ? birthday_person_name : "Employee Name"] a very happy birthday" + report_message = "We here at Nanotrasen would all like to wish [birthday_person ? birthday_person_name : "Employee Name"] a very happy birthday." priority_announce("Happy birthday to [birthday_person ? birthday_person_name : "Employee Name"]! Nanotrasen wishes you a very happy [birthday_person ? thtotext(birthday_person.age + 1) : "255th"] birthday.") if(birthday_person) playsound(birthday_person, 'sound/items/party_horn.ogg', 50) diff --git a/code/game/gamemodes/dynamic/dynamic.dm b/code/game/gamemodes/dynamic/dynamic.dm index 71d1ff1287e..04cb808931b 100644 --- a/code/game/gamemodes/dynamic/dynamic.dm +++ b/code/game/gamemodes/dynamic/dynamic.dm @@ -821,6 +821,9 @@ GLOBAL_LIST_EMPTY(dynamic_forced_rulesets) stack_trace("Invalid dynamic configuration variable [variable] in [ruleset.ruletype] [ruleset.name].") continue ruleset.vars[variable] = rule_conf[variable] + ruleset.restricted_roles |= SSstation.antag_restricted_roles + if(length(ruleset.protected_roles)) //if we care to protect any role, we should protect station trait roles too + ruleset.protected_roles |= SSstation.antag_protected_roles if(CONFIG_GET(flag/protect_roles_from_antagonist)) ruleset.restricted_roles |= ruleset.protected_roles if(CONFIG_GET(flag/protect_assistant_from_antagonist)) diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index a677e858f20..8ac1a726c71 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -190,6 +190,26 @@ to_preload += /obj/item/extinguisher/mini return to_preload +/obj/item/storage/belt/utility/full/inducer/PopulateContents() + SSwardrobe.provide_type(/obj/item/screwdriver, src) + SSwardrobe.provide_type(/obj/item/wrench, src) + SSwardrobe.provide_type(/obj/item/weldingtool, src) + SSwardrobe.provide_type(/obj/item/crowbar/red, src) + SSwardrobe.provide_type(/obj/item/wirecutters, src) + SSwardrobe.provide_type(/obj/item/multitool, src) + SSwardrobe.provide_type(/obj/item/inducer, src) + +/obj/item/storage/belt/utility/full/inducer/get_types_to_preload() + var/list/to_preload = list() //Yes this is a pain. Yes this is the point + to_preload += /obj/item/screwdriver + to_preload += /obj/item/wrench + to_preload += /obj/item/weldingtool + to_preload += /obj/item/crowbar + to_preload += /obj/item/wirecutters + to_preload += /obj/item/multitool + to_preload += /obj/item/inducer + return to_preload + /obj/item/storage/belt/utility/syndicate preload = FALSE diff --git a/code/modules/admin/verbs/list_exposer.dm b/code/modules/admin/verbs/list_exposer.dm index 445097e8bef..5ea2e227750 100644 --- a/code/modules/admin/verbs/list_exposer.dm +++ b/code/modules/admin/verbs/list_exposer.dm @@ -51,12 +51,7 @@ if(!SSticker.HasRoundStarted()) tgui_alert(usr, "The game hasn't started yet!") return - var/data = "Showing Crew Manifest.
| Name | Position |
|---|---|
| [entry.name] | [entry.rank][entry.rank != entry.trim ? " ([entry.trim])" : ""] |
ux#7M<`ZwwDyO5gVJN``!zWF93Da9v{%EbbqCyjtI!#C5t+;Ds zA-btZjC}!Z{Si(YF;0snoO!ag^)Mfj?e6}RD9gB!dq`ORWY(5xVpZebyWSG;hy4BA zqX3md9k;oSb``I<6k*!fDXGcxj%caLpDmMdcZgD$z>ZBbk8imN5ZzBCHP61DHztCH zn#XsPyJ(lJ=LLoa2A=dPADE9<*z0!^3yhF&Q!N9oV0CJo{lhYpiPMP*JaQg?V3|FX zNet~{5FTYykp`mA??rthQF7mOh94asN6x7?TXUXMekXei=D7Dfg>WXel;a39pbw9` zk{o0%5PlL8HR{$!r&b8r!yCUfAaC6MU zLC1!bc`U?L7yI!yysn *5GEnXLFyBEz&%xjt9OAz~yzujy< z2RVqUE8J)rUCr6cO~)|Wb7y%tc US6G=&(``SN{)*=Xm>V#deS+nK0OsDJ2IRiU3j8_AQa(Ts?294p^WT3EIuiJd^3VeVU~bcNw5gwmSVkw+Zd@$gi1^6o z=y>jM{Ybdq*{!+p37iDw668}{$iKOBESgm03i~v7u>Q{T>rY3fDIq%xSYzaE_roD* zya-7oy{~30Uf#|D>*J ?_pFP|*8knZ|R=v-)S8 zhi&tJ0i!X`Ypcm6A-ZbwS8jMas3+~^pw(`ao};Md fR)eG*FV-=#>FGD(v%!8q7jjHb%Q zrO4iMz(6N2`%K)@aVEa3=BnTJNtz(EN8Y@}J>pu~UQriFZnglHbVrsog+|NQ1%qw~ zzHxtKH6v} >t~I)?cw6*MB!i%uYUfRPReiQX_aR>Wt} zqjrB7_tqGjjN)Q4I$XydjT|T@ j H}wI6MhG63ciZ+DHqyh8?epInEqm+1JrEw8u#meklZMtzfLdYrm$ zj8Y99H7%=6F9-8dirbYsBR@a)NiIU~%t@{WzK`{Le- X#kl?;ZETrNbg!TWMZ9xaXL`+t!Z9 zV`>JACab;kh7uH~Ct$dOsL?;QlpE{+sEPcY67%`2+N4gs6Ay;#PZn1=pgG=1jjQ0K zMh1_X-iQZdy6#9SFZ61~LKfoQZN-eg**H3QW*Bg>anw~0tj3`{CSAb 6epzMo* zaQNwkE#~V*Uk)5!-j{F`78MjDUOzCmyLF51aISpd%uEi4It>4G- y; zp_l6e CC}G^^gt-2F;CJ4|>_ @4f9w;f-eF7w^86!p}Uu@g#@Dw|)7RU@MgdM;kt%8+Uw@1>!TKK0b|D|*sF z;9SGVa>Q#NJhOVrna~Wonu2LIb)8oUC?(e!CDFMBN%YPA?a0IT{2{9$G#vqr9HLUU zwe3ZdtC%MSOaqipEuAM$S!`r(A08S_vKGwICdM#czM!e`JA{t^Y(C}AjViwfTOr4- zE+j3*@X!pXsm60#?cX@MGGVh-*zw)sd$N&WE2}^S?)RYZD9KLEbmuUrvoeWi$OEmH z9)9hVrBF}k!XGs%V&6>M!kGAbLSuIGitJ2T5?A&S9v-ZxK(Jj|QV5ZwqWy<_|4R=1 zEqvT^1A;wT- AQIX(X &39$NAPxxaz@x3lik#J(34Ay0tm`eko6-#Xk$wfY!S z3q?EYPW|r5*^;?w#Roi`rm&~#Ruy=?OaNZr3S#?@j&V(>eMi(406@MC8S+w%LHgU3 zQWIuI*w)Z=+wYeePpW$_1Bj4XC#O 8X;9@jM@;LUc()5 z=@&veOmQbQ#5O`kMur}W< n;9}TEp1*~X9|!g_5-V7D+X;d*4o;)6cldstnuN; zpUZET_YXnsgE>4YB4)ud%0D;kB=dcpTUU#~dxM2V?4WD;&5(1Lx@xc(U~1;+bheM; ze=Di{LlDw92Ok-mpjF-)ow{9H9LN=IH~#{RPJbmT|H8uak}4~R9%%6hD*h$8GYS9H zjsNO!Qi9FqP9s|vI*}-w&M@7sm(F~t{m&{62(iEPXD*#hk*yd23=NmkUt4c{C;qk9 zGS ju&N0TY=tlS(P8jXDX?!tu;oKmnRV}2?gDF-%^%Z z`lg%RP%(ATKZ$^A)O|d-wCkUTL~@k3<&Gd `dQ==iaSz461&nv$c*efziIR# zy!*TjlU0E68U_<{VBm4Y`0Ut*32pGuO1J9c0))8g9~fG#Z9$kn7HVfT$oWi3Q0v8Y zaNm2Dxx&ND()p~soM*UqZ>U#3Us4&TJ(U>?zD4g!#_+!AEl8v}9ZkqSzI9Z@h)wZ_ z!Q-~hi!Z;QadPe6FoW1= 0N2-G8Uzny%E$h_xfpYYJ_at+#-fH$WQz3 zO~0a1MG{q&hHxEX+fFGgPm4BuuA5%0$ld?#eI26q^azuWMdd>@4u4}rs;&InDW2CO zCe|c8v2-%UaDyuK4fY^b*+#kZz0+_8^-4tV{jgX-U2Ep^5ONw^@Rfivh6HqRg 1AT?J#j0)R!SF94g>DSg$rec(E-2cGg&fU1k5X zsn04yDtTM}1O*>6s~4~Frtt#zJGbe{h? A>YpjWj;u4l7sA|v5l<*07q=) z+adtC-ytCPh-^7 1FBB=o+ZbW;`wOu)7zTZ&69w2qSvy%_uPP1zS*s@$^IjAwblIBZ>XGi7YM< z&sI`zsAP8b$;K#T%@l`As4EUph*L(t*ssZh5}S?PJzh=S+;_{S{BaQ%l?7`*-O1Nf zaE<<8o!;?Y!-KATHrJuD9V+gIA_5^obV^k;{3<5oXNI}Mm!{iq3G|y3Bcr1jXv+&_ z$i_CdgC{*aW1WIl^zo9!w=L4~s09(X^_vuptlz=#@gkG32fp>J6px}B(R0T#&f-IS z>x*}ZI}X&M0(KGB+#83>yN6GhYsY8~gPLR`xt%GEY>=;dI!y4dG;&%NkYgrpIziCB z+xck4!+;^=Vj%3xO^M!9Kf$z5=}i99 gNO{SQGj38x@q6R2H6s@#Q(u4#6S|nxKw#`;=;_9EHg)XXksd%Y0SOAX(vS3WP zs7|Yez&7*IE%;7c;4g6cv(=PW?QS5ScFfno{FCh85`b${jJYW0KEgBGQQU&)<03}> z4IIViGRlEfV~4z^qfS}yaVQ9IH{`Z!V^IO}KT>|&&EB08r{>23^OMYY8LAfAkX^>e zo`{}^YE~cxm^UjqJnsZH1^_H7;Y@Rs-%My1U3QR}1nzyoAmB31YjkkUhhvM;t?8qK zTqYppbXGIWyW3inJeZJKExIZHX%qU9bf1^&*ytcx_K*f)RS&~g_7(EsJZDKUwiK~7 zjL&m3BFI}uXFh#iGph6XB4SlUn43uX%^6{cDyyUz; {9(dNjKD9lBt+C49ob+w=P zvOlp4 b_37KZu{K{wF^!S%>N$Ho(5T(zu^uT?k=g*Dk zUF=M s^Rt;tOPy< z^H1S9Hpb6F;!Tf@u6u!M;Xdmv@JNK;9YzNpi)B^0(=oP5Ty`)K^J|HirQ-+x?UfRz z-A$E<+0g2n^$2SYDv-n `{V%TL@{bS6cyaDc+YVtD_ES|col`fqQuVM z8X p_3Vl6&r;;Jvoj;OrH#gs}V!H=-JmCrxdLZ_hIY%N=%TCf8bo zMmr{Y5nsR<^RdW}@r2@E<>CoSS5B;#*!G}yr#pBa9e?KQorqpqKA6Qv3HN3yAzpRc zZ8Sd7buU}V?jm>wT8UvY4vg$I>Cqf_-4IY&xsQo(OyyE(%|lylI56 >eyUb|Y7FQ!A=v=~brckU3Lo0Xvi8VSNH9XDM z2+25H90=5Q7<=ymg80!qXtMjNSif8U@sFeGrWn`Lr$S7J?Os)<2AMAoS?mn9+B`Cx z um~i}@01p#lCpm--3&eN7&mw_>l|!fYHH C>`EmB}BA<+z0JRX3oz#<;HP}RuVHNbbN_Z%C0)?FqQsu$_IbgB&d*Y zE!yZyzT=l{e0F%24tPTcbRZ}$Iu {-8%Gt0iN1~@&Et; diff --git a/icons/obj/card.dmi b/icons/obj/card.dmi index fdf3657c9d1300bd6cef2fb3c0a7906191018f64..da8c2bda657675be06287730a85e7cda3964fc89 100644 GIT binary patch literal 24234 zcmce;1yCH_+b`I-TL|uuAQ9Z11dAXE1h?R>0fG(?EI7d(f)j#-;O-DCxVyUygA6dU z&HH};y5GH9yR}lgRWQ(pp6Sy^p64e|^Ho(@fdH2p7XSc)SBkRl0RW}#{u>(;Y!P@| z=K=ueF`nvLpJdHkOq{J8KUq201Hk9>4DI%B^Md#i<*hH`^yZZXUyYB`e>+k(CrWdx zX|^$X@U5ai5hL*6bor8zZH(0oR<|B50i~CYVZ;`1Et6dIX+geUlw5GQDAj&nYF~2M z+B~aA*QKkusD8X;UnZJZQ?;ug$XjM#qL~@7x38J@lq>Z|+McJ&Bs)yp2Z?g=;|&uB zrY~N{YugsIkJ&@=#si{7vR-Pa2Fqnp3uVf#*_NeFWWy5G+cFG-nwe;H;G5w|$60bs z9J{3Tivu&dym$wn;s^KG(G8aQ754TuuIs|`((@w^rimi4-tUX(p!_z`sZH;-^LJ9) z-RC(n7A?(6DLxn2d^U?+-K-@4jyKdT_Zy0p?Gqom9Y=I!2i}EIV#PMf+Pt38&K|Xf zm`Ew+EOuPlEWDGP^D#cl_}@xBW#Maq($M VmL$A^i^#f_k>7BL?#(=WBg`-=lUWC{2@^i@_6z zV#}7r6?9ZiVCE{9>=QWnLkFssBlI~__nSV0`ZZCKmYNF5E=i&Ci|ASQ zK;|*xBD(s#pM|RYDRp@-&FNUYDV+1@*l`STTlawTRL=ir9tuq|F>xQ4_Ez{M)EkI|!H`4m+wp z*Aw=8)Ja9O8;l1HT3a1_rb 2{KFBb^-fOe6 B(jRtAk!&t*;K1*B>l*v8%0- zXG)9M*I(wRE?6Nyo|-$AJ9-@9Tj}SDz0{%D8;+TpY~agt?Z0oTy>B`$fXsBg-b(yQ zdDy>$ddn8OT_~BVPwDbXw3PG2)%9|-ropFf`4)==ej93h+7ti)jKC{d8THTU2N@pT z4`Fvm!!(zdzlb}6X=!nIh(j^Z!xW#h2GrKzhRHn-W7cfWPQ;}SBY#q4hZ0@x_d$ zo(yB8ggrT1gBXKJz#m}pU)a$4l~(b}@A|ItCM6>yW7f+;aPa2(^9E1W_26l0%AmJF z*5x)dMO**lM<(n5M(h_hvPC`sx(qRT4yLIe_%o1|3GGn>fo_fMYK`q|N3jnrx{MyB zY%zG!>OZZSJ{Q_RTNd)xf)FTB&L~lXWn%~IOvRu)SPb6Vvj*B&qQwJz@8GU@EVfow zt3bB<@lpwG?i?JQWO%2E3PaRp>KP$m;IT=jBq?j1C1rDgw;doEU$Il(&_FF9Akc7r z{;7p(!afk_*oSkk*Ka230>E)AvgJE#UX5?|+tzK#Xr;w8p_T$PKlpjR@_xaDIN6EE zw-&*333 x($t=; zT^sjmqD0p 1BV|GUw^8&Is7$fj{)NX(E>_@5je@Y-bdGJwANES2e?ID-aCa2c&hZae 8FqBH@!+?1j?kyA$1YZN%U^8 zQvi^p(=s9I_wz!^`3gJ9_4R9CbYNpE%1H;AJ5meIe2MZm1V*Wpm;cWLz1EVf(iU6N zBE54ozbuNa;z|BL)`)g{_}SL&Y?GE060YWTVlrR!QG>0_#H?LoxbW<3jd)uK#UZL6r zpFduU`vcWP-ljpXZ9Gbw$iCnijL#0LM4w4~(6SMau8*vl4qGSn${w1Cf)OFdbBBM6 z6}nhiS>4{g>7TqZJ-FMs9K?<8Rll1trnR2KYMWwvRN(OI=f$#P2|b4hPqG+{$F#YU zxH|ukvc;2GhiG!WfZ~Y^d~VX+#;>D=jbmJ`1AD`Wgyan#?DA-l<{?_VC}g!h_!l$d z(M_DFW^spPvV0%DYF|`_q0v~^kLEeahnRgQlh|kiZAOBwaFZ7=?tcB^1=?bmUg}Mm z6kti$T#r-un0u$NL;!yDU-(9S^H9Z>xO%-bk*MI*{AC*t75X)tyJp0~e5Cg??e3OA z1TdglQ4&&F^<-l`gCgmt{LdOQUtTwfB-cO~n3;ZrR 6+$I@)_Og2V4&m7(tQ&?JRuBf|rSf0%pj(4h5j9)%HT%h{s=_y)k zK1AJG_L3cb<;}xb>8q_xg^P nG#G zYRS{1D1c?8^I@?E3-5!(O_lXd2SGGIO7Vp~E-)S0NcyD^f%T4TsLrCqM4bn`!(}@L zBPAt*sZ#BAQ}iQTpL}><7b_cofb@_`Xd%?%F6X^R`yLCKg72D(l8VZ9-dVsTRu8kZ z)1#dsw|uh@p9Cn?lmdGZd)+xnVto8n)3Pd|{b>Q0vT|#7HsHSG!KP7e5D7+yw*HyG z-P>DlVC-FXx+G0x?|uAADKtb|2?gAn45Pw-d9Hm8Y_a@xd6RHl+)=4v0Y&pm#ev8# zpl9!y5?~3--@W>1Z5{eHl;IO0VEtx(l#(=@MIn05`j)3MG&G{^+GYFN%Ea{1xw9Cl zQ&}+%P~kL=`HZd(T~}&3>i0yIH@fk3v~noJgdBWs%$-O2<1z(Ms$JFdl*KXWvX3P? zJ1-CYKH3LZ1^89%VmyUIVYgJy9xdsu*~cRs4K5aewz|dQGgt%h@$tfPiT=Or?*_b6 zVb{f9Wl4FYwEB_?MjWXpwKX(?!G+vX4DDyjl70CS4ZQs!qCXEfv1q>-dDGpA*bIx? zpU*gPSM#$}x<3G8hVe{A?9QmE&6z1T)Fi#E78S_cPYDg$WCbUCbDBnQ-eW`GY8PcV z1BZ9`83d;%g^zn?sW#$5Fv&HdvQi7S_d~J&tIXZ1@ OiANsSns+&1K#!V-?c;&U(OubR^(JgnqWRQRExp tlmqE4S zJS9^HKGsmPKKhu$9Wgd7(+s`LJ2v(!Z#oN$5}4KZflYcFhH=Ta5tEA>dY{Uv-k|13 zFj8VtMnIGH*kBj8_t{6c$~-dMmr=g&{0qt5;mmbV+%-zuFSCJ9G(z?pO?0%m=wH8n zZAeX}F8{uim`KhkB&6xA`ilF+RQx?00|Uc5UQ<=oZ}Wm_wZ6W7XTFw;nwr`XHmPZH zaWIRrkLEXPEAvvHZf<_gh$ro1W%4^6H_F!6PRWK_*tu%RB?je*mG7mQHFT6-XZt`+ zJFg|+cAFekP;+|K+E|+lQ^k6g$(3a1o p4%S5Jpcn@-Oi15 zpe=fy#yhBu$P#6=*nQG&@ws6J7etlCh&%`r&!A8q2*P{8dEj~9$Ve|7w*Te3gO$xo z6B8C{8awl8W8RNoE>!ovLy@}5?_GHdNZ-WbnnrP-4P|urwuXI)?4$iC3pUx#eC&zf z5V$Hj6 ?g4BL73iyaF zee%5(1U=d;*cjGX5blVWU7Ou1tCq1wcL)7fuW%?zvHxnW$Bj8yTDIL@Lr=HT9GFE! zr~t>C!&)fo6?phZ&>e2m =Tdvmd6scs`m55c5w`e>aMhcL71QJOj YdCp5 B#g$X7APnj>LohXjCvu?~ z(R9OmdoyG7gq{mvfb-kX&=61t3Hk&7gjm}5g1IOf=fV3ZZKg_B$9H#ki;9bJ;9h e0pa%P7 zE@y~y0L;>B=dRH!qe4R83rcY9_E~3`+fD~EqK*sF3LSIhMOw~VAxPg+5O@C`PWS)8 zYzKqJD_7%Z|9Zd@Dbb_U%c^dpRiDRr>W;b79r2F{1BFvwC*_S(zYFv zo+kJ7Z>R%>8_I~lnhT|V;$$;zh?3AxxhFSg!ObIbPf$yReHW}+ejjk3%oy9AZ=xG4 zq642VPEq@BBOyB2KoO@{#DNSI0H~Qr?Aqu_Wg7-wnxccFjkCM`cj9OoHwl`=_X5)D z`~5@HAs&9vY5#7>+*RNsO8koCp_<}mjwi0`RNgndG1v7bes8+l<#lDXsKS+M(Xtqv z4|3PChbXxqoYWNMS2V0#h5=85NU{~7>qIqs_6;6k<2IsF2X{-`CJqi_&+C8cNdnId z&XWl% _DiF%psJ5I>&LzaA_G{ zX0qkAtE27WQU&$=4lB?6WX2ehE&Tpn^822`nwH5qlxE39hD-ynv#|sjTHp%uZX~XA zv*bIfDZe@F;LICFbMOYZw=b|42)q~=ZF4o=JWg%GX4X5gA;y={>#Lv`M`1VjUd`sR z4{Pwg6^{79(c{;`^V#hk^Hj6TlDRV#9oX}IUb6wDEu{W>k$u}=t+YR!u>*rwIv~c+ zC-v>Cbv!m7CNTztL=q&$BpZ*f-h$%snVR5}_-0zjuN+d+EF`3aK}@FZ3qB}IMjv=z zT`quEQ1)P>vCYc<_J dMy%&ChE>ncZ*BBrFkXJI` z1fXJ+(UZof7pDXqH~L5l`DKX9{<5nE)cGZgd+;WG`_?fsJw0tQUt@Q!gDRsajj2dX zLD^BD!YdUJqc8;&F1uv)BEAgK7>=Vz`@r89x~f@c;=*52RGo1W0-_YnIe*ZU;CbbN zh)XZ~El#>i|5EvWfoVq|rqQQyLlo3DXaVutlg`hG>uvqS-mb0~rU!v^Ns?^^UbfW= z|EKI8zq}aARHibBC*$?kSYxTXGJwr|Q(w={N(^qRUS|I0{;HCEQX-_!>bIz)sItUZ z7Ov)OZqHNq%eSH9V`Bk6edwb Cxqb8x2PE z-`=_dXU@LAe?s95r|ZFXlqOk7r%pjY8u5Bw6RHqN9rR(^?f%5NwJ4+!5^)Cr&>S|s z^KimwCZ91)eaP8H|H7KwcBQcyx?g|#;o+mNB E(#0&n5f{6S+EfD%Xvyt>lf5A5Exdbd}ZGx6MxMI~r}$M(F(}WH3iixBk2e&WbL% z!M9K=M+0OheJ}yaZ%D3M_~Q^gSni%=XUr`mR&w`8K~{Vt?H4Sf9=lrlp2p)%Mcds> zDyh3bf+W3;5vh|lG-1zk_CL|IGE*z<>`$J&FfgDG3k&0R*?N1=-vC>dm$i2D1!)2n z^lXxli`$UYu`x8$fWQ*P7R>uB2UHkeJI@l#iUQo1?N~hjC<%lQ8PI_UTFDNpyJ*Q} zLZGNv6bHENw6M0qH2U!&It4}d`GP?k*yWy)s!dycU?=T>^16qe t~xFW)JV$kl&V?^e~6AxryR_HQ~p}g3Y{Bs!#9*5`5Ch3G>(^`_~y;a zfOa5!7C*c@qI;J-UHOVk9zV3V>xb ewlsDqmda zAZLf=0cmg#vEHfsX9P8#hF~4Bfy+<{vgI@WS*`JSNvBkc${&QyfV8i# Y1~6R>Edp{pV9-$wfgM@-;(`Zma7svZ(EbmKOR-Cmhag2nfzh#tVix zw^_E18VlcS_3nBxii%R}>+1`f*lj~Y2rA|37<^jj2J8huye#o-Jt@Qtz0WDVSH@2? zgVVIv;N81+GgDIlc=GgVY;0`1inf8dxw)1>jpdeU&Kn@c8U zX4LJGEccWa32Xi(k8L{2NOQn%6ycQ;>jPiWQzNCOA+QwQEb7m+vF=bCNcw2i?sByQ zJ=FSbNmM#T$nE2X|D2Wd=(#uQ4+{vFM_aWktmx;D-iuSGooAv^)Gk5O@DO8W$Ky08 zkKIQea(y?d-ME%LctlN&VAF*sH83wYcpF785q5B38$m4)cC6xE*F+2G4H7vD)`iGH z0oA7A)AzSxS(%;bNv@pRQnreO=Wwk@k0?KzJXCp3&gc0LsY+~828gL>aC}O087e^R z;1D3h`NV&6&VOj#Oz84~1QrmCj`l=FosomXz(P@RYmi*G-c*shEwKh}N}iCAKq=w* z`{2yy=7NcjZyecqAuTVD2{Hn+B%57WH3lB}NkZ(09~u~w=hv*NZ**xMtgSl@xm#4w z;f>DC`nS*4yvzRiuIzb!PoLsost75AugMP%aJ<$S5Pgz9MuAZAzgU+Gj%?q1e|8>n z3|(!oD6D2r_kOP|rs|P=<-HV+yutbUL4v35lo@D?W$88It^Tgy&DA9JopjpU9Wx 3D@C4#gzsm3Iu8PoSNLQFC1{KI&b$1*?A_LY>4IhcUP&EPiOY(A?U z9MB~oKSCu!{S!9OxsAUyURwNN?-qrz-ALLKi30BCUEb;$0(o4Ukc8;lwR4Hjq!Htn zE7RAeW@XP&&p)$fR#2tQ8q2-^X2%^f>m0`QXo&oWq1RAfU)#xQr&*GafWURNp+j+L zsjQPz<@{z2|BB<Jl~dtPWZs2H>)j4v%e9esZ({RH)G066Of!E>PzGPBB w`WP~ z03dZ+5t4;m4UtfeWq6rP(S*&-Ut}k3O;a)VOsm4rWYj=UFMWQ~pYhs;*dnnNJy!y? ziTx?wm-%_e*x3Vq0XMgm1WiK>V1nVOYeA~#m2x<8ItrX%VlWSG4W@>d3X!i}luNa- zJ$0$HEBk3;P#*1?+F%lSYQ2Hq-*FZVH+FK0Ek)#vjo-%aLR{WaE%87?4M@W(-7oD+ zweOt&g7kh4{=PRSuw}x-=H2q*9akX{5Ib`2#>+6(<+?Y)!3IUM-RePT t3DY@98>I%Jzv< ztMDcJD@4VqHZKk679tunr +W(|&kcfYNB#N-qTY_40idfi&@+ zp-nSk^EZ5`9a#Q|t{4312qNMG2w!Twk$vQubqtF*q_Vh^ z>hJGQ7Il3B)KPxa)umZmUqAKMAkVV5v2oD}+3cQQCW{Aeba*)pJLVJ=%U8zUKnMWE zw-F)z6Fmw+?^V%v=zl8sJ=-(6gE%=kd3#Qld=M=z`paNS@ONg`|Ba}aKE;epQqM4< z7T^`q+U42d<5YvSl|r^3)8H#;&t=!kd&B _T_26?FoV;&xlnB;i z$aeg5QcV<-V&rzgb<#=XmHxez!FT3MX{qh++6+wMLCLni*)=G|c5T+3%;NQmDzVrn zeIrthQK-+kwppYl{B+s4y5a^hQ33IKQ;vHY-AI_kEI>i&Y@h5ik#48m)AlxgiA)P! zOV`57a`wx4hf<32!12uA!2h8sY`}&>GVj3$@rO%oX%asn`1|ehJjo2mr6`1ngM&kv zm909x{kz1+z}~a2QKKT}w$M;Z5O~u2@)vRMkt+C6q48b2<8z>Xik`zP6@0c9w~xfr zK~E-TAj%!Z&K;e>n6dWn433nwvA}9+x-y<6hy;3+e*0LQ{7?KJP}M|b#M&WQ4mV`= zZcik8^cK<|Hy{jtM6=`+A|Vn+Pt>w~l|so^l;yI8IZq)1N~$P6Dh63(k`c{~?$BfZ zpcjVTh}Zk$*Y43!3zC&Or}ZmIX>(^YzP*a~y{jY9hi!jzTHQx4A0EDXPNCp;a6ORr z8Rp@JxbK^FYAz%Sc8ybrgNeqf)I{IH=#6N6iM}&z8oz^Pde>&ZgoeM%Q`CRIGhDWZ z6X@b=+z#imn+QoT+KScYjd^l^p97vP4ejeaYh3c6`O-EP@VL(Snir^Xz(t%^vOSts zdZToocFM{)x7{P2nHL7E^~IVf&x`n|jUqk}G8J3xYN_ulW(m&AcjH{*045l@Cjmbp zL5x3x|DB7rQ-P$AfdQV!a|rv4L!OSsQ;)V+S3^@}oW4d8!l>S#)B*;slfWydr|?M} z3B_>r1bU%U{z+PBmbv;S#wVJys^7QOi=EhC&+> AdAQgKu}sU5BFRjC%WA*T z7Ym>Y&4-2I0&V_iSTV`Tlp2QRqmR#DuiaZHR3O-(_qbxpazFp`BMktm%$E*7NCLMN zmtNjCi}dHpZvzb&23je!>e!PEEqunP2JI6ajwR|AJ%ms2ep-DlvUo197w4~i?DoCk z;vujiMFfjmxLEbE1G7oVt`s~D0|y7^*9{RFc{m10>c$s8K_4o6BM{<9#7XDUapmVx zlaC)5AIvfD{YMl~)7>ZX%9ldhBot(qZn_r*5L*=ccz6k~_J27#MtMipm34TaXFl$U zXxLIV@_PI%5#0c}a#6)OZ~lC-^d|ZIm7(07og)InJ>N(w 1N-1-cC6$|7o#&@L!x5bg{wq)O!Mq9q{+j|8T@Xp3IK}GG5Rpe+ANI zkU%TF_<#P^2b)$wd3leN)29~}O7Vt1ZBl_b_}^N9)j)>TPl#8qUZqpdd3bo-3V@tt zYy#O*U$4#9a`gI+;q2^8SfE_!rWG$*<_TAP;5f99yknb4^@7TDT8g&JgFO=qH1~6K zWf;ZjfocTGT6md8PF^rhKIppMOZ-4zU*8G{fc3{-=k&N*q`t5dID!Z~)$@Z^6>dP; zIj@2&i !rX(il!D@5)r&$(Ob%T`;= A8l78X;; z943CC0(z18YOg9E?z<`=vEjn{vb*FRj**oBo+Q(2eMmJN5>zxxz;Xcypv9=ByJ%ga z{E+}&3rT&2#+UgAzl4NP-}&MTd^fDDDHMOK+Q7`HIrEgtAJ~hMQN6h)3i-qJa;T3> zeY!0RTXj;|Q6M$5%VX8~<&&VfT W>cJ(AGaJB!Z5Cs60zRH9C#|T>Izl`@I^q1Yd3WLDa z)zZP{OSf%sw{g!ZOYdpltp|Oreihv8VAhbi{uu|ys98z{)u-8?=D+Fp{2o_y5>b}p zb8~QfwXwI?c&=^+x29D9iM*z|dR|=GG%C1Jyczt*wuj4Vb$W>jkw|cJAr>aR2~o^O z3~v{HXcHE}q_AOk7XPs=Xixw!TmsVN(Q+>WP{5@3%)Dw~!kC9eK!9ppe)IK_5G(7P zmA17tFCl}-aN0^__-oK)HiBNYMM*t<8iEGA3_wX>dt$^Zu=neivoLsM9!_PeW8kZG zmg-^V*BL^D1rVyX0O+ >ZOp^NUuPz>S; p@p*O?CHEsUjcXWqx%azid3K{y~DcpB^yrISu*)gP+m(wG;Bh~<5!i?`;6q-hvRZ}W&I8ch>}pS50c}pgJZ3a zKIGzP73G^AYX0#{5O;8DWeC5G-$SBx w;1c`uJHBdYW9Os$Y}7 zMg0l{Vdu7gd)b?gU%By@M^?_Q3Ok00;%gxF)GDXDc#gbLjdv!sQrnA(zZz9IQ7|;z zwAT1Agx^UhFj?xy?IUm_IT;2_iaG>mBSrEOqNQ1+Kj!t06&Lp_UxP1{yq_77Q6KAM z{Te`%)-~D>j6teFR_@B%V`F3K1`acgUP8Wn9$~$9QgbyQF7mH^@7|{;;%p-u&a7^{ z{9qLkhRTKk_cdV??YneR;Z&28FwjUDps)Q=R(1)0!)@I081>P=J2 +@^8-G(b_+#%g=X&!BW9~w(Wg~t<&^HzbKsfxZM()ISR>*@ZOUR{{hqd5Vs)Aq zC`n_GCiy27zuTc${ePQ_|8IrUJ4ViX)mP+>apS*K+F$#~x{oxix4i`O>50#;#L0h@ z9kwM?#W{7;Ay=X9&8}Yte8UK%-`!y`b)uZYq&)iV6a}MV^pWc8GQQWvJztaudZv&R zUTVHUrt8?Ih^EAm^19Du1HOVPN(K8Wbqf%&awwukxTz3BWZm;7K~nG C@x&Wp zdjo$_;4nK7i(^ewe8c5xSwiGB6FrfWd;7-W22Fvrh%;448n_*D0M*boX7QQtO${S@ z1-2r(nu DZfAkl}P}`=2S9JBd+Fn$FRKb_{VTIlBa6#5x48B(2*!?_pVFB#hg0>2d~d6 zcz$=1`N)Zf1fVMWx|8=hnDqq;zk}cZnsnL^$=@2>d;=xvmOwj~aVJNwe6^bH^x!Y^ zHYm1Vx)=Jl@zRt~j27{1DykgaxmEIYnO*N1J@1IFt_WuBzM%jPD-&k!IRkL1LNoFz zyPL8^8PG-ZZmF1kn7ywu6Vres)K#jh6&zl#DKE^BIjwZ_&CK_LP3B%{iFv{%*FSwp z7_m^w0xAwP_;iR|+a7E{nY?p#DUII0f3PgSys$t!!HNdzY1A|{qcbzufF)0gqr)nx zRxFYWRQO_yxZ8{c8{dK|ALge1-mli4Y5__oT}<#Gtf%@IdTnAZ?l*m`7wNT}P6SYT z&6?fIMjq=nD0C1F4Z{Cuer=}K6J} bpq`TqJ|Y}_X=t5jhyT%9L%dZgk>2+mQP*Qx zW=^Keky^O`L3=%Q<3?mpqg0D(qEBW_!^La*kOy!BDkCu6Ll|?|(VHi0NY4Ybz|3u; z#uwr9E&YrXA2aWg!4K40IMu?tpH&HYlzB5os~j&ji?Nf0##drkyS;x%LE&Z4uM*#Y zsBDmxq$}MYp_%^(R0vqi!(9)R<^#MTuU@}iOHE62wWa<$?CmGv)v^6tos7vH{s0|D z8Q*}^lEntHN(bdYZ@-o#`|374EX;cfAN{nMwT^+4(g#E*@j-^dmbyRbEUk+o`zYgm z43Zr{jZLVrE1qX ( zyXY@IEr{<0M1ilDpQ6!9dJAW1G>|h-5Ki*!z$%s1f`tUyz+Q)vL?3m9D!4aLE?2UI z{9SUx?BuG9gpXbFo(u$#`3F8I#^QcRqR2Qc<$ARIuJ%HuNcV g!>czA4leAg?b1ZF-yQaL#}QS*kBl$4^<((|T|#74p3sxKu?l^h@<_g{d> z(YP}oXMP3yOz65PmQgbT{sQQop&T aMv8(`z}u4vx+= zYDNH5j@n17g_ymL*eo5yI=2n^KNpRA#^UsQH;BnH`td6L^*2E7?RiFM*HB4urbMxr zk$JaV!K0Pm$W>MoNMF_=-X}-}zYih~ztZ9_`h?#1#1QPO_XfoQFVo)}q6#^`XVee3 z`d9537_$vFx<4fxd6|X|q^Qbv&=aWs2} ;0ASPDJIIt*tDX2E*3{%tq;{9MQz9UF+tL|~?TZC2H@;A;biEGVdj z_%Yt2k6oJD+QkC{1M46 =6cAn39IHaqYWlEdNU1lw=}iW63~3{SwC!s`)%z h0FT>OTFP5p6D`|I4 C-m|bqR}8u ze1R5R@_>BjjxFLmZ_IVmPH`wqVT-Hx` ^n8Helza!$y+JnEh{kzo=rv)AQ182w^ z0p_iAgWzLMl29QJf5tk*_6!U;FjJ|8bZIc5OW8*z*|3T>uMh&Qsg4hjW`+S@XS%nS zKP5mL7FXe z5R}e$^z7|5mRDc2__loXsU7iwl4;2s2XjY~B=kXOIda|W67|9I(ZkLbT$Zjhu6E$l z9S+voP5IGZ-zJeUsGDnuwGZL}erJ-TH1j9RrTePSq8~p&oQwi`YI6;qVA<>~gh}AJ zehpC@&yZWc;mP%@Jftn&v^L^@=tWrf0BX3Ou{vx5c1$3R+%#-zK(v1AW6*^e<|$;! z63|W~H4CNM@9STi_sW4CIH_P>7E=A~Z3Oh_dZgu{0M-E%9;fK=ZDbi#pbTnSzrMUQ z{G9#t*)#PUO7+eAYL{kGQgHM;tPiEZiqsCddIJY8#KXD&NevQ}47&JZ$MfwUO=g!X zP*ERQH7&6MyI51ni7YDVX-C`<|3qR0)7_ ~b9d8E?sBz!G>8FF=dmh+M+crY5!J8m`O+1}6~ zcw*|i_a8|IF8BGLI*0$iG@bkl6yiNTuwJx~0livB%!r@bY}&!r7F6BB1JTi*kyjb2 z0a~zVi(M=k6mi5V>d~O)pZzkO>aa4Y9IHM+VEBKJ=fc)|V~x18*RGsQ38^=D?QCsj z|DmgCvDaeyCp%dpKhstMF!1UM-R{WY`<$9`X>Vix@`9?B!#ydN95EK`wB&!SjM8R& z3K2Ec;smk__DqXZe(IiVji{``=OO_=S1gTzG9il%Z^>rQYN#i4d!%=7^2c>C+tx@H zSEKD*#<+;n5& FA>l?BRj~?-5GrCLRJBI2a z_g-mYmLjDikt2J79UXqKbp)bx8D3sk*uNKtVoh5$8xY(e`n$He-B=JRKRGkA<0kfF z@*QKS(y+C}m%2J(t)CX@XDBB_S^v7YSkKzU66{AB(0=foT-*VEolyDHYZ0#bv#I8) zRH1f@Ob<*zRaZCs_iuiHP>nQ|Mpr{ucYl)SZKI2*1^1)6jp)`3x2$2gzJjEzl_mih zk-JxyHx9sj;>gxNM{mlSmmKa2r (o}24*aiHDRJ!^g3foP?nNC4?n+t#T+9kO|n$OUj* z&fh+nyNvzZybNt9zmaHbzVLa}b=`8Ldx&fmqxU-C0R*c|te83!Pf{#0V 3E@$RL=iAPq8W0Em^ny3j4Id_VFlyxptSo|KI zpO5w8`{qwyGq1)HxXoNC;Ai*J7y#l1M8ACBoB~3K7zlxT-65Sw09E1xE^Rfe8^aC+ zV-`}G*?S;Nu(Y)fu2lJ^<{QxNcaA_)RdXFPv#w0`fWA3OLj{B MbSI86463Xmka*bF!X0ynwwCO(fsC2^&Kq`3zAU)kdYDWPY(VzyG#r@%I^x zE`jx#`rltVq_{38e7hb$<^%v!b8;hS!KUQlI0gA~D)lcPuTHY@3>Y6DpMF6Oe>>Sg ze)-{MtJ?%+>)lpkj3rvz-tQJpkKAQXyqlxCmu`~D=h{ds#fzssKT*gjC>k?}1YYk4 zrL`oh(nbHPW%Pj->2~0MvUjXcPSwFAe&gfB>VspnA z!H^U!58B6^#!ym7I}mL~DcNGl*GjF80H{ATacHQkpX{SI7OR)cLg67x(sFVbucbT# zRQO&?;VK7eob2gqNkR!8Htm(PdKV}`4aG87#v@eaLSJwqVV~92)w3H)5>@z0egwD^ z-5+_J8v9CGb>jkpYNi8PsZ4rO>b5iwzJR{Pvz@ow;}IAcyY{uNHhybZ`eiDQ)Qf(O zFau5uMLL1Js1KE?GMU@JagIkEGX~!oqXQwM8P-Ma)`SV)#bo`g7a-2ZXkpMzd2ie_ z2~F@p1#tVz*F R! zR9npSRGF8PkNz-A6!(oJD!ae(`l6C6op6Mvu4{NGsjAXT`s_9m$j!~=IiO(qyl%2< z`c<*w9D 3_U;DBB`dt9CO#G?7f|YOzx|xT2p8poh2Bzz4ld*XdN(LS z4mzB(SnN@7;A&A84o1t3hzg%TnS}!meknoZE}nb6tPgNy`B(ELZS1oDMk&hun>L9R z{;M%v1S*M7^9`-7n&D*Lp(XAB?csm^ zTpsTJ`D%`+F z9_^%sL6sJUvXU#KqLe2|l|AOeyhdHC;}Zk=R!5}xwb;atvOXRB;fStSqf&zr8YA~m zAfW{*-rUI+F}KhR6#~n=C#I$vWc>!Q(PU<@*azcuHE}lHa?XrqSHzGNY`*1uIGP=w z)1RVOkt<_vjc;!6%t{evsru*d#&<~vIF@TrP>_u9v+s?(hr_#iIy$N2`vk>SOF~Rn zsC>groz92HC{vxhzV& Nb+qw|nCI^wKk(c~ zp!SQ9q;#3{SkaNE@FJ<%0aqgO9%lHw(S9##RkQBpq^4oqU0om&u3zW*jiNIYr72z# z7!8 1>@{YToQcR84ah^S%`hBVb{J5y0HqWq{v1MAM0vHA?0K-egwZ%2?t*aM2w zCd*3_O`IsEw`E+c-OG7(N4*S?1GoAUI_1-*Mzi-&gfu*l!P #g zVt$Yc{?}n}O2+eWe#ue$ZBD)^b3pXN2Lsv 9w0cddEGS?6qXwc#OYV`TrRb>@H#Rv&uyUZ@f6$}ThuznF zmaOU7*!Py6BNH(c>ZV>ir;3hkG?nhbDTQtGe}vOq^B8>LW+}5#DWo6T7~o -5Q8RT2cH(TWJANwMEe#fiV;;m!w8Bc{yywQ2!UE|f%*un3hY6pG zj<_ c7`uqOP zj@ I5b96Ps&$ODdZ{I5|r&-nQnfzHC7J5~-Q}D|1Q7@rOo)_Nj*4ho-u0e-g zNcUNP)7a=j%;vh@Ip3IqG>+uFa|~(PN(*r-r9?x;U%Q-7%M1|wVuTHnc3lH`q{2X0 zj40U8a{uA5=n7GU!8C85nkLW}`}3@AF8wVu d>ssB?L&Y6$g8Iri2Vz_B^wTEf1npj(HL7$oPMabuFJOrMR_kJ?Gy_6RB zgGTurg(H^)8HgeT4flQ{Vm{V9s4m!h1Y+rM#McPt2tgX3F$QC*Eoa)s;bZJ#$#K$S z!(u2=f@F=obBm0qoY30>mipR>SVYORowumj4;Dj8l#BgQf2%C1!F{x{OGC3EnZR%B zg{^C_^0bD)k>#YUk)aGX55?-~t!)=)*3aOrZ}jN7Xe+{wZ`SRVhtZD_=O69Y&S_qh zKrXjJL_|n`A2nprh_BW%O-lXR_f@tGXsLV7CtTmBS{J3>QrlIizu7rA#{Z$!f^W?F zl6A+}Z~Q2Im K1BnGIZ}si}2YKe2Um=Z-7P&(}Z28|oa;GuRx~#kirbfeZ z;pAL bm`)`WYhXIF45aSF99(UVlISMB8D4o!_Ew zvCKJ-$QTUK#}j}ZUX?($966kMf6 d zF(=$2z2p9Ko%~ZFgt-{s5P6k255@AsF*%AEjE+3=FY2>QmzWNUDsz*B7|jt=_=H=| zbG6PMz7vYS{d5pf0-q=Hc{p~bz%+JvcD02JR$r!BNJ$WqFOY3D)ICfBY|TB^LN2e0 z-dScUO%|fG**#*XLczt;?1>!%pK88p)dS7LqjIThpOeg(F$W1Z;YT{4<-ji}c!psg z-jAN=cWm QhcUrAuTZag wnK4f>#K_!(bvuUG$uX6I>?=R|b4(#tG^sKl@QU)HI@BT$*W zP%9-|jU+x#X1P$pygpAbe4ZpOAC{7F@Ka`64ksZc3r}WOh}-`<$Ge1{g4jA8nf35s@Jm#O?%L^;@C$yv@AfQV^2qNt?*fbr3%Z2< z8OsoDJlNtp&rMYj5f@yg#aUc?B$`9knxyMiPha1+X6Mc_L^m Ya6p-HG zADU8yP?aVi9fLqndVl~@laRcF-uLCb5AWW$?)@-p?X|O#oY^yT*4{I}*;NAvCCDU7 zFkxG#Zdhc>{~YjsoakT;{nRx!IAx8T{74-$1TPUN924-_b_m&)0&uO!3Eh`t-&ymT zkDV>3uc^~!Wq8E!7gB#r1<<^6AdJBL9TI0c*U7mM6a%Pl4u(l}fB4wws4%xH6z>rb zL=olL*?|*y{*2umcWgS_MPDadm(i^g>94atXAm+a)Ux;3U7^Um$;!#0sZP5Yl4|m? z`ve=aa6&h#qeEMReS&T9o 4R~z^v5aIvaUFm7Aq&k z7TU{e?H^+JT2=*ZtJPRPv%s~hgahH1Y*}WFEEaM==y}UBl|0VqxQdTN6qG{hhTQ^7 z {76wDHJw*E1Brj5UGf63&2=+uEA0bOYraD&debqE@=YBOj1Sk)&) zt7AbbUv8cDgxCul$}p>0HRzOHobdeO`}gl3Y%iH4+N+MZ+z~Y_Y-74LL1zt`{Klbx zaQWjqr`(5& dHn3-7Wtexr*XF?0sCdETw1z;I*-WOqTw-Vh5SZZX0qhf>pCdnX!rGveADo^Z zX_?WegbX7t(hf`O;?};fYeF`}kI_o5%E$)1)ZG1qjPvO7iw3kxI65!VnNw2*8|^9} z!wmg^wBs-oVsoM(88dfqm1%d!jSQ~Di0lVd`vUbL_>^}DPyOF({1Aqcfft+r2r@f) zcqS-mRARt=_5@jVwe&i aVd1pew(y+G3yA2{>N#a5-9LMF z2lmauG&nAYITWID8QyRmoIRGi{h9NVvhO9>*EIh958;X%yV2}5O0KvynM=45f>+-| z%jNQC4? v$3SavBKkL!v*yd;eAxgY43&yAT zT;1H9yVkD$V=C%&&(3Tm8N{!*!Em`?A_8devn8Kqar*o=Jw29){%QC7t5(gU1ODE1 zNE7?Fj45j3sk)J3TAvOP8TQ3Y!E{T8h^(l-Tm5s5u?(M-Hx}%GhmCQXygqK&AqRWn zxr$z4W*6)jE$#$!!*if OWXvs|$f_-Mvb(X ^gJp)B$)N%36>dr(4nQ)j|2D5txgMj3yGh3)fy}zUz)`BLjNcRz64< zvkNP%9b|xtq00rU3ibi+CH_Kd%f-;I^Xp{XS6%YrL|Ut=!d0-Hp^kRCNpC-n1Iu-o z3FGjz!@s9YHYeC8|7J>~8lx=(_+oX*W_MoZ(TMH{=yk@9ywSeDEWJ4R^ve>k5!v)s z1~5~B;Vw6Q{j@zmZ%E}2|AtD#r27s#Y|Sb3yDMRHD$WIn?VzhOc4CpAybfN5+MfaY zg6kxOJa+A#KSgUc&%nn9^hLr)lm-@|D|cryXlGe>Gr(&En$zRUHG!VyEz!vMa`mpk zbbC0Hg-F)r+{=-5q=zpGL+ib0*iY#sL4%vhDwvh51W668YY%6yTHK%q%DP+2JWCoU z>l2oPy4-^B>0-bThe+u2Pi*(6P !*Rg3dVaar>#b#iA#BR+nk(G0%lvbb=Hcba4KAk8KmpZ})M zY7!DL`#5Un>PF4}$!yWA1*xx^O9fn61mZ)ktUu?ynm6(1U3u;G+i*tk)+7GsC@KFr za~aI4zk21^^2(_NY*YesTE|Iy1j$4Bp>lL7qr&@(c|VG-Q`HA49lv&q^H-!16n4Ht zg^5)0sTJBlLT}P(Rpf5ASAh{{tEkn2CAhB_Dv8*;b{~ ^FmW^nN^3%k(z&e`V%Bm~qJYF)|nE5ohyfd>g(6eX7r47kPY^K&llx ztQp+AIDypo(Ip}~@p$NXCuV&8kcYB0_5K2}IbCUhny?jK khZx4UOk{<&6mYC@5k*`V5DN9*6RU-;2Y%xp~3EA^8Rxf8GF({BIEB zKvh_LqH$AM$WhS=G~QwLkCRl%R34>Qg5M;&i~?U9A;h{)g G1yz~KRkV&bDjk`Wa%)I$(4y=3uNwez5NEvP@LzanFk3{ z;@lPt&kX`*;UOs?y###f?dZ+lQg1rW< foE8-b9T&iBJFT)2b9R~;38>W5ur z*6tL>2OtshA?BmLk-jL`4HZ4bs%8cd+q}kkS1rX=s!wU+&)N0D{?=W%in1q>=7{P< zecn7VdN8yo`Tc2v{>Nbx{*~XyP+KMoGs$Tq6`kjQNKifJt Q( )v0CMdGX*+MxM ^1_^M$@GCPXIR-Fw=yC(ZBGG(rlaM9T_^M5e8EWc}Sm~ z+L=9av53o$x%!TEA1Tu=g0&L2$B-{0{IC;1ts@DRbo Q;8Q) z9ZyR~83!iGtnB^+-8xzZIlA0ualsgvJF85Kfk*_FsaGBBj_BSRD3|zZGZSiAsLkzO z$F6M>;p^^in&7K?Oq{t8ZhQV$0-n~4h;;}1Dc=!VS?lrQvPjO$g1XnD ^gGpYX2e+J-v#^rOMub;A2Gg>Sa|Y? z4L)+8p-77FJHN=(A3^y$)eImiY(gX|8Y&a6C0qQocihY3-^;=7H5)sufwyPOZjql^ zJ6Kv-E$v*B@`KEIBl3mmoLXs%EcZcZwvqC%7lbBmTN|80!7N(Z@;5C1vLTZpFJoSf zy)Z`i#C=x~&qRuEyNGEP^Vjj4yyb7u@^Z57cIMRBfW2$BrPsa@TKvS=BXqVg9veo~ zEh<>nH`h$mV5qFI$nmX~;WJq2<<9~UNfl9^LyuwxX>*7%zdw3Z-Z8t3zsLvjFll zRF%_aKJdntPSIy4VkWQ2!*oTo?DFHT?|&_x;>csT`;*HkNfZnY?ixTUU&fCOrjxbG zJ5mA^MQ)@%x5-Mp!tmf*uIt&qE%;;`8F)%ClM=?+Mb;8hezFExNo^9gTr+S3Dzu|- z0Cr5 8%Z=DRUzkVfH;ya|dTlGbD^b>= z*qL($R;h3nGX~S9{*cl<7h28yrtFme;phe0>-EUmT+Jgw?T1#RJxUTxNc|fr^8evj zT@+!^Wji8o*&{F|P(O1st0Llnum|4}+O8Bk5v~ILrL>p(ng D2V*K~XOII%Um#7QhG#6TA-ArzA(X z2V~IY3@{3{TDv#p*OHHs4HkPq-hKHV5ahC_hV$K;4Dw8E3zg{D^Tie(pIca1cU_K; zkMBLfy-Vxkvt`^Q{5ma-bS8`?S|>$ZT%3cUj^s@%1J|-!*XPelJdpC!d 7{;Ti1A2jvt+DS1)+>!VA(}UCM3?2|%~gH>{(WlJ8=>jQC5nSRp?sGG9|Fm< zIKQw!>5j8Ih>f3bO020PvnN?hTnaa^15};aPTn*^w>cPc-@~>AiSM+33QH1|$PUn) zlmvBrD;{@#g`2++f2H+W&xF;;o3yk^bVGAqj*5@Z6;;#iO&YWPn&1tm0c&ve0!~8% z!d^gPSfNgcC64Z=#tt4oSsC;C9hL=5)&v}^ASSmhOWN`~s*A3eEDwD-_f!WiYmoSS z)ylr;<^cE9X)O1T0m*@oQ1v!bZVzwo_2=HHs)}p)RR(!bHSNxYh*0!s$a)fDp&cyK z@5UMD;&{eFM!a8|v0BiM+@(ixtxyk+9O-RJx6TvxKJ*jULE)tjA2tqy3kpmT%Qf#* z3FH3Sj)8S4(s>Gx9zCLVym+0Gp5@^8ZsbyUjw^SOv1yWqW;NHd85mg+)nKg*-E15h zcQ}Xk4d0oGUjFa_@TdLzib-^bM)$4;#$V&^3I4k`wS2atVzsnFI55nKeXQe6uU^Tc z)ORs@w^Yj8vNtOvZbKP*?^U4=Lv{gPw>XN{);st4g9K$wWm4E&Dl|zJ)!quYpIC^D z3j|&i7atFMr1W+|GR3I#?DhhQ%%5s=AaP4C!R@K(`=YP=yr3RD->-&gJ>phomA)IY zZjW^II3{c;Kb+Qj;fa*|z4MB&fR9r7rANGm)-zEi<{FJX(aUOX#w{eL(1`TpQ)hQ? zEQnoe8Kry9A<~RvGroJaq{72^j4p|y6PSIDX8ZXDj5`?wX|qoTcj{yv-Yhf)gOE3K zuRV@#p2RZ6QBeQY_+!wpK*xe!5yw&FcD44H@;Vuj6yzh7( Ef z*n@8h?YHtpNET>Gg0ge4fyh;pwfFtqPYXnaF3z&vL(KjO{#FB0DO=JLOaAY9q_ex) z&Gwb@%IRCZO5MQJPyA(#d4@*L**||KHqbObE*hoGN~lPxv`;O#m&$ZSDJLI(R2!J$ zM8+m;yimzWu+e>tYy;`z4yq5~n9t ELUkYmQ^lk0RUayG zsVNuQ+xRyCi8}ianHv@bqVCZ%X`Y4r-;y^B*e1_c%Kr6D6249B_9{}_wTB)|$l$M6 z$6S fnx%0CMt?@kOfn$W(2% z0`0Ds$C~Qm&u!WVZmLUnR^rq|Cb8xbPLl_EW9ql3c=Sqz1JucI8{#cZ9V$VZL|t-* z^25z9-_7;(Ax-Z#xs8%I!}JmeUEC(>v+HryIqD>4_s550u<~} BuQu+2ivdoQ_mAT(ydSHe0 zW^!%U iFi}rcyX4k#gTs>o%6Fnf}*1)`2e=8G0(<1W=9tLP1{|^eWumPf% z>=N{6{Z}qMPVx#@n%s0--IO(Dz)gdud>xTBK6$Jy=F;knfI8O;jRmi%HKe6rfXiX% z)si^mV}X||ab}@p8y_E^=IVJwGlyqq`8;vIe!9n7Lw5xFon}o4w+fG$UM`i$0wZp+ zJm!*Fk;-(+N^SDxv6p6c&-luap46Ri(jnqt^QYd&8NwTI$oEYSQC8bqK5sq7p*NDb z&gbahw`%Ela;?Z3VqTgNLaHzKZkMe#_0e@*VnmOkDbq7E&=DjONv)6$DX`>d9R}2_ z5Bn;FF5TvsExELf&BYHKCnhEM?9{mBuLYG0Bh9Pb_Ek}sACrikle7Bef=^7LwC|iw z)_L_7HB4G7-i$JL4Q9C1GgxhOg@W!87#Lfq<689!gu~(6i^xzHl^z)=s~TI&%A%a& zhx})RCC-dxNJ!GkPjneHp~THM*R$V@s?X6pc=bWKAOc P^VmzXriF_jA= z(9D{Emf@ah79juRUkJ#dkxa&}Uv}l=D-u9r1 PPc2hvfM|%katZ-0jp{JWbxd5`YBlP*jnIMmQ|* z0Q~h^c$q$mI2{Bt^9D+n!2g7VD`h&}%DAD1+&0aMK3xZ1^EWQ$=~L^V9zeH`K%NL| zPR9RS43 F>fS1uVZ1vgn-hGe0TEbL+WG@SpuP-%p8 D+=z$wLx3tT&9H0Cb0_r@5 literal 23297 zcmb@tbyQUU+b+C^kdjX6P(oUihM^=xIweI#q`PAPkuIfFQd*Fblo}cZ3F+?cAqN;{ z&i4C#&a-~!yzBkreb&1cGn+ko4}9W|>$>iHM`>%S5EIf90sug)rmCb10Fbu7FZ^5J zCy(wmxB~!Ah@ZZ(hmy7XOE+5=4_jv^0PxAke5T<(D@rC~3Rg%nn|&%fw>GAz>;FJ@ zYQLey-Eiqc7%mnc@FWkmSil`oqmD~TKjfpdvo9b^6H~9{Jh|uuUzGXgd~j$ebuKT} zgbob6Ik?%etLUHl*;$lOS{m*---TdPisoZkOs4vZJbLYEV8^o79WidO{&gL3!aG&b zcV|=hNQEqQ^@I{1JJ4`uVo$2VF(4aTQ_x7!&a|N;F>cS1Vvv8lKWFGTm6$1f5{^Qq z4@^p6?zRh5FKEYxryP1dulPx)DfpS)lBRZ3kwT4aYsT%HVt>@%3x`xMS*-Xlj`ADb^Ec!E(Q@=G?cwKm&o7jFi9N#~iucCxvCL9< z9n5`l2#5>#P#e5ibi0|S%;}EDlUA?y1}|$za2iR84XVaz%*mq5h|D`JO82yn?{;T6 z@-GkjNbMI~jr)9lG}rN5Lj73dD>XhT-uSDyjjfEQ+f-TfgHk?Xc6E%_M8gQ2f&z~= zm&3JKn}$X8N7h0NPf}4)et4YT&v{rSnavDr-_e}s43M 4p7>Bj1%*P4jT_?Un zoat>wtkJzLtf$*s-sC(Xz4F{@kad#)#^QEY?!CM tpDB+- z&SG!*tf>cl=4kCIx?EI8d2*ubpQ1LOqG%n?#5VZyOr_uANsaxEoWP|!kht>baJc%u zA%2_jleuum= (-u- zW>W9!Upe>waO9^kH8bl4w$sZik2+$xZQkHn7dhrBy63V9us};_KnwhaA^peU;HlM# z-k)*YxtZ9xxieO#;sg)iwVwjM^t1ckZcL}lkCI;NA)_LQlvTo?)R;!z4QO-vB;_HV z*B!MZ>ZTH+zHaW^pGdhKrKnVu;%*!6#=hOG61^C;;J4lC;P8ir)!RL)g>n;rnc-6y z^e2&ox`gtG%!JIQi^qd!j^Wx@0+omS0W_fn{8ElscSw$Q?u*n|`)npwt5$t!y*Dk{ zd|CDF*y}LrA-hLrPu`CY{+6Ox`ze0n6$#oLI4l=s8kf$3T;C_2F?BsAP S z^D{toDE%n0Sj;{9>z+pHo#O>QxWEYVwY bmV%^HcBV>-Tb> z99qMFm`vL;S?O4N$+}ECv~!nb^3xUI*5KyVMAtn}P933%9r2q9)iKd$fc1 >GiHXt$>s|!x62sV%p%B99F zyC4$XEr{mE|AT`S7B;8o^h(Ss2{^faDUvijJ#G43O5|1c#cs-^nK#sZFv~sbBtt|* zczu06giHaSKvdx)ZWx&YcQE*dkDEyLvdX%j#;QM+AIm+IY=yMrBkr09Ih-pyfC4z$ zgkqin!PC_?=^sVH$Ou`t&-C^60pQ@rCiCq(57uhPI(mAPA;7KMbk7NUkYRLplEl12 z1dJ=?fM8k+A2x2@_Y2#!5jUaZh{%JA++3`bl$65cWGY*_8a;fg8Wj1v&63h`ETH-3 zeD-s6;sV0IZ!X;lAwJe(yQ u|!?Qwl@Xs`%5opGF z766a@TXC^aGKW5)R%Q1g&zaZ&6~Ox70l{ja%@piVrs@5IpwLcV|9Tdsz-#l4s2ZQ5 zTNSN00#?tFBAh)oC}ycPTp}9$i#d1FF~7NX)-b;!7`PAut9VIdqK_UC0EsCn_o8xq ze&fdvGb|J26OBp*CG1S)&f)@7;< U_bsX_ejv}3bBd|;1^Ye`iQ-|e$+x|uFJZ2q%~thN~vH83>H z{rXjH%L69xPWu2Kn?G!xytTBvkZZX z7b{4j!`k}HT_a-GJB#aN#k?1z)4XY7+KnV}(K0X?X`pXXkgF8gwvjvRg-Ob62>sPH zxT^1j^Bz<=-JJaVS((tQmF>k=2Sb0YDVMGTKQpd5^73cnpILl~x3zOYbJ8~Z 0MEk<4IvmSk%diQ?4?a_rnw4E=Q=rl46`e=hd@55Z4+E3{GI9E{Ul2 OzT<%jy70c3$m?z8$I8f6#ts%qmCjP?9Hub~3 z$P!1J|K_;n)_0DajB7phQj?d5T5MFf+Jomq(C$-PTEEF8(qO>L2;cvHFq&~^FCPEb zDlIiN1W=BnU-!u3_5;jFU{@5DRIN3x1VC^r$LO$M4$kbNK#wUc8mn8XPgsZ_Qc;+# z@M}Rb%nUwLbF>X51ez(@c*`^H-Hwb&s>8?>5_gM9zgwB5wHiDy$0s0Y|EgD%ky@ek zF;YV@oSm(G %<2 z%gYc7Ict^nOtQlKe0=+fZ`+2lI4|OdXd${ig7@z$I5`P?|Ni~xCr3hqXUNL=C!4IO z%`E@HO=OX%AdS*8@3d)zV)wwuAcMx5o3%Tg_aLbBTAGOHbXR3RC^uB(!Nt8KE=WyX z4J)T4eVm2{@|7J`5DLZZ y3 z5%F$}c3xCapji5FC{mJ?Td #UsG}WPH4#CDFo$*I4lj9Q* zw|`A4%C|Ou!_D6E`!MP33^aA@o7OtaeU&1RL@4qKCxT)l{jV*b;PY^R3)o}Z%y zzCEk%;bl9z8-|OEYh3v}WJ!x$KROFOmtC=av4$V026s3ZYM=i>so)(?mMPXxMMWhp z-k *d6f+Z~kMZs7?W_FG?6wQ}E?sqy ze*;VQA=<2R%gbtIjpvP>gWO!OkA7;J)$fmpEmLQfV=D4)tu^B~V&F(0F3!i})bVBI z^>(u`5z}EaFW($T1Eu`?Ro*Pc4wNt5v_yUE1Wl1U1v`7?PB-oQk9Xof-|YVk IWVCeXvW>H5NNM`S7y8*ftOtU{g)u3+sCilD2CT!h=}3Z zE;Xn&VEDm}!FZXfX0)eqR*KAT>i`2hZrGM_M#QlpzPSWDOw6mC@jbK^&b95G!ZjaP zLG?&0emF(_)COH)ijhtgv=mrB`)=Kj!x5R|rYXeBO9WaIr}MET(K7G-`=MLPDF^C~ z#qP@;@93m`gbcqKhv?)fvk3~4#?T7(?2MOMiKYwtpF21#G*4S`k7XYHh#{4ufEV`M z(y0_$GLCwfK``YU`~%mk-rLgb_Ky1Ab=pHQwGOVvHjL+jFBg2*>5`+rxv#YG2p>hq z5R;gwogwL|YtnNt{Z_9?^NWBq7SYB~FRXPYton14_SVJ4|Z7K^c%r?!EcXs z5A=L4R<$ZUz6O%~wETB<671p3dd*(jMniZvBZoY#NkHpS2N9?1&w~yk!Q>6y0CKDX z4y<4;=*?J#dx)LF5-H?VUHOhBL=01hrkYA?@vn? zb(-V$@pq4<>FVzObf1^E#jPbSE>6MFFm*@cUI>lsKYnvBEiFAghB~u8%*NW<>S(FG zxU8)E9j!&=J0jY1aaq8a&v4ApD6h5v*DwaxuoU;*<7-4|mjFVYA#F(rei6ZuBF@ob zX_MBR-KlN6_}*5Izw#!6YOMZgH)bA5@cE*)eaAZMUQPY-w{x#e?CtFlSNqK)Lv!<{ z>qCk?u_w|9q~zT)%dI~lLP1Aer0(~yR$P{fvV&$g*gk?8xKRXe)oDsk10NLyf+~hR zFdK_^Ul`zbOR>JCmRU?)jXUz8Bk5ggfBQZq OI@e@~ z?-5l8?`n;0OO=m5wl-|LK=lnKb4q4{_&j~+37wA?LOjIKwAV!MlW}7uC6v>UPvIBa zq(n7j$k7{WDyjymP`MoMs~fg3v f?4GYLZZQ22CxDq0j;QW9+F E21f%J5F$y8g{nrIt0;N4ivEg?+Si9a{ofLVagyoxdS zMqmQEfJxl>@k=eLa(ZU?&!6QB sP5mLj80O%4cAP3iwF@MwcKMiFN>9 zF&%Um>&@wDzs|;EtpgMlOPC @s!p;uIV&+kt4ur+Vav8QIaOZ??6U)Ddc`(YVo!sNJscxDFLxKj?@6@9sECO( zNr8y!W!l`^Yf)z sU_GOc$*x>axBNyi2lGu;=hHTSq+!gj!)C5GqxKz{ zD`2m3Z+?toKT^@ZfQ=i!9n#E_gVTzM&m~v;UpRrD)pIxj?K I)DKTfog3r6;lzN%)brh;Rr2t z0HA(+{a%=z8W`3$>O{&j!&NZk3rS>PO61I`P#pEQ=;z+{z85whc&%2svTydBHEhTL zB}bI)#yw(JHI r~@T@&;k9+pcTM-rv z!|QV6aH2I5ZSs>A@4C ;DAxj|z7wJm0eaQAZ(BCZ7 zDjN8q1TCW#oMGtP$~Vya{R!gxP@kim8vRyIjeXR@5*GG7Y30bj@x#;L9*EV9%V@Sa zA%IW8L#&1dLNV4mpaH&fzc_y%E-|Ef$n~TB?_es@JeE>M@b6NKE&swphfQeWMb-!R z9dq&-xdtD$R2xic(t}_KB?JrlWQM;s+s+;4mv1Q$hIaYs>>OBazbbWR@k~+i?W%9| ziC{)hyX_%XEro2$>a2rfWNd7rlNM-u3Bxm9-~3mpS}m~5q#Ge(URl>?A4u-blc*tq z=YMM18pt! P{9M1&RY?y zzY1K9FM4>Ieiqa%gCj30@Ieh_l8V9aZ1}7ui?2QY%bMTD {=adSNyC5UKt%_eA{4X&d;iU__T*q<`0f{%8eEaWDBKQ9E-w}Q431!QV z5qb?_Yth1?q@?5t2-5}#2$+@Q83_P!m!;rNNw%%E~I1>J+AqM}B;G&G3o9A|ra zDe%FuP%yG{m+PVMx5I(KmTj7Z6TEcM)>l};pOYh)1~t9~j2)&31gsNd0X2ew25E!? z$k>X Qb~<1W;a=F9ndq$-pU |`m56Nif zyq_!GF}Q86Z}dN*L4`qWSEKhc`6N7hlDH4CDq2%p&%rLusH5}VX^46k%I0T9|4Bkw zb*OTY|NQ6|iwoTGp&@2o*28Ul9PWDAUccx!Y2`miJlQ~edR01z5h<^9A!P=mKP8uz zyxvRfm0MkT- f14tN{ zl@KA=sw@%|U`7KqDxvg&k5HIwmj8hSa4w}-?>PI~1l&ydPeD~^yw4pSGF0*}zOiXn zJ;!QW JZ)X21qx2*&ZF&r5p;~}o#LHfZ49r1q_EdynfB#;~@4>#wu_>U+NXC|V zujOd)7U#Ds4qH=cfx{3|=H#upEh-cM{OtRD_mMszWTPg#iYJeHcVP$s6BYC?wob*w z#H9G_?aVN%#+OW4>?@m`zrv2@%1m`UF*kInAFzNCw^x3WK}dv3ETaU4h|M4s#Vsz0 z0!s@c?2u-(Anes0Q>)x;?59ueaQ@u9mBpYRa>2D2&88)Nfas*YfCdMiH33tbI4O~F z3j2TP@4gOSt((5!xEa4!eBYsaYJ7CKx#E_Qv|jYu+N-Xvo({XJHoMxT5GvmIZWQ5a z_~Vx|x37=-H?tqTbbdyJu6QH(;e%c!n9kPt2Rc@*v76&Dul$*S9MFA6VSMeIzKbiQ z-gABb?965T@Apdksp+Lh$Ud@%qM|bq2JUV`Z-!Zcwp4yo0KmR=J8=-+)Ig_IR3z0E zuoQxqf0l|%M0V3bMAFLwYc92z92;Y0zu&`iGil+^Z{cg5)O!V6jdM4+P k2;?|00Qutzd))|)7(lGj~hR H+}WMnJLe+MYz=PxcT-JKEnX`vm{$suHOArKZ8wlwxtPqTlL>uDE*b8`r&6#%SX zPB7NtB#e zJ92SvkxbG)WOwe|`6y%+`Y_wa+f^74kIL3vIxuv=mP0p|N31L&kM7dQIJ-UhJ9RJ{ z$vu7g?QU#e!ML3~X397$?9_F-Axt@p{Xwohb7kcl_}$PnLH^)@iEs@)|CzAIga8=> zWy}c2y~u q zBcA&O>@WBqrbu#>8kQZGZmBEgOr+9uDXFaHI>)b4^2xjVGbq2FI>d4$acAbyz$fkw zy*xpHii8@q**DY|Y&>>I{A`=toX7OpmWVY|xrRgA^`X}zlK1b)i%Xs5I@)|}7ptK+ zkqyT|bkDq%H#54~9zJ@M=j;J%mMLeV4RmKLU>Q{0>f5*IWtq2#aCSm-mGe7vHx4o* z<4($7g3+5FjWXQ;fOybb9=!hjQLoQ0_0Karkp~a%Li8zR@7W!Y0X+ir+e?7?I24GC zihJBQY*oxB=x$;ng{w?#ny%p%r1L)T9(io^9&hFex{t33d(V~fHLYmOcsSDMdO(h5 zSLf^d8e_+Knw+Yay^YcqmX<8T%J7;Rs>{nurvyCR;J7ZtYA-evZ%W^CmW$I*DMDOH z@4wUwCQBb21qDTyoi!fYXSDRus)BDb_W1Z1ET@AbA_O}p5}@*KBLq_pj&B_7Lc#rV zbVkpv4OB-sC)oEI_; rZr>cvHkIzADn1g=mpy#7dEpBmXh{!#!e$ zM2K0`lwrrdR6$qel{kLo_=~ET%s$< 8cpj4Z%n%y$KT+ zupDqExf)xFi@EE2{X=(PZ^c_zB<^}hwuy|43V*M~wK3)+=?^;>Z9ZCwInP={d(EBq za*tc1waWgA&)~+s_!Byth~A+vyIz;_fmzek&8M=T$*rq