From be8c62de7bd400b87e338bdf2493c0184de1ca0c Mon Sep 17 00:00:00 2001 From: Gamerofthegame Date: Sat, 11 Oct 2014 13:58:16 -0400 Subject: [PATCH] Merge --- code/WorkInProgress/Cael_Aislinn/sculpture.dm | 1 - .../Cib/amorph/amorph_attack.dm | 2 - code/_onclick/click.dm | 2 +- code/controllers/master_controller.dm | 3 - code/datums/diseases/appendicitis.dm | 4 - code/defines/procs/announce.dm | 7 +- code/game/dna/genes/disabilities.dm | 8 +- code/game/gamemodes/events/space_ninja.dm | 2 +- .../directives/alien_fraud_directive.dm | 4 +- .../tau_ceti_needs_women_directive.dm | 2 +- code/game/gamemodes/nuclear/nuclear.dm | 4 +- code/game/jobs/job_controller.dm | 2 +- code/game/jobs/whitelist.dm | 1 - code/game/machinery/Sleeper.dm | 3 + code/game/machinery/alarm.dm | 5 ++ code/game/machinery/bioprinter.dm | 3 + code/game/machinery/computer/card.dm | 32 ++++---- code/game/machinery/suit_storage_unit.dm | 12 +-- code/game/mecha/equipment/tools/tools.dm | 11 +-- code/game/mecha/mecha.dm | 19 +++-- code/game/objects/items.dm | 5 +- code/game/objects/items/devices/modkit.dm | 10 +-- code/modules/admin/verbs/vox_raiders.dm | 4 +- code/modules/client/preferences.dm | 32 ++++---- code/modules/client/preferences_gear.dm | 13 +-- code/modules/clothing/clothing.dm | 12 +-- code/modules/clothing/gloves/stungloves.dm | 20 ++--- code/modules/clothing/spacesuits/rig.dm | 16 ++-- code/modules/customitems/item_defines.dm | 3 +- code/modules/games/cards.dm | 74 +++++++++++++++--- code/modules/mob/dead/observer/observer.dm | 9 +-- .../carbon/human/alien/alien_species.dm | 7 +- code/modules/mob/living/carbon/human/human.dm | 2 +- .../living/carbon/human/human_attackhand.dm | 1 - .../mob/living/carbon/human/human_species.dm | 2 +- .../mob/living/carbon/human/inventory.dm | 1 + .../mob/living/carbon/human/species.dm | 28 ++++++- .../mob/living/carbon/human/update_icons.dm | 1 + .../mob/living/carbon/monkey/monkey.dm | 4 +- .../modules/mob/living/silicon/robot/robot.dm | 1 + .../simple_animal/borer/borer_powers.dm | 3 + .../mob/living/simple_animal/simple_animal.dm | 1 - code/modules/mob/mob_grab.dm | 2 + .../mob/new_player/sprite_accessories.dm | 40 +++++----- code/modules/mob/typing_indicator.dm | 19 +++-- code/modules/organs/blood.dm | 2 +- code/modules/organs/organ_alien.dm | 12 ++- code/modules/organs/organ_external.dm | 9 ++- code/modules/organs/organ_internal.dm | 11 +-- code/modules/organs/organ_objects.dm | 8 +- code/modules/paperwork/silicon_photography.dm | 13 ++- .../recycling/disposal-construction.dm | 2 +- .../security levels/security levels.dm | 14 ++-- code/modules/surgery/generic.dm | 15 +++- code/modules/surgery/organs_internal.dm | 18 ++--- code/modules/surgery/surgery.dm | 37 ++++++--- code/modules/virus2/disease2.dm | 2 +- code/unused/hivebot/hivebot.dm | 1 - icons/mob/alien.dmi | Bin 93777 -> 93707 bytes interface/skin.dmf | 2 +- .../escape_shuttle_control_console.tmpl | 2 +- nano/templates/identification_computer.tmpl | 2 +- sound/misc/notice1.ogg | Bin 0 -> 53513 bytes sound/misc/notice2.ogg | Bin 0 -> 6218 bytes 64 files changed, 362 insertions(+), 225 deletions(-) create mode 100644 sound/misc/notice1.ogg create mode 100644 sound/misc/notice2.ogg diff --git a/code/WorkInProgress/Cael_Aislinn/sculpture.dm b/code/WorkInProgress/Cael_Aislinn/sculpture.dm index 2ecc98a4ae..639c2c8487 100644 --- a/code/WorkInProgress/Cael_Aislinn/sculpture.dm +++ b/code/WorkInProgress/Cael_Aislinn/sculpture.dm @@ -26,7 +26,6 @@ G.assailant = src G.layer = 20 G.affecting = target - target.grabbed_by += G G.synch() target.LAssailant = src diff --git a/code/WorkInProgress/Cib/amorph/amorph_attack.dm b/code/WorkInProgress/Cib/amorph/amorph_attack.dm index 188c682033..814b977d1a 100644 --- a/code/WorkInProgress/Cib/amorph/amorph_attack.dm +++ b/code/WorkInProgress/Cib/amorph/amorph_attack.dm @@ -95,7 +95,6 @@ M.r_hand = G G.layer = 20 G.affecting = src - grabbed_by += G G.synch() LAssailant = M @@ -150,7 +149,6 @@ M.r_hand = G G.layer = 20 G.affecting = src - grabbed_by += G G.synch() LAssailant = M diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index adf80b1752..716c30171e 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -116,7 +116,7 @@ if(!resolved && A && W) W.afterattack(A,src,1,params) // 1 indicates adjacency else - UnarmedAttack(A) + UnarmedAttack(A, 1) return if(!isturf(loc)) // This is going to stop you from telekinesing from inside a closet, but I don't shed many tears for that diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm index 8654fb89a1..9b18e24356 100644 --- a/code/controllers/master_controller.dm +++ b/code/controllers/master_controller.dm @@ -121,9 +121,6 @@ datum/controller/game_controller/proc/setup_objects() //Set up spawn points. populate_spawn_points() - //Set up gear list. - populate_gear_list() - //Set up roundstart seed list. populate_seed_list() diff --git a/code/datums/diseases/appendicitis.dm b/code/datums/diseases/appendicitis.dm index a9959ef063..8ab0f1b491 100644 --- a/code/datums/diseases/appendicitis.dm +++ b/code/datums/diseases/appendicitis.dm @@ -23,9 +23,6 @@ src.cure() if(stage == 1) - if(affected_mob.op_stage.appendix == 2.0) - // appendix is removed, can't get infected again - src.cure() if(prob(5)) affected_mob << "\red You feel a stinging pain in your abdomen!" affected_mob.emote("me",1,"winces slightly.") @@ -48,7 +45,6 @@ var/mob/living/carbon/human/H = affected_mob H << "\red Your abdomen is a world of pain!" H.Weaken(10) - H.op_stage.appendix = 2.0 var/datum/organ/external/groin = H.get_organ("groin") var/datum/wound/W = new /datum/wound/internal_bleeding(20) diff --git a/code/defines/procs/announce.dm b/code/defines/procs/announce.dm index 34896cb96b..54bdd95397 100644 --- a/code/defines/procs/announce.dm +++ b/code/defines/procs/announce.dm @@ -1,6 +1,5 @@ /var/datum/announcement/priority/priority_announcement = new(do_log = 0) /var/datum/announcement/priority/command/command_announcement = new(do_log = 0, do_newscast = 1) -/var/datum/announcement/priority/security/security_announcement = new(do_log = 0, do_newscast = 1) /datum/announcement var/title = "Attention" @@ -16,17 +15,17 @@ log = do_log newscast = do_newscast -/datum/announcement/priority/New(var/do_log = 1, var/new_sound = sound('sound/items/AirHorn.ogg'), var/do_newscast = 0) +/datum/announcement/priority/New(var/do_log = 1, var/new_sound = sound('sound/misc/notice2.ogg'), var/do_newscast = 0) ..(do_log, new_sound, do_newscast) title = "Priority Announcement" announcement_type = "Priority Announcement" -/datum/announcement/priority/command/New(var/do_log = 1, var/new_sound = sound('sound/items/AirHorn.ogg'), var/do_newscast = 0) +/datum/announcement/priority/command/New(var/do_log = 1, var/new_sound = sound('sound/misc/notice2.ogg'), var/do_newscast = 0) ..(do_log, new_sound, do_newscast) title = "[command_name()] Update" announcement_type = "[command_name()] Update" -/datum/announcement/priority/security/New(var/do_log = 1, var/new_sound = sound('sound/items/AirHorn.ogg'), var/do_newscast = 0) +/datum/announcement/priority/security/New(var/do_log = 1, var/new_sound = sound('sound/misc/notice2.ogg'), var/do_newscast = 0) ..(do_log, new_sound, do_newscast) title = "Security Announcement" announcement_type = "Security Announcement" diff --git a/code/game/dna/genes/disabilities.dm b/code/game/dna/genes/disabilities.dm index a119a0cf4b..4f78d7f70f 100644 --- a/code/game/dna/genes/disabilities.dm +++ b/code/game/dna/genes/disabilities.dm @@ -32,7 +32,7 @@ M.mutations.Add(mutation) if(disability) M.disabilities|=disability - if(mutation) + if(sdisability) M.sdisabilities|=sdisability if(activation_message) M << "\red [activation_message]" @@ -43,9 +43,9 @@ if(mutation && (mutation in M.mutations)) M.mutations.Remove(mutation) if(disability) - M.disabilities-=disability - if(mutation) - M.sdisabilities-=sdisability + M.disabilities &= (~disability) + if(sdisability) + M.sdisabilities &= (~sdisability) if(deactivation_message) M << "\red [deactivation_message]" else diff --git a/code/game/gamemodes/events/space_ninja.dm b/code/game/gamemodes/events/space_ninja.dm index 5dae9e6e4b..ff8b760bc1 100644 --- a/code/game/gamemodes/events/space_ninja.dm +++ b/code/game/gamemodes/events/space_ninja.dm @@ -415,7 +415,7 @@ As such, it's hard-coded for now. No reason for it not to be, really. if(13) directive += "Some disgruntled NanoTrasen employees have been supportive of our operations. Be wary of any mistreatment by command staff." if(14) - var/xenorace = pick("Unathi","Tajaran", "Skrellian") + var/xenorace = pick("Unathi","Tajara", "Skrell") directive += "A group of [xenorace] radicals have been loyal supporters of the Spider Clan. Favor [xenorace] crew whenever possible." if(15) directive += "The Spider Clan has recently been accused of religious insensitivity. Attempt to speak with the Chaplain and prove these accusations false." diff --git a/code/game/gamemodes/mutiny/directives/alien_fraud_directive.dm b/code/game/gamemodes/mutiny/directives/alien_fraud_directive.dm index 6df5a22050..580322f8e1 100644 --- a/code/game/gamemodes/mutiny/directives/alien_fraud_directive.dm +++ b/code/game/gamemodes/mutiny/directives/alien_fraud_directive.dm @@ -6,7 +6,7 @@ datum/directive/terminations/alien_fraud proc/is_alien(mob/M) var/species = M.get_species() - return species == "Tajaran" || species == "Unathi" + return species == "Tajara" || species == "Unathi" datum/directive/terminations/alien_fraud/get_crew_to_terminate() var/list/aliens[0] @@ -30,7 +30,7 @@ datum/directive/terminations/alien_fraud/meets_prerequisites() var/unathi = 0 for(var/mob/M in player_list) var/species = M.get_species() - if(species == "Tajaran") + if(species == "Tajara") tajarans++ if(species == "Unathi") unathi++ diff --git a/code/game/gamemodes/mutiny/directives/tau_ceti_needs_women_directive.dm b/code/game/gamemodes/mutiny/directives/tau_ceti_needs_women_directive.dm index b70ffd659d..f1aa2e914d 100644 --- a/code/game/gamemodes/mutiny/directives/tau_ceti_needs_women_directive.dm +++ b/code/game/gamemodes/mutiny/directives/tau_ceti_needs_women_directive.dm @@ -28,7 +28,7 @@ datum/directive/tau_ceti_needs_women var/list/aliens[0] for(var/mob/M in get_crew_of_target_gender()) var/species = M.get_species() - if(species == "Tajaran" || species == "Unathi" || species == "Skrell") + if(species == "Tajara" || species == "Unathi" || species == "Skrell") aliens.Add(M) return aliens diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index 911dc58d84..9a7f2e4cdf 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -232,8 +232,8 @@ var/global/list/turf/synd_spawn = list() switch(race) if("Unathi") new_suit.species_restricted = list("Unathi") - if("Tajaran") - new_suit.species_restricted = list("Tajaran") + if("Tajara") + new_suit.species_restricted = list("Tajara") if("Skrell") new_suit.species_restricted = list("Skrell") diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index 0400d58689..16ae2f5e54 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -480,7 +480,7 @@ var/global/datum/controller/occupations/job_master //TODO: Generalize this by-species if(H.species) - if(H.species.name == "Tajaran" || H.species.name == "Unathi") + if(H.species.name == "Tajara" || H.species.name == "Unathi") H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H),slot_shoes,1) else if(H.species.name == "Vox") H.equip_to_slot_or_del(new /obj/item/clothing/mask/breath(H), slot_wear_mask) diff --git a/code/game/jobs/whitelist.dm b/code/game/jobs/whitelist.dm index f8f3ee80a2..f1dc546aea 100644 --- a/code/game/jobs/whitelist.dm +++ b/code/game/jobs/whitelist.dm @@ -46,7 +46,6 @@ var/list/whitelist = list() return 1 if(findtext(s,"[M.ckey] - All")) return 1 - return 0 #undef WHITELISTFILE diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 00d5997814..5baa918911 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -311,6 +311,9 @@ M:reagents.add_reagent("inaprovaline", 5) return proc/toggle_filter() + if(!src.occupant) + filtering = 0 + return if(filtering) filtering = 0 else diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index 874d66560a..1e53a770ab 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -1310,6 +1310,11 @@ FIRE ALARM user.visible_message("\red [user] has reconnected [src]'s detecting unit!", "You have reconnected [src]'s detecting unit.") else user.visible_message("\red [user] has disconnected [src]'s detecting unit!", "You have disconnected [src]'s detecting unit.") + else if (istype(W, /obj/item/weapon/wirecutters)) + user.visible_message("\red [user] has cut the wires inside \the [src]!", "You have cut the wires inside \the [src].") + playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) + buildstage = 1 + update_icon() if(1) if(istype(W, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/C = W diff --git a/code/game/machinery/bioprinter.dm b/code/game/machinery/bioprinter.dm index 4ce50d404c..a0ac4258cc 100644 --- a/code/game/machinery/bioprinter.dm +++ b/code/game/machinery/bioprinter.dm @@ -5,6 +5,9 @@ desc = "It's a machine that grows replacement organs." icon = 'icons/obj/surgery.dmi' + anchored = 1 + density = 1 + icon_state = "bioprinter" var/prints_prosthetics diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm index b40f511a3b..9341aca674 100644 --- a/code/game/machinery/computer/card.dm +++ b/code/game/machinery/computer/card.dm @@ -11,24 +11,24 @@ var/mode = 0.0 var/printing = null - proc/is_centcom() - return istype(src, /obj/machinery/computer/card/centcom) +/obj/machinery/computer/card/proc/is_centcom() + return 0 - proc/is_authenticated() - return scan ? check_access(scan) : 0 +/obj/machinery/computer/card/proc/is_authenticated() + return scan ? check_access(scan) : 0 - proc/get_target_rank() - return modify && modify.assignment ? modify.assignment : "Unassigned" +/obj/machinery/computer/card/proc/get_target_rank() + return modify && modify.assignment ? modify.assignment : "Unassigned" - proc/format_jobs(list/jobs) - var/list/formatted = list() - for(var/job in jobs) - formatted.Add(list(list( - "display_name" = replacetext(job, " ", " "), - "target_rank" = get_target_rank(), - "job" = job))) +/obj/machinery/computer/card/proc/format_jobs(list/jobs) + var/list/formatted = list() + for(var/job in jobs) + formatted.Add(list(list( + "display_name" = replacetext(job, " ", " "), + "target_rank" = get_target_rank(), + "job" = job))) - return formatted + return formatted /obj/machinery/computer/card/verb/eject_id() set category = "Object" @@ -288,3 +288,7 @@ name = "CentCom Identification Computer" circuit = "/obj/item/weapon/circuitboard/card/centcom" req_access = list(access_cent_captain) + + +/obj/machinery/computer/card/centcom/is_centcom() + return 1 diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index 3f0b744889..8fc6fa3599 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -602,7 +602,7 @@ //Departments that the cycler can paint suits to look like. var/list/departments = list("Engineering","Mining","Medical","Security","Atmos") //Species that the suits can be configured to fit. - var/list/species = list("Human","Skrell","Unathi","Tajaran") + var/list/species = list("Human","Skrell","Unathi","Tajara") var/target_department var/target_species @@ -622,35 +622,35 @@ model_text = "Engineering" req_access = list(access_construction) departments = list("Engineering","Atmos") - species = list("Human","Tajaran","Skrell","Unathi") //Add Unathi when sprites exist for their suits. + species = list("Human","Tajara","Skrell","Unathi") //Add Unathi when sprites exist for their suits. /obj/machinery/suit_cycler/mining name = "Mining suit cycler" model_text = "Mining" req_access = list(access_mining) departments = list("Mining") - species = list("Human","Tajaran","Skrell","Unathi") + species = list("Human","Tajara","Skrell","Unathi") /obj/machinery/suit_cycler/security name = "Security suit cycler" model_text = "Security" req_access = list(access_security) departments = list("Security") - species = list("Human","Tajaran","Skrell","Unathi") + species = list("Human","Tajara","Skrell","Unathi") /obj/machinery/suit_cycler/medical name = "Medical suit cycler" model_text = "Medical" req_access = list(access_medical) departments = list("Medical") - species = list("Human","Tajaran","Skrell","Unathi") + species = list("Human","Tajara","Skrell","Unathi") /obj/machinery/suit_cycler/syndicate name = "Nonstandard suit cycler" model_text = "Nonstandard" req_access = list(access_syndicate) departments = list("Mercenary") - species = list("Human","Tajaran","Skrell","Unathi") + species = list("Human","Tajara","Skrell","Unathi") can_repair = 1 /obj/machinery/suit_cycler/attack_ai(mob/user as mob) diff --git a/code/game/mecha/equipment/tools/tools.dm b/code/game/mecha/equipment/tools/tools.dm index 1164c342ff..2adf280a6b 100644 --- a/code/game/mecha/equipment/tools/tools.dm +++ b/code/game/mecha/equipment/tools/tools.dm @@ -1136,16 +1136,13 @@ M.verbs -= /obj/mecha/proc/move_inside_passenger /obj/item/mecha_parts/mecha_equipment/tool/passenger/get_equip_info() - var/output = ..() - if(output) - var/temp = "
[occupant? "\[Occupant: [occupant]\]|" : ""]Exterior Hatch: [door_locked? "Locked" : "Unlocked"]" - return "[output] [temp]" - return + return "[..()]
[occupant? "\[Occupant: [occupant]\]|" : ""]Exterior Hatch: Toggle Lock" /obj/item/mecha_parts/mecha_equipment/tool/passenger/Topic(href,href_list) ..() if (href_list["toggle_lock"]) door_locked = !door_locked + occupant_message("Passenger compartment hatch [door_locked? "locked" : "unlocked"].") if (chassis) chassis.visible_message("The hatch on \the [chassis] [door_locked? "locks" : "unlocks"].", "You hear something latching.") @@ -1200,6 +1197,4 @@ if (OCCUPIED|LOCKED) usr << "\red All of the passenger compartments are already occupied or locked!" if (0) - usr << "\red \The [src] doesn't have a passenger compartment." - -/obj/mecha/proc/remove_passenger() + usr << "\red \The [src] doesn't have a passenger compartment." \ No newline at end of file diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 3f662e4411..51352e3afb 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -1575,14 +1575,19 @@ var/pname = input(user, "Choose a passenger to forcibly remove.", "Forcibly Remove Passenger") as null|anything in passengers - if (pname) - var/obj/item/mecha_parts/mecha_equipment/tool/passenger/P = passengers[pname] - var/mob/occupant = P.occupant + if (!pname) + return - visible_message("\red [user] opens the hatch on \the [P] and removes [occupant]!") - P.go_out() - P.log_message("[occupant] was removed.") - occupant_message("\red [occupant] was removed from \the [P] by [user]!") + var/obj/item/mecha_parts/mecha_equipment/tool/passenger/P = passengers[pname] + var/mob/occupant = P.occupant + + user.visible_message("\red [user] begins opening the hatch on \the [P]...", "\red You begin opening the hatch on \the [P]...") + if (!do_after(user, 40, needhand=0)) + return + + user.visible_message("\red [user] opens the hatch on \the [P] and removes [occupant]!", "\red You open the hatch on \the [P] and remove [occupant]!") + P.go_out() + P.log_message("[occupant] was removed.") return if(href_list["add_req_access"] && add_req_access && filter.getObj("id_card")) if(!in_range(src, usr)) return diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index c121bf746f..80f1fcb8e5 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -44,7 +44,7 @@ /* Species-specific sprites, concept stolen from Paradise//vg/. ex: sprite_sheets = list( - "Tajaran" = 'icons/cat/are/bad' + "Tajara" = 'icons/cat/are/bad' ) If index term exists and icon_override is not set, this sprite sheet will be used. */ @@ -261,6 +261,9 @@ //START HUMAN var/mob/living/carbon/human/H = M + if(H.species && !(slot in H.species.hud.equip_slots)) + return 0 + switch(slot) if(slot_l_hand) if(H.l_hand) diff --git a/code/game/objects/items/devices/modkit.dm b/code/game/objects/items/devices/modkit.dm index 02d11f2251..819583ef23 100644 --- a/code/game/objects/items/devices/modkit.dm +++ b/code/game/objects/items/devices/modkit.dm @@ -17,7 +17,7 @@ /obj/item/device/modkit/afterattack(obj/O, mob/user as mob, proximity) if(!proximity) return - + if (!target_species) return //it shouldn't be null, okay? @@ -31,12 +31,12 @@ for (var/permitted_type in permitted_types) if(istype(O, permitted_type)) allowed = 1 - + var/obj/item/clothing/I = O if (!istype(I) || !allowed) user << "[src] is unable to modify that." return - + var/excluding = ("exclude" in I.species_restricted) var/in_list = (target_species in I.species_restricted) if (excluding ^ in_list) @@ -57,7 +57,7 @@ parts &= ~MODKIT_HELMET if (istype(I, /obj/item/clothing/suit)) parts &= ~MODKIT_SUIT - + if(!parts) user.drop_from_inventory(src) del(src) @@ -69,4 +69,4 @@ /obj/item/device/modkit/tajaran name = "tajaran hardsuit modification kit" desc = "A kit containing all the needed tools and parts to modify a hardsuit for another user. This one looks like it's meant for Tajaran." - target_species = "Tajaran" \ No newline at end of file + target_species = "Tajara" \ No newline at end of file diff --git a/code/modules/admin/verbs/vox_raiders.dm b/code/modules/admin/verbs/vox_raiders.dm index d023f20782..6676acec32 100644 --- a/code/modules/admin/verbs/vox_raiders.dm +++ b/code/modules/admin/verbs/vox_raiders.dm @@ -14,7 +14,7 @@ var/global/vox_tick = 1 if(1) // Vox raider! equip_to_slot_or_del(new /obj/item/clothing/suit/space/vox/carapace(src), slot_wear_suit) equip_to_slot_or_del(new /obj/item/clothing/head/helmet/space/vox/carapace(src), slot_head) - equip_to_slot_or_del(new /obj/item/weapon/melee/telebaton(src), slot_belt) + equip_to_slot_or_del(new /obj/item/weapon/melee/baton/loaded(src), slot_belt) equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/monocle(src), slot_glasses) // REPLACE WITH CODED VOX ALTERNATIVE. equip_to_slot_or_del(new /obj/item/device/chameleon(src), slot_l_store) @@ -66,4 +66,4 @@ var/global/vox_tick = 1 vox_tick++ if (vox_tick > 4) vox_tick = 1 - return 1 \ No newline at end of file + return 1 diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index ae333eb8dd..f00a8a9e6e 100755 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -277,15 +277,15 @@ datum/preferences dat += "
Custom Loadout: " var/total_cost = 0 - if(isnull(gear) || !islist(gear)) gear = list() + if(!islist(gear)) gear = list() if(gear && gear.len) dat += "
" - for(var/gear_name in gear) - if(gear_datums[gear_name]) - var/datum/gear/G = gear_datums[gear_name] + for(var/i = 1; i <= gear.len; i++) + var/datum/gear/G = gear_datums[gear[i]] + if(G) total_cost += G.cost - dat += "[gear_name] \[remove\]
" + dat += "[gear[i]] ([G.cost] points) \[remove\]
" dat += "Used: [total_cost] points." else @@ -294,7 +294,7 @@ datum/preferences if(total_cost < MAX_GEAR_COST) dat += " \[add\]" if(gear && gear.len) - dat += " \[remove\]" + dat += " \[clear\]" dat += "

