From 7c3788f095b9567a7748fb8085268001872e63f4 Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Sun, 10 Nov 2024 17:42:08 +0100 Subject: [PATCH 01/28] initial --- .../mob/living/silicon/robot/drone/drone.dm | 3 - .../modules/mob/living/silicon/robot/login.dm | 7 +- .../modules/mob/living/silicon/robot/robot.dm | 105 ++--------------- .../silicon/robot/robot_modules/station.dm | 3 +- .../living/silicon/robot/robot_ui_module.dm | 106 ++++++++++++++++++ vorestation.dme | 1 + 6 files changed, 120 insertions(+), 105 deletions(-) create mode 100644 code/modules/mob/living/silicon/robot/robot_ui_module.dm diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm index fd1132d05a8..c7c1a1a2fbc 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone.dm @@ -203,9 +203,6 @@ var/list/mob_hat_cache = list() can_pick_shell = FALSE update_icon() -/mob/living/silicon/robot/drone/choose_icon() - return - /mob/living/silicon/robot/drone/pick_module() return diff --git a/code/modules/mob/living/silicon/robot/login.dm b/code/modules/mob/living/silicon/robot/login.dm index 89a136223e2..ef25b1bece0 100644 --- a/code/modules/mob/living/silicon/robot/login.dm +++ b/code/modules/mob/living/silicon/robot/login.dm @@ -11,11 +11,6 @@ repick_laws() // Forces synths to select an icon relevant to their module - if(!icon_selected) - icon_selection_tries = SSrobot_sprites.get_module_sprites_len(modtype, src) + 1 - choose_icon(icon_selection_tries) - - if(sprite_datum && module) - sprite_datum.do_equipment_glamour(module) + pick_module() plane_holder.set_vis(VIS_AUGMENTED, TRUE) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index a79310c02be..4e7ea7bd00e 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -31,8 +31,7 @@ //Icon stuff var/datum/robot_sprite/sprite_datum // Sprite datum, holding all our sprite data - var/icon_selected = 1 // If icon selection has been completed yet - var/icon_selection_tries = 0 // Remaining attempts to select icon before a selection is forced + var/icon_selected = 0 // If icon selection has been completed yet var/list/sprite_extra_customization = list() var/rest_style = "Default" var/notransform @@ -336,46 +335,17 @@ return module_sprites */ /mob/living/silicon/robot/proc/pick_module() + if(icon_selected) + return if(module) - return - var/list/modules = list() - //VOREStatation Edit Start: shell restrictions - if(shell) - if(restrict_modules_to.len > 0) - modules.Add(restrict_modules_to) - else - modules.Add(shell_module_types) - else - if(restrict_modules_to.len > 0) - modules.Add(restrict_modules_to) - else - modules.Add(robot_module_types) - if(crisis || security_level == SEC_LEVEL_RED || crisis_override) - to_chat(src, span_red("Crisis mode active. Combat module available.")) - modules |= emergency_module_types - for(var/module_name in whitelisted_module_types) - if(is_borg_whitelisted(src, module_name)) - modules |= module_name - //VOREStatation Edit End: shell restrictions - modtype = tgui_input_list(usr, "Please, select a module!", "Robot module", modules) + var/list/module_sprites = SSrobot_sprites.get_module_sprites(module, src) + if(module_sprites.len == 1 || !client) + sprite_datum = module_sprites[1] + return + new/datum/tgui_module/robot_ui_module(src) + if(sprite_datum && module) + sprite_datum.do_equipment_glamour(module) - if(module) - return - if(!(modtype in robot_modules)) - return - if(!is_borg_whitelisted(src, modtype)) - return - - var/module_type = robot_modules[modtype] - transform_with_anim() //VOREStation edit: sprite animation - new module_type(src) - - hands.icon_state = get_hud_module_icon() - feedback_inc("cyborg_[lowertext(modtype)]",1) - updatename() - hud_used.update_robot_modules_display() - notify_ai(ROBOT_NOTIFICATION_NEW_MODULE, module.name) - robotact?.update_static_data_for_all_viewers() /mob/living/silicon/robot/proc/update_braintype() if(istype(mmi, /obj/item/mmi/digital/posibrain)) @@ -796,6 +766,7 @@ notify_ai(ROBOT_NOTIFICATION_MODULE_RESET, module.name) module.Reset(src) qdel(module) + icon_selected = 0 module = null updatename("Default") has_recoloured = FALSE @@ -1088,60 +1059,6 @@ return -/mob/living/silicon/robot/proc/choose_icon(var/triesleft) - var/robot_species = null - if(!SSrobot_sprites) - to_chat(src, "Robot Sprites have not been initialized yet. How are you choosing a sprite? Harass a coder.") - return - - var/list/module_sprites = SSrobot_sprites.get_module_sprites(modtype, src) - if(!module_sprites || !module_sprites.len) - to_chat(src, "Your module appears to have no sprite options. Harass a coder.") - return - - icon_selected = 0 - icon_selection_tries = triesleft - if(module_sprites.len == 1 || !client) - if(!(sprite_datum in module_sprites)) - sprite_datum = module_sprites[1] - else - var/selection = tgui_input_list(src, "Select an icon! [triesleft ? "You have [triesleft] more chance\s." : "This is your last try."]", "Robot Icon", module_sprites) - if(selection) - sprite_datum = selection - else - sprite_datum = module_sprites[1] - if(!istype(src,/mob/living/silicon/robot/drone)) - robot_species = sprite_datum.name - if(notransform) - to_chat(src, "Your current transformation has not finished yet!") - choose_icon(icon_selection_tries) - return - else - transform_with_anim() - - var/tempheight = vis_height - update_icon() - // This is bad but I dunno other way to 'reset' our resize offset based on vis_height changes other than resizing to normal and back. - if(tempheight != vis_height) - var/tempsize = size_multiplier - resize(1) - resize(tempsize) - - - if (module_sprites.len > 1 && triesleft >= 1 && client) - icon_selection_tries-- - var/choice = tgui_alert(usr, "Look at your icon - is this what you want?", "Icon Choice", list("Yes","No")) - if(choice == "No") - choose_icon(icon_selection_tries) - return - - icon_selected = 1 - icon_selection_tries = 0 - sprite_type = robot_species - if(hands) - update_hud() - to_chat(src, span_filter_notice("Your icon has been set. You now require a module reset to change it.")) - /mob/living/silicon/robot/proc/set_default_module_icon() if(!SSrobot_sprites) return diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station.dm b/code/modules/mob/living/silicon/robot/robot_modules/station.dm index 8f8c0757e0c..5764989ecff 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/station.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/station.dm @@ -73,7 +73,6 @@ var/global/list/robot_modules = list( R.radio.recalculateChannels() R.set_default_module_icon() - R.choose_icon(SSrobot_sprites.get_module_sprites_len(R.modtype, R) + 1) if(!R.client) R.icon_selected = FALSE // It wasnt a player selecting icon? Let them do it later! @@ -93,7 +92,7 @@ var/global/list/robot_modules = list( if(R.radio) R.radio.recalculateChannels() - R.choose_icon(0) + R.set_default_module_icon() R.scrubbing = FALSE diff --git a/code/modules/mob/living/silicon/robot/robot_ui_module.dm b/code/modules/mob/living/silicon/robot/robot_ui_module.dm new file mode 100644 index 00000000000..addf1bf6ef1 --- /dev/null +++ b/code/modules/mob/living/silicon/robot/robot_ui_module.dm @@ -0,0 +1,106 @@ +// Robot module selection +/datum/tgui_module/robot_ui_module + name = "Robot Module Configurator" + tgui_id = "RobotChoose" + var/selected_module + var/datum/robot_sprite/sprite_datum + +/datum/tgui_module/robot_ui_module/tgui_state(mob/user) + return GLOB.tgui_self_state + +/datum/tgui_module/robot_ui_module/tgui_static_data() + var/list/data = ..() + + var/mob/living/silicon/robot/R = host + + var/list/modules = list() + if(R.module) + modules = list(R.module) + selected_module = R.module + else + if(LAZYLEN(R.restrict_modules_to) > 0) + modules.Add(R.restrict_modules_to) + else if(R.shell) + modules.Add(shell_module_types) + else + modules.Add(robot_module_types) + if(R.crisis || security_level == SEC_LEVEL_RED || R.crisis_override) + to_chat(R, span_red("Crisis mode active. Combat module available.")) + modules |= emergency_module_types + for(var/module_name in whitelisted_module_types) + if(is_borg_whitelisted(R, module_name)) + modules |= module_name + data["possible_modules"] = modules + + return data + +/datum/tgui_module/robot_ui_module/tgui_data() + var/list/data = ..() + + var/mob/living/silicon/robot/R = host + + if(selected_module) + if(!SSrobot_sprites) + to_chat(R, span_warning("Robot Sprites have not been initialized yet. How are you choosing a sprite? Harass a coder.")) + selected_module = null + return + + var/list/module_sprites = SSrobot_sprites.get_module_sprites(selected_module, R) + if(!module_sprites || !module_sprites.len) + to_chat(R, span_warning("Your module appears to have no sprite options. Harass a coder.")) + selected_module = null + return + + data["possible_sprites"] = module_sprites + + return data + +/datum/tgui_module/robot_ui_module/tgui_act(action, params) + . = ..() + if(.) + return + + var/mob/living/silicon/robot/R = host + + switch(action) + if("pick_module") + if(R.module) + return + var/new_module = params["value"] + if(!(new_module in robot_modules)) + return + if(!is_borg_whitelisted(R, new_module)) + return + selected_module = new_module + . = TRUE + if("pick_icon") + var/sprite = params["value"] + if(!sprite) + return + var/list/module_sprites = SSrobot_sprites.get_module_sprites(selected_module, R) + sprite_datum = module_sprites[sprite] + . = TRUE + if("confirm") + R.icon_selected = 1 + var/module_type = robot_modules[selected_module] + R.module = new module_type(R) + R.hands.icon_state = R.get_hud_module_icon() + feedback_inc("cyborg_[lowertext(selected_module)]",1) + R.updatename() + R.hud_used.update_robot_modules_display() + R.notify_ai(ROBOT_NOTIFICATION_NEW_MODULE, R.module.name) + R.robotact?.update_static_data_for_all_viewers() + if(!istype(R,/mob/living/silicon/robot/drone)) + R.sprite_type = sprite_datum.name + R.transform_with_anim() + var/tempheight = R.vis_height + R.update_icon() + // This is bad but I dunno other way to 'reset' our resize offset based on vis_height changes other than resizing to normal and back. + if(tempheight != R.vis_height) + var/tempsize = R.size_multiplier + R.resize(1) + R.resize(tempsize) + if(R.hands) + R.update_hud() + to_chat(R, span_filter_notice("Your icon has been set. You now require a module reset to change it.")) + tgui_close() diff --git a/vorestation.dme b/vorestation.dme index 07be19acdd6..576a9c1f1b3 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -3163,6 +3163,7 @@ #include "code\modules\mob\living\silicon\robot\robot_movement.dm" #include "code\modules\mob\living\silicon\robot\robot_remote_control.dm" #include "code\modules\mob\living\silicon\robot\robot_ui.dm" +#include "code\modules\mob\living\silicon\robot\robot_ui_module.dm" #include "code\modules\mob\living\silicon\robot\dogborg\dog_modules_vr.dm" #include "code\modules\mob\living\silicon\robot\dogborg\dog_sleeper_vr.dm" #include "code\modules\mob\living\silicon\robot\drone\drone.dm" From dafcd12ecd83e15a76fc17b9f63cdb0df801db20 Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Sun, 10 Nov 2024 17:45:14 +0100 Subject: [PATCH 02/28] . --- code/modules/mob/living/silicon/robot/robot_modules/station.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station.dm b/code/modules/mob/living/silicon/robot/robot_modules/station.dm index 5764989ecff..bc54a72e638 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/station.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/station.dm @@ -73,6 +73,7 @@ var/global/list/robot_modules = list( R.radio.recalculateChannels() R.set_default_module_icon() + R.pick_module() if(!R.client) R.icon_selected = FALSE // It wasnt a player selecting icon? Let them do it later! From 48e75791fbbe43d05f0eb3a0cafd81fa91b95bdb Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Sun, 10 Nov 2024 17:56:32 +0100 Subject: [PATCH 03/28] . --- code/modules/mob/living/silicon/robot/robot.dm | 4 +--- code/modules/mob/living/silicon/robot/robot_ui_module.dm | 2 ++ 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 4e7ea7bd00e..4b1bb55aec1 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -341,11 +341,9 @@ var/list/module_sprites = SSrobot_sprites.get_module_sprites(module, src) if(module_sprites.len == 1 || !client) sprite_datum = module_sprites[1] + sprite_datum.do_equipment_glamour(module) return new/datum/tgui_module/robot_ui_module(src) - if(sprite_datum && module) - sprite_datum.do_equipment_glamour(module) - /mob/living/silicon/robot/proc/update_braintype() if(istype(mmi, /obj/item/mmi/digital/posibrain)) diff --git a/code/modules/mob/living/silicon/robot/robot_ui_module.dm b/code/modules/mob/living/silicon/robot/robot_ui_module.dm index addf1bf6ef1..708c3c23316 100644 --- a/code/modules/mob/living/silicon/robot/robot_ui_module.dm +++ b/code/modules/mob/living/silicon/robot/robot_ui_module.dm @@ -90,6 +90,7 @@ R.hud_used.update_robot_modules_display() R.notify_ai(ROBOT_NOTIFICATION_NEW_MODULE, R.module.name) R.robotact?.update_static_data_for_all_viewers() + R.sprite_datum = sprite_datum if(!istype(R,/mob/living/silicon/robot/drone)) R.sprite_type = sprite_datum.name R.transform_with_anim() @@ -102,5 +103,6 @@ R.resize(tempsize) if(R.hands) R.update_hud() + R.sprite_datum.do_equipment_glamour(module) to_chat(R, span_filter_notice("Your icon has been set. You now require a module reset to change it.")) tgui_close() From 0601585dd71924ae47cf6c3b88dc7f84c4934a76 Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Sun, 10 Nov 2024 19:48:21 +0100 Subject: [PATCH 04/28] make the basics work --- .../modules/mob/living/silicon/robot/robot.dm | 5 +- .../mob/living/silicon/robot/robot_ui.dm | 4 ++ .../living/silicon/robot/robot_ui_module.dm | 18 +++++-- .../silicon/robot/subtypes/gravekeeper.dm | 1 + .../silicon/robot/subtypes/lost_drone.dm | 1 + .../silicon/robot/subtypes/syndicate.dm | 1 + tgui/packages/tgui/interfaces/RobotChoose.tsx | 52 +++++++++++++++++++ .../tgui/interfaces/Robotact/index.tsx | 2 +- .../tgui/interfaces/Robotact/types.ts | 1 + 9 files changed, 79 insertions(+), 6 deletions(-) create mode 100644 tgui/packages/tgui/interfaces/RobotChoose.tsx diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 4b1bb55aec1..cf978597b2f 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -46,6 +46,8 @@ var/shown_robot_modules = 0 //Used to determine whether they have the module menu shown or not var/obj/screen/robot_modules_background + var/ui_theme + //3 Modules can be activated at any one time. var/obj/item/robot_module/module = null var/module_active = null @@ -343,7 +345,8 @@ sprite_datum = module_sprites[1] sprite_datum.do_equipment_glamour(module) return - new/datum/tgui_module/robot_ui_module(src) + var/datum/tgui_module/robot_ui_module/ui = new(src) + ui.tgui_interact(src) /mob/living/silicon/robot/proc/update_braintype() if(istype(mmi, /obj/item/mmi/digital/posibrain)) diff --git a/code/modules/mob/living/silicon/robot/robot_ui.dm b/code/modules/mob/living/silicon/robot/robot_ui.dm index 7262f45364a..7499fb198ea 100644 --- a/code/modules/mob/living/silicon/robot/robot_ui.dm +++ b/code/modules/mob/living/silicon/robot/robot_ui.dm @@ -63,6 +63,10 @@ data["health"] = R.health data["max_health"] = R.getMaxHealth() data["light_color"] = R.robot_light_col + if(R.emagged) + data["theme"] = "syndicate" + else if (R.ui_theme) + data["theme"] = R.ui_theme data["weapon_lock"] = R.weapon_lock diff --git a/code/modules/mob/living/silicon/robot/robot_ui_module.dm b/code/modules/mob/living/silicon/robot/robot_ui_module.dm index 708c3c23316..e861cbabb84 100644 --- a/code/modules/mob/living/silicon/robot/robot_ui_module.dm +++ b/code/modules/mob/living/silicon/robot/robot_ui_module.dm @@ -31,6 +31,10 @@ if(is_borg_whitelisted(R, module_name)) modules |= module_name data["possible_modules"] = modules + if(R.emagged) + data["theme"] = "syndicate" + else if (R.ui_theme) + data["theme"] = R.ui_theme return data @@ -40,6 +44,7 @@ var/mob/living/silicon/robot/R = host if(selected_module) + data["selected_module"] = selected_module if(!SSrobot_sprites) to_chat(R, span_warning("Robot Sprites have not been initialized yet. How are you choosing a sprite? Harass a coder.")) selected_module = null @@ -52,6 +57,8 @@ return data["possible_sprites"] = module_sprites + if(sprite_datum) + data["sprite_datum"] = sprite_datum return data @@ -78,13 +85,16 @@ if(!sprite) return var/list/module_sprites = SSrobot_sprites.get_module_sprites(selected_module, R) - sprite_datum = module_sprites[sprite] + for(var/datum/robot_sprite/S in module_sprites) + if(S.name == sprite) + sprite_datum = S + break . = TRUE if("confirm") R.icon_selected = 1 var/module_type = robot_modules[selected_module] + R.modtype = selected_module R.module = new module_type(R) - R.hands.icon_state = R.get_hud_module_icon() feedback_inc("cyborg_[lowertext(selected_module)]",1) R.updatename() R.hud_used.update_robot_modules_display() @@ -103,6 +113,6 @@ R.resize(tempsize) if(R.hands) R.update_hud() - R.sprite_datum.do_equipment_glamour(module) + R.sprite_datum.do_equipment_glamour(R.module) to_chat(R, span_filter_notice("Your icon has been set. You now require a module reset to change it.")) - tgui_close() + close_ui() diff --git a/code/modules/mob/living/silicon/robot/subtypes/gravekeeper.dm b/code/modules/mob/living/silicon/robot/subtypes/gravekeeper.dm index 73357c10711..ccf1908c166 100644 --- a/code/modules/mob/living/silicon/robot/subtypes/gravekeeper.dm +++ b/code/modules/mob/living/silicon/robot/subtypes/gravekeeper.dm @@ -9,6 +9,7 @@ icon_selected = FALSE can_be_antagged = FALSE restrict_modules_to = list("Gravekeeper") + ui_theme = "malfunction" /mob/living/silicon/robot/gravekeeper/init() aiCamera = new/obj/item/camera/siliconcam/robot_camera(src) diff --git a/code/modules/mob/living/silicon/robot/subtypes/lost_drone.dm b/code/modules/mob/living/silicon/robot/subtypes/lost_drone.dm index 24e449c411c..9f0aa11446c 100644 --- a/code/modules/mob/living/silicon/robot/subtypes/lost_drone.dm +++ b/code/modules/mob/living/silicon/robot/subtypes/lost_drone.dm @@ -9,6 +9,7 @@ icon_selected = FALSE restrict_modules_to = list("Lost") var/law_retries = 5 + ui_theme = "malfunction" /mob/living/silicon/robot/lost/init() aiCamera = new/obj/item/camera/siliconcam/robot_camera(src) diff --git a/code/modules/mob/living/silicon/robot/subtypes/syndicate.dm b/code/modules/mob/living/silicon/robot/subtypes/syndicate.dm index 5dd72332e44..15a8257a499 100644 --- a/code/modules/mob/living/silicon/robot/subtypes/syndicate.dm +++ b/code/modules/mob/living/silicon/robot/subtypes/syndicate.dm @@ -8,6 +8,7 @@ idcard_type = /obj/item/card/id/syndicate icon_selected = FALSE restrict_modules_to = list("Protector", "Mechanist", "Combat Medic") + ui_theme = "syndicate" /mob/living/silicon/robot/syndicate/init() aiCamera = new/obj/item/camera/siliconcam/robot_camera(src) diff --git a/tgui/packages/tgui/interfaces/RobotChoose.tsx b/tgui/packages/tgui/interfaces/RobotChoose.tsx new file mode 100644 index 00000000000..670fba547cd --- /dev/null +++ b/tgui/packages/tgui/interfaces/RobotChoose.tsx @@ -0,0 +1,52 @@ +import { useBackend } from 'tgui/backend'; +import { Window } from 'tgui/layouts'; +import { Button, Dropdown, Stack } from 'tgui-core/components'; + +type Data = { + possible_modules: string[]; + possible_sprites: string[]; + theme?: string; + selected_module?: string; + sprite_datum?: string; +}; + +export const RobotChoose = (props) => { + const { act, data } = useBackend(); + + const { + possible_modules, + possible_sprites, + selected_module, + sprite_datum, + theme, + } = data; + + return ( + + + + + act('pick_module', { value })} + selected={selected_module} + /> + + + act('pick_icon', { value })} + selected={sprite_datum} + /> + + + + + + ); +}; diff --git a/tgui/packages/tgui/interfaces/Robotact/index.tsx b/tgui/packages/tgui/interfaces/Robotact/index.tsx index 94b97253342..1ab5ea486aa 100644 --- a/tgui/packages/tgui/interfaces/Robotact/index.tsx +++ b/tgui/packages/tgui/interfaces/Robotact/index.tsx @@ -18,7 +18,7 @@ export const Robotact = (props) => { } return ( - + {content} ); diff --git a/tgui/packages/tgui/interfaces/Robotact/types.ts b/tgui/packages/tgui/interfaces/Robotact/types.ts index bd33676d99d..b4232ff6e43 100644 --- a/tgui/packages/tgui/interfaces/Robotact/types.ts +++ b/tgui/packages/tgui/interfaces/Robotact/types.ts @@ -31,6 +31,7 @@ export type Data = { max_health: number; light_color: string; + theme?: string; // Modules modules_static: Module[]; From 890548b14ffc69cbc3c4133aa0ec5f2671a11a12 Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Sun, 10 Nov 2024 22:07:17 +0100 Subject: [PATCH 05/28] =?UTF-8?q?=C2=B4some=20ui=20basics?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../living/silicon/robot/robot_ui_module.dm | 12 +++-- tgui/packages/tgui/interfaces/RobotChoose.tsx | 52 ------------------- .../interfaces/RobotChoose/ModuleSection.tsx | 47 +++++++++++++++++ .../RobotChoose/SelectorElement.tsx | 36 +++++++++++++ .../interfaces/RobotChoose/SpriteSection.tsx | 48 +++++++++++++++++ .../tgui/interfaces/RobotChoose/index.tsx | 46 ++++++++++++++++ .../tgui/interfaces/RobotChoose/types.ts | 9 ++++ 7 files changed, 195 insertions(+), 55 deletions(-) delete mode 100644 tgui/packages/tgui/interfaces/RobotChoose.tsx create mode 100644 tgui/packages/tgui/interfaces/RobotChoose/ModuleSection.tsx create mode 100644 tgui/packages/tgui/interfaces/RobotChoose/SelectorElement.tsx create mode 100644 tgui/packages/tgui/interfaces/RobotChoose/SpriteSection.tsx create mode 100644 tgui/packages/tgui/interfaces/RobotChoose/index.tsx create mode 100644 tgui/packages/tgui/interfaces/RobotChoose/types.ts diff --git a/code/modules/mob/living/silicon/robot/robot_ui_module.dm b/code/modules/mob/living/silicon/robot/robot_ui_module.dm index e861cbabb84..8e8fbcb6aaf 100644 --- a/code/modules/mob/living/silicon/robot/robot_ui_module.dm +++ b/code/modules/mob/living/silicon/robot/robot_ui_module.dm @@ -15,8 +15,8 @@ var/list/modules = list() if(R.module) - modules = list(R.module) - selected_module = R.module + modules = list(R.modtype) + selected_module = R.modtype else if(LAZYLEN(R.restrict_modules_to) > 0) modules.Add(R.restrict_modules_to) @@ -55,8 +55,11 @@ to_chat(R, span_warning("Your module appears to have no sprite options. Harass a coder.")) selected_module = null return + var/list/available_sprites = list() + for(var/datum/robot_sprite/S in module_sprites) + available_sprites += list(list("sprite" = S.name, "belly" = S.has_vore_belly_sprites)) - data["possible_sprites"] = module_sprites + data["possible_sprites"] = available_sprites if(sprite_datum) data["sprite_datum"] = sprite_datum @@ -79,6 +82,9 @@ if(!is_borg_whitelisted(R, new_module)) return selected_module = new_module + var/list/module_sprites = SSrobot_sprites.get_module_sprites(selected_module, R) + if(!R.sprite_datum in module_sprites) + sprite_datum = null . = TRUE if("pick_icon") var/sprite = params["value"] diff --git a/tgui/packages/tgui/interfaces/RobotChoose.tsx b/tgui/packages/tgui/interfaces/RobotChoose.tsx deleted file mode 100644 index 670fba547cd..00000000000 --- a/tgui/packages/tgui/interfaces/RobotChoose.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import { useBackend } from 'tgui/backend'; -import { Window } from 'tgui/layouts'; -import { Button, Dropdown, Stack } from 'tgui-core/components'; - -type Data = { - possible_modules: string[]; - possible_sprites: string[]; - theme?: string; - selected_module?: string; - sprite_datum?: string; -}; - -export const RobotChoose = (props) => { - const { act, data } = useBackend(); - - const { - possible_modules, - possible_sprites, - selected_module, - sprite_datum, - theme, - } = data; - - return ( - - - - - act('pick_module', { value })} - selected={selected_module} - /> - - - act('pick_icon', { value })} - selected={sprite_datum} - /> - - - - - - ); -}; diff --git a/tgui/packages/tgui/interfaces/RobotChoose/ModuleSection.tsx b/tgui/packages/tgui/interfaces/RobotChoose/ModuleSection.tsx new file mode 100644 index 00000000000..2a7fafc3718 --- /dev/null +++ b/tgui/packages/tgui/interfaces/RobotChoose/ModuleSection.tsx @@ -0,0 +1,47 @@ +import { createSearch } from 'common/string'; +import { useState } from 'react'; +import { Input, Section, Stack } from 'tgui-core/components'; + +import { SelectorElement } from './SelectorElement'; + +export const ModuleSection = (props: { + title: string; + sortable?: string[]; + selected?: string; +}) => { + const { title, sortable, selected } = props; + + const [searchText, setSearchText] = useState(''); + + const searcher = createSearch(searchText, (element: string) => { + return element; + }); + + const filtered = sortable?.filter(searcher); + + return ( +
+ + setSearchText(value)} + /> + + + + {filtered && + filtered.map((filter) => ( + + ))} + + +
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/RobotChoose/SelectorElement.tsx b/tgui/packages/tgui/interfaces/RobotChoose/SelectorElement.tsx new file mode 100644 index 00000000000..3335fa8192d --- /dev/null +++ b/tgui/packages/tgui/interfaces/RobotChoose/SelectorElement.tsx @@ -0,0 +1,36 @@ +import { useBackend } from 'tgui/backend'; +import { Button, Flex, Icon, Stack } from 'tgui-core/components'; + +export const SelectorElement = (props: { + option: string; + action: string; + selected?: string; + belly?: boolean; +}) => { + const { act } = useBackend(); + const { option, action, selected, belly } = props; + + return ( + + + + ); +}; diff --git a/tgui/packages/tgui/interfaces/RobotChoose/SpriteSection.tsx b/tgui/packages/tgui/interfaces/RobotChoose/SpriteSection.tsx new file mode 100644 index 00000000000..7c8782aa231 --- /dev/null +++ b/tgui/packages/tgui/interfaces/RobotChoose/SpriteSection.tsx @@ -0,0 +1,48 @@ +import { createSearch } from 'common/string'; +import { useState } from 'react'; +import { Input, Section, Stack } from 'tgui-core/components'; + +import { SelectorElement } from './SelectorElement'; +import { spriteOption } from './types'; + +export const SpriteSection = (props: { + title: string; + sortable?: { sprite: string; belly: boolean }[]; + selected?: string; +}) => { + const { title, sortable, selected } = props; + + const [searchText, setSearchText] = useState(''); + + const searcher = createSearch(searchText, (element: spriteOption) => { + return element.sprite; + }); + + const filtered = sortable?.filter(searcher); + return ( +
+ + setSearchText(value)} + /> + + + + {filtered && + filtered.map((filter) => ( + + ))} + + +
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/RobotChoose/index.tsx b/tgui/packages/tgui/interfaces/RobotChoose/index.tsx new file mode 100644 index 00000000000..fcb6e5c408d --- /dev/null +++ b/tgui/packages/tgui/interfaces/RobotChoose/index.tsx @@ -0,0 +1,46 @@ +import { useBackend } from 'tgui/backend'; +import { Window } from 'tgui/layouts'; +import { Button, Stack } from 'tgui-core/components'; + +import { ModuleSection } from './ModuleSection'; +import { SpriteSection } from './SpriteSection'; +import { Data } from './types'; + +export const RobotChoose = (props) => { + const { act, data } = useBackend(); + + const { + possible_modules, + possible_sprites, + selected_module, + sprite_datum, + theme, + } = data; + + return ( + + + + + + + + + + + + ); +}; diff --git a/tgui/packages/tgui/interfaces/RobotChoose/types.ts b/tgui/packages/tgui/interfaces/RobotChoose/types.ts new file mode 100644 index 00000000000..ac06afe56de --- /dev/null +++ b/tgui/packages/tgui/interfaces/RobotChoose/types.ts @@ -0,0 +1,9 @@ +export type Data = { + possible_modules: string[]; + possible_sprites?: spriteOption[]; + theme?: string; + selected_module?: string; + sprite_datum?: string; +}; + +export type spriteOption = { sprite: string; belly: boolean }; From 9b24439eac848a586e327d6e84873db1838202b7 Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Sun, 10 Nov 2024 22:18:05 +0100 Subject: [PATCH 06/28] . --- code/modules/mob/living/silicon/robot/robot_ui_module.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/silicon/robot/robot_ui_module.dm b/code/modules/mob/living/silicon/robot/robot_ui_module.dm index 8e8fbcb6aaf..8f2e4bbe93c 100644 --- a/code/modules/mob/living/silicon/robot/robot_ui_module.dm +++ b/code/modules/mob/living/silicon/robot/robot_ui_module.dm @@ -83,7 +83,7 @@ return selected_module = new_module var/list/module_sprites = SSrobot_sprites.get_module_sprites(selected_module, R) - if(!R.sprite_datum in module_sprites) + if(!sprite_datum in module_sprites) sprite_datum = null . = TRUE if("pick_icon") From 6b88488c55d165facbc567474b37702d234df9ad Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Sun, 10 Nov 2024 23:10:29 +0100 Subject: [PATCH 07/28] divide by sprite type --- .../living/silicon/robot/robot_ui_module.dm | 7 ++- .../RobotChoose/SelectorElement.tsx | 1 - .../interfaces/RobotChoose/SpriteSection.tsx | 50 +++++++++++++++---- .../tgui/interfaces/RobotChoose/functions.ts | 47 +++++++++++++++++ .../tgui/interfaces/RobotChoose/types.ts | 2 +- 5 files changed, 95 insertions(+), 12 deletions(-) create mode 100644 tgui/packages/tgui/interfaces/RobotChoose/functions.ts diff --git a/code/modules/mob/living/silicon/robot/robot_ui_module.dm b/code/modules/mob/living/silicon/robot/robot_ui_module.dm index 8f2e4bbe93c..7ea6049d0ee 100644 --- a/code/modules/mob/living/silicon/robot/robot_ui_module.dm +++ b/code/modules/mob/living/silicon/robot/robot_ui_module.dm @@ -57,7 +57,12 @@ return var/list/available_sprites = list() for(var/datum/robot_sprite/S in module_sprites) - available_sprites += list(list("sprite" = S.name, "belly" = S.has_vore_belly_sprites)) + var/model_type = "def" + if(istype(S, /datum/robot_sprite/dogborg)) + model_type = "wide" + if(istype(S, /datum/robot_sprite/dogborg/tall)) + model_type = "tall" + available_sprites += list(list("sprite" = S.name, "belly" = S.has_vore_belly_sprites, "type" = model_type)) data["possible_sprites"] = available_sprites if(sprite_datum) diff --git a/tgui/packages/tgui/interfaces/RobotChoose/SelectorElement.tsx b/tgui/packages/tgui/interfaces/RobotChoose/SelectorElement.tsx index 3335fa8192d..d1beda36d0f 100644 --- a/tgui/packages/tgui/interfaces/RobotChoose/SelectorElement.tsx +++ b/tgui/packages/tgui/interfaces/RobotChoose/SelectorElement.tsx @@ -15,7 +15,6 @@ export const SelectorElement = (props: { + } + > + {!!sprite && !!module && ( + <> + + + + + + + + + + + + + + )} + + ); +}; diff --git a/tgui/packages/tgui/interfaces/RobotChoose/ModuleSection.tsx b/tgui/packages/tgui/interfaces/RobotChoose/ModuleSection.tsx index 2a7fafc3718..c90dbbe7be5 100644 --- a/tgui/packages/tgui/interfaces/RobotChoose/ModuleSection.tsx +++ b/tgui/packages/tgui/interfaces/RobotChoose/ModuleSection.tsx @@ -31,7 +31,7 @@ export const ModuleSection = (props: { - {filtered && + {!!filtered && filtered.map((filter) => ( - {' '} diff --git a/tgui/packages/tgui/interfaces/RobotChoose/SpriteSection.tsx b/tgui/packages/tgui/interfaces/RobotChoose/SpriteSection.tsx index 31fb410700d..13cba8fc052 100644 --- a/tgui/packages/tgui/interfaces/RobotChoose/SpriteSection.tsx +++ b/tgui/packages/tgui/interfaces/RobotChoose/SpriteSection.tsx @@ -63,7 +63,7 @@ export const SpriteSection = (props: { - {filtered && + {!!filtered && filtered.map((filter) => ( { - const { act, data } = useBackend(); + const { data } = useBackend(); const { possible_modules, @@ -31,14 +32,7 @@ export const RobotChoose = (props) => { sortable={possible_sprites} selected={sprite_datum} /> - - - +
From b09bdf0397c9ce8c3420dd97262342a61c28a5a9 Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Mon, 11 Nov 2024 00:21:24 +0100 Subject: [PATCH 11/28] . --- code/modules/mob/living/silicon/robot/robot_ui_module.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/silicon/robot/robot_ui_module.dm b/code/modules/mob/living/silicon/robot/robot_ui_module.dm index 5dc30cfdbcf..6037834bf14 100644 --- a/code/modules/mob/living/silicon/robot/robot_ui_module.dm +++ b/code/modules/mob/living/silicon/robot/robot_ui_module.dm @@ -92,7 +92,7 @@ return selected_module = new_module var/list/module_sprites = SSrobot_sprites.get_module_sprites(selected_module, R) - if(!sprite_datum in module_sprites) + if(!(sprite_datum in module_sprites)) sprite_datum = null . = TRUE if("pick_icon") From b563c08d04b2efe32cf86561c91125384701b5d9 Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Mon, 11 Nov 2024 00:31:32 +0100 Subject: [PATCH 12/28] . --- code/modules/asset_cache/asset_list_items.dm | 1 - 1 file changed, 1 deletion(-) diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm index c2296302211..699e48e99cf 100644 --- a/code/modules/asset_cache/asset_list_items.dm +++ b/code/modules/asset_cache/asset_list_items.dm @@ -445,7 +445,6 @@ for(var/datum/robot_sprite/S as anything in typesof(/datum/robot_sprite)) if(!S.name) continue - to_world("[S.name]]") var/icon/I_S = icon(S.sprite_icon, S.sprite_icon_state, SOUTH) var/icon/I_N = icon(S.sprite_icon, S.sprite_icon_state, NORTH) var/icon/I_W = icon(S.sprite_icon, S.sprite_icon_state, WEST) From e6e6449c79b8ea6580b26a207d3eea2ea3ae1814 Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Mon, 11 Nov 2024 01:25:24 +0100 Subject: [PATCH 13/28] we only need out own asset --- code/modules/mob/living/silicon/robot/robot_ui_module.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/silicon/robot/robot_ui_module.dm b/code/modules/mob/living/silicon/robot/robot_ui_module.dm index 6037834bf14..435c5241460 100644 --- a/code/modules/mob/living/silicon/robot/robot_ui_module.dm +++ b/code/modules/mob/living/silicon/robot/robot_ui_module.dm @@ -10,7 +10,9 @@ /datum/tgui_module/robot_ui_module/ui_assets(mob/user) - . += get_asset_datum(/datum/asset/spritesheet/robot_icons) + return list( + get_asset_datum(/datum/asset/spritesheet/robot_icons) + ) /datum/tgui_module/robot_ui_module/tgui_static_data() var/list/data = ..() From bbff768a4650bc2309775a1df0102fd2aafee215 Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Mon, 11 Nov 2024 01:27:51 +0100 Subject: [PATCH 14/28] we need sprite and module for it anyway --- code/modules/asset_cache/asset_list_items.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm index 699e48e99cf..911dd62fb06 100644 --- a/code/modules/asset_cache/asset_list_items.dm +++ b/code/modules/asset_cache/asset_list_items.dm @@ -443,7 +443,7 @@ /datum/asset/spritesheet/robot_icons/create_spritesheets() for(var/datum/robot_sprite/S as anything in typesof(/datum/robot_sprite)) - if(!S.name) + if(!S.name || !S.module_type) continue var/icon/I_S = icon(S.sprite_icon, S.sprite_icon_state, SOUTH) var/icon/I_N = icon(S.sprite_icon, S.sprite_icon_state, NORTH) From 1ca37e1ad73ee9c317dbf8f4be1fa38c105600b4 Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Mon, 11 Nov 2024 02:05:08 +0100 Subject: [PATCH 15/28] some Ui things --- code/_helpers/text.dm | 5 +++++ code/modules/asset_cache/asset_list_items.dm | 11 ++++++----- .../mob/living/silicon/robot/robot_ui_module.dm | 4 +++- .../tgui/interfaces/RobotChoose/IconSection.tsx | 14 +++++++------- .../interfaces/RobotChoose/SelectorElement.tsx | 2 +- .../tgui/interfaces/RobotChoose/SpriteSection.tsx | 2 +- .../packages/tgui/interfaces/RobotChoose/index.tsx | 3 ++- tgui/packages/tgui/interfaces/RobotChoose/types.ts | 3 ++- 8 files changed, 27 insertions(+), 17 deletions(-) diff --git a/code/_helpers/text.dm b/code/_helpers/text.dm index 520b98d39ad..3357116d308 100644 --- a/code/_helpers/text.dm +++ b/code/_helpers/text.dm @@ -620,3 +620,8 @@ return json_decode(data) catch return null + +/// Removes all non-alphanumerics from the text, keep in mind this can lead to id conflicts +/proc/sanitize_css_class_name(name) + var/static/regex/regex = new(@"[^a-zA-Z0-9]","g") + return replacetext(name, regex, "") diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm index 911dd62fb06..b0dc6223e6b 100644 --- a/code/modules/asset_cache/asset_list_items.dm +++ b/code/modules/asset_cache/asset_list_items.dm @@ -443,7 +443,7 @@ /datum/asset/spritesheet/robot_icons/create_spritesheets() for(var/datum/robot_sprite/S as anything in typesof(/datum/robot_sprite)) - if(!S.name || !S.module_type) + if(!S.name) continue var/icon/I_S = icon(S.sprite_icon, S.sprite_icon_state, SOUTH) var/icon/I_N = icon(S.sprite_icon, S.sprite_icon_state, NORTH) @@ -461,10 +461,11 @@ var/icon/I_EE = icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", EAST) if(I_EE) I_E.Blend(I_EE, ICON_OVERLAY) - Insert(S.module_type + S.name + "_S", I_S) - Insert(S.module_type + S.name + "_N", I_N) - Insert(S.module_type + S.name + "_W", I_W) - Insert(S.module_type + S.name + "_E", I_E) + var/imgid = sanitize_css_class_name("[S.type]") + Insert(imgid + "_S", I_S) + Insert(imgid + "_N", I_N) + Insert(imgid + "_W", I_W) + Insert(imgid + "_E", I_E) //Cloning pod sprites for UIs diff --git a/code/modules/mob/living/silicon/robot/robot_ui_module.dm b/code/modules/mob/living/silicon/robot/robot_ui_module.dm index 435c5241460..1c3973d5dc6 100644 --- a/code/modules/mob/living/silicon/robot/robot_ui_module.dm +++ b/code/modules/mob/living/silicon/robot/robot_ui_module.dm @@ -71,8 +71,10 @@ available_sprites += list(list("sprite" = S.name, "belly" = S.has_vore_belly_sprites, "type" = model_type)) data["possible_sprites"] = available_sprites + data["sprite_datum"] = sprite_datum + data["asset"] = null if(sprite_datum) - data["sprite_datum"] = sprite_datum + data["asset"] = sanitize_css_class_name("[sprite_datum.type]") return data diff --git a/tgui/packages/tgui/interfaces/RobotChoose/IconSection.tsx b/tgui/packages/tgui/interfaces/RobotChoose/IconSection.tsx index f066f1b5071..8f18137ea19 100644 --- a/tgui/packages/tgui/interfaces/RobotChoose/IconSection.tsx +++ b/tgui/packages/tgui/interfaces/RobotChoose/IconSection.tsx @@ -2,9 +2,9 @@ import { resolveAsset } from 'tgui/assets'; import { useBackend } from 'tgui/backend'; import { Button, Image, Section, Stack } from 'tgui-core/components'; -export const IconSection = (props: { module?: string; sprite?: string }) => { +export const IconSection = (props: { sprite?: string | null }) => { const { act } = useBackend(); - const { module, sprite } = props; + const { sprite } = props; return (
{ } > - {!!sprite && !!module && ( + {!!sprite && ( <> { { { { const { act } = useBackend(); diff --git a/tgui/packages/tgui/interfaces/RobotChoose/SpriteSection.tsx b/tgui/packages/tgui/interfaces/RobotChoose/SpriteSection.tsx index 13cba8fc052..b9906e252e7 100644 --- a/tgui/packages/tgui/interfaces/RobotChoose/SpriteSection.tsx +++ b/tgui/packages/tgui/interfaces/RobotChoose/SpriteSection.tsx @@ -7,8 +7,8 @@ import { spriteOption } from './types'; export const SpriteSection = (props: { title: string; + selected?: string | null; sortable?: spriteOption[]; - selected?: string; }) => { const { title, sortable, selected } = props; diff --git a/tgui/packages/tgui/interfaces/RobotChoose/index.tsx b/tgui/packages/tgui/interfaces/RobotChoose/index.tsx index 999b0c687fb..3f04b68e772 100644 --- a/tgui/packages/tgui/interfaces/RobotChoose/index.tsx +++ b/tgui/packages/tgui/interfaces/RobotChoose/index.tsx @@ -16,6 +16,7 @@ export const RobotChoose = (props) => { selected_module, sprite_datum, theme, + asset, } = data; return ( @@ -32,7 +33,7 @@ export const RobotChoose = (props) => { sortable={possible_sprites} selected={sprite_datum} /> - + diff --git a/tgui/packages/tgui/interfaces/RobotChoose/types.ts b/tgui/packages/tgui/interfaces/RobotChoose/types.ts index 1fa9774eb9a..60bab5ac9de 100644 --- a/tgui/packages/tgui/interfaces/RobotChoose/types.ts +++ b/tgui/packages/tgui/interfaces/RobotChoose/types.ts @@ -3,7 +3,8 @@ export type Data = { possible_sprites?: spriteOption[]; theme?: string; selected_module?: string; - sprite_datum?: string; + sprite_datum?: string | null; + asset?: string | null; }; export type spriteOption = { sprite: string; belly: boolean; type: string }; From f80786eb9d9b72ef4fb19e5ea1872a73ed97d6a6 Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Mon, 11 Nov 2024 02:38:48 +0100 Subject: [PATCH 16/28] getting there, thanks Shadow --- code/modules/asset_cache/asset_list_items.dm | 16 ++++---- .../living/silicon/robot/robot_ui_module.dm | 6 ++- .../interfaces/RobotChoose/IconSection.tsx | 41 ++++++------------- .../tgui/interfaces/RobotChoose/index.tsx | 5 ++- .../tgui/interfaces/RobotChoose/types.ts | 3 +- 5 files changed, 29 insertions(+), 42 deletions(-) diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm index b0dc6223e6b..09cb6d2af95 100644 --- a/code/modules/asset_cache/asset_list_items.dm +++ b/code/modules/asset_cache/asset_list_items.dm @@ -445,16 +445,16 @@ for(var/datum/robot_sprite/S as anything in typesof(/datum/robot_sprite)) if(!S.name) continue - var/icon/I_S = icon(S.sprite_icon, S.sprite_icon_state, SOUTH) var/icon/I_N = icon(S.sprite_icon, S.sprite_icon_state, NORTH) + var/icon/I_S = icon(S.sprite_icon, S.sprite_icon_state, SOUTH) var/icon/I_W = icon(S.sprite_icon, S.sprite_icon_state, WEST) var/icon/I_E = icon(S.sprite_icon, S.sprite_icon_state, EAST) - var/icon/I_SE = icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", SOUTH) - if(I_SE) - I_S.Blend(I_SE, ICON_OVERLAY) var/icon/I_NE = icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", NORTH) if(I_NE) I_N.Blend(I_NE, ICON_OVERLAY) + var/icon/I_SE = icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", SOUTH) + if(I_SE) + I_S.Blend(I_SE, ICON_OVERLAY) var/icon/I_WE = icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", WEST) if(I_WE) I_W.Blend(I_WE, ICON_OVERLAY) @@ -462,10 +462,10 @@ if(I_EE) I_E.Blend(I_EE, ICON_OVERLAY) var/imgid = sanitize_css_class_name("[S.type]") - Insert(imgid + "_S", I_S) - Insert(imgid + "_N", I_N) - Insert(imgid + "_W", I_W) - Insert(imgid + "_E", I_E) + Insert(imgid + "N", I_N) + Insert(imgid + "S", I_S) + Insert(imgid + "W", I_W) + Insert(imgid + "E", I_E) //Cloning pod sprites for UIs diff --git a/code/modules/mob/living/silicon/robot/robot_ui_module.dm b/code/modules/mob/living/silicon/robot/robot_ui_module.dm index 1c3973d5dc6..1090c527140 100644 --- a/code/modules/mob/living/silicon/robot/robot_ui_module.dm +++ b/code/modules/mob/living/silicon/robot/robot_ui_module.dm @@ -48,6 +48,7 @@ var/list/data = ..() var/mob/living/silicon/robot/R = host + var/datum/asset/spritesheet/robot_icons/spritesheet = get_asset_datum(/datum/asset/spritesheet/robot_icons) if(selected_module) data["selected_module"] = selected_module @@ -72,9 +73,10 @@ data["possible_sprites"] = available_sprites data["sprite_datum"] = sprite_datum - data["asset"] = null + data["sprite_datum_class"] = null if(sprite_datum) - data["asset"] = sanitize_css_class_name("[sprite_datum.type]") + data["sprite_datum_class"] = sanitize_css_class_name("[sprite_datum.type]") + data["sprite_datum_size"] = spritesheet.icon_size_id(data["sprite_datum_class"] + "S") // just get the south icon's size, the rest will be the same return data diff --git a/tgui/packages/tgui/interfaces/RobotChoose/IconSection.tsx b/tgui/packages/tgui/interfaces/RobotChoose/IconSection.tsx index 8f18137ea19..ac61e464a13 100644 --- a/tgui/packages/tgui/interfaces/RobotChoose/IconSection.tsx +++ b/tgui/packages/tgui/interfaces/RobotChoose/IconSection.tsx @@ -1,10 +1,13 @@ -import { resolveAsset } from 'tgui/assets'; import { useBackend } from 'tgui/backend'; -import { Button, Image, Section, Stack } from 'tgui-core/components'; +import { Box, Button, Section, Stack } from 'tgui-core/components'; +import { classes } from 'tgui-core/react'; -export const IconSection = (props: { sprite?: string | null }) => { +export const IconSection = (props: { + sprite?: string | null; + size?: string; +}) => { const { act } = useBackend(); - const { sprite } = props; + const { sprite, size } = props; return (
{ } > - {!!sprite && ( + {!!sprite && !!size && ( <> - + - + - + - + )} diff --git a/tgui/packages/tgui/interfaces/RobotChoose/index.tsx b/tgui/packages/tgui/interfaces/RobotChoose/index.tsx index 3f04b68e772..e3fe8f5a0f9 100644 --- a/tgui/packages/tgui/interfaces/RobotChoose/index.tsx +++ b/tgui/packages/tgui/interfaces/RobotChoose/index.tsx @@ -16,7 +16,8 @@ export const RobotChoose = (props) => { selected_module, sprite_datum, theme, - asset, + sprite_datum_class, + sprite_datum_size, } = data; return ( @@ -33,7 +34,7 @@ export const RobotChoose = (props) => { sortable={possible_sprites} selected={sprite_datum} /> - + diff --git a/tgui/packages/tgui/interfaces/RobotChoose/types.ts b/tgui/packages/tgui/interfaces/RobotChoose/types.ts index 60bab5ac9de..9f5f425e9d6 100644 --- a/tgui/packages/tgui/interfaces/RobotChoose/types.ts +++ b/tgui/packages/tgui/interfaces/RobotChoose/types.ts @@ -4,7 +4,8 @@ export type Data = { theme?: string; selected_module?: string; sprite_datum?: string | null; - asset?: string | null; + sprite_datum_class?: string | null; + sprite_datum_size?: string; }; export type spriteOption = { sprite: string; belly: boolean; type: string }; From 9157d163bc1b25c8fa5fa194f632d9fec114d816 Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Mon, 11 Nov 2024 03:23:43 +0100 Subject: [PATCH 17/28] some styling --- code/modules/asset_cache/asset_list_items.dm | 4 +++ .../living/silicon/robot/robot_ui_module.dm | 1 + .../interfaces/RobotChoose/IconSection.tsx | 36 +++++++++++++++---- .../tgui/interfaces/RobotChoose/types.ts | 2 +- 4 files changed, 36 insertions(+), 7 deletions(-) diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm index 09cb6d2af95..88211f7a4dc 100644 --- a/code/modules/asset_cache/asset_list_items.dm +++ b/code/modules/asset_cache/asset_list_items.dm @@ -462,6 +462,10 @@ if(I_EE) I_E.Blend(I_EE, ICON_OVERLAY) var/imgid = sanitize_css_class_name("[S.type]") + I_N.Scale(120,120) + I_S.Scale(120,120) + I_W.Scale(120,120) + I_E.Scale(120,120) Insert(imgid + "N", I_N) Insert(imgid + "S", I_S) Insert(imgid + "W", I_W) diff --git a/code/modules/mob/living/silicon/robot/robot_ui_module.dm b/code/modules/mob/living/silicon/robot/robot_ui_module.dm index 1090c527140..78b9c592e40 100644 --- a/code/modules/mob/living/silicon/robot/robot_ui_module.dm +++ b/code/modules/mob/living/silicon/robot/robot_ui_module.dm @@ -74,6 +74,7 @@ data["possible_sprites"] = available_sprites data["sprite_datum"] = sprite_datum data["sprite_datum_class"] = null + data["sprite_datum_size"] = null if(sprite_datum) data["sprite_datum_class"] = sanitize_css_class_name("[sprite_datum.type]") data["sprite_datum_size"] = spritesheet.icon_size_id(data["sprite_datum_class"] + "S") // just get the south icon's size, the rest will be the same diff --git a/tgui/packages/tgui/interfaces/RobotChoose/IconSection.tsx b/tgui/packages/tgui/interfaces/RobotChoose/IconSection.tsx index ac61e464a13..20a03b5cd09 100644 --- a/tgui/packages/tgui/interfaces/RobotChoose/IconSection.tsx +++ b/tgui/packages/tgui/interfaces/RobotChoose/IconSection.tsx @@ -1,10 +1,10 @@ import { useBackend } from 'tgui/backend'; -import { Box, Button, Section, Stack } from 'tgui-core/components'; +import { Box, Button, Flex, Section, Stack } from 'tgui-core/components'; import { classes } from 'tgui-core/react'; export const IconSection = (props: { sprite?: string | null; - size?: string; + size?: string | null; }) => { const { act } = useBackend(); const { sprite, size } = props; @@ -24,16 +24,40 @@ export const IconSection = (props: { {!!sprite && !!size && ( <> - + + + + + + + - + + + + + + + - + + + + + + + - + + + + + + + )} diff --git a/tgui/packages/tgui/interfaces/RobotChoose/types.ts b/tgui/packages/tgui/interfaces/RobotChoose/types.ts index 9f5f425e9d6..18b57f6ce0d 100644 --- a/tgui/packages/tgui/interfaces/RobotChoose/types.ts +++ b/tgui/packages/tgui/interfaces/RobotChoose/types.ts @@ -5,7 +5,7 @@ export type Data = { selected_module?: string; sprite_datum?: string | null; sprite_datum_class?: string | null; - sprite_datum_size?: string; + sprite_datum_size?: string | null; }; export type spriteOption = { sprite: string; belly: boolean; type: string }; From d2bb281b45a1d0e3b243a5345f8eb17b2cfff317 Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Mon, 11 Nov 2024 03:58:53 +0100 Subject: [PATCH 18/28] fix --- code/modules/asset_cache/asset_list_items.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm index 88211f7a4dc..7e268c77736 100644 --- a/code/modules/asset_cache/asset_list_items.dm +++ b/code/modules/asset_cache/asset_list_items.dm @@ -443,7 +443,7 @@ /datum/asset/spritesheet/robot_icons/create_spritesheets() for(var/datum/robot_sprite/S as anything in typesof(/datum/robot_sprite)) - if(!S.name) + if(!S.name || !S.sprite_icon_state) // snowflake out those customs... they suck continue var/icon/I_N = icon(S.sprite_icon, S.sprite_icon_state, NORTH) var/icon/I_S = icon(S.sprite_icon, S.sprite_icon_state, SOUTH) From acb6f568d5ce8c1343573391dfa15e39ffe3da99 Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Mon, 11 Nov 2024 04:03:41 +0100 Subject: [PATCH 19/28] ensure eyes --- code/modules/asset_cache/asset_list_items.dm | 28 +++++++++++--------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm index 7e268c77736..54be950ed54 100644 --- a/code/modules/asset_cache/asset_list_items.dm +++ b/code/modules/asset_cache/asset_list_items.dm @@ -449,18 +449,22 @@ var/icon/I_S = icon(S.sprite_icon, S.sprite_icon_state, SOUTH) var/icon/I_W = icon(S.sprite_icon, S.sprite_icon_state, WEST) var/icon/I_E = icon(S.sprite_icon, S.sprite_icon_state, EAST) - var/icon/I_NE = icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", NORTH) - if(I_NE) - I_N.Blend(I_NE, ICON_OVERLAY) - var/icon/I_SE = icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", SOUTH) - if(I_SE) - I_S.Blend(I_SE, ICON_OVERLAY) - var/icon/I_WE = icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", WEST) - if(I_WE) - I_W.Blend(I_WE, ICON_OVERLAY) - var/icon/I_EE = icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", EAST) - if(I_EE) - I_E.Blend(I_EE, ICON_OVERLAY) + if(S.has_eye_sprites) + var/icon/I_NE = icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", NORTH) + if(I_NE) + I_N.Blend(I_NE, ICON_OVERLAY) + if(S.has_eye_sprites) + var/icon/I_SE = icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", SOUTH) + if(I_SE) + I_S.Blend(I_SE, ICON_OVERLAY) + if(S.has_eye_sprites) + var/icon/I_WE = icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", WEST) + if(I_WE) + I_W.Blend(I_WE, ICON_OVERLAY) + if(S.has_eye_sprites) + var/icon/I_EE = icon(S.sprite_icon, "[S.sprite_icon_state]-eyes", EAST) + if(I_EE) + I_E.Blend(I_EE, ICON_OVERLAY) var/imgid = sanitize_css_class_name("[S.type]") I_N.Scale(120,120) I_S.Scale(120,120) From ba9b3e3676abaf83021962a42f133d40bcd0818f Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Mon, 11 Nov 2024 08:53:52 +0100 Subject: [PATCH 20/28] include renaming --- code/game/objects/items/antag_spawners.dm | 1 - code/game/objects/items/robot/robot_parts.dm | 1 - code/game/objects/structures/ghost_pods/silicon.dm | 2 -- .../objects/structures/ghost_pods/silicon_vr.dm | 1 - code/modules/mob/living/silicon/robot/robot.dm | 13 +++++-------- .../mob/living/silicon/robot/robot_ui_module.dm | 11 +++++++++++ code/modules/mob/transform_procs.dm | 1 - .../tgui/interfaces/RobotChoose/IconSection.tsx | 13 +++++++++++-- tgui/packages/tgui/interfaces/RobotChoose/index.tsx | 7 ++++++- tgui/packages/tgui/interfaces/RobotChoose/types.ts | 1 + 10 files changed, 34 insertions(+), 17 deletions(-) diff --git a/code/game/objects/items/antag_spawners.dm b/code/game/objects/items/antag_spawners.dm index 8371f5b0175..28817531895 100644 --- a/code/game/objects/items/antag_spawners.dm +++ b/code/game/objects/items/antag_spawners.dm @@ -118,7 +118,6 @@ to speak with your team, and learn what their plan is for today.")) R.key = C.key -// R.Namepick() // Apparnetly making someone a merc lets them pick a name, so this isn't needed. spawn(1) mercs.add_antagonist(R.mind, FALSE, TRUE, FALSE, FALSE, FALSE) diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm index 32af47b31af..2667b9d3f66 100644 --- a/code/game/objects/items/robot/robot_parts.dm +++ b/code/game/objects/items/robot/robot_parts.dm @@ -225,7 +225,6 @@ feedback_inc("cyborg_birth",1) callHook("borgify", list(O)) - O.namepick() qdel(src) else diff --git a/code/game/objects/structures/ghost_pods/silicon.dm b/code/game/objects/structures/ghost_pods/silicon.dm index 64ac8f5674b..4f50784aed2 100644 --- a/code/game/objects/structures/ghost_pods/silicon.dm +++ b/code/game/objects/structures/ghost_pods/silicon.dm @@ -31,7 +31,6 @@ from the pod is not a crewmember.")) R.ckey = M.ckey visible_message(span_warning("As \the [src] opens, the eyes of the robot flicker as it is activated.")) - R.namepick() log_and_message_admins("successfully opened \a [src] and got a Lost Drone.") ..() @@ -57,7 +56,6 @@ definiton of 'your gravesite' is where your pod is.")) R.ckey = M.ckey visible_message(span_warning("As \the [src] opens, the eyes of the robot flicker as it is activated.")) - R.namepick() ..() /obj/structure/ghost_pod/ghost_activated/swarm_drone diff --git a/code/game/objects/structures/ghost_pods/silicon_vr.dm b/code/game/objects/structures/ghost_pods/silicon_vr.dm index cfc3b781d2f..1039349f2e1 100644 --- a/code/game/objects/structures/ghost_pods/silicon_vr.dm +++ b/code/game/objects/structures/ghost_pods/silicon_vr.dm @@ -21,7 +21,6 @@ from the pod is not a crewmember.")) R.ckey = M.ckey visible_message(span_warning("As \the [src] opens, the eyes of the robot flicker as it is activated.")) - R.namepick() log_and_message_admins("successfully opened \a [src] and got a Lost Drone.") used = TRUE return TRUE diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index cf978597b2f..28e680a0b76 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -407,15 +407,12 @@ to_chat(usr, "You can't pick another custom name. [isshell(src) ? "" : "Go ask for a name change."]") return 0 - spawn(0) - var/newname - newname = sanitizeSafe(tgui_input_text(src,"You are a robot. Enter a name, or leave blank for the default name.", "Name change","", MAX_NAME_LEN), MAX_NAME_LEN) - if (newname) - custom_name = newname - sprite_name = newname + var/newname = sanitizeSafe(tgui_input_text(src,"You are a robot. Enter a name, or leave blank for the default name.", "Name change","", MAX_NAME_LEN), MAX_NAME_LEN) + if (newname) + custom_name = newname + sprite_name = newname - updatename() - update_icon() + updatename() /mob/living/silicon/robot/verb/extra_customization() set name = "Customize Appearance" diff --git a/code/modules/mob/living/silicon/robot/robot_ui_module.dm b/code/modules/mob/living/silicon/robot/robot_ui_module.dm index 78b9c592e40..883ad8c22c9 100644 --- a/code/modules/mob/living/silicon/robot/robot_ui_module.dm +++ b/code/modules/mob/living/silicon/robot/robot_ui_module.dm @@ -3,6 +3,7 @@ name = "Robot Module Configurator" tgui_id = "RobotChoose" var/selected_module + var/newName var/datum/robot_sprite/sprite_datum /datum/tgui_module/robot_ui_module/tgui_state(mob/user) @@ -50,6 +51,8 @@ var/mob/living/silicon/robot/R = host var/datum/asset/spritesheet/robot_icons/spritesheet = get_asset_datum(/datum/asset/spritesheet/robot_icons) + data["currentName"] = newName ? newName : R.name + if(selected_module) data["selected_module"] = selected_module if(!SSrobot_sprites) @@ -112,7 +115,15 @@ sprite_datum = S break . = TRUE + if("rename") + var/name = params["value"] + if(name) + newName = sanitizeSafe(name, MAX_NAME_LEN) if("confirm") + if(!R.custom_name) + if (newName) + R.custom_name = newName + R.sprite_name = newName R.icon_selected = 1 var/module_type = robot_modules[selected_module] R.modtype = selected_module diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index a686e35de7b..5d018586f1d 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -190,7 +190,6 @@ O.custom_speech_bubble = B.custom_speech_bubble callHook("borgify", list(O)) - O.namepick() spawn(0) // Mobs still instantly del themselves, thus we need to spawn or O will never be returned qdel(src) diff --git a/tgui/packages/tgui/interfaces/RobotChoose/IconSection.tsx b/tgui/packages/tgui/interfaces/RobotChoose/IconSection.tsx index 20a03b5cd09..5426dac0c15 100644 --- a/tgui/packages/tgui/interfaces/RobotChoose/IconSection.tsx +++ b/tgui/packages/tgui/interfaces/RobotChoose/IconSection.tsx @@ -1,13 +1,14 @@ import { useBackend } from 'tgui/backend'; -import { Box, Button, Flex, Section, Stack } from 'tgui-core/components'; +import { Box, Button, Flex, Input, Section, Stack } from 'tgui-core/components'; import { classes } from 'tgui-core/react'; export const IconSection = (props: { + currentName: string; sprite?: string | null; size?: string | null; }) => { const { act } = useBackend(); - const { sprite, size } = props; + const { currentName, sprite, size } = props; return (
} > + + act('rename', { value })} + maxLength={52} + /> + {!!sprite && !!size && ( <> diff --git a/tgui/packages/tgui/interfaces/RobotChoose/index.tsx b/tgui/packages/tgui/interfaces/RobotChoose/index.tsx index e3fe8f5a0f9..50288a56a69 100644 --- a/tgui/packages/tgui/interfaces/RobotChoose/index.tsx +++ b/tgui/packages/tgui/interfaces/RobotChoose/index.tsx @@ -16,6 +16,7 @@ export const RobotChoose = (props) => { selected_module, sprite_datum, theme, + currentName, sprite_datum_class, sprite_datum_size, } = data; @@ -34,7 +35,11 @@ export const RobotChoose = (props) => { sortable={possible_sprites} selected={sprite_datum} /> - + diff --git a/tgui/packages/tgui/interfaces/RobotChoose/types.ts b/tgui/packages/tgui/interfaces/RobotChoose/types.ts index 18b57f6ce0d..4febf2232a6 100644 --- a/tgui/packages/tgui/interfaces/RobotChoose/types.ts +++ b/tgui/packages/tgui/interfaces/RobotChoose/types.ts @@ -1,6 +1,7 @@ export type Data = { possible_modules: string[]; possible_sprites?: spriteOption[]; + currentName: string; theme?: string; selected_module?: string; sprite_datum?: string | null; From dde2880e50f8fb26f73839eab29f979aa7e87755 Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Mon, 11 Nov 2024 09:52:39 +0100 Subject: [PATCH 21/28] lock state --- code/modules/asset_cache/asset_list_items.dm | 8 ++++---- code/modules/mob/living/silicon/robot/robot.dm | 6 ++++-- .../mob/living/silicon/robot/robot_ui_module.dm | 11 +++++++++++ 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm index 54be950ed54..564b0879488 100644 --- a/code/modules/asset_cache/asset_list_items.dm +++ b/code/modules/asset_cache/asset_list_items.dm @@ -466,10 +466,10 @@ if(I_EE) I_E.Blend(I_EE, ICON_OVERLAY) var/imgid = sanitize_css_class_name("[S.type]") - I_N.Scale(120,120) - I_S.Scale(120,120) - I_W.Scale(120,120) - I_E.Scale(120,120) + I_N.Scale(120, 120) + I_S.Scale(120, 120) + I_W.Scale(120, 120) + I_E.Scale(120, 120) Insert(imgid + "N", I_N) Insert(imgid + "S", I_S) Insert(imgid + "W", I_W) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 28e680a0b76..7b095cdc495 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -47,6 +47,7 @@ var/obj/screen/robot_modules_background var/ui_theme + var/selecting_module = FALSE //3 Modules can be activated at any one time. var/obj/item/robot_module/module = null @@ -345,8 +346,9 @@ sprite_datum = module_sprites[1] sprite_datum.do_equipment_glamour(module) return - var/datum/tgui_module/robot_ui_module/ui = new(src) - ui.tgui_interact(src) + if(!selecting_module) + var/datum/tgui_module/robot_ui_module/ui = new(src) + ui.tgui_interact(src) /mob/living/silicon/robot/proc/update_braintype() if(istype(mmi, /obj/item/mmi/digital/posibrain)) diff --git a/code/modules/mob/living/silicon/robot/robot_ui_module.dm b/code/modules/mob/living/silicon/robot/robot_ui_module.dm index 883ad8c22c9..6b1ea6b2a6e 100644 --- a/code/modules/mob/living/silicon/robot/robot_ui_module.dm +++ b/code/modules/mob/living/silicon/robot/robot_ui_module.dm @@ -9,6 +9,17 @@ /datum/tgui_module/robot_ui_module/tgui_state(mob/user) return GLOB.tgui_self_state +/datum/tgui_module/robot_ui_module/tgui_close(mob/user) + . = ..() + if(isrobot(user)) + var/mob/living/silicon/robot/R = user + R.selecting_module = FALSE + +/datum/tgui_module/robot_ui_module/tgui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui) + . = ..() + if(isrobot(user)) + var/mob/living/silicon/robot/R = user + R.selecting_module = TRUE /datum/tgui_module/robot_ui_module/ui_assets(mob/user) return list( From fbb720a66d4ffbce2470f723cb426d41052f89b6 Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Mon, 11 Nov 2024 10:14:05 +0100 Subject: [PATCH 22/28] modify robot to spritesheet --- code/modules/admin/modify_robot.dm | 20 +++++++++------ .../ModifyRobotTabs/ModifyRobotComponent.tsx | 24 ++++++++++-------- .../ModifyRobotTabs/ModifyRobotModules.tsx | 25 +++++++++++-------- .../ModifyRobotTabs/ModifyRobotRadio.tsx | 21 ++++++++-------- .../ModifyRobotTabs/ModifyRobotUpgrades.tsx | 21 ++++++++-------- .../tgui/interfaces/ModifyRobot/types.ts | 9 +++---- 6 files changed, 67 insertions(+), 53 deletions(-) diff --git a/code/modules/admin/modify_robot.dm b/code/modules/admin/modify_robot.dm index f2847943f35..64f486824d7 100644 --- a/code/modules/admin/modify_robot.dm +++ b/code/modules/admin/modify_robot.dm @@ -43,9 +43,16 @@ qdel(source) . = ..() +/datum/eventkit/modify_robot/ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/spritesheet/robot_icons) + ) + /datum/eventkit/modify_robot/tgui_data(mob/user) . = list() // Target section for general data + var/datum/asset/spritesheet/robot_icons/spritesheet = get_asset_datum(/datum/asset/spritesheet/robot_icons) + if(target) .["target"] = list() .["target"]["name"] = target.name @@ -62,10 +69,8 @@ // Target section for options once a module has been selected if(target.module) .["target"]["active"] = target.icon_selected - .["target"]["front"] = icon2base64(get_flat_icon(target,dir=SOUTH,no_anim=TRUE)) - .["target"]["side"] = icon2base64(get_flat_icon(target,dir=WEST,no_anim=TRUE)) - .["target"]["side_alt"] = icon2base64(get_flat_icon(target,dir=EAST,no_anim=TRUE)) - .["target"]["back"] = icon2base64(get_flat_icon(target,dir=NORTH,no_anim=TRUE)) + .["target"]["sprite"] = sanitize_css_class_name("[target.sprite_datum.type]") + .["target"]["sprite_size"] = spritesheet.icon_size_id(.["target"]["sprite"] + "S") .["target"]["modules"] = get_target_items(user) var/list/module_options = list() for(var/module in robot_modules) @@ -110,7 +115,7 @@ .["access_options"] = access_options // Section for source data for the module we might want to salvage if(source) - .["source"] += get_module_source(user) + .["source"] += get_module_source(user, spritesheet) var/list/all_robots = list() for(var/mob/living/silicon/robot/R in silicon_mob_list) if(!R.loc) @@ -573,10 +578,11 @@ target_items += list(list("name" = item.name, "ref" = "\ref[item]", "icon" = icon2html(item, user, sourceonly=TRUE), "desc" = item.desc)) return target_items -/datum/eventkit/modify_robot/proc/get_module_source(var/mob/user) +/datum/eventkit/modify_robot/proc/get_module_source(var/mob/user, var/datum/asset/spritesheet/robot_icons/spritesheet) var/list/source_list = list() source_list["model"] = source.module - source_list["front"] = icon2base64(get_flat_icon(source,dir=SOUTH,no_anim=TRUE)) + source_list["sprite"] = sanitize_css_class_name("[source.sprite_datum.type]") + source_list["sprite_size"] = spritesheet.icon_size_id(source_list["sprite"] + "S") var/list/source_items = list() for(var/obj/item in (source.module.modules | source.module.emag)) var/exists diff --git a/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotComponent.tsx b/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotComponent.tsx index 293db7da7de..165b95af2e7 100644 --- a/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotComponent.tsx +++ b/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotComponent.tsx @@ -2,16 +2,17 @@ import { capitalize } from 'common/string'; import { useState } from 'react'; import { useBackend } from 'tgui/backend'; import { + Box, Button, Divider, Flex, Icon, - Image, Input, Section, Stack, Tabs, } from 'tgui/components'; +import { classes } from 'tgui-core/react'; import { NoSpriteWarning } from '../components'; import { @@ -163,15 +164,18 @@ export const ModifyRobotComponent = (props: { - + + + + + + + diff --git a/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotModules.tsx b/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotModules.tsx index 045025ccd56..85ad5a6da4c 100644 --- a/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotModules.tsx +++ b/tgui/packages/tgui/interfaces/ModifyRobot/ModifyRobotTabs/ModifyRobotModules.tsx @@ -13,6 +13,7 @@ import { Section, Stack, } from 'tgui/components'; +import { classes } from 'tgui-core/react'; import { NoSpriteWarning } from '../components'; import { prepareSearch } from '../functions'; @@ -47,7 +48,8 @@ export const ModifyRobotModules = (props: { /> {!!source && ( - + + + + + + + { /> - + + + + + + + { /> - + + + + + + + Date: Mon, 11 Nov 2024 10:26:17 +0100 Subject: [PATCH 23/28] returns and ui state --- code/modules/mob/living/silicon/robot/robot_ui_module.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/living/silicon/robot/robot_ui_module.dm b/code/modules/mob/living/silicon/robot/robot_ui_module.dm index 6b1ea6b2a6e..91cd796c5a0 100644 --- a/code/modules/mob/living/silicon/robot/robot_ui_module.dm +++ b/code/modules/mob/living/silicon/robot/robot_ui_module.dm @@ -17,7 +17,7 @@ /datum/tgui_module/robot_ui_module/tgui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui) . = ..() - if(isrobot(user)) + if(isrobot(user) && ui) var/mob/living/silicon/robot/R = user R.selecting_module = TRUE @@ -130,6 +130,7 @@ var/name = params["value"] if(name) newName = sanitizeSafe(name, MAX_NAME_LEN) + . = TRUE if("confirm") if(!R.custom_name) if (newName) @@ -160,3 +161,4 @@ R.sprite_datum.do_equipment_glamour(R.module) to_chat(R, span_filter_notice("Your icon has been set. You now require a module reset to change it.")) close_ui() + . = TRUE From ea8ca79712550af533f7a8989d69b42208d19d88 Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Mon, 11 Nov 2024 11:47:29 +0100 Subject: [PATCH 24/28] update --- .../living/silicon/robot/robot_ui_module.dm | 1 + .../interfaces/RobotChoose/IconSection.tsx | 27 ++++++++++++++----- .../RobotChoose/SelectorElement.tsx | 2 +- .../interfaces/RobotChoose/SpriteSection.tsx | 8 +++--- .../tgui/interfaces/RobotChoose/functions.ts | 4 +-- .../tgui/interfaces/RobotChoose/index.tsx | 2 ++ .../tgui/interfaces/RobotChoose/types.ts | 1 + 7 files changed, 31 insertions(+), 14 deletions(-) diff --git a/code/modules/mob/living/silicon/robot/robot_ui_module.dm b/code/modules/mob/living/silicon/robot/robot_ui_module.dm index 91cd796c5a0..7d37eca48f6 100644 --- a/code/modules/mob/living/silicon/robot/robot_ui_module.dm +++ b/code/modules/mob/living/silicon/robot/robot_ui_module.dm @@ -63,6 +63,7 @@ var/datum/asset/spritesheet/robot_icons/spritesheet = get_asset_datum(/datum/asset/spritesheet/robot_icons) data["currentName"] = newName ? newName : R.name + data["isDefaultName"] = !newName if(selected_module) data["selected_module"] = selected_module diff --git a/tgui/packages/tgui/interfaces/RobotChoose/IconSection.tsx b/tgui/packages/tgui/interfaces/RobotChoose/IconSection.tsx index 5426dac0c15..3fd39c36e1a 100644 --- a/tgui/packages/tgui/interfaces/RobotChoose/IconSection.tsx +++ b/tgui/packages/tgui/interfaces/RobotChoose/IconSection.tsx @@ -2,13 +2,16 @@ import { useBackend } from 'tgui/backend'; import { Box, Button, Flex, Input, Section, Stack } from 'tgui-core/components'; import { classes } from 'tgui-core/react'; +import { Tooltip } from '../../components'; + export const IconSection = (props: { currentName: string; + isDefaultName: boolean; sprite?: string | null; size?: string | null; }) => { const { act } = useBackend(); - const { currentName, sprite, size } = props; + const { currentName, isDefaultName, sprite, size } = props; return (
- act('rename', { value })} - maxLength={52} - /> + + + Name: + + + + act('rename', { value })} + maxLength={52} + textColor={isDefaultName ? 'red' : undefined} + /> + + + {!!sprite && !!size && ( <> diff --git a/tgui/packages/tgui/interfaces/RobotChoose/SelectorElement.tsx b/tgui/packages/tgui/interfaces/RobotChoose/SelectorElement.tsx index 7da0a1ad325..3279ce78829 100644 --- a/tgui/packages/tgui/interfaces/RobotChoose/SelectorElement.tsx +++ b/tgui/packages/tgui/interfaces/RobotChoose/SelectorElement.tsx @@ -19,7 +19,7 @@ export const SelectorElement = (props: { > {option} - {belly && ( + {!!belly && ( <> diff --git a/tgui/packages/tgui/interfaces/RobotChoose/SpriteSection.tsx b/tgui/packages/tgui/interfaces/RobotChoose/SpriteSection.tsx index b9906e252e7..d287792d025 100644 --- a/tgui/packages/tgui/interfaces/RobotChoose/SpriteSection.tsx +++ b/tgui/packages/tgui/interfaces/RobotChoose/SpriteSection.tsx @@ -14,13 +14,13 @@ export const SpriteSection = (props: { const [searchText, setSearchText] = useState(''); const [includeDefault, setIncludeDefault] = useState(false); - const [includeDog, setInclideDog] = useState(false); + const [includeWide, setInclideDog] = useState(false); const [includeTall, setIncludeTall] = useState(false); const filtered = robotSpriteSearcher( searchText, includeDefault, - includeDog, + includeWide, includeTall, sortable, ); @@ -39,8 +39,8 @@ export const SpriteSection = (props: { Def setInclideDog(!includeDog)} + checked={includeWide} + onClick={() => setInclideDog(!includeWide)} > Wide diff --git a/tgui/packages/tgui/interfaces/RobotChoose/functions.ts b/tgui/packages/tgui/interfaces/RobotChoose/functions.ts index 81b0688ad8e..f42d00d83c2 100644 --- a/tgui/packages/tgui/interfaces/RobotChoose/functions.ts +++ b/tgui/packages/tgui/interfaces/RobotChoose/functions.ts @@ -7,7 +7,7 @@ import { spriteOption } from './types'; export function robotSpriteSearcher( searchText: string, includeDefault: boolean, - includeDog: boolean, + includeWide: boolean, includeTall: boolean, sprites?: spriteOption[], ): spriteOption[] { @@ -19,7 +19,7 @@ export function robotSpriteSearcher( if (includeDefault) { subtypes.push('def'); } - if (includeDog) { + if (includeWide) { subtypes.push('wide'); } if (includeTall) { diff --git a/tgui/packages/tgui/interfaces/RobotChoose/index.tsx b/tgui/packages/tgui/interfaces/RobotChoose/index.tsx index 50288a56a69..91d8dcb7d57 100644 --- a/tgui/packages/tgui/interfaces/RobotChoose/index.tsx +++ b/tgui/packages/tgui/interfaces/RobotChoose/index.tsx @@ -17,6 +17,7 @@ export const RobotChoose = (props) => { sprite_datum, theme, currentName, + isDefaultName, sprite_datum_class, sprite_datum_size, } = data; @@ -37,6 +38,7 @@ export const RobotChoose = (props) => { /> diff --git a/tgui/packages/tgui/interfaces/RobotChoose/types.ts b/tgui/packages/tgui/interfaces/RobotChoose/types.ts index 4febf2232a6..06d691c5893 100644 --- a/tgui/packages/tgui/interfaces/RobotChoose/types.ts +++ b/tgui/packages/tgui/interfaces/RobotChoose/types.ts @@ -2,6 +2,7 @@ export type Data = { possible_modules: string[]; possible_sprites?: spriteOption[]; currentName: string; + isDefaultName: boolean; theme?: string; selected_module?: string; sprite_datum?: string | null; From 455da0a4315e8d21481b3de806ab65422cd9ffec Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Mon, 11 Nov 2024 12:08:31 +0100 Subject: [PATCH 25/28] fix ag janitor --- .../living/silicon/robot/robot_ui_module.dm | 8 ++++++-- icons/mob/robot/janitor.dmi | Bin 83218 -> 73403 bytes 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/silicon/robot/robot_ui_module.dm b/code/modules/mob/living/silicon/robot/robot_ui_module.dm index 7d37eca48f6..74c6ad4cda7 100644 --- a/code/modules/mob/living/silicon/robot/robot_ui_module.dm +++ b/code/modules/mob/living/silicon/robot/robot_ui_module.dm @@ -113,9 +113,13 @@ if(!is_borg_whitelisted(R, new_module)) return selected_module = new_module + var/new_datum var/list/module_sprites = SSrobot_sprites.get_module_sprites(selected_module, R) - if(!(sprite_datum in module_sprites)) - sprite_datum = null + for(var/datum/robot_sprite/S in module_sprites) + if(S.name == sprite_datum.name) + new_datum = S + break + sprite_datum = new_datum . = TRUE if("pick_icon") var/sprite = params["value"] diff --git a/icons/mob/robot/janitor.dmi b/icons/mob/robot/janitor.dmi index 7410b353a75514c1409b0b6109aee0dc6264d34a..3dbaa27a420e85e275ecd9be76fc98b9d7ef21c7 100644 GIT binary patch literal 73403 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 UlAf?)wgiElPMpk=Q z-uJq`KRzzt%$(SJueH~@_r2EICrVRYnGlZ#4*&qd7ta;70RWv5`~z^Xz%z4m=q3Pw zCgS^A&t1{d?X9b=v%9U6BLH}3mFf;U&I&-EzBHA4G^wVk^dG0$fA7%q@ZoVuTG?A}owex&+_NIk`v}P_Y z-rN*dW*qeig2?rVOEj_Ascd^dP*F||KIIP_&ee%e^IepZO?xmjzOxZZEsxCU3qHLRiH7H7>`ZM2RTBsljW~`QPAvZ~?7R&pXywWOE&ruPgRivH5_uyS%5W$GRxhucN zhW5TsyGhHEx}^0d^Zl%mtj(wInYp;|Fyx^B`@QNYtfXhe3Hk3A>C6a`|GyUy3!^cB z7FVjtRfWR;J*D{jYcw!Mj=wUZ^5xgdSzj1hLDTC0y@p|)QHTruqWzbGo<1Nx3Ug=# z$b|*CyZ;j(THWgM`Ct1Xj2|gWcbd@2=w-i9jgd2c9IyF=>e%jOLp>+^-7dqM5`jn8 zGyVy)lmW9WIQf>ZtReZFZ0=D|Sbl+sMHuSdn$8e2Vq)MS1^!#^^g((8(YkDL#X z6EF9a!B((|6C0Hzyh0cai13DdWQCrETvXS2$evOY!SWTVU+OAopoU^I{hAU3zum%e z81Rl%joIzZKXwvFcQJ-Ro8QzVM$`o2Y|1pmiae+h9Ot;6hRPK=1X+6IrC0@ zs&dM=(mU~&3)m8}BN7w&bn_^vm@BQdA zwfGy?`+YWYeqir{} zYp7qjiROM|m|CWY92ZmWaaKfbE+gG#URCLbp~>4oB~MQgfRUXWzi%xdThgnHXTbzzC4k6QC~7Z`5^$0LCy0`35BpS8RPr3z*`7PY8*T~GR&FLX`*#t?9xNq(7JGI^@g?}PXAD{VnlPfIyH(VX!=apQ zcfXA_8yxG0012Ox^6KJ@&LABF$OpuDRpyrF#U6(1W~MjJ4mspj#fKAHFCwLB^E~KJ zUhLY#hE3JrLhn+z#CxzqF{yjsGn7~D&xv=HS+>&!VWazc{!ZuZIh3Y9wcr*L(>uzk zxJLt8T3VdJdw2}%Vq>D?!|S!9wzfDpQWpdsKPH)=W#&D-iZP#@oSkhRn9UGf@D42t z!f(IhfiBe8l7)nXK*`AwDJkSY>WacZhhg)r4;_Gkg@p!azj_4$NJvfq4WB*1W^;3M z0Dczn0KaFcGA3fx<{2!OPP(EF`@(>>bKf8+Z->^NEF>X%z0=gyDee>EUkbsaFLUH+ zG8}zBLU*R^W~)wB>3E3mlI#m{p!k`eQ!+z<2KQS6XX5}vZhS-V-q&O*9+jrXX~9tp zRuNIR zbuTR*x;qWVq*D1pI%ZmwdoxO}HDKed%>8GAj5p#>v99hVyAD^X-q+XixUxk?;U=wC zZ%;Oc;+E*gsGRArIW7(adhSaAfR!Ol=<7?wCk`&Ikj&!Z1Y9$*nb}n<`4E%ckq?5( zPzZsksp-wd>ieo0P=Cn@d$vI~mA(+MHA$<%kZzM4wJvV@fTJTg6m4z{Tk}F+xK0xB5a(QE{pZu6gijxEmHqtk9)x(@KNb{B z_8@1olHuV|-NIrU?&yQ%cyzitgh1K~TBYJ2N^$v7^5k1qIWNl-0o|Q4gZ>q{hN{{F zYBwKz2-8GFWbwvBoB;X5;t#lEH3fe|r=;<}3hxOT@@QHQc2iSVI-8wMmgpB0sv|1i zN=S&yicjgWxN) zg@5I@n}(8D95Ffaha1S4h&VVZ^hC@F9Ob>{@*$C5>0%uH>DYRAwezQp-Qa<+u_?G7 zq&qvk8eTPSyVlUug#Ho~bO90HsL>S@!~qa&$eOVJeylW9xdt?ijAD~WrBB%EZ-4$& z1^g*X{{2+-c8GfBz#~IYK10Xo8!{a?j|ZN4vlG(e&l=gZw7*}L=3%yiUbyA@hGgx| z+g1kX`1J$pQd}H>Gw|>Ac1SCP?Exkjk)aDH|JmQ)H-HJ6=SO`FIC`SYj?Gl8IqxYv z{cCrFH5`{Pyl%G(d;pWABki%w)RPVV&{|sH^CNbfc_n{>Ap+>2gUuCkl$8c@DnVWP zY)kEpzb0VOP!Wu&M?YFz-uAt2p}V`A5t~7PynE8LbAf@k)JS8peVue4Hel;1iUtq7 zy@CK`MveJ(a|$b$973Cm9DIBeGnmD{AU+#iP_Ir>)k*^bsTe5CQ=gJ2q!1qk|4p?A zp((V}NNX3$hgkUCezWaA+lw@o1)V-R?FpZgV7G9Jx{j6xFw~adRNv<^Hmh_tZdB@N zmg=J;)9kI#g!VFNr*V5`R%q~D4*4FaS!m_?d?Ii;=dWv>VyNREbQY5k2duf9GYDPZ z$cs-={^g`biu`0aa+%r$@xV@)VdlpCT2FsUr{BNg6g8el4B_cx2_c@aNc4oQ^4CBK z^!7f#lNS?i6MMHxh$m~n;V|_^(2(5`TzxCe&fHIFa)(q(=39(mhWYEcKDQw17T)V= zRdz;W>-ls!M=Xk9SiEJ5^%{&G?I|#$m+~dwr{XhZd}z3go?DHdCi$a}3u8(g8w+b? zxhvw$M9^_Rd)Ax>V~+nZ?k3SGE(3$KKL>elOgX;XI0k-5&%7`EyVKRQgql{zXh}Mh zg^%FB<>Doey!$kzHAA;?ygTN#opHWh1;3I%&k$fDSj{xdV{^rLXE?{JT1}hkUBkmB zEmUvb3#DAFUbX)eDq@}w`>+xC2IIL}fxfVkXZO|%2p%3DIS;^T4k^^eg&%~}db(Kx z7Ut$m*WMRuamxV`T!F2D5y^g3!-Gd&KwO#MRS0JKU^+jx3c!P%58*k-jIJt9T*HDh z8Q&Kca=>=}?Wrf{vzi8p5MvHLtynUBikFs?!w_%r5DgvO+|G_`@F~^DGtef;$jJ2f zV$6fvz^e`l@r<5-sLYKuH4{ph5rjRo0c}rC%xPUQ;J8R6(uSNTf0#VY8aGJeB(q#+ zl(5j69$Zbwn;sQevMA;V+f(R4cR}2%SJFVn7wmk$FmrtOjZL~cxN0h%Z@E)C=Jtct1(4%%bb1;# z;P%iY=+i+2o{BILy5ACJg6!-A&gcZD%Kpk`?5OB+yeLVy&rGvfw(0xW6Zq`| zpADt+!==q@_@)-PnzAr6qs5<{A#LC-IGj3}+=^VF0cjcijKKqER{FEG)e1<&THaq} z(0sDdDtyhA^7+J+-{NR#YYi~c9U-WY)u$7%&pbeabr_Pp=VKgW)&U|7`&d2pk9tF z{8(~<2Dj6ukIv?i&ob-A>br#nR@U(;`PP2M?S6M}wWuHGaaRuAL1etN15L-9J=)oSwBYO z#eR%hHH5C-C)P;(quE=_VoJ^jd`5kZ&CLp5wDUk&k+WARwBiNrumzS5E zUgcZ+8Sdwe>{>) zJ$pAe6t~M*$NzwVpi*sO_$Rw@pwrA*t$|_XNtxSYb6Cu%houTC{Linm$<*x{8PUkV zR)pEi=*?em^#lrE3w5{EtvK$y z-OPwv-UqlSKNcyQ>6GH=(;;I3P5Lp&{R&@y=kj>G;&yeq4FMNWn{37;Uc)-yM0tC{ z$hx0OYRP0OQoDR$9>aXf##0In-r|xY=OIMqAd@zWp_6jjv)JRaz=zbJ7#RAK8OqvV>0R9juYZh%j5K>-~GrV!IYA|MU^j^e81p^|mYXhbSWGG=W zMlCEtqM$=Ok#&5!4yLePOA(LSY7qMF8cq!3&{X^2od>E*Kjt zn3z0tWP4Qj2hqJPrsP&_%2L)EjF7REe457~6sl*ekAJkd0ylk{qYOKv3@WpoT@GN! z8MLc@?=4y91lzU2-_Wn;eY~=-CEV#xV(p)iK*kUeh3697>b*EK^ZTFL+`8&+vR>qy zzaei7AKbF?kMuf}Qdp_P>t7<-0*t3CmZ24R zf@{Rb8Rz!HZawr`aqwGRXFWMuu7u%7i?4k1Uxmhg+V%0q!?(j^VS-|(;+_Fo#gHPk zx_s$VrW8yj&P;|0SzaZzsDGBVS>ny)A|Ach-J|~ zplBN#8%7|@vJ9f3Ce4k*4!DQL5rX$=1wDsD7177)acsF(LeXSNbHn4Auyft-f8T0A z34<|k#&|~0Dy~O@?p_t|ts$iR|D7_D%6QXA0!-e|;WT{YaMEz!doo1@usb1qgL=o( zQ3CI~qxV6Du-{bA{;ov4pCe{gJ2HPx%tV@-diESH!pi}qGBn+D?~UDR)R2R{*XDCR z1u}4O2?^IT=#Msk(2%@*h3Ff@vb40s;+6(Ta{*k@ujJ4Wg~D-{01h|;u$j?31?+#j(`57#?$E%g&5R5xM0of%FUMlN z6T{~6aUBY$`jcz z%jZv2n2CvqJZNleM7rAB+k1O^=Ni^KCaglpX=nz(vw5$+saI51jx`#qs}ueD^~?EW zLk;Y4;0kWF!otf-2$+HMR>IA}0RZmX<3(~Xqs1nEI6hlTc`bh~ z^F9wW9VX#NvXKTPpb%;wo?rrpD>3}coSZN8Hg|Vp!2}UHaJDwyNue{3a*jS}f5ZFjUc6RA2sJNtL zF>Y;BQd%08we_YQOiWB{d_c)~M2)NxI6Xf8#U*<%*BC10cjoLWb<^zrSGyG0`}HN} zP=Ml_KVgb0CqN1X;`?`*fjty>` zL`@z$Y%j480rxewzp?n+F7k)>W@>B;POp`TgwRLx^O?=*@rfWpg=#|RnlKSPQPswB zsrma#O*MNt&C^2@Gc#khwrmuYmC*q< zjZXxC_kqp zKd7ti9@kc2K5q@k^)_&CooUOv7R3hfN5Y&q|3xp*62cW+OZDIpcdCl21lDKuBqe|M z{W*P5!a)#;-dqFkgc(6y^$iXExrCMyukatB9B;!`0~jG8Bm4d!GODt!F1)r@7$`hV zFT*!6NhLP&jQz=L_@}PFudf4it0i2Gl+;ugZ7G}Q@FdV!YqniG1W@)$cz#!o`+zFO zwqMRQz}6;{NGbzK&gmLNC4C9@Hoz>SrUPX#H1>l;2cc$chb8&=pb&Kg8Q5Vdsz40*AxJbU z{=qu2^m}sSv6|4WuQ>LiL+zQ&i$V8NpaTJg*b^303L@OxF>#8oocs)$;2cvo5BY|N z4bD0Fxa5tDj8bKdqOlXpB79XYtQ4)igpl{6F5{j>Ep+N%81dSOi>SM_|z3Rns1$u$gcsOPtO=hvE_CLKS+6h zCX#Sx`n0FRqtqQzm?sCp_XIq~gx~c+mz~5nO-EbKnnE<-?L>sP45J=<-GRU#d`;u) zmq#*8fgQcw-G!H(A&H)QGs1dsw42)UQoyp0#J%FaGgH(FZ8RGKVKllAzge_z*7=ET z4B-GCv9a3L@_GOR{*~3$ziHt6^Ud`G=dX-sS%idAem})3Mkh&5ObiAkUT*n9B>VSH z7o7PZwL&aJ0v;)&V(F+q)Ha{^h{alAayHCg09KHAMExKN&y-+gWt{`D0&<8fWJ=Dj4EQkhQ93|ERaKSdOWX^% z9XRX6n7O=?pv9R=hC746V3YtbZTFy%{_pQ^Z?Dhx3>biL0y3u4zrK06JJDkqD+<3E z;19!_Kv03$yd;v%OyXBdOaloBf)4fQGaDNYN;*1K(?~2lT+R6eK-h=?WzeRgyq9lo|fiC~AWcSF>?~9^?Tsa!|rBkm@i#M^N#(?-5es$>KKMo_ggP6%UUlRVmg(Kjj_Yn2mb{C`E-Eke@&|Icv~V7DMW)bdMFVWp&}FC9H?{4z^9 z>p(E8){h;+NPzz3$=hdYvx>@+JgH-MZ3a_0uhZXZlSs%x6$SHJTCxP6JkjPzRWZK{ z1Hl>7kgq=AfkS$FI{w)QnJYY`FnUlxb~DwH2P26*6p{5h@_m2DJL`GFJvFonT_O@~ zCg}x$E%VLWcASo*rby_2gB-&7qTT;YNeM3}z~4W2WT_tP#qjQjM2o{IUYXPd`e6Ks z@>?7LF5?A6#>S3k60fhXXHD?|tvR4_!!a#oLE$5nLZjXfInhJYhVINm78E1DUf2+j zJG{r{;;VVK9X>I?{s_R5 zw?j1UlHdA@IVX%i&F>m*Y>7F6nkkcQU)|acn?q$yW*bN3czEmWQqeO*n8f`jE;3fz{5W~ zuMuRR(qA?Hw40?}yHjcXsxj;h#mz{1i%8<87 zv0QgsF;YF-?WbzbfV<@SR@FaiG_gRZ%m1Kx(}2TC;ej1X&cM)W$((fJ)LE12+wC+nK+u0#|E^Z@ zEyZH(+Dxbns7^VY8_ADiuWg9~5>{3VHWZY}u#NlJV$L;1-^0hKRFJCnXR6Ss9L z5MWR#aLA+Hoos@AbFuq4nSlc^yR&DSORb`Mf&Z&^_JC;|{%CVC=}#LQ>dscsA>jjj zn$zzEF&NgYru)jpXDKfoum^onqAcu^h4-K=&rw6l<=dXm&pP}c{o`)(Ke{@9;-)h^ zdi&0r-(lE*ur52L^MLdoX4G3(>H@I_fa<-F#M?qJM?O3JFtb_*9l$c@*q7l=Zg~*q z0U6{_>0DCp8gG)I=bDL=qxxQ-f1vi;)0NU0tK=n3F|K%~Ck>I6`f<#AduwL1-_)8^ z5F_z~WW1KAo5(DCC{#=XU5KQX!2!NPi0R#rk% zQb3;mE7B&1b{)UrB|HsQO1X zOL_QhM>%=1n`Jzes!;4TjRQT^g>{FN?q^noxV^BtQ}vIMqB2>-zk47IB}=vr(R92Z z$V`k09Klj?`W#Fy!;Qqu>ip|5kwIurkSUU!%uU;sx+XiO1o=mY*4+z;WUmVpP!{5& z9GmPNIGuFd4GU?Pn9M9JBv5DvXR69DxGz9jTH4vwHAK5;4Gj&gp|9_Gi3UETgYwx( z5btL>W2TG%mw*>OKH}eAb2WlInEBBojAGsLaPanl!9no}!jcQ0#7Aefmx48`I1Yn1 zXk!eEa4Xv9w#5=cvocq!v{PV*peC6v#mO)La(3xt_vR*K6@xZRm(ug#LjAFW5+AVi zPsAQ&5WhvNB%0xW$DJ@LOf%4QaOI$zM+}=>3^3sS9OrXaq-T z0bXe^O$rY8#5Ope<$89s$~?#4FALf%cN&j=zLn|C?A#pP%QPN2)G4s3+zS`2&^rI(`Z z4G#YR0;+wyw~yiOXE2Sqa~%3^F38}kPULXY^ZtHN{DQZJZJW|NcYi8j_R|RB4zEsw z#yu<@$7ZJM=Z1t#AOM3P70!YM>~HgPw0l#{^>i)mFRt3le&l?O4sItKQ~Yq-g^@RG zHd$sI4Tl3nfKHhaF3>kT`~%$dgE$3pZ(1lpzpZ(wfp@(tIEVn?$;ruPLH|V2S*wWw z)B7eg1_IM)h{&gqi|2KX1mwrah-{fbX#Wc^`U9(QU`F8^xKk!fBt4i8aEAYlu@ZB; zCvUs+2-|IghAW>Hs1j6cmrdMqTx)$@2oKwvsuKnW9}N1iOWq!}JLtfv%}!?hu_g`o zHL4FXo4x$MQR!%5SGmp-PTLvL3=F_TfxbyhZsa7#v}itEbmGC~_tJ_3ETJwm_uMdR zSye9%@!#~P2efmew;&gM`tkZ!=Drrn$I6P?dv}mj;ee7mm0K5O>!1ze5E1?)wG0vdV8#VVi@HG@hf-4))zJZU_p1UT?H;m8JRS4RUgB^{ zCcBk_5JFm!j^18u(Cka5BXD7b&e>w}EfI*Q&2nDf{!r?`+po!25&0^1L=F0Q4< zL4J!oJ41|*MHhe#l}SEkS4i)Q?I|s3P2TljSY2*I(dBa?0v%^U*)258Ltz}QRF%@R zUz%8h(Ynqoj(-O)BNCP&{snO{zokTLoc0D(!lGB3mk<56?29q zbZ>Tcc89bfrrkhv0qes+;ZL{#69Al;8X`-tVP8H6{tV(pxC!r|1EW0h*cUSi zV3JMheSEx*0K^mIgaSqaazY3Vv@*!yGsSlp5)W#_VUm9C_0G?Zs+rBP+)Wuw{Yjk( ztJPn4jR>NgiB&KhZ@!GLMv4Vv*5atsYb0q{ns(;F$+s2FF-JN7NRSNT)}V(-mUg_R zj%cTdAs*s$>KTbfS(VN=-X5{)qKwvfh9`Pu`qPGZDG(+Do*{AI&od9>kdH|@ie294 z^InYz1cvHC0}e=K6Bc&3!0iFK+C@w2>tSz-b#Q0F#GNix93J5Nh4>jr#~hxUqUq}D zI?OlKnouV|MEu9NtBGX~A)4h7^STcKzbP-Lf6*pE%%#^_T+zWq+94NRsNwtwULdH> z+}vDQC=-C-c`l!bryT`llh!*!hcilN5SIXL%Ex9V7mZEGjrS&m5jtCmLjf#Fi+raTmK1|FQA0M9y zy`u`cva8^6J&_J7^3kJ5W{3i6I;VdUcY)g%SQ#ENYRfxR}ojhK)IjmYT2VUqkp&5w5CoA zR`)y0Zw+l2=T1QD`AWeVNXu<1g*Jg2i9-BO<{i-uGfhjL9KfW8&Y!-$<6kb-CcVYPp_}hZ(A_GY9kTn!JT8*Yjd2F(J8*&cq zr$a*^6pKKyQg^YcPVN6dsgPdOHIDyW zrG8>`PKQSxgxdbo>Q!rV>&>U2>b}A*4%lGA95chgg$Ru2f(SIt5CJ+c1KxOjet@q} z9RBqXxL9g`+ZzuqtZBQ~9TO92JJZ$QW@ZCn!7?2&ITsh+FZKkP*6b#}MPH28w1YY_ zA0{v2{YWwlvXz0XVF z@)61iP&(L|z2_G@UNwKQ*dchWyBerV#-s{F^}K(5CJd{xT>W_wtL%l}Hmt}a58xQ* z>m~Y^OG^Skxx0Ow%>H2)hJ7@#(i)Aay4x)6^(w|8}Sy4u+z zwG5hydF+5uw(W1m;?f@saw_>R+QQ$75#}HPiq~zbE$dTqFVc=23IYA%@4lbfb-?xg zv%YXZ^F)s5+9H!%mq*v#&9yr(WgdXLEMX?t(h8!&pN*0~$iNkX{?r|KzYu%N@!_j% zWN7CEE329$2fCu{%F{Citn#SbPb6D>Vj_t( z494qU2BnS$N!jr9v_8y`vzj;-EEhV1Nn-#$H)k~0;zL$eRu&Dq>G04HVXL3+Fv9=# z%3~Vs5Ip60xYUV~AKaa^vbqXpow-Xuj87N75PkB56iomu9HDAbV5&T}ITx%7)VD?fI z>cJkIhzv+M@vR{@_@{^f^H;pV$H%VE!0Cgl96k%&IE^u^X)z%vExFn6{E6S_Y zCRVo_ik=G@;=gS+H*?a_uSghTL2Y0TB3d51eH}YGXycyz7svQ{BgZQ^YAM1`3Kd!q z3E?Q5lJ4#=9A#UeCgp!22kmOd$k5nc5j!|too-06PURvPRvSGIfHOA^DxH&KU$BF)zumgt5 zbY>>3t*r;G+7%**%;qb$tJGDb+XHAHFNICTYsjnvZQLnYo27)HZLMu=SoD6&aRm!i zimIvvsJq5|PeTM0_a*0*>K_H(#U&SQIxk*|XnOq9*WcP$!?E!h>9k{5ljT9{W(k;o z@q)5DvNn#_f?30Cq2<1q=3g(`6!Hkkd{M9+*P6dnANQtyv9sc|n z)WcwCMDmfe-G8AYPQL!3VFZ!Q?3DV}QausyaMND zrL%d(u0k6h2vmOdAu9igZ{H@9I`*75CSGTI*!r$`g z>;Tn@Al}YoP*>EmzUu;IPUqdX(xD_bTD8KA6gy&%0(kCtayg~Te%!`8s>f4pOA$a?G_8E>h+Q@EYN1_~CIItekep;v3d{EeD^(bBLg;!V-T{+?d!f?1 z%F54*;;<%OSJc%hxxXgIWI(K;;QJ&;g5K7)2<7r=IjU0ZH$x$2_eH;1DVe~H$94SS z)9EiUY{>wg*$Oa4Wyh?@XZJQ!@%jA!Qr1HF>TM_L$$KlKDFG}WMOFP#&NV!gRd;y< zpM31xPm{%PD1rL^0kaeA1OOHzkAq%XUaPD4rY>EBoG`2MDTitcI}!5W^XHeA28@3k zNWdvL8f=}cQQxgcCB>e2tyu?3k^+#0MUAs!k%G?XCSxm(N0M+H~`P}q! zm!S{sdk8?6AzuAw7ZPJxU)&EKT+B9p>VU6VSVs^$2_Ih{{2gLv;_RHAbwy`qPz2G1 z>F})Kd}X&R`;y0Oa(Lnp{NnHc100}2Z{8wubs?tuOO?#u0(`r((E9pyEH$Zk>9@$o zHrp;3PELbSd)1cOQ`XWPrXHRA=O&@YZz!j@y|(9mm^6|N=o-JPG@Y-Ume?prIn&P_ zi98hcT@=l~Sp?(FPSla4P3b_lKHycI2C7PsA61Qtm2z2v%FhV>P`Ln+xXW?}xkFUq zFD>rIVCN`3?&hOm;4ymZJHY6CmorDKu;NcuqN&?zog;6(Tid)!x~Xf0!`ft4_Q{?O z>ZGa2vAyF;E>fq=?<{3!P}*E??&V0==l6VtmJ=dp4J4m)g&LZ9Dt0RqU8KbD>Ac>>sya9o)9zdd6Zhj0oO1{%Y4gA(+RV zO6@dJqvl@IHBu{~hi=PbnlcbeQCrdc+OC=TI?j`D>q<0gXVK>D?-d!U1j0m7OUg(= zd{Yna|Lx&a>m>F=E_ zWuA*V!CD34%!hFnU{HErvcf~){YRl(y2P+1p7!uNc2#t>GxuiNM-8xV#S=INh!u*w zN9X68uYI_tKFs9#EvB1U+hM=?gm-s$=Zg#fK>xtIdhx1iL~|YVpvy0p&)a-y(M?WA zGxs3nzKoaKu(kA!;!Anx)yg2}w?@M2_inUj44Z9Pt_BAy=Yhp%S(fJub5ZtQjn}0! zqTes1UH16c?`&<)a4v1;r-+1<{aFT@tJ^8R*Ue+W$4;!YDFO6gaHsIlJ#69`orZihnb5lth|USR>X4N!IsD&kyEN!*)8z zM62f`YVhGl&meG^YL3X1JR%IcuLv_@|DB$w<4?H!ZSwg_rdZ#@Q&-(*9lJhR_q&)E z4jcA2$lP*hn-6cj{fTdD-Lt+)Lop!ZWVzRQX9ZQ)aOOg|EzpY8irkN5-L zO#iHMNW7~@aNG~BlNNTp!2f3HmNNf*?iRGPvg)<_A^wcJ^c0pAPUZzItrS-e7yu{* zeW?ur$d}02G~|qo==i09?w%fV;;!det&((w@bce^~=)IYeot^8hP1=>9H&MX`xv?o6e8wB16CjFU_AW7MvE^@qn$Yr6F;4Z_ypMv@-mOo&pk}sgD|g)5+lU z@&M3HhF?wV~ci`MixEW%&vIr*#Vs?53@}Q?S_G2(c~4pRyUFGBH08 zF5nN&V#@>Y0KMOnabOa4xo8&iv4^q|1ySC0JrEHSBe?X%uRrg545|tDY~-$i5=fv4 zA}l(Z1OSH*(t1K{v4YLh^ocJEj#i8%9d5SWP=9TNR{XN?18#3;_pfW7Z`(7&fkoXV z89zwV%u%-2l<<__8dcW3FLese3)eX9M~zCtI|mQ@o6KC&h(>i^I;Ro&R(~{S+!58(*2|!gOl{0M zwWqdlcB6EXrScRLeCr@3B?U*HM0_vimTFgk3Uqh>rJzL9vVm7j&|udOZ&n?C=rf^r zH-+lc7+QdICM#=Gor({oAHccMn{wvvjOsjj1>9$@Iyc1Cb^BRF?3{Ly^>D3JZp&_x zhTVw}ZS=5-<3z>;c`B0x0NJoPExROmdAKP&fI-@Qu*HPU;d(vgZC3fF&F;O2{dyHk zaMC<+wbE^j-@y>Y)?%uLY;!{c08Bjm6sp5Fg4j!u%8@HuxE=U3QnB9bbc8nm_q?gf zLDu8%L`Vl>2d%YqJj;>^f94l1Jm3|4;^V~EU+se*8lLNLPEUDT=xO}x%OITNpWaBB zhM~l+8{V_^kyh@w9gSE2y{r&Yeh==#5Ch!^r3?^>IXF2x^AHMRnJy0^NQv@3f5re$ zg4e*8A)edb?`Z{l`@POJ!(Qsa0Xq5X;>OQ<0tIFP0i-1c-xp(f5R|K;AF8$8o*6y^ zKR2X!;<6ZVRcnBNHt4yJSnh}(v<_;Cr4@0YI`92T*>GnZAOKn!Qp7*O`1Amo^0y)L zO*nYy`|;-Io%aXL5);Ggl8P)#O@Arnu1Pl`aNo+(jyMg;=6myzGzQEg5|=wF=3$0V zP?l|eVR9>+cT`H5+4RqUwRg@S-!-N=DW?^n!=>( zl^g3Ko4fUk+tx@%DgG@mnbUe|jXCA;kf;V*o%IuG+F-EvI6Kx(cu$&X8x=QCGJYlT zH&Tt|y*nqCVljMn-JCTgtoP$FIO2_0kJ8^{h1FlT$7Q=nKCbxP!39%5ZEn6>olANj z>T+U&m1erpe8$SgrZc@iQJp?UA&O{k20*3eQf;L?p||asM8Na|aJXNW58t8It^T)4 zs~fEZ?^1f0S)?8`wtp=M(q$kBC}sybC|gD&#e!n*cf}2OS&)jzgUi`q_qzrV4xOA` zyf;ptbkD~rehuJ>|8%8R7>pYz3OGFqj0E*sadt@O-7116*X21r8LR%(>bUpa{7_ql zC}HTm2(_E^4Va~J>GJ*ORt0f{@J-rhRoBZ20W5`xcB8=m7pP z%V%7SDmPDt|DeGf7)>mmFNeMF8tSJ;7OL}=doN$hSee0X0nirBV%j1lZ^^ERuesG( zff2IV+-n=%?(92UbX9cVaK2`$&F`E6ql40RvB4iV<3g$StV^^U6UbYd>+FQITRTK} z#Ip?FXio3F$T|YGtO{j~ii&zZ^a23%3=LUCMJch*_JgYp`4LVgF$6@gc*~uL6P2rZi5wjq4D5D}xLi^OcUd@6GSddQ!M&I;#|v*JN7WN3AY&bcSMMn*K`-?&BJk544rW zl05O`|6+{1I9jc|A9d*z4Il-Hj;wo)35@i(PLlh=q|R3=4SOW?%NN#P$K~dG%i?+h zo-ESRPcdA+1tGIWL?D1j#Luo|b`61}IIl#|v4#E!cZiSy<4OZu%`H#!0sbp$)~S@eBL^ zL)}}4MHRJuqZ^QrMkJIL1(ZhV7(`MO1eIkn*y!!_-y_z*OHC8PXv3p!n5eX(? zLYEmkg<0zvAXKrzVW1kA3kc;ocBJJ(E!oR+?fv<;aC02rmCchF)^a$)iRBsyhMjh| zN2SkNT9Ep)-0JDDzrC(9S~Xp3SkheQ3M+KW+JAqWJd05Hk61CsYdw7Gp2Q)y1SUb@ z#&u;q7rsLF`sGJg@W_Cp^`QwLCw@q2eej;Hir})RfX?+`yNEa%W}?18-@6K&A1*GO z+6LC%(7iSSFC84bF;*$z5|O8S_ga}H2ft2wGa$6v-okBbV{h-8t?{cbe6m#({w@(l zm)g(Q_Fo`tt>(w&r(pLbih<1&8548I?KbDZ;h}Ymh*it(nyqc=7D~*?jQ#4?$>{_u z#B_<0>1{$nr~&gB;aEHlyZ;d7>F;Ob6MNEC+`q|0RKDg0-@jyRXAa1XvynANv3p7D zqtb-!mzD?Z(WA)5(&K6}yKAkwC3?@;MzwFQ>)yL}QMLP%xT$P@^a4xl`DG)TxTnc7 zW1TitW2C5Y)GeH8l?O-%9Mbw2m~ z?Gq&u22?tnr^U^`kQ3P0Vt%(Xw#o}No?|3a($aE4$Q7~X+GQz}$GfX_*-UP4644&v z-}w+zi>1myP0{VWTrRb>OEe$8_0T?rVu=0VWGmip@z)dyw*GA4+j9<#nC1EnK1m>0 z8fZ>VH5(2DmqgWe3qLY@vO4s(owmx*>DqkdW_Pyu~Dt`fD{S4Xdx-d zsOabmxTi~Z%8MvIHTnB3Wkn-!$0h0c`PZXkV%*M-97rJ)ooTm69a@4f1kQ*6+5&10 zDPt@9jwS_mkzgEi38MrJNC91a6B}CwOwu?Gd4tW}AW&oay1H6=ZDAoOPdAIQ<)}~( zzjQ$xPRdCf^#!p+(?t(8?;kyWAe4N4@-WB zK|E9uM;S7TP;CDbnu-eKfhi>hk@F9XXnOQU<%GZ@<>F+$I)Qz`DT-qUN$NHVW)f*( z7=d=nRf4-rw@Lf~zo(QE`Ar8Z716w>P+F^^bG0K|1Y13`69l1Z2fO~briVF$eEz`?Nl8l}ySh|u-oz`|1lZo_!^uFv zscr4;=RiM!50l8DTv_NbSt@AoKmZ{4v7y?9iqbD;7HZ%ri&J2?eX%B66p17t$P#l?k)CSso{{Y&FgAumBwD+9pk z?N71ljX1#Klyv?)$7 z9T#v8-AU>9hnYXWAI>8Zlm$3z?IfJeMx;~vPlbm~yP^uN4edQ^56#q_TH$k+#T@f~ zp%u761>90Jr`y|4MdwxCXrJ}UPG~3ci7rvN9Hr}s8PlWJ;ONRK7`z2-RLzVke}zaz5uuVfrhZi^fZhb+zDLiBz0#tXUZyDISJI8P zNZbO!4^+&`D~v?DY>W)ligsj|0KPHEKM9m8w}*dH`q59i;EKtiJUzs(-;e$Dw#`H;yx; zlFHutWw!!gLY49d)64;7zJK9+b7_KmD~ZFB1M$sBUBRaCIcL7_MW%q8Y;RW^y(mT8 zzjrU}()1<3F&FDp90aeF&=JlKFH4V86vRbDwau&TN-8FHep#>s5TS_L$6gneG&`qriC;^*v-~b0fjT+iR9;E_-;!tLd!Jfu?N^V)b!`oD z;+2B#x=Hw9&>>h<*dsGUAcvNg)-mj_3AYQ2EWg!AN3#yeH3$2UUr*32_=vtuJEpdu z24vfTJ3u)#i3R)#sdAof9T~a!_3KwLDXH+kyetzhL_<9oh*8QJvFRQMW7#H?7QlE2 zF~pDr?)cNZ{+jKbR5#E|U z%($Y&!?b@sA8>z=pP$!N%f=#)=|2V4z^~%7^}+}PBbk==*g6AY(D++=m9pO zi`SA9LAU?`Y`x!3!{^gz{eGP7Ydp%@9y_yU3-;cwNU8YStUJelS-5}?_@=y(tYssq^0K1BlNa?v^nEItF?#q2_dILybV~(pT zrG_TNYR`hs(>+Cdo=$f+Sah;1JASNf5|QE8%u;)|oDv)LXblv|fZAYkG}1qhp8Nnf z>a2?r#INbzyItSDKnZdq!+I$yi}juS#?-zwm103>5Qf$|rE8Xr<{eFDOS}pSX4dVB zt=wHotbZmn*2BNL-o1NQtjC8UsK@hnm%>%mUi&9>O(}9qVT9Rx4=*r^|LA%x zhb~*`nMMH-oU=YnufZ2@P8ezeK~t8HNMd@gV118{mMit+GfP00ByGRgDy2wH=b_ zIXR1gbFEcEaKF=d&D6g!t@Or5MV(i#dD9&AnU&goE0pT*_;vJc&DIZvj7EOmv{ziV zRWi@Rep)E2y{iSV9$?w<*{E`cvq^rL!#fHW7#Yh}*1k++$gnZ%&V;=yn^5xMbBnC0 zq;jMiZ23@_%HP)~5Yv$)=t|%QBhy3k@12bZ3gAa|cXtQX*2)6vE-Wp5LO#^jCk7}B zDCKHyEfXXh16esc$AU`{2-GbQ;B-Nwg*6B?B)0qWcC7q#1V^4o+i!`SUscYg z)*peZ=`Ze@Dpu};`YRa?Af@Zf+n2stbq#=-XF2@ZGFg;7V0)KHJ_*csrcwYUNO*yo zgB$&zZhn>aCEI1gEC5>z3GE&IeF#j~f>ZTdbpOI+BOy2Qq*{8)OAdF?GT57{h!CTB2vPu#BZ-JO_bSE zCfz1rr!I575cEgj)!ZVjK4wDm#ajjntuP(Squ14r&CDnuV_aiP3|em~D9)4b(G z`-GA93)2H``ogy~OXr2oX}_gx52G}2M*EQxSB$7vRIw_fk;mtZnm-$mc4(4Ts{A-F z@b(;iX{_>l8d;&>bJP)$+!6>_xV?nmU8$ctTYPA&84F9=>||}$N58Cq)y(1NB@Vtj z)%jwq)ZisD&v@ZN2*?6eIGKKwb~=GiisVn}f9lYiB>WpB9a>f1=*9emSv-!Rw^uXu zi}GozahIiCaVCX~iVV`_y=YCVoZcDvzfurVj*K)}9L9L1V%Z?RcF0eVWeX}mqk&y0zcrhs;PZnWeDX=?v_YcYZG_kG zUtA6NY%y%UjV6ds6{&XH)eATHa_mBBWX8kra%KEr$2m-P)r ztGZ&Z*n&-6>R4i9V=YdvxeF)!yc!V}w$S>Ts>c8H$9+@$Q9G|i47TUMP9G@b z9iVXiSEHYoS=}qG08pZ;4LbCZ4`eFF#IT5d63#QLYwolb zqY7WhFXFpmr|S%%<#3WNEKn*AUY-}S7PssEQV@;MpyJl^r@nlP0^A6pKDwVFQY(Rv zM?iogl#J$}hpaXd=Cxxc87IRsV z(63)X+tbyc)N8uhHCZP^?zJ(AMN4YO(-Q23llSfLoTjF^zxIt~Wems1$42i_qOM_{ zmqD@b%Z;KCuG(w8tA@*s+b!p*{%E-TB+fQNUx{YeFuGbkxiuDMvv=~udXa|XOU8(s z%yjq3pCcS6eo6rWJy_VqZkXV?*7Av;fn08PRn>E6C%bgzlhoVGm5$?g37l}BkMXXy zww}2;&9<$sS$a{drHKh8^sTs<43boWR8>`>Ai0dZrTXUy(#f@7Ci+*}(#o!jHJ-vg zY=j>pnoyR>dD4n9*1?6?;{zm)^L3I;|J_p9RJJ1anGK4obUpTb-4Q9^=XgpT5@_af z#>Cdy{>8G)m+?M62Y79`fYB#`gmz$%bK!S0Te~n_j}8;M4e5 zjcmgb?jwymdbzl-h5%#l(1Vvp#TR>RUWS{f$0@8&;URiSn+us)7)5g!{IJ?z&~WEr zAobmfl?*#A1-fK#PbMRa#YAosd(21E(20Y;Wp&QS3B!K6Rj=cxPK$jDE+ehP2y$+(E&JT zYSOsIN_c<1u8YDTDx>`0Kf8I<5MSMC7I50CJb$2ho~^e8JMYN2MEmBqB+k+c$3z$? zvGpGcf6S8E)oGEI=&|2j>9MyikRs~6dr_!utkQg$lPxy3QEG8R;k@gKFS+Z~L ztS(KCWG<-5-{o6BKDZ~jmur19lR)&Z_gQjIV9(!clb`KGSb`*~{nKEQ$lYNLtmQ5$ zZ9ZUp72Y@-h~8eGt`>#Xt7u#CmFh`#uWtMME70!D$BT~#l2%$ix;W>%dB3EKxG zo~<>}X-o-!_@CkE>C6CIrI!)da8<;xz6{K#8=sw43CJ z-+%mgeSCD3=hm%}Mag~4C$*S{v0~@1qJJ7{#tF$;m<4iJbN<7;7hA==tY!SPYlB%D zHbZw(o;6K6?kB|I?vVwZKYYqd2J2*Dte$MJFf@!{5;X7@4g?jx=N7(W&k#P-s)>s* z)_G}iXfHu}{^%~7g}+n1j;?Py9 zDV|(f`v@P{-;lHN@3jBV3xn)(eN42}J6vpW%Q-Qbtnu8|8T)jVa~tU6FghMieJLc0 zk)ODFKE$4ltE;4cSaD8=0Y2DcsE7TNfRd3j2`G9s$MC0v$y-t>`yw~vYJaETrlrbp zNw6~le-pA=YLA+za%OXPcW*EWf|S9ND|l=?n(^ChoT$2gJ%|r?dO`u$>nvGS2$yf2 zJGo2r!3l_HpuIKCHmGt~NH`Tg-!xU~fF4J(b zM}?PM9z{I##IeXT3-8}$IQSE~`KK$q@3v1HL;Bg-xxzI;A}BmluV(+ODe^pLSTbG7 z;Z$;IBptLuqv2!`bDr}YWDyT*(4}6Y;XAGcyF;HPpr(IgZyxW$oxF?8oj-m!E0tSd z6`fzD*G8Xk7FCi?|oZ{qomWmmIK?QtLB+w&aP@f=HD%I%%_v{=y`_f8Q|s?Q@O zWe{MF;W!@KMydT;<`gAX#Z<-)F7XFgwuVPibh|&~F_PP**!h|9rxK<7aKG%<`ZcII zuJgo=a+G#6x3I9!QB4!jxiFTIZJJBZ6?;*d=YrQ!%A0~8Z|o6)?8|NL3MOHZvG{HL zTs&hXD6|ar3L&WTR-s>}qvw(a_WJtbHOjbQRUu@!; z1BT;Sctl;X4>CX2vR6VsI&rL@gj*Uzpj*QDg_d`K-UlWO|EBRucqBPQV=4K4Q_*e> z&Oo+6L&w51)v|V&;J0r+qxOcwo*3E^63cZQ@~Bz)I%L5Xwnd)x&@!tzc3g1WDynOa zJ**-$9=mX&H=0+&e~y(At7Sj~gfWZIgEN_UzHbFi^6?$=9<}$CJL&_`EE1y6aOyBZWeJa5A$0h(Y;TfR(_VU_U=S1;Yq4#C zYzgHRm(cmUMGh0~sGbkBe|fbzK`pWh^uiG7oEG=}=^plq)Mbk@{fzb-o_3<%?7DLM ztxO>mRigKQKck>T;`Zr|h-_h%3bpJi3ge1H1gEfarvHl!p{6aR?`IctU|44Uje&`K z!_pPf8%kKtieaDU^uIdEvv&e+9=#!kj>}lzHZZ^n{iJ7L0v%8HWRH)}AMfLaS6Jux z)j23SxL`slu%_|0>j8Rs7{3h}J94I#Had?z$w(X{m8co1_F z-v@sve-2Q3H}ceV*u3=Uldw|HzNNon88NJ#E={MlPCfnoaYwszO`z$mIVb<~`!!Ue zsZu@L*8yKkvsvmdb0vrKIwO9FpUwZ)$JD^#9=;4*K^jYr*y@UrRae7J+c||@EPdov zElpkB2%+8$IsBOgRS)c(i>l0%?w$`DoZyN&Bbj}U!d)U#o&!#^KD`SE^8|~w;Wy70KrtbK4HrUa`sQ)9GQ)kGD9{-DhV8RO z%&>H!G?F2!e?vBfY1zsLbnru&Ay>Vh^BT!#0U1p1a*j5DRP`0P zhzEI`CE0gT=|&fPQ(^|bqc_>xlA*=}8Ekac zWv_4nZm`jI(4ufn=eKT&m3J1a(V(Ht!wxwQ4h8g4f~J<^#!0;()q{YVM*)q(+w{HW zHu)|1r?A(N>o_s>*KMo?>1QdGfi&%#X+JF0+>h8_4M2|`(OvQ zG3NEDpvlyA4duks=WEUgrG~$tb4Jx>LxV#`SFab3MN{wBqHR66$?1F`iJ{Z8`ZLQ? zxTUFV+90lk=+I~357P=Bs}snm(V#07!7r0GzLj`hNtRe&U;p*wbw>8glM!FnpL3Xa zJ)8X7QD4aX4q;V3_o)ps^=>NlleemowWMPGJfXt&Wb5sIgi~;L;qO@1aUfXda}vO-L)M3 zOBhL=Bx3Q#=Wz8WG*Yh^waHmg{YO|(@D9-O4Xe$U6;5Ve%2*hXS^3s4&&xfb_&q#4 zied;rw>G@wzh~R^9dDQ=lhdi|D|NmjV*a_8e^D0~+^ol`FLA!uj~TS|vdNGsq=RJq zkcApHQ>OKv!q7zFq5DPKJ+AO>3x~5T*)lwv@AwX{QNA*rt?>xy_>jm`$MIU~OQ1J<+pnDay=c&Cz1nXX?m#M* zGtN-Raq6mY9DE=i5IFi07+oq_T1-F6t4JP5g><|eEb-L|K;((w#s=)SQ^y|w_D!8N z6~k^{WBu58Zg}1z1bifnRytacKnlmVSqP^CEdtMJ3n~mzW>3?FIIUhwGENWta&q0M z*v9Wb$BaOdZE`LMb&S_0&!$$e*<%%1`tI^{qo;6(=P2iYjqFv#%hmZ^s<&+sbhe-cEEIHf^s2qHvksG-SzP!= z(s678^T66~ng80g{QXeZ8X~YBq)0V^VhC}qxgDF8nD__4g;Q6@qOfxGgMMv5m~bo+ zWtz_i{W$Rl?9HB;g|HGQqlWT~LkQ%m(!^&GsxjY+Y`K3KgbFeajm{yPm%9UVR zhmvb7eYayFBQ;zkywSy}0w+bM1fGJcvUkytNA)tL;E)%naqgrcex&)m)Xl49oar6R zUMmMj&Ou&4vac|GNRjin+;dl3&%lJT;BoCWuYN>c?y6|@?Tz0|29A|yXCwK;geAlw zue7hpCS+H2VjjOe&m~XQN0<&O=FhhF!I#RgXlXR3S0qt(VZ}wQhhJ@sZ0Pbrb-|py zy?WljQBuWKf?Mu)&`I?l8ETc~uG#Qy`GZpTl^Y)P-*M|}BFl#Gqn93g#sk&$KvMuWD9 zKpGXm?g@N7RQ0#Fv9;9${U=|ZQ$;Ta0XXq^YFF8RuZ7&ax2LCRxRWGEgVX2S4>`8BwB# z8}ciQ+o`)^P%mf9VLVNV*3E~%pMd^!jb0;b8u4*m-)dyKy`0ZMZ!UAtp&cp?pXp+Z z^XYn*T)1s%t}CB><$8JncJ#SX_{sK)U=PQG!k{ldzCPYZ{Pp58C^88KOUSy?!1j?D zyTzagaUDFo^l)~hMT5Fot)oK<7U{dE%o9El zB5$8}$A=~9+Y669*|QZEsY4+0*=aci!i0KDAB{EZ8|UssmYEd1yJdI7eGX1%I}rbH zXXgDZN$%2;Ri#0jRb=z`$AWwJ5$G9nj(_TzVEpqBAT$Caf0>d-DwbK#v%6v`vS975 z`80EJ0m6YS(0r}$Y=U#QspQ;O$Zf5TcAFD*bUeGV-cA4L(I_uZAhg4V$zq;H-u|ik z2cy`*K>30k#O;4406xh zP5h}ahdFd%2L%FHW(&X`)s!NKA8Rz>XrL6I1kM2C`7a@a`TvgoX4G{|*Z9%PVq zze*iWL0C?YlWd_NbOM}6`O;@Uh0;sV1B5-toN>~~lH7k?+v+ZiS0={q&qX1{XgYge z^7_0Bq7k_L`ZR7HIFg3FAgV5ARn+MMb1g8vlOwbo{Yt&1HX2<`na$u1QC#;bi44HAiO*z{H3i>>%HL$asA{;lo4m4vX}+ zC|UZ@aBr8MKUbgF+2?z4eU$SsDOk3=B+m6(O-V&0O(#uX@ujq4ilzV5dh8ygLQ+o1p%xj>LK0KS7geWDrUZjxA|qe|y1THXjK z+8w07U1DC(4EmXVD<~MghMbZtnM@Dy02m$+@QX(Y!TVPp&6ULIfG=DuwP# z3sxiIqAx`@`khSN6U0?|(q9N2YzmDK>wG00?YXTy)BR3r_*UYM`xz^=q#ma_RLsF@ zTgQf`<#czX_q8{E{|I59At$Q!o*r=8l~@w6t_vb&i5Bi+_0m$NriJ68W6Cduov9sp zu!c3kaikGd{&)-(ZKy6HvPmj5enQY5j_wHmZC;}fe}pxykOoTHjaTD)#9y|%UbU4c z3IA)oVop!GuN(Q6!LXWsjjxfl1DEF?%RhH?d-KiPD=C=y zzT+(KolVd5*g#d|G6aEl5Fq%bwazR---31RN*<&k&7S#i^@xvzGA3H=h6t?({|AR% z-9Y*RgX>=F(?@XF?U99x>;*fv!*N6mc`H5dg|6aPVNhaylGEIgF7zU0ZGd>?>jcci zUz5YX7+g@K{+a!&&qQr59HfvpT$@%z{r>aOPIADjRR8gcnlN59yxdC^VM&=9-2NQ% z$>JGqRlw6pI=5n}JxKIoGc|ry#t-hev*TdF!iWO1@1AlFYqEmF6FlFhc0tXU~a0v zzLR9v9?KpTeWT!PMYN`#{~nly`gEv=rLKx*S4jJPduAz@uu>S|H-q%_xmhTWO2F>w zeSBC={dwEKE1)1Mc|AXXt`9oMpCM{Iq_b(rJ`P z-e4gCgoI!diYg}B>J4S}sZA9S_FliAzf7qE0we0HD%33A>*kT!zkNO}L&|WBR>?-G zrST3u`-nNmgZ9J8&GEY+hV;jUhs5m*PJpbJycEbU;9e7yDP%{ND(*=SOxF=b>*Afh zD=s9pKEtrllSoA)*t_S6q_ zIz9mH40yCI7?fDVg0|$j4Gm@|o)6aC``p$v~ux&VAc0d^s z{BzR3A~aZ092FU?gAuiHIC&l=`e@&%!NBYHciM}{{ahO|xh?aTos$c;T$bKIxZDE4 z8{D`GmB_IfA5o9;6_=kBP_0iblsL?4@?(Ft|684BjGApC(55XUuR(h^xW0k5-)8b%Ln3=BiH0jF-cRO z*7V*2InwK?0fR)jh=z8Y$pa^@ zUH`30Qo8*3l0Yxg{{F5}pPJ&Oab|_Ebxo4Xmp{zQoNm0zsAHiHsyit#pr=vFhdKfP40f(tH>at(vKE>xwYuY zn8PIVp-jeYr`^0}fM!7d6ix7ZJgplI0h|{qmW+&z^{6>^dG_qvnTfvsdsD>t&=jgg z8hm|PerDhwtVqPiKU?Vo76DW$EA>JdXH4pM^iWP=NAYz zipZtBg{s8(QHKjlpeb|Ue!YsBgpPv;1{`9YU)W-pxB22z*RwYtD`}E?E?;D3$|?Ou z0k#MO{JwA0+dld}dSvW8weI2%bz2||Zrl)2SNp(ZW8Bu+7zfVb%vt>>E%0O!Tw+L? zN84OCfboae(=n-gz1?o8Lh$!pSKrjC7}ohZSN-v_b@7xBxUU=E3x&b?dd{S;HsutH zz9YG_#3pr02d1sG%-r}3i8~^9XeubGR zI+<0=LJhRX^n2H{S#od^)|-xLQ)KTf4NqCJ=!SO0%d1-6qQXs2y+#MdRxPLT?RX>> zAFP%odvCcA?`TOrvx}csjuj+8p}Ldv@5;T^kZ_7VJNuwS?0B)g39UdT(& zqSo;@nRgAQf2Hoivjed6v%7d&JrE%S?brbd3EJwfzUUpVtCKsHbj=_eeSswSqdAiV z1_=r;w{N^Kp9%5@*!fTQHaJm(htBv~w26Jxd@Ax)JBlEPMlNZ;L#(lax#flriXRV{ z0G~#a9i1W+xMg@;$*g3nH*P-XebmpgwY}&HFfbajyE7<(0MBcgnwSK(uL*}Hi&JPW@13tqlAw?5!^#>w;K*}$nP zB;2`h^USuDG2!k41dG_zioUqb)4S=LB&+;C14ZDcKy{Y z_M=?Bsr291CRbKu_d`Nr2C^LlW_1Fcy4e$@*<12UbenyfEk57#z0hh9XByRt} znYOF~zFU@BhJRH%J`Ou{)z7m1k4hcK%^Dx-s{YY(Vd4J23&@?2g2<6HInVZjEesX# z==l0h6y`c)$9)fWAg12Yk-xb%#uGX}t%;UL}^F1Cu@3-S*JpY5o zz{Cz+2P>}K>1^;`iI?=V%4~R}79U<0hDp5g-%u7H%VG4e-%HL59RKQx*~v$A0|huut(4cKl+$^kqL+hF zfg&ybNe+nklobBQ_(+@L0eT2--;YonPNKGJd!`z8(BAai?oRKZ)O-K?g?XONL1&A; zcDUI#Om*M3qjE*W40wEYi<0jGp$yfFAlf+^+>)S*nd&v9A8Tau%!Pn!O#=N3x>0P- z^$YG3t79*ox<#xbAma^-j?1p*oGRN>V&#I9s`&~@B{sgF2y z{b)+s{eK&jnF9y5)(IX0593a`=)&<9G4y~d{%^5Ak10U>^CWw1_W{#|l0G0;xLp`p zwtQh^&C~Ek=pu-9k1~DPjuxCl+mmb!pmsvIz&nw_YsQV= z{m`8O1U&c>w4~Ddx4#qL=SyffiXY5gsI(=7iF-IR51X@JEDUOk04IsI4G#Dw3AcYK zzC8;B<^9EUqY{pW1wpuzZ0zvE#G^7DbMiqY>{b2WtNFW==EgxAZC^GvogE^Kb}nes z;H1&lRaH+S#BZ>78m%a-6&^csTg)e7Z@kZ4YyNeU5`^`a7xM1P?wf1*Bw^UisrrvKj4Th5Zc`sXR&O{yce)|#xTk!@c2x?Ns>uH1z`_o> zQcn4=JTGC64~lHGO!~nqQ1Y$4_2`=Sl61T>fCkgbElHs;jq4F>EMG-idYF0{7&%_= zM}d}4<2W*P)swE(Ekp6Kw>B>WH+Pdynm^ZzW}nbhqOb?JjYFH%{>hRnSLzULm>Hg? ziptPIhWdS>D|N8UfHN&f`Li3O|1^*L>XEtv9@FEvDQFg;c+Hv9g+qzBT;Ft#S5olU z+NUMt75fB&&Uo{~u{;Ri$)O02{IN$K0hcL;qgNF4NfvDFUMQt_5w%_Tu;S1=C-y&t zoG&vEeha^H#TB%g=q?(KLPOFg)bMd+HdMcPsfkurU#E&mQU6RB!y0{Cu8=pb?lz^m@ zQvEI~Z+zs=8!!mnyck(7GU zUrw4J0T3~`(~A3{^#2FDxyD`Jx-`Z@AqAxML{ zpZf7VA4xMv_Q_R(`My#Bdg6AIBQIn%@@$1%s{*vL8XD`w+O|3VCd{jw^ji?j$@Uwj zyBWph`+JW02N1$5v;qbInH>I(nm?+iD=;Wh1}HTE;>3ZYU1HBdGz+^kaq6-GyvGHA z@^rfopTU5$4qWHgZ-227K`Tj=$CaR^sr6zjX=F_v*~E*IVHCqj1C{op8aWg@_JAtQ zCtcBxmYnXQN|K$?4M(f|!r-gdW9%yp2+Z=Q0ngc)&XqS)d##=v+xWmw4`-dZHMiAXomv z&Vdkr0s=_)Md6(CNRFCDh#o@K{0TOSp5<(J=(X9iW!SGXw?$S6u9gJS{RN{jV2JJ9rZx{Ei@= zUYZ0&w%FST8)L}@NcsTYKo776=*97$o2>9d5lHz_pEAJmx}KWsmsEznW%WmLD1?cB zt=Fq?BnL=c#mBEXuabwmAObK4ki2Hr;n@kVy|<>JzvO%0e?C*(9Pt6EjKDQ!aA1dk zj8NR7g+O}XRQt%Bi`yf!^nUIU(N869+(+0$QJIPr^qS=hR(}BGRbKLMw~$3oi%KQ# zw0=0t-I)K>2%={du6W)5$pwgHlhs$eH~*lnx2Vzb|3w#8vm!O=X!EQb$hq9&gdrz? zubTj5`yQ%mcdB=BwOG|oi}|Z!VE5|jx0K)%+#!1OB-*DI1fu0pkn-`qI{_%FOE3UV z;^>_{3~6K=TCi4QLhO2gvM8w&X4Po~pBqs~ZDCOHyys zq_GbJ;wM5s9OC@G6$^AsxSbbx=khx86wu1SbIQ!vFIr_*OYrh#(cHy*jdgSFb-n;2 z1&D@6;ycOf01RMlTEFphH!0La7Ym5KT)hu~3w-6T z5N*X|tssfFk){&F$}Scn(8{gwB*F^$UOa0v#QG(D%@2qjs2P+m1i3fu4H~qrzNibB zPLzts2Ha18%&TpjXb(%QfIAj+%94U_?uIeE%XBIxVu;A2iE^E|_oP4VJR}vWGf^|{ z{54g!i}dQPXk_~O zDl$;~AL>R3?r{@jfUeYd5P*hSL<94-oV6mkfILDNN%THkNY&tS>r%lXu^F}Cm$ zEZy*S>5=1W?pB)qZG3ouE_tQ!In8WJodWF1x_pOmiTvB48-G)GV@kCY9?*>aU|yQ1 z_urA#A0y=ViMlW`$IlQhrUwAz04E`_ed_#hn)_h$27c*~XG#%ZU91=8UkKuhrzWQ` zj_54Zd=nm4x_&dlAsql2n?Y!-Wtwzz8Gg{HVVZ{k26;~6JMhkb@pM9GeShnm|2>;% zpy4;9z4A|cZLB5Q$H5UlURB8#DHAiFdOY--@Nf3LI|Fi#uJYS!ws_eegRjeR zYfhJk@ae)4^4NLfo!O|}@Azpr+0+z1qr<&gSL(z9ZRh2cQCXdVJaj|K{%{SIAFg>G z4-S63leUSUTJadgS7rqx0bXQO^f#e+uD~2QR#=X#N{H-EPQ_k(^$+H`qU(ODy{`Jl z^1=-m-U1|a6~G^xh=LMoca@d3`NJcBY(VX{kE0@}AMs!YC24Yz7Knfi_clYz7B1<| zg!k|NgqJj_l*}u6Ob#C+*H)_5`j3ANQHtySeb(DgoY>GZk0$a`zCMAU?II3~#F*&l z#9f>zV8Jv}Fm!0VD6#1N`Ews7dxEow^l@A`K3N&FA=>caaIPgO<9b1!*qXMPbJK=M zMHQ42$I!d7aN!2hNJ zpg#2{4b7n2!u}QbJjMB=SUTox47GOx0#25KuCfMal&mYYtZOdt9MFghOEi{y6 zlW7d0F}pI_td#%QmryXXs&M=+v!y!<6*ZdHzUL%82} zzmj>8CTggRX4u(cn!iL{zr;dfp^?U|Y-o0G)R2`&(dN*^cu)NtxoGFV!<(c-rYmo2 z7gFt~Rwu!74i0yt9^SKI`)ZrjU=rXQb`&|j?0EVEI+kS44vZ%KrmF-eCfvQ(EyA=x z`>*XSy`T9w-kDKCD)C25bvW9P%npYJ2e7HOEEm$u37i{QDp-_-nw6TrQcOoMD7R6R zbddX722nQ6K-NUx|4}@Jtjp;@%-= zHIPFGhnW)F(^m!I1@Qaxx1%<#57-KKf~u?7chEC-|xzMkMdK02$Ohkj21 zk^u&?h;kf!O!U3$9pvo9Fo?UkSU~f@we!Rd?=?a6nn5ZnK-d+2a?TyU`vw$2or0!j zSB=qjY|~=qSWAVx(O-M)>Q-634%0t~c5dL5-n{TRx*d-iNSdGCH+SBWiP?2BalL2- z(n*ywD%A#Q=$W$zrrU^biAgC3%;IZFdJt!D`%wofdH{i4I$R147!`{cbbfenU((U; zO(Zn773^~$fjEQmd&yCDX#b*{f94pT!_XZ{Hv%e1NOub=DS`;n zDcvD4LnugtB1kHrba#VN(%mK9-8E;;eLv6toDb*2xvuw|5AWf+l+BvGXRW<{xqexG z(j9f+OEJ%Yt9~%?iiVL>I;j{!kWZivUq|h3-7Uj?Q9CHwn`vx1lEFrT0pC%-DkttQ zcr47H*?~QfVS2-cP6BB{j88zIps!CyO-)TqOB)WV-O<&#?|^7#7=%$+m=aWd0j-NQ zvq0&68Ib9TICVgTd7bRe(pdH-YnY-gAdag&R23>F)PojktrSP3M`P`z2MsmXg=0-+ z=jjot;qwNmT!`Zd2#KB5j(75g?H1UwHnj31I|Sz8TG|2KS5i_l7r(|#kf6GqHhjCY zC+Y^ex_t#j9sd0N`?uQjfVnSO#PmpaZ?3^<)@}Uz&!6pi6ikmB{Xni4#EzT%8=b>V z8RR7G{9m+6x@EuyKyqV5u^%(DdyQASVjw9Nf@m?42AK&OT3SE4F|xz=lFl0+B77>K zi}@0q(ytMio0wMLd~d0mj!ePqE&Te#ljTsf^{Om$F#F+GK1&dHC9xE?GT!cBWrdiu z9b;|$V-_1280cGi?f()|V-3SoC;#SO3#IN%gSS_$Y~RU`1a@u>tWTdm-y>p>qy^RA zu^=HG@5mwHd(-C#2V8YHB?8R*1iG9{;NJ)ZAxZwzNU-mranoN{$ak^xX;=o_MoUYpShoP=c1g?01=?>(0mhP>lOqFickwX;FYCb$sjEkG zWu;lg8(v+A`J5MXr8R-T$&LNLzx@s_&J>VX-~3j64=yOsDv%z6*Q~DTgqsU3f#D2@ z0~hDdh5_`TEFWau0P<00{1!Xfz^CE5F%on%`Ddcic^FqD`g#L&H?Kc!0eLeksYTG7-6*Et+vu#gg_hh z{0uwJPA<<*=p7BYn~Ik3{4XyouloYW0o0`d)JrLk%cH2IcoxH|!8S8qiQU7PI=m8X zEE;ceC)x*9zJmG;D1IK~GdA2p z=Xar}C;vPx1xEoc1p|l)!p?CRJw>JCJ9nAJ^ZS#s6F=387N9!O#D~ z#mr~*i;FX#S;{L+C(tSK8X-Wbv#;s6{#U+%H9!_;w!G(tkw(6st#GRzK&SUMcB@CKUO zue~F|-GKI&H@r4^9Xuu|q<;pXPfogAR(3TNLw@vy-ZYu}k06hZj$+c%_O>j}-{acQ zJY@3zjeNA# zb7KhFEn^=tK<}IYY>zHVT5`F1&YAL98+?r*PA1w*quZo%0d9H@>EjvU{gV&a7;N^4 zN=|h_>5rLdC;rz(!;SWs7Z5ykJ%4RP=(S>}W&*rig8e`D#}klPdN;%F;;G~EZzEOE zN|7BYACAk5Xk;3Hq45_#mD&o-4L|dp4JRx}Dxw*Pxp>aBOoUbe!MM(nXf%7K6n&yg z^se1HQmVYg5d8&Gh&tkhvvcXp#00jq2y)trAM@DqZy%HK5PR?==W?czJg3um9mln3 z9;D8=Qx+36L3nVSfGN%Bc3S0eQg5R@4EWgG9J7kvu%B(X4{~4x2(8WPl7}hG6&nMl zE+8PV07T*WvSWb{k}kvX_T`UPV+sH;%e`W_H|Y@bTe=EXK1c5$8a><vt9VzEab zrh$Z4AwfZt$x?IDZ?*_b3=HGJbOmS!R2_$sMg)!tp^bISUP zly1Mq;Q~}xGGhQ@$9z3Ll*Z~j1eb|wlHq5$@KFpZrS`L|(tQRDsdDf1A)|ArSTNx0EHJ<1|1EOO*Bf@!1N~#PsL?i>4;6nfc z7m+jG9TSB}r`c2ZRu;bgFZXT*5j=|^07ptl8b))~lp(!|OznXu6+v-8O^OdETL)u$ z4lMWYXBU)h@B_9dYM#HEfD#7|r*3@LvVdUHg}3pYW{ms#6>nwBijw|Ppa~+kkq|Tv zB)}%f=U;Nkp^sAWUP?HG$F?;^(q;%uAd>)-r4Z-6Jz{pXCL{k=iBu+G)sA$(%Lw9P6L?LZcw5MT0t0l|Leh2^Q<(Q-*j;V9 zlK|C!PEO_o1dgUo*o1j_0f(R%^v0*(odolE;z5Y>3CKF-2LY=;r-s zT=ms?5|knC*)0a3B(_tyB9M_1Uy*{dfJrBd`L2jg>H)9QYW*KRVEiJ#e=$CX!#=Qw zxaZ?st=))>)G%nk8(O7%FF6lk9Y_0t^v3-MtJB>V!RuUkQgEWw2KPe?|K`O&Q5ta4 zMEzv`zkT7?37pcY$$f^4W&aA0Lq6bi_H#eBPKxjbxxUymzh_V%biU;+9eWRg@SFt(!MRAH3!CfLyB}J^;(6GzEt8i1 z`{kOOF&Mq=O^l%shdT^~i!jIg0lGA4{|2JOFqBFaZ1lh4&WnQ2|ETLNpA$t}+$}Ho z*l+W%E_NMWUC9h4hA=L}$8r=p_Uc?axTQdg^JKJ@UJ#UU;NaI1o@B_g6wmOvl0!1; z-$EG|OeGo)f=R5XS~A!Dq9aH*Lca@{2e*EP@DnfI2>OHHmu(P8qvx-Y)${)-eWH*Z z4NM1vv%fp%;{QtAPPLB_eh0|1j8|g521Vyg$g;xOgF3Hb-+!R8%rrGWfqjwYW+h%r zBuwx|=)eh`fY$h^wo0{y^oW8NHN*JS(AfWcTR+&si-GTQl%lTpTPr9kI=TlvUDI^2 zN9eghv57Tl<+VQ`KiyEz2Mkob?QXN(7BG-L=By(v<#zu*7_Bp+Zq*>vK71NHUv9B+c=mjI!P zW}Cz?rE4ax!q}B3yz_M>Hr2iBX}zPg@;uUqRQDpzPv9vT?dabsf7}+iOx;NvN4QF( zSQiiwUmod!AV^FraBv}iq?>s)ORNM3)II?eoN@&vpgVCVExQ1Ue=**6p&4hef%UG{ z5$j4yW5EO%08MWnLnw>H$*bxlT-S*|;6Fu`W1v&@0&^Ce*8~$9cSZ-<9H`hu&c7{$ z;$#vKhqW;~Ocb}Q){Kn2q>N}s+@RqC0etUXCxr27?77&&5&W{t?J-22Mz$dl2^3Vw zH?^v;ZKU75=*$0dwZ0i-#kkP~k}&vmJ@CeLE*yS@XK_MJyt9WW7xc>#L1PxgPbc_Z z+q$uYWz+Xx_StA3+K=(#7U&iTFm-1sevUBu#W`Az;d!CNtr7eq#&0Ydw=g%rX!K1) zJ|!lGg1eH?_y;gvAlFFL6;r%mBlLi!g2{U=%J^N^)nC8SV+xHLgfSOWKyEEldMl_? z8}YvQUIWxMJw{;H!|UJFkS}AnBrSO)+DQMyZaH6pdO*d-H}C3C#->4?phGtoAFhEz zskcM-q+=1)@05EeBg&H~E^D7=l9ilkelh=+O?3DQ)AQtG^CmJUCx<7g7c`Ah^z&;} zn_lDw{A{z`*fM087I3YU24oT_X?1;mAPfMpi4?_x6z?*TL9#uXsHObs$NfI5x2i>^ z!kp-EAt#rgme)n>Lg(M&5~oX-x=jmOd0$>~YyY})>|zi?&!~gI}Rs)aH~!|Mf?tf;ordT!lZLy6q-iR2)*0szy_f$$+Qw!RWtn54s&+x6lw_r zo~{gl9)pDT1ed-fJz)`frN(D>AtpPJQWsSfH* zxSt~T>z;%leqoB=%F#&=Q2Cu;{KX|mEN~`z^JeBW_8k`I!4(bYgk})s+pUs80s^7< zB%d`Wc_cYGO+WWMvgfn#`HTS3XQ)yQ1*w)<52VrF!dm~;h?JC+P?}&ZbhBIVLYHwx zs>Lk!2<#isBx5I&xqtllaak(jw*<7PSRu8j?BcNt@iTBzu|&&3!e$@@X4}X}wC_kz z%?gy{YW)c;roo=QNg(~60+id>ACtJa?;s3np2FdN&JKBNlW%teSWz;2yFhHj(`9a% zsz=JrJsolvo}`RZI+@(x&x)3XWKU2oeZU00xUk4KY+_pQkcKw12ivS%?NP3bh7Abq z-9PpMvU5+@avQmbwg;-1;Zr?E4<=%G0!&ElQ4B<{`n@l?bZCU^TaPz}nN)vYUN0Ni z=IX5NS0!*QfCYFS!4|m#iE7%fH7(;E&Q|&&qS*WgkfSW$APAoX<($&Vp0L3pI%r&j zTQDgrJ)A*`KI!2Y)ap`&_`m}c*xuaQ(i7-cb-^VEsCTn*E@L0az3WMn+tYe1%uGBPQX$&$uGa)_fJVu%M|6n$EJLGt!>I!4Rp zU`WSV$mm1uyfM5(U5>kY6;=|uQwsCXevrr8HI&m2%M;z@D8W=k07GfZJ!P(Ygf)oo zS2w2pWowh(7LTiZznV3sRg^yF^WIy#+Fq;TZkl(oa~RhZFa)F|d8LH`w*Y(LF%l=j<$ zy-+Rt#C(E4mK}UIHj|k!)7T_&U_%=m@&$uId$SDVpW&eBJCZB8twj90#@NLWHz|k_DAHGn#bmL`2SKeHo9W*BoZMXJ-c$)1 z@6&B41cc3Ffsmj|^XuTdm-zqrHY&7`3h71tbMDb&5j^sLpOZs?Zfpwq^7gN`z@5BU zjH)SC%=ka*N&k7@Sk=}Mj64u^?`3xDGDX|GD0E<{f11A5oe=Ek#rp5+GckEpesd)1 zf?avPI)Pj_WZ#cyT+-pO;C#aszw?L?v?vcvzdteQjSugpjyU9wcmeXHvR*DUo;j5I zsQ1lt3oDYW8S3lX!O0TVwz{G|X}Jx=qE9s6%Az)A|KTB7O}nF+g71awgM?q>t+H44bH$h!Tw`jX0sR?r^s zmE?~2ht)xA_uDT5)MvGrka0@LSP}LEF(jH;Amlp{L=_#{e#9-Z`>UhQWAf4{>9KdJ zNjY5WMC#lTyep|tZbmA_`6}V{8Eid#+KK2VYgVAlu(Pfde?$}YyO`{^TCdVlV)tH0 ztu;vd-PF$K<#DV2xsDa?Km=Xsmj@-M>{JRsyox%CL{kl^@47RH=}Nb*xfc3TJYsUM z`V}r|Q)r^q9sI@={hoo%XDiWmEOTHvMZ^Bs!l%U|RP#$xP4(RP*}ZphS@ zJd9JXydIprc-3FQw|pjV+i_*6$|A7~pS*BD&~$iv^SbmreH+ymeY~qvrwv803);JG z3_}C_(bdPr&@wv0TgqhuAm0tg#bk%$q=JX%k9*3xGM|1bKGvHL&t{NpSeFS=$||ga zWOQWTt!ufigPzM3W;w1Hv&9U(DsmA}Ls&~epfr_Gqi(faQcVbRyOxjZvhVfnr`}H8 zdXT#4yZNRZnUALa4mwV$2P6Le71_|cE}{;Dtb6;Cp=hWtfoHzbUT1^W2fItc@YS}x zZ}BrtLp)Y8wO)*slj zub|3#5YkzzckAIs((K1cHwN@)rKs5XUq?|oLpwj}Mm@HU6lu_nRoRj+P^3yBxIf&p zXHGWEc$}O2aNKuqK4>0ZN(F4ug^lAvOjjc{5Jb^UdDqy2+%i@nZ?52oboSnf3MeS% zd;sKCug|GfbT(U(x<@ZgS*9?HtLJoEZJfU>RTk zoNxkR^1D`hLT^)oP>Lk7)mXHC5dl3SYj)^Zlk-<^`Lnm5MV$9P}|9fqyGn*+v!1Z_Jm6le` z6kOZ?G)-#(?!a9oa2|bh)KnEOw=CC3leNH#v-FB$>?>x|OP7`4)gUFJX|b_FE%`DY zM*7h7`GQNHV~_G@6_zDjQ!dKhI8-TEui?Xd{SS+757eGj+Z~oz>vouojFlN3hBO<> zd>hNtTnp*sHZ}E1P*L*ozRg`vnibBSeb3U zQ(TY4iMQBx1;9@tpXiQkXvz>!r+p7jLe*3}#d_Q7l|U8J+CW+>PJR#Roz&Z<_^Z=vVWjTf>yas@lkcqK z->e8zu3mcfUDq%tCQGC`S9s}I`%zqN+8BwN=6aFp-wQfov@RJ5-q2~*N9+G8^-3J@ z2ocw8=;)}{lt=Y*NO)V{PeJ{icqNY1T?)uAVdY%YM+Q%vdkag%7l%GV2hk0+1y$l3 zI~DiMZPo*b%Z4fJ;cz8_g#~@u0D)-4dMzVCNH`yNO!9!vfLI#Nq660TPJ+nKUdKmx z!82dAJmqjiubI<6ioB^ux@At@FxbAwcHhuIVx{Pid>*^D!v)me{9TT~n&ST3q-R-7 z1oC#i(I*N#tnG%_%j8Nd?RM5xHEK*A)1eh78MT+W(qYk;*Tnt}o~c1~{qkNqyqL=$ zBWU!Qefb>h$jE&jK?z7pQmUw3s zZ@8?!Bcy>$7rawhgQM^skZO}aW`)i{-xp4+JuYC-oy6GYRzD)mC%Ic$T!#6^N)WwW zcpdiW&);XIdqR82<62~!h}!QgU8*iqrXaaSpA+oQaVm1JC;2%IA0;1>B=XglZDhJ% z^ZQV{7#z!lgl4adV+sHLSnWV+PGXBeLxL?VFFi&@y6|zq6wqLzyGls8ELxIuyg&?v z03*(-z}K~=g`=|oRUb~msyrs)Ia%5y{0?sfo_zxB?A)lTSm`Qs*I@Txlefb=R%@IE zi+{%;A=a-4s^sNWQ|f(YKXZ1gGR1g2rbeT29G7!GrIxo}k)}PlcpV=f&mmj1&Y?MY z`IZI3Xmdb~x^<$#TPTn?mexPm8VDe>$UkGrNk)9G#oA&MoZI80tyEDFb!-Ni4;z#s z&rS(1Ne?~BH@G(s`?uyd2*TkcCQ1B&mwv!u-)TH^dAO2iXdDs z@|*gxOX(=R_0FYyOM34!`xu7e?-ZhgQVPPzcT(9Eb*du>p#=`zN%W!Z zX}@+kg4fE|E>f{zE`X)@H`g-?ud@H?Vs8P$HCBXeBAv}!@hga>|^*%Hfh_d9F3H{pm?-~h;qi~z--Fq!Tdj|A`fM<-@3;5G6o zllfSN1b(AqNDyJQxY;!4`peT5xNcGaB}0#ja5$x5;ZxfkJ}H==6i|I`=qEBYi(ZuH zv`w8wlgD$k+!*BgYg8Kd5s6M`0hHQ*9>6ZxgAzPkV6Ym{MD^?TSL*J80`K&^M5B@i zrz8Hp5W6cuX8|L@`LpH=eD`jp$}bXB%U6#k9FQD|WuKFW+pY|wRnMB5bwH5K99H(E z8+m1eBdNLhFpANG63{rG*i?Q2`;LaTAi=bO@W(`bOXJ;oqS(UsLXyF*0#{HU#mHul z<<4(c34cSn`wb8=$2NEVD}ekA<0K)Rzqiv z;Y~16_PKdp&jRE@>cGt>0<-}AYImcnzzU7CS7(#P!h#}CdNl$G1~-`kBF$ zUVEv5#&C)P;-cF#u|LZ!Tn0CL9_3^4j`Cd`Ob3i&x{Ft}TcfKt(QKY@u`zu(<2Emj zv7_v75r!D+=Hn{{yv#VtMVUs%v+OZ+?lT)96C1Mn&sc*DUMY6c-r+fMBx3!{nO*d|C z6HR5JW>S0sL?Ya^HcV&PT%BZ^%Ux&LRQ}n?AC%^o9*kG^i`S@iNAafpVNSLokq&tMe9|$T0>GT+sG1uDVG-dSvFh!sZEyUP~;xn7#wJ zjS8LZM$sT${I*DNT6~jcg@e&Rjy?Tt^BKUK_q3ln1sJFOEH%^YlRPIkw~4F-hNt{K zm5mTRHGoZhj%QKD6CLvx$CiH$8RM46q#Tz-jNSYKnCueX(}?Mb#G=|gYYJc6rudvH zeb&9@(BB3`s3<$7x*nvf>*rg2=CUI^^_w|s%|phmZho%@2;$F=A57CdBk@O2h_gZI zto_a$g*h{KxD}g8yU-xoi=(Os>jzjIA*DyKI0?2iAshu)q37-h@189L=bLICGoQ9! zy>&cWmZLf+?k1WktiN-s#CTDER(nw(7MhQNg@Ny!@h4+{FW2~~f^`59>BRhJ>S7Bk zcz~loV*8H26rW9V>l)_Sn^{{Hgp11l6g9?+f-0&tTI(y-0-E+22OruOFs^{8nj^^p zx=(K?@JD~*u~}ju(IT6!7w@Kx>TWJHLX>MTTMyc&p0qSwvRS3sF$7Vc^Nn@sx)5aV z-!j~uHAQN8Sv`2rk@_h&0|^vgPzd|SXy>a}uik!wZi~DQ{SxbJ^s*cSy2K*ZBz;A8 zM>PTQ3x^DIwu4jLvgw=AODdj+L}|-@`VxxS{qzU4`Gti;lkK+hm$GW&XS&b24xa9g zk3MG5`ib$ZmHG_<{g2rspR>n|?c~J%Gquqbo&=?8DPieF%5B#hpZ2?1hi&bkHGlgF zJdq2=<$hDy5m4i9tP@2zZdkQMTMz_xgbYPQ9XIs|IrL&h`zbM0T6hZ8} zKEZv+J-sa|oWCJm0^gqGbDq`ApHm9JlSrK#o&8!REmqjyc!g0Em0*r|5+r#gm=T=!6*^5NQ1As3vD71fufZr+&zdaj(86Jkcib98s!s#POE%*8cx{3x#^+P< zAm^iMb;WCD560fyGF8@>QSx=T%F%x6nV@+Mx76f2WLH!0)?^`9UYAqzP8z$h2SMkZ zeca7`EU#O9+2Rw@x!0iT9Q5vjCoK|<*x-;Y{muPTud)qWkU{#sWya%Ho=^-I)VqA0|y@7Po9omUH-n9tWecU-Y6mm=1s zw-7URejeha9H1$%0C5eBEO4y%LMrxkI5r{8JG@sD>}}tzDCgH)%Rx3P9`t$it}vJk zb68>q5TQp>Q6#=WyCmow`KcZG#Ib8t`O`5pc^%#H4#9m)2xr1TR)siJW*V=jdM~2$ zZPz$L5aJs!rJ~ilG$@_=G?(m5lyN?#njVPHc3?)6yXt?K-}R~oWlMvI zy;pfq3YC3UK7@wX&&F_x)TXx=fJDYu+H%-D89nJ& zWvnT&Cg&f-tp$b{*SI*9-x%}O9r+~w(mr50>f7u2J{tiU9N#Ha9=47>&*c&Dz=SLe z=rsv(a67S-XRY=%gHd(RGdQxb^LzJR2_Veo%0}ke)@XQ}b{= zV3!vLNBB!uBEJ}{8lvK{J)wO@aOSs6Buj4`2)wzCIy-%~hFx&Fg*s8BZ>f|fJ`t2S z%4Z&m7l4imUQ+aHXeJX+-a^!eQ@^{_VZVa;fql<@+aLXcr{lI(O1`S;+VTroZd_Y- zeX(zEN;VV=|7K2cg=z9}{NEdfPQ}DIB=e)$<1Thl)Umu|Ye9lbx?$IYuD;_0{9U1Y zw&2>U$ihk;-&pdcDXW2?j&N?Nc759KI*mcOxiIjoy0zKScPohM5+rRLmQTl^G3Bv+ zqvW)Up_o*)Ad*)zV|6Vf=1A(Oh1YXrb#x!lANBF>LgXDsljv<5GN0+ee~0(92I@qa zZLw-qZ>mJi9^QL|E!YHW{^CJyx+`+!*iscR%o|Ga7X^YDms8_zv9KRYpBz3=+}K4_ zs2Rst`_C+e$y%sABiG0ia#0q#rYlG!TQno{nQi{u9AG$GE6x_ib&f4ejx5Qh_7J~a z2@zNTzs#>Y(yeECKZ<@YU7A2FE_f-Fz&me0l#{klhKv#@Yv_5Q3BQIBLI^S}Hfc?c z0*L33k2hSAHp%Pwk=(+AIU>mR*>c7Od3JK;z87@He6>)FAwEn7l9TVE%gjwbNt8Gy z+BieBO#Lufl7D^?3ad42TXfYU@d=6RHP!#9pPy{+PRv{sw7bW%_GXDtT9@c*U_vWu z{!wmwSJP*)%Jno#;-*9HmGjwjYkv39jFaO2UE65mNUL{gB0p(v8YCu;yS@T_(7w}8 zpsug&=c_(>xI@$_ruEvMo5G4y|-bQqN(w4z0eQpsng0PJ58EEvVs>+EpSvXH!y=;BV`;Z7QXY5`nh-$OyA*N#Cgsl^vkdU1acl$-$OQ&WFasm`o*mv1L7xunkXSH{df^ z$?Nhb-g)|^N8E-{2x|0~O;uCx$x;H{<3f`Va&)SO?yUm887)II+iN-=D44n5$=w7ynOfhc5Y#$+(LN$;zzSWRj$I!ZbWHWdA~wcZ8U?Z zn9Hw_qc8mrCLef08Cfp5WO8$J-vGNeuB2uYM`(bA_vyW);GjSK{lV$?9cuzsnq}5o z#Us%=W%L~gEh0DCXRe{!wnKYBI%DJ$h-SDPVL>{%H}4q)#U4=>I_xRTpKh(D#-H8g zgMAgD%M`5(y(HD;fv)4|^UTz+os;<{h+s}kn%Og~C-&nBBvIoOVh!AN_wHSLpK!IZ z{7~UZ6jg?sx0Qo+Yk4!CAdvJ)QHHy?qrkQ`>35vK3z4Z`yZ=YXI0X6nhGdo_${58l z|9G&SuT!Ev)}9kn@#%5>M$|(KH94R3v5fFU&7I4`$G}mZaB@0$#94jQ zqFdbo%P8yZ@_$w*R9&3@I*g=!7LA$q8k~(#K8&3m<5XF}!MV9eu!-MFOJBqb$@a+F z&tZ+|GA;#rj<Px>T zkkZn(o;%jfE7xpzd+^Ma8?|Hk&C59JPW{22=K1eM8w@=MU#dRZKl{U6R7Dat%w5z< z|2*tzen{Lv?{f{-LZAv+;gD?E3%7xKhBc>HC3hxsi1pvL22M;|OA>94B&CZ*QuVgf z^5gd@3g2w|7`2$WP_&Rvp&cMzB`x&Ehu*Egp&#gyXlj1hu@olRRCrCH-1n<8{>`5O)_CQQ4{rde8GB54fBPMpy5+i4zj8y!ZhZeNmGgfs? zzfnrFCqRR=Oj_a#YrqOue@NSWCGkqJkQJhwLjr?P?F>?0LI30I#+%k)piST5!%Syi za!vYM%pUvUu77~my*mg<3*&Mf*?5N43#P8_?z>_X%s#+7WF@g}x-Y{ivn9nP;yY-K zXmuYY!R~vubYS~xQUA^Z} z5jJdjtZuXX`->PPybDh_`gMZPjRxyj>8B1ZE8jnA$L~x0Gl?ciVB}UM>R-NCJRV2T z`m7(7j2$aYz}H65K|h`=DbEFKO@gwG-04Q<>~pgao6N|F)s-E(h! zov!hc>WduKC=iS#|_LsrtB|G^$ z|Ml3_&*WjRJS{QbK#-me3-v_U`Sdxq7x3g5>G}%t%t-6?p%&t?% z#ZGUYFHZ5fvnt6O_Q^4iBi0pDl|&{~lxkQGHiW&9Scfqm&ZNGjo&gOqLEu-?eoa64 z-cq1|0v$6N@|*k0z8XRr9;PEL{>ANhV^PU{y#~d{apq7e9h{KI?=PsA|-M|9IAN z=8{<8@F0tCB)Q*lCAFC4*Oip-9S=|5HVebWcK715faSZb0;(hig* zQBF1yxU-~VI$3I&p*m(+APT!UlKnIYnQyGF!kj6&PNTGUpU^fTlgHGCucT%UES6h7 zn)WIOW-@4Vnce^N62ffp-5EE_@-OpmqKbYSL#4BLv-P(Qzx#eRCL}|$PTFq&@ZV&S zqI85rfnPKg;u1jbi>td^VL7^2;QrPfdkNo5eEN~wrEA}WkxVpbC`@rh^y8}kt#1ju zb`}|go$uJV^mO>GZ*!ynHck{28W08*{-}P1!g*aIgSAUxNk5ji*=^+Gav~^sUld1BrH}_*&ChR|sX6%n~ znV_P}f1JwVJpb|H22Ei8_l^)d)L`bFLd+=V^s)My0kx5LcV5ZaZv3gWSZ10$mY*~2 zg+F9GwE0PZ!xV(i&50x3^X|gu*1$S51{eP>yIJ-!AGL*8^B;Pt&t3dqL8!`5M!7c> zu2?)nD&pbP1B_jZdyuJyl1J_Q)~b$BwhNc^d!GyxesCDf`jb8>_bfh{JH`+m z?8~tU{J~VZ36gkU@?_i?(f<@?PiSmtkgBkJHASt94^YGqDfj7;M6RjD_`|q^A@J$U zlKtR?tG$`C0~52mwG%gv3;HNVXNp*|1bu~Ur5FsJp)@A^t&9=nj0Uf2@O$Z?hBlR zhBwLGBBw+dZ>G)_~M7 z`;@?{)LaZ=JqS8_)Kj)|jN`LU$zQ&ny-pAE=K6CN>u?W%F+_O?8uCWWVI_=*Uhx;F zWhZ{epzRu;{>LoZUQQP$-zslYkDsCsC7$`^Tuz2c%ZwcA#rcWrxFNd>u%Bd!#nOdO z|Nar9B*|56thz95ZwptadI_Htr9ezV5FUQ7Z9;vQwRzZKkyf2hoaTi<;N3QhrH47! zE4uZyJ|E1#{R4o{95uggANI)ZRiNUAJ)R%(x}o(-xqHnuUGUUz$2rZHBN-zm{^dFz zy~AW{ST*J^w~rq`Gia<@gd;`fU~e3M(^hvVGE6htF47m#yVSG4c9S?17~OrpvB4go zb=LH_V9KptQN@su6Vt_dWrr@#TIKp6bvdwnhiFU|oni1y3+-x*jU`7edHnqSXyHo& zNyrIx^wFlPAAmz9*Ha8eljzKn_CfsMmtVDaF4MW!<^2Y;FqsC|?KRIZMogR5pZ7sU zH1fs}p@|JvgxT2`^$QoRiAz+B1#&B)0u)e$`nW?0dD$K2!1$ zpy%AXTyl!pcl66!j6;nSGdx(RKfvHv`Qw;9cBk7V3Q?)f@h))AN>dtW{BJA(-IQ6^ zz)5%uX z-d~|tX+i99w7wUqEMPJd)(x5Un4b-_s+57>tOAWPcH-~nh|_34?CJWX+A8{}U^Mgh zjoORA@Nj%{k6CE4q-ic5WLMNY;4sOBOTIgdyB1>P;G6N-do_oWl2U2Qh8IL0^48(! zD}9RgT)1JNk=wXc6NQjOuBq!}Afo>w>c>6|`)BK)H3_d-t#Mc|()9JGzr?%T#{FL%@&QzxDK zU2Z-8FqF4b=q{#js7#4AK{fmL5GQF>ECz({Klserj`qH8cZFOy4-;NTjoGwjGTDLu z!Wa$L-)WXe%u0L&5!hA*gP^=@n`D{;p4lyp_{55!PpY~Z`*EQr+x@mY?YHw_Z4W{2 zP2@b8s;L51=8KxcTL#H{bO_?Br|#~IWxS@9OtR@rm`lNU^{t*v9EEa#K3`Yb6LM8E zy&IyKS@>1z=E8|X7|!?Y4@aMvLYIW%I>j9E3VzQujysX;A5$(p~S@AMwuLgpenM_zuN2oJ54) zH7~B)MHFKE!tq2ZT4v88A2gA^W8TPGd^Q-ApzzROUVHVy9G9ephX!dFi9Nhn@F$m1 z_gF8l9f>T}MLjcyi7Mk^?8Bwl&V6~|=7?bG{l4CDBcn+V2qeocF>LYGA#a5(HDnFO z%1&ji@2K?7^ch~~$Ek%&JZ;kMU(Obsl8P^)JZn9_&eAEn7JPJr=hgkC-Qz{lernmg zk^&Q_hsC}w_a@QYhh{&50z9tBbd!}VdWj>6Ff!QQ4OJKli>BURJ1VY-6IggGSAdzE zDfASJ(ZqtS?3FAbs7_1oqdOP*Eb4HjtY9O6qzGnhE|S^xa6Q0^BPdCMlUf^{!NmMX z=amTsM^+MDP$$RtE3p?W*dowAWW!sgL>IkJ?|b@j7+w zb7%8wqLYSLegXGK zX?)07eOY(ujn!0%V)$@}{Y3tZ>!auXVfI?w2RhajZITqTo3egyOE+a&y}H*v;}WLP zoxz#=d>&R1C$y;xXMK-W1mYfaXrYTN`E`)a#?^h1aD9E-Z1kj4 zU}49=rS9v!t^@j$Wku=mZ^lZ`CFq$bMLyYtChLdUOFG= z*CT-nK>YZc$Bwx6ZU{tHIIaZ0{_`0xeH!*5|ECgB-}LFo*Dz!AECc*QAeir_NxpvxcDT2bSL(sZ^?KDD@|Lxr7z+)a;ZoFQhUu=+mY9>Tml+5q6F~`27vo zZ=35LM^OsYefNm!j7U%y#Im-(zx+2~4;zY_@ZZrO=s&-~Dg^(}!NC6y23ZOr_W;wI z)SJ%^+4D$wEc3vi;@MSWRinlqz(syBq)6&$U~;|!%TjGQgWK-ks43Z21CxNs+-tw{ z?SuxhEBhQ7;B~gGsUvHes(3NIcTAJY5h^WNHvFx2Za|` z(@z_alNe#dq-2Xs!=BmDy%`^Z!mDoY1c{@U;$kLvp@x4tMoQm8lHuy2I7tgQOdHKd z8HO(nC{K9n=kw)&tUIjX@8NAkVhro~CGKCPJz@-sPB0?ybp7B$0Ja-qz3;SipyfmV zgG9R=QSzT?&ekAW#GNADAH^8=Zg?^4>-{HKlc}-=^6wb23C;gJ@W0bwG?VO;Cm&FNBbna=3dD$p>2pgY9I z#C#8u67?-k$JZ$Y?-=5RqK@P~7}GsW`TaovsYmfB2~9p9xf!W;a5)0PT-_%ds@eThB!LCR5~3%JDDs)m>lRwu z9d`my2mt7$*zBOKkRXlLNy}pvf7any8{hxoEKRsZ!(LnC2j3K080Zd`2-ZKmVos&eVI5 zCYBj4CH$Gn-Bda=(OPqO7LWww4!cdWLUajg;jC%2Ek0)~p=U{Mp65i*|9KgyrrTG~ z`+V;^U54jy)%@t(E-z3LqC&~IhwTp~@rT2&UfGRJ`rL%wtu#m)@z9pKyZ?Dy4HL1M zOQoW^#!3egI|7}@^*spQfoc%_ju}~5SfKFsM1>6nL}yHtDS+tvTcO{Bx4#SV$mvTe*pw6kNP>_9eGj2*cuPmE+m{VlS~sr2hsN$6`7g00(MxYe z$zFaazX{f-;A~EmW{L|SqH=FxGV^pk8GU7Qc4C?4`=KEIo z@jNtO;q3y+W)-e}SJU%s$J?QyQO z@zDGUS*bES@3~K(pK^O2a&lco?}gcPvHieS)JAOAu;Mju9V<9^*+}Yq02+9HvSXR{ zEe+9JpbgtxZVK{nr8~~wA8I?_D8V{UWx+GP-!K*PCX;(K3dt?*;YY9n$rT^HUvw&* z!rJk=%0A_Jc~HV6S}Ab$16-@SlNCrr71a@lB|$Haz;e3WKz;=8HnzdZ+FFb+Jp`>e z37jp$rUH@EQha=5EQ*n>;Ozz{w1^BH@Fcgb&>_iG6XWN;pf##v-R${d827;Zd{kah zqwYr`Y@W>}7pqH%y6{g*FE6htOGAgSN&@MjOEeOn>RJ2z3nQw+ubz38D(g3^Wm!D- zGs5RLeyC9k3$8&7wV&ul)#`YXGxkD$N0XYh^&!``;+|1o;?29iJkZ8qN~ zC{5yh#V~_{wl?|Y)fF!f55j4w{rm2ES`27y__^{8=FQDb_7;*a-0K0YWFb6D!(yMtlW{}WU}#Tczr?%NYF1A>pmDeX@g+ye)2n9Q4U%@-HePWm=s+x|- zP>f11E+&>PzFx#>UOqg!@X^g{x6>RmU25@8Up2Q_B^@EE&sjme#UFA|2UBLfLl}Ej zP|$YbTYclMF9dOzMF?p&uOrVgdnCb|1~?o@p6nfNOaq{r0O_vL<;Y^1AXRK8Ig*<0 zs2Gq-Yi41QUQuz^+}s>8QmAc`uLv3?>+0!M+>j3PU^3|I>jQ}W>Q3no-sY$^0wlN* zK;(}tSzBAnm?e_XC=Hr3U}CC|7gbt?(+F{G-vTJf0eA?~*JHt8u>GqWN+Ek%AIUT> z&#>UJF>NzT%dLPY6itbHswsQrY$40IxVyhR;&V$*rFER3^MP37gq(`n*(cUq320_Vg9Y-zryRMhOFTc>>PEwOrv)ODK&la^`U0j>f> zS>N20wYRrdzCS8WBN2j%|$x!N~StJg4D4ogW%S>N6sA^*z(=xgW9Vwg}l zSyb^Y_BSW5_5vl4 zJg>v1prD}9(cCGMoJ=7S5++|=e{)*Z<(du~D44d<>)mK8|D~z^R^2olFeb0Kh99r$3+69+I>qQA)wqVWC!?SCOt_VbeU+LIdQy86VoL6}YB$~NIOsbYe1O?P!O0E}W%GUt^*abNw2Iukq~Lf1wjlTa z;O#8~qI|x-@e5Ewq(nNFPyuNHDPa*%QIJ$XS`Z{8q&uVq1QY@34k?ii0cq(5=@98= ziG|($&+7O4yMOod=6PQIU%>8OF>~h3IcGlS%*>gYR9q9;UwbUR^unEe^|Z&V?Vk0Z zi@`0~!b{TjzZA|FX&OVs2qhD|9mYt@y-s1SX8mT^M^@tW!VVOR+Y%pJ+6^5o`$zJ5|!5>0fYYoA5l zm3Zf>t4VL-$ltRh0Y5@kJ-`rDTFhWmeU}UDCjy{V_~p@h!JKAm{5u69@gFl`FCJ8b z-BMiK++jaXBky5oD3Ue{O1vd4Pzqp9>9M3UsJwW&d+y0$pZCRBe#7FBt>co(!sUC8 zes8m>ke#0`c|jPv=j$4= z)<3(^fUnWBqgKc;({aL=!uwO z`qEpbU03g!6E`m}?055Pfie3MG4UQa;<4jnhxxKmPw*#Gf%wX&2|!N>O9{ZXH8xhp zx#nist-5-zt{AQ^DlI*~gMK({CDlionolo8s80+JoD*D$*y;Q6L#c~gfbNm?yLZd8$iDD9Fh$Q z=wE4RYJ$LqL>!qj{_4fI+$@&AY4{Do!I@$Z6w9Y?smmP4r~g^Er+4SLW#wSuEqC$2 z7Dp=fB~NL?9(wVk{4VU(s}bq$vuA#S z)+Ph2I@f=prr9xpbb%(S@11VhNSTOtnt}z5%g@J7$;|xu8ewrf28G>n)ecqf$6@GT zHjIkPCJ#ZZIG7>w!d5iDXV~z|Qri78zm3o10=KxjQ>9c1s^MJaz`e3*ksp_g*DPQ3 zw1iC=I*7oef;xOo)u;U{B9_UOF|oQfgCG5#1(f;8tj^eX^VZH4@%emeBlDcO{(n?* z1y8r~)oUgRM?%07YisLT@MjGMUa%2aRc|Kg{SUcnJ}u1^R%(>%%gMLFU|g7{dN}@W zU$i;lgavC5$ghy;g+!5KrJ~D}CWWT*=#Sul2RD&z2mRcD+_vxS_s>%qY#l@AwmMS> z+|RbEK2}!VzIyfQd^0hBczp2FZZMPUapp5HGsC2XX8R}ya(*o$+)Kgc=Ava2#QJEC zawtPDK7ai#E>uB0-L>4UrlUiDe2NV*wPN+nSVoD%%F(u5-$d>qEd4IA~S`+aTPid@vXyF5x?Ya<1qa=w@n8Y??e}CU`63`mhzfxAd zi46!EGlLu2dA>_P0;sS zyQiM6fRm4jF0ffJbQ>Dw+yi**wXFZ-F>dOi+1 z*xO%KtK%1DW3BA|{s1IbYu5kp%U&B~+L)McQF#75ovR>2GXKvU=!O6d<#HM_&|GoTsNIC+$X`YSpyzC^idHW2#>LT&!LHT%ZTUMr^14pmonoY~d1=1&0xXoa%wGq!)_*I^7qc>W$*MS4@tzz$L$)V8(NHnPanD%BT@lS68>Z zca?9+w%yvVfAZ+XOS88zV@7U-aVsw!rWwBZhYpd8Q_|2wyljeZ}uFX?Q((D{{|ArqPGyR#ijv*pW&l z3A2qF{dl3qWX#C?16!Sey=sPAg#Q)VG53}bb$UF zxTSIJE_&MKY!U-gp9w<|HmS|8@>W;v8cZETT@q6x1uvZp4(j@Lyu&@A*#0(-{;Jh~ z#_4;j(6xoQu&+#tEZ>)I+2|2Xq0`1#O@Lgr)i|GGZ6|GVKlm-aX!OTP|FaVr{h=zG z(s_bef#fXgV9-&;kpqZqqk_$maPj`!=}NHPP!`kUcaAYTkT+&DC*{Gp_qFVgA&A3d2Idl zpZ2Uvu>2dvXqx5|&!6|iwdC%oSxE_Fl60Q07&pMv0V7 z(2rREH5`T7d3&5Lyze_1XB4c??6rp3xY5)^N{DhmNR)Q9(V24xx4eemi*7$+iuUjN zE;GxQ##-y<-D&NlF3%Uf6PWs8CwqAtc$B$vmMBF<#l6E}m5rmaTV!TiapB(8_T);R zZnZh06fC+-ZF|_UHcg$f()XGS%YdB(Ln{uO_)N4ntT=1vG)LV43ni{F0oZa&{$X~p z)-6rPkH*K?asS0h6TtpgMEB=yb022c|B2~J00SHPrv50<&iP<}zZ`z*Qb3Itb3jhQ zy-%(@r;U$WGH&%5o$NB3PwOA9FzL+Gt^mr9`UN~T*$fuRS>pwGrW}t;@KRPd_I}Xxl7o6_Ua580JpuUj{fi=Gi0<9lywEl z&LxzQEz6vv^eICuJ$1E4w}KkmfwJ#|f!!7a17J~1Y^-J24$0Bn=h3F*KK~C$f88}F>}^0xmseCQyqg-!u|Ab7QaKxb{9_{j-?ac} zXe+fC2?`?{K(Bp<$85oW;gZ+vsw7HN<~~j(lHnzkw872X!x^P@Uc>WM!^Hg1*oqou zwR#&iKx*zYnR=9qvcP_5rGw8p!EUr19~8~s0ETS9)W!G2{NSj|#Co-Nw^iWWLW(pO zC$srCh*03Ro}En%?<8dRy=IxbjG3;x$@0I81Epfptud@Lz9E$Qc72{u6EF>GxAL{Q z3F{7*`}f;cFI@ld7N;pz+E-T2e3E1fb_uWpue>oCx&LxiH=LfXUc)M78Td4y-Zp;8VrwB)zLeOTW zL31rEQD*m{27A4MM*;?N8mv-Dpm%DFI8hJMysepx?YQm%^v!Y~^2s@Ob04X{+z*}b zQMkauU96WM-m4iQxu{6Dy0O#3@i=0l&V~PIdnODNGB`e$OK0|~a%x0Ddu(T8XP8g; zQ>n@Hcj7@~RACR#W0lLkw+zTN*}8PiBbk=Qr18d5u(bh^`OgQud<*_UQ`YeH@}q1c zPgW?cqUae7QOfx^ghZaHK2gPm%r|xyvg4`}CSl5B@Uf+iiC3cU5GTN2;NiPcfVkM< zel9k)G2TE!6*IrmFJ)l?Z_>4?eQaTEHP(Qwv`^OvaXO41*uM+v#r;P@gq$J<(B+Mv zj$l`KSs=SDk@1Y8mf%X#)T611SEwIhTjK@}Ma#&=Hy`-rxe3lb1~;HIZb5EaqoOh6243u0EMdfoUyw;K zT*4lySJf<9sRwdbX<})~!r~1wkXorVnz>k|Dd^X;O7OmBfUR__(Q%Kh-07q|!FP1! zeBgcJTpn58<8*5#X}wz4=hKZg`E@4qZvuc{Qy zKu+2R44!tVMy;kE;+YUnc74nam4r1kdCE~BcSc6~SA-gU|EL5k4HcY$63W=gcnOYF zzJ#{JM`{_oRXVGAwnoJzh4b$NMs~08%_&G8j^E!h!kp1{Ch{-;kpCYh0SkbovQ4@iGf?U?jT7SI#Jn3s!!MAzRoV;hQs+I?=BJ2Q1m?pqdbZb!3QDMq<@k{Pk1Sy1YQ2CJG~ARsOC$r#3hOtU zgl}88*4371q@4e}I(_slvh)nuzo-7X^g1ugEw(HAmojSU;K0S5hfve#%Q>?G>9mxx!bU*e+kM4X{8&Rz@TZb0 zMIZ)$48O`O`XR6UM5$-ZE$^w@Q@G?5UV(Kd@>eaFAIo^HYosDaa-|XZD&Q+z9F=AE z{WAlt!tdRHD0Y<^y266q$dZ)X{{Qm~_Hpk^8yr-=6Emns($C%SaZiQ*zW#4XsF6{X z8Yh_yR+=|^b<;fZ|3@W=!(crKH;*E2dir2=*ldFOqWZsYf+y$1Q7ZQvVPy^4asJ5s zYji7FsF|bspcpQC+1o#0?&F^SEcuxB3p7EdaWQd_#g`ln^0Omr;5|T$=O1y z?b8S2sgTUs%*2DoyXQH*j}#q<|5s^BhP$13@Ui9ZF0C}0hGLapy~SQ0Hw634za1sY zZSX>JQTc|fc7vPtl;y%z^ChV^gAF@#TCk%7L--8tQlPYU?SB{#+V7%_i6-zaWE4}4 zJYz=t6%?FtHuy}<)OtlA^=BTmtap22D(k394TbY;8@<(uDH4998oJ5lqh9iEdz=vP z$?%3Z69wkY=!e}4qfXDRxkx}dl3A2V;)U|!q%{n|UOY;zFc%+sQ%MTD)K0_3Ekv1{ zB7xU-z0LKYS5)xj5#!0b6UVi_(<*Uo`_pW`|HbiK{>o4kH0rjsu`@ojx-R{BxWB7M z-lngb95tQvn%oWiYE?<`?72SF-AhOC%pcje{xYCDgmMI3Ms1&U4V--4_3={LZGjsm7?_y(155Tt?@g-F~^>9F+jh;q2_h#{SW*%r>te!X5e>0wG z#OIeEEO;aa^Xo^49(FV)Tp7;;aEeOPaA0hqMUmgu>BpKE;MT{TIp-?2B;$3-f>d?= zFX4f>5dXLO(b1vlH!~hqI1u0s7{G@s!(>1B%zdk(=I!OJ{Qy(?U&4O09%dsEeHeIP zHL|v`Lwr_uEW}@18+m_3bX^sQYK%D!5sepJRiGr@-~-;F+a@30rxl##71xCRx5gZ; zlTlwK$q}TDwnVnv^;$X9FuVK*YGN_@2SD0CKUxw4>WpSyPw8YAJ!YZ+O$wZ=ufAS< zBjLrv>t0ah?}db?<2S$BfB;>JtG&r&Y~wHz`eXUmK9gmoqKH_pJ-cFwBPi{8hCH+D z{cM$4Y;QrGpTlp4_l2Ddps*vvae7e^iOY25ZR>6jY5ij?Fpi@tqGyy>$W*+14uTxV zIHE%(p=ekG0GFY|IsF&XqzSiN3F%>IU!*{#A`A*g<|?IF1{ab()2I*F#M<(|Rz?Ms z!C!^WS}gvz3`1#>@#17B}#xr&%B0{^ly+=_mdN~`#ZGTI8l z3ajb<69AlzffI>^ebN?|@`gUJ`<`6v+v5Hv%e6aCIDuS=otEIt>|_uzL+$TgFO6et z%XpEpS|j-MTB!23E27q#Ab4@aR5+Y`7Q%1J0s!jQgMav#iwZ75r6SS4Ni-#V28Wz= zQlnm!E=rUwO;#Xh@nrp@<8@`Q;Mlm(lwQ*LRi`(gsd`(ID(AS3$|9&>?Y*J&KESt; zC-1%YzW_kGfS4RUCxZ-1Xi|km*1akDVNJDv>Y|%83_Jp3kZ$DDqpHatuWy}%+?(Us zEHs5(qA$(aC~tVC{W|&Q>#bSjhqrYpSc05mwUquq^_wPTqrq6p(@Gl2K(WT)@CDWi zLrCEER0Lp^@YZ#fjbp^I1wZ{C>`N2fh6Ge5q~!VCY9KF^kEt49mTWI7xmdn?{!c$! zU>08bsO^wIQS>*THdf!ShVx&5$}2@S zEZ<-|1#9ANa^gS$6e`&U#UUaQCxU-yK}a$>KK60Yvqvujwdv@ zu3hpHvYHJqthUc)i}O*t8|sV(HzrSY2MH4Y)gf5JQC02H?J=BA<+a3ok*h=3#sr>h z`E01%-2QrVAT-8i0{T^99L|Eq_<$qe?0=sf~8MxhoKng0J$3CcTJ!9USP#S zx->HCFBMqeb!tc4ELHA6JY9XZ9|4UJ6uYv#wcg8#3-Jcntf2ptH8x4d?|QDL5kee3 z;;o_yr@boI2a?445%rlHvX!R~OqtsO`5`Eu`@ zR+kayWEZ{41P<;5DSirIzXsL3TFWkG7=Kb-Z(!RgH?`%wRA}``|Lk}ak5D?iZN93k zn9HeV=6i6O>&btE>#@Gp&vTQr;Th*wt}e%=ReYlZuOw!`NKVi1(LqfJi~)|2q2v8u zG;82%`Y?W4vd>qEa?Jcc@SZp*5%qBY^60au5b*(Y=?4mn7Gwvr{fy7C+@-WWNm3bI zuL@4XB2+Z2RW$jSyj8k4Shw5+DEb)uNOhX5-5d!3ow+p`X*;FcEkz#z0N8x_5C;I@ zcP7Gpf4A`F6%^n>07@@>&5ldp3avu#&(-c+H*G>63q^?#XVBSYy1uS={1-*e9Wd(2r^kC=h z1&$S`a?GxPb4vh8rCO^8W&f zhku~4VKu=LJT}*jP>F2NJBCu$_`hhPU0L-UJCqb*zW2Rkyl}+RF;mAW7a%>aBkRg_ zymj$zB%lR2Osz-zSQGkpK&m^$S=m$}WHqDEg4iq#o488U152l)n+j+=+Tg|AxWq^`% z&rtss44?i*r|_#^Q}#aycWWGQOenPOVykwGabaMo`)$(y04du>X;!eXeHw=_ZLGSp zw-+=osHj3<#N|Hb!{E+?QOxQAhSY-x5!}$gqF;h>9Hg-_Z_U8`SUt{%_Z))WCIw4j zlZy4z8yt}Rwv&YbuVrknNG^sUakJ3_!vsTTNEI5?_hP0@G)Ly#1D^30<&OEO5=g*S z8djW602kRe{U4$AdCna@AK5+UbQ8?e9tydDNFF6S&bZQNt97iF9Ge#%=d-acO+QHV zZuz=`*Goil13GV~P&y62H1f`_$xOq31*OfX^=Xye__I5Hg5YJ)U`awE8Jz@OHt9Uz zECHu=Oyn4yxuF83p_nbG-(iP4a5uv&1i->DujPIKO_w%m=0?^Cf7#q!JT6)BrUaLQ zvnW4^A(%#8kjTu2GGqh0^z`vAnQYE$1k+yNYInuX*M?Hf*;OSCxDx^}gU=BsB+r6G zOLqvsxkm5WduI(khF%l>J}5`xaQ@owL)qSzYcMg@k^;X2ro9CY6=~{y+3+m>lOG=< zYg)s0v0xi;P!_<$+?0mlaTp?bIBsoS`YjeT+RWKuQMcToDHel20-V9pq6et#*u1PU z_sk1S4AWb)Hp3hDgVfLZb&8IbvE^M==9J&s*5T19Cj?kh%r1@Dn#meKOu6qTve=6i zn8JJA(bQnbP!(t(fA;B<7-EEulaH%C(Y7H}yliFF(uvt^zN0J2C(-|UoZ)AO&w%v} zcIvI(_Eo73Xm9Xh6gF&_&@k|MM!#SUwm~%3L>TU(m2FI1_4H|Hf!@u3u zFflgj^@P~95!(twpT^kx*iQD|3oxERa2>XZXw}tG12SqMB$oVuf`#0M1FXDo&@IYs z!L2H!e?#RoW7y!FNa<{UeP>sXtfm?Dq=cu=<3zi6Am%hUwjhVCJnm{{Q47uDs-qL^ z9(b|z*S?|?T{`H-eOf$7%uc50=?4)2N*$5el!|hPZPJU{>0BGZSU*A13#A4asy4+Z zSpaw27aYgd=J!Pn1S2&ZLQK8x0?z=Tb`g1a5~UK5N6_^)j{0Akoe-{T%SFYpzo|E8 zb%|w)ynt^4pnP1;`Pufj3Udn^BDa%!LuuaYYk&NNKSlp>4J;TC7Z;A)z{`Bmq=?|y zzsfc&YQXWe!OlBE0<`maiQ>*n1JIU;JXo;@#a|(>dkwN71`4CPE?4sE6-CtZioVpF zz;VJfeiMp}{MlgKyobBuMapdCkbgh$Bqattr z@xc#{e2;#qe(@E}r{4WiiARixtjsQ6(K};7AfOXdBOU(1B_1JTITv!>>A%t1w*< z{W?46_oZ&yZ1n(5(10=X!QUELL9L)fxorzX?lt&Lb{Fnoj1VntT{}MP-g*waDS|=$GKFULly13L3sf8_uH@3g%6h2 zp|-|2uBrF9ras%7t&l{2)txh!YWGQBwheB0K-L*^y5yrF=GC_0T$iOFuoS_!f2&Tv zXN2g6N*y9ozhhG(9(B>^Mj ze~6bWob{<&;s?xl8o8J1hJ0N`k^T(E#vMfd>1QuYY1Vmz!EXk(sPN@%tq9A5GnhB_ z+FhPGAHNw)<0jy}9xWy?wTcNj9TL^bWEMUy>~Wb>kaQN)3O0n7E}%HB-A=<*|*rveT*oDR^P%*YC8I{&3pS zhpTVA?j4FTbo(gB4`WAg7jHkv&5kd{CIQhso~x7(srN z9cR2M=gQLvd??1OxGj8HBkK)OpuNerh4eTr5qgWq5@{O4DS6ekFovNy)#Ab5CRq&( z$5P}wcA0HN#6rVBm5(E|Xi?dLxVHF{?5CE3|c}X_At^)d^3*XqFgUij{f!SP* z&7yHt8H?-QO2ub*L0XN!UPs&pboxDM^Q6t+DNwRRWphPxIf?4bX`zC(8Uubf`N*`5 zqQIHoe74`b$)>-5;WW&0`uMfq*5*ObdVv}N=KiYH;JVcYb7%uAe(SsWv29=X?q=H;-x|FHP0=TF@w#khhm?D0 z>|R$mt*^VW8T2{01ZlOQlTf3{6+9I%V!)rd^IYdU3(PY6TtA_P8WN~SUVqAj*ujBD z^dv7LGl%v5V%7|Q%xsxS zKr@j5eVJjwX zkY4jP!-s}*`I_S2lU!LMYxB`67Qb~mgLMLh&$(#5wszhYoRJKV%N3Or)m8H^tTISn z;HJhicS4)tS7J@s9A{6p%H|$+3jFqEnQy>skW`|fsIe^nU}{JSxlehSJCOu>q#NQ8 zEdXTgVULNbRl$KvBUAXU_pG5&Q*z3F ztKwvJcfIoVju7YL>_*{bEzVxOFp@P}&TsN&tHe4vimORK2MZcn3Jmve1*WeuSjvpx zWT@d}-cGB?plJ>F^e5@s8jCbzBCP}aOpK{6%gn@6`Qpna2J0vm@uIhrep2ub_v({q z>l(7V>&ZTsLo!qkY=?J5x>qL-Vp;4?bFjzvn|lZ6ZdOpgDqaQ&c?2PCZ|5+L85xW? zrV*GV%Qo2*p#KV-0+0wFL_%Y28zunDNV=cEFBnrO?7%DW(pi3`=beE?>+9$~B^2>i zABzY(9tw$&1B(Qr5~BUUmG~So8MoBXV_*8gqlHxm(vVAask2kSHkW$-*^(%7S*Dj* z#{X^!sv<`vo=ix}iRaq-uBN=>4Q82ugs=x}|O>5P=QwZWfYu)xCw zEYOd){p^jcDaPS3mw$rYhHV!kd0C3DE`|J*HSQ+h4GAgMBpMT3mWd#fk^63V));oG z&{Y%UjY0+{+5Y%qS@S}>qTWTGI92f&DU|*_0i1^#Dh*A$*77=UPlp=J)MaWNZ%@=X zaM;|Lq4vd)5U>vt%oB=^gR`n+}#o!Y^anGgt3Jt724ZjTpDWxCp{r!t1F( z6Xmylmc>iD6l+PlBRw9JM^#X+RxBSpCFMQ7kt zC401cX1(U;J5H^{dFXyc#p~>liDCG9#oo^-bkMCQiYiq`vgzk{kM1x|RopL@jPomP z*=f@vt1mLwYK&cfU9?(s6O1WgUTPyNl=`VsECB)EzZjBqxR{ed)u)3LzHS99>hMR1 z4NT^4Em~tlMFxebo@6}cssAM{gNh$xT~<&w=K>nV>voDC60DGH4@`*AT_ zT)J_!>miw5%g=qv)tFH_kd%2}T=;QaK*x4>lZPuq+>!9zwYx^`2rEUv6rtP7(SSJ~ z7iULYTA0aY-@HI$PRa5?&qKan(Q+}YEQZRDap#$-Z(%U!!4`7lc`$usB78bzC6!49 zbzy|S*Mr)iIV~QHt|7@M zy5e?W4*Q;D`9rzkaz(M%Cj^BkFOt4WzK+ab1GU3Zx3{(Vaa?1u>=cNff3QY?Z}N9h zMDHMtN)Mv_vsEe@H$r6|$Hnfcns+lh+m9WQU8DjDt0v9ui|K*ozc&rRLZ{*Lc2ibLS~tZl-bsY|G+a=W3AoCUJi$pf>2fi zM}xbW8Bgls)1X5eR2KFRaOZ@@gPB?C@DczAi~gH#kLVF!zGfv^xj*A5m;Q?ducXKm zL;0{fZcj4@xeA2JrFh>(ti6wqV+$Y1mUp z**SS64hw=oe5!VOowdXwgGCz_&rv#o@){FEjFje^N zL%()Y_k+*(xyK1Id9}ZoNAm>vsKLMdujcRk7|9=gA=rOyNsk&ju73}D{GyakTWWMh z1IJ&``_T0YFO=nNXBzrq{|>@S?k}LsV50y^M=6>99|(@G^)CX~#==-~Qb3Z^_}h1m zJurlc9Kb$+X+EpXC8x(9{Flr7ElCSb(4=mh#rQjo1b3ZXM8fi0qLxz^(zi})5=bZvH02k`Q z5+Yln0BAnFO*#}CapN!GUrm=JkiU=y1cPdr6?fpj0cjfm+Fajvf7Kof)ND(oN?rTT zW}4d3=Y0>FR||SukScfKTv3DBKgNq${m2af>!-LT)=ZEQK&}cuS4c*+GD*=91LGN^ z<6|@CUWSPAu?k^_B6ZSZkF+CqI7Vkf~7i3V}YJu?ut)3r=}cz7(W3oZZ5KR2{aij;QP)_Jw5)<8ct=Jeh}x z-I3$=O(X#N_j@Zen04GuS4YY@01UrcPR*)A>r0>bvhZSBDqNinHB#}Q$r0|fY2RwpXw#Bh*5f^%Va_o6mFn`4F1^Lp2ZJW zD=w&Uz65*-*Iya{Iq#=yvXT&8x^H+^2l}Pu5TUwZwZXR?_6b4YTYiJ-PB~;W6qjnG z{qq&1Iw_k(OoN}+{u`X1h-2P4!RU)WY=9;2@ouS|fE>p4yyC*HushYXtYS|6X{^CD&T zViM6^vaGp$3zd?6+WeAxiB+}R?#I{Fy{u7zIXc94WW*W_8bw5xg8N}y(bG5%*>jF& z_-Wr)2^61PNYj6i;Sc#!gwi-y#vVdqeH{x_@AqYPRG8@5Ens1uCnZl z04BaCua7ePCAjHOYL$_VvF#Zf|7{x-^sLqXXK2NR3bK${O1p1q<2}%mcoruWUrh$z z>&Wh@Zvp=xIq1vI{N0fhsW774If2JmO!g6HzJ1tw??TR$4p_;JnrriHi|&%DQoHf3 z5@*_!z+66rqxQo`zvM;$`drgdbW+V;egvX>=7REEYIx?Gnp~+i3C!4A9_s zmu%0J0^&9$T~!6yc8nYHkywbX-Y1fM*|P9+W66;Z%|UdG0|~e)^cd@*84G~DQzaa0 z{J&^^h_YOS2I!dv>9+}NMOp40|EM!yj$XIwC4*kfAB7xZ>AtsHOw)vCqj3wo1vX^- zQ=@bW#`0W6X1q;=`?xc03tnp zXTER{k^l0|g~bZ7osG4|flzsv-LdTEbPeUVT9*gdCOE7pV}Ut@ao}eIDEzteCYE*r z`p2L6J^xt8H(-}q7g&&WKPnFrq2j&dc zQZ{X>sb;(hHO%sJam~W(O(fnApzk4AN8#_2grg}O@ zpV9}hyTi9>-3o3oKC~r#H}LwEl2+dq)1d5FpNVSfvDW{fdZClCZqX}VgTw4S!9S74 zw6QuG5mbn|dege|<%C9eCaq)l)7oRd$&c7B60#iOtN~jUu&2q}+ux$6r)LQ|Cd5m- z&AMWDWn}?9hhSfidH!f|^4G5ydJUd*ZEbCLQJB44aH!Bcv(kNT*WyE0=G@)uv1|k? zL0KiYpF&?QV(=l?tK1)jK?y#JD3xp;DC+(DH!z=bwI48Fb>-)t#dn zM6}!7+ixQrB$ppoD?Ri+(Pfg}_m4x;T{)&FNi_gLG6<`D`!are2-4b~@wZhZn?I^& zR`990omPny0YO<1dzJNVpZ5XXd}UxFjOC35R9$gIl(b$A(*BZiJeapzuj{gM8n_Ip zNFibv!-@8C=Sq+665?Hu5hQ6ohivd1Zy}b_5V*?gvs4C^?8t@^XS%cGT1>dDWtqGKcSi<9F!t!aK&t{f`usBJ>I6@T!!TczgTCN^H?g8(K=&SFI&&kmFqoYy?2099TCq7 zFCJe(=2xyCeK4!iS*iGu*7#goCNsTS=bOR5&f_C!y&z7GaeRtVGOjp?HBHz4K@;MPOEk?)PS6=?A1 zK~e?t*?Mv16h|^t1K0}$K_FFy2$TkvKR==$q)f}HuGZckrA&V*Jz}OXL!7xqghTHk z4fW5`6r~(h#1pgbYcNoxl|D#s`9Z<#zUT`20fNA6M`uru{L`l&Ga|cb26<{k-iC!` z6H(sigriR~)!~MB5F;A>O|Q?3{;h%VIH|HC%;L&O6Vx1k9{PwPL&S zJ>reeo{qI_00p_6r@Dp)PLs*1TA5j|CqBxOSIR4$Ysjh_?_`cZz96@+JFa0Ygpf41 zVS}PItO@mEz2oh7iW~CXrw1!izf&&UVzoR-F9r#~1MhBVpRtrLkH_lkqZNL8=ebMX zEWy~2L7F5jwV*M=Wu=O0_6U$QyInC^Ckg=YxjZk9Z^=)jrCukG{mxlf`u1# z7j39~B$7$W!1{FRpz-aj9GWZQv_@EWChTZzJX=rp$|&Xqm(?h!$KBDN8=4s?*O z1%CtQ^<_OdfT2x8;tZs)VS4IgyDzJ;`JJ2Sc99ArnG66IJ5tEIshq|zhMGs`+8hX^ zbbZ(v>Z!0Zdi#>K_&8(rQ#4@5et1O6B(C)?aW#o5@M=#M3a40-t-Wwvtk%<+&>w>b zA4L`N68yEe?wbV=&{GlHS-n#aV5HRrq+}+o&X@T$JKQm-<8M8IB@(oE>*L?ax0}Go2Tdp*K?y@h z9>~S+8P+*=_y%3|z2a+`8W3kzJethDI1$fhn$#_O@05r~yIcX^x7aK7eJkZjMPtd} zjIYYsRTw1QnL;o)l{uOYX6V4+aD~Qco>=%O#9ZsO4%l{g2=J5QP9sR6L=rXUgYlXn znwzZm=au_1PWLG|x-L1`vY}i`Hkzd;l)^3gq@~4I9voJ{&6!;4`BsZ=s1ES~`v*+N z5^$hh4+prh(F))oa#@VDbiKDPzW9oKeX0ON{ja?y|6Wtlq}6X^F4{3H#OZz-B6H`e zoY70Dq>a!d!(g;)u2eN`kY!=Mg3?`>0P9%&-#qT;e>`rO!QTo3^89xd@a&7|1l_A+ zQ&{(2`i5_!28MMTJZrKHVvn(!IeH-1ytcPT&`Y!z7>BbL{1aytxXlJ00p?CXnKP8$ zXlbZ<%YHg6lrG`3N}G@S$I9{atn&(}3&o^OuRXf}wuT^{{ zPpf4JB$~m^2e!w(Ltq z-Tg+9Tmm_Q5Wzk+QezNYcABJ}^7I>>vB2aTY@EgTga%=v@(1!}R1pNvel7JIsJqW^ zD;whFdKn}hxAThuF%aOzn<7*TjqnDrVG3ipX1h}mSpmJj0E7ZNg%p-N;-B1fXRD1S z8(5+iKD>X_CO%%==Z%99VJP1ncNxfqKPcWj<#nGF7{eLR?%JbZ$#tVORM z!POfL#nGChR;!Nrjr)_~&VQ#9uj%2Ee!qG1raJCSC?&@uU&)i?*G7zAzfOM`>F(}U z8!*Yf60o69$>;7yWD@oBs}z*BZhRfB?jTQ888M)hNJcSlI?D!D%?GXqP!urOn1*o9)b-;AVcl)x$R(;U_k= z6!N~fzMe5rSvY~b;HP88RjP+mRP2P13ydLeiq9-QN|f>R7F7RaG2{E+_TF6>_XV3| z(+dlg`ntN_46nsNou;N!ud`;E>29c)L(4~k$__8`0{cNgXbu5R&jFFZA;#@7ga_^aPOq^{;4kh%y`8^>+#c6!} zuP0q1rMZ+lJBAUd6$%~yi473m(SM)sc(vzSKk1^VGYXE7q!S? z?|FJR@}qX`%Zmv|V%uuPtRyP#<^6!f*T`IM#MiMta{{wJ{^w+OnV|+0RC~qJ= zp&-45SaP55>4UeEo*@Ql;O7fdQ&u1yAmPu+)F*v0Cv^4xfq3PDd04U;O~fBvit=@( zC8s#=PnOi8ru;lAMV`)9tY2fFE$p(bCmuyac;7HS^4qbrUpHp=LJ)e6jxbK>pUe_$v<1&5u(&Nx5&qMTZHy3`M zQ|h;#ApkyDH>`R)&>vD(Mk#x_3oNDjLJguqANHkn)ACV%NMim5b2n8_yq-3wG#Eh6 zKCrP?mT?>@Pf(8uCE0-!wZ;pY{95XW>~Mr&WKLhgjHddm2*+gN6xXZVgnsuWbK}Xl zKjMbA-C%O`DXlq_*`T)rJM7Do`4AmLQrutG4#97tgpbW87Rp|9TU2#d-E`g$ZP{=PO<5tH99YTz)>8bpGxufx=nO6UW*SP~|^k#<}jR@qRilheOrxjEIwginQEifDHe%dRmO)u#gQA6iZgF@j5#Kxtrb}7|z|K zp`!W$(${=#SvDqr5AC8kZr5Y3kqf=-i_t1E;B{IXx>%r9^6sZw?z#k62KixUi-l+z z?LimS1=21Y@-~C*?+`TVw1QJDT26^mazc?8X)U4lS;?7toEhYu;6+lqSsUa%VDW;g zc|;Ml%8bNXm@Rn2^%=q48~O*)GZmDK;~X1WF~S|YJGq=rRE=$sKl3U^Oli@mt50Ht z37}WX-UO*849dyycd5BfEtSi1QXswQ!n~uza$;pI1nqdv;T6waK0L9v0J+%wqs0DM zv*8yn?vQimWgjDvj8Y<*UtUX+xP!Uu8c6*$Ly+ zF7{I8@0ITBr>E8KO-!4x{JBUQYxl+UjnlVYYK0RdC>N^^#byQGnKE3^MRHZQrCw)w zHySG>96>i2B?FfA{m%NxRFw#Cc)p>-vu&R8@#Oy9NE;$mPLI0QSK>wB`hprt>yX@m zAksUhS;=i|)ZfoiCw9@4K8%viJp<=J57-}sMGMy2n3+773Y@%eAjP5srfPiCVqZVa zRWoGZb4OCXV`}~kp9!EVnF)}@pAC5GQ%eM{-I6!Fuwpvo94Rw1ex(j;@USB3*#9=F zqWRwH=_I5UgTQuGXi8Kjue0%Js=2hni~0jEGN|c;C=8k>y@Ms`N=VenKP+z`m$MD; z;-CC&)HJ1b9u>S^at`rWu4Z)Q1wwd5=~*ySil0j<#^BIg-I)nj6~{tosAM zi?rfZ4-p|x=3wr%>r9$>R>`3Mgb6EuIX`{qh z#+v_f!Z3cXRsUB$^P~xw>0w_Y9@Nx~6JeB!WYsoy$~O9a>qG~qo5py^8SvgKhe*>0 z43zKVFB4RgL=CSU*0tIQAknm|_78RMmqgtw!S+z;&XOl1t;iKh4wce#k~K$(?2PO{ z`^d%P!Hv6d9j%9cd@BBk+>bsX>tvThnaXkS@!qw*`MXj`Gb7obg5<`vgwP6cv0l&Q z-KrN`V7yR!pSm-Mw>a=qjY*ZaXzIC=!o`E!lI>n-+RPjb!CzBktC8RBj7Ag=IlW=J zVROfI^{XJFx=1suRvhn$p2S?J<_PW= z6Cec!;=wR;hg3KL6gjR%=6LrnXvkOUI*O}mGE5lqnc;7IilCR!Uypp7wFQ>@J`M81 zQ4R73dGxp}u!Ex;W>Cl+C9}G`SJtb$2Oti!Q^lp%D%e|2{o(Ri2yCu%LN#{Weh*vN zqUcORLgXO#)?LrNEipa~*IBIo|LXb@aHziU z|2wv!FqVplA#2H!rPWR-iB#6?C86v~7&EeGO^T?jq3mTVjGYo?Cp+238fGkGncunk z{-6KvdH&D;c^b{VbMMT#?>Xl^@8>=5`+4oS#YnwDZWN(}AHgjTFnnWO9`Txx@1nX~ zG_P3m*WWSMtUW%Ke>A6tPE@y#B*$WlX`pd?0t5}OZT3RLzBk<+y4ja30*;6}K?qXB zvu9JFlugq;`i8V~%Js4IZe4hcFCZm5E4rt=^}}YBDdy`B%RmGI$Kk&VJ@1Qw*BSNp z47HT!y#ccvV~;iLPx8&PG2c~o#6}P6^k@0t=N(!$e z0h=++mG>U@NyGvOQrhd^`!p)Ch#T?_8|4rOq80^bR0zm=L*851s`iY6x*3jB^S;ug zmLZmhd%${SQKhkIj(omSjiG1exsm~(nSGd`oHV_BtGe7!FKf>)+gtSRf6%<6m1nsZ_m(!i<5YY3` za9#DBizp!5GN)DsgQV&XDe03#1*@G-$lR)^n3$Te@$0TX6DwSw6M+eP$S02m(!L(n z0W33pFHLXQ!j9Ft=sw2+h*fU-avt&8`aiJ%gdA5#Ah#{YKm8S(8~pGKe&5>dT|2@a z`}XaU73U=2C`iC3dH0|Hw0D#`9b+wF9>KQ>o7kgFR`T%To)6TEeqmTIK_A=X7v_MO zURp`?-UEZNV*@rgpAZtjpG-h_b2}uGHUmw+Bv;OpN0K%%;G`-IkqUtiv>HZHa5IB` zfKs+DLeoVpFPv%>rXDP2vTjWdwZkvY%MXL38R_j787ksjIYHIi7-J0dl?+u8dvizv zO*b%NgJZc!b?&NTM57NhYdBwq;j@}CK8x?uyslsW2__WppzJSO{9`% zk@Ri7Pwd(?fhCx=@$~l3z`Uhxy@Y^fP=bP? zzB-zt^9`6STO)(3UEmY>R+u$|g^eK)iE4fs-!NdfUi^#U8*bQA*<*TsGK^8YDsRit(CnXxd-;VSvht2lDWU=Y}L~32I^(go0 z!Gi1O0QXYkeW~^Rona&m1XvEITD4z_7M|7w1~g!2srKYDl$mMCkwDyC z|Mla`moK6p-O~YeBveGB9T|Ts(Rb|$r0nB!32-T{{(RSD^vN@PIePT~FHEE|n^$@+ z9fB@|G-&DQTmkHv!0*clfvtgB;5xi%YMPtb{X?LSh_I~1Au7CA(+m8wrzD_)`T3N~ zUd+JeY6@ZEKH0T0R4xe^MFaZsf!+`i5y@cxnwmC&93i7PrT9+5W2g|ZT1vhxsvZ|Q zLf&T)o;nMG*vl+)u7NW_8Xg{UyhD}!D*{ss@il^r}lQPF};IxL6&CGZt%&X?k z5`Js#?X1*T7-9j17BnoZk~@}fdj1Fp2X~ev?_*@Hg@r{7N@=&_?*=lmn&NL*Cv7eC zL2IqZREdS!OoC87T7C2_G2S5SAw$XYIrOGAcNyUU#{V8*D{?iJ8Tu$T#?kM}1iLNG_)rlw_?Ki{PB*xb%aKQ1hLTg1sT3*k*E0Qn-;EL?kegY1H;RD)}?qczlL9Fa`-~8d?er%4Z4hMAh@?$?`u|& z!MJn2^fqLe5tu3wX}Xs~E4)H)bDxlD4^0A;bLMAx>cfabRmWFI%TYw4d&4{&VZlNL z!Jg;6c7&Al-}nBz3!$<|!45y_`$8X0xgNA~|E6Y*#^0o0?*waB6>_||JsANZHKJ&s z>u=1jauB_Eo5H zt>La)cE8tWWQ?77#ccD}(U!Mk{KkrVG^(=pM)s|bZ;-}kE)FfI7}h%YD9lkYN2&ox z4z#-Zj-jPpVE7Z>6~wn~3kAL6Kf(ZK=>DcO*eQssW_#@g4gfy@FrIwzms1(3WqjG> z;U>`YKOgsEh8+)#5b%nq11n1*`uKB2763h5JB1$nS-RDo<1#lTYy132b?s|7a3JqU%m_x#u9#ATR-w8MI204d}};r)$lv?JO1`}gm4?^c*a6_~1HrfjqtUcjLG zbX=L*BV1(GTpT;>&Zr*MTtifZepv#;%GK5NdiTG`jYfL#I{+-)G&T+goWr*TA8CRg z0nj)NlpD83{?+P2s=iI(GupH43VjCr9DvRhz7(|767H*OOTUT<>L1o@j@q}!52o0F zb6vpe1(?Lb!Ds@#R1oeBW+2dm?xp7kexuFJ zOQWQ4mm=hWu!FYluTD0t;V~^~%O3D;u7&1ie*qs~;wZaS0)B8x-6lr6B;gl_f5OB+ z{}&DP82{zsF-h|?xfZ5Z0AvOp_sO)eTtklTax{y|p4%^-gy0EQBde;CoP`>vF_#$W zX14!g)f**GcA%3s4k>7+ zPz=J|@y+&5MAV*8OYdcQ1VM9hzmBorqxtXa1o>=yIns;V*&s`_u+_CuX>A?cp!T@xrvx1o^5S>Z-IUwsXT`vS}ZyA04hdd|Dm#O(Zc?*M0_p zvsUbR#7;P527bis*ps6LUfc?u>ogTZ)}Z}HRo?GT*p?5O)%%52t*!B@SP=x@Bh@+I8Hs#k z`UbW{-b z2!DSe{3Z0*9Yez>Z`ccaAGY-%hpTxfTMW5m^n8>GxC5>XVZ*`e1LxDEr0$##7nvZd zWR}wHj+qa=N2WV|vYt)atv;$Ujdr}G(u1mFYbcy)do9rZ=Hjh)G7p$3{Ir(fcnxly z5gMOWK)s^CA4H=opIGjlqb6VE_*F%$o0xj9XvPS{uHOc*GVL91F9xZ z4t~K!yUQM_ygz2tQsq)T6JQTfxJLRZbD6`Hp_ciBmz!)PLN3r%v>QDnXxeq2JpSUAIEU;JTXsM_K zX!;&*c%HCH57>Ws^!Il*S2VzrHM!e~e3CSm*QFcQUM=|eX0n*gFmIw9DabWz*{I5L z8c(l2WSsAC+rRT1QXpwGG$5?33`8sGO|TyfsG?)BrcPKTAb>6q2uHHt=U5%|ytVe~lXy5=uB@`veJJ5p#0 zTi~zuTp4B6AFcFSp|1!HGa0)^Z7a*KqpIY&$jQq?zFwA1BFZ zy$vb`;e20##^#ZME3fm04>yTEmFAm_!mcc#CR+-2TpG6Dsk}cwAJ~zjM6+YB*j!zX zLO?LWoOa43mgfBUYa`}0#F<|x9xBlzhzo6z>^j`s|95f!tS&Vb%{ z7gx?0{JwAH>2jZ!ZkfS?KV|Q}DQQXhGD`T^EDmU>7-o!yLCtCm&*czX4;_#0KJ!b@ z0Ip5<(~G1JDJ4VBfI=Hkh+P$cAa29Ovg?!xr}F{;XhF3_s~G1Y9P6|Fm+>}pFZ;Un zFwaqzV;n3@cJ7>dV1Wz|+({dfBVO}m!R=6V7Cieq@|F!&8c!`-oUDG05-?nPo1Tcu z1>Cx$)qFsYo$2l0csgLE0cTi&V3=+Bi?(f?UknEWuhpU;Lw)89W^o_2Y!{9A$ z=f~Bz|1YZTwW!T~mEZF5{(^X~VR?-K8khEO*OC?c=JE&)KbyV=T^PP{mHKCbRJJI(j>j0jvy5|n zO3dL~+JbTNi+#H8i;uCDB!;W*J*%N}BlJT1(l3Di-6D2V^!wMIJDaEeiJgf#E4VK&-{RaHrt*Zb_!9y)mcx3V{jYj4dfKkDx;W^F#skZ!` zXiy+t;S*I1nn$G=V7LBGuo9^0uUcf@T+pK?9T;Q*2FxHf5=51EQfZ=ESe@&vQyre$=~ zCF+#lXM))qe?+ELM(E+^b7p7=G0@ma`jK<{BK03+h`cIL?NpjTpV<%}SGdet}(gI;!i==F>1& zqYsirx%-{zXa<0q^pU>+0;7daG+1S3Wu=4QGOZh)h14S*9XL?xHlwV};A(b)<^@Jh zDG2ao_w=sB57XA(G1~*%18GiUcu*xqO`Qy*$!MO-9U!$%I>C`QUG#M z&qGx(jc2F$Kf}m{K2JI_0G({Yv;#)dqs3(gN}Sa8@%Ta9d@mN@Zr%{Re5Vq`-l^%L zg#G5Dl{b9}Ir>1em0P2^7SJCM9!N=$2C04R8Z(_+-dU6lN$r<_-!=Rx`fV~Od#f#= z5gCi!Td>ePv8(%9`U=-s>mYgGjm6mYL)nY=-W2wo{hj&=XZQY5r)rzxXsOh+vJ9!z z7=?{Q`TMQ$VaowhsoUGz{58lEUTv|g6FW6J$>+eJ*HxHIG3nvYH?-M(*%up7O_J04 z`dRMAKIxvI>(@Ej{AC4^(>G1Xtgu<+x~2o+LPF4ghuylTlbs$%Z!8UoX*WDGKjg)- z==&>Dj|dd!QxH7|uU?{O-UihLQW&5!-Tk>(`T1n9=lj3$vumD1f5Eq(KQ%zviRW>X z=9~Ei1m!oEO^KTz6v?Rq`4)7&8l|FWMhu;Hu)9WE}8V17x1CM95P zE!*ix6$Kx@xuZ*+G(dN|5q*BxnHqF_2mtEnmS~;^z&9K=)1GWI_3b%?lXK{^ByMG| zj)c@ql+|rccBHAXwph%kmczx7?EC+CO&^(>R!CobR&XWn_IvXzFUOVoR8Mh~fkh$; z`nt~7)>mG+Z%Z%@9=q>N3j@-jQip8D4;MY=;|makjx=h>rY%$nlaBx#)T>g^YG$FF zGH8Ta#4&L=gfW!YhaM_=*ewi`e}M6)Pc;q@E{y6YrR_)vn)}N69h<%TtC{Gi3twwQ zGwy4rwv&Qq7Zz|495-E^pTGAgt%uY<imBS5zd3tL zZ+s{*_@h#pSK6nOFGU-&Q}z??lRf*#>@c|u_9Dc|No&}LvPS66?kq6741hlpu%`c| zSJr)dDOfF(c>~m0Xd<4_*f&b? zTIh~D;lF&*Br69#AKpzu|YeLB3RrKDy0fm?5mUL~To89o{^v;T8 zs2?V??%=_=4zjcbpSdVjDSPfeF{vFtIpDtf5zW-7Zya7dH9I?GMq~QW+UuaEVS3E^ z1npX^Vhs-b-`d@|`#bmE>K{q7lLXVKmyeXSyF%O$w zUd{S1NBw3bCkSznGx)e~3u+xMulqt3DfkFp=yS-v9cdG^3^Kx7O1zRxbok(})^J5u z_HIxaPoDb7M!LLhdBCeo-(_ov(RVQ5krU$q$k&QLIdk-0NxSm?;vH8q&)({tT#y@S znC~iOHJJM?rTQ9>5<+Iy@}EFP8(OS^K*alXZ#)j4ntG*I9?0X@dm2gbB8G~_yndAW zeyr?mSKpK%ai~ltE!2lJRCeoY;r&}bJXRcj%T5f9(qA}mi-cRND=)wzO2o}Om5I4Y z-TmBrZC=)3uKdS59n^Y)F_#oDmqcyt$sM~T&^e3y_v~kbe0~P@f<&{7Y(~MdtM1fn zM3%hWR&5oJQ*_BcMc2e6zi<1B<@FAm@|&9J!iIc=_g4w3F)x$IU~=j22LBRrI!FC! zOn!)`bQMp|kJ|TM3=B*g2gzkOBNLIU_CKWIj^beUi^Ap-0B564~%fh4ku^abSylylo8T)|64VT3{G(S>O#0SkffVCm-5#T{kEdd+$h zvr67=qJMyPo2oZ+JG$NpM&08@mjr9Y!TTO+a4&(D9$8L`5H~I3G@(l?e4waq?8&tF zw7pVE_KHOzBXk6FmVflwd+(;<7|>^@A3?Q5GCNyL2QD^sYf1ap4wFRVmoYpMRH+J^ z;mf>Zn~>|7P{-I7`GFB{@Jw<&Swl>=M)Ar@dq_)=@eT?|ql)Ebf9r@xb+8-I*aF z5v_`R^-$QFQ9uXVAS^I&%6b1u(mjnmhH%5A-)0co<*@O|^EKO1zuauy7JH1L@2)1F zLvrS43ckeo<YsJ5K1`-JRyP z9m=*CG5|TE7Pc2uzS0>R#UJ}SGnkOUPiSO!Zoww}Rw94`qo z4=Agj>*jH9w>~-1RxMGz@@YXss@0--#DJ_?X^7P&r`d8q4J=Ng)wH- zaer+y_@7TGO&>UluIfcu-7kWzWGcwiuGklS=rt7Gv3KibUGLANm)tm zH`^YPbI2?4YB=q99D82Ezl6rLd2FeaG5=EaadPjNBZ!C9ck!IKkcZ*xwGmL4A(C1< zI-FU-MNtZpmx}K1j+ozo4h(b%zI~6g!>d$mGMw8W-ah|{?Tl*8E#0++W!BxlEB6qsbd&c6@Sp|)AzwC8- zHx21J>E@-4n!u6xL#*oLaV{3NW1x6hB5+N$wze)x94bzXJHJuCs_zsZAJ13Qh)Bo? zLfAd!|FVRfijq5*Ah>^A)-JYXnCdL6SzC=(O-4%8-*Dh5h&iD zp&W@>h2jnHOabbs^`h7;cJ84t(4VF7h_X}G>Hy4&K2;z9CTDD2P?2?}VZvEdIH*x6 zKyhq$H#zhxho$R+4TPIMJVONumn+hJPN_n1$!aC7e^Z6EA~}+Fz@vx?=gX`G-hKls z#>JR3vT|Dn<#oi$?)X2}BHo|fODk-nUaAjK*Md{moxt<5-cS`$;TJv@;j$0*wRmTp zs#Y~_iJ;kcte~Wd93@H|eX;GiceAr&ci*5SV`TzT=N%{(dgQbml+MJ<@K3YoM;=tDeJ3xzx&@0C6rgRvd3o$r+NZ zu`hfi`>c546qmzBD=Elc+U~a4LrJ4oD1n)ZHMN)W)JE23oRfO?gBk^7`2_i9bECDv z)@a*UbumrNJJ}n@L;kqN^I>08Q@%L9*E9j90CflGCn_zq?+QY(52%zGc(>=VGEmg5 zk`xMMlQN8UdH9n=<7WT2a^;nGrcm=b+{Q-s{-pkFzli$rNq^ z^tF`0us9zs@OHx{hSYtNKHM1Y*RXNxjm6)!w9w}OHs~`F0iMNFKcr@NPc&qzB%+xw z`#YG6L=$<5hQX<>%`FfWEyRj5XQAtvfW~>Bl2U$fQFj26tluSaf1gm6)cp3%Boan1 zYPZII+r+LfqY!>!eh|=N<6pPGN#<&>9!ty;+ZsB)Ia#@)NCRY!s@*fKIyRfH{OIZ8 zoQrcim)J$LIp2A%BDUNJWvw;=!k!E$SN!1%8)kvx@V|7sk(2vK zJ8Ewf+>ZTJ(tXiW_`qMb_cmrWCHtzceNFAm2s+(vh|00L0s$T;%bqNtpul4)`B)jW z2EH!|rKO~^#)q1YiA!*4q|%U~;;>hH6OQ0T1<_rvVGpjH zIc-~;H;MxFu(~r5-7Aft8S`bqFT*@jz~eC{`irz9`T6TF!coCm@dAt?$6WHfRz|ZH zekIBMSl9yPQu#LKik`yi%bGs^t=cy;2@dt+6}uArX>fu+Z2YlSvtTXE0){-9>dUsV zw2)&m#c;UHfn^{6wZ3N**?IU@dDTTQhvw2!h%TBv;!ckr@)d}~re&76Us}`lU#j2H zm)O~y{!789cKrS63f*uukMHL49e?T~L6$O83p3`*l3>M-0cKf#!4p90@GqZL0j#Dk zzxTtULRCLIhfx9B+c1DKEkTU0wxG*Bz!qIG^FgLMn?PoEwl61?8)#Wc>YWB7r5I4! zf^9EAvK0>fvxznIkfWY7b)E}{8&BW%wAwsmN_UAQP4eK-P^Z@y{yjn~fN=Y&dJ z*UI0L=Uu~I7A@B2-H&0odSu`r#=4PZ@_VJ3?)Xw)|0{vc5{7VO#UXh6j!g}IsAJWT rr+h%UsfB5@dbjYZN_yc_5(QDJp?xTubr3}SLD1DJH`EJMEua1mlmX*% From a411368c80c34b4ed3288ccc988bf82420dc3683 Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Mon, 11 Nov 2024 12:50:04 +0100 Subject: [PATCH 26/28] theme should always be returned --- code/modules/mob/living/silicon/robot/robot_ui.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/modules/mob/living/silicon/robot/robot_ui.dm b/code/modules/mob/living/silicon/robot/robot_ui.dm index 7499fb198ea..11027cc20da 100644 --- a/code/modules/mob/living/silicon/robot/robot_ui.dm +++ b/code/modules/mob/living/silicon/robot/robot_ui.dm @@ -52,6 +52,10 @@ var/mob/living/silicon/robot/R = host data["module_name"] = R.module ? "[R.module]" : null + if(R.emagged) + data["theme"] = "syndicate" + else if (R.ui_theme) + data["theme"] = R.ui_theme if(!R.module) return data @@ -63,10 +67,6 @@ data["health"] = R.health data["max_health"] = R.getMaxHealth() data["light_color"] = R.robot_light_col - if(R.emagged) - data["theme"] = "syndicate" - else if (R.ui_theme) - data["theme"] = R.ui_theme data["weapon_lock"] = R.weapon_lock From e5b47c5e49433f29a950f1f41da7b1b51acecdc2 Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Mon, 11 Nov 2024 12:51:44 +0100 Subject: [PATCH 27/28] less numbers --- code/modules/mob/living/silicon/robot/robot.dm | 4 ++-- code/modules/mob/living/silicon/robot/robot_ui_module.dm | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 7b095cdc495..f3161e0e090 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -31,7 +31,7 @@ //Icon stuff var/datum/robot_sprite/sprite_datum // Sprite datum, holding all our sprite data - var/icon_selected = 0 // If icon selection has been completed yet + var/icon_selected = FALSE // If icon selection has been completed yet var/list/sprite_extra_customization = list() var/rest_style = "Default" var/notransform @@ -766,7 +766,7 @@ notify_ai(ROBOT_NOTIFICATION_MODULE_RESET, module.name) module.Reset(src) qdel(module) - icon_selected = 0 + icon_selected = FALSE module = null updatename("Default") has_recoloured = FALSE diff --git a/code/modules/mob/living/silicon/robot/robot_ui_module.dm b/code/modules/mob/living/silicon/robot/robot_ui_module.dm index 74c6ad4cda7..25b199b47c0 100644 --- a/code/modules/mob/living/silicon/robot/robot_ui_module.dm +++ b/code/modules/mob/living/silicon/robot/robot_ui_module.dm @@ -141,7 +141,7 @@ if (newName) R.custom_name = newName R.sprite_name = newName - R.icon_selected = 1 + R.icon_selected = TRUE var/module_type = robot_modules[selected_module] R.modtype = selected_module R.module = new module_type(R) From 29577730c2536e8e6c1df0c5d9b4205fbd31bf60 Mon Sep 17 00:00:00 2001 From: Kashargul <144968721+Kashargul@users.noreply.github.com> Date: Mon, 11 Nov 2024 21:02:11 +0100 Subject: [PATCH 28/28] early --- tgui/packages/tgui/interfaces/RobotChoose/functions.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tgui/packages/tgui/interfaces/RobotChoose/functions.ts b/tgui/packages/tgui/interfaces/RobotChoose/functions.ts index f42d00d83c2..db60717e88e 100644 --- a/tgui/packages/tgui/interfaces/RobotChoose/functions.ts +++ b/tgui/packages/tgui/interfaces/RobotChoose/functions.ts @@ -15,6 +15,9 @@ export function robotSpriteSearcher( searchText, (sprite: spriteOption) => sprite.sprite, ); + if (!sprites) { + return []; + } let subtypes: string[] = []; if (includeDefault) { subtypes.push('def'); @@ -25,9 +28,6 @@ export function robotSpriteSearcher( if (includeTall) { subtypes.push('tall'); } - if (!sprites) { - return []; - } return flow([ (sprites: spriteOption[]) => { if (!searchText) {