Occupation Choices
" dat += "\tSet Preferences
" @@ -882,17 +882,17 @@ datum/preferences total_cost += C.cost if(C && total_cost <= MAX_GEAR_COST) gear += choice - user << "\blue Added [choice] for [C.cost] points ([MAX_GEAR_COST - total_cost] points remaining)." + user << "Added \the '[choice]' for [C.cost] points ([MAX_GEAR_COST - total_cost] points remaining)." else - user << "\red That item will exceed the maximum loadout cost of [MAX_GEAR_COST] points." + user << "Adding \the '[choice]' will exceed the maximum loadout cost of [MAX_GEAR_COST] points." else if(href_list["task"] == "remove") - var/to_remove = href_list["gear"] - if(!to_remove) return - for(var/gear_name in gear) - if(gear_name == to_remove) - gear -= gear_name - break + var/i_remove = text2num(href_list["gear"]) + if(i_remove < 1 || i_remove > gear.len) return + gear.Cut(i_remove, i_remove + 1) + + else if(href_list["task"] == "clear") + gear.Cut() else if(href_list["preference"] == "flavor_text") switch(href_list["task"]) @@ -1187,7 +1187,7 @@ datum/preferences b_type = new_b_type if("hair") - if(species == "Human" || species == "Unathi" || species == "Tajaran" || species == "Skrell") + if(species == "Human" || species == "Unathi" || species == "Tajara" || species == "Skrell") var/new_hair = input(user, "Choose your character's hair colour:", "Character Preference") as color|null if(new_hair) r_hair = hex2num(copytext(new_hair, 2, 4)) @@ -1267,7 +1267,7 @@ datum/preferences s_tone = 35 - max(min( round(new_s_tone), 220),1) if("skin") - if(species == "Unathi" || species == "Tajaran" || species == "Skrell") + if(species == "Unathi" || species == "Tajara" || species == "Skrell") var/new_skin = input(user, "Choose your character's skin colour: ", "Character Preference") as color|null if(new_skin) r_skin = hex2num(copytext(new_skin, 2, 4)) diff --git a/code/modules/client/preferences_gear.dm b/code/modules/client/preferences_gear.dm index 240f6602a3..5f2a5880cb 100644 --- a/code/modules/client/preferences_gear.dm +++ b/code/modules/client/preferences_gear.dm @@ -1,9 +1,10 @@ var/global/list/gear_datums = list() -proc/populate_gear_list() +/hook/startup/proc/populate_gear_list() for(var/type in typesof(/datum/gear)-/datum/gear) var/datum/gear/G = new type() gear_datums[G.display_name] = G + return 1 /datum/gear var/display_name //Name/index. @@ -176,12 +177,14 @@ proc/populate_gear_list() cost = 2 slot = slot_head +// This was sprited and coded specifically for Zhan-Khazan characters. Before you +// decide that it's 'not even Taj themed' maybe you should read the wiki, gamer. ~ Z /datum/gear/zhan_scarf - display_name = "headscarf, white" + display_name = "Zhan headscarf" path = /obj/item/clothing/head/tajaran/scarf cost = 2 slot = slot_head -// whitelisted = "Tajaran" // It's a headscarf. It isn't even a taj-themed headscarf! + whitelisted = "Tajara" // Eyes @@ -459,7 +462,7 @@ proc/populate_gear_list() path = /obj/item/clothing/suit/tajaran/furs cost = 3 slot = slot_wear_suit - whitelisted = "Tajaran" // You do have a monopoly on a fur suit tho + whitelisted = "Tajara" // You do have a monopoly on a fur suit tho // Gloves @@ -653,4 +656,4 @@ proc/populate_gear_list() /datum/gear/comb display_name = "purple comb" path = /obj/item/weapon/fluff/cado_keppel_1 - cost = 2 \ No newline at end of file + cost = 2 diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index fa4dad398d..232fd91dad 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -44,7 +44,7 @@ //Set species_restricted list switch(target_species) if("Human", "Skrell") //humanoid bodytypes - species_restricted = list("exclude","Unathi","Tajaran","Diona","Vox") + species_restricted = list("exclude","Unathi","Tajara","Diona","Vox") else species_restricted = list(target_species) @@ -63,9 +63,9 @@ //Set species_restricted list switch(target_species) if("Skrell") - species_restricted = list("exclude","Unathi","Tajaran","Diona","Vox") + species_restricted = list("exclude","Unathi","Tajara","Diona","Vox") if("Human") - species_restricted = list("exclude","Skrell","Unathi","Tajaran","Diona","Vox") + species_restricted = list("exclude","Skrell","Unathi","Tajara","Diona","Vox") else species_restricted = list(target_species) @@ -177,7 +177,7 @@ BLIND // can't see anything body_parts_covered = HANDS slot_flags = SLOT_GLOVES attack_verb = list("challenged") - species_restricted = list("exclude","Unathi","Tajaran") + species_restricted = list("exclude","Unathi","Tajara") sprite_sheets = list("Vox" = 'icons/mob/species/vox/gloves.dmi') /obj/item/clothing/gloves/examine() @@ -214,7 +214,7 @@ BLIND // can't see anything desc = "[desc]
They have had the fingertips cut off of them." if("exclude" in species_restricted) species_restricted -= "Unathi" - species_restricted -= "Tajaran" + species_restricted -= "Tajara" return //Head @@ -248,7 +248,7 @@ BLIND // can't see anything permeability_coefficient = 0.50 slowdown = SHOES_SLOWDOWN - species_restricted = list("exclude","Unathi","Tajaran") + species_restricted = list("exclude","Unathi","Tajara") sprite_sheets = list("Vox" = 'icons/mob/species/vox/shoes.dmi') //Suit diff --git a/code/modules/clothing/gloves/stungloves.dm b/code/modules/clothing/gloves/stungloves.dm index c40ff3e80c..976b16e7e6 100644 --- a/code/modules/clothing/gloves/stungloves.dm +++ b/code/modules/clothing/gloves/stungloves.dm @@ -3,29 +3,29 @@ user << "That won't work." //i'm not putting my lips on that! ..() return - + //add wires if(istype(W, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/C = W if (clipped) user << "The [src] are too badly mangled for wiring." return - + if(wired) user << "The [src] are already wired." return - + if(C.get_amount() < 2) user << "There is not enough wire to cover the [src]." return - + C.use(2) wired = 1 siemens_coefficient = 3.0 user << "You wrap some wires around the [src]." update_icon() return - + //add cell else if(istype(W, /obj/item/weapon/cell)) if(!wired) @@ -56,26 +56,26 @@ user << "You cut the wires away from the [src]." update_icon() return - + //clipping fingertips if(!clipped) playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1) user.visible_message("\red [user] cuts the fingertips off of the [src].","\red You cut the fingertips off of the [src].") - + clipped = 1 name = "mangled [name]" desc = "[desc]
They have had the fingertips cut off of them." if("exclude" in species_restricted) species_restricted -= "Unathi" - species_restricted -= "Tajaran" + species_restricted -= "Tajara" return else user << "The [src] have already been clipped!" update_icon() return - + return - + ..() /obj/item/clothing/gloves/update_icon() diff --git a/code/modules/clothing/spacesuits/rig.dm b/code/modules/clothing/spacesuits/rig.dm index a8017a95da..4fef9c1958 100644 --- a/code/modules/clothing/spacesuits/rig.dm +++ b/code/modules/clothing/spacesuits/rig.dm @@ -14,15 +14,15 @@ max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE //Species-specific stuff. - species_restricted = list("exclude","Unathi","Tajaran","Skrell","Diona","Vox") + species_restricted = list("exclude","Unathi","Tajara","Skrell","Diona","Vox") sprite_sheets_refit = list( "Unathi" = 'icons/mob/species/unathi/helmet.dmi', - "Tajaran" = 'icons/mob/species/tajaran/helmet.dmi', + "Tajara" = 'icons/mob/species/tajaran/helmet.dmi', "Skrell" = 'icons/mob/species/skrell/helmet.dmi', ) sprite_sheets_obj = list( "Unathi" = 'icons/obj/clothing/species/unathi/hats.dmi', - "Tajaran" = 'icons/obj/clothing/species/tajaran/hats.dmi', + "Tajara" = 'icons/obj/clothing/species/tajaran/hats.dmi', "Skrell" = 'icons/obj/clothing/species/skrell/hats.dmi', ) @@ -64,15 +64,15 @@ heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE - species_restricted = list("exclude","Unathi","Tajaran","Diona","Vox") + species_restricted = list("exclude","Unathi","Tajara","Diona","Vox") sprite_sheets_refit = list( "Unathi" = 'icons/mob/species/unathi/suit.dmi', - "Tajaran" = 'icons/mob/species/tajaran/suit.dmi', + "Tajara" = 'icons/mob/species/tajaran/suit.dmi', "Skrell" = 'icons/mob/species/skrell/suit.dmi', ) sprite_sheets_obj = list( "Unathi" = 'icons/obj/clothing/species/unathi/suits.dmi', - "Tajaran" = 'icons/obj/clothing/species/tajaran/suits.dmi', + "Tajara" = 'icons/obj/clothing/species/tajaran/suits.dmi', "Skrell" = 'icons/obj/clothing/species/skrell/suits.dmi', ) @@ -364,7 +364,7 @@ armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 35, bio = 100, rad = 60) siemens_coefficient = 0.6 var/obj/machinery/camera/camera - species_restricted = list("exclude","Unathi","Tajaran","Skrell","Vox") + species_restricted = list("exclude","Unathi","Tajara","Skrell","Vox") /obj/item/clothing/head/helmet/space/rig/syndi/attack_self(mob/user) @@ -392,7 +392,7 @@ armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 60) allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs) siemens_coefficient = 0.6 - species_restricted = list("exclude","Unathi","Tajaran","Skrell","Vox") + species_restricted = list("exclude","Unathi","Tajara","Skrell","Vox") //Wizard Rig diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index 913b312d2c..bb875baff5 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -1005,8 +1005,9 @@ desc = "A well maintained uniform from one of the many Private Security firms Nanotrasen hires from. The name Harper is printed on the back." icon = 'icons/obj/custom_items.dmi' icon_state = "harper_uniform" - item_state = "harper_uniform" + item_state = "jensensuit" item_color = "harper_uniform" + body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS //////////////////// Layla's Dress - Layla Davies-Halabi - sabirm /////////////// diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm index 60adf1e704..39128c4568 100644 --- a/code/modules/games/cards.dm +++ b/code/modules/games/cards.dm @@ -57,7 +57,7 @@ set category = "Object" set name = "Draw" set desc = "Draw a card from a deck." - set src in oview(1) + set src in view(1) if(usr.stat || !Adjacent(usr)) return @@ -93,6 +93,7 @@ set category = "Object" set name = "Deal" set desc = "Deal a card from a deck." + set src in view(1) if(usr.stat || !Adjacent(usr)) return @@ -101,28 +102,35 @@ return var/list/players = list() - for(var/mob/living/player in orange(3)) + for(var/mob/living/player in viewers(3)) if(!player.stat) players += player - players -= usr + //players -= usr var/mob/living/M = input("Who do you wish to deal a card?") as null|anything in players if(!usr || !src || !M) return - var/obj/item/weapon/hand/H = new(get_turf(src)) + deal_at(usr, M) + +/obj/item/weapon/deck/proc/deal_at(mob/user, mob/target) + var/obj/item/weapon/hand/H = new(get_step(user, user.dir)) H.cards += cards[1] cards -= cards[1] H.concealed = 1 H.update_icon() - usr.visible_message("\The [usr] deals a card to \the [M].") - H.throw_at(get_step(M,M.dir),10,1,H) + if(user==target) + user.visible_message("\The [user] deals a card to \himself.") + else + user.visible_message("\The [user] deals a card to \the [target].") + H.throw_at(get_step(target,target.dir),10,1,H) /obj/item/weapon/hand/attackby(obj/O as obj, mob/user as mob) if(istype(O,/obj/item/weapon/hand)) var/obj/item/weapon/hand/H = O for(var/datum/playingcard/P in H.cards) cards += P + src.concealed = H.concealed del(O) user.put_in_hands(src) update_icon() @@ -139,6 +147,18 @@ cards = newcards user.visible_message("\The [user] shuffles [src].") +/obj/item/weapon/deck/MouseDrop(atom/over) + if(!usr || !over) return + if(!Adjacent(usr) || !over.Adjacent(usr)) return // should stop you from dragging through windows + + if(!ishuman(over) || !(over in viewers(3))) return + + if(!cards.len) + usr << "There are no cards in the deck." + return + + deal_at(usr, over) + /obj/item/weapon/hand name = "hand of cards" desc = "Some playing cards." @@ -170,6 +190,7 @@ cards -= card H.concealed = 0 H.update_icon() + src.update_icon() usr.visible_message("\The [usr] plays \the [discarding].") H.loc = get_step(usr,usr.dir) @@ -188,7 +209,7 @@ for(var/datum/playingcard/P in cards) usr << "The [P.name]." -/obj/item/weapon/hand/update_icon() +/obj/item/weapon/hand/update_icon(var/direction = 0) if(!cards.len) del(src) @@ -211,12 +232,43 @@ overlays += I return - var/origin = -12 - var/offset = Floor(32/cards.len) + var/offset = Floor(20/cards.len) + var/matrix/M = matrix() + if(direction) + switch(direction) + if(NORTH) + M.Translate( 0, 0) + if(SOUTH) + M.Translate( 0, 4) + if(WEST) + M.Turn(90) + M.Translate( 3, 0) + if(EAST) + M.Turn(90) + M.Translate(-2, 0) var/i = 0 for(var/datum/playingcard/P in cards) var/image/I = new(src.icon, (concealed ? "card_back" : "[P.card_icon]") ) - I.pixel_x = origin+(offset*i) + //I.pixel_x = origin+(offset*i) + switch(direction) + if(SOUTH) + I.pixel_x = 8-(offset*i) + if(WEST) + I.pixel_y = -6+(offset*i) + if(EAST) + I.pixel_y = 8-(offset*i) + else + I.pixel_x = -7+(offset*i) + I.transform = M overlays += I - i++ \ No newline at end of file + i++ + +/obj/item/weapon/hand/dropped(mob/user as mob) + if(locate(/obj/structure/table, loc)) + src.update_icon(user.dir) + else + update_icon() + +/obj/item/weapon/hand/pickup(mob/user as mob) + src.update_icon() \ No newline at end of file diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 83b0616aea..5e6bd3cba1 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -179,6 +179,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp /mob/dead/observer/Move(NewLoc, direct) + following = null dir = direct if(NewLoc) loc = NewLoc @@ -306,6 +307,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp usr << "No area available." usr.loc = pick(L) + following = null /mob/dead/observer/verb/follow() set category = "Ghost" @@ -325,18 +327,14 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp following = target src << "\blue Now following [target]" spawn(0) - var/turf/pos = get_turf(src) - while(loc == pos && target && following == target && client) + while(target && following == target && client) var/turf/T = get_turf(target) if(!T) break // To stop the ghost flickering. if(loc != T) loc = T - pos = loc sleep(15) - following = null - /mob/dead/observer/verb/jumptomob() //Moves the ghost instead of just changing the ghosts's eye -Nodrak set category = "Ghost" @@ -361,6 +359,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(T && isturf(T)) //Make sure the turf exists, then move the source to that destination. A.loc = T + following = null else A << "This mob is not located in the game world." /* diff --git a/code/modules/mob/living/carbon/human/alien/alien_species.dm b/code/modules/mob/living/carbon/human/alien/alien_species.dm index fc7d589cd9..b592c6292b 100644 --- a/code/modules/mob/living/carbon/human/alien/alien_species.dm +++ b/code/modules/mob/living/carbon/human/alien/alien_species.dm @@ -1,6 +1,8 @@ //Stand-in until this is made more lore-friendly. /datum/species/xenos name = "Xenomorph" + name_plural = "Xenomorphs" + default_language = "Xenomorph" language = "Hivemind" unarmed_type = /datum/unarmed_attack/claws/strong @@ -40,7 +42,6 @@ has_organ = list( "heart" = /datum/organ/internal/heart, - "lungs" = /datum/organ/internal/lungs, "brain" = /datum/organ/internal/brain/xeno, "plasma vessel" = /datum/organ/internal/xenos/plasmavessel, "hive node" = /datum/organ/internal/xenos/hivenode, @@ -116,7 +117,6 @@ has_organ = list( "heart" = /datum/organ/internal/heart, - "lungs" = /datum/organ/internal/lungs, "brain" = /datum/organ/internal/brain/xeno, "plasma vessel" = /datum/organ/internal/xenos/plasmavessel/queen, "acid gland" = /datum/organ/internal/xenos/acidgland, @@ -155,7 +155,6 @@ has_organ = list( "heart" = /datum/organ/internal/heart, - "lungs" = /datum/organ/internal/lungs, "brain" = /datum/organ/internal/brain/xeno, "plasma vessel" = /datum/organ/internal/xenos/plasmavessel/hunter, "hive node" = /datum/organ/internal/xenos/hivenode, @@ -183,7 +182,6 @@ has_organ = list( "heart" = /datum/organ/internal/heart, - "lungs" = /datum/organ/internal/lungs, "brain" = /datum/organ/internal/brain/xeno, "plasma vessel" = /datum/organ/internal/xenos/plasmavessel/sentinel, "acid gland" = /datum/organ/internal/xenos/acidgland, @@ -214,7 +212,6 @@ has_organ = list( "heart" = /datum/organ/internal/heart, - "lungs" = /datum/organ/internal/lungs, "brain" = /datum/organ/internal/brain/xeno, "egg sac" = /datum/organ/internal/xenos/eggsac, "plasma vessel" = /datum/organ/internal/xenos/plasmavessel/queen, diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index c8294d7358..7194eba099 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1210,7 +1210,7 @@ src << msg organ.take_damage(rand(1,3), 0, 0) - if(!(organ.status & ORGAN_ROBOT)) //There is no blood in protheses. + if(!(organ.status & ORGAN_ROBOT) && !(species.flags & NO_BLOOD)) //There is no blood in protheses. organ.status |= ORGAN_BLEEDING src.adjustToxLoss(rand(1,3)) diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm index 46e70c06ac..b8030886c3 100644 --- a/code/modules/mob/living/carbon/human/human_attackhand.dm +++ b/code/modules/mob/living/carbon/human/human_attackhand.dm @@ -102,7 +102,6 @@ if(!G) //the grab will delete itself in New if affecting is anchored return M.put_in_active_hand(G) - grabbed_by += G G.synch() LAssailant = M diff --git a/code/modules/mob/living/carbon/human/human_species.dm b/code/modules/mob/living/carbon/human/human_species.dm index c313c6015e..051ef214f4 100644 --- a/code/modules/mob/living/carbon/human/human_species.dm +++ b/code/modules/mob/living/carbon/human/human_species.dm @@ -12,7 +12,7 @@ /mob/living/carbon/human/tajaran/New(var/new_loc) h_style = "Tajaran Ears" - ..(new_loc, "Tajaran") + ..(new_loc, "Tajara") /mob/living/carbon/human/unathi/New(var/new_loc) h_style = "Unathi Horns" diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index 6178cddf3c..27883d145e 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -687,6 +687,7 @@ It can still be worn/put on as normal. for (var/obj/item/weapon/grab/G in target.grabbed_by) if (G.loc == source && G.state >= GRAB_AGGRESSIVE) grabbing = 1 + break if (!grabbing) slot_to_process = null source << "\red Your grasp was broken before you could restrain [target]!" diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 917251731d..bc94620069 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -5,6 +5,7 @@ /datum/species var/name // Species name. + var/name_plural var/icobase = 'icons/mob/human_races/r_human.dmi' // Normal icon set. var/deform = 'icons/mob/human_races/r_def_human.dmi' // Mutated icon set. @@ -202,6 +203,7 @@ /datum/species/human name = "Human" + name_plural = "Humans" language = "Sol Common" primitive = /mob/living/carbon/monkey unarmed_type = /datum/unarmed_attack/punch @@ -213,6 +215,7 @@ /datum/species/unathi name = "Unathi" + name_plural = "Unathi" icobase = 'icons/mob/human_races/r_lizard.dmi' deform = 'icons/mob/human_races/r_def_lizard.dmi' language = "Sinta'unathi" @@ -239,7 +242,8 @@ base_color = "#066000" /datum/species/tajaran - name = "Tajaran" + name = "Tajara" + name_plural = "Tajaran" icobase = 'icons/mob/human_races/r_tajaran.dmi' deform = 'icons/mob/human_races/r_def_tajaran.dmi' language = "Siik'tajr" @@ -264,6 +268,7 @@ /datum/species/skrell name = "Skrell" + name_plural = "Skrell" icobase = 'icons/mob/human_races/r_skrell.dmi' deform = 'icons/mob/human_races/r_def_skrell.dmi' language = "Skrellian" @@ -278,6 +283,7 @@ /datum/species/vox name = "Vox" + name_plural = "Vox" icobase = 'icons/mob/human_races/r_vox.dmi' deform = 'icons/mob/human_races/r_def_vox.dmi' default_language = "Vox-pidgin" @@ -324,6 +330,7 @@ /datum/species/vox/armalis name = "Vox Armalis" + name_plural = "Vox" icobase = 'icons/mob/human_races/r_armalis.dmi' deform = 'icons/mob/human_races/r_armalis.dmi' rarity_value = 10 @@ -364,6 +371,7 @@ /datum/species/diona name = "Diona" + name_plural = "Dionaea" icobase = 'icons/mob/human_races/r_diona.dmi' deform = 'icons/mob/human_races/r_def_plant.dmi' language = "Rootspeak" @@ -428,6 +436,8 @@ /datum/species/machine name = "Machine" + name_plural = "machines" + icobase = 'icons/mob/human_races/r_machine.dmi' deform = 'icons/mob/human_races/r_machine.dmi' language = "Tradeband" @@ -551,6 +561,7 @@ var/has_throw = 1 // Set to draw throw button. var/has_resist = 1 // Set to draw resist button. var/has_internals = 1 // Set to draw the internals toggle button. + var/list/equip_slots = list() // Checked by mob_can_equip(). // Contains information on the position and tag for all inventory slots // to be drawn for the mob. This is fairly delicate, try to avoid messing with it @@ -572,3 +583,18 @@ "storage2" = list("loc" = ui_storage2, "slot" = slot_r_store, "state" = "pocket"), "belt" = list("loc" = ui_belt, "slot" = slot_belt, "state" = "belt") ) + +/datum/hud_data/New() + ..() + for(var/slot in gear) + equip_slots |= gear[slot]["slot"] + + if(has_hands) + equip_slots |= slot_l_hand + equip_slots |= slot_r_hand + equip_slots |= slot_handcuffed + + if(slot_back in equip_slots) + equip_slots |= slot_in_backpack + + equip_slots |= slot_legcuffed \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index a49760a527..f3a13b6035 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -177,6 +177,7 @@ var/global/list/damage_icon_parts = list() proc/get_damage_icon_part(damage_state, body_part) if(damage_icon_parts["[damage_state]/[body_part]"] == null) var/icon/DI = new /icon('icons/mob/dam_human.dmi', damage_state) // the damage icon for whole human + // TODO: Convert dam_human.dmi to greyscale and blend in species.blood_colour here. DI.Blend(new /icon('icons/mob/dam_mask.dmi', body_part), ICON_MULTIPLY) // mask with this organ's pixels damage_icon_parts["[damage_state]/[body_part]"] = DI return DI diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index a38ba9c695..4371c68f8f 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -94,7 +94,7 @@ ..() dna.mutantrace = "tajaran" - greaterform = "Tajaran" + greaterform = "Tajara" add_language("Siik'tajr") /mob/living/carbon/monkey/movement_delay() @@ -231,7 +231,6 @@ M.put_in_active_hand(G) - grabbed_by += G G.synch() LAssailant = M @@ -256,6 +255,7 @@ return /mob/living/carbon/monkey/attack_animal(mob/living/M as mob) + if(M.melee_damage_upper == 0) M.emote("[M.friendly] [src]") else diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index a6d6f02d39..2e60eed9fc 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -861,6 +861,7 @@ var/list/robot_verbs_default = list( spark_system.start() return ..() + /mob/living/silicon/robot/attack_slime(mob/living/carbon/slime/M as mob) if (!ticker) M << "You cannot attack people before the game has started." diff --git a/code/modules/mob/living/simple_animal/borer/borer_powers.dm b/code/modules/mob/living/simple_animal/borer/borer_powers.dm index 9f47dd6cf4..c07a105cbb 100644 --- a/code/modules/mob/living/simple_animal/borer/borer_powers.dm +++ b/code/modules/mob/living/simple_animal/borer/borer_powers.dm @@ -181,6 +181,9 @@ H.internal_organs_by_name["brain"] = B H.internal_organs |= B + var/datum/organ/external/affecting = H.get_organ("head") + affecting.implants -= src + var/s2h_id = src.computer_id var/s2h_ip= src.lastKnownIP src.computer_id = null diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index b9e6e714dd..f65d25d929 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -250,7 +250,6 @@ M.put_in_active_hand(G) - grabbed_by += G G.synch() G.affecting = src LAssailant = M diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index ad8915f5e3..d6e6496f9d 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -28,6 +28,8 @@ del(src) return + affecting.grabbed_by += src + hud = new /obj/screen/grab(src) hud.icon_state = "reinforce" hud.name = "reinforce grab" diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index 1e5906eaef..3b231b751e 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -496,7 +496,7 @@ name = "Shaved" icon_state = "bald" gender = NEUTER - species_allowed = list("Human","Unathi","Tajaran","Skrell","Vox","Machine") + species_allowed = list("Human","Unathi","Tajara","Skrell","Vox","Machine") watson name = "Watson Mustache" @@ -636,62 +636,62 @@ taj_ears name = "Tajaran Ears" icon_state = "ears_plain" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_ears_clean name = "Tajara Clean" icon_state = "hair_clean" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_ears_bangs name = "Tajara Bangs" icon_state = "hair_bangs" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_ears_braid name = "Tajara Braid" icon_state = "hair_tbraid" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_ears_shaggy name = "Tajara Shaggy" icon_state = "hair_shaggy" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_ears_mohawk name = "Tajaran Mohawk" icon_state = "hair_mohawk" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_ears_plait name = "Tajara Plait" icon_state = "hair_plait" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_ears_straight name = "Tajara Straight" icon_state = "hair_straight" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_ears_long name = "Tajara Long" icon_state = "hair_long" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_ears_rattail name = "Tajara Rat Tail" icon_state = "hair_rattail" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_ears_spiky name = "Tajara Spiky" icon_state = "hair_tajspiky" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_ears_messy name = "Tajara Messy" icon_state = "hair_messy" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") vox_quills_short name = "Short Vox Quills" @@ -703,32 +703,32 @@ taj_sideburns name = "Tajara Sideburns" icon_state = "facial_mutton" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_mutton name = "Tajara Mutton" icon_state = "facial_mutton" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_pencilstache name = "Tajara Pencilstache" icon_state = "facial_pencilstache" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_moustache name = "Tajara Moustache" icon_state = "facial_moustache" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_goatee name = "Tajara Goatee" icon_state = "facial_goatee" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") taj_smallstache name = "Tajara Smallsatche" icon_state = "facial_smallstache" - species_allowed = list("Tajaran") + species_allowed = list("Tajara") //skin styles - WIP //going to have to re-integrate this with surgery @@ -750,7 +750,7 @@ name = "Default tajaran skin" icon_state = "default" icon = 'icons/mob/human_races/r_tajaran.dmi' - species_allowed = list("Tajaran") + species_allowed = list("Tajara") unathi name = "Default Unathi skin" diff --git a/code/modules/mob/typing_indicator.dm b/code/modules/mob/typing_indicator.dm index 32f6bfc13f..203159f3c6 100644 --- a/code/modules/mob/typing_indicator.dm +++ b/code/modules/mob/typing_indicator.dm @@ -8,10 +8,14 @@ mob/var/last_typed_time var/global/image/typing_indicator /mob/proc/set_typing_indicator(var/state) + + if(!typing_indicator) + typing_indicator = image('icons/mob/talk.dmi',null,"typing") + if(client) - if(!(client.prefs.toggles & SHOW_TYPING)) - if(!typing_indicator) - typing_indicator = image('icons/mob/talk.dmi',null,"typing") + if(client.prefs.toggles & SHOW_TYPING) + overlays -= typing_indicator + else if(state) if(!typing) overlays += typing_indicator @@ -72,5 +76,10 @@ var/global/image/typing_indicator set desc = "Toggles showing an indicator when you are typing emote or say message." prefs.toggles ^= SHOW_TYPING prefs.save_preferences() - src << "You will [(prefs.toggles & CHAT_OOC) ? "no longer" : "now"] display typing indicator." - feedback_add_details("admin_verb","TID") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + src << "You will [(prefs.toggles & SHOW_TYPING) ? "no longer" : "now"] display a typing indicator." + + // Clear out any existing typing indicator. + if(prefs.toggles & SHOW_TYPING) + if(istype(mob)) mob.set_typing_indicator(0) + + feedback_add_details("admin_verb","TID") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! \ No newline at end of file diff --git a/code/modules/organs/blood.dm b/code/modules/organs/blood.dm index 45eb41585d..9af498eea3 100644 --- a/code/modules/organs/blood.dm +++ b/code/modules/organs/blood.dm @@ -32,7 +32,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 if(B.id == "blood") B.data = list( "donor"=src,"viruses"=null,"species"=species.name,"blood_DNA"=dna.unique_enzymes,"blood_colour"= species.blood_color,"blood_type"=dna.b_type, \ "resistances"=null,"trace_chem"=null, "virus2" = null, "antibodies" = null) - B.color = B.data["blood_color"] + B.color = B.data["blood_colour"] // Takes care blood loss and regeneration /mob/living/carbon/human/proc/handle_blood() diff --git a/code/modules/organs/organ_alien.dm b/code/modules/organs/organ_alien.dm index 8ecb8bb658..ae70f485d9 100644 --- a/code/modules/organs/organ_alien.dm +++ b/code/modules/organs/organ_alien.dm @@ -96,8 +96,8 @@ if(!istype(H)) return - var/datum/reagent/blood = H.vessel.reagent_list["blood"] - blood_splatter(H,blood,1) + var/datum/reagent/blood/B = locate(/datum/reagent/blood) in H.vessel.reagent_list + blood_splatter(H,B,1) var/obj/effect/decal/cleanable/blood/splatter/goo = locate() in get_turf(owner) if(goo) goo.name = "husk ichor" @@ -170,27 +170,31 @@ name = "xeno organ" icon = 'icons/effects/blood.dmi' desc = "It smells like an accident in a chemical factory." - organ_tag = "special" //TODO functionality for transplants. /obj/item/organ/xenos/eggsac name = "egg sac" icon_state = "xgibmid1" + organ_tag = "egg sac" /obj/item/organ/xenos/plasmavessel name = "plasma vessel" - icon_state = "xgibdown" + icon_state = "xgibdown1" + organ_tag = "plasma vessel" /obj/item/organ/xenos/acidgland name = "acid gland" icon_state = "xgibtorso" + organ_tag = "acid gland" /obj/item/organ/xenos/hivenode name = "hive node" icon_state = "xgibmid2" + organ_tag = "hive node" /obj/item/organ/xenos/resinspinner name = "hive node" icon_state = "xgibmid2" + organ_tag = "resin spinner" //VOX ORGANS. /datum/organ/internal/stack diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index c4df67cc87..874bb93672 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -490,13 +490,18 @@ Note that amputating the affected organ does in fact remove the infection from t burn_dam = 0 status &= ~ORGAN_BLEEDING var/clamped = 0 + + var/mob/living/carbon/human/H + if(istype(owner,/mob/living/carbon/human)) + H = owner + for(var/datum/wound/W in wounds) if(W.damage_type == CUT || W.damage_type == BRUISE) brute_dam += W.damage else if(W.damage_type == BURN) burn_dam += W.damage - if(!(status & ORGAN_ROBOT) && W.bleeding()) + if(!(status & ORGAN_ROBOT) && W.bleeding() && (H && !(H.species.flags & NO_BLOOD))) W.bleed_timer-- status |= ORGAN_BLEEDING @@ -504,7 +509,7 @@ Note that amputating the affected organ does in fact remove the infection from t number_wounds += W.amount - if (open && !clamped) //things tend to bleed if they are CUT OPEN + if (open && !clamped && (H && !(H.species.flags & NO_BLOOD))) //things tend to bleed if they are CUT OPEN status |= ORGAN_BLEEDING diff --git a/code/modules/organs/organ_internal.dm b/code/modules/organs/organ_internal.dm index 5605f8c40f..907d5fa122 100644 --- a/code/modules/organs/organ_internal.dm +++ b/code/modules/organs/organ_internal.dm @@ -83,14 +83,15 @@ if(rejecting % 10 == 0) //Only fire every ten rejection ticks. switch(rejecting) if(1 to 50) - take_damage(rand(1,2)) + take_damage(1) if(51 to 200) - take_damage(rand(2,3)) - if(201 to 500) - take_damage(rand(3,4)) owner.reagents.add_reagent("toxin", 1) + take_damage(1) + if(201 to 500) + take_damage(rand(2,3)) + owner.reagents.add_reagent("toxin", 2) if(501 to INFINITY) - take_damage(5) + take_damage(4) owner.reagents.add_reagent("toxin", rand(3,5)) /datum/organ/internal/proc/take_damage(amount, var/silent=0) diff --git a/code/modules/organs/organ_objects.dm b/code/modules/organs/organ_objects.dm index ea49f7276a..178958d936 100644 --- a/code/modules/organs/organ_objects.dm +++ b/code/modules/organs/organ_objects.dm @@ -46,8 +46,8 @@ if(fresh && prob(40)) fresh-- - var/datum/reagent/blood = reagents.reagent_list["blood"] - blood_splatter(src,blood,1) + var/datum/reagent/blood/B = locate(/datum/reagent/blood) in reagents.reagent_list + blood_splatter(src,B,1) health -= rand(1,3) if(health <= 0) @@ -215,8 +215,8 @@ return user << "\blue You take an experimental bite out of \the [src]." - var/datum/reagent/blood = reagents.reagent_list["blood"] - blood_splatter(src,blood,1) + var/datum/reagent/blood/B = locate(/datum/reagent/blood) in reagents.reagent_list + blood_splatter(src,B,1) user.drop_from_inventory(src) diff --git a/code/modules/paperwork/silicon_photography.dm b/code/modules/paperwork/silicon_photography.dm index ce31514adc..f15d032221 100644 --- a/code/modules/paperwork/silicon_photography.dm +++ b/code/modules/paperwork/silicon_photography.dm @@ -66,13 +66,13 @@ // TG uses a special garbage collector.. qdel(P) del(P) //so 10 thousand pictures items are not left in memory should an AI take them and then view them all. -/obj/item/device/camera/siliconcam/proc/deletepicture(obj/item/device/camera/siliconcam/cam) - var/datum/picture/selection = selectpicture(cam) +/obj/item/device/camera/siliconcam/proc/deletepicture() + var/datum/picture/selection = selectpicture() if(!selection) return - cam.aipictures -= selection + aipictures -= selection usr << "Image deleted" /obj/item/device/camera/siliconcam/ai_camera/can_capture_turf(turf/T, mob/user) @@ -147,7 +147,12 @@ set src in usr // Explicitly only allow deletion from the local camera - deletepicture(src) + var/mob/living/silicon/robot/C = src.loc + if(C.connected_ai) + C << "Not allowed to delete from the remote database." + return + + deletepicture() obj/item/device/camera/siliconcam/proc/getsource() if(istype(src.loc, /mob/living/silicon/ai)) diff --git a/code/modules/recycling/disposal-construction.dm b/code/modules/recycling/disposal-construction.dm index 18400350d8..b4c8cfc2f5 100644 --- a/code/modules/recycling/disposal-construction.dm +++ b/code/modules/recycling/disposal-construction.dm @@ -234,7 +234,7 @@ user << "There is already a [nicetype] at that location." return - anchored = 1 + anchored = 1 if(ispipe) level = 1 // We don't want disposal bins to disappear under the floors density = 0 diff --git a/code/modules/security levels/security levels.dm b/code/modules/security levels/security levels.dm index 2037ef78e5..ad1b300481 100644 --- a/code/modules/security levels/security levels.dm +++ b/code/modules/security levels/security levels.dm @@ -5,6 +5,8 @@ //3 = code delta //config.alert_desc_blue_downto +/var/datum/announcement/priority/security/security_announcement_up = new(do_log = 0, do_newscast = 1, new_sound = sound('sound/misc/notice1.ogg')) +/var/datum/announcement/priority/security/security_announcement_down = new(do_log = 0, do_newscast = 1) /proc/set_security_level(var/level) switch(level) @@ -21,7 +23,7 @@ if(level >= SEC_LEVEL_GREEN && level <= SEC_LEVEL_DELTA && level != security_level) switch(level) if(SEC_LEVEL_GREEN) - security_announcement.Announce("[config.alert_desc_green]", "Attention! Security level lowered to green") + security_announcement_down.Announce("[config.alert_desc_green]", "Attention! Security level lowered to green") security_level = SEC_LEVEL_GREEN for(var/obj/machinery/firealarm/FA in machines) if(FA.z == 1 || FA.z == 5) @@ -29,9 +31,9 @@ FA.overlays += image('icons/obj/monitors.dmi', "overlay_green") if(SEC_LEVEL_BLUE) if(security_level < SEC_LEVEL_BLUE) - security_announcement.Announce("[config.alert_desc_blue_upto]", "Attention! Security level elevated to blue") + security_announcement_up.Announce("[config.alert_desc_blue_upto]", "Attention! Security level elevated to blue") else - security_announcement.Announce("[config.alert_desc_blue_downto]", "Attention! Security level lowered to blue") + security_announcement_down.Announce("[config.alert_desc_blue_downto]", "Attention! Security level lowered to blue") security_level = SEC_LEVEL_BLUE for(var/obj/machinery/firealarm/FA in machines) if(FA.z == 1 || FA.z == 5) @@ -39,9 +41,9 @@ FA.overlays += image('icons/obj/monitors.dmi', "overlay_blue") if(SEC_LEVEL_RED) if(security_level < SEC_LEVEL_RED) - security_announcement.Announce("[config.alert_desc_red_upto]", "Attention! Code red!") + security_announcement_up.Announce("[config.alert_desc_red_upto]", "Attention! Code red!") else - security_announcement.Announce("[config.alert_desc_red_downto]", "Attention! Code red!") + security_announcement_down.Announce("[config.alert_desc_red_downto]", "Attention! Code red!") security_level = SEC_LEVEL_RED /* - At the time of commit, setting status displays didn't work properly @@ -55,7 +57,7 @@ FA.overlays += image('icons/obj/monitors.dmi', "overlay_red") if(SEC_LEVEL_DELTA) - security_announcement.Announce("[config.alert_desc_delta]", "Attention! Delta security level reached!") + security_announcement_up.Announce("[config.alert_desc_delta]", "Attention! Delta security level reached!") security_level = SEC_LEVEL_DELTA for(var/obj/machinery/firealarm/FA in machines) if(FA.z == 1 || FA.z == 5) diff --git a/code/modules/surgery/generic.dm b/code/modules/surgery/generic.dm index a05c6f120b..238657c28d 100644 --- a/code/modules/surgery/generic.dm +++ b/code/modules/surgery/generic.dm @@ -52,7 +52,10 @@ "\blue You have made a bloodless incision on [target]'s [affected.display_name] with \the [tool].",) //Could be cleaner ... affected.open = 1 - affected.status |= ORGAN_BLEEDING + + if(istype(target) && !(target.species.flags & NO_BLOOD)) + affected.status |= ORGAN_BLEEDING + affected.createwound(CUT, 1) affected.clamp() spread_germs_to_organ(affected, user) @@ -89,7 +92,10 @@ user.visible_message("\blue [user] has constructed a prepared incision on and within [target]'s [affected.display_name] with \the [tool].", \ "\blue You have constructed a prepared incision on and within [target]'s [affected.display_name] with \the [tool].",) affected.open = 1 - affected.status |= ORGAN_BLEEDING + + if(istype(target) && !(target.species.flags & NO_BLOOD)) + affected.status |= ORGAN_BLEEDING + affected.createwound(CUT, 1) affected.clamp() affected.open = 2 @@ -128,7 +134,10 @@ user.visible_message("\blue [user] has made an incision on [target]'s [affected.display_name] with \the [tool].", \ "\blue You have made an incision on [target]'s [affected.display_name] with \the [tool].",) affected.open = 1 - affected.status |= ORGAN_BLEEDING + + if(istype(target) && !(target.species.flags & NO_BLOOD)) + affected.status |= ORGAN_BLEEDING + affected.createwound(CUT, 1) fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index e2ad2be210..b5fbb3ecb0 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -327,7 +327,7 @@ O.organ_data.rejecting = null // Transfer over some blood data, if the organ doesn't have data. - var/datum/reagent/blood/organ_blood = O.reagents.reagent_list["blood"] + var/datum/reagent/blood/organ_blood = locate(/datum/reagent/blood) in O.reagents.reagent_list if(!organ_blood || !organ_blood.data["blood_DNA"]) target.vessel.trans_to(O, 5, 1, 1) @@ -367,32 +367,32 @@ if(!target.species) user << "\red You have no idea what species this person is. Report this on the bug tracker." - return 0 + return 2 var/o_is = (O.gender == PLURAL) ? "are" : "is" - var/o_a = (O.gender == PLURAL) ? "" : " a" + var/o_a = (O.gender == PLURAL) ? "" : "a " var/o_do = (O.gender == PLURAL) ? "don't" : "doesn't" if(target.species.has_organ[O.organ_tag]) if(!O.health) user << "\red \The [O.organ_tag] [o_is] in no state to be transplanted." - return 0 + return 2 if(!target.internal_organs_by_name[O.organ_tag]) organ_missing = 1 else user << "\red \The [target] already has [o_a][O.organ_tag]." - return 0 + return 2 if(O.organ_data && affected.name == O.organ_data.parent_organ) organ_compatible = 1 else user << "\red \The [O.organ_tag] [o_do] normally go in \the [affected.display_name]." - return 0 + return 2 else - user << "\red \A [target.species.name] doesn't normally have [o_a][O.organ_tag]." - return 0 + user << "\red You're pretty sure [target.species.name_plural] don't normally have [o_a][O.organ_tag]." + return 2 return ..() && organ_missing && organ_compatible @@ -412,7 +412,7 @@ if(istype(O)) - var/datum/reagent/blood/transplant_blood = O.reagents.reagent_list["blood"] + var/datum/reagent/blood/transplant_blood = locate(/datum/reagent/blood) in O.reagents.reagent_list if(!transplant_blood) O.organ_data.transplant_data = list() O.organ_data.transplant_data["species"] = target.species.name diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index 9ce44d1260..c5e883e79a 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -77,21 +77,34 @@ proc/spread_germs_to_organ(datum/organ/external/E, mob/living/carbon/human/user) E.germ_level = max(germ_level,E.germ_level) //as funny as scrubbing microbes out with clean gloves is - no. -proc/do_surgery(mob/living/M, mob/living/user, obj/item/tool) - if(!istype(M,/mob/living/carbon)) +proc/do_surgery(mob/living/carbon/M, mob/living/user, obj/item/tool) + if(!istype(M)) return 0 if (user.a_intent == "harm") //check for Hippocratic Oath return 0 + if(M.op_stage.in_progress) //Can't operate on someone repeatedly. + user << "\red You can't operate on the patient while surgery is already in progress." + return 1 + for(var/datum/surgery_step/S in surgery_steps) //check if tool is right or close enough and if this step is possible - if( S.tool_quality(tool) && S.can_use(user, M, user.zone_sel.selecting, tool) && S.is_valid_target(M)) - S.begin_step(user, M, user.zone_sel.selecting, tool) //start on it - //We had proper tools! (or RNG smiled.) and user did not move or change hands. - if( prob(S.tool_quality(tool)) && do_mob(user, M, rand(S.min_duration, S.max_duration))) - S.end_step(user, M, user.zone_sel.selecting, tool) //finish successfully - else if (tool in user.contents && user.Adjacent(M)) //or - S.fail_step(user, M, user.zone_sel.selecting, tool) //malpractice~ - return 1 //don't want to do weapony things after surgery + if(S.tool_quality(tool)) + var/step_is_valid = S.can_use(user, M, user.zone_sel.selecting, tool) + if(step_is_valid && S.is_valid_target(M)) + if(step_is_valid == 2) // This is a failure that already has a message for failing. + return 1 + M.op_stage.in_progress = 1 + S.begin_step(user, M, user.zone_sel.selecting, tool) //start on it + //We had proper tools! (or RNG smiled.) and user did not move or change hands. + if(prob(S.tool_quality(tool)) && do_mob(user, M, rand(S.min_duration, S.max_duration))) + S.end_step(user, M, user.zone_sel.selecting, tool) //finish successfully + else if (tool in user.contents && user.Adjacent(M)) //or + S.fail_step(user, M, user.zone_sel.selecting, tool) //malpractice~ + else // This failing silently was a pain. + user << "\red You must remain close to your patient to conduct surgery." + M.op_stage.in_progress = 0 // Clear the in-progress flag. + return 1 //don't want to do weapony things after surgery + if (user.a_intent == "help") user << "\red You can't see any useful way to use [tool] on [M]." return 1 @@ -116,6 +129,6 @@ proc/sort_surgeries() /datum/surgery_status/ var/eyes = 0 var/face = 0 - var/appendix = 0 var/head_reattach = 0 - var/current_organ + var/current_organ = "organ" + var/in_progress = 0 \ No newline at end of file diff --git a/code/modules/virus2/disease2.dm b/code/modules/virus2/disease2.dm index d21f8b72af..977c9ab9ca 100644 --- a/code/modules/virus2/disease2.dm +++ b/code/modules/virus2/disease2.dm @@ -10,7 +10,7 @@ var/list/datum/disease2/effectholder/effects = list() var/antigen = 0 // 16 bits describing the antigens, when one bit is set, a cure with that bit can dock here var/max_stage = 4 - var/list/affected_species = list("Human","Unathi","Skrell","Tajaran") + var/list/affected_species = list("Human","Unathi","Skrell","Tajara") /datum/disease2/disease/New() uniqueID = rand(0,10000) diff --git a/code/unused/hivebot/hivebot.dm b/code/unused/hivebot/hivebot.dm index cf764c088b..ade7dab091 100644 --- a/code/unused/hivebot/hivebot.dm +++ b/code/unused/hivebot/hivebot.dm @@ -207,7 +207,6 @@ M.r_hand = G G.layer = 20 G.affecting = src - src.grabbed_by += G G.synch() playsound(src.loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) for(var/mob/O in viewers(src, null)) diff --git a/icons/mob/alien.dmi b/icons/mob/alien.dmi index 2f31429878b2a40b8ba64228bb6e0d49bb3b9b4f..362dcc96ea2bebf77a429c074b3902538df88c9b 100644 GIT binary patch delta 8819 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 delta 8890 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 {{for data.auth_list}} {{if value.auth_hash}} - {{:helper.link(auth_name, 'eject', {'removeid' : value.auth_hash}, null, 'itemContentWide')}} + {{:helper.link(value.auth_name, 'eject', {'removeid' : value.auth_hash}, null, 'itemContentWide')}} {{else}} {{:helper.link("", 'eject', {'scanid' : 1}, null, 'itemContentWide')}} {{/if}} diff --git a/nano/templates/identification_computer.tmpl b/nano/templates/identification_computer.tmpl index d7635dc9f7..e783d9e3af 100644 --- a/nano/templates/identification_computer.tmpl +++ b/nano/templates/identification_computer.tmpl @@ -209,7 +209,7 @@
{{for data.all_centcom_access}}
- {{:helper.link(value.desc, '', {'choice' : 'access', 'access_target' : value.ref, 'allowed' : allowed}, null, value.allowed ? 'selected' : null)}} + {{:helper.link(value.desc, '', {'choice' : 'access', 'access_target' : value.ref, 'allowed' : value.allowed}, null, value.allowed ? 'selected' : null)}}
{{/for}}
diff --git a/sound/misc/notice1.ogg b/sound/misc/notice1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..da6454ce3cf788c27fff9fdf596a63b356c1b7e4 GIT binary patch literal 53513 zcmce+cUV))*Dt>50Rqwu2$)bqC=!}9l`36HNT`AkdQ+q+*g_AXNEZSqH9#oR6%eKO zA|;3@ilS6O1+gCGxAC0wzTf-)p6A}@{&VM+vE%^=PYeleKf8*)&@2weZW=Fk|+pUeY>vj;u@D;)G>04ehPIY(Z_{r@%CF#SD} z7}&txH^@inY_K;xz?WeAXMDIBTt!*=xUz9+25ovhB+LMF6U z3;s#i|L_3^-^GAc*n`Iaaxgqej+z?`4)r%%aDWK137Dh{m^BEDHi(W-NuAwM!0@Y2 zsT$khtngq6bG8fjd>S71H2k_lZk*GD>kbd%oaW=4zs9-2;{S=?uD|+v5dW|aX8?*M zwQ`o_N+d)|-e{FD#m3h#0v-pDz}Yh-_)vbY}jS8cU&_7K;F)|;# z4N&Auq5l7(mqU){|2gXU450u$5X-?!qJx*DjImOK!3u1D5FP?Rnd)H``h(R>LevIB zbirs6YBZc>IsV!5(7!@B5IX?qp+);Ii4KEkU=?SA)$Kw~JPomW3PN#!$p1b>{m~bY z5k#R^jvo=Cn&$Qg79uz-tQcYl{rgE^15)u@IOPdtcU+5`@~)^#Ab+Mi5tlF9R+XFo zM}h$p!pop6_kge)*v@yF!dCUn9_;Jz zgtAiECIIFVv+`wI+Hil5_m5gsxfD!vYrO`0BrfFpx3N2ex$hnY+vDs9W&cxs^gy|} z&BF!?qv6+6SqTCNDk4)n^cHt!5qe0jOgts^w0TvGHC9-*JT&?b=Wqas<@uw<|0aJ_ z`EM;Q%OImhkWFJMqY4K}P49&EW_>S@AruX2v4T3N#VIW-cS7p4O#RDS<{ahAv#{oJ z<$qfgC{(ydnm()WA0vs+4IYuJ0IlLb1@}>El2>f%KjP#kQ4F6n7^hSeZB$R-ad^A% zK!@95&+o@M&xgHwdi~YYl=Fw<|EFU8m*oJU(Zv3-$t*%Ldaxkoi~;-K0{+)>E(r{# ziw>ttSu{#nO)HG=sGZ$ao8mXds9D(vI!_6P%?NqgXgJTPd(PlJ>EWKwT0NcaUw3Hz z$6)?8n^#Z6{=;$(OhiH}b=fq7`M)iv2$}juGgZky4d+XT7R~<9}F= z54j?jTtOnQl2Vb0IlhS$T3boLNZn@p|1tiT<(LFZff2ME<6x=(u$(Tms3B-gjS5z~ zfAe@^3IsIN`0#%U006qupca4T5e!z5j#Z~)74f(e|9gu8Yw2oMGio5P*#IC6>Q6sg zaWa-KbJp>Fw>=pRDQA6$juVK0|2aM5@u4vJGvz%pA{yT6LoosZzI%FR?Y61>|PNE%syWcx60H_ zU!76|mk$PR@F!$YjF4v}YBB&xQW4^2JGvQQ2P**tIft4kKFM!+*!+$nF+;Ht7zvOau6MNWGON;IA@Ubu**S=f@ZI9R@I8)MOGVEODys2 zQBxcTNg2w&iijAvqf9Vy;_lRkgQ zNa`BRat5DQLc=;gjoXYYscHv@N~F?)@gNBFZC9d)IX|fLq5VtR zWrHLD5EW}*6FArlz$Y(lcuDze-hJ&+rcg#|r}F)j0|tYq|xC^#V=I2z!r z2)Z0H08rV*0KmIWr;oFrj^^NUUHmQW1F*!-4d}6G)T9Ps)r9PQhRgvt6F@|>B0Qi5 zL$KHbw<4B@4*-;xKrhMFKp3g!Aq}K)0D7=e0rv?rvnrL-a;xyHX-CgA?1VnDyv0kd zydWk6>pzY)*OHYkpQFeL$5@-2*Q#f$uoh=!Ir>i|@)(%c_RkmaBVw~0lNz*S-R0z3 zVD2Gj2C!H^^uS7iO0^G#vH^Q#Ipj#9lcWU$8igp_~X54t^RT0z(w$Y1XscX67;4Hx`9p! zD)SZ`Jc$dq(82VwvodcXx90zwlDzNaGS_(2d^Afr=Y6UYH) zNwhd?PNW3#9EuL|5pY0?$cVU@P9;YAXk3C z&p++3=KtovQ9$MVqYZx&aNYj52M7b!oc*63JO;?}EWUr*NrMjp-Dt3H@j>I_gXJDX z?;zm;9|Vqv{8Mo-07&u~{HZv2&;j}P)BfbZB-R=n^xq1kbS&S&gAUsLsrdUre_jK8 zcrhqX&@PF9BucUGjB1@OqltiurCwZo4Kpwe&PRqdpfQ7xg9#V*-&}3WX}Q14{!~=` zSCc>F|NF$^0D^zH|G&&J%(EQfCQk96=EHgm+lpLTW`{|n{ZSZS2GF`eg@J|gn1dF^ zfdD0c#sF2@FXSGZ2I>m(KqZsVSGW(*p2h~C2kdnZwB|r{VeZhz0~H6SLPBzj(6a*x zfNGDPbBqD)57h2jy1jc%KaAhp6hx0O2L7(qNSDuoDn4NEj~-|hz$Pk!xs(=|Te4qm zzrA~H!yIS{J=sD8G6;8w;%SI`2soa-e_fl9Tk=#}wxeGP*d*!L0L;z5MtuOBJ^Epi zvGpyjBL3s*PeG?`0CLnFl;(?&1EY>jLl21fPqYEV7Z5g}k42KbstGEe^57FQl-INv zQ4J7b01*Mi5*k4iz=;oFu&tMGYW6FAP?h;`Ev8F0w9m_9s2n%;*64|(`Yb_uzF6?Z z5{v7>q6dJR$UcX0t-%8Mw`DE!ehPwEZg5%;AA-M=>UUJ};E9ViwX9?%lh*;)OHqiUfQp*Nw31TMC~!FR($grOXr5TO5Sz6g zBlnpHuM>~!zGjtO6Uf#EH?v@X09QcYLW4;1@mkT;);+0bV07Bl-13Yy76&eZVBi5x z0zif!T!NCPmCAkVP#RA@p{G&a6we>y2qvOMaqX*mc?fv~4W1QqFHug1vt3;$NM?%5wy>Xlh&UPox z%^eNRSER}j?4d2{EY%AE2~jj(vRL>$$ro?dP3WDvK%&nv&xqJ2@w4?3R4wH-l6*y^ zsd!^te{^YS-7Ia6>UpB~0?S|{!JXH-g9A{@AskZ(c>siEFcQQMsrvCCDlhS{C$TZI zaJs_}--)paK`Qa~?vSpi_iCA6=t-0Ft27L~mOdtV))tj>{zOJ-aZYl{{LU5I07EJu zIIETECD%u+9+uO(#ynlBJZvW6VfK)JC{pFLht)&Xga6N{{xVb)sn*xgLxHuGN>}Ud z5_+ykcBI?Zgge&y>02n4#5?jPiGN`V+Z~!Fm%B`UC7;Y-M+VBo5w0|JlmZhpPD1E4|!gqq}RlDUWATY`*YwSSIoT zp;nM!J@L zy+)#12w`*%F^dRO8Av2ufwH=OgaM^SjI6g1QZmwT1fr|til|W+!S!vjrn2jhmZU2X z$H2;|EDB>XFo+iw_J-vW-_+Z~;uwT@l&>%s*+Usv`ZPgRi;W11m*xFb4(rj??9C*7 z!$LcMSUQ|LSL`PtR2}PPj|OyL$i9X{93n2AJ$pGQ!ZnwSXiUl-dXQkhpQ$nO$lkPZ&5mL9-|b zYtD9|2j8?kx#=U{NqhIZ=0%dEYLYxegXFBh7mo<9mW&snYT~8d6T%2&dj(dFUay8& zUwcdgg%s1@*XLl>;b!a;nACnfoI5;#fMI7cR95t(*+Z)-8Uob|g25cR3_>QRDH58x zLWlS@8F+#~?0C~8nHb>{i45q8w2-9&Fsc%Uw3Oi`)^bFcCCZE-lG!b##Rr%$zZFeG z1bcMB7=n%B;h$9)fB?5X!OkS0K91M!vl64;G4dEekfmF#MyNWc-@1kDOiwHp3iE5Y z$ct%!&BKJ$XS1wL!kUFq;j&aW?V=ksrunHY7?*Na-coLze0_p^UsiJmlBJE@B9jL*G6Yu!i)zu^TDyuyJ=KLLj^t zDEBQ%xV@-e5QJOe4Lc7J14)oIfG`>|GaL4~!x?jkF+oTnPRXE&D9u$pJ>a3QfxFza zy}e`9XDfaYi}Zn>X^yhmF$E>#^3qb9j?%1Y^QrA@LH8CB&G<<(NBa6Bs zOHNh+G>um|UYRw&v;M=d(ut4`)xX=%v6@-%dxs!}%OQh%g{44PK z(-#(?GjEKbNu(-jn6XhmSc>OWFXw47gz_?7I@p)x6cC{#X3PqdNr2;eN>; zN_PFk!yePk%PtVTTml)1OH)l{2GmO6-iL9jMm4-FS~}8C&z=6b$C>Gw7+8>~O9m+ABm6;a7CI<394RM}u}t zG*A|@Fk&Dk!X&sEH5tVbB|O~ye9A^7VvM~25Idw5^v0A(>M!yWq)G5#qB#o%WsJGfIAx*3KfNAr;SKq^4YJ+bcsQj}w{*7$--|nG4-&wQlp4 zHAqd02H=-T=T^07RrUP)%it$yA_`{W!5zbP{#8Eyod<7x0C zPU$n36+86}_fVcc=}XtaTXh8?D5q^lou7M=-+ZnuuZ}Wj zZ!}#ET@&8hTqPa2wAR-hq=pA)0yo~??jYsb_?QJe{=VQ5ompn100q|5mFsIhVdPv} z43MQzqNyUp%LuE6G&80;9_!_aje+p+8e21BO!}5cK#`~@LzFVJ0_&k-4hD%sELt&) z$sydt{vxAfp>Cd% zWMWa>bk@?A+WWpb4Qe5|-%q{oy{C1yS`C$al=eKA%FwD2@9K_j$jObb^+jzMK}~uI z0zyZe@H5Rixin4l%3>ke_+sj!GOqueAiB0xvh)Z6t+*lVw*a9^!HL~V7(_ae#Zl>w z1~S&oHb%#Ww3`tLB5e=MTOx2{0bxEZo-5=gA_2p zKN`}_TWy;p1rIxV?@{wqj!f~4zvE5V)>`nGkq7{Y_>{~und$+ndi-(X*6fg_Yuz}* zfIu!oD2pIJuoMjm7tw&-@S@z1$&vxOyq&mO1Uc)Rtb}{iw(47wU?{2xIpvXSB?rw9 zpH$pRa+4s55Y+JsPQ3y+9J(v4HfIQCgOL~+G8k~`|6DFqO>+H|EMQan=tRq{OLl!- zYN?bjUa<@LB_*`r0i3rX(m%)MX_$H5AOReTN;+hJt%_ylW%F|Zw4!a&#pUZq$RgB! zW<$$r5;^)uRSJY4(jFjG?Jn0+DMD53(TSn?#8y*X-ACm8knz#AG+&x8#;{?2A(z05 zanE~4v|-D4BQ$WlaYe6Qa73=y3dc-1XEM~fjT-T5h<)I3+jy!SXch8EWq0B#bciQ2)Zb#9 z)o-a4&*Q?izS5x0;GYrd<62|&L+W$UQGSQ!TcahgLCbIbfozoXT+K>O^@ZwmnLT^1 zMfD3gc14E*&OfmDOWkSb^6RwMra&TdyVlKC;{ z!w58QIVOuKD2*w#ujHxW>$&CQ{hMCqPIR}AnVzx0B%*=zSdxz0o}=b2*|tYkbgWZIyHEUZ;i>uRmz zd7+FDW~p^T8WiB!@lf$lvt(ls;i;OzX+&kmpZ2t_5*M(n$iNv{jm-(JON@Hx+{YXlp{3t`m8T}2q(CWC+Q8S2>8Cy6m70%kCJU%z{S^$K z2u3<*dNOu8lwNG&V-%5I^VypUrc}ny7v`nwnFGj!kG$dz8S}-GuC9#f(hQ=Eg8T+u>hn0HUlbWGFl^45exhe%G;QK#96HA5CqZx~Ec)Z9(^@W?1F`2w97xm>+`DPdL zpN)rc)09U`254>6JEoeV#)41$wyAovRn(2j91dnr+*~iS9^QeEOU{5ULnYafb6=WY zT}%I&DEf{2i6AozPeV222{sg{Z(}ia5@j;HBK#j{Sa;fk@$Nt9Nh=RkT{>ccwdnlvwPSg-muM$^S+*60Ie9d`YiE`N}C^5Ic{JFg1cw5xk^vK~D+ZS%wYa&I&g~yTy8ZREI zqEl91@xZ3pF7LHk~UezmIQgjQ}%GTV%- zzo$eUdsEfrz^&IhL5r@R5Yag7{(z73(^s3v{J%X??Yb_cSn4`??+a|yOeROf*!EF* z{fp>Bt>qRia~yBhRUub!>>6wShaKbVL`+KZGd4>G71vHBahhm~_uXdIhTc&S^7|{S z_~qBwdcIX>VVx!`FV&$bdZX;} zNM#+OTrSTG1_h7cu5I0f z`!vM%lM4z|9_FAO`KlqF^ID695IJu|`12kD%#{hY+Q(oi#x^$sll_*NTG{$t&{tgC zJ?u7(@5r3m;glZb;u^+>k=z%7QK`nsMpR-~%BP_ksa+wI@5k2UWvc(rvQ&-X>X($8 z{DZa?1p?+JkzTAV+YTO3Yj?NX(zMY%bglU8Wd3WP`Ji+E??GrU?K|Ek?Tua1eCvlWr|W3@`_ejZiIj`5 z&X`oUSji%VEEN?muwZzv))ZVjI;~!VY6RYaHT_pB*HZEP<(A;|J2TjA?@Coe0! zg9s(%OJqsX_6V2SC(6tWZfR2_7x0cOv+`MLf~A!qPfyb2`~+>%$Tm0M`!3;EY6^dzOJXbwS7?YMMpWL%czP$Oza6@3&yo`}c_l*z|l=B zBT4McZ=Kjk?$zViGX33G>-XDwe?3qcV)}{+xA{wWF~Pf5@Z#~Mi!+Du)ze`G{QYIW z0y(gDD4|S`zaVT46{kYKmwY!rLTExL8M-|Cbh0YT;BC!n0Gie6a%$$3&PHZs>C)FR z2f0%>k~(t=(qs}k#-nDrrJq+_f_)m2Xs=90!h_C*1V!AC`#%qpKY+mlSJdPBfy1PE2YlokJe!B!r%N5#?1x9bnwaL*- zMJe}L=#_n{7OMA8+sb3sd+w3F$1Ka~(gtt==7CdptsUZ&?+}FIx=x4%yYy6#8zHnF zD3YBj5mdX>TzYX`dga7|Yr3Eu*)qegEXM;r&2AZ6R(_^7xZ5hVGS>>>DH(7pU`};2 zCwbhD6gnv9)#zm|#}fBeKt>+n&GbG~q(+S>;~80vPlP}prlMEGKYLU?eqr!X(!Hj= zXm(QD-^pMJiR1%QS#jWBf7Kz-O&Vcfm3yK+&b@6QHYt}Z>% zKN5Z;nkg5}?k!zwaXW0p3$eTUCTaWTn-6;3KA(P#oVuAclHo2bCY|5jn0Noja?=s; z>)3N=7T~2lA(kmfk3qytKoej<>Y0a?#4i+*CB$dmh+1U829I4la`Z`HYK+OE(;aWE zNAJ!!%vbL(RfjHKo&_XhgdO!BAKT!9M?3YeNBs5IZ-tF(YF-iQZ$r>S_^x9~qgyQ{&NSM><&*h3^*wTVj|iHYil z=I?FEaaWhD%DJUGb*2MvdoG5B?zg3g#GdXjE zH8~BfUVG}AsI*=JPQbHZXdQPrrTptJcOwqX^04qEMsbv_J!7zVEAT=g&`rJ|{_Gwh>x5HP5 z(*tj|1mlHSk6o`ZK4ZD%osiu9YJc_ajU79OyN%8PVrReBy_-Lkqv0P^T^m}lc>Z^5 z=mNXebD>i?ZeLMDHKQhb&wRo)7Z)c*Hznk+^PFma@R#m>NFc-SknitpLyjL$zvkQm z97;64G27ej5MnI$>!Ksf-Jp4YJ6ou)>_Z!|)J;fu4VU74)L(TJ5y@_#T^RXs^JHOG zoW1QiU>r~_u(XcU{RB&*-~V=Rw; z;rh_`eg79udQ`K9mHY-~9vt2;=G*k+5?o>7jK-ZK4`JKviH}a5Szt@O?;d+`a_iB= ztT0{h#rgOfD^mKm*lIrn`&QrXd|O=;gl`;G7L*!~LFpnjAo)XUNl@Fc`t$q3dE#B6 zIt`ll(77w7lh68{wWh8j7uR|>uJT^gk`Kif_5^O@w3|ZXm>yc1w_|f0nlf2c>B48a zXYZ)dV4UV#{AQ{4ixckZ>$6gM@v;6gG0|ymOzT6l>yy88%NXNEhD4c9`u z>thA_9tk>$G@0X3P1r^39KxXhE>-S+j&GCWKE>(XLb%(lvCn}?cQnib3oE?6vwTCB z2i74_jZ$=6cHYT1w!c^l5=u9zPA^$~+suoZG@irl5;mmX@i->*lquE+3`k#4mOW;7 zT)rCbb1|}T?dMG`;lwp=4!J5V2QmL!Vxn`GZz1kxOB8(T#J@nAN^4*A{bg=W8PMa} zqm`3=WgBORhK_~w#pRKAyoVoaT@TzV1HVvuds!2~ubVe~7$34(bE(0njI`Jw^fdLR z+$^Eq3ou7VYoVCSUN@M0On$FN>~JhlZ{0U2uV6TTe$m1PrTu_TkL!qB2wzR0+=`V- z$nVFwUPD&rHad>kR^9sg+E-3aYu008oA235NfkC#ew%WM9x?vfReQDa+hD=XNL`qh z{?V21K1A=T=?61c$fjF(LqE(XDa|!Ri@sD-uUtJ}lBZLRZ-*sb%RyEU;5CCLFR0(` zh#&gdCtrGL(Rolk4Jx`Hp>92OJ);Ar(P<%zmzpChiewtsc}RvuM~@5xhVsciVM zpCix9j4?9KW=cgi7M%N1;z!Zo*O4fON8RmC@Yg=Pr$eJE4g6GBtY51R+%R5Lcj1Ee zW;u#zp>1kq$utQ8KZo_J$_fh2-IIq1Bw#B!EpebaG*UEuV?+N zC&}^-$>o569DMlq>Wh7-;O42BZd4P2CQpD68aSaKUhHS8I1OnxSjow?8w zSE}8gaO)Ahm7^D*^r&H2SOW870xQ*VH5&JYtdBrZMv6i+zE=z}Elz?sI)f380|F0? zeK*PZBepk2`Q(vBJKi_r3n9dBx7CI>!Oywwl2YfqX)ZjN)A zdf4>9Tw@n!nVee!Kf-XmP0HWB4&znA zF28(ePgUHCMrFf#6ek29AMgKI@z?n+?XN%F-VQ!(V-tH6VKamh8k8&uPx8Mn zx%HuOF;2h0J_Qh(ae2`A;f=@f7dkta>>Q?T_R`Bg`@i>`(vKb(8~JYDnRFd*@yldy zJ93;l1)jl;FZ}hbVrFNrqq1F_gpw5qzE?EBT*SNm?n{PbG>fMzYOUaNZq@cRhc;1B zdn^9mOp*x@VLge`W^=@sZ_8&Y9z;oa7}AcgYpL%PiZCQ*v`uSu%%8bm9B*t)v1Jsr z8x!YCMi;Nx2uhV38L}7zVZ1Jn{d2w``R91y&-ns4Apq8P-?jN#4$c(D4w8<8q-KAA zkj`#;uYT^rOlbD5Ypha+zVJl%j$DheBg=}ny8nR51w-jg_ljqkiE$^F9c%~u=6>2c zIFuFW*07$1G$mz-9xr+GU23uZ=XbL>_74x31*ET z1;U@;)yrqvx6``gt!jqTPYn3PrAqx_>ZF;IZc}Un&l+yrLeVWgNLz@lMdA^8YEG--lmIsUpIiuSO@9Z!2iSOwbZs{pulKH{ z{aGch{S3E{e>IApWfLdBiXHd>R# zx2)a~I-HyKlaQa_;&9Ci1FPO6<@#H&ceZ}+=)KawNs}zy%ImF~cTx|*`TD3UtnfEj ziWyYW1!gN1kGfUjD>irPS}ADfn{$n=NkyeCRuGIa;JiP8aP&&4Iq$-gEcg{M*J5kz zjJKXCxaR+@j#ff3w|{v)GhQ@6=5)7M0xlpvtr7|6a9wNqsO9>@k`o|`GwVLOmG@hZ z71ry9N!KI1cNKI`p`lzNU*U`MNWFu6ZiFx+cQOgAiq9rftH z(3E|gp4@ykR9Hz42iUtGw)~QY3E4e`^gMLz3_Ea`dO7QS--Wl_PM_Uw{62R)n0Jxk zegJjwdEK3Ls_NvmtmpJ=+_p#F?Fqcv?XfhI&4Hb$*>_KtxL&xjBqdxpx-IC`aN%AC z^YRU^^O3h!r`~tp87Q?i|73G$!Rb@ph~mQ|`Y7g`?@u_5#|WiqDLgiK9TA%S$k_u^ zrFZ0PkVl`raq3r3-uD$Foif5F9kj<{UgrATequ05(7BpedA)xl=S|NYfA4FPr;kOq zJbJ5imtN`Zm@JTX?D$1`+gz@(7*;~zi`G#->1j(xwYFn3KkZ^WrwCT!+hxz+6;=~` z-sPSDYeD?=nW%f6SO3a#(Lb3Hi`(aM&gsQ{u%LY#bGpEK*x4(k+)4k}S!ohS&qLPZ zLIMjK?(M5C?{cQDSRi-F?mW zr&wmfl+K#palBQC2Y6f$=*%w(niC zuiwr}&V?Ke2u{e5$GQkrP24_hGx>Qc_~`?}j6*{BaGeYf57m;QB=M-m!?lPenV)9C z;-9bqPl0rWiK@GJQFYAjPgw5?`w8^PG5?fTC~kQwhm1wAKm6NE z851f>l?(ZIFk5K-do}eGl$Q^m=nHfp?vCN_2l@B3)!+b?iC;RbVCdk*x5s?WAiyf@Y8aQ6TnN&k}d|*F5u~4x+`~jJ&|FX%hFk0VfA4U zfWs5Qp0`oI(f>`2>-(3g9Aw6QQk`w0DTeuV(VMBkCkP~BZ~Oh1O%vT(s_ey(;CHLt zE#x1oSlwxRwB4YZxC~#ltliOqTSzI1_!V-I4fY;Hae;hf(IN?}dKKe17H)x)?Z+9b zFl@Zs56}2*Gm+>RGn%iey`cKQOo4v{(l)^8T~A7_Re>5lTcWhhoZ$`;4|c z)md2g7R*@l(utN*JeNZYhmi{L^dTPsu3nkSXpYw`0>-R1a=z_S5dI?^kF=Fg%EWaX z&XUPma3L*Qu!AJ$6{tSOU}-rs6JREt8XUg&&9pSIZWrbh$u-(PzVEfCPWt)a zf=vI$*ZDl?v6?H@Jga378eaA8EF6trzHavbNwoKW5A8nrE$VqOQ{a8effM_hrgP{h z!Q%ztH)BUrFK?dNI3x+nHeA}ewV`=a8h_{%Ug4BfJ9G1T(cYXLOJP=O?x0eSfN5OJ z)FWK0So4$({H`b@#rUs}x2A6k|7CTrD{)3#rv-XBDgLjD4B_rjJ9@5kSxc|y$qzT! z{aa^u@s}@!?R36$`LZ|~Yw_hqZ6<6fV-Z!RbUZy*=ZJ#Mx(J^aMW#BErcWCaV}h|7wxML659GY03I_s`9r}wo!f94$iD- zLA*l=jml2qd}9jmdt3g#JDZ;X?HoM({kD8>ZE#$rlx33P!npY}?s8rC3<=xkw8GSn zVNZ|V;}aiEFxgj#`0$H4i~7C$!L@r|3by9P1?CLT1SUu>i~2ST-P3*go#vPq z8=5?nSQ8Ql{jhlK%ovl#Td4~@Ld>p9C~q+*ZAcVRDo{I0SjF4XbtagA*)x%HH^*+K ztP%H)w?hi#woGZejfnBOaX|qu?iVmhBIFi1t zR|WHj1$^Dtt!J53W=o}$H=dRC2c)XTs!Yr_l-NW3ahJ9xmpq87_@SLtWJ0Yc+P0>a zOmit8tUR;2a_7d`HYZ{JP|cCB)9S^kU;GyauL}rEI0(cYxjXUPBg)@6_Kn$cYdh-m zS_ZruepI-O$CsGwxmz0%#XfG3E{uHoKr7hcH`E)rW6D@rBoq}*h2E0pkRVqxh}4%G zg@we^w2jVc1*-@AICQ6J^Rq}6LjFt?U*s?0!DN%{XQZOfW+C)lIk(vA_F!7A@b-;F zHN8W0kDRsHpgs2_r445%b1Ee9o_AA?{mNEB)<*}}$|D8Yx)b!sC+yydy3QE}S(ink z7HigNk(5Tx@lGK}cd_MSPhU9uj=}Yimh;^}q69Zzz)|PXnX?sVn zM`q>Ob6K>LjH1WlF!gU{d1g?o5+%{(fw<<%F774Bl^k3(B3=sP_>qCz>`IA$>&ee4 z=-)fHeq(p5U&g&Sc3~&A^?g*wJxbzMP;tiB;qLpX-jomhK2pa&9==$;KLKyStC#2P z)3Q40zs8IbA#zs_myx$MzZm+Lytw~Zb!c${N%;8}+s_}AI@5lK7l${MyfVV#U7kNT z{Ce)^)AQ7&U0=O35_5>fN-Uc$x?6=d9h zbm}&$?Aj|^BaNlIhq6p=vi*J(%Kb=EdHXwe!)WNberAWufQei0T$3VB{LzHJ;ai*A zkB)smv^)NN_GR{&{LoW_Mb64{Wyj!)_b&e`wRja&6YOyDXX>Q0K~r7!IZ?GQXKZFX z&x&$Dc7IU7n{^epCHRQ!5>Pb->c9s+FhFcHv{4nYz+t#X4o{`G)z3&)u zpJ=diIH*mf@Qn9zdM5R&9sg1V)x~@ba1fP@Zs+#{ydR9P;j#v=i`?L+-t!VYt7!1>`IoR_)F6|K`qv2mg3Y{A{vUN;f2?^~ zufH_UH$WowFd|g6<&vh2z-42lbFeP^nCyuqZh~D$tLs?yqaPDzuUvSS`@%}~(%#wH zO1qoovu>4IX4xDqZ;$sLml#GEzB|W@EhOF8O&V4>+CtEcHFZveT>!6H*h{oQDw$Z7 zO&QCWVq=PUNzcd#N`8o-C~6JPXVH59`@5R*TCYI*r70sr?p)sEY(UqR)n$q(*=Z*Sk6%$`7?P>=~CIk+J+2SJ#41l_8gs=cGyqBM=kge-yntCgRuC;t&{yMCnPiuZ-P) zl~G+ip<&bFDGESL*bgqcWjq-fwV#}jA`owk-Xg^$!{*G|6%;C>aO zBw--Qm-n%Nw%oa=4SIBD=H%eGQc{s8D)!y$JhwS7@-adcS4+*M%lgX7CPqMP@kz0m z2C7jaec^(Gz+1N(G;^{vLlOU@)A&w`e95gh5Cs-h8NkdSYZ7S_i6@IOJ5G^@ zc^G_sL$sD%T}_W;N0c!P#p`@pkZ&oRic|2_sexO&4iUbX>Vv*vD=*TBO`%(2$ z^9bKO;pLYwQ9dE^ca5h(Va$)Whv`?pP=Xs(-;76iorvy!qbx5j);a1Zrn2Mty8_;E zIfTRi^^wPNYMoEMp-ZK!4BM4jNV+@bS6Z0cDy3{&E`Fbq(P_trUJM#L)2?zWI(6pU zd%p=@Da$JI@=5+zOt~SwO#ursZGre6AW!Ex@HH?BCZ;t^N7Wz0(WNd!oV2}4?X0^V zPdzqCjB~u*akH20Zouyz;Tm!|(#Ui3gw2Z9P3QXF&X4LxdE5YmI0PkU{i1wB>3d@pxFXW~TQ5XrJX&A}z+ zABb1?3^Xk* zPFwTBkii@bSPfNzplZc470B^M6$|lrXU4af+R)|Tt4zNV+9t1G5xt)+U<@$w1~_NvoZ2B$9P{sh43|n<0@Klc{!ORYN|S(VJrIA?t~YsCH|G1l(mZ^^kG>>#cg`@ zJLB9pVpcaThf?1y1`Zd$_$sYdp?V@GyO_rL)|^;G%{#vAFSb4BVps0rcI{OjQ*u)! zQTYU#?AHRNwD%PHp4dK}c#SURG6Z%0Fec9Ko|-0aqcs_B;WC_Zu9l9%h9Cf#f_t^^ z?NahA4%Ikz%$@t(-P09twWP7Mq(oH>Jl-fy@e5bInbX38DRWnVwa)$Y&7N3ei z4}+n)S_YB?aQk$z^u=-svM`r20=h%+gj;ryqLyEj9{N$J8HR)eWj_ruP_7`VO zK*o#ka!c+=W=J1f+1YN$u|HYZ>2$QR>4v}aor?uGQ*FP<6`1UgWvYFBbJs20`DOuL zIa$O(r#Dfq^I<&SXiol-LA%|th&%Fh!(Z6<{J(pUm;7tb-VU^!UTM$T^ZjyhPRr|T zN`SF%jc4!MDeVFsXJ5xayH}61*;H-0dTmSG%7(HQWyAUv-cj69xr2Q9B$f;EiwL3p zsm(EX_hlh|^$F6$usMM~JfPR%04q=*&zQbAo^`q-lg-z0^!C*+x-zvf4)ckPWE!nH zaubS<^%U`4ak#whD~Gpj*B0O+Y9rmZYJFN{cyZSE6bZfz;(hgw4Axd*U6qddin%9r zbOE0zy;Pl&7#d6lk~7^aI*RRYVCxmo7u-#tX>X~xQv9Gzj!zGd+@ugs+RWCIAZl+&IdpT$`tvXJck!-Ti`&&OIs>XeM|fo z8oFvON=0)t{2KZHi2BN)w%TajK!Kt~id%6B?(VL|f&_Of?oM%cx8ekMC{A&AcPQ?~ zoy&L5nYr&w*6hDYX0LhIvmPNK8pfN`JOzZHucY5(z{P2`N@;2#3-<|wy4mStif;jc zN_Ai{EvHj{w=*XSY?9g1hlCvP3b0p=Ib0&&>IbxpSo?(nR@%$D|}S%RvB6yI8QndmZ4u3s|`yhRx9E)vxXOOU}S>uI-TO)EIGF|S@vk;9!nOib6^ zT5}HSE4r0MgX>Ef%P*&C_u;zzbp6qbQg`RnR|`e=UeyQBY5vw5rxEW%Y0!SX*P}YN z8%*CD2y&9g3ydH8If~hZRLLa1*oiq%t($%}Y7d;)d)Z5HO0MF4=H^y>ntg0qSctB;Ubaycw|Tg#>Ek+mX!Pr36x539`!s`f7aohI$a2=~}8?a2C< z+=6AY6Z8v}5$9Kw*|*aR56u7`>z;HlgV`Hg0bZ-UHJ_*k>1t0z%jAgNPq24;lD|LO zsVGk&9OD?z*zWCU9{iLFcZQz6bzW`$$1E>%Qq^rCR9v z1fld%6-Uy3(KHVC7U7QnS`8+3YJZ;l6EsEW)n8Sj-(aab3Fl;`M>=I65BnhZS2o!n zc;Jjt(i_Ic%`0Y=Kh6dangiKh*Lon0Y8AyC?|e@fX0vz99LN=I^j+as=!a#3IdkI~ zM$~TwUObciXq79g;nJQJkzc}8*=Nio;XYKu)y`jseM~PS6n!=6-U^_?;FJh*Cyw_$ z-+o2~plCusyryuV%R%gF#Ti$xnQsBNpt=SF305<{3MKswS63Y5WwZh>I{l#^lbwwd zJR^|Hv}C(aQL46+JJ55WKC=(?zDlQZ&rv!w%w)5^_!VGR*Y#pS76W%cU1RD83Jic5 zS6xxq)ysHLfk@uMMxDcBukQD2b^-nO{N5}$jUbEoDyFmc(k!lcR6$0w^)G!wQ4p}kD@L_7JNLEwtZJ$t zjiU6zAp<&5pQa@VCACczzKT)y-*iR_YBp9S%*t4Hi^Z}8PiET-*Kvo`bLc`7w`a7fTTaPaMw3W@#U9uzFj~iE|(4*Mb>|b=XEz`m5GH z+{UU_qcV+aw(rbFxdHG28S1ATbxYYOqTFNiC?fXdyl9a=F42|vQU^$%E49|G8maqT z=a_pTpmEy48ZAtT3Ra|0pV|zD>>Xf8o>IR)p{=3_b1SG&lPe-WKjg_gK+7e30520W z0bLjt@Rs^}UakLhFT>2cy$t(Ufu&I($EW;nZde?RY^+9sJYxV2D|n(6T$CBISBT3q z%Y$Ue%GRb_+HpUuGE#U0W1kB4lsBw|R^G1{Hf%^K`!c zF5Q{Em;N5q`!f|Qi}b)rtm$8^en|G-wiDRUGsr?qd&*o*b8+53Tw~Uj;2@}cEkS)( zGl@QyBg7Okja|Ro9h^XgV7j1De;V=W^LLyMmgDE0YuQWFF9XzVHpCW!4+#m=t_)d| zR8&(Ligg;+j+?3S*rrY4=;KZgMgBE+_Mw=7tGmcoP(@vxIEipIzB&8oJZc zB-GXjq7G`mdQiM|#rb8a9aW%eT%ICOIFxcIdq#jNk3q6xTu67y<_Ahx-;)QPtnFf8 zi%pO)|MOZ%osa(ePvL%)8i|)SSfSK zc`Yc(m8hdIHK-Jm{h^dvTpxB?5Mnt%tg}tE#ULUSJ%pZ3KUQ%2519LxHk2 z^9NpbdPtXXpOfXx#R=RY4jkjy?)Qo?;!W{opfTm464G9msar|T%2MF{*nG;j(FFww z|F6}{12H(0QVYA#a-cBmv%(3F+?B;M%}U_3Px}4Sla0c79*txej4ujzH3h@6rqHRcP{!V{JM3uWhY3yfJEA>R}FKHMqb+CgP~^T-r^`p2|) z*9~*9gf@)j=N56^C*64xV`-ZSW?yT7cBbC%+I4F;Jq?pOZiVu0A??wh$avt{=Vqy2 zW2NU*C5fAS<(rP-`I%0*d9SHxLMKTI_s=Tzw@Ff=5g1yzg3E)YtLgu4%-ZFSX1s~i z&fi{~?le7-$B~-^y*>Sy1gtqOd z>Ra8x&ibdSG|S>#bZE5H51Kdl?Hp8Lt_@lJbMF+Ea=Om2f@LWt75SGNb#W!-X5^8a zO0T>+8bS&7Nmhe^c>2RR8!cHC`@f~$jK8Cvw5wtD$nx#0ZTx}DghMC?Z6Wi--`_9d zhg%IW@I5I@_M5($5XYym=D%?KWlQt-Qu%f(46$ZL2x7+e#S@{ z59W7>84i%PedW_wTi-ZFh*d4L`gv&{<*An~T16WfuHG~O$C-^7py(7m@jP~8@;3u+ z51C4Rsu7GWX+9C69vrks`57llKKg=~)+`x9IZ}!n+w@tXgrq4`6!D8z6Fe@RE?zcc zz>#fj_r|T|`ktE;#xxDZ|Dg;*{~u-eug}Q(3wWc~{D&;G{8uLaD-Z7!1jz?COFtJ& zbxnY?2w`DaEQR1TzbAKe(DLW{`3gdPIdfKhuCA=H$ognTCC&|sN#Q*S$5e@A%>+fm zbXg-MktyjxfF|;1izrg#PW(7{Ku|SgjR&a+qm(6DRC%5T_`0Z2RKC(tF8(38W&9Lb z8(|4erC7|MBwENmEt42v+WMGC1v>@lD+N*xqYcd|bBcwTQ_8P|lG#^Lvn?#_Xi=PC zkN`mp|NCv;q@i^J0K%Wh?73^Sq>X5B&zAYzL8S3^fKB z{ESOH8cQ*Rq93>#mR{`Pp2Zl_o*yiSh<}_Doj)2>Du5-0Wfa#z zk@fkzjSZ~>PO~`2oO4mwa9z2RB584Jh;pi4MQp-M)$c~-&IoY^PMt;0kShA%6zthP z-3opUjYe@fXIeygxkuA`eEs}a;Z!5A_`)sU#y(r1B^0&k}VYqu$C@t-_}7bq<-lr9s?tQwt3$=2i4Gv|Tos_0^clwdh)aTKYqBFq-5 zDF7&R>f($tqXi7k*E9f;0Cnyh;}7zfIqW;St(Gw%=8o+Ru}|IZ6PuK z?do5vz%@$v9t&G&qq7LEsT802V#HPoRjG#R+c=Z({N{mr=)5 zdkNRpp9}{hA`bT4V`I`yv~R_RrretPUuQEu?Ru5GR6>BJe+f?e2BoenF62MUNy%g& z+)_0Tz#e4mRr&N+e#cS!2jp`%HB{DH)6)=lD3~3jx9Nyl|BUFF-DAA`&v(#Kk9d+h)VY6iu{}a|rhlk|mo)y(m*!(_% z|8VVhR{Tt^kw_vf@VPQbt7rH7EpWV^hybL?$IsJxOS1zzu~^!<*gnJEp|@g^*&|Kb zs&Qq(qw1a1vj{icj<$MgKRK`UW>%`Ffr;IJ)Fo>E*YV|h3epb^#uQWE3BDBC!wQ~c zD71gjSo{}*>hX~+|5nx$4P&AEb+kroqwi$q3?)&?>V-2zWcwf^&*;y*PMyLX-HbBz z{H+>Hw+{MIy%j}}zhi}VzeNsNhT%)OyDpuKP%}fjxf^uz>*ohFC0fd3(XwNRU;=w8 z9D#|&CWe%jYs+8mDDV<^snF}#5)VlUg8X4k@Cy>0J^iJsl0ec&`BS)<5p)bry|z4r z6;=&FurPrG@yey7ypS5vnlkA^f2*I#KyezHv_FMjL+r3{sQ5KjX4vSA%_GAs(fg8X zh6E?UEaoJL(Z;|yd04=3aXg}Y-Usd{Lr5jwsq)QvP5HhHIptG zE0tuY1jSF=jp-BApR66$rqt`3-ttAd&q(SJ|2R@g1=ve{{418qqt2DYsDp@=0$Es1 zp@ZB$&*CdEU+(QIx-xZ~;j*V3avq~U^&#x<=uQ-)B{-ey{JUJ`)NPF>m9?I=oD$D3 z&NGzCWmJUcar^NVjr*rJ2=L}Ma*1#VjXcb~A(l8IaY!^p(d*t^*HUM!j1Mr8kPUG2 z6Oz{}3^3!p$>RBC#a`0XTv3-KSj#y4RoN!G*X=gyT7~aI81@pzMd5E6G#n84BOxZQ z98PuK$i!EWa=wOGS$T5mIO8s@xSBZJYwvPMf_DHi&NNH&qXFw5g3DARFBp*wBOjmj z@FdSfyKjoehJ%%F-Kf7oUir9pD0U|ZF+YU2SU!lhxaCld443;4dpfiAti5=nZLdeR zp)NLU5AtlC0s4VCONbUzj4cFm^dqGXACiV`oxPw!RoHt%sWnuF2NR&YbH~eqqAJnv ze2vQh)D)Rh0w7_qG60P<f>kkrCLq^^attrMV=^tZkz<+8-Bod0s0`l&>tvUkMvz@LtuV*x+3~D=XmZ z`gf7*$9HYvRbh}n_W`~_bd8D3dYQEfbB^Fbs?bHymA}qoP~G8jhGYP6;b_#c)cP8h zQRFj+!@yY(E1NWPP{?I9R=E@Lz}*jr6NAULJ{6H|XLGJ-7~cO0C>uW?!r!XlyIb4-6*!-yOCwt3AKza00io$WvWZ{3(*Uk?LAue7UrS zoclg59kBxeU@c}!95Ys#PQGH?0B71X7zI&G4lKv%l?GNbTGJ8;VV1xCc5P4T<=~FD z9=h+uFB^@PB{f)sLILa~;4&hL83e#;Cc+p&lO3fb z6yl#5kiya?SFk2msnq#Ln2yQtCM))Yaij;5g=bn}avn9sn?Vy`+G71=Fp`ZdM*kuX zH8MH9V66acAp5}+a|;e!5k_F6;u#K>qg_j%XV80j-?G9ZEXp&lyIc>Opn4sX(2~rP zFwbx3&LyMI6GtI&qA2N* z2niN}7s?VYL241XTh8d%I!a>WUnsHA%mDt2xlJGPyVkOIG#T0seBGt%$~wK_xuZn= za*6h=X3lhu8{>^GqmwTHfCXXIr+~0-4pj@))TZ88)3V>K2WcX~#V=wJ`pYUgRUD)< z+56dluWJ1qQKS&pnnRxDTmLy-gtcA5jbOmFK?U5*Zmq0{K%_ zc|q*b_9)6qAAYhdK#$f8mm3=iB_dG(niW-9V72FG0LkP`qA-5$HY*8HUYa__NqTD- ze#M8js4TF;XW3|SH!qx|KvU&22*o;o=&+(HWLI{R%m{u`m;u-MPL_UjlOTqd(;qsb zG+>87Ss04QP+X26p9W}HR%YZR32H#VLc2nG6+sO6FyRoozwM^@p}S-4ivw2cw^zhe>z zGl?fz{_F|r1;cjJN7n;XrsPU-0fNjTE|kueE;J0Z{=fi7rPFQzvjof!D-Jcx_)8k+ ze&>93Sgctv8R8TitLF!5iK%ubdH$2a#g8f_1YWqZL()_r8D^`;jX5c*5#fPIBB8yn ziec=4*Dkb#^H4+Yhr+RG2Pfk{?-f>MYUZu3j(_JZu@fh4o7-_-nrpLpUH4F8{jspZ z7P=JmtMA%}3uUH?esXYj;~Bc~DXqr6LZhMra@>YdSX&f8cabe<8jS?tHRPG($}2b(2{1(B=9 zRVNMXC@YC+_UT&`KQ>9m6Xi^Xv{_R%vd!HtMB|jp@ zGCHZ&b>qWoyz`Ta6|I@USvW_3cx?fSp5EX~DuV)EKKC{{2^)6*Ng7s_U!O2dixkCQ zg340+G#;Jmmh;a~B;JHt ztNVT7tFR!n^feNS8S){|8gg%+FiPyxd_??y8gi=OEYwc81e(1X!L)KmjJ8Td>x#cz zJUgb<*SRSSwVMJ5Px?dWR!q-b&c#Z4T2!4QMfp!91^J^7Fq*-KqOeCd$Rt`U(a<+1 zPBk>>4N3^s!vdZ~t;;VjJ zXp;4X**TxtV9%JE%KwH9!39y~s;3MsC_(SJP0Qi(8n@5nyu|@^RD^svy6Q>v61)O+h`po|dMPlr19HJpyCTTAJ{gucI2;Amkuux)=r-5*BR0 ze3%m=$;O&*R#{-K!EnEQj+V*Q^mM`uHnm*l5TNw{+=&L*<5$&0#@6bXmfKw znqBvEWRub6s)~(52p-o_?>zXJk9XQ5ue@)#m=t;@oWl2=B!cp(vO@I^ML*bpqNdHP z75cB&K!gvJZe=YW8nEG37mi5P%_$3~PmTbM3X>Z?FchPGvq)37jwM{L-$`jK`S5&} zQH|(K;cPvM@F|r?bkqm6)I))p6xG@K*c?>UBz{TlWOMz|^gdiBW)%W4@fZDbW+yn$ zLaiT1gWep+zd(Qa7s0d1&ydv%kPb;y8ak+xgx)C0!NQsa)w9u9kQSM>0q1myB~+E^ zF3v1Uc&#v2q*qK|h=S{lp6P)H+QgB{ot#uK4ao2Yg*uOT@s-npqDnL&4k|L^2Y# zgmCktJX0ArfCyAh6Gwn1fzk9S-O})@@iZJvJP)#OCj7ebOGH111-D zqN*Ky%b`OK)Q1Kg+~;^Mi3NUSETO|!`rQOf%vx6)o=pC0{n5`-TCfGFH;BFRgIob} z|IjOwUyX1j%=b@Xu=4%lapz_>cB6NwP9S}}3Yns<$l_H{=ri(YH zeYYjUshb(OxqHqBUK{_-`a0#aGp7m~phu|o`?a2_W6B;P)T(Egd!|JWWDoUp>{m?2 zq|j}4M{F~C=+f>nqRcn~k>oa1g5b0DB&&zm)v3sl_ExDA<3ao_JA~r<97fRhL)iyBeLIyz0!C_o;AG8@^iVt z)F(*kboaC)tLexp_E7~`#Knl$oO0gxkMMdiiPlCPq|U9prAPODIzCXQXei}t;+H2c z78n6z!=Bf4PbG%XRFF@oS9XRU>EzvPT5Eb5riYcyTR_8E;rqcZuzh$J; zJ%brvF+i()logTm)y)H|@W{wzLSe7N=ISx+(uV?fHam8b;@NDqz^B3aAd_|!9+YZ} zof`UPZ|tki_{CS3V~^<~0k3G{+)_pMRmbUdni{N{CyEXJ7+RdV{H!%>eP@ILfXNTu z(wmeD0;(gg4Q|m_`SITt0o*?=Mra@y1;zGxF7-3Zp8$230RPy}Q=W0l405Q0IO)!4 z$!>`mif07T3U zI5vgpNk;egs^Sr^&9cUvD4L*^O&Lmnme5ia$LeqP5r>!~+7=I4-=67Df(4N17JMr8QyGx%T-ATW~s`3DlM+ZM{n86&jNEyb4%VdM<0^MivwSd z*oS_%tV+O;h<$_~^D#4a%fkqa=j0^*L5H(?x z$h;8Cu+EfWD?Ih`UpA(@oOs>zFdySF5VD{~q#U`FETLPe5Sh+0`(_Xkm7Ffjww8CQ z{9z%Vh6soP<75U92xBQ>VQHbFVG6^_^oI9tt9sh34(|77(Ghz=6@2x-w&XaC`QBp1 zyNEYL_w5DeS&8maKgs7`*pz=BaGyCjYIEqb_6Ca?)x~>8Y^GQ3W`|pN>U$z*otHk> z`vVSijlxpvuDWv9UK$FwA8j91TXFTT=hx*9(Xl6c`-vnG1eh0b$S z$F{QrcFk8eqc{qs`mI|Yx3!>SkuExZ zo5sv;uh^@b4IJyVISs7KyKH|Ml&Q*fHVl1_vXfo?rfe-<-s~!HILC{el#8D68RFX} zTctO9vm)J>n`Go;>0AgG$$xr9wB(?7Y3dV{fC}zsWYW{K^oHI%7!cC2)Q*G0C zyLDi^G0K}mC-qFQOXe$7T^x5E7`L}1IeO{UUnp7$TsZi3?`G}$=kBkZ=&~D8{OPVw z|NVhJ_)717F7aQ1-ak`%QVz&5HD%MxvQ1&X4{t$A2UU}nTfJYmbspgsBP}sKwo#HA z=R%IC_2#wtV;C0Stnpk0U32E&e}uRtIp!buTNbJLtT&YzB`bny@{e+p1k{bu?UVHY zi`O+9Ii677lCSF$?wQckEUBrr2P*PDv(ZhkEk=nd%6T1uY(QFDg>n;8Mvzt&ua_GP zh2dL-Y-?i5fC(UFM6Z#7FREA2nBidtr(JUkk(BV<|BuOu)w*rAen-SJuj=@44hV!s z4I4Zk@x?g@SqfHhO?n2X&plUvz(0RIo5NfMjYg(dhgp{3WLCJ7`D5P@3L&aiBLY)% zk2u(YJEI+Y@PS2W_u28Rtv#~Xho+L=?&4yTWtHFczIdd(Q#ZJ}4?`{{NzS-;^2lBS9HPKz;)pDu{Q56{8zYy@3YS4ZPCxJK( zfBeWTgh*p!C`zZNTSZx!$N2})yWY`qH4Ra#>%ac`+?dxID7!(7m4CFm2_(A8-Ag*5 zT_-gE^bt1jp<8!{o)TmKOnJkJ`CHAMEFAGT#`vT{Y4-|y7LAu3u$`~pEZJe@_b}Qv z!3P)2iU6EBE&5X8!6?|M=$Z2?h)yn`agcZ)^LedMgXtWNDa)ZPVfr{!AS2GGZMJbiK(~8+cSXOJ(DR3;u~IRt0RVB&aSVRUL=sI$ z1E>M6mL>M$<1#b)|OYIf65@e5?P~b&g^oK*&+>M6$*ZF@#_NyV1kukfxhd0uwW z&l#R0)2eh7e@^@lZ0yKYL>5WZ=P50ipmp}FUe$cB;KK$1d<}mG66j{_a#l&*qhU+J z}?dMX^+Q` znSZi!MyV$81uu-S0z3qx<#1QlGk=;#NzR4KNE#%h@56VHEDr7Z-wLe?8|`+>f$CF%TNEyzs$+ z2ZF+vPbI5Ld9jM%eY3$|zr#awAkfeKe(&uP9LY?bQ{noO4Ko{aPL%CC;=8W55S6{0 zb6BEC(>=k5Fll}cuHx>x7VUpu>cBtGXzPZBPtF5mGS0xDBhzed{ z>|2DLGWEO(yj`eEyOal(gT8Pqt6&UX zNLiL8#O>d_PY`!LIjT;L;z-er?DFpH%w=rUlVfqHca*Ek&em$1DGm}$LU;!b5Wkm7 zGK9nWG{QO3S9bk&bhJ1R$YvqW%Xj2ykivo&q^9ighA6+7kl2tFhJ?;gh96nmngZw+ zgX>oDuEM&8Z-G}t3K53IgkFXRAdQ*Tw;yBlvX)i<9-;KK49d!f*w9OG2xh4;hv66u z69S@Jgw=9!o8#~pZ8ciMO%;vg@||X5YKL`p2TvHDW9h2~`NAPlq0%wq~G>G&ji(8w_V3-jlM$Z#l(M_5Xym{j8G zCEViESbcQ3k0Tf++Wkov3Qv^&Qrr=%W}a^v*KI0c_tNJ#@u5TPMS3*yeP97uCcsKx8pPyhu02!x7%o;R{kKvRGW zP=keGk;OyIg&35~y8whm07}0^7uhQ3jw@F z=X12&TI6s56YoOBA_!mvUadfP zG++GItX-=nW#Y9FY5zPHkYaJoDfH$tLq_yW=~>wRIq-RhnNuPRd8p3Zb=(5Dy_{H1 zUHVl(_2v)I7oKpJCZ?R-qJT|~no#CG2Z6x1?{$dbm%?X_lqaSZC$^?cYxG3+xUx?h ze4<1WpxAbJLItgdPC%qftX>1RL^#yob!m{s3x2(Z#)?!{{a;Kzhrb4^X` z5j_N`>+ell`dynGu#$c#%3XH~XypP5_m8$4v1AM#9kGAbF(!Q%{KzS+T&U?*kmgh` zm>k8Hac%m}4mp{U%^p-~?&LS_sBEZ#7~Gj=%s^R2a0@jncI?x#B?V~|-98tT9iTW= zk9iRuW?IR48V~IXzAKewRRN0`5tfhJV6`{~(|P~!m&IQvl#FIk_f}E_b_#fkmlAp# zA~^AD_XAsX_-xB>@#IFGMxjHHDOj;p)Z&Yd2ZBqf5|6h3lwFmk*R`6olqLNZ(1o>3 zG|jR+1=jbSQ3W|Hha9P>uIT#hj5W4MX>CZl3~j~palo>%4Y#$OcGBUgcoNQ+6>?LY zfcR6AxU!Sqd+-kx+G8hUbb*~ zoJJe3ZE=k>J!#YlByRQ5a6S(4f6dZLnC{Ql-$)=_?p!G8J9~xUOr5Wk-=}*DP+uob zTF)}U-aDIGnTB?M@jy89-_$Awf=*{+hbTpRTwxYb!nj!P$DrYBt|KrzZmBbag+H^s|;8Z54rSjLIys1a!q= zO-WQrs^)SaWC5f2X=NA*0IrgF-x5QAL|&Kx&Vd~$ z7=Lkq$UNTa6x?SFC~Le-qO>>uE+vq#gA#x)geC$$4C3t6&-=isQUMGj1fbkmBKJb* z=*pDLT;}77QDd3r$$*sPVFpO5<_Z zgKwyopyXtHEb+xKQj{eiG+AS5SXm0^4{{2U-IzKGOWKjnc78H7ESWF)sNt1sEeCTk zZc)!!Zf|UlZpVKk&=>QMcRr``C&^Bnb?J?v??eL2nJAJM``8lSUqjchv(C5@OGV3_ zqqQJL2*Nk6;O$cZYPDv%5JyHS{O2_W<7|on$m?8JM$tfs=KN%d!&crXnc!dNtc(CJ zwOAf1t)+BghY`i>D^K)oL(H9a7bX!Ha*{)f=bNa4i@c z=A>{E$L&Orq_48LCTK+?r4tirx=kHQ5xtRF-UZi&#b^3gsvz73Oq4Y9mNSUKCXVN# z!TUX91oFd=rzDUI%H}x%aRKiO3F<+%=YDnxpHqZTtekwY83kMQ$%O*N+cJ~f}zY-*% zt^?ga>_tD!E$`ATRasQp&F(8j6;#T;zSM*3-m!;RuiFl6R;7n+JjTf(c&Kgi6X9~t zkl)q6E7$IRX}8tJB(Y`(sHZGp7S^v7uMLUx=^6Aj%KX9&>kjaN@TiayGI2<{*MW7BzyRQyIej1dHw* zPQeg?G>aan0>_(tX@Hnjj5PsNrfAkDBbs1*BD+>uS zK9nz_0S^Q4R%^_?y(T#Ul=MYn{84$k@AHF5Gt#lw%sf!=s zJ|d{+<^4@*hDIy9%4M7tw&mj*seQ|?-PV-5vdBJ1`P=u{PmDC71s)3=*>0KdEs;Hx zf|B3QHLus;2U8ZyNUIx8TSLLgHx}FlZ@2A#xB`3K?*n+1_%@1 zU6VkOCB@Bj8aC_5-+bLe0)*g)(E@?RuV$ee*nr&TuTQFjAd#zwcQ|rbsKpSpkRxz3 zr#g|T?3pG=4eOvVig(n&gqGNXUQH%N6GmGvl%sI1c~%k@!Gtv;?_UUY zgjW(*4yGC>0i6bpk6(`<>hx-qQ>SxI@syYE|I_f?tZ;~r-&)HXFS$Z~Te}5%sJ$?q z@c#T`yY#lVKRQ$5#f3w8U4*jXQf73>xx+bE(p7)pD+0)J4;+KHPweI05A)moRqX1c z)(^~Hf9OOU^|)TR+R*Qo>3SLg6?c?{zwJo~A!Wo>Rd1F(Y2Vh8yKuxh>#-^L%ccl* zT?AL--qW-?9mdg0h-ceO5Z()A*?aHV@Q$?!4)R*wwc2-Rne@zPw|po!Sx##~qB zxNA4M|DnbG<-a|%P9Ofqh6+*4WbLu%1h4z{hwn;*O8S5Rko58Pf|8G4xl4l-iIc)k z@*ktqz`OY)-lv7dJ4QE$K`%M3)XGZK=S&$-8+Gn%Wi8D=@`rz?KawBYOsPjSbd9a& z4EVfa1gwiVj3Wd3#qSw+#zwvg{t*KHjq>$nx$dn>;;u@EY}*m}y6+#tDm0(Lh{&Dk z&I5|7S0ISAy>t=vaC{h8MP&M%x`UTQdTvv26>>29Kg_7|&em8K2kaXSG15V`X~AFU z$d%+=zEE8!@O-Sf>W%q-){oj13@8lHUsv9tx5X~^CB`2?@_o>YysKc^RD+*pncl(< zJxtk-vD9HtotC}&GcgS-r^Tllo+u|-BVQYy_I&Ron_(l{ABaEo>`}Yu5o$lkX?+NK z&qA9@QeIGDIEO82@>H@u7uhJAAaSbM?I~kkxvHPVo84=t4$gB5LdpERs#LcsS*q-- z$jO#!n(85u-<9H+m?j=(FKsV!2nHkN7Q!hvSKrujz?_2ks7)ln33i$?BCxqN#U)tu zcfvDtF(V+9U!I-C1bh+fzNuDV84Ls!`lzhuY&Xe7R$Xr`VJ)!ft}J1bn+Vdua71Sy=$2mgtik08of7>wy3CvbXl}JW&||0mPj; zV#8=uX}{-~0+piD;Oa2(pRC$l^c^$QwtyJ04W6_z%s)=29D4Wy0QUCw!ngfM4{5%q zvx^NI#7OLX{`R9?oDt;RpW;2ZKgOIXX#YeXeF?zTlqK!uXLQ)y*ofR6C*rM-UyLvZ zfK@OGUnamRAwV{&PoT2p-T)g}0Y^e*n)d7L=HXM^h`r1n6i~@cM#ch210bxFxPCBG z{goevM(aEx0J<&w5C`ha9PWz5{q5iw_61DivkSBQ`-m>I$;}6RwaCZrwl{Y3#B~Fd zP633=q@p~X0XHnj0HvQ0+#=8M{2PDh%Y8XS#CIIeI2d7AlT_e8XhV{|@dTpi^bE(e@#J(KCeISK!ARvSmzld*vV>@c}HXnPKefzlZ(M zm>!~8F3SgUK)+a+JQ?GMmlbTJ0bUbxNXvN)6o+vXOaSV zMW%N_T#T6(!Cdq09p>PP-&~vP$%E!d0)JrX#)THl?XvT@%r-6hqUOI0vz38=GWcW2 zr-IC*pnR^(siJX=sRF$JkKJ)}rmt@qB$6s9sItB#SuA-8m1QQUT7Q zU8c$;e+Ly=u>@oXDnnooab*9Xb>AcN@@y%;p8^Zp=OB?Le=j2l{^7t_GMws7A71q> zo>oan3E9nc?C{}%$Hb;lGMI}?6|JC*h}D-vI|$Y%O)0ksQI{VDXWJ)9g*$iW@R)^G z190k}7b{Z*ca7fW`dT)?DXW79NG=X7iy%&}4#(vc=CzpA6U<{7ML~#O42#S8flb?L zz^3x$i`wQX)4Jz$gX-B&Mv&3zZ zB}%b*$9J+dnqnQ9K6`IGU+=)=tbJ5W!-4!9S(O?W9JxtW6_b07Y@*|trw=wH;y-4bomE>S7eK#Yllk15EJqG==0)JdGuomy-eR-1PJJq7dT$rAPdvRm2E$GHliKpLY3b zHz}WcY-;fyd_S)$&b<)~7u&U4Y+c#&aR6qHNRa*?zG43HPJf*LqCGyCEr8ho@)S(q z|6m%_|5HD}j*mn8etv+xf1&cjM~+HEJ_n&@S0?T3GWG8 z(auEd5>dY!?hSy(;bMP1B`QYCTiL8>?H+&ZC30`vAJghowUhtbQK(Z{Nzp(GZZmsS zs?uqR3cb^VM@Z>%(nR#XS<5sjetZ5MEi*Imtur zt~+hHxM-SyIUaw}G2dj%6gW)GAtV?O^#V|fM|aWIUtR*RUN^7d?7JNP%69xfjABt4 z0WebJhCmyX7(yvY0OD5`Z3jsg5dCGRb3O5RFX&mPUyCC$@_*XCV<@7+M!W3<=83!JQ@;~&>QLdnu7d*yhpryv+ zo<|MEe0U-v0)pTXK>>(>XA48ZiQ%v28sjhSTQd|0d2NU_Fw${xQK|>mIZ#Sv{(#fc ze-0l?n)nS_JQOIaH{uD6-#&+oIIun|N1Hjp>RI^+ z71*GbM~=m!-lTN_d{r3S-=~H-`~1cme;&i!9M>$x54{fRzq+c1OUB$8>?``gboV{s zrR!NQ7etFA?va1Wk0@<~nyUEaKJ2gm3}T67{^$5P!=`UY!+SoMjcP&W`vLo_^mT{E zyuH1edl}2Nc6w~Qb<$-GAGdXI_@(C=Jnydjk34ga=c2i?-fN^t3wUjAOZ5|a zQ#z`b*`g;j3sI1k<}I*jY92_R&iamJgbJPsHRt#BNI#g|c%}PetSs}Ma`D?-=*wj|zmq2Uh8cA^ zxt5L&*`W6VE0V@>yM62iGK_mpPp2}Yor|pi>uQ;>h7I0nW76i_7>Uvp%VQo~5$j*y z(xybDCc;M7^x*AU@|VFiJHJuwnLbzl{vdFz6_x1087SU|k96xx6OQUfR$uYytLN7krWQ`l1m z;^c>sMf+~<_|3BX;4-<{7ey>v3xlj-G#rpL>z;9e2)RCTaG$khaNf;X0gWiSE55u7 z;m=P#qbf=XVEb;?s(_*es(*W^VWV&u-?Y(x%<^g-d?{J)Upw3v3rL1des0=}EVm8= zjh;icy8u{@nV*$o)9Z9L;Qwjl!18{Qsg+dx_?-_GB82!iQ9d{XZX=R`&hV+y8AU^x_X#IoszKRB{Nmzc_jb$xWnQD|uN}O%L2@@QYQH4Fj*O-Fd z9~@!uXKe8(U!Hpja_7S^{2;1RoXrJ9!~WFS4peG9UTnwK@aBhrF^QtQ&PqBubW%|dU(?p#ksss$Uf1=M=f+RhK*Y5~Lbw$c^{iRGvhr*Q-&;P4 zQzVLk6>01I)a2W(I($&974h*5)^_ngMYp8U1c19cd#w_Wq*}LCl#z%xJ!!VT};EFIs`q)(6tv0oSQcs2x}+YUk)n-iE)!VhEWuo zxsgf&;>XRd$0`a6j-KWtH5o zmo2>n7d2+Ob?4=Iu4edak)svTP#N|zqJh4Uj}jw`{cmDTZv$sA!8<2ou@$<-C8?FO z1nBI0^>Ig;?_<%+QAIt@D|i2p_$5!QUcc+Zr8_cOHOe|9aJS#9oy~nVuebbcB2J`r z4lnu>l$SCd@fCD$5hF$ic)v|zGfXw&RA#=^zbVp+N$*QKkf8KvIl)6}Bu12?-Njv7 zRi<{-4kV$w%z>+3iv@vXYBbt$r`mb_I=c;Wwm)|rGUMf{IyE=l1*xt7g<9FaUEM#< zKT&h!dh7E;M&sW!cTDeX1W7dIQVhF2oCm!gJK~izc3&GC2H`{$&~Rk*mm-(E9R3)Q zp%1wXD*7HVLpd#=*HVfs3^}al+RvJ&*fY)%W003+S7wxARF4pDo4&pLjPV2*6jgJXM(4K6MT zU-tc6jL@^SAG~GORiJrLHHWnfG!qAh?{9%$8)1b2C$Eos2Zg22_Trh35z_?suSq(FEHfRVgQV_k8@S;olU9kOnrwC> zo!Ry^;or1q0S5j>IMq-*`@!rEaW zfikY~6kKaHSg3xA>|ep#TQa7c=$C&G#-(g_#an$ zW2Z5sm^{743o9^202T-SbF~jKQQv$@Fr58Xvcl9yvowEa0*t=S!t6XIeC~R_$p1XS zf@|aHKBWACx?THjmeB&A>sqp0>iRyoc5F&M4?Qebml0tVMP{#)VL1t;5Y$ZS`NEG8 z*f&4B>5$YQ!4^Kwum_$MPdA{V!q^tvDXB)CNe|tM529X!1A+xK z#Eo8`ZrE6un!y4{fm_dv71cHc4f9xJPfhfvg``~)l&6>&VEN!t5UA0<2wH1Fwui+W zylA4Rvzm8X6i38XW#ol`VA-(~2kJ<=^;dMsbi~D_7jB@G%{U=Z0fvOBEPeiQy`+}! z%b5(Ce7$_p)Wfwb1-UACKjTneQYmzc=pm`jaZ*w$e+C(R>^Io3GPO>I9#Kh4J%Q*t za@=nX%89<3h)`;37E}mcv2SNuSO{g_ikZyK^7>dBBgI%~YIJoggMWqJPMP=o=n5gn ztu$!)(1tH_VHPn{wK;8OLAn(585Q?Y`Hm-h?Za6`H@L*_U%`4#ojUM?FdpnRe zj;iPXxkAY_?lI(jzTBC~ZS`Ilc7xfXcpzH$pP!lpFHT<^ztUaa-aW}KhS%OJk7z@J z#iB6(Qj3R}GM>(6tpJ=U4&6xSSjJCiJmXGpG=bjbaAc#-Z+wP!LyizQJ<7f_$v5A6 zbT)shRhW$D+k)*mIk@uSizZdS@Ek_hdd%!n3#vm@0bp;fdh+ok_pC@#rQ-Qoue7}T z5J;KtFzHL1cQ=lAzMu60I++rp4l0L*TU-<(2HYxVv1=0hByO&?>rt;z zm_)SB!U}HLaowiv0O-&xGoLPJQu~z$IM+tDW~78aMEFTng`31%<8L`&YL1~JH}8hZ46BP*>|sjqA%P}WT4 zd(-4%!Wq)u&{^L2v)Rd?VA{VWHnUZ+D$iP#=Rd1|{~pwGatyukKsKL8>}^Y|ZW*Bm zfqA@==bLbd0dx%N`nA@z%-V@Q8nOL)9KLI1Y_6t<%!j>D@c7mI1p4*<-MOMN7;?p~ zR-ep7iC##NwwnDCOzv)6i)F6#sAyIFgAaGDvoe%QQjTLJE8`|eP-mhj)33sS)x?Ue zbBmuVOiGP61{E4_W%w)J5fgux$Ct7~osLQZ%fG>|lqf$KaaHtp2#t;2Slmu4zyzJ9 zR<@{SiT{{n-f}6|Y#MKyH^-Tcfh*t!cx(=4L1XkXHcn_Po>`xie$#`}u?r$+t*m>6 zIHn|8pU=Bk*}0eL_ZCU2v|>@9B+`tChEb-wQ2s4Hp#ej{cM}qxFQe6GJQ>R-3kCPIMv`YLg@N$)Rf-} zTn;1Z!yE<{UMDMw*iM3;(+vEV|3S&G-*hz<+INce#}@{(}=F|1F<5 z|655vKWBl_1uRdU2w)57(3W~QvZ5ge2%EP*{42yuz@Sc}$hjVjPCC>v?_Cl?VfA>(BO{GY7)Ljq)@+oMcuz?VTkIQYZ){O&!{(% z<@p-@D4E^L=350st3jq1dwc0ty80_Za9i@Nlw+>KqerOCbHXp1At^T78Ip6EMIfOr zU;_TAuH&SO<6|b~186iNu;=^M^zi{dm)rDI40Rpik2De)%}q(%nrOl0KCkFhhL?F8aI8VrmkJ*R z;cZN{NTny{eJBy%?aBeTEL3kSipz5+h#t^+!%NBfKFlcpvtOJ zn9bqWu_New{>eJ*Vz6>wFNucO+a7XS{HPB%oAN^E>@j8+8ApCv4ok-9)@>A8ErMs2 zzO$EO?U%=8tRb~wdd%zrKj#Y2%1CbTj9I@KY3yMc3}(p;tH$2yS>(MtoRgMj($f3A z8B_kEf`Uw-MV<{J#^4bo7w~a~2J2w-oP5uc7W1g~;qSD^5-qh}eVhG&;?6I)8|lin zTL`B=^YKCRgzLuJQ?eAeeCgzzwhyf4%J=|-ueuz+xe^*E??l>cXE$0zE_Tk`>-2sy z2ABvgz-lo;zn1%zlzYc9T{Jd0x&?}nX}Mk)O?k6dt~MlsPft9*@DGj8?ABJ7r13pj zabQLf2K)VTo&A+fo6g{&eyISdn&vUau6lWuq(#~|a_e%P4rTrk?%Z%XpIfi%xkj8S zpotDfe%v{8+guLJLLZq`EMuR zR}n2)am@}nR8GgkV(6j%IOjsMTzO^=7q?Kc=q2R*S7<+vyr627-=fF#`Q}6T-YM>< zgr+cNMJ`(CrP*H@?mka-?G=fZ5J6x%bAV;hWS8+cnL}GngM<|oeaUgLu-+eJX_oYD zPaLLY^M({Pb$2DJBNra(?798k=a#^LY&#>JXLR^I!>o^*TRV=t*vjaAZjHB?*Y1G6AeP4hY-{O*s1$?!)gY6iRJ#>ma zkBPv7^`d1%kHtBqdLpjZ@2$zv!ZjWKx-acikYyDdfi5dxmq~)`;qHtaHl;16_Dn_x z+-rSNt3kJ*ZJIxBb`~BvY&G$+c{WS*sy2$DMf9rRkr(WzsRoZdQ(%8dHAVmOyTCaF zN`9Eq{7CIJ*2tUTSD!jUpU`2_99&7JSC-Z`Rey!3fHHFCd`*I9!XsDBp$p28z=m8) zo{w%x;eW?4xEU}SKiVHjT5Ndm}}pkBiDsuZ`1> z-;|`0x+@wS$4t_brxcG1cPuQ{19FxyS-BnGjKxIZw!iR1ua;P*zoh6Y{EBR17s7VA zw4Bl^W%~B5ebVet))Jxgy58?fu4`I0MLLH_Tis1n4D;B@=|Mll5&OC0iz+Kr_cX|;rcoJM8A!SjL z-Vn?v$3`;;E=WF%41>&rv|kIrk6(%Ito_%m{)Gr$zatI4iD%?jAVNHE??8K+Fn1Gt9O{>D(PFx zD;K{EbOhmnl4~FDbBFA1>7WprxxA0hCNF|w60P1F%x)(&6Ft0XC5!<-whG$3^@G~= zSbsM~AEbp_myveD0|duJY3=wl=hUJr%Ujx*yxJ`UHLN6$pK!JIyjip#$RwfgPXWAV zHz57#tp?-1PpT?TB)djZB>g!IgdQxW%X^Z$(5NG!D{fWdU72Oy1$_#`yu_+e>#Jo> zynaC0PcB^G%#Qv&RDFQQ4_F+oJ)N{SPyR00cV32)$j&XIszU`7)HhAO2iKit zzt;pYOLblEhzj+jzz+}mBOVD?TaPpOvliX$k=t#!O%8A}{dLQI2IW#nGAd>ClyNQW z#0CXTfws~ZjENcS#A!eyuc;+P%KEm-)M`q~;9i$5&Wh@ZNNGiRqosD}w9pE&&aVJv zl_P&|%ioy9bQO(RVnDG`w~T-J*ez`OI8f5MZz1kWnb0onTc*J2`NdzZmSko5#Db9~ z^341aR3!#s{hoN?F>u;E;a|Uq>g21u*+1o%W~zwECheN)-bvqX9i_SwAf8C%Oc4}P zA@%zpfbQ!klWE_2)E1RTIPJiyjtVWtSvtN~LN~i&;Q}u(4cWPW_)#^dN;}k@64p|h z%-MAc;%@XUegE88;vBQkY%mS zMxt}?t>cQ>_@-rlhz*h65TrCRh#x-dmQ=5Jd_6;IH)QQIq-7M$_zLzJf8SDRuF;;f zD4}i<0^JDDP0jkh$J?JBAtA5IMK{?qPc6+<7rYU-rl9QW=6ObhlR)#SGv0}pcFl{9 z+T`IiYWKI(usoXC-+$@g>3M*D`as6d4$A9lzzfTeEb7M{V9O}mRP8G0Y>?&6&KII^lG5|+p(%78Kr5$J${GLlRq-qoo2Kw7OK{Tn@q`{ zzv=LXs;ZmPhY$6CGfzSkl!~~uU9?;>h_u9J9jBkWPqh|mAI3RHtV=vNt(=@S5spRm z|E`}B+Oefcu@;{g&tINb{OXBJ88NGottX-mevwgTu6x9I(P{28cbk;cH?3)=vF5R!lQagFGTG!6n1d zszRvo+t9fg6E%X{f;(M{#<-H4#WyXksnr?=7+;^IZe1xva4aU4gj{P9hcGFN<0N%$ z2`^wnrOo;$%FsTel><3|5j)xUceW`;ayYpXR^th{vmj`l@a_{v|MU@6s*rbYF$Vfv zg@E5o+w$NoD4lA5NlCs5eR`ug%6ROvZQpC0pz|BCJnDfsEu6}vX6f3nQ;t>W_d9*c zy<`Uurz`Q2ohCmglIPyHXDFsIM@Jfb3Wd(OMkUS!1eF!LL!rP=cL%W14@_8k5#msd zA4{{DvFm@};)o9)G6C3AJ)B3GCSg-VEUH=oh%+t>RXp@K2oYRO3Tr$Zzf4AW78aUe zUeyzArH6G<;yuR%gjN;lg>mMcg!$r~k(??TJ)Y2p?W9YS!w<+f9Egk6hn|3{2vc$i zx4(r54o~&Z{gC`hRNl?^sgrx81Xk1+(x@~X+x5t8*i67M_@JLzx2(DhA%XT%h*1|O zaZ@cHnI+pJuJx+FI`#)=-|XPBC#A*{r4uCw^bl$OZ7Ofo5hoca_8fQG`EFjE+N9}s zMncmwDBKUuW>CTr=e03kP`o{5xi!Q5dqt(p{xX%6#jbQTKK)9T;nl%1F`edc)wDHM zQZcm;M2_6)uZ``DjfgEq1epkoTRKAOqM&+RoaV&YoEZ# zOWU|_`(%13?Bq(&%e|Fa=6Z6SqD!)`A*X6HKIaJzonuMp z<#h-Y$PIr~7f7IN3n-tHL)b^;IaT*Jw z$o+sKNM@ypvXjWXSI27tm$%GQJ+9_Rz{VuQsCevREF>9WaTjxt0-&oWX^d(yc=^Mo z3am##rY?eyIAj`tj$N6Q38(?Ty^C!Zx2B>kmImqr0+Yq+)xnPuhh*{upsFgx~L;QL==6}U%dR#cP=IRuAoZ0!EPwZA7cJmV%9FMR2 ztWP!e3DESV&n_XUr}y3;xf`t;UxI&NgO`a3@Z$3&%H3d#doM;;D!v)sXC!L6L|OvEU>wMc4(S`K%e6VOVnxfy6O7!M9=@ll} zp3^O~rf}QtKiQ!&nyoB$0C}=v$j1hdqWveKwPqD@ZS)sG-Zp&lSKWe->0YL$$O^aU2&4Dx!mw7GhpFX2Yp` zL4?xp!6^g!JPmS)@WLhlVttx3cdWRy8kS2$0_k7{eblB_beVm|DeGA-m%6L02S$nW z=3miLX@I>3qFYJIq#2+E7?xW!Vh`O> zSmRb3SrrK!nu{8WA}iD;!Xi4$T3gC5}Gb-Gecu|&BS<)*gAI+&!*Dp}QNCktmb zM^#~F@9Ea*P|A+@|CmG2|6Z*BlSd$YZ3|3R?*C&BjQ<~O`1+Rox(xBkqji8z8chUe zs0txko9C=DG?qsRLfWx&g;|lNWm*1U0P_sz3E|fO{=mTU85i5Y4#R#sh>X~MN3L`4i>LM5(E;DR5(X@e`F+Zr`C$QpjvI3T8~h) z;52j?#IEw*F%!R{bfuEVL%?={`k_=rx3Q|$?gF(5A#L9)bk=)Wji9URuH)m56X7_8kMWk4|P{$5#zLUWSwUhdY_T zs3U@{QRXqJ!!18YVpl+Ch!R&g%v z;8YBMXmh8cSk`HITDAJOiON5&*o{fBBH{Z(-Kn{a$#&nuxEjs3-Bs&5iR+`J`wnRj ztbihK#w<&Z^bU3td+^b-vGRsgbfe!XJE7TNJ0w5uF7 zES$|7#NWgH3)J3tN8W!cFR2;v!j&jcgPijuUU)gKuM$>s*sNKQG_lzqGBvBAEK_B; zXu@c^-}fx?U(;_^u}8mbm4eQ; zP=3}^xy{V~a%c1GT*)XIyY%e+-oD%EsMq>!qK|)x2Vow*`C{iBri*qw>!9`iy#1$g zkp7VWr%H40JZE(@JTBOuuRjA6(OTe19O!J^(}Q;YJZ<~SG^3pZq%-{J?gnXL#OiNOAA2H)(w^p<+%+;wQgug`hfk(IH&j7lc#N>xVeMEfX4&RNx0$h* z>zURKGcuYbvNE6z;@N_Gu_4E9N+<>w{8fm;nW$uNdvntLy)fp823-%^>{f4QQ*D+N z5@#z*a3IBj&4on~?#YZT5obkBBxdrIb3kfZb5%)RZN+Inf;I3YQYuY zPR?;a2#hP4!=LymdeVus5=ao^=PSPOw{Q1+zmMvESM*_g&Yk5y5XMy;5xsWXiJm?k z@3m=AvvG@FF&$Xs7hS(?_w}3X)QIE}F z4>Kd;<#$j7ntjS=b8`iBPsrHfykF05v69g4C#n*OhU&*!(}DDEeT+uJaD#9vCL4Vw ztQ&PuhHiM}H47ROS87}7op!rvCBe$1nhBia#!FX1u9k=egsxK)bu^%(LdXU zvx=Aa|0$8qGxVRWO80su5Pt8@9yo7{v)OEMwtS2phpHdIA#$G};;m&MSURjg=!%6Z z8v*sX?3{MGfUC_h#MNz-VEyAM!cgFLnjeFK-(yZhQ zhOp&8qOzz>#`2fuQ-z;Zgu3(e2}#Ojm9u;dBJt-%ufbjCu7}JD)nN6NN;V}gM-+{; z=)dO2^E=Oe&|XplU1QtD{{UY*Y$(s0{@q^;y@b(GdB|aiJ~*BW(~WUeKgzM_Z3&wx ztsCXId6gc!*A3oBwQ+T6k^zFKHA;}h2(Mn+syfzbjHNW5?>J=^4XZe?3jG60ik&ZK zc2WZE^@-^+yXXl=4v-am99a?u3Y6_PW6x!ZWHr?v>$cP_RWamCm>6_5AQcP&7_=&k zCiB*e>mKO+9!5&^a>ldc@cE65xc)KV|0@~(gtv@E@xJslcz&D{Yx#5v53F6B-TCth zrL&d44Ie0-W?hI%t2@9uB^~+$lRYhY1T+p6;%yM)e^|Ajb4c> zIl)Ewj+kOaXMNmi&wiDu=+JX4!gZ?^l~V&g_NwTiGGWZBn~6Q%j~~l;xG`Qf(qh=H z-Wz1TXbx1Nz=>x;8^F8y8ln7^+>ew9v`6 zVJ`s9nG_+sHc&D-@&Xsmxt>b7cV8Gr9dh97Hj@daj>Xos*j)R>UW^Wu;;)JAAO{sT z%Je@@8O6cFqc)ZZ++7gP+#AgItN6vMilSiL!ib_N?1RH{_3)I@O3pUKx+Rv#BR6#_ zZhrDlTHVCRO_sZjLA^XJde^Mj&r+0;(#J{6z%KXD6-rJk*pK*UuV*fLR!ir^DXIl( z`NlcMG3Fk#&hK5y6V_r?wkeQk7BTzX=#t;AjLF)ul1D3woDHy+IaR+lx9BQla>%UB zH+;pgmE}7v=~*oLP!819)XAbWO0#K`c+fVC_H=qUZnp}HZ=c4ov@CYANx|E~OXz#K zmw9X!UY4=i(UMh`3)Z0qGamav-FCaXxC%m*x4N4Cvs-SXC6+nxL7Ug6*<{A`BMqrJ*+Q^S~bt<4hLD{0o{h9`Hur>^@P8 z?>agn$}udy2hpo4PhFnPI*vr5m_I+vS5`~YovE=b_klxtYn3i9p2}a_cK1$RbKB0H zl>CJ+)pq3ooq4$#Au@AvcqLPIID7G_)h*Yvj4p zi;vvyPaEJGJPyE_+p9n8#i~$t;uCxCmqAzOd8O)~i3Zub?&Hobu(&#RWX6U%651N^ zhrAC(ek{BAr!2jzfUtK=t`Ctdlnrq9MCi4qu4bv#ax!Xbri(hd4{t`p6SGS-3jnct zenFC20(m3YJ;^GizUGd|fIY2W=|SjaQl(LC36&1ffhQGoj&Xj|Fi6=5mgjB-WG^{f z?CJo>o9>Mz#adjanOry7(m3-2eahJo`L#bxS{WOPH3C>_EN3B-BgMu=nNwzbHM7xQeFy`>=%d5f4>N=dboF!-mI z8``;II(%w!>zCt0Ib;1*S6;N@5yShm>Qj$_P!6np@XMNiuCtS&J1*YW3~2XnOLI^q zZS4+#Y0fXHwTtz9?(o6orPz<&E!T6Z6*lwwPrVS^HdnbeHPFH>xYu2U#e%lj;CvxKCT_p5QI{0 z$6Z&6b+2d0BxSjUSH7|82n<-u(@5{ovS_*U>G}!Bv|1(PJ5iS9jM623X{7jFqdE zew1t)Khn<-tDzH1DFQ{Y6o+pPB~05U%xTyv-RG&NV_^@I4_ zJ(o+sK8&*2hc<^ukMJk{U>q+raVOZ12mZ@<{TN3aG{0hG-*X|k@Y+IXLhT*eV{&*f z;lO)-Mm)tX(B>ove=jLcV$TK%(+-+H3Sm?xxJbGb6Aa6DIVD9j#{_!pb#cUv9~t;w z0%oI{wfo)L@VYhf&KyXbBypPG53gzgMTqG;Qv(?sMi`kHc$G+k|IEg!NGL$E`+ayO zh~xlxeWDzHm2oU6YA?Fk2q)@Y*Jr;im^2`9NZw=vjY(K08gUysE{?ltL77yM4Y-4Y zQf24|2eTu+Sa7q_*f)>J=n?QHO%*>)ch6VvLXW}4wj}*hM zqZQHrD?R>4EB<3%eNx}0zveew{|75V|F=edt;@YX@8wqCM#GP7&M71UZ7JlZ#%P(S zced;aB)_eH|2^9o%GK+D7hYHXSk?LiN3PT6Y{VP}SaOsMWFz-9qC&bn>jsH-8_rB( zE%4_GbwsI9q&6 z7nuLkBh#ibW@jmD%ag-W-f!G~mUC~Nl8wp#jP#67tjZzW;=sWA&ImfF55aqJveP z5!@o8F+GzjNBHaHvexx=w!CNWg|D%xP~yDI0P`x1(=H@X>k}r{ZkQX!w$|Vc7*_5& zraN(G;}#izzZ9SuJM>WS4gBZ(dbsEYnwIh;^kQC5>)3!yef~L~)-2zFN6g!f3XAml z^i$O17}K?!R=~2dJJCnBnPu)^m%>1*zk3gUk?-EZOJm`{bKBZxD`2C1_QzVbcJZgc z7FRM)>{9KsV?}iOB}}02wo2|lc1i3P`YWz$QhhbQzOf}r7S|1wh9{Bi+>QwxNoF7n zJgi1wm9mJR$XAmi`?JrHh~}W8{aM}H)mBGUd2OP+Ij8xO&$8y#+QG_ekzI{R^hVej z=`Pz)?g*dM=9Yk{QTq^Bxwtx7+{rHj&6NFGp*vaAi@7}F^x;+Muzj$|-p-i=0y=IQ zMKSi${5-Q=xvzu{qEzd=kDtFQJ<=3(mDZ0V@d~s;t%4-Z7jMfUgUapeq!dhHENu4u3xJdZbQF7dq zBsBD~kmx)?YPQmMYbYBrx7T5RM-9t{mX)>IfHKM?jGsiJ%FjAls`T@J

LNcy+P{eRZz!9My)Dr~XZsMg9!bW)XrlgAe4bQpK^~g0^}-5iCG)b)*&M$|;!+qukD+W~VlBP2_WLp@8F z6zNw&z+c9rpxJnHn@7#rAa^{ap4zE`kCzpvtTOH9_f|Wd?IRrH@&CF&y78Xc; zJ2`gW?G-qD=n9Q;6f9U`t(>gcbXu(<2t%n{lvv3wI92Er2ysXyvRX5t8?VHlBv@k( zEKp_+!E1mYhmg}^p>u`|7HPyt=dfHVJfgHnFjPSFcvY(SYhI$AJ~Tj74r9|1U{1JA^a?q4enF2iJ?|&Ko|;cc=L%! z1wrwz9~H06v?Cx`T?7^FU8?0gf#Jeyg!jv4SQVSXS>J!@uI?iAnu6|m1-nZpXZ{YG z+3reV*rkd_E)_^SUiqu^k4?=7H;=Bl9bf_O3EMAgsNak){hE0VFglQP$ne2L{Wr>} z-2=WSrgsTnQ3M$#2r?qPUP4(@{9BCDD8V9-F6Y&XgDd1az~K2sp?U>G)rV5H7#3EH zZf|n*(D2pVc4@t*dZF$VV_c@}_O5}n$5iR^i|Zj5&vDpwv$vCoDqp0&tZFLSPIVUP zmE`s-a9sU9#kIV}w>0WyQmj1#m$cG>6Lm0_8gh!F@)jr}1j_U&OmTty47+mJs0&C-*s&$;{OCl6jb#^yh zjaioNvTBgJngsEn#9DsD#3|R&A(_7mkQ{7!QA^2;0YToCp+VgZg!EB^U6%KGw&(AQ zVaugXW}`_M-+$dtbUUq&=o>K|R41IRwOmF&o)rOGMH%LbgZPvHA6QXr z{DN%@foJ~H>=72vAZi5^$KCGHD%KTq;da_;g3Vu$H%E@&d~`2~hDVnt;t7ft)b(!l zI*T>-|2Q9dz~53WiXpU5|6W0C2~&CCK(sDB!{4!5(DU*km>V+Qo_gtX%yiPWJjI@M zNaB|Wq<32gQr)YV<10h0{EpmHZ+Et5Cn>=Yr1Kt7`{B_a1q6HD9AT?4dR5YlK80#Fp##_IB&g*@ zP#g_6yo>7*SZ(78yCW41YR#JdP2=Y^6`cZo{a%UZc*=+!k<@pa!{c7+Ys{BFNANHf=D-$^x_+=aLE zq}^*O==>RyJwF}+zj~$pP~57P902jlegU6P7i8q#ti3#E_{!;d#}u=u&HQ<1I+c41 z5M){On+s?3D@XOK@gG<4(+$p12E}a_<5gH+Ub%#Yp%_GTSpS+&hjC*v$H|nTianbI zaJN!Ij`GwOeV z$IpV|TRkEF=URa=ooM748@5p%Zj<_)VgGMa509G=yAMX_oFRnm%FHz5rak)ovN0EVX98 zC}h}31%|NT5bB2oSjC`NVMxV7>DSmCg8v;U9ukS9s48J3x*-P`bg{X}E^cOGDD7H7 zvOg3i+nc}id(P-jNOUklQhf4qWC1KQuCdbZGx448u0oxz?aMq6FsKI<1z2ljnfA&Y zf7@BB(Y})B@!WE@V|TNU%>`vNBBx{Kvrc5lfc#;e9byp@Smm*_jLLWLWhmMWUB$o4#4{aHjqB0a*dOnL+W$`tb8J>zt-`;}3@6zq|)Y0`%P^yzdU{PltZPEPE1Y(pJDo$|)+ub`ZVTG-lx30EESnkpwEK@0ik zZ4ie;GzLeh$D?|9ul|9{OldCO+#Xb&`DKcd9X-(FKzJJB+pFkwZ{QKFf-_QU{ado# zkFLt>l=n;&WWHX9;jlTWm!s73l|I}`YJ}vrO|=FFbPH!`p&HZ%6&{D_N|7y<+R}ZJ zu1A@)VZ#8|9GZtutGLzA8?So`HxVWC4T%yi8HjF%MMLEVfvnkhW5ExsJ|p1w)Q7t+ z3*pPy%R+-@6Lp7_&TSv`--h`bGtFFF<)^}4)Bu3f+#5E-8CnmiV0%IMV(M!u$Q#Z$ zTfb|$$V8>28NRu$S!vvsCdOqUEp0n3^@JKBYbj_srI?Dx2B_`cK2X4(k+1Zcx+Dlv z1Y2mw%`GUMdm6hAf}zNMtUlwWZPzb5{Fx5ko44sxBwJH zxwf=sJ#Z%U^X1L~N8~kHF0(k=Nx;3x)}HQE67;@=VBni@;yG`4)idMeMx7rxwAjCx zwCvU%?m_ZRHug_?yx(hp2z=m9m5(iduU?vy%auUnJj4Wjg#jHiEtfhYt%(5DxDXo! zyck^FP8)gd*)m``&>kNyMZyOj%9N|+^?mAvDH{SEF9+OuPqM8xJ%_7+Ma=8ltvr=g zK$6#Y|8<9;>~+&_+gn==uf%yfjnsODpM4!~pv9?&_kR7=JTPI8e{GPbikyhDl7=u5 zD6pXXro-7N(mZ02Iq03VGi0g!twp0r;?T-i5VCoXK{fG+knsK_*hYoRSc(6f{cOA zeAjbp-6s3wGMwtZ-Tz|u+9#QwE)Z?i+ukdhobvV7`ZXLpMktY=m zEH5Qk<6Qyeq*@-8NXMs8ZnWre3ES(PWE}D)eAZw0rg41J0Y9`gy4RqC`>!D}Fj7fK z$LlA$=}=Ah!FUAs*y60y%ztC5seJR!a(NL;0@W`}dTMyxL?-Q==?PSDWN-4xgij zVuhEdg6&@E&ppD;Eyjby#NdDTGXe>(3E&a|aBi{wr3+|L*qk;?8NMmU;ds5jOyV)B zZ{BmU62eTko6<#84dW)^W2eHPH?pUP*?I0p)V&EI+QB}B?wu*$ z8)D0CVnDszNISEqbj@i~e3QLgr~LmT6VTC_|38^P`r5KRz-S?^ezA!B|EL7v=gVZ( zM8`m+t;}ibS?$hSavUgLoE>k$TFJvU>bEuOrbkH9h4sHrA86!%Bmae#{@;&`{vk`i z;kNk)`bB015J#|q4gz_r$g7q6bw=BbY6)zWIG%^p0Y8W<=#o0iuEL3m-Rk8{>qm*g zx2_Qg>Pr_JaJ}3k5%ch_zE7)#Y15q`^r*dXq@{0SMFi@KjdT(=(d0F+*A@ZgrT11H zfkCgX?>!?IOj%p45*jgj%V}rtete}aeyhg7%JxnpuLc#*J{Y?%E3K@5-y!eQ4Y1pu z<)XojJWTfG?u?>}<&k?QO~?63y~6`}I5A}v^|?QW=3wxVHr;d)SYPqIXx8ac`}uMv z|M?tstuJf_*3TBlGhUXqJQz3$1xSlGB@I?o2pwykZ<)LDJ3cxF?WZI*?qMApRPL*_ zKPn?moqzj(bylHCE?W99^lw03HOJ8(Kbg>CZkDyozwhTGK)S!?DO zQBl4GWR1!jP zRtVU&)v4UdzSjFR>mLT)f{iJKgD3>L);%_G{z=O7@%rQI-!<1V-ww*$6(v!I zlIZLrk(q#cnnwj79R~-8$Vm0ypZ0!anH{L$q(j%4c4&YG4bU_Fqz49?0cM^|(+ohv z0Q3_EYzY1U002OUs%rogZe0MlxabI<3qj9@Z8DRuH0=Ep{Z=l*!Vxzk z$Hhe}*d!N^_z#h$>ZRl44WMl5EZ1CrPXh@WRze#a7{945-kv?3g+B;prjUtlnnz~XY zgL<^BxpefOx|7(I2Cm@tE$lC$wP3rbt*a{1?ZP{KA%Ter@66LA{aq+jrNlIJ_sjQZ z_h6pH%e`oSB!;i>Ew>rn684`pHJU_kRq;0nu$67~Q#yS9ZFKJkg>yTayZYiVQQy=y zZ!=70N^pHKjmGoryT%=|+*+csv7LrQwd0PP6v^FtP%bLYrd*@4!ivHur52r*=#Bhl zE$FwIEjeTtj2EF&_|DX~uCBRH*C}}lka&g7rK`zn#bELY+mHQ???Ti>K2O{4OU(1<`-*`5Dj|GskN;{P$B%?Y04qdESJK8;`uBLh&J%+tWAD4>9V z843aL6kz?Apb0P+EYOU|crgF_e`)>?X~tTQ^MA{XM+N|(YX<1}Ss|xB#<8MS!+t+3 zE|KfkJ>d&}_$`jUBo5K5GY4@{+98s&@A^6yBS3F9VfjKh9s@Qluz*Z-5&-}J006+} zHo3mPws<+5%LBvFzmVa-;rB3Ki^xMUomXSP{xdRY`Dw||DH}`&Lc2!P3vT#1ra1w= zb?|V9=!K+fybc$ps{_Rs+)o*{T(}S#rY+`gEzv+b#jNzmW@@)AjQ-n%# zvC8wu)9;3mbhz54x>4``iK8a5BN0_(d8AZ|Yh<%}viq?7b2kg7?1+kxk=41jWrEQ2 z$;iJ6kq`$*l8$;z`qb->UvHif9b~EM?1>ZH_^SKSAjg{}sevbNnQ0uTFr$^AsPspH zs56zZjOjx6p{Ent)a`5orjM4?uGBd+_5-JrU5^8ox+3u{l_T3hbq9*0QK;a|yspx? zW?R;ypFQubu7MO}4FCu2I?;KE*>vyDRGI$V!pHQ~Go3;6J)FYjWnh{ud(Viv7odPb z6ae_EfPxEv0#F620H{Hu0N^H*s34(A{D1-gC;-62hJXS<2nAGpfQ*kTT)_7ip%NPo zYBK(R;c2$tHI)+J<81#ue*`}^pwGl5Hgsy&K6ZD6M89|UYwq*WLA}oG@7!!TtT1@` ziR-PY`fNi=&xnVrkski2|C^HX;kVP-RkjYwuZVipAMe?N{`}_jYvA{=ilR|^u_oL+ zbXEN1@4&un`Wo6cw?|Ll*|afL@idpam|P$6e#OJfairS0ZLXRz=5jf!e#7@HrEOx} z@_d{3(BJ+URWsR1wmA>CNf~C}M7|5tuJmkAr`8y+;q+Uvt3)O&Hn$|8FHdf#`PR7j z_@M9o3)#a~6y=roq-)C$b#1J~uX#Oar@}(7~-3frscG!{mm9UVvu@1ZrT@PzIhL=hFnum z(q-!7c`J>miTeH)?fe36A6utUoujY0lH$simiE*uL*4rdS?8gRFP8AFCh%obuVz;3 zrB32^=^qk6U+YbxQr;t99&t`$ZRK&3E21gd%Sa^s0c7vwSkyR?8>^8d9M6iL1*@XW zzxQ^rn0_FM( z>&D2zeEMYhIf`EKWcDo^?lZ?|Lfr4eK2EuP^7?Q~000npN}t)t?CQROXj48E*^kSc za#dt%&j-KxS{8c-jpn_S;&i7G1)1^@zhl|luig44vBw_`Y%p}adg@>0mObCvwp}t- z80S*F{W2Y%bm*cX>JB?4Js$N@o_Y?LtwJ0Ih8~BF!t`i4oYOqbQ-=1jANw>%L9F-H zxXvk8sgjdZ*OZ~3Vmg;NXXJ5?7+$1?dXXiwjde?MRA;^gOPA0#7dJ2=xkC9xk4 z0049V^6>SLc{oM}R4@RMK^~5gkpTb@c{m;t>Txarpm8Z}P%G1M26Sc#}y5Y8cesl`Ar7>|_rxf|Ece%rdXo783c#wibOgq%u zHJ2uzb8MP21(>D}9%M}TiJ$mw&Nu((I`IVu09XmBmZ9?=LWJ v+>EDhr}N;(jT^v>FTcG!4-UBTPrniX02C#Z_%(GOl~)0GmEf;4Gk_NWAsv?b literal 0 HcmV?d00001 diff --git a/sound/misc/notice2.ogg b/sound/misc/notice2.ogg new file mode 100644 index 0000000000000000000000000000000000000000..3489ca3e15b1acc6f8de1ad9b8ae4c8ce272e03e GIT binary patch literal 6218 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