From 10e9a0f5df41722cedd097e30f86d25ebde8501a Mon Sep 17 00:00:00 2001 From: Sean Smith Date: Sat, 4 Jul 2026 23:49:20 -0600 Subject: [PATCH] Changed to vehicle sensor instead of single sensor types --- Constants.gd | 9 - .../assets/NinePatchWindow-InnerRecess.png | Bin 167 -> 0 bytes .../NinePatchWindow-InnerRecess.png.import | 40 - .../assets/NinePatchWindowInner.png | Bin 167 -> 0 bytes .../assets/NinePatchWindowInner.png.import | 40 - .../assets/NinePatchWindowOuter.png | Bin 166 -> 0 bytes .../assets/NinePatchWindowOuter.png.import | 40 - addons/loggie-console/assets/close.png | Bin 2902 -> 0 bytes addons/loggie-console/assets/close.png.import | 40 - addons/loggie-console/assets/icon.png.import | 34 - addons/loggie-console/assets/inner_panel.tres | 17 - .../assets/inner_panel_recess.tres | 16 - addons/loggie-console/assets/minimize.png | Bin 2849 -> 0 bytes .../loggie-console/assets/minimize.png.import | 40 - addons/loggie-console/assets/outer_panel.tres | 13 - .../assets/outer_window_panel.tres | 21 - addons/loggie-console/plugin.cfg | 7 - addons/loggie-console/plugin.gd | 16 - addons/loggie-console/plugin.gd.uid | 1 - .../resources/loggie_console_filter_state.gd | 55 -- .../loggie_console_filter_state.gd.uid | 1 - .../resources/loggie_console_settings.gd | 294 ------- .../resources/loggie_console_settings.gd.uid | 1 - addons/loggie-console/scenes/console.gd | 563 ------------ addons/loggie-console/scenes/console.gd.uid | 1 - addons/loggie-console/scenes/console.tscn | 164 ---- addons/loggie-console/scenes/domain_item.tscn | 55 -- .../scenes/panel_domain_selector.tscn | 86 -- .../loggie-console/scenes/restore_button.tscn | 29 - .../loggie-console/scenes/settings_panel.tscn | 90 -- .../scripts/components/console_controls.gd | 104 --- .../components/console_controls.gd.uid | 1 - .../scripts/components/domain_item.gd | 166 ---- .../scripts/components/domain_item.gd.uid | 1 - .../scripts/components/domain_selector.gd | 256 ------ .../scripts/components/domain_selector.gd.uid | 1 - .../scripts/components/log_buffer.gd | 209 ----- .../scripts/components/log_buffer.gd.uid | 1 - .../scripts/components/log_level_filter.gd | 62 -- .../components/log_level_filter.gd.uid | 1 - .../components/panel_domain_selector.gd | 381 -------- .../components/panel_domain_selector.gd.uid | 1 - .../scripts/components/restore_button.gd | 123 --- .../scripts/components/restore_button.gd.uid | 1 - .../scripts/components/settings_panel.gd | 125 --- .../scripts/components/settings_panel.gd.uid | 1 - .../scripts/components/status_display.gd | 55 -- .../scripts/components/status_display.gd.uid | 1 - .../scripts/domain_color_manager.gd | 167 ---- .../scripts/domain_color_manager.gd.uid | 1 - .../scripts/loggie_console_channel.gd | 66 -- .../scripts/loggie_console_channel.gd.uid | 1 - .../scripts/loggie_console_constants.gd | 9 - .../scripts/loggie_console_constants.gd.uid | 1 - .../managers/console_settings_manager.gd | 96 -- .../managers/console_settings_manager.gd.uid | 1 - addons/loggie-console/theme_compact.tres | 141 --- addons/loggie/assets/icon.png | Bin 16039 -> 0 bytes addons/loggie/assets/icon.png.import | 40 - addons/loggie/assets/logo.png | Bin 59538 -> 0 bytes addons/loggie/assets/logo.png.import | 40 - .../theme/checkbox/checkbox_checked.png | Bin 5021 -> 0 bytes .../checkbox/checkbox_checked.png.import | 40 - .../checkbox/checkbox_checked_disabled.png | Bin 4934 -> 0 bytes .../checkbox_checked_disabled.png.import | 40 - .../theme/checkbox/checkbox_unchecked.png | Bin 4010 -> 0 bytes .../checkbox/checkbox_unchecked.png.import | 40 - .../checkbox/checkbox_unchecked_disabled.png | Bin 3920 -> 0 bytes .../checkbox_unchecked_disabled.png.import | 40 - .../fonts/PatrickHandSC-Regular.LICENSE.txt | 45 - .../theme/fonts/PatrickHandSC-Regular.ttf | Bin 152608 -> 0 bytes .../fonts/PatrickHandSC-Regular.ttf.import | 36 - .../theme/fonts/coffee_soda.LICENSE.txt | 30 - .../loggie/assets/theme/fonts/coffee_soda.ttf | Bin 49816 -> 0 bytes .../assets/theme/fonts/coffee_soda.ttf.import | 36 - .../assets/theme/loggie_border_box.tres | 14 - addons/loggie/assets/theme/loggie_theme.tres | 95 -- addons/loggie/assets/updater_bg.png | Bin 701492 -> 0 bytes addons/loggie/assets/updater_bg.png.import | 40 - .../custom_channels/template.gd.example | 28 - addons/loggie/channels/discord.gd | 75 -- addons/loggie/channels/discord.gd.uid | 1 - addons/loggie/channels/slack.gd | 65 -- addons/loggie/channels/slack.gd.uid | 1 - addons/loggie/channels/terminal.gd | 21 - addons/loggie/channels/terminal.gd.uid | 1 - addons/loggie/custom_settings.gd.example | 52 -- addons/loggie/loggie.gd | 310 ------- addons/loggie/loggie.gd.uid | 1 - addons/loggie/loggie_message.gd | 566 ------------ addons/loggie/loggie_message.gd.uid | 1 - addons/loggie/loggie_message_channel.gd | 24 - addons/loggie/loggie_message_channel.gd.uid | 1 - addons/loggie/loggie_preset.gd | 83 -- addons/loggie/loggie_preset.gd.uid | 1 - addons/loggie/loggie_settings.gd | 521 ----------- addons/loggie/loggie_settings.gd.uid | 1 - addons/loggie/plugin.cfg | 7 - addons/loggie/plugin.gd | 50 -- addons/loggie/plugin.gd.uid | 1 - addons/loggie/tools/loggie_enums.gd | 88 -- addons/loggie/tools/loggie_enums.gd.uid | 1 - addons/loggie/tools/loggie_system_specs.gd | 186 ---- .../loggie/tools/loggie_system_specs.gd.uid | 1 - addons/loggie/tools/loggie_tools.gd | 530 ------------ addons/loggie/tools/loggie_tools.gd.uid | 1 - .../version_management/loggie_update.gd | 335 ------- .../version_management/loggie_update.gd.uid | 1 - .../version_management/loggie_version.gd | 39 - .../version_management/loggie_version.gd.uid | 1 - .../loggie_version_manager.gd | 225 ----- .../loggie_version_manager.gd.uid | 1 - .../update_prompt_window.gd | 192 ---- .../update_prompt_window.gd.uid | 1 - .../update_prompt_window.tscn | 818 ------------------ helpers/TimeHelpers.gd | 31 + helpers/TimeHelpers.gd.uid | 1 + networking/scripts/udp_broadcast.gd | 52 +- networking/scripts/udp_server.gd | 127 ++- project.godot | 7 +- sensors/accelerometer_sensor_node.gd | 30 - sensors/accelerometer_sensor_node.gd.uid | 1 - sensors/base_sensor_node.gd | 10 +- sensors/magnetometer_sensor_node.gd | 24 - sensors/magnetometer_sensor_node.gd.uid | 1 - sensors/pnt_sensor_node.gd | 56 -- sensors/pnt_sensor_node.gd.uid | 1 - sensors/satelites_sensor_node.gd | 4 +- sensors/sensor_spawner.gd | 23 +- sensors/sensor_suite.tscn | 4 - sensors/sensor_suite_node.gd | 54 -- sensors/sensor_suite_node.gd.uid | 1 - sensors/vehicle_sensor_node.gd | 190 ++++ sensors/vehicle_sensor_node.gd.uid | 1 + signals/data_signals.gd | 10 +- vehicle/scripts/vehicle_node.gd | 159 ++-- vehicle/vehicle.tscn | 2 - views/2d/View2D.tscn | 4 - views/ViewController.gd | 1 - .../altitude/scripts/altitude_widget_node.gd | 9 +- widgets/base_widget_node.gd | 11 + .../compass/scripts/compass_widget_node.gd | 7 +- .../network/scripts/network_widget_node.gd | 11 +- widgets/rotation/scripts/pitch_widget_node.gd | 9 +- widgets/rotation/scripts/roll_widget_node.gd | 9 +- .../scripts/satellite_widget_3d_node.gd | 13 - widgets/speed/scripts/speed_widget_node.gd | 10 +- 147 files changed, 523 insertions(+), 8763 deletions(-) delete mode 100644 addons/loggie-console/assets/NinePatchWindow-InnerRecess.png delete mode 100644 addons/loggie-console/assets/NinePatchWindow-InnerRecess.png.import delete mode 100644 addons/loggie-console/assets/NinePatchWindowInner.png delete mode 100644 addons/loggie-console/assets/NinePatchWindowInner.png.import delete mode 100644 addons/loggie-console/assets/NinePatchWindowOuter.png delete mode 100644 addons/loggie-console/assets/NinePatchWindowOuter.png.import delete mode 100644 addons/loggie-console/assets/close.png delete mode 100644 addons/loggie-console/assets/close.png.import delete mode 100644 addons/loggie-console/assets/icon.png.import delete mode 100644 addons/loggie-console/assets/inner_panel.tres delete mode 100644 addons/loggie-console/assets/inner_panel_recess.tres delete mode 100644 addons/loggie-console/assets/minimize.png delete mode 100644 addons/loggie-console/assets/minimize.png.import delete mode 100644 addons/loggie-console/assets/outer_panel.tres delete mode 100644 addons/loggie-console/assets/outer_window_panel.tres delete mode 100644 addons/loggie-console/plugin.cfg delete mode 100644 addons/loggie-console/plugin.gd delete mode 100644 addons/loggie-console/plugin.gd.uid delete mode 100644 addons/loggie-console/resources/loggie_console_filter_state.gd delete mode 100644 addons/loggie-console/resources/loggie_console_filter_state.gd.uid delete mode 100644 addons/loggie-console/resources/loggie_console_settings.gd delete mode 100644 addons/loggie-console/resources/loggie_console_settings.gd.uid delete mode 100644 addons/loggie-console/scenes/console.gd delete mode 100644 addons/loggie-console/scenes/console.gd.uid delete mode 100644 addons/loggie-console/scenes/console.tscn delete mode 100644 addons/loggie-console/scenes/domain_item.tscn delete mode 100644 addons/loggie-console/scenes/panel_domain_selector.tscn delete mode 100644 addons/loggie-console/scenes/restore_button.tscn delete mode 100644 addons/loggie-console/scenes/settings_panel.tscn delete mode 100644 addons/loggie-console/scripts/components/console_controls.gd delete mode 100644 addons/loggie-console/scripts/components/console_controls.gd.uid delete mode 100644 addons/loggie-console/scripts/components/domain_item.gd delete mode 100644 addons/loggie-console/scripts/components/domain_item.gd.uid delete mode 100644 addons/loggie-console/scripts/components/domain_selector.gd delete mode 100644 addons/loggie-console/scripts/components/domain_selector.gd.uid delete mode 100644 addons/loggie-console/scripts/components/log_buffer.gd delete mode 100644 addons/loggie-console/scripts/components/log_buffer.gd.uid delete mode 100644 addons/loggie-console/scripts/components/log_level_filter.gd delete mode 100644 addons/loggie-console/scripts/components/log_level_filter.gd.uid delete mode 100644 addons/loggie-console/scripts/components/panel_domain_selector.gd delete mode 100644 addons/loggie-console/scripts/components/panel_domain_selector.gd.uid delete mode 100644 addons/loggie-console/scripts/components/restore_button.gd delete mode 100644 addons/loggie-console/scripts/components/restore_button.gd.uid delete mode 100644 addons/loggie-console/scripts/components/settings_panel.gd delete mode 100644 addons/loggie-console/scripts/components/settings_panel.gd.uid delete mode 100644 addons/loggie-console/scripts/components/status_display.gd delete mode 100644 addons/loggie-console/scripts/components/status_display.gd.uid delete mode 100644 addons/loggie-console/scripts/domain_color_manager.gd delete mode 100644 addons/loggie-console/scripts/domain_color_manager.gd.uid delete mode 100644 addons/loggie-console/scripts/loggie_console_channel.gd delete mode 100644 addons/loggie-console/scripts/loggie_console_channel.gd.uid delete mode 100644 addons/loggie-console/scripts/loggie_console_constants.gd delete mode 100644 addons/loggie-console/scripts/loggie_console_constants.gd.uid delete mode 100644 addons/loggie-console/scripts/managers/console_settings_manager.gd delete mode 100644 addons/loggie-console/scripts/managers/console_settings_manager.gd.uid delete mode 100644 addons/loggie-console/theme_compact.tres delete mode 100644 addons/loggie/assets/icon.png delete mode 100644 addons/loggie/assets/icon.png.import delete mode 100644 addons/loggie/assets/logo.png delete mode 100644 addons/loggie/assets/logo.png.import delete mode 100644 addons/loggie/assets/theme/checkbox/checkbox_checked.png delete mode 100644 addons/loggie/assets/theme/checkbox/checkbox_checked.png.import delete mode 100644 addons/loggie/assets/theme/checkbox/checkbox_checked_disabled.png delete mode 100644 addons/loggie/assets/theme/checkbox/checkbox_checked_disabled.png.import delete mode 100644 addons/loggie/assets/theme/checkbox/checkbox_unchecked.png delete mode 100644 addons/loggie/assets/theme/checkbox/checkbox_unchecked.png.import delete mode 100644 addons/loggie/assets/theme/checkbox/checkbox_unchecked_disabled.png delete mode 100644 addons/loggie/assets/theme/checkbox/checkbox_unchecked_disabled.png.import delete mode 100644 addons/loggie/assets/theme/fonts/PatrickHandSC-Regular.LICENSE.txt delete mode 100644 addons/loggie/assets/theme/fonts/PatrickHandSC-Regular.ttf delete mode 100644 addons/loggie/assets/theme/fonts/PatrickHandSC-Regular.ttf.import delete mode 100644 addons/loggie/assets/theme/fonts/coffee_soda.LICENSE.txt delete mode 100644 addons/loggie/assets/theme/fonts/coffee_soda.ttf delete mode 100644 addons/loggie/assets/theme/fonts/coffee_soda.ttf.import delete mode 100644 addons/loggie/assets/theme/loggie_border_box.tres delete mode 100644 addons/loggie/assets/theme/loggie_theme.tres delete mode 100644 addons/loggie/assets/updater_bg.png delete mode 100644 addons/loggie/assets/updater_bg.png.import delete mode 100644 addons/loggie/channels/custom_channels/template.gd.example delete mode 100644 addons/loggie/channels/discord.gd delete mode 100644 addons/loggie/channels/discord.gd.uid delete mode 100644 addons/loggie/channels/slack.gd delete mode 100644 addons/loggie/channels/slack.gd.uid delete mode 100644 addons/loggie/channels/terminal.gd delete mode 100644 addons/loggie/channels/terminal.gd.uid delete mode 100644 addons/loggie/custom_settings.gd.example delete mode 100644 addons/loggie/loggie.gd delete mode 100644 addons/loggie/loggie.gd.uid delete mode 100644 addons/loggie/loggie_message.gd delete mode 100644 addons/loggie/loggie_message.gd.uid delete mode 100644 addons/loggie/loggie_message_channel.gd delete mode 100644 addons/loggie/loggie_message_channel.gd.uid delete mode 100644 addons/loggie/loggie_preset.gd delete mode 100644 addons/loggie/loggie_preset.gd.uid delete mode 100644 addons/loggie/loggie_settings.gd delete mode 100644 addons/loggie/loggie_settings.gd.uid delete mode 100644 addons/loggie/plugin.cfg delete mode 100644 addons/loggie/plugin.gd delete mode 100644 addons/loggie/plugin.gd.uid delete mode 100644 addons/loggie/tools/loggie_enums.gd delete mode 100644 addons/loggie/tools/loggie_enums.gd.uid delete mode 100644 addons/loggie/tools/loggie_system_specs.gd delete mode 100644 addons/loggie/tools/loggie_system_specs.gd.uid delete mode 100644 addons/loggie/tools/loggie_tools.gd delete mode 100644 addons/loggie/tools/loggie_tools.gd.uid delete mode 100644 addons/loggie/version_management/loggie_update.gd delete mode 100644 addons/loggie/version_management/loggie_update.gd.uid delete mode 100644 addons/loggie/version_management/loggie_version.gd delete mode 100644 addons/loggie/version_management/loggie_version.gd.uid delete mode 100644 addons/loggie/version_management/loggie_version_manager.gd delete mode 100644 addons/loggie/version_management/loggie_version_manager.gd.uid delete mode 100644 addons/loggie/version_management/update_prompt_window.gd delete mode 100644 addons/loggie/version_management/update_prompt_window.gd.uid delete mode 100644 addons/loggie/version_management/update_prompt_window.tscn create mode 100644 helpers/TimeHelpers.gd create mode 100644 helpers/TimeHelpers.gd.uid delete mode 100644 sensors/accelerometer_sensor_node.gd delete mode 100644 sensors/accelerometer_sensor_node.gd.uid delete mode 100644 sensors/magnetometer_sensor_node.gd delete mode 100644 sensors/magnetometer_sensor_node.gd.uid delete mode 100644 sensors/pnt_sensor_node.gd delete mode 100644 sensors/pnt_sensor_node.gd.uid delete mode 100644 sensors/sensor_suite_node.gd delete mode 100644 sensors/sensor_suite_node.gd.uid create mode 100644 sensors/vehicle_sensor_node.gd create mode 100644 sensors/vehicle_sensor_node.gd.uid diff --git a/Constants.gd b/Constants.gd index 8362662..bc17c45 100644 --- a/Constants.gd +++ b/Constants.gd @@ -14,15 +14,6 @@ var WGS84_AB = WGS84_A_M * WGS84_B_M var g = 9.80665 -func calc_time_diff(timestamp_1, timestamp_2): - if timestamp_2 < 3600 and timestamp_1 > 82800: - return (timestamp_2 + 86400) - timestamp_1 - return timestamp_2 - timestamp_1 - -func is_timestamp_newer(old_timestamp: float, new_timestamp: float) -> bool: - if old_timestamp > 82800. and new_timestamp < 3600: # earlier than 23 hours - return true - return old_timestamp < new_timestamp func calc_wgs84_altitude(latitude_rad: float): var theta_rad = abs(latitude_rad) diff --git a/addons/loggie-console/assets/NinePatchWindow-InnerRecess.png b/addons/loggie-console/assets/NinePatchWindow-InnerRecess.png deleted file mode 100644 index 95b07ec74a20aefbbb07b7593f875629efc88710..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 167 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbB7>k44ofy`glX(f`Bzn3yhD5Z! zy`d=7V8FwA@xX#=F_q>eUBBa5`B!z!n%a3|xl;MQGn?f9_BvgA({R(Q@7laGeLK!s zD{<+i2pD!qxbP^k2{v~)9#Kd_=05q)-}~QZTM>8dCSjHdb#vGH0xe_kboFyt=akR{ E0M)TM6aWAK diff --git a/addons/loggie-console/assets/NinePatchWindow-InnerRecess.png.import b/addons/loggie-console/assets/NinePatchWindow-InnerRecess.png.import deleted file mode 100644 index 9ea3f65..0000000 --- a/addons/loggie-console/assets/NinePatchWindow-InnerRecess.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://ivppb5cqrsak" -path="res://.godot/imported/NinePatchWindow-InnerRecess.png-07bd09e8d845ac941af5cf12e9f19c54.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://addons/loggie-console/assets/NinePatchWindow-InnerRecess.png" -dest_files=["res://.godot/imported/NinePatchWindow-InnerRecess.png-07bd09e8d845ac941af5cf12e9f19c54.ctex"] - -[params] - -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/uastc_level=0 -compress/rdo_quality_loss=0.0 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/channel_remap/red=0 -process/channel_remap/green=1 -process/channel_remap/blue=2 -process/channel_remap/alpha=3 -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 diff --git a/addons/loggie-console/assets/NinePatchWindowInner.png b/addons/loggie-console/assets/NinePatchWindowInner.png deleted file mode 100644 index 7fd9ac96d1f7b7d422f9837e533fc67558b8a963..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 167 zcmeAS@N?(olHy`uVBq!ia0vp^Dj>|k1|%Oc%$NbB7>k44ofy`glX(f`Bzn3yhD5Z! zy`d=7V8FwAamqsp4i%xs6$c9c8#ih#N=sGxw(`VW{mbY6?Fl?FN!B3x_{O)orcbQi zb#!q{y6`Bm2{v~)9#KdVFzk>(=KlQe{Mdf-+B;72@wUv#!VZfU0xe_kboFyt=akR{ E0Eg)~1^@s6 diff --git a/addons/loggie-console/assets/NinePatchWindowInner.png.import b/addons/loggie-console/assets/NinePatchWindowInner.png.import deleted file mode 100644 index 5f99860..0000000 --- a/addons/loggie-console/assets/NinePatchWindowInner.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://d1w4w4yi6p3w3" -path="res://.godot/imported/NinePatchWindowInner.png-47f4d96fc18c0a2a90855797a8cd0e05.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://addons/loggie-console/assets/NinePatchWindowInner.png" -dest_files=["res://.godot/imported/NinePatchWindowInner.png-47f4d96fc18c0a2a90855797a8cd0e05.ctex"] - -[params] - -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/uastc_level=0 -compress/rdo_quality_loss=0.0 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/channel_remap/red=0 -process/channel_remap/green=1 -process/channel_remap/blue=2 -process/channel_remap/alpha=3 -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 diff --git a/addons/loggie-console/assets/NinePatchWindowOuter.png b/addons/loggie-console/assets/NinePatchWindowOuter.png deleted file mode 100644 index 366a7e1f4b7407569f8be136b6d8a465dbe7f651..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 166 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 Ae*gdg diff --git a/addons/loggie-console/assets/close.png.import b/addons/loggie-console/assets/close.png.import deleted file mode 100644 index b413e19..0000000 --- a/addons/loggie-console/assets/close.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://bhps6csrl6lef" -path="res://.godot/imported/close.png-9f5b597652eecfc041a6acfb8a79a5f3.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://addons/loggie-console/assets/close.png" -dest_files=["res://.godot/imported/close.png-9f5b597652eecfc041a6acfb8a79a5f3.ctex"] - -[params] - -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/uastc_level=0 -compress/rdo_quality_loss=0.0 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/channel_remap/red=0 -process/channel_remap/green=1 -process/channel_remap/blue=2 -process/channel_remap/alpha=3 -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 diff --git a/addons/loggie-console/assets/icon.png.import b/addons/loggie-console/assets/icon.png.import deleted file mode 100644 index 181b910..0000000 --- a/addons/loggie-console/assets/icon.png.import +++ /dev/null @@ -1,34 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://ckoblpvpivjma" -path="res://.godot/imported/icon.png-b025e725a72f01c7e881efaf61058c1e.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://addons/loggie-console/assets/icon.png" -dest_files=["res://.godot/imported/icon.png-b025e725a72f01c7e881efaf61058c1e.ctex"] - -[params] - -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 diff --git a/addons/loggie-console/assets/inner_panel.tres b/addons/loggie-console/assets/inner_panel.tres deleted file mode 100644 index e97c8a8..0000000 --- a/addons/loggie-console/assets/inner_panel.tres +++ /dev/null @@ -1,17 +0,0 @@ -[gd_resource type="StyleBoxTexture" load_steps=2 format=3 uid="uid://b7k8yo7jfhpue"] - -[ext_resource type="Texture2D" uid="uid://d1w4w4yi6p3w3" path="res://addons/loggie-console/assets/NinePatchWindowInner.png" id="1_vngi6"] - -[resource] -content_margin_left = 4.0 -content_margin_top = 4.0 -content_margin_right = 4.0 -content_margin_bottom = 4.0 -texture = ExtResource("1_vngi6") -texture_margin_left = 2.0 -texture_margin_top = 2.0 -texture_margin_right = 2.0 -texture_margin_bottom = 2.0 -axis_stretch_horizontal = 1 -axis_stretch_vertical = 1 -region_rect = Rect2(0, 0, 36, 36) diff --git a/addons/loggie-console/assets/inner_panel_recess.tres b/addons/loggie-console/assets/inner_panel_recess.tres deleted file mode 100644 index f627bd4..0000000 --- a/addons/loggie-console/assets/inner_panel_recess.tres +++ /dev/null @@ -1,16 +0,0 @@ -[gd_resource type="StyleBoxTexture" load_steps=2 format=3 uid="uid://dolgdjpxlvt8f"] - -[ext_resource type="Texture2D" uid="uid://ivppb5cqrsak" path="res://addons/loggie-console/assets/NinePatchWindow-InnerRecess.png" id="1_lfme6"] - -[resource] -content_margin_left = 4.0 -content_margin_right = 4.0 -content_margin_bottom = 4.0 -texture = ExtResource("1_lfme6") -texture_margin_left = 2.0 -texture_margin_top = 2.0 -texture_margin_right = 2.0 -texture_margin_bottom = 2.0 -axis_stretch_horizontal = 1 -axis_stretch_vertical = 1 -region_rect = Rect2(0, 0, 36, 36) diff --git a/addons/loggie-console/assets/minimize.png b/addons/loggie-console/assets/minimize.png deleted file mode 100644 index 48511b231c67a8d6fd09fce0628e7bf20443e78d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2849 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 void: - print("%s enabled" % AUTOLOAD_NAME) - -func _disable_plugin() -> void: - print("%s disabled" % AUTOLOAD_NAME) diff --git a/addons/loggie-console/plugin.gd.uid b/addons/loggie-console/plugin.gd.uid deleted file mode 100644 index f6345bb..0000000 --- a/addons/loggie-console/plugin.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://b8ul8pbaeqx2l diff --git a/addons/loggie-console/resources/loggie_console_filter_state.gd b/addons/loggie-console/resources/loggie_console_filter_state.gd deleted file mode 100644 index d841e03..0000000 --- a/addons/loggie-console/resources/loggie_console_filter_state.gd +++ /dev/null @@ -1,55 +0,0 @@ -@tool -class_name LoggieConsoleFilterState extends Resource - -## Persistent filter state resource for LoggieConsole -## -## Stores filtering criteria (domains, log levels, search terms) in a format compatible -## with Godot's Resource system while maintaining compatibility with LogBuffer.FilterState. -## This enables console filter settings to persist between application sessions. - - -## List of domain names that are currently enabled for display -@export var enabled_domains: Array[String] = [] - -## Minimum log level to display (stored as int for persistence compatibility) -@export var min_log_level: int = LoggieEnums.LogLevel.DEBUG - -## Text search filter - only messages containing this text will be shown -@export var text_search: String = "" - -## Whether to show only messages that include stack traces -@export var show_stack_only: bool = false - -## Converts this persistent resource to runtime FilterState object -## Returns: A new LogBuffer.FilterState instance with matching filter criteria -func to_filter_state() -> LogBuffer.FilterState: - var filter_state: LogBuffer.FilterState = LogBuffer.FilterState.new() - filter_state.enabled_domains = enabled_domains.duplicate() - filter_state.min_log_level = min_log_level as LoggieEnums.LogLevel - filter_state.text_search = text_search - filter_state.show_stack_only = show_stack_only - return filter_state - -## Populates this resource from runtime FilterState object -## Param filter_state: The LogBuffer.FilterState to copy data from -func from_filter_state(filter_state: LogBuffer.FilterState) -> void: - enabled_domains = filter_state.enabled_domains.duplicate() - min_log_level = filter_state.min_log_level as int - text_search = filter_state.text_search - show_stack_only = filter_state.show_stack_only - -## Validates and sanitizes all data after loading from disk -## Ensures all fields have valid values even if the saved file was corrupted -func validate() -> void: - # Ensure domain array exists - if enabled_domains == null: - enabled_domains = [] - - # Validate log level is within valid enum range - if min_log_level < 0 or min_log_level >= LoggieEnums.LogLevel.size(): - min_log_level = LoggieEnums.LogLevel.DEBUG - Loggie.msg("Invalid log level, reset to DEBUG").domain(LoggieConsoleConstants.DOMAIN).warn() - - # Ensure search text is never null - if text_search == null: - text_search = "" diff --git a/addons/loggie-console/resources/loggie_console_filter_state.gd.uid b/addons/loggie-console/resources/loggie_console_filter_state.gd.uid deleted file mode 100644 index c9f5fde..0000000 --- a/addons/loggie-console/resources/loggie_console_filter_state.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://b6iuus8kvu3y3 diff --git a/addons/loggie-console/resources/loggie_console_settings.gd b/addons/loggie-console/resources/loggie_console_settings.gd deleted file mode 100644 index de9148b..0000000 --- a/addons/loggie-console/resources/loggie_console_settings.gd +++ /dev/null @@ -1,294 +0,0 @@ -@tool -class_name LoggieConsoleSettings extends Resource - -## Complete persistent settings for LoggieConsole -## -## This resource stores all console state including window properties, filter settings, -## component states, and discovered domains. It automatically saves when the console -## exits and loads on startup to restore the user's previous console configuration. - -const LoggieConsoleFilterState = preload("res://addons/loggie-console/resources/loggie_console_filter_state.gd") - -# Configuration constants -const MIN_WINDOW_WIDTH: int = 400 -const MIN_WINDOW_HEIGHT: int = 300 -const DEFAULT_WINDOW_WIDTH: int = 800 -const DEFAULT_WINDOW_HEIGHT: int = 400 -const SCREEN_MARGIN_PIXELS: int = 100 # 50px on each side -const WINDOW_EDGE_MARGIN: int = 20 -const WINDOW_MIN_MARGIN: int = 10 - - -## Filter state for log message display (domains, levels, search terms) -@export var filter_state: LoggieConsoleFilterState - -## Currently enabled domain names for filtering -@export var enabled_domains: Array[String] = [] - -## All domain names discovered during runtime (persisted for next session) -@export var all_known_domains: Array[String] = [] - -## Console window screen position (-1, -1 means use default centering) -@export var window_position: Vector2i = Vector2i(-1, -1) - -## Console window size in pixels -@export var window_size: Vector2i = Vector2i(DEFAULT_WINDOW_WIDTH, DEFAULT_WINDOW_HEIGHT) - -## Whether console is currently minimized -@export var is_minimized: bool = false - -## Whether console window is visible -@export var is_visible: bool = true - -## Display/screen index where console was last positioned (-1 means primary display) -@export var display_index: int = -1 - -## Whether subwindows were embedded when settings were last saved -@export var was_embedded_subwindows: bool = false - -## Current log level filter (stored as int for persistence) -@export var log_level: int = LoggieEnums.LogLevel.DEBUG - -## Whether to auto-scroll to newest messages -@export var scroll_follow_enabled: bool = true - -## Current text search filter term -@export var search_text: String = "" - -## Whether to show only messages with stack traces -@export var stack_filter_enabled: bool = false - -## Maximum number of messages to keep in buffer before cleanup -@export var max_messages: int = 5000 - -## Text size multiplier for console fonts (0.5 to 2.0, default 1.0) -@export var text_size_multiplier: float = 1.0 - -## Restore button alignment position (0=TOP_LEFT, 1=TOP_RIGHT, 2=BOTTOM_LEFT, 3=BOTTOM_RIGHT) -@export var restore_button_alignment: int = 1 # Default to TOP_RIGHT - -## Settings file format version for future migration compatibility -@export var version: int = 1 - -## Unix timestamp when settings were last saved -@export var last_saved: float = 0.0 - -## Initializes default settings values -## -## Creates the filter state resource if it doesn't exist. This ensures that -## all required sub-resources are properly initialized even when creating -## settings from scratch. -func _init() -> void: - if not filter_state: - filter_state = LoggieConsoleFilterState.new() - -## Validates and sanitizes all data after loading from disk -## Ensures all fields have valid values even if the saved file was corrupted -func validate() -> void: - # Ensure filter state exists and is valid - if not filter_state: - filter_state = LoggieConsoleFilterState.new() - filter_state.validate() - - # Ensure domain arrays exist - if enabled_domains == null: - enabled_domains = [] - if all_known_domains == null: - all_known_domains = [] - - # Validate log level is within enum range - if log_level < 0 or log_level >= LoggieEnums.LogLevel.size(): - log_level = LoggieEnums.LogLevel.DEBUG - Loggie.msg("Invalid log level, reset to DEBUG").domain(LoggieConsoleConstants.DOMAIN).warn() - - # Enforce minimum and maximum window size for usability - _validate_window_size() - - # Ensure search text is never null - if search_text == null: - search_text = "" - - # Validate text size multiplier is within reasonable bounds - if text_size_multiplier < 0.5 or text_size_multiplier > 2.0: - text_size_multiplier = 1.0 - Loggie.msg("Invalid text size multiplier, reset to 1.0").domain(LoggieConsoleConstants.DOMAIN).warn() - - # Validate restore button alignment is within enum range (0-3) - if restore_button_alignment < 0 or restore_button_alignment > 3: - restore_button_alignment = 1 # Default to TOP_RIGHT - Loggie.msg("Invalid restore button alignment, reset to TOP_RIGHT").domain(LoggieConsoleConstants.DOMAIN).warn() - - # Update save timestamp - last_saved = Time.get_unix_time_from_system() - -## Validates and ensures window size fits within available screen space -## -## Enforces minimum size for usability (400x300) and maximum size based on -## screen dimensions. Checks all connected displays to find the largest -## available space and clamps the window size accordingly. -func _validate_window_size() -> void: - # Get the largest available screen to determine maximum constraints - var max_screen_size: Vector2i = Vector2i.ZERO - var screens: int = DisplayServer.get_screen_count() - - for i: int in screens: - var screen_rect: Rect2i = DisplayServer.screen_get_usable_rect(i) - max_screen_size.x = maxi(max_screen_size.x, screen_rect.size.x) - max_screen_size.y = maxi(max_screen_size.y, screen_rect.size.y) - - # Fallback if no screens detected - if max_screen_size == Vector2i.ZERO: - max_screen_size = Vector2i(1920, 1080) - - # Enforce minimum window size for usability - window_size.x = maxi(window_size.x, MIN_WINDOW_WIDTH) - window_size.y = maxi(window_size.y, MIN_WINDOW_HEIGHT) - - # Enforce maximum window size to fit on screen (with margins) - var max_width: int = max_screen_size.x - SCREEN_MARGIN_PIXELS - var max_height: int = max_screen_size.y - SCREEN_MARGIN_PIXELS - - if window_size.x > max_width: - window_size.x = max_width - Loggie.msg("Window width too large, clamped to %d" % max_width).domain(LoggieConsoleConstants.DOMAIN).warn() - - if window_size.y > max_height: - window_size.y = max_height - Loggie.msg("Window height too large, clamped to %d" % max_height).domain(LoggieConsoleConstants.DOMAIN).warn() - -## Detects if embed_subwindows setting has changed since last save -## Returns: true if setting has changed and window positioning needs reset -func _has_embed_setting_changed() -> bool: - var current_embedded = ProjectSettings.get_setting("display/window/subwindows/embed_subwindows", true) - return current_embedded != was_embedded_subwindows - -## Updates the stored embed_subwindows setting to current project setting -## -## This should be called whenever settings are saved to track the current -## embed_subwindows state for future change detection. -func update_embed_setting() -> void: - was_embedded_subwindows = ProjectSettings.get_setting("display/window/subwindows/embed_subwindows", true) - -## Validates and corrects window position for current display setup -## Returns: A valid window position that will be visible on screen -func validate_window_position() -> Vector2i: - # Check if embed_subwindows setting has changed - var embed_changed = _has_embed_setting_changed() - var current_embedded = ProjectSettings.get_setting("display/window/subwindows/embed_subwindows", true) - - # If embed setting changed and window was previously invisible, reset position - if embed_changed and not is_visible: - Loggie.msg("embed_subwindows changed from %s to %s, resetting window position" % [was_embedded_subwindows, current_embedded]).domain(LoggieConsoleConstants.DOMAIN).warn() - update_embed_setting() - # Reset to default centering - var target_display = _get_target_display() - var target_rect: Rect2i = DisplayServer.screen_get_usable_rect(target_display) - window_position = Vector2i(-1, -1) # Mark for centering - display_index = target_display - return _center_window_on_screen(target_rect) - - # Update embed setting for future comparisons - update_embed_setting() - - # Use default centering if position is not set - if window_position == Vector2i(-1, -1): - var target_display = _get_target_display() - var target_rect: Rect2i = DisplayServer.screen_get_usable_rect(target_display) - return _center_window_on_screen(target_rect) - - # If we have a specific display preference, validate against it first - if display_index >= 0 and display_index < DisplayServer.get_screen_count(): - var preferred_rect: Rect2i = DisplayServer.screen_get_usable_rect(display_index) - var validated_pos = _clamp_window_to_screen(window_position, preferred_rect) - if validated_pos != window_position: - Loggie.msg("Window position adjusted to fit display %d" % display_index).domain(LoggieConsoleConstants.DOMAIN).warn() - return validated_pos - - # Check if window can fit properly on any connected display - var screens: int = DisplayServer.get_screen_count() - var best_display: int = -1 - var best_pos: Vector2i = window_position - - for i: int in screens: - var screen_rect: Rect2i = DisplayServer.screen_get_usable_rect(i) - var window_rect: Rect2i = Rect2i(window_position, window_size) - - # Check if window intersects with this screen - if screen_rect.intersects(window_rect): - best_display = i - best_pos = _clamp_window_to_screen(window_position, screen_rect) - # If the window fits perfectly on this screen, use it - if best_pos == window_position: - display_index = i - return window_position - break - - # If we found a suitable display, use the clamped position - if best_display >= 0: - display_index = best_display - if best_pos != window_position: - Loggie.msg("Window position clamped to fit display %d" % best_display).domain(LoggieConsoleConstants.DOMAIN).warn() - return best_pos - - # Window is completely off-screen, center it on target display - var target_display = _get_target_display() - var target_rect: Rect2i = DisplayServer.screen_get_usable_rect(target_display) - display_index = target_display - Loggie.msg("Window position off-screen, centering on display %d" % target_display).domain(LoggieConsoleConstants.DOMAIN).warn() - return _center_window_on_screen(target_rect) - -## Centers the window on the given screen rectangle with margins -## -## Calculates a centered position that keeps the window fully visible with -## appropriate margins from screen edges. -## @param screen_rect: The target screen's usable rectangle -## @return: Position that centers the window with 20px margins -func _center_window_on_screen(screen_rect: Rect2i) -> Vector2i: - var margin_vector: Vector2i = Vector2i(WINDOW_EDGE_MARGIN, WINDOW_EDGE_MARGIN) - var available_size: Vector2i = screen_rect.size - margin_vector * 2 - var centered_offset: Vector2i = (available_size - window_size) / 2 - return screen_rect.position + margin_vector + centered_offset - -## Clamps window position to ensure it fits entirely within screen bounds -## -## Adjusts the position to keep the entire window visible on the screen, -## respecting minimum margins from edges. -## @param pos: The desired window position -## @param screen_rect: The target screen's rectangle -## @return: Adjusted position that keeps the entire window visible -func _clamp_window_to_screen(pos: Vector2i, screen_rect: Rect2i) -> Vector2i: - var margin: Vector2i = Vector2i(WINDOW_MIN_MARGIN, WINDOW_MIN_MARGIN) - var usable_rect: Rect2i = Rect2i( - screen_rect.position + margin, - screen_rect.size - margin * 2 - ) - - # Ensure window fits within usable area - var max_pos: Vector2i = usable_rect.position + usable_rect.size - window_size - - var clamped_pos: Vector2i = Vector2i( - clampi(pos.x, usable_rect.position.x, max_pos.x), - clampi(pos.y, usable_rect.position.y, max_pos.y) - ) - - return clamped_pos - -## Gets the target display index for window positioning -## Returns: Valid display index (0 if saved display no longer exists) -func _get_target_display() -> int: - # Use saved display if it still exists - if display_index >= 0 and display_index < DisplayServer.get_screen_count(): - return display_index - - # Fall back to primary display (index 0) - return 0 - -## Gets the log level as a proper enum value -## Returns: The current log level as LoggieEnums.LogLevel -func get_log_level() -> LoggieEnums.LogLevel: - return log_level as LoggieEnums.LogLevel - -## Sets the log level from an enum value -## @param level: The new log level to store -func set_log_level(level: LoggieEnums.LogLevel) -> void: - log_level = level as int diff --git a/addons/loggie-console/resources/loggie_console_settings.gd.uid b/addons/loggie-console/resources/loggie_console_settings.gd.uid deleted file mode 100644 index c594ea5..0000000 --- a/addons/loggie-console/resources/loggie_console_settings.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://w2lnu7heu47v diff --git a/addons/loggie-console/scenes/console.gd b/addons/loggie-console/scenes/console.gd deleted file mode 100644 index 7bd27cc..0000000 --- a/addons/loggie-console/scenes/console.gd +++ /dev/null @@ -1,563 +0,0 @@ -## Enhanced LoggieConsole with persistence, minimize/restore, and multi-display support -## -## This console window provides an advanced debugging interface for the Loggie logging system. -## Features include: -## - Persistent window positioning and settings across sessions -## - Multi-display awareness for non-embedded subwindows -## - Domain-based filtering with dynamic discovery -## - Minimize/restore functionality with floating restore button -## - Complete component-based architecture for extensibility -## -## The console automatically saves all settings when closed or minimized, and restores -## the exact previous state on next startup, including window position, size, filters, -## and discovered domains. -class_name LoggieConsole extends Window - -# Constants -const LoggieConsoleChannel = preload("res://addons/loggie-console/scripts/loggie_console_channel.gd") -const ConsoleSettingsManager = preload("res://addons/loggie-console/scripts/managers/console_settings_manager.gd") -const LoggieConsoleSettings = preload("res://addons/loggie-console/resources/loggie_console_settings.gd") -const RestoreButtonScene := preload("res://addons/loggie-console/scenes/restore_button.tscn") -const DomainColorManager = preload("res://addons/loggie-console/scripts/domain_color_manager.gd") - - -# UI Constants -const WINDOW_MARGIN_PIXELS: int = 5 - -# Display detection constants -const DEFAULT_DOMAIN_OFFSET: int = 1 # +1 for default domain in total domain count - - -# Exported component references - automatically assigned from scene -@export var buffer: LogBuffer ## Log message display and filtering component -@export var output_level: LogLevelFilter ## Log level selection component -@export var domain_filter: PanelDomainSelector ## Domain multi-selection component -@export var controls: ConsoleControls ## Control buttons and settings component -@export var status_display: StatusDisplay ## Status and statistics display component - -# Settings UI references -var _settings_button: Button ## Settings button in controls -var _settings_panel: LoggieConsoleSettingsPanel ## Settings panel component - - -# Minimize/restore system state -var _restore_button_component: RestoreButton ## Restore button component instance -var _is_minimized: bool = false ## Current minimized state - -# Custom Loggie channel for receiving log messages -var _console_channel: LoggieConsoleChannel ## Direct channel integration with Loggie - -# Component coordination -var _filter_state: LogBuffer.FilterState ## Shared filter state between components - -# Persistence system -var _settings_manager: ConsoleSettingsManager ## Handles save/load operations -var _current_settings: LoggieConsoleSettings ## Current settings instance - -# Domain color management -var _domain_color_manager: DomainColorManager ## Centralized color management for all components - -## Initializes the console window and all its components -## -## This is the main initialization sequence that: -## 1. Loads persistent settings from disk -## 2. Applies window positioning and visibility settings -## 3. Initializes all components with loaded state -## 4. Sets up the custom Loggie channel for message reception -## 5. Connects all necessary signals for runtime operation -## -## The order is critical - settings must be loaded and applied before -## components are initialized to prevent unwanted signal emissions during startup. -func _ready() -> void: - # Initialize persistence system FIRST - _settings_manager = ConsoleSettingsManager.new() - _current_settings = _settings_manager.load_settings() - - _restore_button_component = RestoreButtonScene.instantiate() - _restore_button_component.restore_requested.connect(_on_restore_requested) - - # Apply window settings before component initialization - _apply_window_settings() - - # Connect window signals for persistence - close_requested.connect(_on_close_requested) - - # Initialize components with loaded settings - _initialize_components() - - # Setup save triggers after initialization - _setup_save_triggers() - - # Setup custom channel - _setup_console_channel() - - # Apply loaded filters after components are ready - _apply_loaded_settings() - -## Called by our custom LoggieConsoleChannel with complete message data -## -## This is the main message reception callback that receives log messages directly -## from the Loggie system through our custom channel. Unlike signal-based approaches, -## this provides complete type information including LogLevel and MsgType enums. -## -## @param msg: The original LoggieMsg with all metadata -## @param preprocessed_content: Fully formatted message text from Loggie -## @param msg_type: Message type enum (ERROR, WARNING, DEBUG, STANDARD) -## @param log_level: Log level enum (ERROR, WARN, NOTICE, INFO, DEBUG) -func receive_log_message(msg: LoggieMsg, preprocessed_content: String, msg_type: LoggieEnums.MsgType, log_level: LoggieEnums.LogLevel) -> void: - # Check if we need to add a new domain to our list - if not msg.domain_name.is_empty(): - domain_filter.add_domain(msg.domain_name) - - # Add message to buffer (buffer handles filtering internally) - buffer.add_message(msg, preprocessed_content, msg_type, log_level) - -## Sets up the custom Loggie channel for direct message reception -## -## Creates and registers a LoggieConsoleChannel that provides the console with -## direct access to log messages including complete type information. The channel -## is automatically added to the default channels list so it receives all messages -## by default, without requiring explicit channel targeting in log calls. -func _setup_console_channel() -> void: - # Create and register our custom channel - _console_channel = LoggieConsoleChannel.new() - _console_channel.set_console_window(self) - Loggie.add_channel(_console_channel) - - # Automatically add our channel to the default channels so console receives all messages - var current_defaults: Array = Loggie.settings.default_channels - if not current_defaults.has("loggie_console"): - var new_defaults: Array = current_defaults.duplicate() - new_defaults.append("loggie_console") - Loggie.settings.default_channels = new_defaults - -func _setup_domain_filter() -> void: - # Get all domains dynamically from Loggie - var initial_domains: Array[String] = [""] # Always include default domain - - # Get all registered domains from Loggie - for domain_name: String in Loggie.domains.keys(): - if not initial_domains.has(domain_name): - initial_domains.append(domain_name) - - # Add LoggieConsole internal domain (will appear unselected by default) - if not initial_domains.has(LoggieConsoleConstants.DOMAIN): - var all_domains: Array[String] = initial_domains.duplicate() - all_domains.append(LoggieConsoleConstants.DOMAIN) - - # Initialize the domain selector with all domains (including console domain) - domain_filter.set_domains_with_console_unselected(all_domains, initial_domains, [LoggieConsoleConstants.DOMAIN]) - else: - # Console domain already exists, use standard initialization - domain_filter.set_domains(initial_domains) - domain_filter.domains_changed.connect(_on_domains_changed) - - # Apply initial filter state to buffer (only enabled domains, not internal ones) - _filter_state.enabled_domains = initial_domains - buffer.set_filters(_filter_state) - -func _on_domains_changed(enabled_domains: Array[String]) -> void: - # Update filter state and apply to buffer - _filter_state.enabled_domains = enabled_domains - buffer.set_filters(_filter_state) - - - - -## New component event handlers - -func _on_log_level_changed(new_level: LoggieEnums.LogLevel) -> void: - # Update filter state and apply to buffer - _filter_state.min_log_level = new_level - buffer.set_filters(_filter_state) - -func _on_clear_requested() -> void: - # Clear the buffer - buffer.clear_all() - -func _on_scroll_follow_changed(enabled: bool) -> void: - # Update buffer scroll following - buffer.scroll_following = enabled - -func _on_text_search_changed(search_text: String) -> void: - # Update filter state and apply to buffer - _filter_state.text_search = search_text - buffer.set_filters(_filter_state) - -func _on_stack_filter_changed(enabled: bool) -> void: - # Update filter state and apply to buffer - _filter_state.show_stack_only = enabled - buffer.set_filters(_filter_state) - -func _on_buffer_filter_changed(visible_count: int, total_count: int) -> void: - # Update status display with current counts - var enabled_domains: Array[String] = domain_filter.get_enabled_domains() - var total_domains: int = enabled_domains.size() - if total_domains == 0: - total_domains = Loggie.domains.keys().size() + DEFAULT_DOMAIN_OFFSET - - status_display.update_status(total_count, visible_count, enabled_domains, total_domains) - - -## Minimize/Restore System - - -## Minimizes the console window and shows a floating restore button -## -## This hides the console window and creates a small floating "LOG" button in the -## top-right corner of the main viewport. The button allows restoring the console -## to its previous position and size. All settings are saved before minimizing -## to ensure state persistence. -func minimize_console() -> void: - if _is_minimized: - Loggie.msg("Already minimized, ignoring request").domain(LoggieConsoleConstants.DOMAIN).warn() - return - - # Save current settings including window state before minimizing - _capture_current_state() - _settings_manager.save_settings(_current_settings) - - _is_minimized = true - hide() # Hide the console window - _show_restore_button() - -## Creates and shows the restore button component -## -## Instantiates the RestoreButton scene and displays it in the root viewport. -## Connects the restore_requested signal to handle button clicks and restore the console. -func _show_restore_button() -> void: - _restore_button_component.show_restore_button(get_tree().root) - Loggie.msg("RestoreButton show_restore_button() called").domain(LoggieConsoleConstants.DOMAIN).debug() - -## Handles restore button click events from the RestoreButton component -## -## Called when the RestoreButton component emits its restore_requested signal. -## Triggers the console restoration process. -func _on_restore_requested() -> void: - restore_console() - -## Restores the console window from minimized state -## -## This shows the console window at its previously saved position and size, -## removes the floating restore button, and updates the minimized state. -## The window is restored exactly as it was when minimized. -func restore_console() -> void: - if not _is_minimized: - Loggie.msg("Not minimized, ignoring restore request").domain(LoggieConsoleConstants.DOMAIN).warn() - return - - # Restore to saved position and size from settings - position = _current_settings.window_position - size = _current_settings.window_size - - _is_minimized = false - show() # Show the console window - _hide_restore_button() - -## Hides and cleans up the restore button component -## -## Removes the RestoreButton component from the scene tree and frees its resources. -## Ensures proper cleanup when the console is restored from minimized state. -func _hide_restore_button() -> void: - if _restore_button_component and is_instance_valid(_restore_button_component): - _restore_button_component.hide_restore_button() - Loggie.msg("Restore button component cleaned up").domain(LoggieConsoleConstants.DOMAIN).debug() - -## Applies saved window properties to the console window -## Validates position to ensure window remains visible on current display setup -func _apply_window_settings() -> void: - # Check if we're using embedded subwindows - var subwindows_embedded: bool = ProjectSettings.get_setting("display/window/subwindows/embed_subwindows", true) - - var validated_pos: Vector2i - if subwindows_embedded and _is_outside_viewport(): - validated_pos = _center_window() - else: - # Use existing validation for separate windows or valid embedded positions - validated_pos = _current_settings.validate_window_position() - - position = validated_pos - - # Apply saved window dimensions - size = _current_settings.window_size - - # Apply visibility state - visible = _current_settings.is_visible - - # Apply minimized state (defer restore button creation) - _is_minimized = _current_settings.is_minimized - if _is_minimized: - hide() - # Defer restore button creation until scene tree is ready - _show_restore_button.call_deferred() - -## Checks if console window is outside the main viewport (for embedded subwindows) -func _is_outside_viewport() -> bool: - var viewport_size: Vector2i = Vector2i(get_tree().root.get_visible_rect().size) - var window_rect: Rect2i = Rect2i(_current_settings.window_position, _current_settings.window_size) - var viewport_rect: Rect2i = Rect2i(Vector2i.ZERO, viewport_size) - - # Return true if window is not completely within viewport or has invalid position - return _current_settings.window_position == Vector2i(-1, -1) or not viewport_rect.encloses(window_rect) - -## Centers the console window in the main viewport -func _center_window() -> Vector2i: - var viewport_size: Vector2i = Vector2i(get_tree().root.get_visible_rect().size) - const MARGIN = 50 - var centered_pos: Vector2i = (viewport_size - _current_settings.window_size) / 2 - return Vector2i(maxi(MARGIN, centered_pos.x), maxi(MARGIN, centered_pos.y)) - -## Initializes all console components with loaded settings before connecting signals -## This prevents unwanted signal emissions during the initialization process -func _initialize_components() -> void: - # Initialize base filter state - _filter_state = LogBuffer.FilterState.new() - - # Create domain color manager - _domain_color_manager = DomainColorManager.new() - - # Pass color manager to components that need it - buffer.set_color_manager(_domain_color_manager) - domain_filter.set_color_manager(_domain_color_manager) - - # Load persistent settings into each component - buffer.load_settings_from_resource(_current_settings) - domain_filter.load_settings_from_resource(_current_settings) - controls.load_settings_from_resource(_current_settings) - output_level.load_settings_from_resource(_current_settings) - - # Connect component signals for runtime interaction - output_level.level_changed.connect(_on_log_level_changed) - controls.clear_requested.connect(_on_clear_requested) - controls.scroll_follow_changed.connect(_on_scroll_follow_changed) - controls.text_search_changed.connect(_on_text_search_changed) - controls.stack_filter_changed.connect(_on_stack_filter_changed) - - # Configure buffer with loaded scroll following setting - buffer.filter_changed.connect(_on_buffer_filter_changed) - buffer.scroll_following = controls.is_scroll_follow_enabled() - - # Set up remaining console systems - _setup_domain_filter() - - # Initialize settings UI - _setup_settings_ui() - status_display.reset() - -## Finalizes the loading process by applying loaded filter settings -## Called after component initialization to ensure filters work with existing messages -func _apply_loaded_settings() -> void: - # Apply the loaded filter state to any existing messages - buffer.apply_loaded_filters() - - # Sync domain filter state to ensure consistency - domain_filter.domains_changed.emit(domain_filter.get_enabled_domains()) - - # Apply text size setting to theme - _apply_text_size_to_theme(_current_settings.text_size_multiplier) - - # Apply restore button alignment - _apply_restore_button_alignment(_current_settings.restore_button_alignment) - -## Placeholder for save triggers (not used in exit-tree persistence model) -func _setup_save_triggers() -> void: - pass # Settings saved only on exit tree - -## Captures current state from window and all components into the settings resource -## This is called before each save operation to ensure all current state is preserved -func _capture_current_state() -> void: - # Capture window properties - _current_settings.window_position = position - _current_settings.window_size = size - _current_settings.is_visible = visible - _current_settings.is_minimized = _is_minimized - - # Capture current display index (important when embed_subwindows=false) - _current_settings.display_index = _get_current_display_index() - - # Capture current embed_subwindows setting for change detection - _current_settings.update_embed_setting() - - # Let each component save its own state - buffer.save_settings_to_resource(_current_settings) - domain_filter.save_settings_to_resource(_current_settings) - controls.save_settings_to_resource(_current_settings) - output_level.save_settings_to_resource(_current_settings) - -## Manually saves current console settings to disk -## Useful for forcing a save before potentially destructive operations -func save_settings() -> void: - _capture_current_state() - _settings_manager.save_settings(_current_settings) - -## Handles window close requests by saving settings first, then minimizing -## This ensures settings are preserved even if the console is closed unexpectedly -func _on_close_requested() -> void: - # Preserve settings before minimizing - _capture_current_state() - _settings_manager.save_settings(_current_settings) - - # Continue with normal minimize behavior - minimize_console() - -## Automatically saves settings when console exits the scene tree -## This is the primary save mechanism ensuring settings persist between sessions -func _exit_tree() -> void: - if _settings_manager and _current_settings: - _capture_current_state() - _settings_manager.save_settings(_current_settings) - -## Handles system-level window destruction notifications -## Provides additional safety net for settings preservation -func _notification(what: int) -> void: - if what == NOTIFICATION_WM_CLOSE_REQUEST: - if _settings_manager and _current_settings: - _capture_current_state() - _settings_manager.save_settings(_current_settings) - -## Determines which display the console window is currently on -## Returns: Display index (0-based) where the window center is located -func _get_current_display_index() -> int: - # Calculate window center point - var window_center: Vector2i = position + size / 2 - - # Check which display contains the window center - var screens: int = DisplayServer.get_screen_count() - for i: int in screens: - var screen_rect: Rect2i = DisplayServer.screen_get_usable_rect(i) - if screen_rect.has_point(window_center): - return i - - # Fallback: find display with most window overlap - var max_overlap: int = 0 - var best_display: int = 0 - var window_rect: Rect2i = Rect2i(position, size) - - for i: int in screens: - var screen_rect: Rect2i = DisplayServer.screen_get_usable_rect(i) - var intersection: Rect2i = screen_rect.intersection(window_rect) - var overlap_area: int = intersection.size.x * intersection.size.y - if overlap_area > max_overlap: - max_overlap = overlap_area - best_display = i - - return best_display - -## Sets up the settings UI components and connects their signals -## -## Initializes the settings button and panel component, loads current settings, -## and connects the component's signals for handling settings changes. -func _setup_settings_ui() -> void: - # Get UI component references - _settings_button = get_node("PanelContainer/VBoxContainer/Controls/Settings") - _settings_panel = get_node("SettingsPanel") - - # Connect signals - _settings_button.pressed.connect(_on_settings_button_pressed) - _settings_panel.settings_applied.connect(_on_settings_applied) - _settings_panel.settings_reset.connect(_on_settings_reset) - - # Load current settings into the panel - _settings_panel.set_text_size_multiplier(_current_settings.text_size_multiplier) - _settings_panel.set_restore_button_alignment(_current_settings.restore_button_alignment) - -## Called when the Settings button is pressed -## -## Shows the settings panel dialog with current values loaded. -func _on_settings_button_pressed() -> void: - _settings_panel.show_settings() - -## Called when settings are applied via the settings panel -## -## Saves the new settings and applies them dynamically. -## @param text_size_multiplier: The new text size multiplier value -## @param restore_button_alignment: The new restore button alignment -func _on_settings_applied(text_size_multiplier: float, restore_button_alignment: RestoreButton.Alignment) -> void: - # Update settings - _current_settings.text_size_multiplier = text_size_multiplier - _current_settings.restore_button_alignment = restore_button_alignment as int - _settings_manager.save_settings(_current_settings) - - # Apply text size change to theme - _apply_text_size_to_theme(text_size_multiplier) - - # Apply restore button alignment - _apply_restore_button_alignment(restore_button_alignment as int) - - Loggie.msg("Settings updated: text size %.1fx, alignment %s" % [text_size_multiplier, _get_alignment_name(restore_button_alignment)]).domain(LoggieConsoleConstants.DOMAIN).info() - -## Called when the settings are reset to defaults -## -## Logs the reset action for user feedback. -func _on_settings_reset() -> void: - Loggie.msg("Settings reset to defaults").domain(LoggieConsoleConstants.DOMAIN).info() - -## Dynamically applies text size multiplier to the current theme -## -## Modifies font sizes in the theme resource at runtime to immediately -## reflect the new text size setting without requiring a restart. -## @param multiplier: Text size multiplier (0.5 to 2.0) -func _apply_text_size_to_theme(multiplier: float) -> void: - var console_theme: Theme = get_theme() - if not console_theme: - Loggie.msg("No theme found, cannot apply text size").domain(LoggieConsoleConstants.DOMAIN).error() - return - - # Define base font sizes (from theme_compact.tres) - var base_font_sizes: Dictionary = { - "Button/font_size": 11, - "CheckBox/font_size": 11, - "LineEdit/font_size": 12, - "MenuButton/font_size": 11, - "OptionButton/font_size": 11, - "PopupMenu/font_size": 11, - "RichTextLabel/bold_font_size": 10, - "RichTextLabel/bold_italics_font_size": 10, - "RichTextLabel/italics_font_size": 10, - "RichTextLabel/mono_font_size": 9, - "RichTextLabel/normal_font_size": 10, - "Window/title_font_size": 16 - } - - # Apply multiplier to each font size - for font_path: String in base_font_sizes: - var parts: PackedStringArray = font_path.split("/") - var control_type: String = parts[0] - var property: String = parts[1] - var base_size: int = base_font_sizes[font_path] - var new_size: int = int(base_size * multiplier) - - console_theme.set_font_size(property, control_type, new_size) - - # Theme changes are applied automatically - -## Applies the restore button alignment setting -## -## Updates the restore button position based on the alignment preference. -## @param alignment: Alignment enum value (0=TOP_LEFT, 1=TOP_RIGHT, 2=BOTTOM_LEFT, 3=BOTTOM_RIGHT) -func _apply_restore_button_alignment(alignment: int) -> void: - if not _restore_button_component: - return - - # Set position based on alignment using the RestoreButton's enum - var restore_alignment: RestoreButton.Alignment = alignment as RestoreButton.Alignment - _restore_button_component.set_alignment(restore_alignment) - -## Gets a human-readable name for the alignment enum -## -## @param alignment: The alignment enum value -## @return: String name of the alignment -func _get_alignment_name(alignment: RestoreButton.Alignment) -> String: - match alignment: - RestoreButton.Alignment.TOP_LEFT: - return "Top Left" - RestoreButton.Alignment.TOP_RIGHT: - return "Top Right" - RestoreButton.Alignment.BOTTOM_LEFT: - return "Bottom Left" - RestoreButton.Alignment.BOTTOM_RIGHT: - return "Bottom Right" - _: - return "Unknown" - - diff --git a/addons/loggie-console/scenes/console.gd.uid b/addons/loggie-console/scenes/console.gd.uid deleted file mode 100644 index 76842e9..0000000 --- a/addons/loggie-console/scenes/console.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://64r2in67soep diff --git a/addons/loggie-console/scenes/console.tscn b/addons/loggie-console/scenes/console.tscn deleted file mode 100644 index 9ae2b12..0000000 --- a/addons/loggie-console/scenes/console.tscn +++ /dev/null @@ -1,164 +0,0 @@ -[gd_scene format=3 uid="uid://d0sxs0is80byx"] - -[ext_resource type="Script" uid="uid://64r2in67soep" path="res://addons/loggie-console/scenes/console.gd" id="1_yp485"] -[ext_resource type="PackedScene" uid="uid://dgok5l3frx53m" path="res://addons/loggie-console/scenes/panel_domain_selector.tscn" id="2_domain"] -[ext_resource type="StyleBox" uid="uid://b7k8yo7jfhpue" path="res://addons/loggie-console/assets/inner_panel.tres" id="3_fxnpl"] -[ext_resource type="Script" uid="uid://wah8efffydnu" path="res://addons/loggie-console/scripts/components/log_buffer.gd" id="3_logbuffer"] -[ext_resource type="Theme" uid="uid://c1lnnysnspc6v" path="res://addons/loggie-console/theme_compact.tres" id="4_2cgp1"] -[ext_resource type="Script" uid="uid://d3l2tmf5gym1d" path="res://addons/loggie-console/scripts/components/log_level_filter.gd" id="4_loglevel"] -[ext_resource type="Script" uid="uid://c4f6c3gs8venj" path="res://addons/loggie-console/scripts/components/console_controls.gd" id="5_controls"] -[ext_resource type="Script" uid="uid://whrim6lbiako" path="res://addons/loggie-console/scripts/components/status_display.gd" id="6_status"] -[ext_resource type="Texture2D" uid="uid://ivppb5cqrsak" path="res://addons/loggie-console/assets/NinePatchWindow-InnerRecess.png" id="7_56hvo"] -[ext_resource type="PackedScene" uid="uid://bw8k3yap2n4qv" path="res://addons/loggie-console/scenes/settings_panel.tscn" id="7_settings_panel"] - -[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_20rq3"] -content_margin_left = 4.0 -content_margin_right = 4.0 -content_margin_bottom = 4.0 -texture = ExtResource("7_56hvo") -texture_margin_left = 2.0 -texture_margin_top = 2.0 -texture_margin_right = 2.0 -texture_margin_bottom = 2.0 -axis_stretch_horizontal = 1 -axis_stretch_vertical = 1 -region_rect = Rect2(0, 0, 36, 36) -modulate_color = Color(0.60933, 0.60933, 0.60933, 1) - -[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_njst7"] - -[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_ibivl"] - -[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_0yrjc"] - -[node name="LoggieConsoleWindow" type="Window" unique_id=1024795111 node_paths=PackedStringArray("buffer", "output_level", "domain_filter", "controls", "status_display")] -oversampling_override = 1.0 -title = "Loggie Console" -initial_position = 1 -size = Vector2i(889, 905) -wrap_controls = true -sharp_corners = true -min_size = Vector2i(600, 300) -keep_title_visible = true -theme = ExtResource("4_2cgp1") -script = ExtResource("1_yp485") -buffer = NodePath("PanelContainer/VBoxContainer/PanelContainer/Buffer") -output_level = NodePath("PanelContainer/VBoxContainer/Controls/OutputLevel") -domain_filter = NodePath("PanelContainer/VBoxContainer/Controls/DomainFilter") -controls = NodePath("PanelContainer/VBoxContainer/Controls") -status_display = NodePath("PanelContainer/VBoxContainer/StatusContainer/HBoxContainer/StatusLabel") - -[node name="PanelContainer" type="PanelContainer" parent="." unique_id=1949067581] -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -theme_override_styles/panel = ExtResource("3_fxnpl") - -[node name="VBoxContainer" type="VBoxContainer" parent="PanelContainer" unique_id=1611268808] -layout_mode = 2 - -[node name="Controls" type="HBoxContainer" parent="PanelContainer/VBoxContainer" unique_id=251197975 node_paths=PackedStringArray("clear_button", "scroll_follow_checkbox", "search_input", "stack_filter_checkbox")] -layout_mode = 2 -script = ExtResource("5_controls") -clear_button = NodePath("Clear") -scroll_follow_checkbox = NodePath("ScrollFollow") -search_input = NodePath("../StatusContainer/HBoxContainer/SearchInput") -stack_filter_checkbox = NodePath("StackFilter") - -[node name="OutputLevel" type="OptionButton" parent="PanelContainer/VBoxContainer/Controls" unique_id=751332603] -custom_minimum_size = Vector2(60, 20) -layout_mode = 2 -size_flags_horizontal = 0 -tooltip_text = "Filter by log level" -selected = 3 -item_count = 5 -popup/item_0/text = "ERROR" -popup/item_0/id = 0 -popup/item_1/text = "WARN" -popup/item_1/id = 1 -popup/item_2/text = "NOTICE" -popup/item_2/id = 2 -popup/item_3/text = "INFO" -popup/item_3/id = 3 -popup/item_4/text = "DEBUG" -popup/item_4/id = 4 -script = ExtResource("4_loglevel") - -[node name="ScrollFollow" type="CheckBox" parent="PanelContainer/VBoxContainer/Controls" unique_id=569696074] -custom_minimum_size = Vector2(50, 20) -layout_mode = 2 -size_flags_horizontal = 0 -tooltip_text = "Auto-scroll to newest messages" -button_pressed = true -text = "Follow" - -[node name="StackFilter" type="CheckBox" parent="PanelContainer/VBoxContainer/Controls" unique_id=719019705] -custom_minimum_size = Vector2(80, 20) -layout_mode = 2 -size_flags_horizontal = 0 -tooltip_text = "Show only messages with stack traces" -text = "Stack Only" - -[node name="Clear" type="Button" parent="PanelContainer/VBoxContainer/Controls" unique_id=1133245115] -custom_minimum_size = Vector2(45, 20) -layout_mode = 2 -size_flags_horizontal = 0 -tooltip_text = "Clear console buffer" -text = "Clear" - -[node name="Settings" type="Button" parent="PanelContainer/VBoxContainer/Controls" unique_id=671578664] -custom_minimum_size = Vector2(60, 20) -layout_mode = 2 -size_flags_horizontal = 0 -tooltip_text = "Console settings" -text = "Settings" - -[node name="DomainFilter" parent="PanelContainer/VBoxContainer/Controls" unique_id=582666238 instance=ExtResource("2_domain")] -custom_minimum_size = Vector2(300, 20) -layout_mode = 2 -size_flags_horizontal = 10 - -[node name="PanelContainer" type="PanelContainer" parent="PanelContainer/VBoxContainer" unique_id=2068430600] -layout_mode = 2 -size_flags_vertical = 3 -theme_override_styles/panel = SubResource("StyleBoxTexture_20rq3") - -[node name="Buffer" type="RichTextLabel" parent="PanelContainer/VBoxContainer/PanelContainer" unique_id=1261116881] -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_vertical = 3 -focus_mode = 2 -theme_override_styles/normal = SubResource("StyleBoxEmpty_njst7") -theme_override_styles/focus = SubResource("StyleBoxEmpty_ibivl") -bbcode_enabled = true -scroll_following = true -context_menu_enabled = true -selection_enabled = true -script = ExtResource("3_logbuffer") - -[node name="StatusContainer" type="PanelContainer" parent="PanelContainer/VBoxContainer" unique_id=592277225] -layout_mode = 2 -theme_override_styles/panel = SubResource("StyleBoxEmpty_0yrjc") - -[node name="HBoxContainer" type="HBoxContainer" parent="PanelContainer/VBoxContainer/StatusContainer" unique_id=958031751] -layout_mode = 2 - -[node name="SearchInput" type="LineEdit" parent="PanelContainer/VBoxContainer/StatusContainer/HBoxContainer" unique_id=526298685] -custom_minimum_size = Vector2(200, 20) -layout_mode = 2 -size_flags_horizontal = 2 -placeholder_text = "Filter messages..." -clear_button_enabled = true - -[node name="StatusLabel" type="Label" parent="PanelContainer/VBoxContainer/StatusContainer/HBoxContainer" unique_id=848734114] -layout_mode = 2 -size_flags_horizontal = 8 -theme_override_font_sizes/font_size = 12 -text = "Ready" -horizontal_alignment = 2 -vertical_alignment = 1 -script = ExtResource("6_status") - -[node name="SettingsPanel" parent="." unique_id=1146821245 instance=ExtResource("7_settings_panel")] diff --git a/addons/loggie-console/scenes/domain_item.tscn b/addons/loggie-console/scenes/domain_item.tscn deleted file mode 100644 index 8c9f9e7..0000000 --- a/addons/loggie-console/scenes/domain_item.tscn +++ /dev/null @@ -1,55 +0,0 @@ -[gd_scene load_steps=3 format=3 uid="uid://cjy8b6h1xrq2x"] - -[ext_resource type="Script" uid="uid://dgkxvw0v5n6hq" path="res://addons/loggie-console/scripts/components/domain_item.gd" id="1_domain_item"] -[ext_resource type="Theme" uid="uid://c1lnnysnspc6v" path="res://addons/loggie-console/theme_compact.tres" id="2_theme"] - -[node name="DomainItem" type="Control" node_paths=PackedStringArray("select_checkbox", "only_button", "color_indicator")] -custom_minimum_size = Vector2(280, 32) -layout_mode = 3 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -theme = ExtResource("2_theme") -script = ExtResource("1_domain_item") -select_checkbox = NodePath("HBoxContainer/SelectCheckBox") -only_button = NodePath("OnlyButton") -color_indicator = NodePath("HBoxContainer/ColorIndicator") - -[node name="HBoxContainer" type="HBoxContainer" parent="."] -layout_mode = 1 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 - -[node name="ColorIndicator" type="ColorRect" parent="HBoxContainer"] -custom_minimum_size = Vector2(12, 12) -layout_mode = 2 - -[node name="SelectCheckBox" type="CheckBox" parent="HBoxContainer"] -layout_mode = 2 -size_flags_horizontal = 3 -tooltip_text = "Select/deselect this domain" -theme_override_constants/h_separation = 20 -text_overrun_behavior = 3 - -[node name="OnlyButton" type="Button" parent="."] -modulate = Color(1, 1, 1, 0) -custom_minimum_size = Vector2(45, 24) -layout_mode = 1 -anchors_preset = 6 -anchor_left = 1.0 -anchor_top = 0.5 -anchor_right = 1.0 -anchor_bottom = 0.5 -offset_left = -45.0 -offset_top = -12.0 -offset_bottom = 12.0 -grow_horizontal = 0 -grow_vertical = 2 -tooltip_text = "Select only this domain" -mouse_filter = 2 -text = "Only" diff --git a/addons/loggie-console/scenes/panel_domain_selector.tscn b/addons/loggie-console/scenes/panel_domain_selector.tscn deleted file mode 100644 index 55239a8..0000000 --- a/addons/loggie-console/scenes/panel_domain_selector.tscn +++ /dev/null @@ -1,86 +0,0 @@ -[gd_scene load_steps=4 format=3 uid="uid://dgok5l3frx53m"] - -[ext_resource type="Script" uid="uid://bfmpjs4x3fhte" path="res://addons/loggie-console/scripts/components/panel_domain_selector.gd" id="1_panel_selector"] -[ext_resource type="Theme" uid="uid://c1lnnysnspc6v" path="res://addons/loggie-console/theme_compact.tres" id="2_theme"] -[ext_resource type="StyleBox" uid="uid://b7k8yo7jfhpue" path="res://addons/loggie-console/assets/inner_panel.tres" id="3_panel_style"] - -[node name="PanelDomainSelector" type="Control" node_paths=PackedStringArray("trigger_button", "domain_panel", "select_all_button", "select_none_button", "scroll_container", "domain_list")] -custom_minimum_size = Vector2(100, 20) -layout_mode = 3 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -theme = ExtResource("2_theme") -script = ExtResource("1_panel_selector") -trigger_button = NodePath("TriggerButton") -domain_panel = NodePath("DomainPanel") -select_all_button = NodePath("DomainPanel/PanelContainer/VBoxContainer/SelectionControls/SelectAllButton") -select_none_button = NodePath("DomainPanel/PanelContainer/VBoxContainer/SelectionControls/SelectNoneButton") -scroll_container = NodePath("DomainPanel/PanelContainer/VBoxContainer/ScrollContainer") -domain_list = NodePath("DomainPanel/PanelContainer/VBoxContainer/ScrollContainer/DomainList") - -[node name="TriggerButton" type="Button" parent="."] -layout_mode = 1 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -tooltip_text = "All domains selected (1)" -text = "Domains: All" -text_overrun_behavior = 3 - -[node name="DomainPanel" type="PopupPanel" parent="."] -initial_position = 1 -size = Vector2i(300, 160) -visible = true -min_size = Vector2i(300, 150) - -[node name="PanelContainer" type="PanelContainer" parent="DomainPanel"] -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -offset_left = 2.0 -offset_top = 2.0 -offset_right = -2.0 -offset_bottom = -2.0 -grow_horizontal = 2 -grow_vertical = 2 -theme_override_styles/panel = ExtResource("3_panel_style") - -[node name="VBoxContainer" type="VBoxContainer" parent="DomainPanel/PanelContainer"] -layout_mode = 2 - -[node name="SelectionControls" type="HBoxContainer" parent="DomainPanel/PanelContainer/VBoxContainer"] -layout_mode = 2 -size_flags_vertical = 0 -alignment = 2 - -[node name="SelectAllButton" type="Button" parent="DomainPanel/PanelContainer/VBoxContainer/SelectionControls"] -custom_minimum_size = Vector2(60, 20) -layout_mode = 2 -size_flags_horizontal = 0 -tooltip_text = "Select all domains" -text = "Select All" - -[node name="SelectNoneButton" type="Button" parent="DomainPanel/PanelContainer/VBoxContainer/SelectionControls"] -custom_minimum_size = Vector2(60, 20) -layout_mode = 2 -size_flags_horizontal = 0 -tooltip_text = "Deselect all domains" -text = "None" - -[node name="HSeparator" type="HSeparator" parent="DomainPanel/PanelContainer/VBoxContainer"] -layout_mode = 2 - -[node name="ScrollContainer" type="ScrollContainer" parent="DomainPanel/PanelContainer/VBoxContainer"] -layout_mode = 2 -size_flags_vertical = 3 - -[node name="DomainList" type="VBoxContainer" parent="DomainPanel/PanelContainer/VBoxContainer/ScrollContainer"] -layout_mode = 2 -size_flags_horizontal = 3 -size_flags_vertical = 3 - diff --git a/addons/loggie-console/scenes/restore_button.tscn b/addons/loggie-console/scenes/restore_button.tscn deleted file mode 100644 index 168ce3b..0000000 --- a/addons/loggie-console/scenes/restore_button.tscn +++ /dev/null @@ -1,29 +0,0 @@ -[gd_scene load_steps=3 format=3 uid="uid://cb5mkvrnm3hxn"] - -[ext_resource type="Script" uid="uid://dmyd1gquxy42u" path="res://addons/loggie-console/scripts/components/restore_button.gd" id="1_2h8k5"] -[ext_resource type="Theme" uid="uid://c1lnnysnspc6v" path="res://addons/loggie-console/theme_compact.tres" id="1_o01pp"] - -[node name="LoggieConsoleOverlay" type="CanvasLayer" node_paths=PackedStringArray("restore_button")] -layer = 2147483647 -script = ExtResource("1_2h8k5") -restore_button = NodePath("MarginContainer/Button") - -[node name="MarginContainer" type="MarginContainer" parent="."] -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -mouse_filter = 2 -theme_override_constants/margin_left = 5 -theme_override_constants/margin_top = 5 -theme_override_constants/margin_right = 5 -theme_override_constants/margin_bottom = 5 - -[node name="Button" type="Button" parent="MarginContainer"] -layout_mode = 2 -size_flags_horizontal = 8 -size_flags_vertical = 0 -tooltip_text = "Show Loggie Console" -theme = ExtResource("1_o01pp") -text = " Loggie Console " diff --git a/addons/loggie-console/scenes/settings_panel.tscn b/addons/loggie-console/scenes/settings_panel.tscn deleted file mode 100644 index b817dc0..0000000 --- a/addons/loggie-console/scenes/settings_panel.tscn +++ /dev/null @@ -1,90 +0,0 @@ -[gd_scene load_steps=4 format=3 uid="uid://bw8k3yap2n4qv"] - -[ext_resource type="Theme" uid="uid://c1lnnysnspc6v" path="res://addons/loggie-console/theme_compact.tres" id="1_08jdj"] -[ext_resource type="Script" uid="uid://giuyu6vhhgam" path="res://addons/loggie-console/scripts/components/settings_panel.gd" id="1_settings_panel"] -[ext_resource type="StyleBox" uid="uid://b7k8yo7jfhpue" path="res://addons/loggie-console/assets/inner_panel.tres" id="2_08jdj"] - -[node name="SettingsPanel" type="AcceptDialog" node_paths=PackedStringArray("_text_size_slider", "_text_size_value_label", "_reset_button", "_alignment_option")] -title = "Console Settings" -initial_position = 1 -size = Vector2i(320, 210) -transient = false -sharp_corners = true -theme = ExtResource("1_08jdj") -theme_override_styles/panel = ExtResource("2_08jdj") -ok_button_text = " Apply Changes " -script = ExtResource("1_settings_panel") -_text_size_slider = NodePath("VBoxContainer/TextSizeContainer/TextSizeSlider") -_text_size_value_label = NodePath("VBoxContainer/TextSizeContainer/TextSizeValueLabel") -_reset_button = NodePath("VBoxContainer/ResetContainer/ResetButton") -_alignment_option = NodePath("VBoxContainer/AlignmentContainer/AlignmentOption") - -[node name="VBoxContainer" type="VBoxContainer" parent="."] -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -offset_left = 8.0 -offset_top = 8.0 -offset_right = -8.0 -offset_bottom = -38.0 -grow_horizontal = 2 -grow_vertical = 2 - -[node name="TextSizeContainer" type="HBoxContainer" parent="VBoxContainer"] -layout_mode = 2 - -[node name="TextSizeLabel" type="Label" parent="VBoxContainer/TextSizeContainer"] -layout_mode = 2 -size_flags_horizontal = 3 -text = "Text Size:" -vertical_alignment = 1 - -[node name="TextSizeSlider" type="HSlider" parent="VBoxContainer/TextSizeContainer"] -layout_mode = 2 -size_flags_horizontal = 3 -min_value = 0.5 -max_value = 2.0 -step = 0.1 -value = 1.0 -tick_count = 16 -ticks_on_borders = true - -[node name="TextSizeValueLabel" type="Label" parent="VBoxContainer/TextSizeContainer"] -custom_minimum_size = Vector2(40, 0) -layout_mode = 2 -size_flags_horizontal = 0 -text = "1.0x" -horizontal_alignment = 2 -vertical_alignment = 1 - -[node name="AlignmentContainer" type="HBoxContainer" parent="VBoxContainer"] -layout_mode = 2 - -[node name="AlignmentLabel" type="Label" parent="VBoxContainer/AlignmentContainer"] -layout_mode = 2 -size_flags_horizontal = 3 -text = "Restore Button:" -vertical_alignment = 1 - -[node name="AlignmentOption" type="OptionButton" parent="VBoxContainer/AlignmentContainer"] -layout_mode = 2 -size_flags_horizontal = 3 -selected = 1 -item_count = 4 -popup/item_0/text = "Top Left" -popup/item_0/id = 0 -popup/item_1/text = "Top Right" -popup/item_1/id = 1 -popup/item_2/text = "Bottom Left" -popup/item_2/id = 2 -popup/item_3/text = "Bottom Right" -popup/item_3/id = 3 - -[node name="ResetContainer" type="HBoxContainer" parent="VBoxContainer"] -layout_mode = 2 -alignment = 1 - -[node name="ResetButton" type="Button" parent="VBoxContainer/ResetContainer"] -layout_mode = 2 -size_flags_horizontal = 3 -text = "Reset to Default" diff --git a/addons/loggie-console/scripts/components/console_controls.gd b/addons/loggie-console/scripts/components/console_controls.gd deleted file mode 100644 index 27aee6c..0000000 --- a/addons/loggie-console/scripts/components/console_controls.gd +++ /dev/null @@ -1,104 +0,0 @@ -class_name ConsoleControls extends HBoxContainer - -## Console controls toolbar component -## Manages clear button, scroll follow, and other control elements - -const LoggieConsoleSettings = preload("res://addons/loggie-console/resources/loggie_console_settings.gd") - -# Signals -signal clear_requested() -signal scroll_follow_changed(enabled: bool) -signal text_search_changed(search_text: String) -signal stack_filter_changed(enabled: bool) - -# Exported references to child controls -@export var clear_button: Button -@export var scroll_follow_checkbox: CheckBox -@export var search_input: LineEdit -@export var stack_filter_checkbox: CheckBox - -func _ready() -> void: - _setup_controls() - -## Initialize the controls with default states -func initialize() -> void: - if scroll_follow_checkbox: - scroll_follow_checkbox.button_pressed = true - _on_scroll_follow_toggled(true) - -## Get current scroll follow state -func is_scroll_follow_enabled() -> bool: - return scroll_follow_checkbox.button_pressed if scroll_follow_checkbox else false - -## Set scroll follow state programmatically -func set_scroll_follow(enabled: bool) -> void: - if scroll_follow_checkbox: - scroll_follow_checkbox.button_pressed = enabled - -## Get current text search -func get_search_text() -> String: - return search_input.text if search_input else "" - -## Set search text programmatically -func set_search_text(text: String) -> void: - if search_input: - search_input.text = text - -## Get current stack filter state -func is_stack_filter_enabled() -> bool: - return stack_filter_checkbox.button_pressed if stack_filter_checkbox else false - -## Set stack filter state programmatically -func set_stack_filter(enabled: bool) -> void: - if stack_filter_checkbox: - stack_filter_checkbox.button_pressed = enabled - -## Private methods - -func _setup_controls() -> void: - # Connect clear button if available - if clear_button: - clear_button.pressed.connect(_on_clear_pressed) - clear_button.tooltip_text = "Clear console buffer" - - # Connect scroll follow checkbox if available - if scroll_follow_checkbox: - scroll_follow_checkbox.toggled.connect(_on_scroll_follow_toggled) - scroll_follow_checkbox.tooltip_text = "Auto-scroll to newest messages" - - # Connect search input if available - if search_input: - search_input.text_changed.connect(_on_search_text_changed) - search_input.placeholder_text = "Filter messages..." - - # Connect stack filter checkbox if available - if stack_filter_checkbox: - stack_filter_checkbox.toggled.connect(_on_stack_filter_toggled) - stack_filter_checkbox.tooltip_text = "Show only messages with stack traces" - -func _on_clear_pressed() -> void: - clear_requested.emit() - -func _on_scroll_follow_toggled(enabled: bool) -> void: - scroll_follow_changed.emit(enabled) - -func _on_search_text_changed(new_text: String) -> void: - text_search_changed.emit(new_text) - -func _on_stack_filter_toggled(enabled: bool) -> void: - stack_filter_changed.emit(enabled) - -## Saves current toolbar control states to persistent settings -## Param settings: The settings resource to populate with current control states -func save_settings_to_resource(settings: LoggieConsoleSettings) -> void: - settings.scroll_follow_enabled = is_scroll_follow_enabled() - settings.search_text = get_search_text() - settings.stack_filter_enabled = is_stack_filter_enabled() - -## Loads toolbar control states from persistent settings and applies them -## Updates all UI controls to reflect the loaded state without emitting signals -## Param settings: The settings resource containing saved control states -func load_settings_from_resource(settings: LoggieConsoleSettings) -> void: - set_scroll_follow(settings.scroll_follow_enabled) - set_search_text(settings.search_text) - set_stack_filter(settings.stack_filter_enabled) diff --git a/addons/loggie-console/scripts/components/console_controls.gd.uid b/addons/loggie-console/scripts/components/console_controls.gd.uid deleted file mode 100644 index c088a09..0000000 --- a/addons/loggie-console/scripts/components/console_controls.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://c4f6c3gs8venj diff --git a/addons/loggie-console/scripts/components/domain_item.gd b/addons/loggie-console/scripts/components/domain_item.gd deleted file mode 100644 index b0b92e6..0000000 --- a/addons/loggie-console/scripts/components/domain_item.gd +++ /dev/null @@ -1,166 +0,0 @@ -class_name DomainItem extends Control - -## Custom control for individual domain rows in PanelDomainSelector -## Provides checkbox selection, domain label, and hover-revealed "Only" button - -const DomainColorManager = preload("res://addons/loggie-console/scripts/domain_color_manager.gd") - -# Signals -signal selection_changed(domain_name: String, is_selected: bool) -signal only_button_pressed(domain_name: String) - -# UI Components - exported for scene tree assignment -@export var select_checkbox: CheckBox -@export var only_button: Button -@export var color_indicator: ColorRect - -# Domain state -var _domain_name: String = "" -var _is_hovered: bool = false -var _color_manager: DomainColorManager - -# UI Layout constants -const ITEM_MIN_WIDTH: int = 280 -const ITEM_MIN_HEIGHT: int = 32 - -# Visibility constants for only button hover effect -const ONLY_BUTTON_ALPHA_HIDDEN: float = 0.0 -const ONLY_BUTTON_ALPHA_VISIBLE: float = 1.0 - -## Initializes the domain item control with UI connections and hover behavior -## -## Sets up consistent sizing, signal connections for checkbox and button interactions, -## and configures mouse hover detection for the "Only" button visibility toggle. -## The only button starts hidden and becomes visible on hover with smooth alpha transition. -## Requires select_checkbox and only_button to be properly assigned via @export. -func _ready() -> void: - if not select_checkbox: - return - - # Set minimum size for consistent layout - custom_minimum_size = Vector2(ITEM_MIN_WIDTH, ITEM_MIN_HEIGHT) - - # Connect signals - select_checkbox.toggled.connect(_on_checkbox_toggled) - only_button.pressed.connect(_on_only_button_pressed) - - # Setup hover detection on checkbox (which now contains the text) - select_checkbox.mouse_entered.connect(_on_mouse_entered) - select_checkbox.mouse_exited.connect(_on_mouse_exited) - - # Also setup hover detection on the main control for complete coverage - mouse_entered.connect(_on_mouse_entered) - mouse_exited.connect(_on_mouse_exited) - - - # Initialize only button as hidden - only_button.modulate.a = ONLY_BUTTON_ALPHA_HIDDEN - only_button.mouse_filter = Control.MOUSE_FILTER_IGNORE - -## Set the domain color manager instance -func set_color_manager(color_manager: DomainColorManager) -> void: - _color_manager = color_manager - -## Configures the domain item with a specific domain name and selection state -## -## Sets up the checkbox display text (shows "(default)" for empty domain names), -## configures tooltips for both checkbox and only button, and applies the initial -## selection state. This method should be called after the item is added to the scene tree. -## -## @param domain_name: The domain name to display and track -## @param is_selected: Whether the domain should start as selected -func setup_domain(domain_name: String, is_selected: bool = false) -> void: - _domain_name = domain_name - - if select_checkbox: - var display_name = domain_name if not domain_name.is_empty() else "(default)" - - # Update color indicator instead of modulating checkbox - if _color_manager and color_indicator: - var domain_color = _color_manager.get_domain_color(domain_name) - color_indicator.color = domain_color - - select_checkbox.text = display_name - select_checkbox.tooltip_text = "Select/deselect domain: " + domain_name - select_checkbox.button_pressed = is_selected - - if only_button: - only_button.text = "Only" - only_button.tooltip_text = "Select only this domain: " + domain_name - -## Get the domain name for this item -func get_domain_name() -> String: - return _domain_name - -## Updates the checkbox selection state without emitting signals -## -## Useful for programmatically setting the selection state during bulk operations -## like "Select All" or when loading from saved settings. Uses set_pressed_no_signal -## to avoid triggering selection_changed signals during these operations. -## -## @param is_selected: The new selection state for the checkbox -func set_selected(is_selected: bool) -> void: - if select_checkbox: - select_checkbox.set_pressed_no_signal(is_selected) - -## Get current selection state -func is_selected() -> bool: - return select_checkbox.button_pressed if select_checkbox else false - -## Private methods - -func _on_checkbox_toggled(pressed: bool) -> void: - selection_changed.emit(_domain_name, pressed) - -func _on_only_button_pressed() -> void: - only_button_pressed.emit(_domain_name) - - -func _on_mouse_entered() -> void: - _is_hovered = true - _set_only_button_visibility(true) - -func _on_mouse_exited() -> void: - _is_hovered = false - _set_only_button_visibility(false) - -## Controls the visibility and interaction of the "Only" button based on hover state -## -## Instantly toggles the button's alpha transparency and mouse filter to create -## a hover-reveal effect. When hidden, the button becomes completely transparent -## and ignores mouse input. When visible, it becomes fully opaque and interactive. -## -## @param show: Whether to show (true) or hide (false) the only button -func _set_only_button_visibility(show: bool) -> void: - if not only_button: - return - - # Set visibility instantly - no animation - var target_alpha = ONLY_BUTTON_ALPHA_VISIBLE if show else ONLY_BUTTON_ALPHA_HIDDEN - var target_mouse_filter = Control.MOUSE_FILTER_PASS if show else Control.MOUSE_FILTER_IGNORE - - only_button.modulate.a = target_alpha - only_button.mouse_filter = target_mouse_filter - -func _gui_input(event: InputEvent) -> void: - # Handle keyboard navigation - if event is InputEventKey and event.pressed: - match event.keycode: - KEY_SPACE, KEY_ENTER: - if select_checkbox: - select_checkbox.button_pressed = not select_checkbox.button_pressed - _on_checkbox_toggled(select_checkbox.button_pressed) - accept_event() - KEY_O: - if event.ctrl_pressed: # Ctrl+O for "Only" - _on_only_button_pressed() - accept_event() - -func _notification(what: int) -> void: - match what: - NOTIFICATION_FOCUS_ENTER: - # Add visual focus indication if needed - pass - NOTIFICATION_FOCUS_EXIT: - # Remove visual focus indication if needed - pass diff --git a/addons/loggie-console/scripts/components/domain_item.gd.uid b/addons/loggie-console/scripts/components/domain_item.gd.uid deleted file mode 100644 index b2931e5..0000000 --- a/addons/loggie-console/scripts/components/domain_item.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://dgkxvw0v5n6hq \ No newline at end of file diff --git a/addons/loggie-console/scripts/components/domain_selector.gd b/addons/loggie-console/scripts/components/domain_selector.gd deleted file mode 100644 index 64d76c0..0000000 --- a/addons/loggie-console/scripts/components/domain_selector.gd +++ /dev/null @@ -1,256 +0,0 @@ -class_name DomainSelector extends MenuButton - -## Standalone domain selector component for filtering log messages by domain -## Provides clean interface with proper signal-based communication - -const LoggieConsoleSettings = preload("res://addons/loggie-console/resources/loggie_console_settings.gd") -const DomainColorManager = preload("res://addons/loggie-console/scripts/domain_color_manager.gd") - -# Signals -signal domains_changed(enabled_domains: Array[String]) - -# Properties -var _enabled_domains: Array[String] = [] -var _all_domains: Array[String] = [] -var _domain_popup: PopupMenu -var _color_manager: DomainColorManager - -# Constants -const ALL_ITEM_ID = 0 -const SEPARATOR_ID = 1 -const DOMAIN_ID_OFFSET = 2 - - -func _ready() -> void: - _domain_popup = get_popup() - _domain_popup.id_pressed.connect(_on_domain_selected) - _initialize_empty_state() - -## Set the domain color manager instance -func set_color_manager(color_manager: DomainColorManager) -> void: - _color_manager = color_manager - -## Initialize the selector with available domains -func set_domains(domains: Array[String]) -> void: - _all_domains = domains.duplicate() - _enabled_domains = domains.duplicate() - _rebuild_popup() - _update_button_text() - domains_changed.emit(_enabled_domains) - -## Initialize the selector with all domains, but only enable selected ones -## Console domains appear normally but are unselected by default -func set_domains_with_console_unselected(all_domains: Array[String], enabled_domains: Array[String], console_domains: Array[String]) -> void: - _all_domains = all_domains.duplicate() - _enabled_domains = enabled_domains.duplicate() - _rebuild_popup_with_console_unselected(console_domains) - _update_button_text() - domains_changed.emit(_enabled_domains) - -## Add a new domain to the selector (for dynamic discovery) -func add_domain(domain_name: String) -> void: - if domain_name.is_empty() or _all_domains.has(domain_name): - return - - _all_domains.append(domain_name) - _enabled_domains.append(domain_name) - - # Add new item to popup with color icon - var display_name = _get_domain_display_name(domain_name) - var color_icon = _create_domain_color_icon(domain_name) - var item_id = _get_domain_item_id(_all_domains.size() - 1) - - _domain_popup.add_check_item(display_name, item_id) - _domain_popup.set_item_icon(item_id, color_icon) - _domain_popup.set_item_checked(item_id, true) - - _update_all_checkbox() - _update_button_text() - domains_changed.emit(_enabled_domains) - -## Get currently enabled domains -func get_enabled_domains() -> Array[String]: - return _enabled_domains.duplicate() - -## Check if a domain is enabled -func is_domain_enabled(domain_name: String) -> bool: - return _enabled_domains.has(domain_name) - -## Private methods - -## Create colored icon for domain display in popup -func _create_domain_color_icon(domain_name: String, size: int = 12) -> ImageTexture: - var color: Color = Color.WHITE # Default color - if _color_manager: - color = _color_manager.get_domain_color(domain_name) - - # Create a small colored square image - var image = Image.create(size, size, false, Image.FORMAT_RGBA8) - image.fill(color) - - # Convert to texture - var texture: ImageTexture = ImageTexture.create_from_image(image) - return texture - -## Get display name for domain (without color formatting) -func _get_domain_display_name(domain_name: String) -> String: - return domain_name if not domain_name.is_empty() else "(default)" - -func _initialize_empty_state() -> void: - _domain_popup.clear() - _domain_popup.add_item("No domains available") - _domain_popup.set_item_disabled(0, true) - text = "Domains: None" - -func _rebuild_popup() -> void: - _domain_popup.clear() - - # Add "All" toggle - _domain_popup.add_check_item("All", ALL_ITEM_ID) - _domain_popup.set_item_checked(ALL_ITEM_ID, _enabled_domains.size() == _all_domains.size()) - - # Add separator - _domain_popup.add_separator() - - # Add individual domain items with color icons - for i in range(_all_domains.size()): - var domain_name = _all_domains[i] - var display_name = _get_domain_display_name(domain_name) - var color_icon = _create_domain_color_icon(domain_name) - var item_id = _get_domain_item_id(i) - - _domain_popup.add_check_item(display_name, item_id) - _domain_popup.set_item_icon(item_id, color_icon) - _domain_popup.set_item_checked(item_id, _enabled_domains.has(domain_name)) - -## Builds popup with console domain unselected by default (no separator) -func _rebuild_popup_with_console_unselected(console_domains: Array[String]) -> void: - _domain_popup.clear() - - # Add "All" toggle (only for non-console domains) - _domain_popup.add_check_item("All", ALL_ITEM_ID) - var non_console_domains = [] - for domain in _all_domains: - if not console_domains.has(domain): - non_console_domains.append(domain) - _domain_popup.set_item_checked(ALL_ITEM_ID, _enabled_domains.size() == non_console_domains.size()) - - # Add separator - _domain_popup.add_separator() - - # Add all domain items in order with color icons - for i in range(_all_domains.size()): - var domain_name = _all_domains[i] - var display_name: String - - # Use friendly name for console domain - if console_domains.has(domain_name): - display_name = "LoggieConsole" # Simplified name for console domain - else: - display_name = domain_name if not domain_name.is_empty() else "(default)" - - # Create color icon for the domain - var color_icon = _create_domain_color_icon(domain_name) - - var item_id = _get_domain_item_id(i) - _domain_popup.add_check_item(display_name, item_id) - _domain_popup.set_item_icon(item_id, color_icon) - _domain_popup.set_item_checked(item_id, _enabled_domains.has(domain_name)) - -func _on_domain_selected(id: int) -> void: - if id == ALL_ITEM_ID: - _toggle_all_domains() - else: - _toggle_individual_domain(id) - - _update_all_checkbox() - _update_button_text() - domains_changed.emit(_enabled_domains) - -func _toggle_all_domains() -> void: - var current_all_state = _domain_popup.is_item_checked(ALL_ITEM_ID) - var new_all_state = not current_all_state - - # Update all checkbox - _domain_popup.set_item_checked(ALL_ITEM_ID, new_all_state) - - # Update all domain checkboxes and enabled list - _enabled_domains.clear() - for i in range(_all_domains.size()): - var item_id = _get_domain_item_id(i) - _domain_popup.set_item_checked(item_id, new_all_state) - if new_all_state: - _enabled_domains.append(_all_domains[i]) - -func _toggle_individual_domain(id: int) -> void: - var domain_index = _get_domain_index_from_id(id) - if domain_index < 0 or domain_index >= _all_domains.size(): - Loggie.msg("Invalid domain index %d for ID %d" % [domain_index, id]).domain(LoggieConsoleConstants.DOMAIN).warn() - return - - var domain_name = _all_domains[domain_index] - var current_state = _domain_popup.is_item_checked(id) - var new_state = not current_state - - # Update checkbox - _domain_popup.set_item_checked(id, new_state) - - # Update enabled domains list - if new_state and not _enabled_domains.has(domain_name): - _enabled_domains.append(domain_name) - elif not new_state and _enabled_domains.has(domain_name): - _enabled_domains.erase(domain_name) - -func _update_all_checkbox() -> void: - var all_enabled = _enabled_domains.size() == _all_domains.size() - _domain_popup.set_item_checked(ALL_ITEM_ID, all_enabled) - -func _update_button_text() -> void: - var enabled_count = _enabled_domains.size() - var total_count = _all_domains.size() - - if total_count == 0: - text = "Domains: None" - elif enabled_count == total_count: - text = "Domains: All" - elif enabled_count == 0: - text = "Domains: None" - elif enabled_count == 1: - var domain_name = _enabled_domains[0] - var display_name = _get_domain_display_name(domain_name) - text = "Domains: " + display_name - else: - text = "Domains: %d selected" % enabled_count - -func _get_domain_item_id(domain_index: int) -> int: - return DOMAIN_ID_OFFSET + domain_index - -func _get_domain_index_from_id(item_id: int) -> int: - return item_id - DOMAIN_ID_OFFSET - -## Saves current domain selection state to persistent settings -## Param settings: The settings resource to populate with current domain state -func save_settings_to_resource(settings: LoggieConsoleSettings) -> void: - settings.enabled_domains = _enabled_domains.duplicate() - settings.all_known_domains = _all_domains.duplicate() - -## Loads domain selection state from persistent settings and rebuilds UI -## Automatically validates that enabled domains still exist in the known domains list -## Param settings: The settings resource containing saved domain state -func load_settings_from_resource(settings: LoggieConsoleSettings) -> void: - _all_domains = settings.all_known_domains.duplicate() - _enabled_domains = settings.enabled_domains.duplicate() - - # Remove any enabled domains that no longer exist in all_domains - var valid_enabled_domains: Array[String] = [] - for domain in _enabled_domains: - if _all_domains.has(domain): - valid_enabled_domains.append(domain) - _enabled_domains = valid_enabled_domains - - # Rebuild UI to reflect loaded state - if _all_domains.size() > 0: - _rebuild_popup() - _update_button_text() - else: - _initialize_empty_state() diff --git a/addons/loggie-console/scripts/components/domain_selector.gd.uid b/addons/loggie-console/scripts/components/domain_selector.gd.uid deleted file mode 100644 index 679268a..0000000 --- a/addons/loggie-console/scripts/components/domain_selector.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://bq6xlpjg4qoca diff --git a/addons/loggie-console/scripts/components/log_buffer.gd b/addons/loggie-console/scripts/components/log_buffer.gd deleted file mode 100644 index 80fc2dc..0000000 --- a/addons/loggie-console/scripts/components/log_buffer.gd +++ /dev/null @@ -1,209 +0,0 @@ -class_name LogBuffer extends RichTextLabel - -## Enhanced message buffer with retroactive filtering capabilities -## Stores all messages and applies filters dynamically without losing data - -const LoggieConsoleSettings = preload("res://addons/loggie-console/resources/loggie_console_settings.gd") -const DomainColorManager = preload("res://addons/loggie-console/scripts/domain_color_manager.gd") - -# Signals -signal filter_changed(visible_count: int, total_count: int) - -# Internal message storage -var _all_messages: Array[LogMessage] = [] -var _filtered_messages: Array[LogMessage] = [] -var _current_filters: FilterState - -# Domain color manager reference -var _color_manager: DomainColorManager - -# Memory management constants -const DEFAULT_MAX_MESSAGES: int = 5000 -const CLEANUP_PERCENTAGE: float = 0.2 # Remove 20% of messages when limit reached - -# Memory management -@export var max_messages: int = DEFAULT_MAX_MESSAGES - -## Internal LogMessage class for storing complete message data -class LogMessage: - var msg: LoggieMsg - var preprocessed_content: String - var msg_type: LoggieEnums.MsgType - var log_level: LoggieEnums.LogLevel - var timestamp: float - var enhanced_content: String - - func _init(p_msg: LoggieMsg, p_content: String, p_type: LoggieEnums.MsgType, p_level: LoggieEnums.LogLevel) -> void: - msg = p_msg - preprocessed_content = p_content - msg_type = p_type - log_level = p_level - timestamp = Time.get_unix_time_from_system() - -## Filter state for retroactive filtering -class FilterState: - var enabled_domains: Array[String] = [] - var min_log_level: LoggieEnums.LogLevel = LoggieEnums.LogLevel.DEBUG - var text_search: String = "" - var show_stack_only: bool = false - - func _init() -> void: - # Initialize to show ERROR and above by default (lower numbers = higher priority) - min_log_level = LoggieEnums.LogLevel.DEBUG - -func _ready() -> void: - _current_filters = FilterState.new() - bbcode_enabled = true - -## Set the domain color manager instance -func set_color_manager(color_manager: DomainColorManager) -> void: - _color_manager = color_manager - -## Add a new log message to the buffer -func add_message(msg: LoggieMsg, content: String, msg_type: LoggieEnums.MsgType, log_level: LoggieEnums.LogLevel) -> void: - # Create and store the message - var log_msg: LogMessage = LogMessage.new(msg, content, msg_type, log_level) - log_msg.enhanced_content = _enhance_with_metadata(log_msg) - - _all_messages.append(log_msg) - - # Manage memory if needed - _manage_memory() - - # Apply current filters and rebuild display - _reapply_filters() - -## Set new filter state and reapply filters -func set_filters(filter_state: FilterState) -> void: - _current_filters = filter_state - _reapply_filters() - -## Set text search filter -func set_text_search(search: String) -> void: - if _current_filters.text_search == search: - return - - _current_filters.text_search = search - _reapply_filters() - -## Clear all messages -func clear_all() -> void: - _all_messages.clear() - _filtered_messages.clear() - text = "" - clear() - - # Emit updated counts - filter_changed.emit(0, 0) - -## Get current message counts -func get_message_counts() -> Dictionary: - return { - "total": _all_messages.size(), - "filtered": _filtered_messages.size() - } - -## Saves current buffer state to persistent settings resource -## Param settings: The settings resource to populate with current state -func save_settings_to_resource(settings: LoggieConsoleSettings) -> void: - settings.filter_state.from_filter_state(_current_filters) - settings.max_messages = max_messages - -## Loads buffer state from persistent settings resource -## Note: Does not immediately apply filters to avoid triggering reapply before messages exist -## Param settings: The settings resource containing saved state -func load_settings_from_resource(settings: LoggieConsoleSettings) -> void: - if settings.filter_state: - _current_filters = settings.filter_state.to_filter_state() - max_messages = settings.max_messages - -## Applies previously loaded filter state to existing messages -## Call this after load_settings_from_resource() and message loading is complete -func apply_loaded_filters() -> void: - _reapply_filters() - - -## Private methods - -func _reapply_filters() -> void: - _filtered_messages.clear() - - for msg in _all_messages: - if msg != null and _message_passes_filters(msg, _current_filters): - _filtered_messages.append(msg) - - _rebuild_display() - - # Emit filter change signal - filter_changed.emit(_filtered_messages.size(), _all_messages.size()) - -func _message_passes_filters(msg: LogMessage, filters: FilterState) -> bool: - # Domain check - if no domains are enabled, show no messages - if filters.enabled_domains.size() == 0: - return false - - # If domains are enabled, check if this message's domain is in the enabled list - if not filters.enabled_domains.has(msg.msg.domain_name): - return false - - # Level check - show messages at or above the minimum level (lower numbers = higher priority) - if msg.log_level > filters.min_log_level: - return false - - # Text search - if not filters.text_search.is_empty(): - var search_lower: String = filters.text_search.to_lower() - if not msg.preprocessed_content.to_lower().contains(search_lower): - return false - - # Stack filter - if filters.show_stack_only and not msg.msg.appends_stack: - return false - - return true - -func _rebuild_display() -> void: - # Clear current display - text = "" - clear() - - # Add all filtered messages - for msg in _filtered_messages: - text += msg.enhanced_content + "\n" - -func _enhance_with_metadata(msg: LogMessage) -> String: - var metadata_parts: Array[String] = [] - - metadata_parts.append("[color=%s]%s [/color]" % [Color.DIM_GRAY.to_html(false), Time.get_time_string_from_unix_time(int(msg.timestamp))]) - - if msg.msg.domain_name and not msg.msg.domain_name.is_empty(): - var domain_color_html: String = _color_manager.get_domain_color_html(msg.msg.domain_name) - metadata_parts.append("[color=%s]%s[/color]" % [domain_color_html, msg.msg.domain_name]) - - if msg.msg.domain_name and not msg.msg.domain_name.is_empty(): - metadata_parts.append("[color=%s][%s] [/color]" % [_get_color_for_log_level(msg.log_level).to_html(false), LoggieEnums.LogLevel.keys()[msg.log_level]]) - - return "%s %s" % [" ".join(metadata_parts), msg.msg.content[0]] - -func _get_color_for_log_level(level: LoggieEnums.LogLevel) -> Color: - match level: - LoggieEnums.LogLevel.ERROR: - return Color.RED - LoggieEnums.LogLevel.WARN: - return Color.ORANGE - LoggieEnums.LogLevel.NOTICE: - return Color.GREEN - LoggieEnums.LogLevel.INFO: - return Color.WHITE - LoggieEnums.LogLevel.DEBUG, _: - return Color.AQUA - -## Manages memory by removing oldest messages when buffer limit exceeded -## Uses CLEANUP_PERCENTAGE constant to determine how many messages to remove -func _manage_memory() -> void: - if _all_messages.size() > max_messages: - # Remove oldest messages based on cleanup percentage - var remove_count: int = int(max_messages * CLEANUP_PERCENTAGE) - _all_messages = _all_messages.slice(remove_count) - # Note: This will cause filtered_messages indices to be invalid, - # but _reapply_filters() will be called which rebuilds it diff --git a/addons/loggie-console/scripts/components/log_buffer.gd.uid b/addons/loggie-console/scripts/components/log_buffer.gd.uid deleted file mode 100644 index b7b792d..0000000 --- a/addons/loggie-console/scripts/components/log_buffer.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://wah8efffydnu diff --git a/addons/loggie-console/scripts/components/log_level_filter.gd b/addons/loggie-console/scripts/components/log_level_filter.gd deleted file mode 100644 index 62a9cb7..0000000 --- a/addons/loggie-console/scripts/components/log_level_filter.gd +++ /dev/null @@ -1,62 +0,0 @@ -class_name LogLevelFilter extends OptionButton - -## Standalone log level filter component -## Manages log level selection and syncs with Loggie settings - -const LoggieConsoleSettings = preload("res://addons/loggie-console/resources/loggie_console_settings.gd") - -# Signals -signal level_changed(new_level: LoggieEnums.LogLevel) - -func _ready() -> void: - _setup_level_options() - item_selected.connect(_on_level_selected) - tooltip_text = "Filter by log level" - -## Initialize with current Loggie settings -func initialize() -> void: - selected = Loggie.settings.log_level - level_changed.emit(Loggie.settings.log_level) - -## Get currently selected log level -func get_current_level() -> LoggieEnums.LogLevel: - if selected >= 0 and selected < get_item_count(): - return get_item_id(selected) as LoggieEnums.LogLevel - return LoggieEnums.LogLevel.DEBUG - -## Set log level programmatically -func set_log_level(level: LoggieEnums.LogLevel) -> void: - for i in range(get_item_count()): - if get_item_id(i) == level: - selected = i - break - -## Private methods - -func _setup_level_options() -> void: - clear() - - # Add all log levels as options - for value in LoggieEnums.LogLevel.values(): - var label: String = LoggieEnums.LogLevel.keys()[value] - add_item(label, value) - -func _on_level_selected(index: int) -> void: - var new_level = get_item_id(index) as LoggieEnums.LogLevel - - # Update Loggie settings - Loggie.settings.log_level = new_level - - # Emit change signal - level_changed.emit(new_level) - -## Saves current log level selection to persistent settings -## Param settings: The settings resource to populate with current log level -func save_settings_to_resource(settings: LoggieConsoleSettings) -> void: - settings.set_log_level(get_current_level()) - -## Loads log level selection from persistent settings and applies it -## Updates the UI control to reflect the loaded level without emitting change signals -## Param settings: The settings resource containing saved log level -func load_settings_from_resource(settings: LoggieConsoleSettings) -> void: - set_log_level(settings.get_log_level()) diff --git a/addons/loggie-console/scripts/components/log_level_filter.gd.uid b/addons/loggie-console/scripts/components/log_level_filter.gd.uid deleted file mode 100644 index 85b2fbb..0000000 --- a/addons/loggie-console/scripts/components/log_level_filter.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://d3l2tmf5gym1d diff --git a/addons/loggie-console/scripts/components/panel_domain_selector.gd b/addons/loggie-console/scripts/components/panel_domain_selector.gd deleted file mode 100644 index b87e621..0000000 --- a/addons/loggie-console/scripts/components/panel_domain_selector.gd +++ /dev/null @@ -1,381 +0,0 @@ -class_name PanelDomainSelector extends Control - -## Panel-based domain selector component for filtering log messages by domain -## Provides enhanced UI with vertical list, hover "Only" buttons, and Apply/Cancel workflow -## Drop-in replacement for MenuButton-based DomainSelector with identical API - -const LoggieConsoleSettings = preload("res://addons/loggie-console/resources/loggie_console_settings.gd") -const LoggieConsoleConstants = preload("res://addons/loggie-console/scripts/loggie_console_constants.gd") -const DomainItemScene = preload("res://addons/loggie-console/scenes/domain_item.tscn") -const DomainColorManager = preload("res://addons/loggie-console/scripts/domain_color_manager.gd") - -# Signals - maintains API compatibility with existing DomainSelector -signal domains_changed(enabled_domains: Array[String]) - -# UI Components - exported for scene tree assignment -@export var trigger_button: Button -@export var domain_panel: PopupPanel -@export var select_all_button: Button -@export var select_none_button: Button -@export var scroll_container: ScrollContainer -@export var domain_list: VBoxContainer - -# Domain management -var _all_domains: Array[String] = [] -var _enabled_domains: Array[String] = [] - -# Domain item tracking -var _domain_items: Array[DomainItem] = [] - -# Panel state tracking -var _panel_is_open: bool = false - -# Color management -var _color_manager: DomainColorManager - -# Panel sizing constants -const PANEL_WIDTH: int = 300 -const PANEL_MAX_HEIGHT: int = 400 -const PANEL_MIN_HEIGHT: int = 150 - -# Panel positioning constants -const PANEL_VERTICAL_GAP: int = 2 -const PANEL_HORIZONTAL_MARGIN: int = 10 - -# Domain item layout constants -const DOMAIN_ITEM_HEIGHT: int = 32 -const PANEL_HEADER_HEIGHT: int = 40 -const PANEL_SELECTION_CONTROLS_HEIGHT: int = 28 -const PANEL_FOOTER_HEIGHT: int = 40 -const PANEL_PADDING: int = 20 - - -## Initializes the panel domain selector component -## -## Sets up UI connections, panel sizing, and attempts to load domains from Loggie. -## If no domains are found, initializes an empty state. All UI components must be -## properly assigned via @export variables in the scene for initialization to succeed. -func _ready() -> void: - if not trigger_button: - _initialize_empty_state() - return - - domain_panel.hide() - - # Connect UI signals - trigger_button.pressed.connect(_on_trigger_button_pressed) - select_all_button.pressed.connect(_on_select_all_button_pressed) - select_none_button.pressed.connect(_on_select_none_button_pressed) - - # Connect popup signals to track state - domain_panel.popup_hide.connect(_on_panel_hidden) - domain_panel.about_to_popup.connect(_on_panel_about_to_show) - - # Set initial panel size - domain_panel.size = Vector2(PANEL_WIDTH, PANEL_MIN_HEIGHT) - - # Try to initialize with real Loggie domains first - _initialize_domains_from_loggie() - - # If no domains found, show empty state - if _all_domains.is_empty(): - _initialize_empty_state() - -## Set the domain color manager instance -func set_color_manager(color_manager: DomainColorManager) -> void: - _color_manager = color_manager - -## Initialize the selector with available domains -func set_domains(domains: Array[String]) -> void: - _all_domains = domains.duplicate() - _enabled_domains = domains.duplicate() - _rebuild_domain_list() - _update_trigger_button_text() - domains_changed.emit(_enabled_domains) - -## Initialize the selector with all domains, but only enable selected ones -## Console domains appear normally but are unselected by default -func set_domains_with_console_unselected(all_domains: Array[String], enabled_domains: Array[String], _console_domains: Array[String]) -> void: - _all_domains = all_domains.duplicate() - _enabled_domains = enabled_domains.duplicate() - _rebuild_domain_list() - _update_trigger_button_text() - domains_changed.emit(_enabled_domains) - -## Add a new domain to the selector (for dynamic discovery) -func add_domain(domain_name: String) -> void: - if domain_name.is_empty() or _all_domains.has(domain_name): - return - - _all_domains.append(domain_name) - _enabled_domains.append(domain_name) - - _add_domain_item(domain_name, true) - _update_trigger_button_text() - _update_panel_size() - domains_changed.emit(_enabled_domains) - -## Get currently enabled domains -func get_enabled_domains() -> Array[String]: - return _enabled_domains.duplicate() - -## Check if a domain is enabled -func is_domain_enabled(domain_name: String) -> bool: - return _enabled_domains.has(domain_name) - -## Saves current domain selection state to persistent settings -func save_settings_to_resource(settings: LoggieConsoleSettings) -> void: - settings.enabled_domains = _enabled_domains.duplicate() - settings.all_known_domains = _all_domains.duplicate() - -## Loads domain selection state from persistent settings and rebuilds UI -func load_settings_from_resource(settings: LoggieConsoleSettings) -> void: - _all_domains = settings.all_known_domains.duplicate() - _enabled_domains = settings.enabled_domains.duplicate() - - # Remove any enabled domains that no longer exist in all_domains - var valid_enabled_domains: Array[String] = [] - for domain in _enabled_domains: - if _all_domains.has(domain): - valid_enabled_domains.append(domain) - _enabled_domains = valid_enabled_domains - - # Rebuild UI to reflect loaded state - if _all_domains.size() > 0: - _rebuild_domain_list() - _update_trigger_button_text() - else: - _initialize_empty_state() - -## Private methods - -func _initialize_empty_state() -> void: - if trigger_button: - trigger_button.text = "Domains: None" - trigger_button.tooltip_text = "No domains available" - -func _initialize_domains_from_loggie() -> void: - # Query Loggie for registered domains - if not Loggie: - return - - var loggie_domains: Array[String] = [] - - # Get domains from Loggie's registered domains - for domain_name: String in Loggie.domains.keys(): - if not domain_name.is_empty(): - loggie_domains.append(domain_name) - - # If we found domains, initialize with them - if loggie_domains.size() > 0: - set_domains(loggie_domains) - Loggie.msg("Initialized domain selector with %d domains from Loggie" % loggie_domains.size()).domain(LoggieConsoleConstants.DOMAIN).info() - else: - _initialize_empty_state() - -## Refresh domains from Loggie (useful for dynamic discovery) -func refresh_domains_from_loggie() -> void: - if not Loggie: - return - - var _current_domains: Array[String] = _all_domains.duplicate() - var loggie_domains: Array[String] = [] - - # Get current domains from Loggie - for domain_name: String in Loggie.domains.keys(): - if not domain_name.is_empty(): - loggie_domains.append(domain_name) - - # Add any new domains we discovered - var new_domains_added: bool = false - for domain_name in loggie_domains: - if not _all_domains.has(domain_name): - add_domain(domain_name) - new_domains_added = true - - if new_domains_added: - Loggie.msg("Discovered new domains from Loggie").domain(LoggieConsoleConstants.DOMAIN).info() - -func _on_trigger_button_pressed() -> void: - if _all_domains.is_empty(): - return - - # Only open panel if not already open (button disabled when open) - if not _panel_is_open: - # Position and show panel - domain_panel.popup() - _position_panel() - - -func _on_select_all_button_pressed() -> void: - # Select all domains instantly - _enabled_domains = _all_domains.duplicate() - _update_domain_items_state() - _update_trigger_button_text() - domains_changed.emit(_enabled_domains) - -func _on_select_none_button_pressed() -> void: - # Deselect all domains instantly - _enabled_domains.clear() - _update_domain_items_state() - _update_trigger_button_text() - domains_changed.emit(_enabled_domains) - -## Intelligently positions the domain selection panel relative to the trigger button -## -## Calculates optimal panel placement considering viewport boundaries and trigger button -## position. Prefers positioning below and left-aligned to the trigger button, but will -## adjust to above or right-aligned if necessary to keep the panel fully visible. -## Ensures minimum margins from viewport edges for accessibility. -func _position_panel() -> void: - if not trigger_button: - return - - # Get trigger button global position and size - var button_global_pos: Vector2 = trigger_button.global_position - - var button_size: Vector2 = trigger_button.size - await get_tree().process_frame - var panel_size: Vector2 = domain_panel.size - - # Get viewport rect for boundary checking - var viewport: Viewport = get_viewport() - var viewport_rect: Rect2 = viewport.get_visible_rect() - - # Position directly below button, aligned to left edge - var panel_pos: Vector2i = Vector2i( - button_global_pos.x, - button_global_pos.y + button_size.y + PANEL_VERTICAL_GAP - ) - - # Check if panel would go off-screen horizontally - if panel_pos.x + panel_size.x > viewport_rect.size.x: - # Align to right edge of button instead - panel_pos.x = button_global_pos.x + button_size.x - panel_size.x - # Ensure still within bounds - panel_pos.x = max(PANEL_HORIZONTAL_MARGIN, panel_pos.x) - - # Check if panel would go off-screen vertically - if panel_pos.y + panel_size.y > viewport_rect.size.y: - # Position above button instead - panel_pos.y = button_global_pos.y - panel_size.y - PANEL_VERTICAL_GAP - - # Final boundary check - panel_pos.x = max(PANEL_HORIZONTAL_MARGIN, min(panel_pos.x, viewport_rect.size.x - panel_size.x - PANEL_HORIZONTAL_MARGIN)) - panel_pos.y = max(PANEL_HORIZONTAL_MARGIN, min(panel_pos.y, viewport_rect.size.y - panel_size.y - PANEL_HORIZONTAL_MARGIN)) - - domain_panel.position = get_window().position + panel_pos - -func _rebuild_domain_list() -> void: - # Clear existing domain items - _clear_domain_items() - - # Create new domain items - for domain_name in _all_domains: - var is_enabled: bool = _enabled_domains.has(domain_name) - _add_domain_item(domain_name, is_enabled) - - _update_panel_size() - -func _clear_domain_items() -> void: - for item in _domain_items: - if is_instance_valid(item): - item.queue_free() - _domain_items.clear() - - # Clear any remaining children - for child in domain_list.get_children(): - child.queue_free() - -func _add_domain_item(domain_name: String, is_enabled: bool) -> void: - var item: DomainItem = DomainItemScene.instantiate() - - # Add to scene first - domain_list.add_child(item) - _domain_items.append(item) - - # Set color manager if available - if _color_manager: - item.set_color_manager(_color_manager) - - # Setup domain after adding to scene tree (ensures _ready is called first) - item.setup_domain(domain_name, is_enabled) - - # Connect signals - item.selection_changed.connect(_on_domain_item_selection_changed) - item.only_button_pressed.connect(_on_domain_item_only_pressed) - -## Dynamically adjusts panel size based on the number of domain items -## -## Calculates the optimal panel height by summing all component heights (header, -## selection controls, domain items, footer, and padding). Clamps the result between -## minimum and maximum height constraints to ensure usability and prevent overflow. -func _update_panel_size() -> void: - if not domain_panel or _domain_items.is_empty(): - return - - # Calculate required height based on content - var required_height: int = PANEL_HEADER_HEIGHT + PANEL_SELECTION_CONTROLS_HEIGHT + (_domain_items.size() * DOMAIN_ITEM_HEIGHT) + PANEL_FOOTER_HEIGHT + PANEL_PADDING - var final_height: int = clamp(required_height, PANEL_MIN_HEIGHT, PANEL_MAX_HEIGHT) - - domain_panel.size = Vector2(PANEL_WIDTH, final_height) - -func _update_trigger_button_text() -> void: - if not trigger_button: - return - - var enabled_count: int = _enabled_domains.size() - var total_count: int = _all_domains.size() - - if total_count == 0: - trigger_button.text = "Domains: None" - trigger_button.tooltip_text = "No domains available" - elif enabled_count == total_count: - trigger_button.text = "Domains: All" - trigger_button.tooltip_text = "All domains selected (%d)" % total_count - elif enabled_count == 0: - trigger_button.text = "Domains: None" - trigger_button.tooltip_text = "No domains selected" - elif enabled_count == 1: - var domain_name: String = _enabled_domains[0] - var display_name: String = domain_name if not domain_name.is_empty() else "(default)" - trigger_button.text = "Domains: " + display_name - trigger_button.tooltip_text = "Selected: " + display_name - else: - trigger_button.text = "Domains: %d selected" % enabled_count - trigger_button.tooltip_text = "%d of %d domains selected" % [enabled_count, total_count] - -func _update_domain_items_state() -> void: - for item in _domain_items: - if is_instance_valid(item): - var domain_name: String = item.get_domain_name() - var is_enabled: bool = _enabled_domains.has(domain_name) - item.set_selected(is_enabled) - -func _on_domain_item_selection_changed(domain_name: String, is_selected: bool) -> void: - if is_selected and not _enabled_domains.has(domain_name): - _enabled_domains.append(domain_name) - elif not is_selected and _enabled_domains.has(domain_name): - _enabled_domains.erase(domain_name) - - # Update UI and emit change immediately - _update_trigger_button_text() - domains_changed.emit(_enabled_domains) - -func _on_domain_item_only_pressed(domain_name: String) -> void: - # Clear all selections and select only this domain instantly - _enabled_domains.clear() - _enabled_domains.append(domain_name) - _update_domain_items_state() - _update_trigger_button_text() - domains_changed.emit(_enabled_domains) - -func _on_panel_about_to_show() -> void: - _panel_is_open = true - if trigger_button: - trigger_button.disabled = true - -func _on_panel_hidden() -> void: - _panel_is_open = false - if trigger_button: - trigger_button.disabled = false diff --git a/addons/loggie-console/scripts/components/panel_domain_selector.gd.uid b/addons/loggie-console/scripts/components/panel_domain_selector.gd.uid deleted file mode 100644 index 9e8b0cc..0000000 --- a/addons/loggie-console/scripts/components/panel_domain_selector.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://bfmpjs4x3fhte \ No newline at end of file diff --git a/addons/loggie-console/scripts/components/restore_button.gd b/addons/loggie-console/scripts/components/restore_button.gd deleted file mode 100644 index 5574b4b..0000000 --- a/addons/loggie-console/scripts/components/restore_button.gd +++ /dev/null @@ -1,123 +0,0 @@ -class_name RestoreButton extends CanvasLayer - -## Floating restore button component for minimized LoggieConsole -## -## Self-contained overlay button that appears when the console is minimized. -## Handles its own positioning, styling, and lifecycle management with proper -## cleanup when the console is restored. Designed to be added to the root viewport -## for maximum visibility across all scenes. - -const LoggieConsoleConstants = preload("res://addons/loggie-console/scripts/loggie_console_constants.gd") - -# Alignment constants -enum Alignment { - TOP_LEFT = 0, - TOP_RIGHT = 1, - BOTTOM_LEFT = 2, - BOTTOM_RIGHT = 3 -} - -# Signals -signal restore_requested() ## Emitted when user clicks the restore button -@export var restore_button: Button - -## Initializes the restore button component and sets up styling -## -## Configures the canvas layer for maximum rendering priority, sets up the -## container to fill the viewport, and applies professional styling to the -## restore button. All UI components must be properly assigned via @export. -func _ready() -> void: - Loggie.msg("RestoreButton _ready() called").domain(LoggieConsoleConstants.DOMAIN).debug() - - # Connect button signal - restore_button.pressed.connect(_on_restore_button_pressed) - - Loggie.msg("RestoreButton initialization complete").domain(LoggieConsoleConstants.DOMAIN).debug() - -## Shows the restore button by adding it to the provided scene tree root -## -## This method expects to be called from a parent that has access to the scene tree. -## The parent should pass the root viewport so this component can add itself properly. -## -## @param root_viewport: The root viewport where the button should be added -func show_restore_button(root_viewport: Window = null) -> void: - Loggie.msg("RestoreButton show_restore_button() method called").domain(LoggieConsoleConstants.DOMAIN).debug() - - if not root_viewport: - Loggie.msg("No root viewport available for restore button").domain(LoggieConsoleConstants.DOMAIN).error() - return - - root_viewport.add_child(self) - Loggie.msg("Restore button added to root viewport: %s" % root_viewport.name).domain(LoggieConsoleConstants.DOMAIN).debug() - await get_tree().process_frame - # Ensure visibility - visible = true - Loggie.msg("Restore button visibility set to true").domain(LoggieConsoleConstants.DOMAIN).debug() - - # Force positioning update and debug info - await get_tree().process_frame - -## Hides and removes the restore button from the scene tree -## -## Safely removes the button from its parent and hides it. Handles cleanup -## and ensures proper resource management when the console is restored. -func hide_restore_button() -> void: - Loggie.msg("Hiding restore button").domain(LoggieConsoleConstants.DOMAIN).debug() - - visible = false - - # Remove from parent if attached - if get_parent(): - get_parent().remove_child(self) - Loggie.msg("Restore button removed from parent").domain(LoggieConsoleConstants.DOMAIN).debug() - -## Sets the alignment position of the restore button -## -## Updates the button's position flags to align it to the specified corner of the screen. -## @param alignment: The alignment enum value (TOP_LEFT, TOP_RIGHT, BOTTOM_LEFT, BOTTOM_RIGHT) -func set_alignment(alignment: Alignment) -> void: - if not restore_button: - Loggie.msg("RestoreButton not found, cannot set alignment").domain(LoggieConsoleConstants.DOMAIN).warn() - return - - match alignment: - Alignment.TOP_LEFT: - restore_button.size_flags_horizontal = Control.SIZE_SHRINK_BEGIN # 0 = left align - restore_button.size_flags_vertical = Control.SIZE_SHRINK_BEGIN # 0 = top align - Alignment.TOP_RIGHT: - restore_button.size_flags_horizontal = Control.SIZE_SHRINK_END # 8 = right align - restore_button.size_flags_vertical = Control.SIZE_SHRINK_BEGIN # 0 = top align - Alignment.BOTTOM_LEFT: - restore_button.size_flags_horizontal = Control.SIZE_SHRINK_BEGIN # 0 = left align - restore_button.size_flags_vertical = Control.SIZE_SHRINK_END # 8 = bottom align - Alignment.BOTTOM_RIGHT: - restore_button.size_flags_horizontal = Control.SIZE_SHRINK_END # 8 = right align - restore_button.size_flags_vertical = Control.SIZE_SHRINK_END # 8 = bottom align - - Loggie.msg("Restore button alignment set to: %s" % _get_alignment_name(alignment)).domain(LoggieConsoleConstants.DOMAIN).debug() - -## Gets a human-readable name for the alignment enum -## -## @param alignment: The alignment enum value -## @return: String name of the alignment -func _get_alignment_name(alignment: Alignment) -> String: - match alignment: - Alignment.TOP_LEFT: - return "Top Left" - Alignment.TOP_RIGHT: - return "Top Right" - Alignment.BOTTOM_LEFT: - return "Bottom Left" - Alignment.BOTTOM_RIGHT: - return "Bottom Right" - _: - return "Unknown" - -## Handles restore button click events -## -## Emits the restore_requested signal when the button is pressed, allowing -## the parent console to handle the actual restore logic while keeping -## this component focused solely on UI concerns. -func _on_restore_button_pressed() -> void: - Loggie.msg("Restore button pressed").domain(LoggieConsoleConstants.DOMAIN).debug() - restore_requested.emit() diff --git a/addons/loggie-console/scripts/components/restore_button.gd.uid b/addons/loggie-console/scripts/components/restore_button.gd.uid deleted file mode 100644 index ed782fd..0000000 --- a/addons/loggie-console/scripts/components/restore_button.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://dmyd1gquxy42u diff --git a/addons/loggie-console/scripts/components/settings_panel.gd b/addons/loggie-console/scripts/components/settings_panel.gd deleted file mode 100644 index 0e68368..0000000 --- a/addons/loggie-console/scripts/components/settings_panel.gd +++ /dev/null @@ -1,125 +0,0 @@ -class_name LoggieConsoleSettingsPanel extends AcceptDialog - -## Standalone settings panel component for LoggieConsole -## -## This component provides a clean, reusable interface for adjusting console settings -## such as text size multiplier. It emits signals when settings are changed and provides -## methods to get/set current values. -## -## Signals: -## - settings_applied(text_size_multiplier: float): Emitted when Apply is clicked -## - settings_reset(): Emitted when Reset to Default is clicked -## -## Public Methods: -## - set_text_size_multiplier(value: float): Sets the current text size value -## - get_text_size_multiplier() -> float: Gets the current text size value -## - reset_to_defaults(): Resets all settings to default values - -## Emitted when the user clicks Apply with current settings -signal settings_applied(text_size_multiplier: float, restore_button_alignment: RestoreButton.Alignment) - -## Emitted when the user clicks Reset to Default -signal settings_reset() - -# UI component references - assigned via editor -@export var _text_size_slider: HSlider -@export var _text_size_value_label: Label -@export var _reset_button: Button -@export var _alignment_option: OptionButton ## Optional - may be null in simplified versions - -# Constants -const DEFAULT_TEXT_SIZE_MULTIPLIER: float = 1.0 -const MIN_TEXT_SIZE_MULTIPLIER: float = 0.5 -const MAX_TEXT_SIZE_MULTIPLIER: float = 2.0 -const DEFAULT_RESTORE_BUTTON_ALIGNMENT: RestoreButton.Alignment = RestoreButton.Alignment.TOP_RIGHT - -## Initializes the settings panel and connects internal signals -func _ready() -> void: - # Connect internal UI signals - _text_size_slider.value_changed.connect(_on_text_size_slider_changed) - _reset_button.pressed.connect(_on_reset_button_pressed) - confirmed.connect(_on_apply_pressed) - - # Initialize display - _update_text_size_label(_text_size_slider.value) - -## Sets the text size multiplier value -## -## Updates the slider position and display label to reflect the new value. -## The value is automatically clamped to the valid range (0.5 to 2.0). -## -## @param value: The text size multiplier (will be clamped to valid range) -func set_text_size_multiplier(value: float) -> void: - var clamped_value: float = clampf(value, MIN_TEXT_SIZE_MULTIPLIER, MAX_TEXT_SIZE_MULTIPLIER) - _text_size_slider.value = clamped_value - _update_text_size_label(clamped_value) - -## Gets the current text size multiplier value -## -## @return: The current text size multiplier value from the slider -func get_text_size_multiplier() -> float: - return _text_size_slider.value - -## Sets the restore button alignment -## -## Updates the alignment option button to reflect the new value. -## If the alignment option doesn't exist, the setting is ignored. -## @param alignment: The restore button alignment enum value -func set_restore_button_alignment(alignment: RestoreButton.Alignment) -> void: - if _alignment_option: - _alignment_option.selected = alignment as int - -## Gets the current restore button alignment -## -## @return: The current restore button alignment as an enum value, or default if option doesn't exist -func get_restore_button_alignment() -> RestoreButton.Alignment: - if _alignment_option: - return _alignment_option.selected as RestoreButton.Alignment - else: - return DEFAULT_RESTORE_BUTTON_ALIGNMENT - -## Resets all settings to their default values -## -## This method resets both text size multiplier and alignment to defaults and emits the settings_reset signal. -func reset_to_defaults() -> void: - set_text_size_multiplier(DEFAULT_TEXT_SIZE_MULTIPLIER) - set_restore_button_alignment(DEFAULT_RESTORE_BUTTON_ALIGNMENT) - settings_reset.emit() - -## Shows the settings panel centered on screen -## -## Convenience method that wraps popup_centered() for easier API usage. -func show_settings() -> void: - popup_centered() - -## Called when the text size slider value changes -## -## Updates the value display label to show the current multiplier. -## @param value: The new slider value -func _on_text_size_slider_changed(value: float) -> void: - _update_text_size_label(value) - -## Called when the Reset to Default button is pressed -## -## Resets settings to defaults and emits the settings_reset signal. -func _on_reset_button_pressed() -> void: - reset_to_defaults() - -## Called when the Apply button is pressed -## -## Emits the settings_applied signal with the current settings values. -func _on_apply_pressed() -> void: - settings_applied.emit(get_text_size_multiplier(), get_restore_button_alignment()) - -## Updates the text size value label to show the current multiplier -## -## @param value: The text size multiplier to display -func _update_text_size_label(value: float) -> void: - _text_size_value_label.text = "%.1fx" % value - -## Validates that a text size multiplier value is within acceptable bounds -## -## @param value: The value to validate -## @return: True if the value is valid, false otherwise -func is_valid_text_size_multiplier(value: float) -> bool: - return value >= MIN_TEXT_SIZE_MULTIPLIER and value <= MAX_TEXT_SIZE_MULTIPLIER diff --git a/addons/loggie-console/scripts/components/settings_panel.gd.uid b/addons/loggie-console/scripts/components/settings_panel.gd.uid deleted file mode 100644 index e5f3561..0000000 --- a/addons/loggie-console/scripts/components/settings_panel.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://giuyu6vhhgam diff --git a/addons/loggie-console/scripts/components/status_display.gd b/addons/loggie-console/scripts/components/status_display.gd deleted file mode 100644 index c6dc66e..0000000 --- a/addons/loggie-console/scripts/components/status_display.gd +++ /dev/null @@ -1,55 +0,0 @@ -class_name StatusDisplay extends Label - -## Standalone status display component for console information -## Shows message counts, filter status, and real-time feedback - -func _ready() -> void: - text = "Ready" - horizontal_alignment = HORIZONTAL_ALIGNMENT_RIGHT - -## Update status with message and domain information -func update_status(total_messages: int, filtered_messages: int, enabled_domains: Array[String], total_domains: int) -> void: - var status_text = "" - - if total_messages == 0: - status_text = "Ready" - else: - # Message count display - if filtered_messages == total_messages: - status_text = "%d msgs" % total_messages - else: - status_text = "%d/%d msgs" % [filtered_messages, total_messages] - - # Domain filter info - if total_domains > 0 and enabled_domains.size() < total_domains: - status_text += " | %d/%d domains" % [enabled_domains.size(), total_domains] - - text = status_text - -## Update status when only message counts change (simpler version) -func update_message_counts(total_messages: int, filtered_messages: int) -> void: - if total_messages == 0: - text = "Ready" - elif filtered_messages == total_messages: - text = "%d msgs" % total_messages - else: - text = "%d/%d msgs" % [filtered_messages, total_messages] - -## Show search status when text filtering is active -## @param search_term: Current search filter text -## @param results_count: Number of messages matching the search -## @param total_count: Total number of messages in buffer -func update_search_status(search_term: String, results_count: int, total_count: int) -> void: - if search_term.is_empty(): - update_message_counts(total_count, results_count) - else: - text = "Search: \"%s\" - %d/%d msgs" % [search_term, results_count, total_count] - -## Show loading/processing status with operation name -## @param operation: Name of the operation being performed -func show_processing_status(operation: String) -> void: - text = "%s..." % operation - -## Reset to ready state -func reset() -> void: - text = "Ready" diff --git a/addons/loggie-console/scripts/components/status_display.gd.uid b/addons/loggie-console/scripts/components/status_display.gd.uid deleted file mode 100644 index c986b31..0000000 --- a/addons/loggie-console/scripts/components/status_display.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://whrim6lbiako diff --git a/addons/loggie-console/scripts/domain_color_manager.gd b/addons/loggie-console/scripts/domain_color_manager.gd deleted file mode 100644 index 2f5b866..0000000 --- a/addons/loggie-console/scripts/domain_color_manager.gd +++ /dev/null @@ -1,167 +0,0 @@ -class_name DomainColorManager extends RefCounted - -## Centralized domain color management for LoggieConsole -## Provides consistent color mapping across all console components - -## Domain color mapping information -class DomainColorInfo: - var domain_name: String - var color: Color - var palette_index: int - var cycle_count: int - var is_variation: bool - - func _init(p_domain_name: String, p_color: Color, p_palette_index: int, p_cycle_count: int) -> void: - domain_name = p_domain_name - color = p_color - palette_index = p_palette_index - cycle_count = p_cycle_count - is_variation = p_cycle_count > 0 - -## Color usage statistics and diagnostic information -class ColorUsageInfo: - var total_domains: int - var palette_size: int - var current_cycle: int - var next_color_index: int - var remaining_in_current_cycle: int - var has_color_variations: bool - - func _init(p_total_domains: int, p_palette_size: int, p_current_cycle: int, p_next_color_index: int, p_remaining_in_current_cycle: int, p_has_color_variations: bool) -> void: - total_domains = p_total_domains - palette_size = p_palette_size - current_cycle = p_current_cycle - next_color_index = p_next_color_index - remaining_in_current_cycle = p_remaining_in_current_cycle - has_color_variations = p_has_color_variations - -# Domain color mapping storage -var _domain_colors: Dictionary = {} # String -> DomainColorInfo -var _color_index: int = 0 - -# Predefined color palette for domains -const DOMAIN_COLOR_PALETTE: Array[Color] = [ - Color("#FF6B6B"), # Red - Color("#4ECDC4"), # Teal - Color("#45B7D1"), # Blue - Color("#96CEB4"), # Green - Color("#FECA57"), # Yellow - Color("#FF9FF3"), # Pink - Color("#54A0FF"), # Light Blue - Color("#5F27CD"), # Purple - Color("#00D2D3"), # Cyan - Color("#FF9F43"), # Orange - Color("#10AC84"), # Mint - Color("#EE5A24"), # Dark Orange - Color("#0984E3"), # Royal Blue - Color("#6C5CE7"), # Violet - Color("#A29BFE"), # Light Purple - Color("#FD79A8"), # Rose - Color("#FDCB6E"), # Light Yellow - Color("#6C5CE7"), # Indigo - Color("#00B894"), # Emerald - Color("#E84393") # Magenta -] - - -## Get or assign a color for a domain -func get_domain_color(domain: String) -> Color: - if domain.is_empty(): - return Color.WHITE - - if not _domain_colors.has(domain): - # Assign a new color from the palette with potential variations - var palette_index: int = _color_index % DOMAIN_COLOR_PALETTE.size() - var cycle_count: int = _color_index / DOMAIN_COLOR_PALETTE.size() - - var base_color: Color = DOMAIN_COLOR_PALETTE[palette_index] - var color: Color = _get_color_variation(base_color, cycle_count) - - var new_color_info: DomainColorInfo = DomainColorInfo.new(domain, color, palette_index, cycle_count) - _domain_colors[domain] = new_color_info - _color_index += 1 - - var existing_color_info: DomainColorInfo = _domain_colors[domain] as DomainColorInfo - return existing_color_info.color - -## Get HTML color string for domain (for BBCode) -func get_domain_color_html(domain: String) -> String: - return get_domain_color(domain).to_html(false) - -## Check if domain has assigned color -func has_domain_color(domain: String) -> bool: - return _domain_colors.has(domain) - -## Get domain color information for a specific domain -func get_domain_color_info(domain: String) -> DomainColorInfo: - if not _domain_colors.has(domain): - # Trigger color assignment by calling get_domain_color - get_domain_color(domain) - - return _domain_colors[domain] as DomainColorInfo - -## Get all registered domains with their color information -func get_all_domain_color_infos() -> Array[DomainColorInfo]: - var infos: Array[DomainColorInfo] = [] - for domain_color_info: DomainColorInfo in _domain_colors.values(): - infos.append(domain_color_info) - return infos - -## Get diagnostic information about color usage and cycles -func get_color_usage_info() -> ColorUsageInfo: - var current_cycle: int = _color_index / DOMAIN_COLOR_PALETTE.size() - var remaining_in_cycle: int = DOMAIN_COLOR_PALETTE.size() - (_color_index % DOMAIN_COLOR_PALETTE.size()) - - return ColorUsageInfo.new( - _domain_colors.size(), - DOMAIN_COLOR_PALETTE.size(), - current_cycle, - _color_index % DOMAIN_COLOR_PALETTE.size(), - remaining_in_cycle, - current_cycle > 0 - ) - -## Clear all color assignments (for testing/reset) -func clear_all_colors() -> void: - _domain_colors.clear() - _color_index = 0 - -## Get the color palette for reference -func get_color_palette() -> Array[Color]: - return DOMAIN_COLOR_PALETTE - -## Create color variations for domains beyond the initial palette -## Uses brightness and saturation adjustments to create distinguishable variations -func _get_color_variation(base_color: Color, cycle_count: int) -> Color: - if cycle_count == 0: - # First cycle - use original colors - return base_color - - # Get HSV components directly from Color - var hue: float = base_color.h - var saturation: float = base_color.s - var value: float = base_color.v - - match cycle_count: - 1: - # Second cycle - Increase brightness - value = minf(value * 1.3, 1.0) - 2: - # Third cycle - Decrease saturation (more pastel) - saturation = maxf(saturation * 0.6, 0.3) - 3: - # Fourth cycle - Decrease brightness - value = maxf(value * 0.7, 0.4) - 4: - # Fifth cycle - High saturation, medium brightness - saturation = minf(saturation * 1.2, 1.0) - value = maxf(minf(value * 0.85, 1.0), 0.5) - _: - # Beyond fifth cycle - Use mathematical variations - var brightness_mod: float = 1.0 + (cycle_count % 3) * 0.25 - 0.25 # -0.25, 0, +0.25 - var saturation_mod: float = 1.0 + ((cycle_count + 1) % 3) * 0.2 - 0.2 # -0.2, 0, +0.2 - - value = maxf(minf(value * brightness_mod, 1.0), 0.3) - saturation = maxf(minf(saturation * saturation_mod, 1.0), 0.2) - - return Color.from_hsv(hue, saturation, value) diff --git a/addons/loggie-console/scripts/domain_color_manager.gd.uid b/addons/loggie-console/scripts/domain_color_manager.gd.uid deleted file mode 100644 index 76aefc2..0000000 --- a/addons/loggie-console/scripts/domain_color_manager.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://x0ut5e0gpyu1 diff --git a/addons/loggie-console/scripts/loggie_console_channel.gd b/addons/loggie-console/scripts/loggie_console_channel.gd deleted file mode 100644 index 165ed6f..0000000 --- a/addons/loggie-console/scripts/loggie_console_channel.gd +++ /dev/null @@ -1,66 +0,0 @@ -class_name LoggieConsoleChannel extends LoggieMsgChannel - -## Custom Loggie channel that feeds messages directly to the LoggieConsole -## This channel captures all message metadata (level, type, domain, channels, stack info) -## without requiring string parsing - - -# Reference to the console window that will display messages -var _console_window: LoggieConsole - -func _init() -> void: - ID = "loggie_console" - # Enable all preprocessing steps to get complete information - preprocess_flags = ( - LoggieEnums.PreprocessStep.APPEND_TIMESTAMPS | - LoggieEnums.PreprocessStep.APPEND_DOMAIN_NAME | - LoggieEnums.PreprocessStep.APPEND_CLASS_NAME - ) - -## Sets the console window that will receive messages from this channel -## @param window: The console window instance, must not be null -func set_console_window(window: LoggieConsole) -> void: - if window == null: - Loggie.msg("Cannot set null console window").domain(LoggieConsoleConstants.DOMAIN).error() - return - _console_window = window - -## Override send method to pass complete message data to console -## @param msg: The Loggie message object containing all metadata -## @param msg_type: The message type enum from Loggie -func send(msg: LoggieMsg, msg_type: LoggieEnums.MsgType) -> void: - if _console_window == null: - Loggie.msg("No console window set, message dropped").domain(LoggieConsoleConstants.DOMAIN).warn() - return - - if msg == null: - Loggie.msg("Received null message").domain(LoggieConsoleConstants.DOMAIN).error() - return - - # Get the preprocessed text (already formatted by Loggie) - var preprocessed_text = msg.last_preprocess_result - - # Determine log level from the message content patterns or message type - var log_level = _determine_log_level(msg, msg_type, preprocessed_text) - - # Send complete message data to console - _console_window.receive_log_message(msg, preprocessed_text, msg_type, log_level) - -## Determine the log level based on message type and content -func _determine_log_level(_msg: LoggieMsg, msg_type: LoggieEnums.MsgType, content: String) -> LoggieEnums.LogLevel: - # Use message type to infer log level - match msg_type: - LoggieEnums.MsgType.ERROR: - return LoggieEnums.LogLevel.ERROR - LoggieEnums.MsgType.WARN: - return LoggieEnums.LogLevel.WARN - LoggieEnums.MsgType.DEBUG: - return LoggieEnums.LogLevel.DEBUG - LoggieEnums.MsgType.INFO: - # For standard messages, check content patterns to determine level - if content.contains("[NOTICE]"): - return LoggieEnums.LogLevel.NOTICE - else: - return LoggieEnums.LogLevel.INFO - _: - return LoggieEnums.LogLevel.INFO diff --git a/addons/loggie-console/scripts/loggie_console_channel.gd.uid b/addons/loggie-console/scripts/loggie_console_channel.gd.uid deleted file mode 100644 index d561040..0000000 --- a/addons/loggie-console/scripts/loggie_console_channel.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://bcehgenffbmr3 diff --git a/addons/loggie-console/scripts/loggie_console_constants.gd b/addons/loggie-console/scripts/loggie_console_constants.gd deleted file mode 100644 index cea8304..0000000 --- a/addons/loggie-console/scripts/loggie_console_constants.gd +++ /dev/null @@ -1,9 +0,0 @@ -class_name LoggieConsoleConstants extends RefCounted - -## Centralized constants for the LoggieConsole addon -## -## Contains all shared constants used across LoggieConsole components to ensure -## consistency and avoid duplication. Use StringName for efficient string operations. - -## Domain for all LoggieConsole logging messages -const DOMAIN: StringName = &"LOGGIE_CONSOLE" diff --git a/addons/loggie-console/scripts/loggie_console_constants.gd.uid b/addons/loggie-console/scripts/loggie_console_constants.gd.uid deleted file mode 100644 index 683a374..0000000 --- a/addons/loggie-console/scripts/loggie_console_constants.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://7iexr4yxwqfg diff --git a/addons/loggie-console/scripts/managers/console_settings_manager.gd b/addons/loggie-console/scripts/managers/console_settings_manager.gd deleted file mode 100644 index 95f758e..0000000 --- a/addons/loggie-console/scripts/managers/console_settings_manager.gd +++ /dev/null @@ -1,96 +0,0 @@ -class_name ConsoleSettingsManager extends RefCounted - -## Manages persistent storage of LoggieConsole settings -## -## Provides robust save/load functionality with automatic backup creation and -## comprehensive error handling. Settings are saved immediately when requested -## (no debouncing) and loaded with fallback to backup file or defaults. - -const LoggieConsoleSettings = preload("res://addons/loggie-console/resources/loggie_console_settings.gd") - -# File paths and configuration -const SETTINGS_PATH = "user://loggie_console_settings.tres" -const BACKUP_PATH = "user://loggie_console_settings_backup.tres" -const SETTINGS_RESOURCE_TYPE = "LoggieConsoleSettings" - -## Loads console settings with comprehensive error handling and fallback chain -## -## Load order: primary file → backup file → create defaults -## All loaded settings are validated and sanitized before returning. -## Returns: A valid LoggieConsoleSettings instance (never null) -func load_settings() -> LoggieConsoleSettings: - var settings: LoggieConsoleSettings = null - - # Attempt to load primary settings file - settings = _try_load_file(SETTINGS_PATH, "main settings") - - # Fall back to backup file if primary failed - if settings == null: - settings = _try_load_file(BACKUP_PATH, "backup settings") - - # Create default settings if both files failed - if settings == null: - Loggie.msg("Creating default console settings").domain(LoggieConsoleConstants.DOMAIN).info() - settings = LoggieConsoleSettings.new() - - # Always validate to ensure data integrity - settings.validate() - - Loggie.msg("Console settings loaded successfully").domain(LoggieConsoleConstants.DOMAIN).debug() - return settings - -## Saves console settings to disk immediately with backup creation -## -## Creates a backup of the existing file before saving, then validates -## the settings and writes them using Godot's ResourceSaver. -## Param settings: The settings to save (must not be null) -## Returns: true if save succeeded, false if it failed -func save_settings(settings: LoggieConsoleSettings) -> bool: - return _save_with_backup(settings) - -## Attempts to load a settings file with error handling -## Param path: File path to load from -## Param description: Human-readable description for logging -## Returns: Loaded settings or null if loading failed -func _try_load_file(path: String, description: String) -> LoggieConsoleSettings: - if not FileAccess.file_exists(path): - Loggie.msg("Settings file not found: %s" % path).domain(LoggieConsoleConstants.DOMAIN).debug() - return null - - var resource: Resource = ResourceLoader.load(path, SETTINGS_RESOURCE_TYPE) - if resource == null: - Loggie.msg("Failed to load %s from: %s" % [description, path]).domain(LoggieConsoleConstants.DOMAIN).warn() - return null - - if not resource is LoggieConsoleSettings: - Loggie.msg("Invalid resource type in %s: %s" % [description, path]).domain(LoggieConsoleConstants.DOMAIN).error() - return null - - Loggie.msg("Loaded %s from: %s" % [description, path]).domain(LoggieConsoleConstants.DOMAIN).debug() - return resource as LoggieConsoleSettings - -## Saves settings with automatic backup creation -## Param settings: The settings to save -## Returns: true if save succeeded, false otherwise -func _save_with_backup(settings: LoggieConsoleSettings) -> bool: - if not settings: - Loggie.msg("Cannot save null settings").domain(LoggieConsoleConstants.DOMAIN).error() - return false - - # Validate settings before saving - settings.validate() - - # Create backup of existing file before overwriting - if FileAccess.file_exists(SETTINGS_PATH): - var dir: DirAccess = DirAccess.open("user://") - if dir: - dir.copy(SETTINGS_PATH, BACKUP_PATH) - - # Save the validated settings - var error: Error = ResourceSaver.save(settings, SETTINGS_PATH) - if error != OK: - Loggie.msg("Failed to save console settings: %s" % error_string(error)).domain(LoggieConsoleConstants.DOMAIN).error() - return false - - Loggie.msg("Console settings saved successfully").domain(LoggieConsoleConstants.DOMAIN).debug() - return true diff --git a/addons/loggie-console/scripts/managers/console_settings_manager.gd.uid b/addons/loggie-console/scripts/managers/console_settings_manager.gd.uid deleted file mode 100644 index 32b2998..0000000 --- a/addons/loggie-console/scripts/managers/console_settings_manager.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://bntgmwyauc4h6 diff --git a/addons/loggie-console/theme_compact.tres b/addons/loggie-console/theme_compact.tres deleted file mode 100644 index 4d529ea..0000000 --- a/addons/loggie-console/theme_compact.tres +++ /dev/null @@ -1,141 +0,0 @@ -[gd_resource type="Theme" format=3 uid="uid://c1lnnysnspc6v"] - -[ext_resource type="StyleBox" uid="uid://dolgdjpxlvt8f" path="res://addons/loggie-console/assets/inner_panel_recess.tres" id="1_nubd1"] -[ext_resource type="Texture2D" uid="uid://bhps6csrl6lef" path="res://addons/loggie-console/assets/close.png" id="1_rapoa"] -[ext_resource type="StyleBox" uid="uid://bpkqcbx15ejak" path="res://addons/loggie-console/assets/outer_panel.tres" id="2_rapoa"] -[ext_resource type="StyleBox" uid="uid://cfafk3ybc15uo" path="res://addons/loggie-console/assets/outer_window_panel.tres" id="3_f200k"] -[ext_resource type="StyleBox" uid="uid://b7k8yo7jfhpue" path="res://addons/loggie-console/assets/inner_panel.tres" id="3_p21dw"] - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_button_normal"] -content_margin_left = 3.0 -content_margin_top = 1.0 -content_margin_right = 3.0 -content_margin_bottom = 1.0 -bg_color = Color(0.25, 0.25, 0.25, 1) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color(0.4, 0.4, 0.4, 1) - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_checkbox_normal"] -bg_color = Color(0.15, 0.15, 0.15, 1) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color(0.4, 0.4, 0.4, 1) - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_panel"] -bg_color = Color(0.15, 0.15, 0.15, 0.95) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color(0.3, 0.3, 0.3, 1) - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_richtextlabel"] -content_margin_left = 1.0 -content_margin_top = 1.0 -content_margin_right = 1.0 -content_margin_bottom = 1.0 -bg_color = Color(0.1, 0.1, 0.1, 1) -border_width_left = 1 -border_width_top = 1 -border_width_right = 1 -border_width_bottom = 1 -border_color = Color(0.3, 0.3, 0.3, 1) - -[sub_resource type="SystemFont" id="SystemFont_f200k"] -font_names = PackedStringArray("Monospace") -font_weight = 800 -generate_mipmaps = true -multichannel_signed_distance_field = true - -[resource] -Button/colors/font_color = Color(0.9, 0.9, 0.9, 1) -Button/colors/font_disabled_color = Color(0.5, 0.5, 0.5, 1) -Button/colors/font_hover_color = Color(1, 1, 1, 1) -Button/colors/font_pressed_color = Color(0.8, 0.8, 0.8, 1) -Button/font_sizes/font_size = 11 -Button/styles/disabled = SubResource("StyleBoxFlat_button_normal") -Button/styles/hover = ExtResource("2_rapoa") -Button/styles/normal = ExtResource("2_rapoa") -Button/styles/pressed = ExtResource("1_nubd1") -CheckBox/colors/font_color = Color(0.9, 0.9, 0.9, 1) -CheckBox/colors/font_disabled_color = Color(0.5, 0.5, 0.5, 1) -CheckBox/colors/font_hover_color = Color(1, 1, 1, 1) -CheckBox/colors/font_pressed_color = Color(0.8, 0.8, 0.8, 1) -CheckBox/font_sizes/font_size = 11 -CheckBox/styles/disabled = SubResource("StyleBoxFlat_checkbox_normal") -CheckBox/styles/hover_pressed = ExtResource("2_rapoa") -CheckBox/styles/normal = ExtResource("2_rapoa") -CheckBox/styles/pressed = ExtResource("2_rapoa") -HBoxContainer/constants/separation = 2 -LineEdit/colors/caret_color = Color(1, 1, 1, 1) -LineEdit/colors/clear_button_color = Color(0, 0, 0, 1) -LineEdit/colors/clear_button_color_pressed = Color(0, 0, 0, 1) -LineEdit/colors/font_color = Color(1, 1, 1, 1) -LineEdit/colors/font_outline_color = Color(0, 0, 0, 1) -LineEdit/colors/font_placeholder_color = Color(0.447904, 0.509153, 0.407339, 1) -LineEdit/colors/font_selected_color = Color(0.792157, 0.901961, 0.85098, 1) -LineEdit/colors/font_uneditable_color = Color(0, 0, 0, 1) -LineEdit/colors/selection_color = Color(0.188235, 0.219608, 0.262745, 1) -LineEdit/constants/caret_width = 0 -LineEdit/constants/minimum_character_width = 0 -LineEdit/constants/outline_size = 0 -LineEdit/font_sizes/font_size = 12 -LineEdit/fonts/font = null -LineEdit/icons/clear = null -LineEdit/styles/focus = ExtResource("1_nubd1") -LineEdit/styles/normal = ExtResource("1_nubd1") -LineEdit/styles/read_only = ExtResource("3_p21dw") -MarginContainer/constants/margin_bottom = 1 -MarginContainer/constants/margin_left = 1 -MarginContainer/constants/margin_right = 1 -MarginContainer/constants/margin_top = 1 -MenuButton/colors/font_color = Color(0.9, 0.9, 0.9, 1) -MenuButton/colors/font_disabled_color = Color(0.5, 0.5, 0.5, 1) -MenuButton/colors/font_hover_color = Color(1, 1, 1, 1) -MenuButton/colors/font_pressed_color = Color(0.8, 0.8, 0.8, 1) -MenuButton/font_sizes/font_size = 11 -MenuButton/styles/hover = ExtResource("1_nubd1") -MenuButton/styles/normal = ExtResource("2_rapoa") -MenuButton/styles/pressed = ExtResource("2_rapoa") -OptionButton/colors/font_color = Color(0.9, 0.9, 0.9, 1) -OptionButton/colors/font_disabled_color = Color(0.5, 0.5, 0.5, 1) -OptionButton/colors/font_hover_color = Color(1, 1, 1, 1) -OptionButton/colors/font_pressed_color = Color(0.8, 0.8, 0.8, 1) -OptionButton/font_sizes/font_size = 11 -OptionButton/styles/disabled = ExtResource("3_f200k") -OptionButton/styles/hover = ExtResource("1_nubd1") -OptionButton/styles/normal = ExtResource("1_nubd1") -OptionButton/styles/pressed = ExtResource("1_nubd1") -Panel/styles/panel = SubResource("StyleBoxFlat_panel") -PopupMenu/colors/font_color = Color(0.9, 0.9, 0.9, 1) -PopupMenu/colors/font_hover_color = Color(1, 1, 1, 1) -PopupMenu/colors/font_separator_color = Color(0.5, 0.5, 0.5, 1) -PopupMenu/font_sizes/font_size = 11 -PopupMenu/styles/hover = ExtResource("1_nubd1") -PopupMenu/styles/normal = ExtResource("1_nubd1") -PopupMenu/styles/panel = ExtResource("2_rapoa") -PopupPanel/styles/panel = ExtResource("2_rapoa") -RichTextLabel/colors/default_color = Color(0.9, 0.9, 0.9, 1) -RichTextLabel/colors/selection_color = Color(0.4, 0.6, 0.8, 0.4) -RichTextLabel/font_sizes/bold_font_size = 10 -RichTextLabel/font_sizes/bold_italics_font_size = 10 -RichTextLabel/font_sizes/italics_font_size = 10 -RichTextLabel/font_sizes/mono_font_size = 9 -RichTextLabel/font_sizes/normal_font_size = 10 -RichTextLabel/styles/normal = SubResource("StyleBoxFlat_richtextlabel") -VBoxContainer/constants/separation = 2 -Window/colors/title_color = Color(0.175119, 0.187776, 0.176406, 1) -Window/constants/close_h_offset = 18 -Window/constants/close_v_offset = 20 -Window/constants/title_height = 22 -Window/font_sizes/title_font_size = 16 -Window/fonts/title_font = SubResource("SystemFont_f200k") -Window/icons/close = ExtResource("1_rapoa") -Window/icons/close_pressed = ExtResource("1_rapoa") -Window/styles/embedded_border = ExtResource("3_f200k") -Window/styles/embedded_unfocused_border = ExtResource("3_f200k") diff --git a/addons/loggie/assets/icon.png b/addons/loggie/assets/icon.png deleted file mode 100644 index 59c10f9939942a75fa72c6a7f2c7c738f127bb39..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16039 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 diff --git a/addons/loggie/assets/icon.png.import b/addons/loggie/assets/icon.png.import deleted file mode 100644 index 9cad268..0000000 --- a/addons/loggie/assets/icon.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://2fr6et0qni2y" -path="res://.godot/imported/icon.png-57313fc4d67f18c33a83a3388ad36531.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://addons/loggie/assets/icon.png" -dest_files=["res://.godot/imported/icon.png-57313fc4d67f18c33a83a3388ad36531.ctex"] - -[params] - -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/uastc_level=0 -compress/rdo_quality_loss=0.0 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/channel_remap/red=0 -process/channel_remap/green=1 -process/channel_remap/blue=2 -process/channel_remap/alpha=3 -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 diff --git a/addons/loggie/assets/logo.png b/addons/loggie/assets/logo.png deleted file mode 100644 index c7d6cde3ff71c1d3abc59db5d228f9008ac83e2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59538 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 diff --git a/addons/loggie/assets/logo.png.import b/addons/loggie/assets/logo.png.import deleted file mode 100644 index 2f29861..0000000 --- a/addons/loggie/assets/logo.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://duuj0ibyreygv" -path="res://.godot/imported/logo.png-2771abf7e361d7f10d5859133bc43562.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://addons/loggie/assets/logo.png" -dest_files=["res://.godot/imported/logo.png-2771abf7e361d7f10d5859133bc43562.ctex"] - -[params] - -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/uastc_level=0 -compress/rdo_quality_loss=0.0 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/channel_remap/red=0 -process/channel_remap/green=1 -process/channel_remap/blue=2 -process/channel_remap/alpha=3 -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 diff --git a/addons/loggie/assets/theme/checkbox/checkbox_checked.png b/addons/loggie/assets/theme/checkbox/checkbox_checked.png deleted file mode 100644 index 89bee082cc539ba0fe25dfa8dea5beb4505598c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5021 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 diff --git a/addons/loggie/assets/theme/checkbox/checkbox_checked_disabled.png.import b/addons/loggie/assets/theme/checkbox/checkbox_checked_disabled.png.import deleted file mode 100644 index 23489cd..0000000 --- a/addons/loggie/assets/theme/checkbox/checkbox_checked_disabled.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://dqf5cye21gyw8" -path="res://.godot/imported/checkbox_checked_disabled.png-0752d58bb0616edc7e127ccd992cc02f.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://addons/loggie/assets/theme/checkbox/checkbox_checked_disabled.png" -dest_files=["res://.godot/imported/checkbox_checked_disabled.png-0752d58bb0616edc7e127ccd992cc02f.ctex"] - -[params] - -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/uastc_level=0 -compress/rdo_quality_loss=0.0 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/channel_remap/red=0 -process/channel_remap/green=1 -process/channel_remap/blue=2 -process/channel_remap/alpha=3 -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 diff --git a/addons/loggie/assets/theme/checkbox/checkbox_unchecked.png b/addons/loggie/assets/theme/checkbox/checkbox_unchecked.png deleted file mode 100644 index 9b96ba7188b497c47123f7372b4160ec15b25b5a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4010 zcmcInc{o)2|5vWArDVC%Vi}{1F#C*Q7?E8DF=XvJGjoQ)EM_Ka=_ay73l&*XJQNDq z>B_GmE>~%}sAw5(N@NXPy80e%-~0TY@Av-hKfm)lXU^wy&g=bpzuwDvKW9?hT4 zv*rmv7zu?#GB6knjAV+!(v67#$LEM`B52f-xCOfPFdOkUIgBMRvEb z`{E4RQQ*NM5uc1kM@B}XBJn7mAP9{$H8n+JaA+J32_cZeXs!r|LUM(=Um0vbAw$6C zi`YCaY?Tq9^A3n8a7gOs7&!cIv|QnrJV6;lM*(~^7KK@j=_`;*{d*{f^9?N&*+xKK zzUcjr#6ns$A4I!@Lf!!Z1GJ3*xgy=K&X|mEw)_KvuuqXP8E7yJj}^M40|QHkZkZ6z*JA^u++Q0Yo4L z4pohS#Nv=xJPiYt3`Zss4KY|U2J;z8g&Khgh=6|v<}ul<=zjvGQpt{7p$OnIKt~%2 z91?|MvzcT717J-7I*7!R01T1<9Y_;A2HG;2Obn4hH^zYYPr4v`8y@4pYWh~~Kld$@ z$ACD#Wrz&m=q3bXh>gi286!a)fq|qmO$kUkjsRkqL}P$ujQz^yDquse4iNTN)>TzZ zh!Mx6V@Y_Bh{O>YEF>NvV2~yNo`D2d7#4<3$1_=YA{@qKkXbwd2Y~v7%>jZyG@ly; zhy7cPH7|@Opz@ed&he|=46#E|IIx9K>7u{9A0A-%msJ=W_NnQ}0Asb+DR9PWkwGT> z%Wd|5$lgEG`I$B{7=%dwrud&>LLN&L2?#)|ASl!SXLF(dn|L7*@%PgIS>gX5rGH5) zBN*TYfzaec!&ierua20{MM3}XdVPBKmvQtJ4$ZjL<+teyZNANCkPA@@py}(@hwX<3 zeUhV%70tWt&Urc7Sx~E^#d0*B-FQ+qIT^llxEuaUNcN55Qd^WMJoQD+TJA;NRL7iS zCoW#e?v^9svs@nL?R2H8aF60fEkJT6yC}VcPMJIWY&ovSbJuBwS3P4F=FEm-TVrod zMSomgc9*tHe-0s(GAER^2 z;>v_Ywf7Ba0}18gEU^aXF`2d4zu4fKeImF^v|N^%+;r^TaNnj9TcWB;U2I$l_#~EeyU<5^`sFj)L65u? zLwg**DcIr!ck*cK)%D{3rhM!n@6hl5usFW%uFEkso

%PI|VE-fHui87BTKGWh z52*u*^eCo+^^m6Ikd6(%+CDq!6!HVDw@J?nwK;w;Yc_oR2IoCpX#Py&&9(1(RCR>Q z*=?a?f0~~%tT6KJ^JrQuKcMsaVNr^tf14P0tFBrcB3G1{>Ed#t^@R48gxukqX7tit zK_`&n-K9i8bVzsg-WW*_j_gSmwDkm&dd~HhVn3=n7*;5&duSjRXJ##H7x~62@x*CR zGS)3Sr(%3R(SnmJIk>l^ou=coPy(B?trYCtiJf#v<+n}6Hq)Ii8rsR!yZx*+k?Ppu zOZVbM_FPxaQh!xG)Sc~zeLSF#h^!0pr8qwFh>`J^b5||oyBZyMOH-`wTq^Y*KFa#l z8j(=j9=ZmpG}zW%zI9}7+^Qm5&x_EGoOmvO!-G6B(eH5P_e7nag}Oy|)#RkNgsRCg zbnd9EjJQ{BQhb~2aciZkO!B7Vpk=kU0jhm|4VE=cMw&jg8%kB?O!t|2WsUZ{!(Uy< zoYX@>mcKr>{h{tI*wf(dowL2I;_-?J z!pkh<;hsK{W~fZ_Os>4}H_qjRfuOYMj)rBs7jAc9Mp}=`h7yaU4H1wbG3<`s@==0+W8HL=6maX-)_iXe;!@m z@yf?aFr^>nv_N|E#FLWpo3U!YTabfK(K^?WQ?;rUAqT?z&U*S|@tA&>P-WKm4_$$* z*|p&aGwJasw>)pXs1cF8yG`(_qo}Y;y<^J{s1lPMMwx04eA64ELtlxMwO<$UY zW1Ly+E_kou^2+|ANZ6QTDaw1Pz`2uv)m@ymmyXYs^z_SWEHm_R+owI4#Sd+>IZtt_ zoBh^|#QN4`E_Ua>C{M^&iHQuQ%Z?C+?mK%&KCQ)?v>QykCzn?-cl5lyE;f)(#IA{| zO!s{>fP-I;3<2JqYdv4ZjoIy~D{p@;bDOwIRCQVY$(H*kn;&Ssb^@`Eg-AI~8a=;z zqdhHaR;{>OxdMsya_nPcH0CDb_o#k4oVB!yiuF7jJ(&`_^5osO=!L zsM_pWaW6>oWPYbn%miznu$8Gz`N#-Enp+xO*eE zqC)>yQ;nwxju)hT(2|9hYs>2@!rH3T$y@u$JJN8YaUQ@Dl@TyO3oL1`-%CsyUNIQy zezUK|Q^~b&__aYt{+eBLvHJ^9MyF1*BbVkHBVwexD_YSL;*}36R{{p_E7b=Kxc!=G ztZRNY+O}ZmiZEIHuEN0DRQZP%&9G~nKh0?j*NiRcDBTqK^1#XLbL(f?Z{CK#nF{?) zugN)LGN{!%VS$sgwGbsQ*VBQR%y^fyP8@S6q{uF?U&A+@zxGeJH-l#M7TXMV=^>`V zz#w%hZK!V(kKrGCaK%d>b(kzeaxuC+uPfYJjnD#~`ibe+EuZJACN^CANuKoc((wv0 z(1Igg;JZdy9WR=966~HC%g`#5oywLZT+%`@ zh)BzA>=N2gD6~k~t|Y1S9wqO6-sisez5l%Dd4A{j`^0 zmy(i_x3jf$gJ&&xpk$W8cgc(@8=ho&wmSq;QgUnO#v-ZAEEOrKrA;gkAIOK|NTzYw zXn@Y8f@mR|2cxB=Ow5ElfEEHm2r9^AaZHh8)i;p{7Tpx-ZAigVcotwV%QlJ+x<@&A z(4s=xw zJ5yvZ1o6liOhiNkI)Z@a@|hSMiA2I+@fbWF1tU;`NDc%DQ5=EBcLqyPK;yG`5R1z} z%rOE~Za8F$gr$D-fz4Z>aeN zqi_TdESxe!GM=c1#gVbtZ%_(c2y_4f{u!7{XE7rG36w%1+i?UCz@dS5mZnHp6q?1N zlkqg70iHx6phz@44h3%vP+JWdBovm4XV8g8hBy)t_^Jy&Z^@;F&xLR9{I|NLb7?Tg zLWIa90|pfbl87iH2EhmgfCh$hY(x~ELBMYXjKHl%c*E~(&U_a9=>VaBW}Q<-hZz|L zIQmxlRuBak8X2NMtbq}V3T`E#7&rpS2ycKjq!U3Tf=(kdxO_GM*9nUaFhLBD!$czf zt;T{I%H>nIbU5aOxoU>lVJ~c10yuS%^WTR%7&gBOWg)&69T}j_)w(H?HkV|Oj+}qY z`itoOGo9aPBZ5Jg^ly^?4JP0+pa_5unls@@|IgyW{5SCeVE5lk|7VH+KT4kuD=iq{ zFhRI;VvuvrVCGuPx1?bHGhbid{iz*&hr>N?Zn@B1;mtyS201V_AMU<|`kK>lqet0U zntS-v+&L-ha%@nwAwcKJz-r3chQfzxv^8V9+~wk}lk+Yx_Xm}#<*)xi&RoH2o5J`u z^XER#m0W@r9kERCO~$DupFLYoH&9Eq8Fpl5RuCvrnz*K$ZC`rdrzHoh>vGgKeyct; z@NstRt;v|+TKCFr)f+WNVlGSkg(sE}Zv{L%`!wW!jVGYkzT=f%lA@Men{3&VKtMEp zem151i-ijJp2G>9T3LC?M@e}9@p0|XpN?$5q=0f%h^p}Di;f#9i2t&2@^!=Vkhn5Q zVBEfwj%T@|F_~h$@iBIc)?TeFr8VWCv2k_9jhHv0A>j~eiH!8+oZ{Y|o^hArQ593Z zidJOuy86BZU@=Y{2s7Q4&n90!tTa=uG+lr_q7<>?gwnhCpu3|VR-p)V-o9E(lw@>f zZSL|H10&j}fzSr|Rlft<-hM z?n+CZNEg&@PkWeLW}yuT;#c8gqs6$c*^J_{?Z4LD&9u^Eqes=H-&?W4SI*BiUge91^|>Go(bx=~s;@p|gzM)icmYl=-1 zWOf44DB<@|>9EbRf@6NF0@qDtNzg?4R7=|i%@&K|{d(p;;*Fg6^S3u{*iJd5>ZdWB z8=U?i<9f;C;W$x7R+>JQxP+LP=XZsvZ%Ny+zTnbb6#`Y9I{0KAgU~Umos?kUH+_!T zi57caQU=cP=uEYXuJ?y?w~yqGZf;CHQ(e2R-qD5~Q(0-S;g92yhaTQ&e|VbUW`mqoW*4}UV@9axpA)&T@s{jgl$eYEmu*aJ7$Wl1EOg<@TsM~PRU+F=qwOJ&rg zuy<(GQ6&*t6S7G_nJI{Ce!fmOW>@~T;6qFHgjlJ1-G1=vZ@*8h*!@y;K192IS~YTn z(3=49wT3rcx8Ov)AI@!-U0klS`;dK>KQ1E3Pjt7r=T=V>snphM+1ZsL3>hINK;8)7 znkB2QGn~^l^f9}e+U~Mm!<-wT@l5lAJV&$VIyA^&m-GMl;n_vJnSHnhxwS&}bGGar zw=T+QfnH~Nt;9-RiW?E$MUzpuFxjE~drBLZ!NYb*m`3(@On` z^QteW#COb&VmVSf3!(5bY=;vn>51BiV;3g;aDlJlua%`YUaj*%nPuq_hseIi4FcI0 zGjmmv)D3GDDjZZ^ICi;T{aoi>Bb{3jOj5Hyo`;PpSRSJk>>c}5!K=h*+tM#75^wC@ z;C&W8$=IHg;+UvXSL3*MNq$!?GtH)apjf>jq(&oJpLr5fKu|6W@qWIey_n0j@X_r? zF(oE()PBFIp^g?8+tZ?gq-~!2Rn_%v*a>BZr8)99%No272>17noGMrndPfG&ILM7d zWi8E;r7=^t>}|D1Z;Cq5+#2o%B_F#b|9jDIC=OkxJ^95iTT(V&9+)h#*Q{HrMtL?U z*;4ViRTPGd+F5CTzx4#(>mgxkB;W1nD<{r=sKl4*aEVbdX3dCRemlKlXq#v0Yah-| zv!xC``}?g|8XpLa&e~9by(Mci{laG7WA}0i#H8##TAFFEKJd$f%_s$CMW=0jhjs5G zul!|w8be;3UX$3ujHjZ`THGP==O`+%w{T=g^Z6rb-?hkCMnOv1Z%|cbP>RnT?y5vG` z_odB*p(NH?`H+A$N~+N}-GLdqjoHHA zs6MM-5!-aet(M*Ex*}YW_w<1GO`Ma^x!AE>J4=>D`Z@32YdO^UCf|Zz#-}{YJc`~m zq{uT=c{LuGD|AE)cM)ugY|T^*hcuc zaU7kk^LkbHo0gvQ(hs^*kfb4=aC6k_FvUq`@8Hrm9*}l*HB7bsts^lSd(BCD?CE6c zy^NXllKt8wsh&+JSKVh?S!xYymnSjmPOlx4*m=E ChKZ#B diff --git a/addons/loggie/assets/theme/checkbox/checkbox_unchecked_disabled.png.import b/addons/loggie/assets/theme/checkbox/checkbox_unchecked_disabled.png.import deleted file mode 100644 index 7dce3c8..0000000 --- a/addons/loggie/assets/theme/checkbox/checkbox_unchecked_disabled.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://cloe7vx2ej0nf" -path="res://.godot/imported/checkbox_unchecked_disabled.png-aa159b17a13862a51b7ba58c26a64745.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://addons/loggie/assets/theme/checkbox/checkbox_unchecked_disabled.png" -dest_files=["res://.godot/imported/checkbox_unchecked_disabled.png-aa159b17a13862a51b7ba58c26a64745.ctex"] - -[params] - -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/uastc_level=0 -compress/rdo_quality_loss=0.0 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/channel_remap/red=0 -process/channel_remap/green=1 -process/channel_remap/blue=2 -process/channel_remap/alpha=3 -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 diff --git a/addons/loggie/assets/theme/fonts/PatrickHandSC-Regular.LICENSE.txt b/addons/loggie/assets/theme/fonts/PatrickHandSC-Regular.LICENSE.txt deleted file mode 100644 index 4d859a3..0000000 --- a/addons/loggie/assets/theme/fonts/PatrickHandSC-Regular.LICENSE.txt +++ /dev/null @@ -1,45 +0,0 @@ -Font: Patrick Hand SC - -Source: https://fonts.google.com/specimen/Patrick+Hand+SC/license - -Designed by Patrick Wagesreiter -License -Copyright (c) 2010-2012 Patrick Wagesreiter (mail@patrickwagesreiter.at) - -This Font Software is licensed under the SIL Open Font License, Version 1.1 . This license is copied below, and is also available with a FAQ at: https://openfontlicense.org - -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 - -PREAMBLE - -The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others. - -The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives. - -DEFINITIONS - -"Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the copyright statement(s). -"Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment. - -"Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS - -Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions: - - Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself. - Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. - No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users. - The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission. - The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software. - -TERMINATION - -This license becomes null and void if any of the above conditions are not met. -DISCLAIMER - -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. \ No newline at end of file diff --git a/addons/loggie/assets/theme/fonts/PatrickHandSC-Regular.ttf b/addons/loggie/assets/theme/fonts/PatrickHandSC-Regular.ttf deleted file mode 100644 index 49dfe405b2eae0273a030eead2f0aa70b25654dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152608 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%0D}c+jI)0eRIDrxe8RD)^L~*mz-kW04ea&+^g& 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 SyxwwOSE|NcA$gUFzyAS@VSs4> diff --git a/addons/loggie/assets/theme/fonts/PatrickHandSC-Regular.ttf.import b/addons/loggie/assets/theme/fonts/PatrickHandSC-Regular.ttf.import deleted file mode 100644 index 9e898ef..0000000 --- a/addons/loggie/assets/theme/fonts/PatrickHandSC-Regular.ttf.import +++ /dev/null @@ -1,36 +0,0 @@ -[remap] - -importer="font_data_dynamic" -type="FontFile" -uid="uid://btuvtbhws7p8s" -path="res://.godot/imported/PatrickHandSC-Regular.ttf-a768b75713759378d46297f0740f6da5.fontdata" - -[deps] - -source_file="res://addons/loggie/assets/theme/fonts/PatrickHandSC-Regular.ttf" -dest_files=["res://.godot/imported/PatrickHandSC-Regular.ttf-a768b75713759378d46297f0740f6da5.fontdata"] - -[params] - -Rendering=null -antialiasing=1 -generate_mipmaps=false -disable_embedded_bitmaps=true -multichannel_signed_distance_field=false -msdf_pixel_range=8 -msdf_size=48 -allow_system_fallback=true -force_autohinter=false -modulate_color_glyphs=false -hinting=1 -subpixel_positioning=1 -keep_rounding_remainders=true -oversampling=0.0 -Fallbacks=null -fallbacks=[] -Compress=null -compress=true -preload=[] -language_support={} -script_support={} -opentype_features={} diff --git a/addons/loggie/assets/theme/fonts/coffee_soda.LICENSE.txt b/addons/loggie/assets/theme/fonts/coffee_soda.LICENSE.txt deleted file mode 100644 index 82a7f91..0000000 --- a/addons/loggie/assets/theme/fonts/coffee_soda.LICENSE.txt +++ /dev/null @@ -1,30 +0,0 @@ -Font: Coffee Soda -Source: https://www.creativefabrica.com/product/coffee-soda/ref/53/ - ---------- AUTHOR'S NOTE --------- - -First of All, - -Thank you for download my product. -This product 100% free for personal use & commercial use - -File include : - -1. Coffee Soda.ttf -2. Coffee Soda.otf - -More Info : -khurasantype@gmail.com - -For Donation: -paypal.me/khurasantype - -My OnlineShop: -https://www.creativefabrica.com/ref/53/ - -My Portofolio: -https://www.behance.net/khurasan - -My web: -www.khurasanstudio.com -www.mbkaos.com diff --git a/addons/loggie/assets/theme/fonts/coffee_soda.ttf b/addons/loggie/assets/theme/fonts/coffee_soda.ttf deleted file mode 100644 index 1d0f9f5b990b626491f6fd2f697e2a9b28400823..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49816 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 Si{GH>f3;74f&BNNF8Dv+$;1c% diff --git a/addons/loggie/assets/theme/fonts/coffee_soda.ttf.import b/addons/loggie/assets/theme/fonts/coffee_soda.ttf.import deleted file mode 100644 index c03a977..0000000 --- a/addons/loggie/assets/theme/fonts/coffee_soda.ttf.import +++ /dev/null @@ -1,36 +0,0 @@ -[remap] - -importer="font_data_dynamic" -type="FontFile" -uid="uid://e3rpni7mpu0p" -path="res://.godot/imported/coffee_soda.ttf-1c45a1f5c42cb2ffa335471f7a4924a3.fontdata" - -[deps] - -source_file="res://addons/loggie/assets/theme/fonts/coffee_soda.ttf" -dest_files=["res://.godot/imported/coffee_soda.ttf-1c45a1f5c42cb2ffa335471f7a4924a3.fontdata"] - -[params] - -Rendering=null -antialiasing=1 -generate_mipmaps=false -disable_embedded_bitmaps=true -multichannel_signed_distance_field=false -msdf_pixel_range=8 -msdf_size=48 -allow_system_fallback=true -force_autohinter=false -modulate_color_glyphs=false -hinting=1 -subpixel_positioning=1 -keep_rounding_remainders=true -oversampling=0.0 -Fallbacks=null -fallbacks=[] -Compress=null -compress=true -preload=[] -language_support={} -script_support={} -opentype_features={} diff --git a/addons/loggie/assets/theme/loggie_border_box.tres b/addons/loggie/assets/theme/loggie_border_box.tres deleted file mode 100644 index d108787..0000000 --- a/addons/loggie/assets/theme/loggie_border_box.tres +++ /dev/null @@ -1,14 +0,0 @@ -[gd_resource type="StyleBoxFlat" format=3 uid="uid://ckw36egxdynxc"] - -[resource] -draw_center = false -border_width_left = 3 -border_width_top = 3 -border_width_right = 3 -border_width_bottom = 3 -border_color = Color(0.71, 0.52114, 0.1704, 0.772549) -border_blend = true -corner_radius_top_left = 10 -corner_radius_top_right = 10 -corner_radius_bottom_right = 10 -corner_radius_bottom_left = 10 diff --git a/addons/loggie/assets/theme/loggie_theme.tres b/addons/loggie/assets/theme/loggie_theme.tres deleted file mode 100644 index eb3767b..0000000 --- a/addons/loggie/assets/theme/loggie_theme.tres +++ /dev/null @@ -1,95 +0,0 @@ -[gd_resource type="Theme" load_steps=10 format=3 uid="uid://bntkg3oi4b314"] - -[ext_resource type="FontFile" uid="uid://btuvtbhws7p8s" path="res://addons/loggie/assets/theme/fonts/PatrickHandSC-Regular.ttf" id="1_ucfms"] -[ext_resource type="Texture2D" uid="uid://bfnp2a0sbhi2x" path="res://addons/loggie/assets/theme/checkbox/checkbox_checked.png" id="2_tqabx"] -[ext_resource type="Texture2D" uid="uid://dqf5cye21gyw8" path="res://addons/loggie/assets/theme/checkbox/checkbox_checked_disabled.png" id="3_plx1a"] -[ext_resource type="Texture2D" uid="uid://bib1lwikra5kr" path="res://addons/loggie/assets/theme/checkbox/checkbox_unchecked.png" id="4_yp55b"] -[ext_resource type="Texture2D" uid="uid://cloe7vx2ej0nf" path="res://addons/loggie/assets/theme/checkbox/checkbox_unchecked_disabled.png" id="5_0424s"] - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_gb03k"] -bg_color = Color(0.349691, 0.30101, 0.201282, 1) -border_width_left = 4 -border_width_top = 4 -border_width_right = 4 -border_width_bottom = 4 -border_color = Color(0.361244, 0.323458, 0.213348, 1) -corner_radius_top_left = 8 -corner_radius_top_right = 8 -corner_radius_bottom_right = 8 -corner_radius_bottom_left = 8 -expand_margin_left = 2.0 -expand_margin_top = 1.0 -expand_margin_right = 2.0 -expand_margin_bottom = 1.0 -anti_aliasing_size = 0.537 - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_73pt3"] -bg_color = Color(0.767332, 0.598222, 0.330864, 1) -border_width_left = 4 -border_width_top = 4 -border_width_right = 4 -border_width_bottom = 4 -border_color = Color(0.943861, 0.775452, 0.522251, 1) -corner_radius_top_left = 8 -corner_radius_top_right = 8 -corner_radius_bottom_right = 8 -corner_radius_bottom_left = 8 -expand_margin_left = 2.0 -expand_margin_top = 1.0 -expand_margin_right = 2.0 -expand_margin_bottom = 1.0 -anti_aliasing_size = 0.537 - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_xxk7l"] -bg_color = Color(0.661808, 0.507874, 0.261375, 1) -border_width_left = 4 -border_width_top = 4 -border_width_right = 4 -border_width_bottom = 4 -border_color = Color(0.83, 0.629555, 0.3071, 1) -corner_radius_top_left = 8 -corner_radius_top_right = 8 -corner_radius_bottom_right = 8 -corner_radius_bottom_left = 8 -expand_margin_left = 2.0 -expand_margin_top = 1.0 -expand_margin_right = 2.0 -expand_margin_bottom = 1.0 -anti_aliasing_size = 0.537 - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_i1fiu"] -bg_color = Color(0.6, 0.4574, 0.228, 1) -border_width_left = 4 -border_width_top = 4 -border_width_right = 4 -border_width_bottom = 4 -border_color = Color(0.83, 0.629555, 0.3071, 1) -corner_radius_top_left = 8 -corner_radius_top_right = 8 -corner_radius_bottom_right = 8 -corner_radius_bottom_left = 8 -expand_margin_left = 2.0 -expand_margin_top = 1.0 -expand_margin_right = 2.0 -expand_margin_bottom = 1.0 -anti_aliasing_size = 0.537 - -[resource] -Button/constants/outline_size = 6 -Button/font_sizes/font_size = 30 -Button/fonts/font = ExtResource("1_ucfms") -Button/styles/disabled = SubResource("StyleBoxFlat_gb03k") -Button/styles/focus = SubResource("StyleBoxFlat_73pt3") -Button/styles/hover = SubResource("StyleBoxFlat_xxk7l") -Button/styles/normal = SubResource("StyleBoxFlat_i1fiu") -CheckBox/icons/checked = ExtResource("2_tqabx") -CheckBox/icons/checked_disabled = ExtResource("3_plx1a") -CheckBox/icons/radio_checked = ExtResource("2_tqabx") -CheckBox/icons/radio_checked_disabled = ExtResource("3_plx1a") -CheckBox/icons/radio_unchecked = ExtResource("4_yp55b") -CheckBox/icons/radio_unchecked_disabled = ExtResource("5_0424s") -CheckBox/icons/unchecked = ExtResource("4_yp55b") -CheckBox/icons/unchecked_disabled = ExtResource("5_0424s") -Label/colors/font_color = Color(0.980392, 0.843137, 0.619608, 1) -Label/constants/outline_size = 3 -Label/font_sizes/font_size = 21 diff --git a/addons/loggie/assets/updater_bg.png b/addons/loggie/assets/updater_bg.png deleted file mode 100644 index 26d48d1a08db3a125c2817e165fa8ed3dab96008..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 701492 zcmc$_1yq~ex-J?Vf(G|OkmBxEB)CIDaR?CHU0a->MTU01h}n4ZRIDH6*OvTzKF%ZdM2$e;4-$ zGyov=#NQom?S$}VutL~5xJrZ1x_ZG34mQ%@r^1?in(hh+dk2+3PlSG;7SuY>$y(e7 z{6vO9%3tEafeXSL&fxFj?CK@qFAe_Fuf)UgAD4N-41Yqrout8Xe*|PO)YM^6aPvek zi1G+|l@I$J98-t7cUv6E!{?5|_W4!)wcV2!TzCXtFC(y?F zFPyuNr}Lk|ZLE0_&IlKTtGCw!mj5s815KKmf5HD#w=OP!p}o8neIGLV``G?dv==nM z9l@)I@N)CfUK15{tM`B*ydWe5g^WQLkfd6IeZtv#p=4J2pZ%Fv-_Fq)EODK3E z;NEVYP&YT{f0SA0A6^&)1bKuR*q%DL+PL|7vHy|c-whBDxHm!?{7`ZsZhir7enBXo zkc2RwgpdFyAHM`2-`}8`4=S>Od&B=%u!sboxP;(;1iRTd*arNUP#bFrTQ^S^_yffb zE^s>pue+<=pV2fmB~)F#yy33a2vvwQ_#ssu2L~GoK|w1%Q9c2FZa9LE|3S1uqTE(u z*5cfJaB&-cTLFGs5rn`$>>+N}K7W+|5BtAO1sgZ(2Ood&CV}7+gWK?nS##Tn@QH8> z@Cn&+TL}p~90>>sSz8OhMMbUtHui^Xv^^ajW+UABU%md3mCb`kez>(bp8))UJX>3l z2Nyzu5BXV%al=IgZG;5H#YIKMg}@B|jH}@0?B=QIX7j+g;2%@rPf1FsICwpjF5vHz zOCRC!_akQqhCfv(0k{5RqDX_S|0puT2K@KS4*v;H|GkX<=GM<1@!<4-Q~bZdyxeTP z{otMmIlBi=|4VW4{=4M8;J*L+)I~+C1cYpCt+;K(`S`entRBb|7qGJB7JDd&n4mC1 z&<4)`kD>pssS8U83rPry{zJF_C#nCPR%?5>s~zH@?ec>E&j<5Rdn-{wmJWocmo(Vc z)6Ine?(XjFU=9C6g}lD5Hh*u(f9aaR+l}F$v-sbVW`po__!kZQYm~oIVEF$q-hZjM z|6Wu1ca!D+T9J7FSP}o$26+GH4)M2h$lsV$`lB{~t~3(=SugnSYVcv{k$C8kfA!4& zXWi{@@!kI4cF8|f^Ov9`pa_3&4S2wV0{`Alc|G!!OsiD7-#{18d{{yXmLjGkV_Q3C- zmmYR^e;od`uY5T9YiEjZedvpx5BtvdKOZdtfK?Q#5ILy-%HYp{c2@@j3hep~<9o?{ z0uMJlaR_rZRkkc@HWC}C#}E+}&bIOr{L*-RXwJY1zYUg{&SJ2vhYBQst-mxRSa6hN zfJG(0K-DW@7%2mzrpl%=i)({Y_&*)yU7WN&`#EfU*3f&lhSazWxJ%Xcy!hnR3qSMg zJu^NQce1Rm2wbBC29&byq2DR>sY4$WBkuR-?mO=KIY&nqP{8buka? zYJqhSke-q2r^v|fQ7asBII%v7*wKzd?XxQ+Ii_E~=}bP@Bkhq#gi7Cd=$rRhbiq ztq9dzsVlSZY0Y+64xScjNmq+4jC#=QdF{NSw)Bx1jYhkmjAYHCG}{w z*ZN)&(Es)qqffl43Q#V&m59=3G6EWpy%*mWqpe7)gT&FmXDs26M^{`3hjNv$h7y4} zz+rD|!KpV1^4MnKC6$Ccvoh_|H!eO4Ar?=c0s;`1>3DmHdAf*HLiUUU-jZASgO5UQ zT^Lar8BCuR$B%TLY7+G$aZ~Xmo_5A3J}q3TAl9>qxN%Hr=J!@is1(g!;hwl_wI`nq<|}) zi4f7kVdJSvGvP`izr6~4oMJvUQqM&9oAxD(Nd126_2JuqX_(FPXMI;vJlFR>JI;99 z>k~4{u&J5^AdtSbez;O}R%)1{*`OsbPOj*7615qxiW zT{cMFXmJ6I?+3vLst!;FZzExIaUNDqejJ{4;QL`>J1jBs<7HE zFXGUF$ri<}J;@9f(S6L*a&nYa5Zacms`LyF_ZO26uZ`~`63Dubk;5w?Qp`W7?wGP1 z5v^e=ZllFUPhVj)+(_A3Ej3ebD!j@oGy=5PocjAzY-Jvy}f@dhp^}()4sdmzx&paLX${)WC{W{+m z=fjGlF38i&N&jHWj=XG{+TKfXQcv543@?hKS|$TD)_>d3covwXZie&}jM z4qHI@x%qig(;xrpCyzQcFo6t`lPy(O13{HW&$wGot3G~{&3~?5Lvf78sliIhx$d0Pmx>`q3t*{14VSQRD@Hz(J#APiSQw{<((uJYjlCzk~yDwK41`i-WyHmX)2*u3z>_p{h=5}BtE16y>r_J z>lDPCQQUY06eg)$Xj7!+w$H?NG{YM`68Bz4!0IrO9V1PYEN4}z9AG{cFRChRNQ;l? z!j2-jBS&?G+&ESkjMvJ~YTJCosELg#|Rx{*mN-BIurt{2Bf(0qV86_ z>A~4wsOc<3*(Kkr%oiFQf~tIYji-AjQyql!;w}+D8kfkyh`Yvxnf!blMkz}Vb{V(( zDRb9G0V2Nr5MgX4g3h2|$*@)ML8z%3R~{l|s*=S)4nmLcF822|MNQG+4;v-kL6Q`= z`(HEG@jSKJcr{|Ys2JJw;VxxN;@!84sK_|EVO1v5uozA#`YET7I=hn2K|k``v>?G! zECfGVW!kLCk(7}o95hu64X@V`#-7vwc;JhTOzYTV2ac1{mvFS2d$eo?`O*=Cw^9{Z z%zl6$eLolOhb^o#6;*>68>_MBM@B%JmMLI{{WFtT$QDxxhBQ$`n z2|%$OW&DWIYJms2A91i<2PXjGuywpvUO#NaB0A;>RaSYHz%?~7h_MZ9fc@UK^f!y; zW4t-l(i>#ZN=dfF9V1i;^La=>$EvU9j=s6i1DFm(?l|}*?gmMtiKn^?@3$QGD6P~ zA7e_^iuF`nc&wJ;aM@pwvPKyK5xaQWuyBV5gpsqs7>Z>fr-#Uy>z2c9x#9rBst=hq z`VyZrYsgl4_Uu*52_n9%Pn4fppBEh;{0{DkVD1)HxcHS!)|>F$urPGSRZ1iSQPa@D zZU4$gPpWd5YIXx|4D~Q=xE>lBS6jb}p0Q{zr;&#TMYN%T9UH`X4YS8En|z+6t5d(2 ztj^XZ9OZYU)Bj1w7L$L)LWk&m9}-2kaPHOI9-s}VM2o+1!Dyq<I$9E<9fce$%=4dx(BMZmDwr4o_%Jabqh7UNC+{`5Dj z)Wo3%{3)WUYf!XU4JuPb@ct7=oe?Vz4&;al$BI(pTqwBa6dMzQf)h3tuBeF;v4D>` zv7!fs6 z4~ou?^@n6sFHvl1FAiuz1R&-6ckjFjmk? zi~w&$F(zs^Gq0CuyK^SBn-0Y|j`&52Lh(~-(G&vTEXj&{=tl4T=#=2BgvO*1=@^_} zohjnEr;<|aR!rG}AJKsrB>CrjC96}~ZXsWeg`Vr15zJGC#u`tlyBPH!OF}FJi4ZNX z>z8xnBk;A-2gIGNBss!q*Q*_;M3+r2pWP|Bq#9*0iAFSz?i{#d&v5w@#+X&J8Iq1n z^5=$|?uN+Mt`3XbPkAKAo0kKExlb|oydT>Aevzg5VYIT-^lg9kJ>l*&J>W7^ufc%uv ziRZDtnKi})1Im~h7nsLGrc@zhm)hl0HX@pb(Fs`zsZ@iMv~d)7w4f4!j_;jainWxp zDv4ah5%y8>Jk&LnDlWT{U%O>B7nkx6o?!&Tbi;AdMoLW0zztk@Je}?O%od z-2geADDS9POgesY8VuGk*9BpovnDb(anM2Cz>g(z0`Wj# zw%?`)N24p85wrD~$cQ5Es!pioYUA_=SW0N6&2QCWRGi91PSh2016Ng`O}xSV;*yV| z_x#|MDviv?9^f(u3+;<{j2Accr>JP3sDw!fJQ57%L}&p;^VYMHnB>ex$-0tbN1{uB zncLq-H*530OFw$nqj5^NY<;zXZ0=IPVP7`I5Iym~@dN2NgD zp0{d=6e&Unsk)CwV0<|aUUV&`-tBc9!CeCAzygu&QG zVrly8?9IE`8Ett8nR=Iqbzye>-Cp#$KkKxCw^r2Zsh;60)N)o;9yzT;2xMMpxD>qA zhYf@d7Vps5eE{`YW+na9l8vrpPnWAN6W1mu(+$*NsTmuYp+zUw5^i+Z2}MrhC>V%* zGA3~0R(?(6?E1tLebp`eO*PVZ$F5R`oq%#xr{TM!(We}`hExbFtD=G;?MsOY#K&$u6ETA@vK(&$lsm2fT~3biXOF*N(y}zAU+uhe zq^d2+zhnlbwC)_+j+&e`vy~ggQZwn4Rn^)v?T=N5M$1aevpY)Sc!$fk`MMy@%`!y3 z!CHpOtG&j(je1km)rafyU$`q+i7#BU0n?JM-=r+%C_y5TWG9mixY1TPo_(X3Y%4$B zueM%}%b2=pNlx)e-$(Rk{WMuN5E&nv3q`Me_n#e(O8)dW5)Q+VSfnp zG30pihzUi>;HE%*-o`S+r%%;k36k$#jo}58MknJoWJZpFv?eo1Z+;?Aw7vpDPd*j{ zB*Lmv`;!&oB2b9}RkVVIMwu@oGboP(i^s!@*ffZakGg1yc8Ne`{_ViH=EH&p=&{`3 zp}gN2+G@{Zb%pGelK!`2@_#*r+}kG~J}>PpFS_gR=TFUu zEjw#jh&L~2)z|ZW&&QX^v3%3e$3AzSFQ4R6U6iBL1TGH?c%EC*?F@Y4%J@rWVCd2n ze}y(Oi#qbV8{wirj(hd=YYm^!o<#XOzgr!Aden+AR{S#TSiNS zqwDZ$q-2^j6`RT6P%|pEppZ5DZ4tV4VTEl0WBFdOBglK!49q41x@TsPCuGCs0M^b` zL88NAzwLiVGL{r%qLp$|u1(K$VUbmjIp?v(ja033aK8VQqafG3Vhbw<9t!i+vU2E@ z+NXT-Fmxm1Fw0ErhuEePpTs_zr&TGJ)2UIkWVfA`LZ&+A4(-lXD%FbXuTIIg^x==k zTI%W=;oV}SCg`9u){V9ZMM3PsB2czg9=qp{WM3X4j2_nEFY_-IwY`lfh0R>n9#;Wn zUIA3Ud7vT#1#mPXS7-wm1AgRpe5p+G!`0EzXw4*EA~&rS6kB1y2I>lGNLuz)MLBOi zqZ{%?PEqkWyrM}elQg^EsvAiP^S7gd2aHwdje1@e%F{fW^Je3E)YGB%QpQP&w(-qH zb2_%-)F>HcDb*CQ{Jt=GDaolD04Lg?n*x(Pbdijq;$=jx?tHs)pf~ElnlK_pG5b>^ zT&A_4A_i%Gu9X}&gWDSNLV=%!N8U*9bO=Z2ecx9iJYjVMm7lA3S(0t^m0?4flTJx; z1R~*YiHxlWf~A%*WcA*u@|fGPK~dalpSYo&CvDEC1`aeriea@*GHDEWbJ z_mmOmGG)t$LFg;WeS2&Ey7dN!PVb9HD0J(-t+ly*eifq+8)@82QqaqW(o4x5z=^u- z%quqZ7D319x!YmeT&RS(i~e6Oq(Oll}geKfRrdaux(4~t;;5|%#5R3b|2iHQU04#mQ~=7Ss~gOv2kVG zoQabFdU$zp&= zr>s!psEj=x7+@I$&QrYZ%R^>kW?1ngAu}3DUQYL$k@i~}QgRRfe#JO zCIE!x9oKr3$Rbw`_a>x=x(HLSwvw?_mYrC9p9@b7!6*iFva1bJ$%FiiIHEM3H z+dAa?SUo9-Y;UXe=jV6Jajiu{AYFbScV0=V7w1X-7p+DTGt_b@$Q_C;f$P4{Vu3oT z6k@;dsWzS9l|*GuglQBIp{NU0n_^NFL2@O97o*JV<}ssL!yyDPDs`=vW;LK*6nh}> z1p_Qm&XK+SO+t+EW1IrWCmFUTx`n}IsL16;v_m>n=5`trrbfyLJ;wXe9LPD7AyOP@ zF5z-y#U2n69=`xmPu1yU&`P5|pr|Itht(*N!Co%vCCt2nzqiIU8v7`UQ>_YM|0uHV z;&@FvkhY8iaf*bhdgA(PE2x0DlrYhAmQY)Ap7mVzWQFK*hoPb{`=HzK?`Iz^(C$8# z$c$-TLSdeDT-D)^RiXT-h_uhYc-IamL`7#KaATDKz@1wmo@k{B&A=#%Zz~(nX&=`j3)9mW(C5u~$sAJ8&A{}Q^2OR% z-UVM=WUnT;n#O*FuFLUV&N)RX?M{*A_-5;((R&d;UMV*dDis1Y6S;;uQYWQP{stx+ z*!kH;3$65=L94fts$4k%D#D^A071l%S5>X86|J@siX_&7A3VmKvovqf0;khj*sa?{4$c>%Goa_g z?T#Y>7RPvRGMmi}5hYUV78Sj)Ra(w+QRrC}kGQK8YyLnvon&~|?k}!t7s<}PHJ)RB znX#AF<~t|0JEdRr`7CU+Wf?2EqAaJn*~%Mj6%NFV&pY>BbgfFiDP@~wWJWrCMV7xP zg%x`mz4S3_-qn0%qV>e{5+p~cn$X#*)Npx%GCz=B4;`a!gtWizEPt&%t$>H#w+$1_ zf5BDMB_owklntOhCEehT2juIRmuxx63uNLRj)KeBtbK4|!W~E!+*5g;u`yzdyO;Ko z@|CYwBdr>yZNHAT7aJ1@Y4XTgEYGWAs|wcsif+Xn1^~%&!#vZ7ZCOn4LNcHo9oZI?@qKdD zB$em!XhFOtrz0kx(6wlAl^c1e6mhyl5-YM%Gr-0^o9|}&dPR<(8AGzvAe89|4EQw8 zf~-)RJ0%*YroLEUoEp>1Blwo!y4ua12L49!sWbUZ)Hj>6IaY*y59HIaAuklF5mE0L zJ7|_?VcPo(03a-HaWPw`vX#6u&W8|jY^K&b8A;d5BO(6Yf{~c~t*&Ll7bGFMIAwBC zJl-hb)IAisQL!D83z2XgzTiaIkUX9#JRWpRkBZY7nQWCaK!BuX+%_li6->1(Q^V0I zqZ|n5adadmTCR#lrz>|a-(x)4^af~AFTdoK|By2B{-bRUQB!T66di62@$n`m0{n4g z4b9SaM~Hf%+~0D)hyG%0hTSMG!oc1{*~7|wvij0x6!oxPjfiLl{mi*6hhMBN$r1cw ztNq8SXQ`Du|0uJvy?&+Tf%jvqq2iGzvU04pnrLF3+ePzojLHORc}|!3F4#L`S_!O| z0vU<1>5(kgG;bEtcU}2@=b};C5t}0?%D7xVIhH<}(F!ivRMDE??|VH&M#rg6K5t+U z99rYv!_j({RPSP}&+5OgmwN zFO|CET;aLiNA7IQ@E>m!12x+0YQmGY%_J3W7!mtUgXCFM_DSG#ru+tJ;D%CB$p+-V^ zVS2{)-zs2b2F&B|HJ*U^`dL+DoMl=@tb8c73)dQo&Z-nE@#eO#VdN)0QWGr{W?s}e z57L(zSVD>r8=tKWlUN z=%ir0sB&jh7nm$y5~YQTnXB&Zovo{yLxmiWgDE^)Ihq~cGg6a)c4aR42979LGB3Pw zIZwUp$UAv&h~~*)cnC~}24RJ?ge6uP&Y?6jS`Yl#5T3|3NtwhL&3Pi7*)%enJct(o z>2~ zcDs8HOd=*%+PX#i{?eOq-ZK}t#2I1FBWY&*92;)07XA^+O0az$S3g`JscCnSCr<^&Q24Q+_96bxN8Jb=JbIr3}7Ux z3VzqV-Cnl!G5adysQhV&-|{njNLxD^ioN~j&_T#v-@k`!II)U5SjGj%=J6n6ovFZ$7@YjpMt1;7>TY$w&87J3P^A9eR5 z2s#t{=FtTN>CO%+V!3bckrhHAMS1ZT#Iy4gy?4LIU#qHJ>E+||+!tmQj#A+egSgDH zq9Q=Y_FgvnYNJIlO3#0JFI`ktRa&uUGB5g)k9x5uJc}@er=GfBOqB0E|4f}Cf^5uO z=eemcOqG_!^+d3lVK5d4phu&d!poGixCNd(9f;wH6B2afV2fxoyz8!X$n{eyjIXep zK01_L=^$N+8U!u-wH9#jc#Km`DcZ~<&26pT3t<$hoWz}=>S(hhsOgN@=#zPrjx0z7 zSC5Uo3HdnMfVE_pH#$hOs389Os-vr#UA1mL<*uh3%;=;$Kak1@!0GIVHdG!q6ert%Utu4Co@f_w#pv9YC}d!su& z{lq+&F)p>~q3zf5%WaNb?yB7ZeNblB?%4<-YdaIK6L+(0kbVTMiBd~YS#y1a=8|Z) zuJJ?^_MjPDF=}~p9ATmR?01Y^`1SA8{gC7;OupsK$I6CrIgpR476i;p!%tCUHL_pI z_SG)rO0zyrkbOc-eWVe?8!(q_?QI_(BADZz(+0w96%tWmoDh@ywA6C2$#UcO)(0n{ z6QF=muS0KN|6VWeSwOqiT84`kY@Sh=J4c&$U06Iw*D4yq7_y$9C!*LnF%-yT0RJU* z8K=VE|)WSzxHUu~wR>?XN`?{3Hs zDHdyImCf}pI3^U;s%`b9k-L0^n{cdmr)t1#x>u~)OMyV*?~iu&iOaoK0&JWlo{jV! zZio5SwUgyjy!EoT9K^X7w};;m6H@&szBhOw!0zv_V{sv?@27M8hLK)`5@Rp^<;UA1 z+x_{yF$Tm#x5v#wp;@g{H>T9!BQOb?s0uocew@EvZVAC?nV3e!iojVv(kwqGrzf9} z!GHH2uV$WY&>(c9ML*_!+uYSzx$Dav{lHxbi8(O0Z88r66I656yQXx=ON0|MV-uAVrxTaPFx081s_P6u zF?||S-Mo3iIard(qe*qGG}bNKe4X zsBGY?N@+`=A{qkYYtb&>&sbdyjIsrYgxu+9Sy>p9vcmrm8aUmD}}^GXygdd z);qL%r2mqGY`X#y}Lg0EH9K`fUrKAxM7 zRGp^qQik!ETgjEapG5m ztBnI|ZY{e#{oeyCDClo9Xox|yQ_#r0=w{el!)U5>_lSpv;1noT)`X*wFU{_NUAf8) zvS20LnUg}k%~5pRlqYp}P-EeL+VS*_)|aU|lUFJRSFP1l7$t;EV0`rPk5B5tvhRwf zeJj{rEgUMUhUUoB&b4#WMSryAjW07NMsTGPndEW~un533YX|Sw%O0grTiNeC4%iEh z;Wz$v`IhOhwH2Y-(3W731nsY1IGRm^iiO;MOUzyMm%Y~0E2BxfM zhg~?xB&M_a#7ua!zq7Sj=gLURA}wtN0K3-OR$1LxEh4t-= zjtJGECoZjLPKNL{EpI$jy!{YA z)MEGtnTk?Ftcmo55%|-xB$DQow(_?okDa(k(dVde>!>1+Sp3K^mBjWwM^jk1^EysRuz~;s)bP{{6&AT4R)Lkem8>8O_p)-vZROz{CPxU= z80M6~6oyJ#_=Pv}n1PeIGTc`BIuaSbg4q)XJ*wr{`(T=u!yB)JX_RL=(3IwO8t;CL zPxKGVD#Hdsh{>IKk1nr^!Ni@6KiZbQeo4Z7dImT;%#SYdAQJR9QZ^wY*>R$E_(UZS z?q8}>Y{0}`(4#GbJIC+LrD? zN{nCE`m^{JVCg?)C8EoT^7PkAsO zRT*C#9yPVxTE9Z_jpN-5Wk%Sm-*3u)b=PmlMg?0NS1Y$|r3+s7)R= zKYm_gF$}P3Ya91^z{Y$vQgrF4w$UXB;JdAsCidv9e+~RzPTCHRCOA0L4vS(b6`c?W zr%;n(%5OrV;SXSDY&s)a*e8@BOt#%$m5L_zW){|chL7KfT^Q`Us_1Q&b0%kBd!Ike zC0xHsShszuoVXUnvQ+)FP4Bu?n!K)uev8?sm-?i+;*PnYVEd<|fU%w42U8ZDv2$gm zxdYMW!h%J9i*wsp)|m*2CiD_Kzfecd_Ro9xFV{X=xow8O7^NB{dr#dqEh)gHVq;D^U)WZ+#Zjj7tV|23k5Av+L9dX={Hm!RVcV& zv|U%nI9qAx9kC*c3+w9=$H7Dkn4Ij$;Qd^Nu7pDz1Iwz9lF{6Y9!ir5JL=FGq_5opQSf=a8^`TdjE1X~3jiv-~ z#(5lb=`P=GgP$AldwredQO#r_L4!eF4lxf}I(%q3Xrj>0HTo*_Q9!$mf<=Iaxh{4& zuLmI9EJXfZ$m;1y>r_KxJauIac+M%t;Xab#_`oP9ZHdp+>Eqi&BB%gQXb!5L{+**b zW{`N1H)=T^=0f!|6_UlF_gGT~k4w=xNZd{87EzIz$s`{HekbHpb&lSnWnn?@BT~IZ z6h~&+|;6IlZh~iVZ1TXPw5+3a95( zfYB^7iX`ZE|6Y{Z@jW-CHrLLsW+0utOO7bOPm^bQl4YdCp5D+ExkH+)$avC0J_&VX zYRsxVQq$JsqZc*NPyh!8l;l!B4q4bHwu1GpaIpN=MUK}VQzjd4dsHi{HwJd3c4Hiy zly9ZoXsD*v+j?6JC>nrXSi1RdrDJpXHf{`aNPYCOu<+j+B@8|v_*icqaDBVK@$14Z zXqdz=^7yLe>66PaLi2#lu*}{sh!;}9`ed&|CQAv|+m~OPDgDBhKaghT(Ia@{kj3;| zq?-s<^IJDG6&_+qJWV;9YEx;dKwS1=a##^!P#kEmk>;IvDmNR)slXkb!EK;SHfVXy zr`R|rPeDl09#f4FE6&YgV-}Ej6QE(O9bUD;KpNj)YNOo2TfX&N=|cnGT^}mPMe;6# z2(ELu0RAgw;koliLvlZetM`e<7+f^Hf5Mxj-eNmiWuuR2nJFD}HEhjVYgtV7Y2Mv0 zxQ(Y(l6X#YrM|DxWT7b?)^jQA?ylKXLZ1oHJE-N+^R^wlgx|@zbYuj-p^_q)mEt=b zj8#vY%TaHhxTJSJUJ~dynN+kZ6n507NYai4B?ruY3Mvf~ncTU_Qg|%Vd}}okcP`L( z{-rUI>1`)X(NMzl^`o5NNKSow65ZHxBgX*~m+v^N#AFgttxl6BuT71l?eU%L^b*s` z_eltX4vrj@46K7f%L`~?u!%)Z242Mo+rftO^gSLP@!Vxe?4M~JLdf9#_QfBDKfg<9 z6UvN}kZ_DDbwp%ar%^xY)+iNQC|f!;XjVoq%SFiu%ZPKLad;%F`p-7t7&J2Th}*3c0VC%r%EuI8#JwJL5GmB=oK*?WodepBhk+Eyh> z!7wZaa~5sacqiQ%h|jgX|Ma%lWJR~c?y}`&1h_tMWm4678Nn)Kd3ZFwN1ox~piaCd z=x^{UuWAA!Z=lsj*+m|_#_<-Zfu+4=`=Un;bS%|%ndRK(b789aB_N5RyY_-Z(|nbO zgRvyR-5}CPT|&QZ)B{@s-1lx**(VY$CK{?!C7UIr3OFY|8DhcUPcn$7!>gBg9^F*T zS=t!)0%^juD6LQNObh(3P?%e~(^n~7#y92C zr(IjS-?yYia4N`pT1>FY8!4qBlq>n+g2-f{7JTOS{OrXK;^ZH^KTAH`&skh#aIiESaFP;xW33lK%WtmAUemd*g5+^QU#I(R zjKPuj##CUiH#W0@QJ1pL9d3+{LP~f1=TrI;xu=!(00Y+~T~vVZ#R7`H!mB~P$l`G@ zbVMc?CLC_L3&jJVvM>X|a-@sFqZm^MdH`MO$lF?y+34jt2{d z#<|QEH0M=gd`5o=`=JobDvCv z9r9;BXEHNm{kS~ffAQAEM@pm{m9^YJ>rTPFHf%3l;JFUJg`>_qzKP8m?UcRjlPF?V zJvltT%{@^}t%GG>dRwjjcVY^oYx6hWx+)-xL#VRVugEdEaCtHqa`$8{st@W`CfSmd&e&9n zS51rXk3@vp?9E7xxr+Vyqy~i+i^@6Q+GD1dF2Ji@2=ppEJE+vsqbj3f%4r;SGLn9E z(Fh59s^b~a$8V&UoE9BZmI?`{xQ?MsPG2-A*lIe-J6;=o!IEnl$u2*m|0Du@{jK55 z6~n&TGQWc4Ajdf_OYMEUs*vboH)lGs`r3)pygK;_TQ?(s;mh6F>@3;Lvc+AxW{!+B zvV7+~Bw~3+k-1+H>LO|eyzD9nCt#>LXPm4tUpE`OS5$l(N9ZkOV@Z%L!shIssGctL zb|rxtOC&mIAF7rz0As3T^D)wYeKd>tBvBjjQu>{kJY^h$R@{G73vCx67`tanDGwXn z+|I$iTsk}vD*3vTJVQ{aF+%^?RB58w7h&yHCd^*lCYVLmcoU}0;J_MSq*{*0&<}%< zJ9$Z~@$FbNrN$Gru46XR@q+n^D>y7IEPIiFo=&4HuI1I?DA9PK%tc`Ne3*VqmG|~9 zW+kw7rAFBur(7A8lHf+oE)l0UX&>BI`Ta`G`0S+7zB%ZiH_Jz+;LK#iOVtw z27`N=h|SlZ>J1G19IYt0oq2w{^RU2nJ^69jyz$Fy&eE|i|6NlKVI_Q zC1?lfizJ{WlwxORN-|VDt_T_%3M`nAUffxuR($ycqJxbag%lhd2(fP(3i9-#5uHEL z^Wd^o^FY5Dy{%pP;%z~ZVw%W7j7cV_#0KGxF~GcF##Vq?(T`02G6dANF8!#z6g0j}>)O#>E>m6WemGB()+m!B zd7D=e?Eo|{+YY`qKBSV%7Fa;lmx7P3KGyn4I?tE7(ZEhVW0J9TB|*!W<>fSxj@HMIMn@VbZbn8|2h8r>IpFfE*-o5|eQqPnmi*|Xk{|tcM#xvTC z^Hrn-L4)a8cz&+l`C{gmDZRMosP~uIHF;X#$qQ4xXvOtnW4xUYnGsIjy}M!f;i9(q zrJ%Y4jDZs2G6P|FRWgf0JJk{%5jf2V7vS(B<~qr0Laxn4zbm@6l2Q(zVp+A_%cx%( zU@{mn?u`hCf^M?1UUguV0ez9Elv~?f>#=+-9+Tz6vUYK(ZAzX*`DUR_|+Z>GtclayUMiWhO1j9F64;(sE((k$yeDI_tN};&l#A1e81`?)tAYXqt7B z6Ypk11iLhKKR2Z3S~fQcM)fuIM+h_MCr^a)MIw0=Qj-Q=mL8Y22E`Wp_yIx9=L^|& zyYVB;ZIkQJF9L}gt&+Zq{)yKL27Z&%o99HhoqciRRyGVRvc`5<9HA{k(B?}cf~GpJ zmnEv^8V-Dl$6C3#ip5klhM7!Q&2hQ{&c!Fc?mcUpY+tRQ0^d+5r$teK9I0l=(YnT^ zzRUttzPgXlcbdh%+XfW}>bZ&&b(Hx?jmJz8}PTvug&hu>&)NZw7UZ?_8y1KK9>IV-Ra@g6i)No zIA!_(n>VXw9iBrE4`F6s+kM@nma+)gcYc1~|NF?|dtuL&+mBag-<3Chb3VCBY)n0U zc+&-j==gYGNL=|8fM2G8Bso@sOVZ`_2V~U|AI@{Es z(;`yv=iocqNoFP~x1URjly|Uil5MmkZ7GaM#LCcJjHBh4vL(W}i@Q^9Rxe)(>X2H$ zm{Yx~GW&{2yZze?H)HD=3quT0UQwQXo)!aheXEt@r=>UXrtK7$rXjH)J-c{=&NLEEGG->zH2cSP<4^I0kdSf&Mc%w9o6OGJeP z^ARS)-@{C>c?;o>9v(C1Oi;`ABcyL0ww+zCeX7G?$VX@VZFSMP)i3GYo``*~f=@2r zP3pSM)0o;^B82{%y+K@!6Hmk|wic6NA+{QekL(+^tNwV3!J?+`;K}28q(XNCd+**& z7EFoMN#bEs&I?UF$H|`cXJz{>qdBImkh-mWF#t9ho6{ZV4?5e`G^W--ia+&kk8^3U z`|^RZ!j@@VYoW6tt>dSVzC$p=R!cF)NB`Kify{}&$nmg}L!(be!Nv~tEI}zDSL~*e z7<_yb54O)i8@F*)EE~zIRxNC5J1HwBXIDncr@c^vM(0m31~oQXrCo~6B5>~bn;oTs zl2!TCoXTr1y2>9R(x0og3SvoEz`QI_xNK8IAiE`-O*;MZljMB?r@FdfYYx@E2g*m!f`-Hz2whFz2ThJ*^m4iRQOs1D!lP1!&PyIT63OiXx;5srv< z!8iyV7!&t#ipM-2$Ru4$x2&LIfDSOa8rW!O(tn+hYD&Fjdy6q z+E~maf>jp$TEo6fr*-Mv2-BKFPZC4)K!&GOLGw(yALQn#c z94qBwGKBN06sfBanj}Q=P1u=QY0-_O!|yv`AEEK7vXPIg^$#8qmT4aJ?OMxaQxEVS z;;p#MBB)GI32(I=yK*{`M+q8!TjL zFDee2lEz54AvW!kKKd;ky(C{Co;*KX)m%7#?igQ=`*7!Daktm|^Y`ub*b?w76IX^*EI)IGconi`L=^l3Q zr(HL2OFFi=0SU-x_J~`PhlrIpMJtB2T1i_uk}OfPbombZe*jBBw7+yoiitonFr10e znFADA1hJZmnXWBF$g>8ghykvu>|I&zQ$axvLs~L}iqeCbz|xhg7$xP*<%DcgGn=Gi z?lv%Kmz%Xl4?}8g3y~39Lq49_@0tu;we)7`twkTVv?nf#S&;lR0b)&rTr-m%vQk25 zy&6k@A~BuZMVfyVw1uQ|-eT+8p_yK_Ta=#wf+BSF)wxNi7|6v;w83#3hMYHU!pnQS zQq#_Gr1P?=V_R%aZ$WydcMpcf5xJk26pGlAd?ud!wzb?Q)s2zq%sRu?#COE))X zvveE+#|X*zgWjF7L+&%`qL4#`iM?jUK>6&$R7b+A%p_8au$IDIq22Q(r z52WvC&FnGO+Jnx0>#zrAUjZDsNlj9aV?z*;jg{}Fb;Sl>lelk}Fe|Grd6SQ{!+6mg za^6RJK2hL$Nw<-9$ViLh66IW=$btVx{G4s28EL~Hr%?=Hjh>?L%eO%LJ zj+~<5p#rPfh^hu@ssRP6fmpEti9$A(6y7)iq3U~4bCu8aeDLWX%2ib9vzPswK1Pi zs3eUHpwN>HG-*jDYBM!Fr`5??&CZP;0_aK7a@6uhmvb19F3Ku3#pNj7wDt)dty1=8 z+T=Ef^skK2Ch|zXG7%w_;tZiI zyi8g!C$$|;wxf4`%1F^g^aG~-FX9NdMf1r85V01jRs0_u3AN=2{TM99T4ZYolD9`e z#OkeNVT32yNs%GG9$fBc$$vi;N8cIIr9$A8z?cQP=PK%$RF=H4F^=m4drv=%_V`#i zqmb>i(&AZ_?dq}cnmrlCOx-s}^hh~qaq{EfjN+{|6JBfS7BiD7rW)Qk^?{A3#)C-0 zmR>n$r3Q~ERp5c|<=|3nazsgqNu64I2$Fv^MYw1y0x>+SCO+O}M@^_?S|QcNc1zL@ zf7Acv4}9V$e*A-1?E0zMqPE~7u$h*;zI$iAcKX1T(-RR~obAu=-FxK9_1$9EuU>iP z=?|aZyS2aAKlk+0lr?(FrpOu%$`c8K(tXqt3~qioq@a2@P{P9&0v09w)po2JowTJ= zI24s+n(%i}ciLbImk$0qU1%aJr>jMFQ5CbT8V*kpBlmilqejN zPmltxYDv>1g-QxdfU-mBHo;_Z1ZtAd)55Tc#M{tkRT(r$I+0XG8bWJkt1?=2-9o6_ zc8$%XcQ&xX26))AP@*i94kly32qN8U-$q0`~-Hk_X1E zlNkS)u+PaG7Bel1vb74{)XZbxU2!-ZaDny&mF79v@g&Op)mlF`5dwPW-G*G9`lp2& zREL2Wty@=yOQkau(!j1aC$dB=H!Q74#Kzv@%&Tg;(XG$#rp4SyLz0+PpADNVn~5&C zbq5)+K@-_73rGJ0OrHc@-HykE;1M zHZEmjzMCrbuw%@7k4LoXLZ6*SdQ4IfrMV>los z9%|PrvjQ!!;XP1%byeT#k{C2+5G*`dDNad)^s)odt}`O06Z(J?sf}>W%3SgdS$--z z(0wmS%~)ksG^>OThEPIeDX`Tv1(RlrbFIQUXN)3b7*GcG#f>RJZp;EWn^X?nKemih zO0OF16Jv4DQGN~sQUK{9yQTs}2G2{W-c3vm1}vu5{BGu1kZB6FP1pwdG?;00uAiEw zqTN!GKEz}U&pH<)sU^yAC`2{7sN)C-hJ@zU(umJus-wk4yCl_W5tcZ)51#I#47*!Qh8?XE?h-ibdhMf=T^|BMH3r%l=oFN(m?hA-8o=b z&C-HVf>Y>JL$bLr(Y{+NQ0SYC7!y&gA|HsPyQhFBvu>pI0EJu~V@-qRxxpo>|87qK zcsSQF!8(CaQsFa8@wj>-8z~WFs9D=Q*s}&VnTZXS2@kDY3Xg15L_{>W7ZD9jU>3>E zY^M??mU-uiNi#dzQne37Ak=0x)P*tWU=i(hvvMR;E|LpIA(~lxjPU*4JGY*G_Lhh& z*RG%Mu04Nu70Md2KjEokQFOb8EcdGaYawmqLAV%K=Y=!7j=LA}DZl26f9}VA==*=< z$KUiZ*Pegs1E2V&H$C>6*Pom`pmw^bLY8X}$a=>0eBJLao_pcWewEdC7Z+zyG$~|A z29sIk`6o(`pzMPlE6cP3t&*D*`E{)+2(yJo(M7~Vs8kUNcg50b@U}ofv0Nl=LJE<6 z2!O=^a`l{8sOqvTgsiLY7Lzsh<|a_eJ~X%0NZ;qymx5rVY@_*p#2DNKIQSn>(P;80 zZh?#@rf743mfa!KzNLdwvn7@c@@MDQqvhB%TMjG!1GKBi*)3AoCy1y;C?0~6ND>iA zP{`$Jv(hASP3_S|safwIJ~N0m<#chEG}DSvdTp|mth3^U=wgUAQjh^k%#oih-Hdav zwQ{nw&ECX-;q}=9PA(x<1_WDC$Yk}kk%^EZuvyyAt$=yscr{nMz3fkoI;Xy7s*E{9 zD^q|p=lSwwM;Q)7#nD-Qv+8;_t!*bn>sTNYbE%GN9A;ZV=Z0v$HdIWicx~>z)6lCe z`>gKL6M8D>4}%^@phpwEkKV4+qBb2Aw`9fMV~mz%$Q3v;VmfA%9|PEA#f-eq<9?!( zx%d$eF?}v4uZUScT2HbIm#*??MtL59d1Ibe`m9cOaQ&O}QlOXCH*iqMTnGLHlU1go~TZZ53uVkY9`lHV&c%PN1Q zVQ{JLY%Pc0M~+g~p2?MxDYE(qGwDZ^&+#U3VZlh_V2XV-&U%=$IJ)D=tc$q+4b?6Ar}gli6r!^LFwc-2GQS_3qF5jK@Fj z4R5-3?fNSoeT|x$E+Xf(=`a|klaYElQkw`M>$<4=BBa1I zJOJI;pQ?0= zW`sLxhd#vLmKxBK_-*RkR& zuy6V7IgLZa(uOj@bU2Pi6|Y)SN6kHvI#AxNn8&nD4KvUq7L#o>2y@O?_0~ zw@&F`li4CJEI^aR4duifm8q5Jwqnf?S(7JOMoweGj*-NtTVxuTJeJ#aXtwinFVdT< z-ps1BxWgHNX}u9<@2{Bk#*IzIVSCVh2x>IaWEY#zhACOD*#`HJKxulqymI6eY?--2 zoVaOd9KQ0mVg`Ve_4w>#*f>)&mkE>Ff1_(@&mF1(0x?NmT7%2ZSMTN{{UK?ejy%$C zTzW|HP-4y(>peD)%6+lWBmEyXW|}>S4%i}&*ramgk1UW08o{=Y9hSp0{wK1t~Q z%cLY9R;=3kbS!NiM<~v`wPgYY!xY^eT!F=m5lQ_qMLOvCsrV}K!9i4V%3dwv#4k{B85s-_-gs2<{~@XCiOEG=5Nb7#Hwx=n$Z zLPck?p9aA(0=CR41{;a$R7MoNtA#+-TgCxuDx({7iEuL3m1fMuEre2;x{F3KPja~c zSl37}rY?zuj4C!KqziUA?MC2ANz{xlb}!&YQyD1{ARXHTXcK!4OfPe zR@bL3B3uj9(_+W1fkVR8i-^3F<1)loJuf~YOfM0%VCu*sR<%h6>c^2I@O2DvnRP>=p+T)rRzX~S(z*WXJZ+1P=FvN0D$cDqwSkgKfD;O=zy z#D|^|kt^38x_yD=p1a6?<=I|O45mn;g$JDy`QK!uZiPh+>eX3p*B;zE&sUzUA*VN9 z_o<)rmVf%@fBrM?_|(TAedViep565)-uI#9%I>+_FFg9nS3Ug5%S894d%JlhMEz_} z;UkYdf>=NN)Q7l_SZR<&)BY+^@>uDS?zq7axQjCw5^JD1WTJKGtk#{Q56$sgg}E*wpL;gS3wZvj#`aJ zZcUNS9zhg@g-T#(#mr1OQt6|=p2`NcGY8!I<7Z=~-P5#GJy{=S40?<2!mz2y#zf~F zT59u$oZ_atX=@U$AgBYmD;sK0h%%Pc_FQAc*-e7fV+*7y8KG5e+MAg&&}vmEfbM35 zxkMgE%C^zj$O<^MC@nMIF#KxEsb%y*Q^0j)_8n4iXPcy!$w*R7r+++&4FupkPy-vu zN%MB`5(C&-Vm^!9y2(qvs}4&~j3C9q;hKg=labM|b%uCghCAw1AGW*L@QD-?sx~nM zvGGS|Z^k%!k6e#YJljSttIDkh8UjLN6B2TWvm*fvZC+v28N481GFo763{5cGBFk2L z%;tkdOvcr-K$Fc7S&)uGLte9yYJm4?I&gofH!npJ=1+DR(Q5Mvk6&5~WNDmp8A&~J z$ov*00c6=K&Ik0fX)T%wgVx-(g_mQhAA5lxlqIjBi)v}IBT4XWMLVH@=>oa9SX0IT z$rynQ?KYu!Lbf&gpM3Z_juqpxVragg_RV8sKxoI)$1T^THs)9Xa3oR8?sPuhK+|Wu7C&gHTc=72CcM z0#0>BU*}0%Nyl9D{C5XMWT{8RnP*t*e99G!X=|KMN1BVJ=XPJ~+EyyWiW}7T1S0^$ zNgoGg=mQosxA{ybjn+-1%3RD8g78d?=O}|!=?)y2B`{re$KXe|#T2yCD#KFUm}&Ju ziZoiYmQ>DG;+OrGdJrZS42w07qC~rdr4W(~CYuIz)hBXvmJ*`Nt~2tdieH+?)I7_# z?E#SWac`rd+gLRw&rHsWX^1ZO(XW@T@jfnJJy=N@nj=A0DvV{ly@<8Z%m7~M@xQFk zfvH4p5sHaYxgnnQu$r{}WxS|a#+cjW;~`Xv9t`{E1F+b61M|*u--RI&W(cQfXBi9B z==mh-#AF_)TYp*Ad5i3xR0ZSOVqKe@q>$EuH_ItjnL(}%9BWZnFqK$+%`shUNYk=0 zMtSL9m&Q`&74v>U%ew(ujdu?*rza|lAPm@@NVvF%uO8>IKUZ;C{o?%MeINLsh+KQ+ z<1d^uWZehP_HpGxcM4MkCCD}C!3c5Eqo9v;b$7(x3d``|sSo^}x-W%VNGp+&RBEJ3qU9=k~2zrzgwDzV@}R zdgY^cZ{Pm#ho3q>-;;5^zZapBDWk%5&Bl)uk(KFH;?f@Ue&NMg>`x2T)hSB~oU}TS zo<5592MHk6Fc%Qx5*ETRL4;)}yoBfibBhZ8PIHGAxIu+dLaB>HhzcS)C=7_Gi8vam zS&-ZSHfO=gB_GU*&V8UnahYc(Obvx*%bA{UR5PM}_Q~+9%86SS%60WZ@xZ$8(8Rky z7fGX4c^K)~)d~Q8yixo$?R7?*y_Z{WBNMesfTK7YS>RpG+IFHKCb!mX%}iT8Nnpdk zo!Mm^0+{Yz44qAzqzPYYgBzKGn`TC`>ptec&msYgbC;80@MgTIMe8hpvxS_4b+tOn zh0~1%|3A$p(Yzf!qCS~Mi*W9 z-OUJc`rE=`a!5{c4*70KE_;(05QKKXmFa8Q6Yd-9YIIPX@=rPOMcVx*k4kzu@J_4s zI6ixyT~C%K*!m`4s>B#CO!X@IYpH8PRGZ*SSPQe$dxUmyMGU!T2Bf=)7Cxs=Awa-T2GLe04 zZEH-^ZuDEfQsx&gcH&f(s|}p4|K2WHT{)~Et%tt zbn-FxRUyt$Sp>nz4UO7 z5D|^RN@>B)qGlukvvk?WQ#aPy-b^CMb^rWx&j=mi&wTiU1|ayt^UsS&=Jo)6U{R?*W#+9qFo}b-) z;ZD*5eLX+h`?_bSh^csK@k^qBif9wlR=s)Z>^)&+hm9c7$B+wDwm!eK{fL=z$8kAOPFZplWN04RU;?6mEK)( zdc{9c0gFASfj~}7RU&F+J`~(KiCd+E6+=IX9^j-&Q7CiT0unbut@f&-2F%{O$^2}v z>P*v!&Sr0n)XCa5d(PzhRecd4ClkW-O`fRpqf={KjRDC@o2Y4v6ilHQbf_IV-yY2o z`~W>+Wq(RX=X>ctJ9-MXlVS9xV90?dpQ5D2b))%?9q=F@qQU+WJiPL~gOg3fX9q0W z?>K_Y=W2E2?j6{H3J!)XlcM<;_L))ww+RQ6SMh)%WG! zsPx=837J#ITOZP79vBU%b|zCjG+mKQmfWWw=$Nc|Aw|4xc^}eZIydo|;D|06Z9h5T z0|`5I%3EjQu{|^ShD~?WqZuG0RdMSG&ggvhMHMpU$dWY4fD!(4rU zhQqJ(NYjFf*~@8JjkCLBIM5%<%rn49qzF-iSbvu?D{>d5siEsnpqVC|gY8rqMnoPf z)Z9Zhw%{^n8B2OCE~5ovmVlN>zuM9qGSG52Sq2Vtrer3mtL)uZ3O%Y{n(lpl+2oZg z5<#fI)L287<{z4yS8P9RuVXl@?aDS}u)heC5$jZv^ zC&)p($-=6QJLrBy>A<<@${)p!bdMFLHH6TfV+s8I@v4@ zhMS)1fuGWVqo+YTlJz$s^ymz$(zi@wt7d@9$ws8)zFnvdRmNrl($mm36yN($tZL#O z9Y;VyWNQ` zcW&P?lb65z<$&C~bNi`ho)wX6H*W4P_P5;5_j+g1oz-$kdQ~+hUs_axx z7Vawdsdgs~eZ?1i$@Aaxm%sfxzwfc-^PYU)d#_x(X=Yb%>cx8Y>^;Bwy4SBbi->!7 z@132WU%mdo^@kq1a&z~Zhd%DLZ+g?6=bnH6FTCy9=bqiW_{HAW^9OETf6eP(MO&VE z?wRMFzxB)$FFS@w@S_?%$Sby@tkJpAljU4oL>V%gSEPn7(dbt(Bv>BvSUZ= zOO%irwqvp@lYXzdb8n8tB6S`W-r1!cI2Ml&Gq8!`b){eKmJ_kf)DWX<8Y&0Ykbf)>J z$h>c473ZT*+!%vl6U0cSJ!@sHX$!7fcFVG0Dbrp_?pE6+G9#kc+B!*E+cqE(qAe%e zT8ba68D6RTS`!M>aPLg-#+B~dg9{~M(M3p)$_mv8*Tt$^ZE7-`6vM?~69>`>cZ5XE zCdt$OH(BcdA>!m3ky^= zfMzsQ<+1jm4KiyoB6=|SC|k9U#zPoo*OPW1?hUc&a?8u%)p|-Wdv*-Cn2a6|+Ne!D z9DYp7CH&Hx4l-OVYt$~1-Vn)(S|;#8Rj`mWD08wKAm+P z&O;}bfcKjy5Cj=!Z+QJ@yu+3^|C4|I4S)2%{De>Y?AuR2ck9+Ocg~-_y0gKD*uC(=-4DF~U5QLS{PLGS^0HSfCnxvz_wL=>U%7Vk zRo8F6@r|GSzW04VU>|(q!+-hj|G<9rFZ~@~{@O<${g!Y3J8ymG2j2S554_>=M}PIF zeEcVT{Kp6^p;n2o9i}}ogrEmb7IdROplk`UoYBl?G>f#v6R|28%QXd1S3y*Ro-tB{ zIMp@p>@_X~jvFqBy*kh+RA+Kq1ZTeR7%52nP(+Pw{s%v0+``|ObNq!$cRr)oTs z3sB~z)kmmqs8*0>O+QKk%t1QkStY?1im;m)50$@eNPS;yQAn!RH1o) z*4@{xZ;%#F3=Cz*xOP*XJzHhja3R>V%V9SJ`LNfb*ddo4nDqPm8q^@JLrtg3LPY%#*a;`ZcWFq9zJw&ygsnOhSg2^N* zJ%fjbmp>%CGGUA=Hc_1eThz__H4deziinviEO*xQ?!%&4+jVYWl(%NLhr(oC-w0Hs zK_mT)lG^Ts9f-ZW(~_BkU+zT&(bJ7xV2VWHs9Nn=s^&&5Zd#IXiY^3-I)=)CQdCIZ zI*H=uD2mJH$7?esG)=?PMlj6@Ybi#leKH}$G<_@zMAlfy_}hcs+&akIBso8L1HRY$BNM7$|*%eYe| zB6DT>k-cXinm=llY0*xw5M8V{Mddd=c}SxHPa%^ccL;cu64UG{)HFPxNG8ENKocGy zDj(hSeY6}+cOuQ8s>_dB$vgM(p-1I*y1gV_&v>XC&s*O`+Y|YFeC)#`>ZAMBkI_LD z6O=eA7pjhVWe>CK&X(Z{d9?6F%< zzVE#s{=mmQ{xK(yEH`dEjOX=%hi+VX;3nNI;1|KYKl0dX^~z2@^yIT=PdxX`hhBL4 z`Q7Qs1G}rX=p(Oq`C`lY#rcK%#eRRX?2>Eo)RRx#x&6Wm&)xd#-|?d_+`jt-zwV2^ z?(6^5^((vI{U81AH-GE@`mO)_x4->8?|=Jyp7^BKzv@#y>2;s}$!~yJCf9XXd4M&d zLYE2#9I@v}(PE~^slaOP=NNOhIFiT*VxLbnI>loQfu51%osRMLu$Y(kXR^ z28XJKu*i9e8TC9$S8dot-9k2Nnr3r0@}j$soK4P7b*y%kB{rVqQ?SJrrEZ@mLwQ>{ z2cfAj(poU7H%X|8=0(4OQMBu7j>P2cP(xTshqVm9NnnzyR@)J%d_fB#(`8S9=!@Zy+5J7u5{NOaa{}uZLChrTtEuYbvB=adem3`YxD8 z@6*RAG5%OI(+_qialreW2#PsVo1}-@zBprZY39Jmql-4%)V7``^BE3;3%7#ujhh&b zDSnq2Ssh+HIcl|rt8KsQP0vo59iuUsQvtIT!HjMRCmqOg_%VjYKU4LOS90|Q_%s2VbU zP8DLNYBg+DjTGaiA-h4KRd(yfmzNT$c-BywM5*XB8~8w!C`FuUEgqEg+-i*#GJ|#z zp^FQa92n6=gsxDkNJKro;ZPGudh!6>s^2DY-Ud|NvhI@7vDH&&3YHoTR0t&U7z`0@ z6NsRwI4C@r-J-&Mprm+k#{E&|NvxMRGIdE@FOn+Sd2XGd;v&-Up%zM#Diexif_P7nq6(dTWJmy5RmXGQ+`7su zN}>eEIUQ0q@lKNd=jSOX8VXIvCiDzj2I;Dn#h;p0ZnQOz881WM-VfieM~11wt*mTA*ASS&WDk;QHMggD*BTEJ(u^^(W~flaG5PSm>@Q7S6BFM_!=pBGZsTpZ zJ4s+MMK}Rdg~$q+Vs-J=R|B8F_58`{)z>`!v3H+)cE9fb-uL`-0UmhyW82vHK|$t6 z*bz~J5+R}OYqo#6oL+t98-B&DC*Svd-}|GFed*`La&mrgetPA~#l5q;w{MBajph1s za=M(HJomx(UVYiiAA0QNS8qP}=*NGYEW2mk|L$j=dM3gtdh7h&wQDy|u3YiwpTBpp zzxDj{Pk!*pTX!$q<2!!jE${x&)31K~bzk$1|3kLxuX)XD{@_>s;otr{f6uqS`OSa# zZ~m>Hf7b_p{#_sZiJyJfum3fl{;{upv?WC(v}n+-F|PO`jVXReV8B`=H(jixS$V-s zRnj!R6~UHJvq2(EAwg4d6$=S%#c0zei6XoWwwoDemd*xBrm1cpzirt()EJWiQAdrt zAF8G?{^WZ}Op?`2O7VypmN7`2^m9mq>RC;pB}+E}wUj@NDc#*pqteH*(O~1S0-F`G zJ>N~z#>7C+wEA9VWgfY7x0oE&bxqBIDpz!)-)K}WHqu8=Gu)t{B~D0{$?V#shb7mB z?xJYO3Fb~FweRTrYf~SzVOkf^GB&Nqp$%z=RY0AcS-GK<%wgZ9THkse_lWt8z+r9| zIP>wwV1F9_Og6$3f3J{_%g(&RKk0FQGLhrDP41Myv0>k0yP6_^=6b!Lw%~T zB}2B&(m)|5(=EzDv|@FhgLAdfdN&ovQ1-M|H!BDV!RCB)_+>WF!*Tn)J<+FL6{Dt_ z8Dg7CO8_2Fu5yyz+?;e?$s0unw=Pi20XPM0Y|}7>l{N|u>*d??lonAz8j~U~0#C)R zngtyp4gsMkCJIDcoGy{WZ1)IHpTM<=u!F;j{3t#hIFK%-B3e~V7q!J;s;bLyqezu# z8u&JW()i}#Ep==QoSK9L!CMo3%C<`b34f=y1J; z4CB={9JS`)nIx`g>YQG(szmh7*N%xGg`egUDR(Lt(*sdQu{>i)gd-enKduf$#!RS~ zNP0->&``D%=s48fHg^jbE*2308J^K_-6+=d{uIa~<-wRIb>3|k&%|7;TIK2gCj`z~P>)aS=@=C!1j+_S9A zqE4G$yqp6nQmuAoEyvY%XVmmX8joflte3CJ@CpbLA!)E^!jTBK-O29MmfZ=&#kt?# zV|eU6vpKI_y)I%G`@2_eJov%)zFS0WcY5W)N9PEj`x-UA1Yxd#4(b?aX5sakPyIE& z_#@x-LqGnrU;gVqOU^G&uk5ZaB5J#&bJ^f9v=DfsER8XM>VQYoFs=>XH9@9lafdyP^da5Q-(D2Wl>8>c{zqRdlo3nbR?K;nnNW65p3rMNl2(#`3_Co=%#_IKlP+shm{|HxWxhUPpK}EGF+!;KOB~?a5w|k+T+1;pQHXJ#l z@T2bB7dev8O)*3)_j($XL()RqPmT8SG7iiCqCa_Za&Q!YY?tswx+9ZkH% zTE@-V>k<>|){ku`FXRm?ae(1D1ke zILK_poNE8XR4HK4d&v$6eXFRKc9le5bno8ypOs28U; z=aiMgv%B}6{m=*P)E<2B!SlN>oSs}e-Cd1~doO$CWB;y<0XSjZ9(BGn$7gxXn||fB zhhOo7KmK#y|NTGk_^V(3;LQiG-nf3}&I@}#zkYiC(Z@da%C(z%e((J3-qmZ@*6{Ne z?wsBfzpXFaJ%8|#M_%>X*Iiu5-CNJ!yM1O?uK4Zqv)gyLUhJ0LGq=`%`E&0E@Sp!b zzu|SC_{ryMMyDHhJ=?~- znZpV!-TqT50ZuU$l-aeq>AH2i#AJR6q@Uv`N{4q-IU;09#Uov-_My6tj5M2a)*7>) z=vK6CCs&mSa46$Pj&vnHo8Rlysu`LO z7-om2t$Pz%NcNDj3?9FZu=qCO*IC0q2`m*GgnyfDJ*zu=ovlCx(ov2gO(=s=#<@Ul z;!>HBjnPkHj5`l$`#qZ->?-o!HnDZf3LZEB_3)Ps{|ASLSBjaL*UNbh3HWfh-Qq=x zSwBADo9VJ}yLMaO$Y296v|2_Ks>dGC-sC2jO>Z}O9a};f4%zS{wsY>HIdeI0KZX7XTs6!OAkwKwh9aAv*{Zu;G z+?8%zT@N*x1JMCUwnS>GflS~-1rR40b&!@8*1b8tHeyxtI+^U%YAk^v=c)k0taYIR zO?(*!$%LY;$E_qE!pQFnQ;E<`0-{1Yd^s4^I>tVO_D^ZjY>G1F3Ly~^>5!Pl>Mo=i za@x>aS=FR?!LSP#T?kV5LP*WAZlkZv6K>TsNSPjj81sW| zDcqLg@B`gK@FfOM*J0o&UTCpJRZ$n8LV=;4)V>K*7}XCY;y)QdUNU|i&ytIZMtH$^ z<7?*ceNem<(P8Ke=_{WJ&7adE@s`$5)EM56ZHSnF;oSu$t3*_T3gZgX+Q3R^EB_^ z7=Butv?xqpFRGf6F1GZBD_WFJI|kH~a_y!d?|6)=dh1CVWUs;KsXom|O`{+x6-apY z1)Q#P(_D^-u4q+7q`k1m1xZFF(&eFdcK3K`!i=e|J2jZJ^4hetL>JX z58T|JpTBVDmSk?|?&Ok@1wZP}gQy`%Z-KM@IJt52wV(VMKmWtu{nigW|C&c%_6tA% z&fB-o9)9`NM;^X*``KI1JoWrzuX+8oYY#l|@WW8Mdi~n%JGVoqc5?Um58r*tA9&?s zyO+Q6#zQyny>R;#kG<^fbI(2b#1k6v)Kee+8{heDBJw3){uRISv%cWm1^Xan?_7p@ zAep>!wS#X1$4gWvnOs^|Lk|HsxvavQ0EP5#CBh;7vlTdcB@9~`aCK;S5y?l>8% z!hsIH{ML$i^ME%;UyS6G!-RXi#JFIbU6d)W1~ZRrm~l>EN%dzTo6o=KoLAqdshdti zMhZ>=xXq|0k>zYP4b@YaP!!COJj1F5_6P#j#N%F8%6>r)iPa~VYx{*O8Cs>;{&mFt zAZjM9Ir5=}1k^Ie4Vqb=3KbN|O3Y+CHs=Ps#zyA_=5%W4Au1_?nc5o#iaFB-XH^07 zeYD^+Up)*<=*}#Sl|pFYZWcw^caa5PNGL#6?*&*-IxF%oM8ws0As0~D_GX$@vx&BB z*KJ3S#`qd7X~srKc{t2Y1}Y|MY5%E{vCP2gRUuB#+>@gJhc=uc>$?)Wj0OiucF$B@ zFe)ps1=59RWRTaQ79lHKgq1p%Lk=@C+-VS`C`FAC3B0r=9iozSe^GcivUijK8NvuL z0U4e_5%7}qN(eOh!wJPT1ja?IvAgmiHRkQGNV9q|QbW28Kt1E>ovTXOW?o?CC^v*h!ihfX(-u(VI@GSp||6{9yv zl!$#1@fs8mq?T<#sxUO1I@|e+lCnCX1y6}qkk1@a3z3@8SB_6E`sf<*9)pvkUPdVt zRYaHNf*0<&3Pq^JFER6$S`(~Sb`LQXuLmK|_JCOJ0hyB{-}i(6;yb_RpS}6JzW29% z>96~dl_Gw#|tJkmj?Xz`%e*5`n@7=j$u&XD# zXYW0I`}VCXCs(dsz5dj*&x(ldPHlIkJj-9onB*l%R%LtD6jG*G6sCB?r~jIt|Kacc z(SP&y&;0mTT)TFKg7Z6Z3unve?%K)8?OV^@z5V>t&pdg0<=S#`dgs=ymGSD=z3$45 zo5DE1d;3&%bw5$uJ-c`9>gmUR;wN65-Tk`%`CC5p^mA|gtk3-q{*(V|PvII)oUbeg zb`h<2m!*A-S3LUISN_pI_M3m(m;JTB^iALQJ^#md{*xd1nYX_4H+;coe$HonidK`E zsCXu9FoYUWQko=aGbHUEVF(6YXa)(c6wTu@v%kZIA`Apc(!C)DA!LAbcZRT8%rxXC7#q)@VVj9o*!A$efw*7{WTH); zYxhHxhl6&>zyW)NV{khoA!8K2ne|q8R6t*a;PjdD1TqZE8ihnuAVbAfW5|{YAy8~p z+~^9%#!u!b>v(|fPPuixp6$3)Ow_lz0>zeI+q?mbX|j>GcO9(Ec@@1D<|Ltz?K??t znVN)k<|oXb3td^zzx7NR4sNRDAx)Xwfe!6@kB?C@ncZ?Qt68*}IoS=vL9ddRW zlGf?>nUB$|mZx=tIhS?o*VSd`9iQR+X9WaF=-;Ca4^C*(3B4 zvN5g3q1Wv}qDW6kAL^Uox!f}}W)T55;NK)9N27A|XA|7=yt&n~Lj_-P~R2yqI z9Hx(8$_Eh!JqRJ3zA~k6tFM5CDJvc@=gmf^OQ?#w`?_YS#JL5-JSf=kEyPd0ukd{@Ege5}^#bSzd zp`JEaMup^6N(OuKOaz(MQuGyOsu~P5K9{O&beZfK=3_5n!~}4-Lb#|nCXAy${MZUH zCb>ZyTSP}3(P<$G11EHFeAT4>nrRCXIRf{slp3iwF8n7=7}dE+Scj(hOGpqcnnY&j zj4`{-biee!Qot+17l_sSRJ?y+K-`lm|vi!3@NTncO}ExtvBgsAws(sr`7 zR4-||RSHF?7?tG1YCNyD9B-*v7cv++#%#S_&qG%MF-tf3h)_M$+iX!#%$wau{42I* zDky={B~{><%?u?^@;};F7MnP4lWlIg_i8D5^hGMogO!ef+Fu(X`}>{2-)2qL_(%Ry7+iyRga3eQLzwjWkgN{ zOoTx%&Sp@c3?W4mjj@e@K7(lf;@|k+{@h>un<8@c>eV-Y*Z02l7vA|7zVW|({56mD zI}I~-PGEVordPAt$#VD3tvk1FtJ!W@PIkK&o_}U%CwK4OTK9WiyL$8HgQvTz`}N}X z3(r3L>@)S;nMwA#&>CRjqsBTq$*OIb0Ax|@3_HUcf8}R?--8eT^gBNE!d<`f>}@;I zPkQ6)Pj<_?KMRJzUjE9D5tR!M0BZW7cf9k~^UuEQ6|c;F`q9Te=Je{7MNdsu?$>8N z^q#N(OMma5{j0Y;__A00CtvxsgkCuJPOO_LjVX4DlSNM#oGyA|SPTaFxKDcHH~hc9 z>7W1b5B}vp|3CiRTYma4fAc^1p?~$3-}^g%(_=4xNJZXA}lk z5>7fI#4E)#B7Z(g5mz+{GX}K!7WUZt$#DY6U^>Xr?lY6zrO(&0e@Ey4H10}GGj+IV zHXiw0QL!s>+b}){KxidyH1F&&_8qC!8ZGx2@sOgCTSfJ!$Qb)CZj9M|i! z)8#~}FGCk;m`qm>Y;(&m>5sA^;Q^u`N6Bg01g%mY$Fn@Xyw@O`mS@W~niJTkwC}=^ zg4^P#>%Qy%ROZC+iSpDuy6UEkd4JcMQ-*;DwqGAx?R@{*-6Sz4-mP|P@>wSYIV!-r zE<*&=@^IVWCKC~ENT8C~$W5$-;1BR%3JA_;YI7?uev%Mx5GmNeDux?!L-zB1{QrIf@O8AyhT=_Z+{Qpq_b!W`1# z$zx*-Z7xjGe5S}q3z{i1q5&ONOTHPfdS(ooAR<(mGzp~SyVYqrQaHRS+NSaBRUS+j zo@lH`q&zA-g*D^HI`LOna^-sZi24C0QoUOtH2pJ)nOI zRm@djWh6J(c0j4oW*FL%89NZ)QZ_>Ls}6)7<)GMOaU(&6 zoYlMU4Qkk-jrP_X9^Pgt)??WM9J8H>X-d{(?D|L57EuRicpNXwMq7$Y zy6Bd%C@*e!)o*kYZ#D(?*eTd^F)PF- zO$*E3zCN?188v1C?WV`LPs=fl;VSt+FCEA?qERb3B6aJ1qEp^w^An^xw#tKhVlby0 zEL+=SCYwkQVA_q>p)fMq(*TY@alfqtpo)ZQB$y&b_X9h`j#+*1$)~^SkNue+{jr}C zkw5f@|C@jBvp?%kef`(}pWU>AEon^6$d-tAt;)9RA^3k)id%nLgUGCg^?!E7M=W?PSe)gV-*n=;#)9bqI z=EI00zl6r4421^63JTd7P8YrU@I!C<^ndSPfB$!X_#B`5DUUz({wLr1Gw<3h@`_hn zJH2|%POrZ2z3)ChyLbA)^{c1X9{+?-c+DF=;rVBt=IYNr_0+}L*;A`L{ECOT^7_LM zUcY+v2j20%@BD!uw`KW1|DmtF`q0bP5Jp7E8eD^WXBLHv;lyzDM6d4ZKU434U;R0s z_i3N;tH0~b-}cRa^RK_<=il*%zV4g8@UuVt_xk^JMJ*9jGKCCW}wo{AvOyzNMHkeD`tW+m0jh1ro7BG^nF+2|A% zQeGanV@gx!qSvRsrZ-r!3He6N!|Y8V&>hIjFul=iZio zNEMdc5=i=5ZRgo|WzKdsL`sr5=iW75n6wdI&0k{joE%l+kPR#5I)_`luh;tEUTkqWFD=?Ar7MWGVU=O(O;U73o059v4o@~@GdPWdrz!i%K;Z8Fq^MGO( zzE?n0!zEa*8zB--Pfht&CC_G(qe?R~k3mk&42UjM;ef_^7=2aC48_i1>C@fDc^#d^ z9OzOJ6P>Go!^FnOfbS$@B!f4O6zbYWArP2gqn=>fJCa8pmChuj3oM#{q?bo4CuLHa z?TWU=K#A488NMb}YM_BCb9_(|be2jtz;==%II?t3@|;;EX_U3R0M@}-x?=-_pmr1DUFL|D7&DE_lilI8$wc+P} z;hq1t|MHJN@zm2F`*9!t)qm`dec`YBLWTVGzx{WihF&pLv?=YA4IZ-P>nRK7a4t?VArguoHXYL+^j|(O2n} ztA2id?UkST!m}T~7atUn-C|cxcio<@BEZOBS{8lH0N4T(6g$I}MX&DklYhl$ z{Oj-k?r-?(fB$no?TxQ`^kq9)cfP;zAHcfEbxf6THwec{=smMf=!_OE=Ki2UaN_z%44SA9-~gsj1fHO^O_ z?c;onHJB{q(?zfD^xBDDKecNodTpmyTJK>B+nxN@-}!sK;ETTGoBr%Ke$RLP{qOtH zpZL&+pZSU}`{LKV<`r%4Zw3r1pkM*lRYRSg_BfR&6htdxC=`c>Fepx5NJKE0b}Quk z|2FKH9A*y(3ZT@*X{U=L#pp=dt5DLa1~DYLXw6eoesD6RY52or3_6n8x>UJ6v)-w< z98=?Bdkv)l4~bG!=t4~dh$9*XXHHTtm(e=|*_1zBW3ruWPk(U4)I3lOcmG$+F>5*pHcRIhXV{`nwx4hwgEGs*@?D&vGO9!dR1qzk_T9uo#@65rlhf5etv+|4(?}! zByk#KzONS%$jmg8xtO9*R^WpPR|yxGcsbi3O&p?rLva)Uzj{P4MALX_8dU^>5Ltv7 z^s1%w&{%-*wpk=4L_3>zv^QF6c9_D-l?csGCU-?~31bpJO<)BuG4su;WBC;a9>CiSi~q!EjVrtU+;fX@x3ns zUcCsRsoL7U#G?hc8_hxJI_R?v&u!U`sC9{6P3a{n_5M^uc%q}36gd;px;Qjs14frY zg=r?EAPdkc)Jt_Ei2zLFK%!^$Mi1=;(=dSZu_MvA9Y;~wouy(1Ux(T}$92aTQmmqy zp5PdrPg){~tS%4|@_Svse*J5|;m>}`r+@mN{@Snow(t1I@B6@q z{@S1ay6ac3MEklceO=FYyOVG~KfAX-KYQVsr`L<~IKTU$cfI402OfCh*$*$Lr%$}^ zeII()du}}ZAh|A!3i$lf&pmzXTtt?2y?Lsk=27K4f9-}X13ed@^{`pLH*{KMD1^5Mr{{@};H>fvAZagRNC^Tbzv;9c*&`~34aAAb1k z?j1GT?UrAB``fRa*lS<+`ak`@{2#yY?hk#!FaMQa{N-Pf<;323;c>Q)I~Q^HBF@)H zxWg1DhATV0cAn>Y_m-OAQ-nwYy&B2^j?(nErpigOa_i`bHd6!ek<9nuon z!g~=#1nt_W*oN#j_6ugalv&JZ8@UHNk-94cyJ&;Mn1pjna5#2Nf0()Os#%P1ASRWB zm_&zOE~B82L9;z{{Oldhn0nU*>x1Zg2X@+Xw*ebP5&;zOi*B9KO8Jce4=~L(dvXU4 zEbTVjB+e~V^Om6=NHzw&a5DlNK@g)rjN-XW)ik?Uqsw~_+LgLi?7dGt{G;KU(28X4 z%`RJW8Qff&Ww^qQt|o&L`n;Y!KxBg~aeygPQ;12$Iw4uzeySRTF%de>0?LoY$bK`U z$BC)QWkW9@b5mQ_hFbx*pfMX|=KO8S5}CrqCrkCI9-NwDZux(M;l|bnZ$O{feGOCE z3XYg=hlG_)u6WOdmyLb&usUd`3Jyamrr!?nJmzp7%;?7C1JIk2ZeP|KwnY@1@bWq3 zXV!J-)QV&zL?!1no4mw85fsVBBine_eDu>@D#Oao?MfRo)8~n3+%_ zG`k{$Y8Am-yMq|M4qfvMwLG}6odKhdZ+kvko7s|KYR9~cQirOntzKzPP?H&X#^b3s zlN(8yvDGEHstrm@?e%iN6e*`*$i~UL z5pl{Mx2A_hD9X9?TqPg7QUoIiVVB6` zXW>dp+i}0Fi%VnFgENvewv&$c7E)RlGn#5lJ))&>NJ@G(Ldj^4UKF`BpCF28GslLO zms!AdS=`G%8wC8X|K0T~SN2}t+k;O2=HK?aZrptN zU-S>^2f%qXY2_{r(hXLrx;-1@+K-gR;7 z`SaV)-FWChUfg@&#tpw%eZ9DM_uj?XxsVs<{?7M(SVV5T;?ak1TsdEPvBushA}cqJ z#vg6x5z~LVC#)$RdGxVw`sO#s*$eOe#h?H16CZl+=?}l_o$vgGx4rGjC!Toslh3~U z$!CA?XWu2?DX*fps}F#B_tu^L`E511b?f|FzUv46;Sc?r-R|V~ z{^74RvwhHmdyn&d+`Y*E_}LnJufupz+}p?5PVepG?%wX6#Jy9yzSnCfc6G-qJM2tz zCia=1`-PwQX`k^o{>nG~!@v7Czx6wR@LlhH;{WCSp+fA2F^qt&I~WnVa?Qs0*&;`d>I@Z)UC@&U1Af@HFL~vZq3du z3Slanx{Fl|iP1bBE|pF++Dq$^py?7z;<$m{j+$jsH4IgJH=P?+uZ3VtuuPMNRJ+w< zuw$={WcganIVeL203V3cqsJlNh?j3j{`Cqn@oFXzI(Pt`+_kK zYBw1BSQ{MvuJdpeL#f%4KN@o?Dz2dbvW}(oG^FX|9f%jXVUzV132i}b4AaNQlG37M z7+lXS2Icq?a-;L+Wvk_gfzon8TC0B0cQhUMCAslad?AMfY-&Ha$r#`0IU9|wQR+CG zH)EUWcb@?$u!Rkm>BlN;t$%3nKnC9!yV}Yt%sv>C(?l@#A&T?>Own-`wk}8xC!Gl& zhu8F)jewd}dv3lW=#XY6X8<8uZiY4>wHq{_ggfFc}$<;`zdq`Es)J>1kHT*OsOgeoBxVkVK? ztopYiB4Hv_HqlFjld`T{T}0@ydaS-W-NX0co`zcJ4(FQ^4pMP`Q}x@$JS}Jqow451 zIRqOpxE5v^R52n#X$;xs5M5Th;xZ)wx*zLdlcG-Vimqm#BEi8SQ)J>~CIwgcT9-5T zr@UF2N?8^iRQ(X~GKXqawYCW#NiWgT#LrDX!c9!|B__q-i%Kk}kc`Q0cl0VSv##jq zjYsM_4(j-iKp|bm9UO>yY->PZszDABuEWm^XlEcua@U&smYH_v|5I3>w$}5 z6~5WBG{Y>jDIJjT!FA0Su@~o($+60Dv;6}jmmST0wpH^IF%d}m!qfImFB5VAYSxW7 z%RW*DV38b0VbRLUjvk^g$eP}ikoK&?G(7P_XG7FOd}?n9;Qb$b>JR;qKlRf;`?k|7 zSH9|N{?r%!rr#ne=N?Y1K-Lf*Ttj~K=YQd!eErA&$*=xHZ~2*j^BaEWfA(j-_N%`9 zw|vQde+~*STo*>{@w&$!zq-?%VNqP1pPk*g`!hfLmY@2GpM3Xw-t#a2#lL+2```a#Z-3v9 zz5RXP`~yGv##g`MQ(ph*uXw|wZ+P9uJbeA?dq42R-~Ha77LnikRe$VNuYKLw$_TE( z3+LI&d;2)s$N9>Om1}dbUctR%?>t|5w(@MR_x9O%#Pw6Vw(6A~ca}_1S#}S6#ee?a z{PNHE+`sZC|Jxt?ski;uPrdDnKmXHz-+%ZegEOPxnm$u`ba;*avdeIxGt%IKjFk~W zB*BW5#;VH6O8RRcfC?ZSf0wS@LZ9k`hE)$c;MskjU1Hw+XtajIxy512$f*h@z-?F4 z8;=?*6yTX*^MdK0HxG=7{IsbKdw9jfP6io>bD;TXbtcfE`AqfsdU|tjc-S)+U5e#Dv76?2iGC`QG6}>FaXHG|YRWO-e2C>m zAL#VRsNpZWZAUt+#NJVAm(piFIe0OtiJg|gL>pm4zPaVOvDsEvir37u*<6ib%sSJW zcsLTbokgJNF@cbHcqZCAmLe+Iy`eOqP|dg zB%iA1uNQAMTg>4jP7$dzD@X3gk&zbnDw&vL zXbe@l3{&1R&)tSML11Dbp79p3UV8DN2(QO7vYAMnD~1(*yF8u?DQC|r5)?0PQ6(m% z^skMk%acvjRGM_DeTOE}2~sR&G;M3^e(FNkO2q26RD?pctkM)nJ&XstA;QRniZLm# z97$;Mxvh}{vm0qT7RX0AQJ(pdZ7&T##X_hO6jiQ0>!qQ{(77#FwOWf2qB?7uiWz7J z1_h<2AZ0$l+9mR~t^=y7$RS^Nd3K^@`_!qedL+4OLAmJR;P>P2^stWhnh}E>5tB9J zWf!*2KI`_~HCir+0gM%EJ#o^yK^AyE{Dp=Y}I@FI9;%_*ctNbM!*fWJH7Gn>1TiL=YP)UeLh6)+`jYf zcfb2bfAmNG`49idPyOUizV-c2z4iT1{k&ACqKSY?w;>|?Qi(fFZw_Ij=L9; ziM4y@`5M`BoUL);kxfo79h~CK<|NKny|>r1ecU^>d;56c)UKWA=~Cy$8nX9z{FnXe z|MVOF+IRo$|M}ni&_DW~fA$l<_shR%nN)Da&n*d|w(N0m7!IhE#R?@D35rKkqNNCO z_A}~gvnl*jROx}*uuG&-0qT_kKI|@=PeO+VI}539WShARThWMV}eIv9O?Kng&UL= zagTJv57=YkI$dE%Uig1q$S7%8y|Na9kj7quqG)`{fWdli{{KzWElj=_6-t=Cb|$wREx7 zYpot23a$j4u~NLl8X+Fh8aUPJ8#xQEAY33}>K>v<2NzRKKkc4cP&{Xqb-!1$ot|dY zFeAjQ=KSuk^xQlgkk)9n@X8sBjuJ?h$XMwis)!PFvWAXLK&E~DTZ*D1L?kSri%LW& z#6>|f-|vGISwkSp!VrfpBC%A~!y+Wg(lE8kD`m;rn!=0{%rj_R8Ge!TOm}BEedQXI z%x4r;aLO*SD$P(9mr{J(Jko4wQ@KT3K5!d1XfY-u++?Xv4IvS=_G1Z&#YEg1@4T05 z!KO6s)}@q#pu^FXbdgHyiL~o{7!>~h*!%Oa-S?}k6TH`2-{;*Y6PXAhBoGK7L}U;| zQDjmEC3-ou79v_$1!{}!P)(IoX%&JBltp#5S5;SgwN=+uWh*L9*ic%6+E56{5M~l2 z1OfySBoj%_u=o3X*ShHn(RJ{~MCk$FOIFSv*HpAl)DRYNzEjKV@dtXuY={+L@ zp$Q)Y#GRoK3CY))%)AV2Fo3Nljbw&SLRxFudnZGZ^TG8HPAMq!Rgc&B&Hv)N|Hyyx zXM69z>SI6dzxcBM{*k9VQY+&;I0Vf8_0Nd-J1jd*e^M=7*nn^s)DP(R=GNAAIe% zeBal6!^`uJe(t+J?_)pllRo^TKIQ{{#Ya5#+3)f8TfX&vzjZnF3%=LSv*pN?1P{zD z#OcbamWnK&s;v7O-NDNp@nFMa6;eeehWN1yY#Z-3iczxA8H3&U4@W^Zv6xohbEeZ1$Gp?6u_}kA*!E0S|PKGJ$kHan}2tPdn=) zEeQ+oe8K0?XTIkr{=q-{rZ>Oor(W?LKltj`e)tE!Z&k_!P2ph*qA9({ZH_M@C)Fl& z25>&-#v?Uy;a~*kL-Qcq2J@(xfcDJ2^lfY~&)U*GZjl-y2Pfw;dX5a{Ap?)4vyxK% z9qa)4XP1$p%mI-H$v_evhYm7<-$wwCq%wcjSh2&6aFI4wg)igqd2QOFL#@AhtK}v? zC^zNchb@->3Mb7-yO|a==51?~%>xQJH!JgLlYxpjl7985;k=LukdO=9%UsP|HEWk( zn4@)#BgCF-cZ92!fER%p7yV4`TVjI?4@wx?pWZaNH+ONzplG{a>F$v1c3M2K9?grm-4J$ ziUj1M!C0HwEweHS-q`>Q$82@&QsQoA{6ZEp9S}q(&p@f1Iae@J`kaxSB{edHj$CSk z2*inmtEy=#uN0SI>{-(UVPdii&ZUeB42sGmnU*SAHj&RL74M$ZjYz%CM3jHOlUrc{ zRLFFRQM`vFs8pHng$QqX|D=sTX9!@8f_9D&H7W&eX0%oxeLyt>42CZ*qPu(daE~;0 zu;&gTNJqGn^x;Q@;*#xL_?#i6oUj#$WyxKSu}mZg(xd9l!sZ0kNLJoA0Jy3JDR3k| zY`(n->WRt;xfTbnXICZ~gut>+bu;tb-Jv3(4%gTK@I$XVw3`c-(w!ok_dx-V{S}NZ zKb`5a?1qOI#@+EY`%KZ{8IUph-jcEdw6PiULRZC3c##btyxn7*7vR+YxcgL6T}rB+ zw91=@^6u?=xUywLWSG$7%Hp6`z}72YhiV*SvBrzHAsaj1QkLsJ$1!^(NXd5DeT5&6 zcWT7t>fCGTJE(MZdz^WYs@nT`y}}qTK#XyR;UhL{>D+sWp>lZuHDgdj2g=D2f!a{z zyJTZb%GwbPkGcrVtb4vWBZ{OJc_1Xj%ZAP_B6R(#uldLS)tCGw0H6BXe%BxV{QvUi zkwONku;OxBc#?KI7f~Utj(gzU~{o^*{O(U-UnH>7Tl3 zH;`8E>A(5$#~=UEANi5L{gr?FpZ_2K$LIcE{^YZt`|fYQ?;hE5q;87Ya-2O)-Bq zBEpem+0-D1(;bmo93JpTRe|JeExYs_w=iUnn;7EkJw4g|~8-3lXyG^L{7ii*3H%URV_t+yTgi8klHmXuZMA0#=O_+~Gh?~-oq zrJ_vl?bNp9bF=mk6cPBKBbM*+Q1Fge@3<7G&r!DX5~Av{gkfAV=PkNoieqcLBKa7Z z*5?a3{-s6zV6owLrtzXk~vBjuwE1C`5J1xD(m$2Ye z(;g(7+x$@IAGKN~ktPXUJGm(C^LnGVHA{75%ib|towfJl_8PWbLGGyzw}Cu_ld)Y4 z`zcvJ{nQP{QID`_G6_47x=00wNci3NdXZi@q%52YE)LKzuMk*s(J}U#+%$a47%-5vn7!o((;4$||i}6*3egPE>;v!Mu81rt5<98O3#1Y^jCY(U| zLXMUXo#7srS%hm>teQu6RLL~3WP0IC=|EG_n8MC?&~2odYyYy%*P)pi1{I|SgLm5Q zd34F+KoTAY@cO+`(~TIBw=#TM#WfRCjZ)TRBcXE!<2Au5;2scy4mN>;lprC0?l1m# zf9I?I5rEJ7Lx21;KIe}R=uu*%`<+kR#{C}m&(VV7II zy@x-k^ z=yBVtRf~&2hhuT=Bc&;oY}sSnnC8Ad*C3DI#uMjw?5%Hp%TN3efS0__dzLmi6Y2BL zN@ruR`ZY!_@S_XK=mEkV3^F3zBO*AaCp8BiMA;ZIw&Ur*BWQG%604RebyX4UWo9GE zVI(_?{+f0HW4AAR&NX)iImh@SLp|r=IR;;|R@^~Laa3aL_w^|3^2Mxq_%TAR+SEJS z*JXj=lA+19Yqu(5N+0Tyl5$Ws%+B@{2w9;W*Xi23OlG&TjB0Qz+EryEwT`^sV;1!y z=WN@O9RqOJL@8}5a^z}^H#KmuaF7>z7;bqBy!1g|xSm%ny$#GqmCA$QNO-g{93@n< zNhq24@mUjh`P+Ay)HGXH-tZRLH=qJOw-j-7lkh0Oo6p$%1mn=a%3%q_i+TUl{T+x- zJT9fK{@j(0EZo>#cWn}6q=5;Rw_?RO$Ynre89R8~U6ewQhdIRj_y+y0iu21H$+~n7 zim%aPRP{dnA{*hiZ3~Bsj^k2zl|_h|nx@`=!Lwxd)MGe2#!r`So9^rkk8pQ)N(&owBPTzH`cgnCFp}C?}a~lGK-277(H_ov2YmBLFSn4nstA$!L$WtB5vO zQ>Z}@bP<{JG7(ZGJV2X!%n`K*9&cyILhL z^=?{6kY3EX_T7E>@nTn6(pi6$F7DaT$T1)Z8yNEjjR*}33#~_=rqO~C4l#O@1|{Gs zrCPSNNmE{mc2w;y@#9v=rW1l5B09YghfT#Hkd`yFK}{Z3?agnJ*KVE}88kkgpfo|x zx#^61FIoTqn91r14~@mX0;Vd+(8?H}{0ofHN)_e?1S5&;(5lk&-5G6i&||>p>c$c= z)DN-lig% zq#MA*Rg(<@s3A5}I!u)nqH6fB{_K~3)mMM5sQ%GE^XEVLWxvx|a-#>mM(mG1@W*fC z{yEOob;!LYPrb3H^`gGsJL!!9!25pS2mgit{;&K$|C>MeJum?_rLBRedBk(=5=ob@WH?QLw?t1{GLyJ*~^~wtY?$eTIBxWewOU#k|#az zGGSNa0sMj%9t6SMajrZK=M(36^ft16N^tE>latD+>1kW()PHs8uLJ}<;CAnc2ma^- zf9%#Dd*F}V#^bl1um9HLVJ*i+?~!weT)-mrg(+puJsN%Yxw70*%3jR< zj(Qf3%ZZ2IeO$}P)r5W**6i_fT!h~Vu9+EySd%!}?ZOws|G8;T|M$W6mxboB3cvIV z47F7XLaGqX4poi?`z&kYYOXN&&g+BZcI|E)ghRo*_-c~^w;~Srs}gsZJb2|>ov<}o z8yGp7tM`1y5f46ek^7fU!sed+ftjT^w;tHJxx8$6x!NJ(ny$sePHxRB7K2#0MSh_1 zT8kmLa}s%6e55Kp#WJh?UZsGFlhtODm3X)L;PPk9t1=n5GQaJGJcF|;l(Lzc7D}{Y zg2fbKC0n>zAvI|&uZ-8vSytmIr1hc&}JOq~#z0uE2g zwdwBY5*H4`IC{_|fix3f1P5A01w+7dK(q2~dTJG5g3e%=oIGMk(&OB_N007jkAOPQ zV9?L*{e0`;bZ2+(x3|%UDPQNRr`6*{*G@x(8JL-w3gd7odJ0zxy`u{gj_iP%c$$E> zaY+Ww4;R?h8ZXz6$_>@*u*QQ30gL^ucvzkvO9~+HP z=+D`hFL75GHXjZ3}TCYp%b$4l{96Ast0^9-asb`u(6qVt%z)V{x%%-EA zAgOtw%EiI6aTY~&ypz+rFBgI0^P7wzX-I^GszkVt-ooKs63T3IC$ZpRndc6vZXrg9 z@2DdbfU!r&6w3ircrX+;{XCk1bp1B>Q9|likfokapqjUnM4BoJ_r#qQW zgKRk-ec+Ei@JDasv0J}?j_zq9kQ(zv&S@A-1bO$)ngCh z(d={1{=}`{4qpUG@)sns;?{Ts5fQhJ`{$Tzja+e@Om3_;9yd*HY_uXKH%;^3S_Q+x ziQ69c&++JOy#2nv{eHgkc+h#9iyGqRLf+b6n+Lk2M=wuDr+509-rw@W-{-dvKK|GI zihEDFfdlX~meB{QLbp}k2>u=vn)EuMdwAlcbJgKHJ89)9o2&|B-V~zC0xBZ53p!_D z_S^+z1x{f-BDuT``;>e|eAhE1=B{I^Q?55fa)>A(DR+2z)-wxh7|JPfv4Fh=rM z;DAHgqQZH-vD}NAExY27->ny&@7h3cO0s9V$f&F+$M8eJaq+^f6y@l zZXXOGnv~FVU5pIpBKPVNr%F0`!NRBlq>G#|z5XhzB0IMKMKRwZClm8s@9_9=>;19e z4&NJ#6k^$=Ax-gEGCvP&(N{AEiH_wm_S%yEhxN zmI5Ur#4D~PL;zRX8qC+*co4P;G^IA#c$gL3DLDjwU|ww+LM%Yun1ao0gi)wh)#yu? z${^u>h&!SoBqoJ$CVVb0ho#NBjXyoqPV|WbyglAwXxrt#$4*=7A{-!-ML;y-^S5qzvwUi znvehFh~h8Z_IUgpk3NV;ANboJ_+t2Cpe$xB}HCqDo4Kj~9G723M#Z6_q6H|ny zQa3~>?%|OclKE>Maa*}ni(J|Eh(i@I=4VpTK{6N1f(7-F!`hWAxIr&m#<9%YljT}* zgbXif*XBmw3o4n_NsO!rS;1jA`g*xfm$!7zB+Sl4wl%!1w*`ms^ityEu*eWxn7MhZ zl53m2y}`qkT(W{p0p|f7I{v>N#44*cla)iVxf*5DV#y|gV;X+-FuLAsDierPNQ_nQ zu72|n6g?#U8(^t6&et;CQFsr?@h&71xpc$uDCXkTDSULN9~T6dZuM+uWk&|!ZoB(2 z1VS(Rrlo~C+LTFb>ox9Xd)dgjS8}jT2e>W#WH&L$mBUG9s^+nUU73f6T*vjJE#CCS zdPJsiM&|krhjqt#Ms5$xsep=Q8`9+<#hg3{FPqxK4Se;96N{>REKl-Y{X=)0JpT1Ck(L%pc(XT=;1=NR{Gc8ZxPh`zvijAcev*v zztR!&63+74nV=J|B%QGj9=oiSmSJK5O=OesiwK&Uno3@#5vT4U5~64C20)sN;}$dt z3BXRpY*G~&VkZmtA(q*+L(}}1bkUrt?FsifwiH#E3M+kmdonQx;?rUl?i`~hMz~}I zdqwS0fb<7vdK^2PL>hewh+nkbbkkM`Ouow=o&gpRsyM|wLQGOY*qyBz62}~_W?%p| zZpefhA!9e{39Nc};2*k(tIfQ~rA&Tno2Pqz#r@93qlj-1-it6n5e53vxaEppO#_Y! zD!XVohL%YeQSw6Ao4_rGMEX~7>7*+CUp-<(r8qmA-@`%xb#@hmN)C5LB?1h$*03wv z5s71;jhAU<*q0BDaJY`(uLN4DXo$qMYy8-9JjvKwtB5rigV=LLgVX`Rtf!)*49+5u zR`B1!JWw@8V((~#XUP#(NCv4}^$Y%sFZ!B)__a@Y+SC8!pZ~vq_(%V`?hNuAc+lhV z+p*<%;E&x#mC;dEnnfC*>7^9TRn zyFKeUw;tynx6WJV+2eNf8~4v~{~V8>+BcNYA?aZiN5PRH&#}@FjzGYfOm_*oF0}5@GjX#43^QlR%Tm^#{*bz;D4We! z<(PR_FpTX*U$~n0^#U)(+<-_z|9uFoQ->;=|HJab*Pp-C>su+ysasjHC*8`>Y*)Ac z!Cj^Lm1hrI_BG?;fQtQl5m$<`<2L7VyK!w}8wWHmT0(t@GIc{F9eRY#3O=T`F;w95 zecY^Z2OZaHIyj@A=gSo?ZBJYnJ$P3@sT|~jTNi*mm2&cmXZiuJiCdHTFT2B9j_*gT zI(tXhP7K$k0hGN3;=W3pTCr{RI1?i_ZSj$cwEE|233f@_bv({avl6-Rs9d=@zo<$xTLDaYiH}T>@W3gJ;C0R0+>aF3D$~2?=ct;Y>zq62YMD^X zR#!Du@yH>#v1USb6lIu!NQeoYk`D1vIgJR& zsjzDB+eJ1=&;5cg`QVTIwYQ!jaePo)4uAWDcthj43LRlm1s<^5t)R^P67y!uJZ|iE})doyNJEjp^ce z;`NkEQLg%c+FE%aN7>pE^P`MthFH0`+i#h+}S4K z=k=P0x+sF-42O4mr}yylqi=XEfcJgx_qhA_aozWX)1C0tUdffjpTr@KqlCmnYI+au z=o&03SCnspg^^R7D*AU%2{c4Tf?(C=b>dDV^)7lZFZdia=0B6k!s21vpOKL=nfhZD zF^jty_P3L!$mz$;J<4YGT?J!o0;%=ai~a6l#;-D4MP8XM7??d%A^+ttjY#uOYj9s`9LkQ7EVz~_Jlq*mVReX0D7S`O7++)}h-Tf?bfkYnGQSTpq5$X4 zWl{bo0fIvlkC83DWKud(-mJhdnOlH@M~y+_0JJBEMnpxY#HqXriHyyZ+=&C4@~VtF z8+Y~q1Ze>!LR6F1x(ZC>u`RxJgdzrXE{XXpK7oqh$a(58cUW@VsFveU%{fjl$&fnX z-Wf>#ueQWWNx(IGA$ny~D9*)#8x>weZVD7(;BD{S&pMq`X^}7yRicJ}nx2$lD$GX2 zw5+?jY&l5blp)-u5-W;);zNch=^Brb)loV$pCT0IR}AaFq!mLCpfpJZULK>S>fuQU zxXUG1kqe4&CV^5R8a=AfnP=bZA{`@20-6kf5fm-y2Zx)PAmZGkc{Wv6mv}lzRkMCG z&#uiN2!RKJYL=#j@|MVWFY*e}9rz#z;{oni{F0ud%PdcG=ac^O`D}=ajo9Tq)(YJ0 z$?6^H>8ffGt}2oJL1DZieC`WG)YRNV1c`#JGt5i}FLL-g^Sc@(R5dYfL;jL-Q4ANcQ@lh*SQ<9&HGBHApZ~V|K2j`rzt1)!9=nYv&YpCp3h?%Fam>9+kk=;3e{;Vs zHX%9X)=h|IBBq|c4%u=V(hrj`aNlUwKi}7p`r&Fk7@gtgN8kFyTi*cS14e7T?NLtILDrM+gD76jD zgDY8fvW0e!=X@l$q;@Qx8;hAbCxc(IgEmK&!Kl!5pU`tNk8_$VYL}v0lQWz`yZq&- z|2bw7&g{KyP(S+4C9xjlprxsj`kM>s)H3kSw`@0LY;I)i6pqRG+642m2UkzdkQ`IH zGucppLtNQWcrA5sY+p`+nI;$t~u!q>G7*F{ z?sQN_ZZpXU=Zba0QlQs7#nc3#skys0iC|Op+TLXBKxHbD^xn}d`MDGbA@t?85BDHJ`cS5MhnmD;+Ynt7z_&eoi$22j3>k@koIcBO*c>4x!K7xso;p zr+ufh`k@i{5CN(foe*^Ey?2<>h*pp=h^PkD2gZFtVl@p(g$j!%Co<}ZUe7qq3rVi5 z2$$C9{HtoJZH5|Z?RR8c$xr438B--Kgxa#cWazQn{VJ5zoaexW*hx^auw+E2O5Dx9(`CDiL&QuTv?{q*GZoxq_%<`ZHsGXN`CI6)Y|T>1R(U-wV{ z`rrE7qWU}j#Gil3ull6N9wgHOLEJi@xGi(SW4Dp)*Wzg(S^C+z_L>XVTbf;a88)2v zyWVTsv?3JF1Bx}w8;AWy_8VEU|J!dip1cF`Du_qbKCtnS%Qk^4tNIu6;<;+&?Y~dF z#0(-v${y!5=~$c$JyVECaEK(gLrKQ-SI5GmHtk%{ zn9MSmdX?Re0OBI9jbqBQvgUGC5wXKeMMo*lLyg7tPN%bjLyRsZ&|2By9L!xW4$own z#KF=MM;X1&#PLyKTpU0?MONfRlHRlfZWYhy6-pE*n^k^@);D#@Wicv8;nkF;$x(}S z@G$SfqRc(qP0;IKrnCMc;7~5c^&2cIw(kjE2w5)Pq~S2;BsHzahivW!-HX??aj!g< zYt@!qd(fAF=b;VA@g>jI!qz+8&2X1HYzddIKrZb0mv79re~~Q;artlVe!g+%fNhzC zcPrDbf9C>nZO`0YUUm2pmrr5;!sRDA{-~U(FNYV39auJe8plo1@tVF`{z&0d3XZk! z-_|`-udiLJ@D5Sx098P$zuR_F#^g=`g|vD^vW9b87i|z1LSTRkOyIn{@?`6LE1@m- zBoSx#$2#qyw4y;xLBC3Z>KFt#G$t^!N}ugCjj z=Lbc_62Y|Po(Poma=cfZc4o7A6U|RrEz=BO+Cp;tECM6WAiW1g86FZRF^4dEu6MdZ zGm(7gTyn zzyOB0y0}2PgFpk^44#R8V(#5qi!*3!YV2LLlt$R1Mrd8@n(uWNa(5A{u81rQQ z)?Cp$tr9saYh3T}B@dzZ@Tigq*Hz2JrbClORoVvdQcA)#YtKbTE)#3OsVSPu&T_4f zE>bkIaOV;lWhx6WmM7B`lwF>{B2xI|8ahHqh-d(y+jGdHNO}{`jB|b))yO27p^wY0 zPHc~J7XjE9^qkIC{$)*rlNcdEh!Szlu)kJe;pcR%%{53I+d&Sy8C>ZJ z0m<8H)ZQ@+D%Ii)?SBoJsR!9nuvi^-MH_qgOI=1rsYYt&f%} z2#mRbsMKmA$L`$da{FyH7%(z}KuBbunkvpwUI`sjD@$^&h_(U(D#X;ZK}4;!rmeM> z&5H_DO!8^lY)*Z(nLubY&d<6>Y+_`~3agr`)3TQV$~ezOM?udOjNF7DF6&&XjG5E4 zRL9i9Zo^*%f$I7ya#8vRz#eC#(GcCE_YRz_g_?@w14D;1 zl`4`^+=>9w(=y&%E_T*%qn9Z8`CGE zgDP$N3S#|?^YL;~d{ZQ#0d|098bo+kEo;hf0hWU+wR3qPCO<+33z$Ku2s1|0Q(3V< zkm8~S2NCX}Ho1B8V2G)2nCGwrAr9K8nYZV_9#pJL(j{v2o(^)66gv9mIk|f=uA)xA z7D?a>_22Uv&lcwhZ3ulrE|AN8Rhs1u{YyRQr=GI%N!Zon;Z&>bzf&R7f7 zkCKn}7?PJd_J{mNYB!&|4em+imjh@S3~o-k=@eL{k$1RT10+2EUh4MDfbKn7ZhD`| zL(#h0r~K`^vW>OYh`A2AmZ6lwX9bYSAx6D4FnXkC$qG&@7S51Ya-wW(9}LfI=2_uy zm6@yqe7sRB^x#M|Iy5^6&&KXEzLL`%`Bs-78Ru?CCe-Tgruz<26Yi8%aXmrqx>vXx zHL#JHw>kIhNAJqkoIhEt(pE4xIooA(usd^qFYa=hj1HQ2Y!3I<;6UNpW4kV11u&Bh zU$+fM=FPgyI=t3cO{-N78>6HQtnzAZJm&k+%7t*z6|D&A`b;&~3Uz>ikfxXgt5|+b znLki+D=Of=I#5cUYMcnZEnaas(DDZ~Lm3nxsxTK9(bVc7Gcr^R44SE#m=(s?>?GFA zR7BJ&18sl022BAgxCF*5(;8hW+`Es^GBM|B0$blv;Ysek#)gI7y>+59-{O zj4pHtMPf{EG{P0=%;ZbD_nefUO!EQOz4z|t=s-mMA%u#V zs;We1RoKboYe;kQxL$MP!K!r!Ex@+=NtPWf+#v#!=7CUeadPy!!aGD;vENh}S(KYd zOKG8~M52~Jc0>!^Ld>fm=0gNILz|yg2e^;s)R)PzM$wUBz62$oko!g@7$)p4kSr|c zO9&@42qmPmH?iQ^yQ=Crx}pgz4TKh;rX-Fyse|GXEtxb-8J8AANeC(;f1l(lG`$*^ z#@v#@DV8+N`G6rbqF@S>)tl=X33>q@bhRA2N{!@iV;nwce+DLrYakLt0guY5-(ctnAg^TSS{)8pfNmh?T? z1LxtlKL7t=zwvLev*EmC$6p!!oB*r$ebMu;cP*C!X{<+Q>PDlA`hvwSs=&$GG-LNABc8!mTC$vdXTgKJ=oyQ28+G(E`hHXN(%y;>K7cQ@UK9p$CN zeSh%o$rpQ_&!fWTj^t{LREmY+l?!LYCK)0x3wYlB|FMnc*AIBj;^JMpr>mA=?R9uL zOSty79~Va3|MHqCd)4?|bz(EW@ZqQRF$JTbva*ke$N%9_R_fLr%d8+I_8ifb$HF@< zDz5Wj{&ZWi<(A1gIg&wtG=o3M^(`%H@WEm_9wDkld!7uq^KdfNG)X|qZcZd zsfI)4n-(ei0;ZS>0vkH-JitvR0dRoYRN>?3saTwH#TN}TKfRhY<(6pLaLX@}>1=7p zlO2q<3LGV)_X+Alg!k?O4W6UJBhK9!9_b&=lEByAdlggJBC6F$J=3!hnsasE%C&%) z=wT0_2O-cDFhm5-;3=f5YBK>5280^~un21IH#}gL0VNVtY0Rw&JU0h=C5G86$XP(I zOQeXaxsG*2YS2h}bPwHx3GQ z8mzU0G1o0x^QZtV$c zqP6keWd1*=W+1;Z%{40VBX~da@IT6m!5@-quW!Iz~AhM#PtLwW0Gi*@SD{ zro=K9L6vU2W6O<78PiY|jS0ow=5E8iFb6z?*BQD;tZ`p1<}I@fAoae*72FR;#*wI8 z$h~%xb3NK?-oY*GeHZXvWeTog?*Z#1a`30_oYS4owTDIuaT(ijbv6j@+$PL_EK~h| zsBrJ{4veLrTua!ltRi=>cX(WLJSry;1>WYhYH0+x$^%4+pLa;lIi3-1B(4KY!nynzextjwj{u&W`$GY~SwNhq~TXe22+5-*(_o#aYn?LKsj z6=xyPSYcIliRNeFkZ||#WY86!x0a3K9!Ux2t_Vsb2T7b6r3r5^Mw|dmtSy5a-}{$o`y0t`#PTu5qoM1pNcm+s=pob_^P{)c#f|EAlf3U}?`WM9*4 zn%BEaV8Nvne`VHJp;azd91;|cb^L`N|GM9vaS+$m?<;ZBG7-szPU@HlD0eM=4q#)s ztJBzAJRDn`EZ=zt>iUk>=i(floVX|RvkoR)bqbSRbudR?~>rF$`7$2MQrgE*T(dIbuqLnO!oF$tlWMMwt4n!*J}_}Cr9G^CF4vSv7a zs!UCmR3r`L%tSk)pU>$s&eaENurKK!_kK&*q=FL=QwyAK8W_Fba*VsxGF~x<;kvm> zL@cXAF>BVQWF@m0hy7;wZoD(o3{jyY4IVzCQbeRR6L)KkqMoT$;fyTOl!5Zt1QG&} z^WD2v9n~!Ws+r6O&!~e5@l!?j-swRwyp!I~A<%_y)(}A;qEEq$ijaL40HqnF77=G_muvPU2RNTryzuh z&h+ZXE ze=@A2=^iv)<^`)g>l9;f6zxN5cm!+mSku;+FZW%O#h8Q#8R)E)#4LxI>-utlMZGwH z9J$3_ue`qbce0URd502cI9B&zd49Q#VW^hqf%#5K+FVpckW)4t8^X+SE9zhb_e_B; zNNMCcO3VSxr9VOrH@e zOjrLARK>kvImWc#saD%=1Rfj6hkfyue|MKsiH8P&cdh64?FKJj$lb^9o`tjj#IncZ z+|hkp>|eGvP!9Qv)5b1X0fluJ9GvB&@#isgGjzFkG)A!axT%9wuq}W2ZkSrz&ncsl z5v;M*?qlLoiYFbGp&YI{r39ui_#9Fp-CKhsCH~U!Lqrz8I(%By)X7jDOgUU+w1?I$ zyHko4&GL;3DTLHCzMJN_V`@E*%r0iAb(F%&MuNFn+v=c%{e`Io!}3Rzl=-9s#G$DK zyQ%eerBEcbCJJRF5=6@oYYkO72N*z0TzZ0WQJ>p3i%nN_M5MwB9zD((sF$B&M6uYyImnUrc( zoeH|Sgi2ZdL?s;7yu)tVBWcJb5p+YS1n5Eq#Znp|gJoH} zj>ro~QXRC7lPInWw&6s;^ZDQbR~TSU*Ab;BQWGR17_JSOe#rHsKH z#`*=}rfIivq_)Vi+jdX|VKBey0x~H%g;Qcs4>5y>fMV9qJgJ0viw3~m&4e7;U;|oG zZR_-YgjexCIs=Ju6m6DwA{{Jc8%jrifR>m23{uQv$hYay-1vx&lhi?Tb}|?ejB0}- zLlJyuqDg*yK~H`cVjafg;Vi=&B*zYDjB<3=gwq9EYF0yZfC)WQQ6Te2J;QV$BLDGc zf7X|M*_XfN$6xW*pM2Fbp8r0gO~Mh8Z8{E4S-w+^$HPSc@A~!5bsS6dBPwcifBVn; zIDij)@q1~&nRfA9@J32Kl>&p}Mj9ld0Tesota1)Hn+hHaF_BK3^Xzr>8Jkxu&!{q;}DaprOrerUNdt?H#-9F_5r_K)a$ZHW)C|!WyY@Xu08{MR^is|akVRQ z@vWv*iL>eINw_VIZRw-PK&r(;8qGLo8&jnuoCkE{<$9iKt z!WgiLk+{xwY=>l>P8T25c)qDhtJ+hBMSI&@EcX=DBpnZt6XUZw3ULF77l>ka1na@XO zWJy%{kM468=%dSsLbJv0pd(b8hDSF)K_tmqY9lBuAl1W+;gO}y_exD5o)v;h zulwF__`py44ACx=6RA13wHhnElP$-)e*J4|IqI_zHCTXg|Lt#n{7tU|@S+#KN1zOU zf_0Xiqy^XnXYXdsTBMH#a+6Et`#3)}LT)A7anUeU6;Y2}oUZd}&4HM!@zKl+n@X3w ztjC$oX~{ldezHc4mFQQP6Iq&)H2{`<>bxQqB7e_OFSa8@V^3X32rt*P^cZikN!Mf> z(jRUU6i8+~v{Xl&7eps5zt%~Xn6%Ua#;tm$x|z8J-H`Y-?g*$sVQL~KW@1J8%?St9%nZStd?;iPR4+GwlQB*fXNjW~PBADq7t6f4 zH{&=f_aPNrsH(u!7$Hh0B0>;mM#%^%0PW_c^?u$>Y$5}cp1@H?FuZ#@Iv8X!iATbF z20xi8$#AKGlp5&O=&A<7^bYrSdSR+`mI4Yxp{iy!?=3aWDspUHhoDH6R0q^OB2-;e z&Aj0TCh*+jh=CMDI2>v!45(E=!^k5NQE1FAqgc%KRuF(S^B|%##b)jdx+DDn-oxFi zW}SeR05u7}tna4+QMjuqL>LYe4-vIgx`P3+@NoCDcX=SEdp7~|?v~rMxU}f zLsXO&M-aNm^{7iP9gK<@;C7vCu^ysQ{n4=}sW1Ed&;R3p?XUmMH~si4p8vWZdAIj` zzZ{WLmDZ?@+7LRuSMTaQ{vC*`M4<*F7%;y5^{)xj|*q|B^tS)ez$hO=Vx4a7mvF@E+16PNVGSv+;C7b_aOU09+6Pvq- zN*Tr$d$&Y_M>!WT@0B>P=Qk~7Q6Du;rc|yhgo7Bbn;=X_8X8>%Q5hi~>~?ZE9j_4f$7y znnd*iVi}Wn>^90Sr=|k{GQv(c3Fvuhg~UbF!>rL2&{m*yRb*0`iBgz$22~@ysdQ-O zr9^aLTWvED{T$=wsLT`blBN%%VMGKNpoBOW5@6GDhbM6{4YE{-WGSgwTDR@BTmG<- z81?=cN*)Mm`ipEk{{FQ9?YzG)RfiLO6$qijKvmRPSN9 z%h(iD(r10YPRtzjxd#D{?mc=xpKs68TbHXaQ|-MRiw+0Wn&x`wL|#t0z}pF0<3`hlxuWW0-tsU1uVm9!)4`6|#P`K1~R zORzQQYjn_O*vsUGq8?!u@SSvtan0<|N^*e^u3C;dO?65l0clA!=LW2dU@UmvMONeZ zCp%OJ}x?hQYE5|`Io-sCteBQr62g>tEHILfIyNJ!iX?4XA@H07+n;iDh&;2=q|W1 z)gCIMU0lN}s7DJl1_qU6xfM3+#?FMiX5t*_GFr2Em6)-A6-B!Gf=dC(##V||ukSrY zUBPjTXd5{nhlqw5<}vN;2W`khE@`ddQAs9DRUv6~$>D-pW_gW#_9VV&T2iM<~E`Fl$RL!*UJ@itnUSQX#VJG zNVuoa$hNOuQl&lAd%rY~>GZOGpKQyFICfbw-QUGp+uRkrScB|A;pFueWlMG+ukV6Y zc9Fv|^}PFrX0G4{`VdpSJ=j0QQc|w@!*=79hl4u}^V)^8<&)0n;>j5q%Sz082#h48 z3Lws583(~uNQvPxT6!A}`QZr6*|M<&3Ne(>D$hEtsjgZjUc~T)J5_?}YF2rMEhRvM z{e~I(lM5PO#*sN0Jp{8%rkqLvrX-}2?w06FtpTRevaZf}EX|qFRDdoU%fM!l5n>7k zb31$GFM_6`kKv{?H(dP19A4AqZoyA zI%`x2g@-A631??OwlJZCa3+*7Av~t@5v0S4BeGgAQB{QKL^X@RnwZ|021U`Z0v7#% zqSJ_yq-ShPWvrxS+%!VOT|`v8cQgp(3_BsULJjaJp-6uFQJ5Ysc%i2vjX|LI&Tuk% z^zQXv_c-51^xJdq;T~{$Zg(0h-Maa57#&=Zo~k1MDgI|Fi!(xIAl~WT!NS^d`8~#?v7mF05LcLF|AD^ zYhs3|jO&6o<@>ITZBxWZV8O;Kj17o9@(0W4u90p7rrZkz`dqk1^l%JuLUd2`Eon_X z$#$tZ&MiTD;b)P}ZHb;`Q%w*Zp&9Y)9v-B-r=Om5Qq#nsB8kKmt0~{qauld7pZ>D_ zEBXPg7*PQUD*_xMMg}s=CTv{Vo*W*ZI}qJ^NVPg(4O>@Z+m&l#^I@S`iBv+)N@~xb zwl6w;%g#TxBQJJD=gcl_enBHT3nBfsGT zKIx^;fAgaczWImW__aUq`X77aWB>j&9<>}s+P%a4`~bl1xy#%tY#nIvRnqO|slGL9 z5Rv`h(8!g9*Z3$y4 zo+Zj_T)}=rW;<();34nsQZO>sbl7a+F*gHCg)ySxY9%5It()fcoT?OYWx6a5=4DJ(Vtls zW*WsZ$sQmf-fa7hfptVlN!$lXXBDg}^NbK4W*f&ZCo&)LFtN^JAoAP^+%dFO9ATpe zebF7A##MC1bOB85{-B*_NC0pMfp|EVA;Me*43D)Qbw#q#du{VyZ#}|P=5jM{+IFFFYx}v*1sTjU3b+)7<$a}I zn1Yt8eFYiFAUxC-Ma72APVwyntfV^i(HA zT?u+~5az16?EuAT0*&+8X0s1z}5tC_fQS@CK0aT8gYiS7(?xO z^3$W1Pf_IJY|S%}YVH8$H5lQ=s&~*G%1vo7XX8QB!;`Wgv|w3{TH0DpSxEy3WpO1# z26MYe$=sU9%6nmDGYBd$aKs5vQV<0|!+qPago%ZF4^>l_$ZcQxXj)r0n#ffc-&9qN zyHM1GoDI}SzVrsmzBI$k6*IE~svG@l+jt!I-IsFPkO~c)VeK3k-W+q}fP#oYHaES@ z(2~0HFCN*!U1R& ze(J4nc-wvcyKgu!B(%BcRH~8jf{*;MyHu18rgOl zH4)foOt=fnd6#5oVSjO{JLlxpZ5xp|Xkzx6s*H)_zG0Mul|%;3E9WkzYNiUPz(6x= zW|n4i%8*yd6pZB>JolyL%_XLdGh)xF8{tSpthB0Z5#zueV=3ta8^4@%(x@^+JPtE8 z;LeEL1IX*3cv)p^Y_@<2z*_LyVhE&%L?Cembgc&s_da4;*ms9L^^oBqYcM~^$yra5 zt)luE)3>xRQv%6eijO7A} zi&ww;3|_pO2N~7c6F!VX62S!MNLqptgF`ggbbsSVDbPw}_}+5%OkTg72DC5#L96{n z3CDDVxv5Gx6>L!JYOvB%C`~l4mB9S1YvbXOabSZf?;7RM;+7Ow0Z7(F)l4i~8iR^h zu2iexO?r?SL~SNijP_;AFRLwy>ZKuR+uiB)QCq1OR$(6sgL-8nH386Cg~pBw+653a zM2O*}$~ZG1(jbV|AfCB@sXe12VCmxqtThIskxth@#^ExeLroFrgho%hvu8VR1`!pa zYuYrjS3Cs=a$_8CD-4 z(9WvxXskpIsa`4RL_yUyy##5xo{u_BbkPE-hO@hShF+75-aDP}aF6cJK$$N)&M-)B zIjG7WWgqNv7H?+K#hM19wGa)+4G1N9V<3BU5_;|;3f#8VvZD8M?;?*pat}awr=Pr< zu%M$s=n!$3WfPLH6@+ov+%fR$MMELno!(i=+8n#3T9oJga5&6U$)|8CI-otTU?LVk zwh}!;MPn>MNLE%!D)AT&diT!g(Mw(yU?6)gst6IzVD__7kM7PWLTo3!Sz}8KrHX)I zfF0zTgFu}Vo6MOBQbRld$GP8zJCXRGdU(5rFhV6`1)2P+Jc?sIJF(}`i(RN77q=R_ z;gu@lYVa;%P#?`zK7$0%knQn4+%>`gEEu-^K_W0YM9Ol+9ONBDKRf_p0J_G5alJzE zAqyh`{K3!p{eSLD|J%3y^lN_hbwB*97k&`D)6dawr8iom8C1bvRO=3s-}~C1{l3?J z&#!vF=l=GOeBnpE?{hxkgWls4KIlE(^7!qKzwxnG|IDMW`sug-$j?0buikdQd;Gg< zJXB!$Y%~eNLtpTrzy3#`|KeBt(2u?Rd;aA||H_wEt{g)}TtoC`RHE5iN;{eA&H3!6 zb_3x#cdsz%9p^Kdz759W8+QTuzE+S(!yyXlDOt*FHG z_7@RGRRmN`ZFmCH)2d3NbPurnUUb9MMrGjEFsE++ zh&A>Pre;;8XcB_E@7tjj+J`D!@59j(9c%DhaafWWN+#=_-$D_%^#PQJ@>(mD;^?iY zO${dvX$qudpBrX3HJrpl%_BI9j$}G1Xo5TQ)b}BL&1N`f%$w$@+!(`azVB4zfUKHa zgpDkS6+~F#f@)iI5Q({mIL{V^yx0uLvU9IqXS~Hcjx8Q)<5=G}yPa*#Hon{FYid7J zUE(330=!60KfDb?fU{i}V~4_H_9?k*s+Phu@9ub5;~_$cjkcxHc;FAqj;iK#o)21^ zL33CDLosV1pirTzRHQ;*th^biw-KV5obIV3lg}hLk{=*C1`A_e842`vPuWo2O$E~! zw;yMW$51p38LNn?Xe*%whq+Xnik7<3WG*_2D7tX@P#xPQCyf`6@ZIq<6@}UaV#yf6 z$i=YMM5)PGZ>gLW6%iBC5Fx6F@Ng6D4n$a$F(uE|(C%G~aH^rf9FAVio{E`jhXWcZ zK0?qHf>1cg@KvqC($A)sSG5Gt#K;g;&?acmR8tYF(xAz^(m@->h(M|+C{=`qjzuEI zgg?Q>2vA)pL@=~`;i0O5P#Tf`>RM~}R2xn8xN_V=CmZO>h!iMdLV7j7aXDk-gzMIvaUt_~Q9Vh?6 z2oE(~v4-wa27`QZM)rs9PO%6Nj;KH~x`WKj!AMC|0D!v#q8XLRa5pov1_Ir=`%gwH zg#zKR+W25ZAOcQ?yL(WBa3U(~g`(C>BnF7HswRwFPw>EpN-xHq7oYs>2#^K~&J}|o z08jU<(-Q$%plZ&X!r0UW8cL>NEN^(Tih{-hD%KxJ5Csyb;J|$up1GJD=!CsFW3?S2 z2q5mY_Sv8HyZ-7|{N2~T@|)i61s`Cc^iJ>WovqVdG=5RStO$I^Yu@zo*SzW1|FY-( zo?r9g_kWM4Kl`aS&wihqk9ePF193iCcf->`&bK z{j+xuzSFG^Oy#EO6%BWagO1a#q$e3}} zSEeCFGNQ{=O<+wkv1CY+vvh$#hA>=3U@DdtH8Ds@yNaF@pd|QYouY$Ft2V410(g|X zJ4PLzhQ@KUrHCW-S|cn_Mdl>liZr3SF=kMD*TIHORgm>lU}**mWV9t@^2(ktqc#R6_h?`qZ*(pYW-qs6aOac>Od zTmmWx5y3{T?r|3q*UBt0$2lsu#jO^O@@|AV+O9}r_&)+AVo}3QXiw-Mszg< zRpI?ylcNIiLOlfH;3?}TX5?FVkBnZo8BgiiT#Uw2XAXQxLE2QpFzt7$(sXpf`LA+W zC?e-} z?ut`E@6AO_+0*NhoZ|4z&{APd2iKMZ0Yo2WFnUD!IOxvMjD`{`7HYt8IfS&jPiwc>aj|k3fzPLj|qeJ3LzxY4@t6%YV-}?I3{_Ib_ z>bWoe<%mE8!|T6vq1Dv#7ah!sz(0T08@}_$-ty@m{(|5BD_`{P&$yTW{OOOh4|(A; zKjekaM7^Utd))T8fA%MC{XusU50z;=+)tu{AAQ4Pf8$$!?5E!H#5**0sEDaFUG>BV z{OaHMs(!w*B}*)@!^EDodG z4R2I!hei%B2DF|d(sq(egA-|$Wz-D77*Ltb9jxQIn=>&rG!+wA0UdE_nxsutlS-LQ z;Ivpi`b2NaI0uD*UXE!x51>(jP}(kfj$drt(-xk1J06 zP}ElZ=?qWW!NCjasP)GM4{VOrzsg!f1S!J$Eq5k`6Bn+f<<=O|xNQX_P4x+=7Ll?4AXViG^cDO{A zn+u+o9l-%~yL)A@vE)|9JaI`om8nahhV0~=5=%Fp!`5k95Eh;gajS;z8ZY{tR zY6^-?BJr@Z)q*pkwZ_5F>H%R$s2N%e6qZPs)Oa-&3wh`UJ&E}~FkN%kJNn7E+7^w| z-xRi1Zw!@|jHbY{^=xmSa;zmunn?szCAFYW{;)A=6PPnYR%COb)hTHPh9;U+5DbNg zwy}jvkQdMC^v&;V#t<@f|8i3wb4c8V76vtkh*et3WDKYc`{;J>!aBt*=!*T zD=Y$=kWg)D>j={uP2w>UHl_g7Oe8#1BBgb1!71ygKPY1vf(p+Tcks9(1WhD5wV|`A z5rC-y!f7*qxPzz@S%|^7hdxX0y5Y}J;QE~V4`D`s?;JY*iO)U{-7R!tn z1y%|v>aJAz>*1xM2AmED!c#aG3dWh`85=&!fDm*r&HCEu=%VP9maBDWt|>favX)nc zh^7}OwMMBEaCc!j?IYz=-6MM5X1(XvyC~2*-D3ohXD^w@UqqM)BRsrm1C6{D5w(-C zWAf%9L8py_%bgYCK?3eQ*Dp>%2=iGJ<@PzFx89psh)H*f5-uvtijEg**%*%*9ukGi zbVENckWgIItVSicG48z7pz!_71po0cjIn7DML zgyKkYIhp?c&-`6~?Qj0w*ZsgZJ?F(QUFcrUl99i-xw((u_P_fbul?p%z45pH$`^jZ z2R-k(PrrBZ1x=-?J>_K2e9Gw;_-DP}^PcX(|M?q#VE8ymNFL?1s zed4RW@vFc3>%QfWe)ey@w4c|;lO>xy^j4+Z&=9()iQl5Zdawz4YXBS3JFMh~G*u-T zdRA&lq^hf+95fM^soKSmEB)Y*QPd3*Bgt;uH#O9%(s|C~Js?txQn`fU#)wtmBx>eX zg~w_3i2Z|XkS3Wmfjf_2*YI$i z4tfyG>?7!8oMBD)(sEI7pc2sx0aZ=eWDnvvy5;Vgmmjua)o2(-I)rT1FG)zVsQtib ztv06-w;TeF(rR8DyPx)8Pnx*r4PQHhDaTQoZ=rF7-EFz8V^b#=yf#@(hV2lJ4B)*; z8>iry+dWfp=h{Lp1IxjK)r5O!2CIXUX)YJ0igQ&rX(L3YvP`@7GXSPG3=c^-4SC%DlHDsY zwj;S+y?0f!Hs)I%(IQjIyY-Xzkkc98$*Z!K9Jol47nNqNVMVJYQCQ^X7X$Wc_Y8A-;n zrBY=NAFC7{wQ8kmZ@3%=n@bwJP?~WFh_=NSHbvQ5gUEIbW|ug;8oE|WqDd(Wa+{f# zb}qLD(@QgYCEbF^hZ2W#$h=u?=1Or|I4W9_%OWJR3!jUQMXQ#%fjJ~^u=rL|c@9Dd zB9b4&qSXrKdP$CfCp&y>LuqktLYHx4%N`HTY1Z0)Ts>&s(U|LE=}xpn+PH*-SlKcp zvi~R+?2x<3JOd<=G}ZH!(j-IJ=7prp8MY$27!cuN+RC}Cr5Q=7y)b%AV*aiq%T(^M zGs$@@VW^o-FzA94fQXQAXxnt$niKbl?oOsw9_k}%AyO8$pT!Y0jf*r7RSA!Y|4Gmg ztg3fWaeA|sKZF%Om{|qw@j96W($tW(Ta84mH3_;npv`-zm^9&;qTWeW%X-;P8f>Z# zWs%97;(TBeQ1gK^=|~dS*T`M5C%P2j((F`xT~RgDLUfHdBQHLRs?CsGpNWz=?cM&^ z+-RvN5guM#u%H$*01=^T<)9q{vvlBua~DdAj*RUAoO8N+x}YQ6BY5_B@SqogiHVP4 z=12f&K$pMx;I=1w)~IAiM{61p))1<=|3F0a<{l{?F1>qGjT)=o)H*UTWVx_|JJ@-6B4%0u^OL{1I!M@Sz)&v~N)Jp(cdelXXAq7qPqXF(6o z$D0`>0Z*f^8RVF;>`q0~Y*B!Gqaw2>Jv_pDPjfpX9K+WRcPcXcJ@;zSJ+awhst|_d z``f!~P>oGasu`(KpC$m4UY>@uhtvTl`HXjFNcwm>I$`0?rWU<-g~CM6kqRy$5KgnG zL`)*qpLaQHiQ}X$##qA#1|_EtPDC(Da2Hg-ktZL(Z~2r@`uLk3RTE z-}kz&{ejn~%lt!L_{?{I`b{(a*Y*A1_Qd%gfB);>`1S`+?sqRO%F-$qe*6XR|0|yV z0U!GMSAEad|BLVal#lyWqq$YmWe?5d#{C}?bc%*hO(iJJ5DtfsO;6zh+aRpFr%NAJ+z)_0r_@=rS zgY)el1O5?|!g6OU_bR8OqaL!dCBARkFJ><(OIS5X1u~p4sUnk&**0?XFq``*xP2}*_I662P%iW5o7EhTWjN971vdeV8<)kCRe9j}tH%}BmO`nYDu zI#gyxc(TGG(3PjWgz6DU{L9EL z0K|hL8P}X^m~kH{WlloU8m7sw0uBMuFdcVP-gYLkd`=-^8$cQJ(LdX>@a!pfVxDfw zHmzj|0YUfPtPQD@F?ykxCo&5rDo_v72FaKt%)(U!FbA5!5%7@KqMtp1ybbKVi>PVy zM(z2Qn8+;@@TjB=ACDiIz48{_AW)Tx4_R>yljxPkdZ@O!Ps+DTn~c?v0Ek>Dd4|8< zY?-(D%uKDYjpd(25GLhc5U0w>Pdo*w2#hFlrOD(9xJrKf@RF%Sb%1J?T&c7u(4C#V z_uhL1&kw>Q2=u5~QI>a_9JjhgC@P`QQ3x7AC|Ve`d)F=}fwo45_b{#G?|ezQtEGEZ zf@%mq({Cu+{fuVWWJ&rFG~03$w5mh}2iaSGn>c5U?e3B3i_zI*CHRJTb}!H-#-RHx zn7LvKF+juf40pf)R|UlLDht9=3sK#5f@-4fIL}aUXSkn((E$xFY%pi)Xpd~>5nhiU zcQ6ocqBJ&Wrj-!U1re|yMEtyNOD}DfmEsRz636HPL`V2kcSpd{9RS>*VGa>Ss8bbI zF$3-a7}{m+F2a7y^elmajz>h4_^WI%rKrtrmHjTj2hmZg&+CJ(r!d88xN6R za>3*t{PrJx)3^WVo1Xqid#`6c<+;ze_tYD^Y1&lpHGSk{mQ)PI#k+GoubU6x+a7Oz z?Dmzfd)sT?@aU6I@rKNXL5WQ+k!Sk{f85Jn|Ell#7vK4VpZx1T5(Lr5pOtb}9U(m> z7IGV2t7OEPO5y@T)tZy&ZU%O^KvjG0=qTzMI@F@7nxajqRr3*7gu2~IVl^1AW9WGi z3m9|K$pKBOs&N@hR}y!L1t-8&cyQHlGZRy`h4{g=nx2Te3YWvG;{w31P-ru$AYd!Q zxYd?Jn~7!w)k#Dow;Tf1CWWCKv+d@R5?@%Af|^gj^Qb5WCoD%d5}7Vgo1v3QiDfGT zMThXHD2BreF9AZrX0}~Sn>0q~g|KQE4EXY}Goswo|%yhaqA9q=AsZpT*E{WRaK3h)IGIIVhA$Ha%8PvYrdz)^l9Y zjQ2q0(FW%0AV+NQh2v-YbE~-zjpUytVM%50XJ_MaFokg6OC9ucv9*Usk?`?u1}KNLLp$pi4G5L3+%sPB66>1DBw&Wml)~Eq3LX)Ty&=Di|SZqY&TGw+gJ0 zN|xC^cR4DxuZ7w-dtI zy`2o5=OjdFM08E^hH7hi_6%z7DhO6KZ3eT=*q4i5Gkp#lRk6M#mv-sOlacanVrkXQ zf6VFgcFTUG89~dbeMg9#2v-C>6Ow%Fb|YL;Q3n_$9NnyOT=iCTSHS3TF4e4`MYWRT zR5FJo7b9aBo&|Bnw8y#k=I8A@Vf#O?&;t<28sls-+JPW$ru0 zB5~t*@@UD!Gq?k*2A0rukw1!iH5a8)gf9mJ`fzSAl|C2BL$?yCp z&wJ^|JmonrkaiMlVy*Dsf?sNT4*-we@2|T5cKoZi|64Y>=X}&j4=F0ac=KQKQJ?r7 zU-dt~{QF+@13&a*ANtGQcUzR@QzN!uBFSUBMp~jY4*;sH$$W?inp$sRJ*Qy}2uK>{ zn_6f@FAKINMk3abbEznDhMB-t*%QI4@0hOJ%?&%8iyY?jDsLxgpAS)xbH-4I$hO&$ zX=k{mR8^|=#-p28bWz{0j4}dg232h-?p9TmW_B_?wPsC}Xie<|J7t5eL~?SQZil)P zI7KcjgG5Vu2c2l9B5-F6)4k?4D2AI7V_cH@8wM3Y$%LvjCZ~oxf9j}UzhVwX9SrrE zMDaZLM7?_72Yj|X+P2A*h$XX`XHot%Q~pCjmy=r#mhsCF$OCO?ZB#CN9fJ)+SPD~Q zCE@YHrm{pn2bTk<9V6e@!QJB4zQ9B_`BiN-2vN#W4gV|lEio2VNS)2c4xJR@M+-9IDTt+jRb)iW* z`;x=20tVgO)J$!jpq8s)0)#<&E`l{oMS?*MDPfbDLZu11vj-h$j*j60Z$OANYiFub z5gP0nbW4ZhOvZMmm)XMyU(;*mU&~6*_PL1ds$wdwX-lQkFw*AcD}&Tb$k}BnM4+Jp zI^mK=7kY;AD#-5L3{KTEXwh1D2Pk4_zc}Ae;uHWn0pnGQoJv`id z@bM?kJ=ooEd+!m5$zPV)bI2U(s4~(fkt>nQilR5uun=*#VC0F4I#v6LNjny zp~@0&X~w>|h*shQy45k*Je;H;JjZkqP9;5@nZps@gYMmv+Zzn`+!qC=Kq_5CrQUY9 zn1GI6tXMUTbLuZu)c~prqOPLV!&D4keUzEVUdN)tgFcm~DPX9vRB6whYzz-khC@WC zDQ(NgO+6;vtJHI+Wor@T(b_iG58DuI@v@uddp%Ub@BYwV_P)zaBn4iA24>AFfylYM41;cYIh|s1d2~rtwiLg|uQ$2gz6zyIDc3%C^8qYBn%@~LsX=dokP_s zR@hFe4NX*3S`&ncr8sMV#UvAvIvudGU`YlLkDr1Wel+B45ik{uv?UCr>@YW{l}nT* zv>rgol2#B%EJjM&qm&s!hGGb$OKp)F6dCb!xgL?J+?i8qT{ajFy8>r~@&<7_hIVXD z{wc-L=_20DHhEy?VyA-PD`lk|IJSZVgO}_i@Q|3j)@Ylxe1^{KP0EZ=mql&b3>$~m zX)Huy^-K9-luAox-21}imd18K8Iy!?cR4)*&X+A_tgPp^JaRoIl}h&iJDQ}KoFk%{ z?<^$Lz>wqe8%vNi8VpRyUp^}^+Wcwvz(u|!59%rgHbfoQLvh0T=S_SK1C&eLz>|xu z@(*q91%p#n%iPK!vey$?3aeaGLKGSJT~}f=6^JF{NQ^*8iYQHr>naJ54Kt`Z{ETRT zK>C2>B=#-@3JKqRD-(7Rs}tKU;*vu!=nhS2-ZVgCM=0dH*&uYnO5?ftb;_f%Ox45J z5wS-ROA5oP7oGv7f%T4<^@yys#-V{UV^{9`7>x@Ia3D8jT0gT!QiiK#S0lvAN#Z9o zL63ksOw`R_!Ly2(NFl?4Mo0u5$$?UC1yku>CE>_5Imx?_*;bGRY zEW&U7Y<})t^hU_uZwWMQjVge4(CU$*qpKwKG>=0d{G?*GR*HK1={+c}ssXW3(DM2TK}itC z#)ud~vTeG|@jOwp@R=ea2+XNql$L2ee6W4nZ45Pb5i-UcrQ)dPu8u??(~PhjobK2) z3n_)M18T^26vu&>S?h*LaxW)-sU zqcr+a0>PxOuFmh5{kq@ueP8#LU;i!N^ZS0sZ+Pyro>re`-JW?GdqSH9N|6i!a)rVe zVhSasd31{$|F(wiZHrnJ^#swb0sCa0S* z`8??5V1zmG84%G36#Q|N-(9amQw}|Iz%HKbPyG)qzs!CV1{7oj>hK7 z2!+tJX1h6(Rt%0?*x@-REjU5SmlE#02j@G`iKx4I;;v3kzL-PTWXN{`nh?)3}V?YT7$sMpcX)D zL(^=qOuWlG&>-Qe$b|Aua8w1=C~So15;ZVmNh-kmnGkfd-P zk&B8EFfs}>Hr3X&C4h*hQ)}%eqj$5rFf}{n#2b*?;zp|qB%+8<;jW!7*1LhXE#tZ? z-~vjExoXHjh6+b?rd0+4g}bYWX7B}+=wsG4<|`>tAfgkD=+3i)5#c@j?C0S?n`c<6 z@1drmV_FDBAaZ9(xR*{@RSWw|owyWd23s<~GA`x3MHms`kVbcLp+O02P_k>fAPQ+f z^;V{5XdnXUai#~wDiM_{poX3%jXFGa3ld7jp#-Fo76n2z@qi8va?Z-~42@o??oN36 z1cIW7-WjE04AQ$t&-O2yB+nJS0FW+PfqI&?3X{IV8RDp7J&%-DiR@Gt0DUDcrP?Yp z{9LzZMwv`BkEKPzscqMw+oe}0f~wU4J1OCw@m?w>M+fY4FgI1@`P0y!gc*@v*P| zwtxDSU-ONB=(Ao11#mu~y2rL{zkCYo;j_ux4_~X9z$M zpZcxHov0RKD%=6j1Z21BMsojSCKVTB`G%iw-Ypf0_@z@ZV zkI&6)rK#sWkK>gOB}>_Iqc%8e(=vQRW!JYu7`@F3TqLtzv8$OVoCxvy`E~u~d34*L zSdFnUHJgH=9y4+)%Z0eeHk67=k>MfBWkLmt!1lZP_bI! z2y=I&PG;m{Zm=_eQH23(>ZC=3d03X*tO1z~JrkH2<)pjU8?R9_^$3OL%$zwpFPTpY zqUoN=9ZoX$8@%?Civ^pZW zL!u8ODZ*(8y2k#R6^V>ft}nB!b28%tyW}gF+=Y#BWII|qzQ*&{;5@y!3 zn#~87gelIhX;#Cw7|q@wF3j48`Q;^k;JA^P;pAB-L{Y4kZycBM8OSl1dE{=^gFCB- z`ShRr_JzV3ZN%JeY_gjr8ms5%BsCRMBexuq(SW8@g+fjzvl~4%(= zJa`H$QshP{HfhMj+=h#4%h@cOg9sm79g!R(jA>NG&IV~sGCPUHT*nGTVzaA6(I8V2 zGJOZE=B222HI2jYtjlnj*C(E1mMYV^rtdi&lgyMX%9xB@%5oT2njyFb{Plwym!c>c z^koAj0TYPL{>0}S%X{p5n?LoFwO zM8;yNWl)xiHp{bft+OC7sRBVv#I*j3g4mT8SxK0fs4;w8A8Hy@X>6Xx)QA$4Z*$4~ z7zSJC;LRMbq@c=%V$0>A!pl#cvYU|5W5rkmQE4`OM%RHAB~6i)E39eA9jgz+$grDM z(Y&QIuiM5a9*KpWMc?+OlT_2f7Y>=P(kHuHn}CwCk`^FZ7qo`x(r6U0p_8VqofwSH z*8M?ipsJtUN9R*R7ncCws>L>PQ#7;?m{td;5Dzc=KPS=y6|bnU22fR7$?@yXQ4v#0 z#WHD*T$m<0=vk=i&X6jYQRrS~^c!Q!}gQRKE7K zW=M&UWa8dVK!6c(tJa*O39WNCg2;SdDq+C3@Uz9z16x%gNvl zjAs$&tlxv^d1%8&h3ACd?D#3IUgbo$ca+2k1&9+GAz4hnD* zadA1DL}t~=oFin4ALq_ugwn|}S(LtmYmPB$404Mi#P&?}$+Tp}lIn$h z8loZ|L=wg~PfpYxj7@37{5;A<}y7;%Uf`%aZX*SjAmj+g8 zWF-MwQuRE}g{7^MJ?0J)$*Rd`-Eg5~6Ee3M*((pv`N7#Uq6H_vH)E+KqR3`tC(0EJ zSFGW%(+tOp33xE?$#!*(8)A#kOml&3)$?X`m~^IzkXGIDM!1{+0?VJt_FJn2w?pQ% z{ox^6v%mcFC-rScPU}ippDMWVfC$boT48WRrj7P}Zay+^S9mm1)qZdKI6xfH^4AuS zgT4xQGB4zlC6%|VI7XNrg`#Ao?pVr!gd?hBG?+EJSB09YnFz!z+mNQ_<(aBr;fgvk zQ;FUoY6|$w21`_53}#=Eb0av$D<$vb%yyJ3+eYN(%mTttCk#Pp+pKruQh|-Nf6;Li z>_2@bQ*)Fes~KfRQG;~v6NWIpT}GWiQDyiL0*M~!b25nOj4m5KL)0=wLC_#T=4N|# z8FJfU$^exH_Qq2WNZd+;(OS3OI9Pxc)hM7wc!8-iJZ;`T=>v(;&W)#6LVw2sBpXOk z15Bi0WT(SjG7>LK`C;bE8Vyc3q}}A2T{CFlT~E63mPL}${852A)dI)qNKd<6}uU%&ckw-wYw(v0!Oh| zNrft*2$?2P9T9Em%0Mi8;bz4S!##c+Z+ ziU6NY$1oE!GEbPJ4(8ezSpq+0@TrE~g>WwPw@1B;C5whoU=vczTE@$W+!*hwQdY&N zlc`GB+E1nML8i~A_8}<@kQEJ~BFeEFPSvuc4#iaMY{zSz1zW_D%#DtHEB0kY zUgVpw5)tyMv$3O=Nl=@sdKsJZP4R~@w%o|ES?}FSPi0O(r&W9mfw;x3xP)1HnkXhT zL}q(0llWE`*+F5Yx^Y9GYY$~v&$3FP>G`LDG}TmC)k$rdo0=GPh9Wmdnt$ES-zZ16 z>NKTiGZyvAx`{a*VrV%-hgu^&r!Qsf*Gx!KM4&+(LbzuA(~Lc17zY?yfzVJ>J>nih zBJW~_GnDtN}WjDM}2S4wUe;lXe^yGJIs%=fvc{U)y(#-Uly&6b%qQ&l;g?9`g6nMpIf zxoM_yI<-e0Y0cWrBTu>a$Rn*aRnt?03Cx;WYfT}dCTJ!ib}Fr5of6>=GYf}Ws-Ai_ z-Cohz0aZFeGF@Y?z;fPcA`n_2RK^yhrde9ik`SniT+bEc(x6EKXmYT61(%F)M$c5> zgcOf5xn^pKl`2P_L?T}DPK^0@Pl<;T5-hT97VC+lU?8;n7&wKG?N&w-tB3|&r9}pA zl;6F6mc0G3BNDeAJkUnms{kI7(gGXZePS#$Z6wC>tWH6ld22>%uR^H>uVBvHB|(WMw-}Qqy;_{cZ0L{pMKrz|I`=% z4?p|1$3FC9KIx-B<+q8bD!U^#w+}(QtL?b@^`OVO$1|UL`tbLD_J_Xcna_FJy;IW{ zJ^LvH?lpbQ8yPLS3b?^T^?>QG{BFJ8??fc>oP(?|S1BMumeCLXAu&%F{1`fe2$snoP0|@tFxX^-36`rKqMO6O4Vd zegLFnn&DFWZ>wgmdVBFBMlaW<9pV5#U0Tq{u~F)yz=Yh7XUu%NWg6U97<&;gV4B*n zxkC$^;0{&fDf_ zN4si zbf_|iqO%!3barX&5P_LU49K9ejcv)=vFuZ78GOKT$yPphxHglJqL!Lv3WtcPgb2-= zlP9TSMZ9nT9#9`3WI%wtC%R&N8LOQ4l4FozWssacb@55-wBcK}PO^jSz&DhbYQARDmY6FJwym<3L%jD;7 zK{pllkoJgXdefSjh)PpEshv)CGQGL6dykw>Cq3Ofays2RwRU>srk!q1?WV#JU?Otw zbZXjCktSlb2g>*lC|OsaN(R`umC6#qZmtQl(k3>biV72HWh6nABsVj0OaT#31b3VK zB9T`30j)eE2+P`jloFm@w0<0 zGoJMUzvh#__iO*w*M8%7ectc;^uq&xuv{>+#wO7S;?xu@XOx+Us8|?`?%vW!&Zw|9 zFLJ_|y2vyeK}uN_xiG{`Q$E<3bb=W%!l^4et7d~-!u*9|+KU;8-eGzfZb6xc)KEx` zF5VQIahSql3oanxolBSl~qr%8d)eLHC+RRL)omx}a7T!gxk_O>2 z%MzYln`#b)=p5RG%oNI8Aw_fP38T~i17`_!RnV<~@fz7Gu}3XjYm-2Uq!}6x&EG&{ z=7}^&N5vv4ALWpsM0q7Sz(~`IAY)Lws_tU?LmKLv8fEEk1I*>rm$Eyrg!v%7Vr zWI`;4Aw$LHP7F)&fyw&GwsNMgFGt)87Y~^kFJtwbpHQStTfmt6w4o%bDn2|$?x4&~ zMm190DrTKT-CC+KZTnW_;iP1MfS1s&ISmK zG2CTQ$^t=EgF9NuIhyDK4|9Z;&0}@o++|XUOnmrXrBK7Go-k2JJGCSr!kAl7piy+Fwr0`ve7;S5PM(js#}(C-(OA@=oxwzeJ8159W2Ul=rHUmr&L9neS?N?& z6bg?V+LyFe;YxLXpaL_aBg`AE`g|{s_@*vkxJ$E$;<_fs$q8^w>q$C0&LrsWy+_dV zSNF&*L#*RH%+>J?)X3M;!m7 zELH>R&gS{#wN7m^GP8De2gpH5;^`#bEL#x*pb7}YGkV;nKE_l)m7aN?c1_d^X;eN-RSYZBf5e{yb0o(`|{9;Y4m%!i!)s0;4AEPR`P)2@l>VuBmgda)RW%(y1)I$%ijH* zZ+y(=zO7)COhRvSfXrfjYETRLCK)UeB0?bRT?rVg5=Uc|nl|YF3jQS(MK&g0o{SbOw%Hvo^^|kOVn`^HuHY3Ma}W@+^_1RhHJ| z9@d0IJhLF@5+$~{Fn`<;_qHtdZgDp)5LdnmFfKhw~Pww z?M`!O`}!n3J`r(GK*>Wi;xSTil%sv;mSLQcd^{0hGZI{OoWLX;M52r%NIil@Mn?-U znc=d$m$Q+j(uDr*`BHYeVj$A3ov_4|MxdGhXj+-kJT+vN;u4tLfT9E%7tZVITt;9B zXnJC&VWG+D(6ii=flS_O0qkuhP5&iv&UMaxmDG1bXB)_ zPR2_d*MwOz-MW;t^`D*R61!RR+$1)A6Z1SmIL!!xSOXszd@<3X>`^L7k<* zTo7)7)dI3ArI@QaiL)CQcvYstMX3mn8U`b6LNt!C2uUpFw0WKyt1DqW6!;XH?PsG+ zB9ffpOC~pgAPqA@kwzbh)PtEatT2u7tmC*TEZIqsU*XZ#W_(FHox@WeJX;5dthveE zT+P)KmZsb2T08(B+!kh&3yBt77+4HLky4lzrECnc7-VZ}v9Yz_Vc6WiucQyS`Wn#&ClHpxk5MjCIS!ugn)PF~RZ;jBuD4`|q+IU00Ft=s1?>s8d${pE|$ z&82Q|BPe+rQfGNLsxw1f_3)9y|Kl%TbM>chIP-#wAM$UW-oEN+Hf+1vcJ)!cYAOu> z{}o3yGsAa1^4w=V^z6++zSKW{zq3xf-&rSK`r+$;_w^tC=;sb?EspIoH2$eMsk!Aq zH?O9X&p7wYiynOSJO24~m%jTOzWSloI$w&L+O1Fl29|-#LP}u>lN2dZO5swd z6d?|nKl8v6XP>rAdDr-^mEa6904!$AB^C%uFhi+OQqD}}P{%O4Lf8@Sler2wZb@R4 zhK&-CS`MwfrV?A?8{<6w^8<)TlRXnY<(PnIDp%Ru;t@(Mv$w;NhF0d5#xW_4BGw=7 z6XT?xNK78S_G~|B0jRerKTRK)4;p6cu8PKI&1AWZ3?L1=HCpUo(rF{zeX>bYxc6q( zG;S2xcxKux=}tH@$H)vGjo^$76^fHE?x%%=GyBCU6&dMC_g1QR<1{yDbPl=0Suvv& zWc}9mQCJVC@OqPi9`tQyr#rK?L(N2o)dSbaBW!JHG1yOpDncMvv%TVsMTzhin8`-}4 zl;vBe9!YBG+O{yicMI!7YYqbdXV!QwkDFp79?$ks1%T8R4UJ6VuPO+ z`#(X@B#6KT&8SY~O9kg7A3BaeXq5w2`NDaDLTjT9iVn!9>W3#!AY;Xo%744?`& zij)hNNLE#Yh(SP-iGd^#A!a9z)MaBYePrd_(^BWRL3EW;22zHalNQ0~X)1x3!=O5= zdow*zVor|g5O9q>fQHz%ag^QQrk1e^0U|J{a)@&xTU$UzA`F)n&qza&!n_>H{>8A| zC|mo6jm?dH#~mn(VPoIEjpgQIS%zUlgovb+Qlkgfh-88YGcQ?UJq7^}MOYwQm@Vv0 zETQHBi!|T!T%ZT0&P;C_DS`1Pe$O%p}X{9 z_G+}!jg4nmj@a&V4~T7F6?5cKnM53~NPG-O>|;b~P#_+ZQ$Zr;$`E%YBGo-~P*dg+ z3D_fM9pOxAU!_I;-vO7_zBbM_!GiJbY6z8rfjEq}b7uz`V$jjP@7AiRPq~Du>}slH zW#iUCqDI=S6}u%B7WR={RnZ1&LU8`N2+gETdA$oG+lcCUte^r)CS?7 z`i6Tx{$8j4OFqw6op+~u-sQlryyX3F`q1b0Zd9BXV9JHv8$mpzHRqn6pHpp1J0&4k7b+W8zLhq@E?{2M4?MxN=y zF(~7f@J7TEP^`dfvM@6jDP2q`ZdY(*VIueUVI5ewso3bR}ZB><- zFi}f+=Q}xsIJiNR1KwJyVQ_BeHf~>w8|iAOC>-aowGxd}uKrT+<;@%1(wI9GB)=JT z7ox6D%DHw1@j9a=*6~zor?ADR?t7X&&n|Fp@>vmD8|)==wO7FzSrS4qkFm97pA$Ei z!pND(oROx5rg-EDg$<%P@WfjrC;A$s?bdxgpQCpzJ7WWVmiD*fWZSvrm`^d?_jHq! z!*|21BKV<)LR*^1xr7*nNy3Q5#BKOF+5ZFD)BQ!C7HHa7Jp=O()0106avOYN=!n%&; z==2Yw0P01Woki_rLCi|vol+@Qy)4iMz`ldexML7GTdM3_X>k|{Rf&;oE6T&R41=OF zP)CgvjpC}rV_NibYpU?-)it77h1S&|p;b3C5+-IrqU(xhFK?*8a^j~QWKYzG%&1k(s+(J_fYz#3$GDifR-T2~!Ni4~ zC70+$csUG%$ktHy?Hl&(-&ig;Hnz65_U~VAY;Eq_Hw;4=7Q+yH6QLq*1lU-EIYmS) zJO~SODMf@hf-|Lnp-c>NDI^rI6egPvp#EKIKO~5ZBqBITm|3{6Ljo7Z1a)^_wt`o} zl2q#$N(3ndq|F#(PGrhKk&;Gw6LOlVw#g?GSoX^8lC$ZHYxpweSTf`ppUyTbCC?5P zackUi@-#|XWNVVO^jJ3s6kNKlX~#;y*;^Dn?JShDk3vL4$L(eA^ zA$^1$ymd-Lez#|&3N#|FG{V(1!##5z70lrndO0il#c2TqGn?CBkHKYptRI;5o;9me zd!X$<;iO;wjXwl%(Zj#`Zs*@eqg8QVsc+X@bZl2w%dO_Ev>a!hyzk-X-|2=!t2bWt z*~6pWQH>m1OZkOwy!ZiUpY$*PY$t3je*POT`p+-F>NW4XZgU}Y3~!_p)IF>nY97hE zaW|iR@k39#>)o&V$VV=J*M}Z-pYz*hFj!1(=BjYV%4$yA0ar_ub2B(lkJrhdu!$lY zGj&+kRb}7o@OdhxPXc?Iu{3v~_SYEQ4efKQ9WBk9gP#6Ga~KWLykeWdtY${cDNDI? zc)6E)sq;xORA5zNc2hV-%EBatg=Mke#bQaN2p3^t9!R9H#Mv7WDG_`N4S|a(lRJk_ zG@$T7sT9Ik%?TobelHP62DT>IBr3vQ0b$o*!)t<6q2>tIP(q=aOEm(uLT_hI46kv_ zav~f1son8j>=a3q$b|L~l(S1S)OpAE_fb!O9EgxvV6VWXlP6QE#xzaQvpF$f2*7J_ zxyTbK=!{e-bcc_&F)pUvNj`+yC^yqf;u!A!hJHCrb*9nUqa$**FcG)18FnIOLoZ|# z$m||s#Plo2qt05*pK*R+P4zK{k4PSK0EoYpM7JBM|) z8I004c7XZkJp;+uNdt_P4UkdWxy#cz%VoI(kMchsfaf#+WH@Le7%PCQ1!G>wN&swQ1%?M!P zAmqA1&Bj{Ie5^i>mJZ=?ic+SewiVrE-R!Sdfca*L@(Ib~20Q}PRjCYcn5lrIB#tgK z@nYG*WtYmWF{<0qrf!9kTab0US}D@f=Pgh~?bb|`G*GRQ6nLr=F=|~DZc@Vt#?$F< zjwyo13ML62GsaQ82$H#SLH_}JA!r%IT+FJfg&V1%&;Tc@5lz5hLo+v5ILCQ5CBkFw z`VHM05tx`*giFx3sO4I;Yk-L@vL9)}b9ocoIssCOTbStZ_LsUTFaeTa}j3P zVC3X%G1OI6wF+}Hb*-Qr>beuvl(vEWykXR5J`Pb~DY6mRL$b0nuVuNGawf3@#*W1Cs$F8tyV; z=H!rQ?ljc;+o*8?5Ji#=IkQlf)DjO2arfvd`ceXbiwQPCv~bzA9g_Z>R8@&$0K9dV#(<}b$?X6D@`*v?iXI%>RwyAkan#bLXhB`-0`P+su-7ry$)@J>TsI^VP{Rq=tkq=hfz`Gs>*LN6;Zoq{)qP-rM2xA&K($38h4S0IyDxoK zFC`lyZY9MGU_AxKxvQBUb;r{a9#ZQ>nM~by43s;GNtD2|a&=x>psNkS;WQJfd!H6l zrwTRyc!1DpU=bmZ(1Mu@m!S-$l)^F$WhgAnETu3JINL~OLK&E;jx}RCV)~QtBpF29 zAhL1{pb=&Yrs~S%g((K>rVb4rv(>cckwd_vnG`5o()S-PFDUrBoZnut+$J?OJGG$6 zfcQ8(rd&`sGxd>cd#8M!-yUq6_8#VUk_R`ZdI-WWNJ)KiM=(pH##(D!MM&Ek1E4}_ zfQwUIk{=I=lv~azcCcK`EPBqU726_<01xXQ_bjXVz?TE7Mb-@UIUZ`_D5orK8lbJq z=}B6J*2-~mcEknQoNp7pxdl_k`Y@ukX6c&X+)FeCPZ!tvx{S#agJP3tu$AmKlYcj@ z5Qk~YJ+m2{T83tXRAvil@yP1*E8j5=XaK!kW3IM1n%`MF{NZ~#J=QXh^HnU(JwzE;)tJZ2`)ooLYB2`#2p^L%5f_ZaM_U|j3n`LWr-~Iy!wzjqw8~Zjl zH#YWdE*8t7EM#L?3>z$kh(k>U6u4SmU~vjbYi(^H5g`^UB8-3v6AKGmh}?_`L)#;G zq~v9AECUj3;9!E~70ncQkwD22a}6ah!#!RcaW`S<*pP^wqTFPIK#fKX;^+|EOv0<- z1c=pIgc?`< zOl@uHJmvlMCYqtgLgg@+fWK_Tb0YoS{H7bf_}jn#0ss&DhG(68`k8AndbC#T*TZZfisy5MB!o*Se>Vi?J|1yRiVwwi5!KlBRePc%QQlb z4MY~T{Q=EP0iH@A&3p>(Jm34zbeG&*#_3H#i@fN>d2Ym$gs3uzQJAQJn5j@H%)?+{ zh7b+uJfuPq5Lk*^lsHtFgJ2;;3Cg-wWjDB6#_EKd5CS3;MIDH$2uGM|oZbtm8X{Fi znE*$s&cfzah!LGY3<{qu3Mx;d$8gp}!=4B4J0(zceejvc!@n*wMCR@; z%r!+%fw&B!y%JCi?%62zS>%MJBv&U=6bO-3n&1ISBo1LtUnz%ts9lq7g~dhs{y{)) z7QQ}JHFs9nLPGl%UB6ZZ;1bkq@?J(Ycy34u$csi!3bxo8JAwYmPhd4CQtNx(^Pac8?H$*A;u9=<=;lMmpK$y+XPW?EsD7|gl=45`%gUOZV!CymH+s6ulUC+ zp8G9dLkv@w9{C*A^qdFfi0r1Ii*jK#0uiK;IZNT zZ)wvrXur>r$bu=G*>+jLH6Ek;Jg#}3#}PGcc$Yn&jlEhzgqf{9vT43(nPn!<0Ed$T zt2-UNMMx7lw@GNLPe23~<|0y9WI((wBD`1>=E6cELn%^-OX(Ac5M!sqISh-Xt(rBg z)Fcj+AzofaTP=}53?yS!&9PAoytsya!7>#bnrK%uXX$iJNb4B5K-M)w1ZSNd`w5_oFMWFN zT6BS;vB|t&BavPj`E@XcgQO*}_0g+mvCc}y&bj5tw$B5Z3A1Pgyfp=c&YU86{!)8F zqML(=Spwscwjj<L-?wlO4yjFwz+g!)pqQa4X%<+pv z?i7h3=n09;Y_Lcku^8i$d8#j4DA*Ks)7&{d)^Ao_+9Y+PU5ky@*v)5Dj=fD(4dz9Y z(rAy5qiHiTRUdnxtNI5Nw@EtbO>x(wJ#*MQi7|6y5D^2^@OkbIgF@X@Rda(@7#2E7 zhQZ9LyRUStR?TX4RjcYfme@^W_mL~H&`k9)sZA(ao?6Q-7%ik zeQ$oJpHeQ-CskP+Xt(Gfa??V*%5=E|zB!AE52aKyjJ4v3HPe+%ZMRa$&WLT-Q$r$= z?r0BGnl3PDLGKAN3T0}dO0vxfJph$l4#qdg!iMm}z)S<)WTx{Ly{4lp2*pOGuI?~( zg|j;9J(zyz%bCbUI( zT|Th%6S1v(7r}o4@6oANRP&9(UYvNBb)tbhne9 z^^mjw?9CtBcdI(9yks5hsOF_3blVMZ&qqG-syF`q>n?rwcYpH}1iZsun5lK^Ji{*O zHz<*ar1+3aVO5d>HD;HRxoKn!$^trC2;D2MYmY11_x>;6(Y5ciLx!C!ah1}({3NQh ziDeV$VkWUA#4Nc#sgEij&+*`tZl3WalPRB>NT@Imv7s+T3YWrCiWC{RaFH@d8Kku* z2;y#obHJ*4dJcRXD^Ve^!%Q`tk!ozAc4Hj~mEcOm3-Rp^ZE+A6CW9KFDlq{uI3QvD zZc21YWvsIhX$o{g@5~6NT3DH>QK0gHj@AH#8p`?w)5;5;Tac#Aln_A#^9r6LLkPhY zgb3IQMFzFc(!M=St2ERzvr z@^-Ya)m%@sRS%1`Vm_Mtwj|&X2_|GL$${}KV4vZ2h`>`?iF-h$I&jv764X9(Pj_Q$ zhb@r1wIK7kt|?i;S<8CX&1?vCMC&0vY=hZa6GHY740R?-Gf>1A1RAwn62#$C*~`+s zu9)f^fVI>P-(Bg^`X9_e+HDWhXqOY6_VA{c>=;5OW8!H(Ni{+&$ApP_(giWkq)lo{ zYHXq8tg2?J!Q4^FSqp$7Ro!YGtB%#`%B-5ItC^d|;6+tE@?AJ?&U~MOq$Qji1)(5p zN#V?vFtZ4KATu&05^^`QT8&7x5(yVBzN%V4EE*xoAvT!_oVsr<`zz|Cw%%X{;~V7M z$O#C9Y6gC@Hkm1bScFAcC_?^d?Ig`6hf}_9kQUcXhzl^F*+d{N67%ES&h_;TAR?vK zksDj5ZLW*Zir~SGPl6m08Y*yCXhG?ZHTHa&`wKc-aCB2gtCQo5j$1o%8~{tncxi;9 z7tU}6J3CyY0K}#v#R`X6ptVlN(nNePW2c1A!;Q(Sdv#Y+Gu2wvwAO4}S8kePUiAW^ zfrP_eXJz2c4cXXOE|(h{o14qU#!wbgmZg+JLc~%^DT9p9;(Vv4=A$)ZY{hY#_Rp3q@gH& zB5Gh_as?^HgH%l%R%0*fh}FEakrKh##6`sth8!fd$UOIX9H7?tF2uBYq>k;W5H~oxo5f1h)K$EMDN}(EHG~-umaa+B@s%kIz+n2xk z^_Lxg@+pt}x~B_M4Y09cR9~s@uyfpc4{^>Z`_DOfU;O;@H*a71kza%;Q@LYj_uWR{2}5fk zAPLOPgsWBtwn)SD{4pf5avG#6mc$(CWfWl}JK}AqThCia26YNss~&fXC&|%M$=&18 znNL`8;zE?&#{w9b7EDE`5Q&h82w@N=CULIJiQG?SD+g^u-JOdtk&P}?vO`iZdo23GfPyM%BF!;#{5F(9G^LQN_nlQqw-Fmor zOG0V%n_SmA!gsz)Zw=}koNS7gZBEx z^^Swq$9!c%{&ufPZa3l`%AE(duo$P=SDEW1k7b~a?(V8Kj>bfWijGZIGu5%08g#VP zs;XKwRgFc5xk0PJjfqRHTY@4TQj%!FbJtWvN+dfIBrLnGaB_%NW7ZrmTXko1#>~@0 z9MVk86C6|i=icM_+PmAn&3FTYPMAwfF;hx=97u>_iAECK*>rr+l!3`i?cmR3w7kZJ zye&((T{sShDT{>KqCFKT1dr+(c}v6sDQ-0yw8>i*4Xe1WV$-gO{JLOOuT5}+@&ktg z!!$2h^9_dOZAx8iMKVt)?1oVHK%K%PERuu(vXv3BvlE@ICrXErb^0lV}+$}?2qH`8?i*7lB zD@;5ddzfJsdto-yOOS(+x(yaF3w{fcqp(?EaWxBmCwC6+eXx;}07|=dukFsrh?{=o zd9$cWtIcTsCnv|NH?m$lMk_k}%@ss!>=ds3fQ+f-iEoXWV(kl=mGP!3fSXR{LPS=o z%0wQY&QPc||2Y4~|NVP!y6lRx?|%My_c))-KK`+f-E`9zZ#i^mdwctpuX)4nV)cRd zzv#Xf-*eyA#yMx6aoI&#r*TimMn@qlwqT(p?H zSHJJN&)>X#2Q!hMcKqg3?swPSzx9UKzu{+o=4Z#T9(UaSqpy{Cxm+%n%MX0u1OM*F z|NT$>A3ycvCqLY_m3AU@R>dGVDZOpn zo8r`+DK)T0`7oPEsM!cKg-<(R;>*r@Z3--!vSuk#hhuv0^Qt%w8p=|)d53}dEW9Zs zy%{h=|IG~MX7ZrOg(4xafJ-v%xR4ZKVK7l4<|0J^q9OzrDe4x+RC4mz*C?nkH#=Sc zJ(92zSSd5tQiLl;z_n^r+J#V2$TWga2viDrbpxEi#vlz|$F%v4f_@SMQ3TXa;-U7- zL9U6MteMIuAIgKY1(G*?P(NG45H27gHZ<{RTfU{ie8vjWIrEreV-|i2ooU{ZSYYVI zAu+(Pngy3M8ZY1wQtjwigw_c*>A9Vzh<53(P4-I@bWNxkPr`rSwPdYG?z$tQnV69B z;&1(ccci-6l)GWxE5B^i*Q9`y@HDg}xjq-@K_ly#;Gwi`sSh+Mk>Yg>H+*NXGzlR) zEMy4O(p8*8u3&`q5Wg9ncINe%z68Tj1H*mC667}a_OugW>NBPDQKxRc=dYEi2lBaK zIy>X8v+5huxc+o*iFTO6BIy*SRjp<-iX=f0)lt<~)pWF~cBGD~uBPDuK|n0cn3=O=uVA}VZ| z_oZ3q2~5qL5-V&35|Aelkp$#ij4C^{yY#B7k+n-&GJ_yDAMWPNL?U@J_oI!tfi?O) z$KhRwEeB`FVhAN=5(G~v3|!&cmJ_)vncKLH zYPHsJT$yWK={TBKjXjaO8PS5c6j}@{K|ye1c-*uEa873o;F9NbnEXAHtsGFRwKnUJ zZEtVK&ZiW16($k3wu$4sXh7QLp9%Xmr60~ z%kzSrS}X`y5QJwfJUCR5sqo>BU=k)XR}_I;_SZ40OHOd^Tbk2s26%R7_kdc65tXFi z2xXramv`bXbI29%7-#raUoo1hN2DWQN`OR+ddAxz!_y+`IRZP}$-oZv%2Rg&)f^eR z6=yb!p)ym*K!yAK?4K`vD}e9#!5@FZ6CS^RDO9(uuE^~A>pyqxwb$Nw;|-tt?B_oE z(T^Uy>ENe6_300PPb{k`*-{m!S~<*{G;#3PoKoOvXXTO^UIA5%O>5q|i2 zr}Ra~%ijIzJKUl}zv{e`kJ}Zg@tW7X_7{Hs7l>$UYx7t>&&I|^t@T%b_1A7Wbm*DS zdgh)V^VoZy`hvH9Vl^t?IzQRrlwD#+=t{e>&b|MmEV{O(nun4*>#?J*PBc6>+-Z(oxQ2t!Cvm1dZc9NG8tn1T=EY zqecRf*%aMvI@h#6Bt(l+7DHKV6e%o4M9N|)BEo|ZS?pXqCwCA51f<2mOw7bhglXo0 zuy`(GIg+G`xEmW8s6Yez&*^s_Q9`2>$z=+ZLRDojRRSpD#LbyW)!`c2fmBkcHkeU2 zanAbTJXt(E<<;Vqu^1FaRaPj80yDQq%Jkx0oFN4RdDDa|L=k=!y+k83duCE(>Mq2& zHsdps=YurW!~I|Lhem?_%-eO;UCTa=b!JPL>Dtny9m3~jbv_zBaX>_3)>+RL>E&pc z0{0M1<$Rx7iIy7WrgKhZ22p^mD8Y{b1}5r&CHHJ{rVFweEjr|lDd8XOn=(qIXjpxG zE@;f^tkIL2q~GF$(Id!bz6PGwi-gH!Ve=I??LoZ7I?>kmlt=C%oOG;dJn87#s@<`} zvrp-J%e}nxqlSEU?hjK=gPWbAfg{4<>P%6yOML%^v5vKxsb;XHg_OcgW7}b)+E{f} zM^!Von)(3Cpn&F>r`bp|6?*eQYoEf#$TxLCZZTGMRJR4(GzP8i)qDX>KdSbEx}k4# ze$TvUEk`aq&A9QAt>K!Ry}>8F8D?W(2`H{G6SEX@45gW9NdQQsSIl6<`FSJ@s{B}p zG|#ID!?fKLITQ<21dFf;o8}eFAQ}iY4l!zXZ8MZj!HT^}NL%u3RkHRljTpNGAhymv z-A~gvBy+imEX0V2=7(Ge0hNUX1Hh|;MB&zG1VO&@JhUxG$teTU3B%U8Dui0c)#`|8 z)oQwO8`aGsO^Ja4V0dX$pvhO=ha1_>7KXIqrGirU#2S zbFAFq>I`E@+l+^Cj}ZE#*{Mv_azERm(bx8X=&HqeEX?ej?T!%I?c00zd*A=+*ZtE; zr=M~6iyv^ywiTwWVY#)jS%i*1>7?^6xPWH*_BxI?-gv_&Kl#abzVqFOZa(VP!C7Ko;*>c29ehh=E`=5Q{d8g*2|L@-R$6guXxg3uDvz1bO9DnC`e)pn_FS_WWi*|p&87FSu`!2^{_L1v1 zZ!54oSSb-_x&xs*Y;4`*;a_{ji~sO-m%ZoW3-4YCU{(TyL$~fBnVcT$1%QzkVMrOR zdK>?bRYhWAC&W%BOcr}^VEK{G`r=9n0SyfFqgt2JPbujVJ?fs zf=Nh-nM;vUqNItUMwl}LBf_1`!&{DdraseTH|HqJ76gMkN`V=K#L_uLr7#Es7(~_` z2QBh2OZXnc*npj#%pN1%65z@#_Xz|lly-ywTh;7*>Qus~a>RA&YSvK8-G0Nt37KdC z-f2&b@ZKbO4SkNuRuPCx&sz)uoJ=4RzU8lZYAkWu*-7S=za0B(u zMsG8^?hfoMXTdZ5w|5wVcTH3yK*xrkTFzi7etS%gPuUjn9W~!c(o%a&I`^d?wH-&k z>EQ=i7pd%`JMOl8?Edea-d^7$t8M3JT>m6=^d$;WllC`_AY;xGo{j%^oJ^+fLa5Hg zNKjRTN!_XibSAtzs1;^bLk{Dv=32Fyjiaimc?;@_fV5bHq3QZM%a&TsDv0{2nahSi zWM%h}YHV}VaRi0|4smlerMjYER#d=?^GHn0B^)Vc5Ds43j%L7%h{Hw=v^LZ_*)}g1 zGqAMPn5$WIGI65DDZ}kxT)Xs{;?6+?klRF7o)%@q!mSjX=aL!#CK0K%vJ^6>D$Ei# z?&y60i5RwKx=NZq_2olkLV}4KL9nH~N0k|yF3AWYmasC+ud3iV_BN%Z?Nl=sQLRzf z5sZand4mS;qwo#4nvY1}mPrtx_>Q(DXb+p)wl9P~=LJA081i~OP z%HS9Xm<(=OYh_=cI)*@##TQn!1$si&%oQGvA*(e4TZSU8!m<#pQbd-E+-_QdP+}Ii zsTF8KHlS9xrsy^PCyteq8}x`CI&6MuSZ+WB&RA?6`sv0q|Gm!)VD)bL&UtPs`P5=c zPzYj2tOPbQVsp0|4g@hXAu#a>W2D;9EQY5V=9%U~GA4Gd$%8fxLPg@`gZda-Zw`vu zL?aG2QzWxDTRi0>#f+G((LiH}Vs>`{!@X2xa^+4bQL;1B=o1pw~#z(-czxOt_~ zhgS1JsO$O&ohK?MoP6gK?{w!&?sGo_Rr4?0bm+RzT|ewUVcT7E#o>`b9$kkW+oFSr zo_xPEqPn{J`a>^&&mC>iVdkgo-?-?E6L!2cfB1)gc<|uC0|yTHm*|@xhT-O$Z~pz? z`-5NqjsH9hdvq-4+-cvNKK!}c?1ciMYwHMI$&v#XJnZY<{mQ@k=PRy!_ER2z%AJl! zgOPIf$uOC88qXJdjt(RM;JT+hlZIL%#wNn zHqa76kTNipV7I5_!;D~&Qs^FKR+FF3RpmexEharh%fr*65FzETw;>h0)Y1Tx%@f1_ zKCy`>==7GE&x#o9lIw5w@v|kg{LYyhD^EPFlb@f_2}> zOiS(a#ZVk9LJ>9YIoB}r$Tt#Kbyd~s<90a8gGZcZ$7<$|s-|XDZPXfpZ?hAc=8=;= zF`j$V(LBAxL?o?=Wu%%kW0fq0{-)}~!riJVgIvjpBX!5j%#1)~0frbGNYq@&K(0!0 z76kpgx8xd!L z!?k53^K_qtL^GC528J`S6ecGIb74MQh%2=;jP8i%^u7~CoDw9$>PTp|j9uHRbAz^8 z3sR-^u$Tr}PAmGfQ^^>IG`{3+KKM>;g9d{DYK@nW(IHLu=1Sg>71>s**02xNQC+RG zjhi?XsTp;!vv|u*jN{GRs`*%**=i*sbJKQ>#p!1?J0#PpD>bdIP7DKS5nHUhE;pA_ zeY*^s`Btcc3yh)%P3%&Z9u?5kT(POw8?L|cGoQKP3!lH~i#Ht_$8lp=?Ay0>{Qk|; zPCfqk{l^Vk``9*Nf>Pld5NZD_03q1Ps8PUl)hMK-`oP;(crbF1vAeSxfT~&wTUr^x z&Vj%t7A6{^(6@@l6r>4+B5id}jUPZQ-yNsk>%?I$}`R43B*) zZ8;ufo}X4bXF0ydV92cMAO7hJKy=>yA9?7A#tW(D%Yg@;x{fT=D9^7%6-BL3mdBrR z`prl5@U|Wq?eJ(vYNm4>J1rN$1I|9N=U4pQ+dp||yWYXNj%s$Nb`~7yIy7ukc_tv+*^{sDx>%$-Z@ZGH+#VKzkm7FSh`nY$o`Z199<4|S ziy9TE;rW7wkrg5ngR`whibXrfzFQv~!-r;B)m=?uvjT{wC!i1!+}I`O#Z&}sO=?ky zmJ*!P7{8e*n3+VpDgf2$5Ed0MxjML_z)i?NtZ*T5p<(b*qq=2hqmZ)31CJuXLsKTR zJ|xaLY&2*U8Go2=vbH`N;sh3ML^H}sB8(XZPSPl$YKY#lTWwn-1__B1ikH3>QCAYz zj%1}&)VI(CkYR$eODI`d+Q^!(c@HLQ-wb%y@T}Lnf;C&+L_eB!2%fnh4&p50n_Q1* zF3dv9Ooo$(f(`_3_IyshNN)h9AR(HW?IVaJ zui4;6W+tXhX7Emnoi>d~A3RM_=R4O*{eiTj``8O2b?Z)yT_>CGVZ+>`d!e1n6xzLA zp;_0l_63knAb~Zl4VmX3P<6m*Xi9!J5Z7wsXrpRv?CMZexs$?7UEON68tkfOW1qD< z83>psOSU@H*u<$Yk(QaxN|D7Qoc`LlFY2nI6cp64vOv_`r9w%oxe+s?2oZ?2DoTF4 zA|-eV%#mp^tte{^>7G=rktDzp{#pmte6hkAmEMkuSmiPRk$%ATF%L94YzwW+l$a5% zKV^WZyP+9i+*;e7u?fOn1HIuy3l{LgOD$q10J+J`aLbc>zMo%_|JZZKsRfwKI{7|N zYACEoAsv!D6w zjn`j)fz zII5YBtG)}4C$XwJsaDmMCXQK^tAkL9Doji9%_CG7ZUq<%Ey2q`xd%HdEgaM=rLJ&; z*DoCW;!pm}AN=m0yyDg?mFGU=@xS^r-*Mt`$J25NSz%)f5b%Hslo($MP;yp4DKv!h z6v`8K(P-(a@aoR)F2aq=4hvD8sRivYhe^bd6uvWbf_Cj+^CK;jjH4YUGv_utQd5_R z+BB#U8Jshs(yahB{X0r=*9G({=R5J~JaNvml?$ikG{wbkFlGTaGX=Rrn@LaO?(#-C z$>Ym7ASY~4Qw=goV6~Cho)+Vr_9|PGop^L>A~78H7{-L;&K-s;Kk#7y`_4G?l=CmX zc{_sPF{&>|lh$=KMtP9XCb+5t(H9@7cJsEz{|>F}@XC&iwo+F+CR%RXwoiNDnNcHt z_%jFJ_<_&j4)>#~pMUCcvhK2Y#misW1s1pC2N9Xs%U|}2J-d$c?!13d7`N4S%n-V+ z4mB61I7DOJaj!=|`9qhz>Q!&N;_mN zY(-cd#4bfmIhW5)B*8L?#=_Xy3&Si1%*0?b$25(eQSO|~jCnR@%4Q?ANnsC({YG5G z%o0Vj5XX)@?B0?441&Sgklxs4?&VxHlTl_{b@gkU2fo(n1@8;l%26By-p$rw3w^TKdO)*}MBp%AhB9M)4RHW2u$}S}4Tmbe}WcpTL5lbOh zaww=41f9~+UNPlnL=Jj?AL3}ZIHDMi;d>qpsk9YKx-N+f2+}))iK`kDFh~Mw&6y>J z>f#c0T13nmP(VQ^v_`Wb5twtbM00G$*Yh|i8D-ojp8NA`w3T~C;W(J)OlN8fw3``XN11Lo*HRt-Uqnnu47Ps#vQ zQDCHEh`oo7EOak3ep{<{3o|i^hY;U`RN{=-b~QW3}txJgbE3SeGHli%fKu|?3TwtDoVM*KbS;B zK(kzy7^&x6Di#h*ZNwtMkB-Q5?(I>WRYBynetIPW8%`+~P10X5nWCqw<}KC8X9vzr z2M@jdJs)`QRUdi7rEkB@;^4k_zsucEKj|KKxzlnG2@f4L@Uc5!YDVUys^hknlECI- zWYAi9AhC`*NGls5 z1@3?QxBvK}zkB0fzVP*7U^wZ-6YqTLDJPzA!hr(^%1~C@tAht`zTw6jKl_=_-uQ(t z{J~$n_7DE*wafPJdS6rsUB*2mua_V0K~{L|jR6<#Ldw$4Jm0pe{JVPbU#5iXw4?#8h3N8l|+bBQk8#R)jdY7mJ?T)B|D4be%E%W zxhF<6u%<^XWP6Nl9$xr^Klv*F=bZn*5sQN>HDFY~rSKrpU`)%6!eAyL3d&A&_i8?> zAE|cB%39Zp#{mwq|K4+!$=x^Wl$-^tX<8>VloN{0}|CP^u_H%E4 z``d3l_3t)+ESJl7zVlt5zu|_HPdaJGZ=HJl<_TMiFWj<{+w5x6+Usgm&81r)005_- zf5~a*U3}e#-u+K+ea~YacHfK|=yNz@izQ!L#z=)oqtqs?4izQ{Tv?gHBBIqqU@Al| zIj~g?8waP{)`K1om_#s{uZ3j9%|D5++X*G#~X4i&BT7gBitt~s&eO;!W_WP#$ij)IxQ+Hw_D#5gGguv-x2WMiqmr|Gu zg5!?xO0YZNBa4LS)B3wHR^~j=3UdwbBsmGf?*U>+VTYRwgc<6@3KLhS{!<=iXOR$X&R^ql7^S2^$1JDGVp0n!Dz(stLKn1GyRYIY2rh zjT<^pA<id*KD3qLsJ{?ga2_nE)S3DA7$*@X9sy-BUu&{&2QB5$QcyTqLDh(1zc@B54 zVr@v>|- z_V3?!&N*kFb=FyTJ>xDXpLEjJzAbk@bn~I>KmYkpUi+z!fBX|4|M`H@e(^CO=E zaNl!JfA~GmKK;b~98+?28{J?lIx-M%Y%s=A7bA3G3awh$jEtsmD|J&!i;MJGD z_5A>jKXBmUOD=lQ10Qh7B^TZGj5F?Z^2z)5ZG}1K=9>?F?)vMm`Q)|lde^%zzv6B0 zeee68{||3|{y)6=5f8lJJD>iz?|JrrRA-P$X_}9CvunDK`M9&AF-((_yi;RaZ9< z2WyDD=AuJQb0VNN2S!sYMnef`rdow0IEd!1y85F(e<6rYyZ3``*)}s&^}{2V6jM#B z(SSD#BYwge3JGMQlbE4yXXTUK_<$_|ef869RgmPH2vPic;h_kQw=|NNoP;g0x2 zh>qV}i|M%Lnrm*k<(5*)zv$D7eEx>dzxUnmdGuo*z59g~rel1ln@7})_v{XCl?_X| z@Dbl|-G|b&{6}DJ$1Jle8SPabI59-ngA-^;w05`) z*f<1VYqf^;Y;4ZqbpTaj&5_&1wvB5TpSIU$Q2c{(YQ+?=!?@%_1z>?F^=z#vIF+4I zpVDf|#IxDDgJ}JLqh`Qs6Ijk@zqYghN=ZkF5Q}hOVG&}=>0z)Md3~e;h_G42i4(Vc zb`ZH5F9%dJRj8w(XN3hY3$h@ot*o#(1)T$;fOvHy3<`$3nG#3A!9)f@#I!o7h-+03 z2&Z?`N}%|iL@>S4akX1d=FO)s!M*0Go5Q0x!mS0ZOe$83YF0Je6G|W<7zgJI{4*{pf5akgh}uszENba>1UHf66C$Pz7T_VFdE^ zRPA{hB6W%JRN?nFXHu87jY+SBy(KzZ6UbuT=X&;lty^f$Z>P5AAWF0Q&eU(TpvUwa zS@*B!nx$z7`}T)A7`X3hrmT-{QQ0k9>RFI9i4kW?VBb?ub(=PhogcTSv3&P#V~;jw z-Phr?)2u}u^Xwhy6xNnltx6ihWQNVk32axD#Y=29s+y)uJ_5g*VVWBKs0rcn%;KiA za!Z~h z9fbxKN{&OM_fcbgxHkH76BAKk_{<4o2=Hxc)SaSpFauMGARg67=Wy2;tggSc9J!cL zG#aR@C{p~Cn?-n7sv0c`4LV4cx zypfh=G{3w(0-Yrg8M9(uQP@3y(I6_1M6%xF9i4<0=D!4H1uEpNU2~vvOLs@UCxi~ajGu?)C?+k%pdb{O5gVenOqMyf^bl%vgFX)6 zJ|bE_K<3Nv^f$t-X|{ts*`|kT9h}UBA~54HM_PpK0Puvmg{M+L&S8TGNA`t>vQn5h zLk(ba+I2HTfEeb1!F8UNwHBHwA=1R@1|P2PYNbCZv}#YD$yH=JAg5o6!Qm8Vmh%^N z0||ZXSCE*6%^@*y``;8)0n4~R}9Z>VCzOA;Zeq^-m>fs|l z##lfA7oT~;{m(fmo{N8T#WkyHcgU{8+;3Sot9}d zquQ~Ex4c<+)lkg~Cnt{D&g||Fe9Yx9{)5Zk^?|EC{D}+CKPMu5B0AK2#u$=qNYH>O z_4!+BRxH0JvfY^ z)Q01dn$U<=VpdILaCf$a*%@XMlSCh-h^jJ66qH5)OBrB7rW#*k1%arf?-BsH6?dR; zoCAQfs=2#x1Yd=F+`GA6m>@c^^@dykOzu|m7zFE9g>0XnWbO;3sgRt+7V7{=NijUt+9#(hR4%Wk*zCr$kXnj3Sh z+g$VFUdylV^OxSn^ncG%?8xUU5%PHw8|FXf*)l&mg0{@>f*MS*=+rFcvvmjcLcg0) z`nn{M&j~a0olOm`mFKbRqtF7=WJqWgJ5Bcv_g?+Bj2p9c%&j;(Zp~tT)IWIZA24-z zx$B4`JO6*e(V+(hrg+?&nTrV$B?(iusTCd}(cXrF$$TEG`s4%ZCl(sB7PF8|nrvUu zR~izgM@`>B1O+6hLjb8Vp=u?;P~vZ_k>_2wRAZ`@go`VCDeR*gvpI{pmr~qOD+*M~ zfJzlU@PfP&6%d79NLV~a`XCf@>jgI`csn**d^w1;9Z%%J9-`=rxy7f&v!xLaknu@v z`5aeSh%6IR>tGbkEQok91=S#oD&2(c1|jtL*T_>uP40x}WF%c2!r>-o66?c~%t@K) zEghaB_yB##FvE!&lMst@GP5$9Kvt>5~rd*AC`EQKRumSqP(&CMNp{0YMY9`Jzs-S56X@O{sH$2;Hk$A9wYfBnK2 zz5D9xK6vf*PkPV=54-2tnSAJgq1tNU3o}PR84T5S_S z#~KH|M}a6_iiil2u(*32^~j+6ApPvDaQ@Ek`;|X^-m3uI=RTMG*pL43lb`g&efy6S z8Hi-Zgl(t$)RarT_~MK2eeZjH|Mx%lMSt^mzx7}L+Z*0`<-@+|C%*TYU;TUk>4&h| z#_BLO_F=KroDs{}-lKK@jkOOcA$Mx}4P|4qP(YirzzynzLPD;YJzL|#^@;O1XLk@! zXLE4sVPqg;ozoMU+1*JBqC_KBR*t{HM8#a0**sWoHgg53cS=1#Zcc1WivlVnMaaZG zri4Ta8=}VIK5sKKBVxDos~|(hDIcU>-JRJpectmt^5$ZnLvm@>W>4uf>Qso#DCiSL zkrE14bG-3QmjgKEf(KFAsOIJv1J&$M3;a~pRNd6kb{$hByaQ%l`~MVbuHKwo$MEB+ z_rGgl0`T5zzj(#fH{cHX!`!#)nsQ9TiuW)7L3_&^gzzO9Mw+KQvpbj)dq#xiz61Ao z*w?<}rGNhFH@@w{^UjJif@uCFfQy(-SPcZ|Onexnw5c0$z}+Gwj{)-hBujybpX>8vmlwG>v4KfN|-K*R#3a5t^+nI@b6WF{8wadge~+r*kSyTORo zh8Z+dP|n7_y@)gFXI&qV1Ck9z4Bx^xWl5x`SQC-3LD-2nQkSSXNakbpMrZGRf=}y#Ksnho zb(=|X+b8pG?(1`#W+<67RPn3kvkurNG;Ci$G{x8y0N!>h(-Y8UUjR~9hdvodPoTG+ zhH^aYK0kU|C?~BAL|SBeUsyWzMuaAf8ulvs(Kj+PDzNYBFlcAP(NVp(snnWSV!M|f zyjx*K*u#E~lp?kyx3&ujc^nahF$S4DL6pJVLzo9R2v%4#+Vcz}%OGza>)H5}%rc|d z=j)evJ(*OU)Df|v1O`@W#92s|IA8(i!9(?(@I4I z7k2kC0qTLcX^}~$P0XFc9%e>Wcca4b3E|Ep@PPVwF)}t12COHm5>OXv<*>2XQm}LHat0nz6?+ zfi|5d63gejQdnk5=Q9@FbbEkEQ0vrRMltH-?(_@4_IsCJ{%&Ue?(h1JAN$cCzWd$J zFT;{Wj(%yUX%Rd~ftywx?|a|-{$Ia&$@f0@yMFyQe(SIP`h_oi^ZP#Z=^LK&*!y;{ zBFxOx&DBw>fk!xTF=tR{`^_v&eFitx)k^CKBG>9}LQDb?7WOjmAS}fP&d6IE6~kea z$ZgcsSik8RzwpvmT(-5j`QtzSqd)S)KXlyj$Ct7omSY;Qaw%LeY^bhIIG(@rJHP#D zPkZVw|H`lZ_y6&GzyE?)-}uFYfBoP8cd9GYisd$zTPPdtzLJ@%sCU9GPD=!C!Of-c zd6iHyeA~*>HrUnMP1Vq6ZVvI;V zsjLKNOXPv0k`Xw5g@_@@yk?0Mlek8wkn;Y8g=qDl9GNuUugpSjtnI$rx zZpq)6*&=Vl@^sdT558L(5?=DIPgS)$YS%%a?e#UzamO8(L!aC0Chymk$R4-t=Wbpd z+SX(I+%4xj5xUh}7(q#h&v4SMgyFirL2j~S zXJTe{3zj3IYtV3JG%dN#`vhYKJaqmMMwCc)4#m0<$K~%9t3{tbvH-Y1N57+Xi2;OA za*l*S#M0scrL*m4U+TP(+o90NBrxnS?KYlo%gYL_noxuLPjJ3yV0 z!jM#eHC=b!iMcU=dwU5uJ_ZDJVsbGv2aAchhJu;^Au(5n4<5af3Ny^iL!&h~yITB3 zVh)xPp+&+W3Y9plqQR=whd%U<4k1&9#NnL(j9E-NS{XDuv~&7Jkfd6fgQ;OP#Wg+U z<{)vY70haeGPoMK6Ehh^pj8t%;DC{ud3CL3k)1HbfKcxPY}PK z?hvQRW}b%k>4LY`d^t@hF!WczyEH6YENffwo~!6{8|O|7`Pze_xzP8BCZD~)M{ORC zZPoFm7)GYAj>=pH+P}MWc{kU7N7^#&7(3^l#1*b?ZShZC1_TI~#o(*4&L!uqftl~4 z(zw$I1w2>V1*CVZ&YUU4VeyH6MB>XJ?{j)0_y83xCPbokWE^R^QLQXXu_7X-?gPwR zFfffHhEg1)RE>>G3DKk}!r^Lg!1|=qv;vL7CWv`P%oyNqqf!AA8)8{040eOH3_7p@ z(3;dvo1!DN;mo7L;l{0tH^M^L?j9gd0@!VCy9EM@D+BXbmcybh_nDU>b*#0H7U-~$ z&Irx=lw4e8>lgcQ&o3Yk_Rh@3+RbKaJ=V=SJ}y7EaRX)uIRs|p5F)73Er)LT>HqV$ z-uwO!-R1Ptf8*DG^{G#N%3`_6@}-F)h-F|YGK}N)z3z3-Km3E=dGwkNCz8hk2~%UX8Q1FZ(jQq;af{zIrh&iys@#|{p;6#@$h!l;ntRxyKELn zgs!<;1|jELed1ltIqQ;#e)Njhzu@m*_rHAS(>p#cf-Tb~r73Y{FO>B#2o#ZZF=n#P zn2(u~v6Hc+CO&@$?hR}1O@+w0l(9op)42v!Ivuwu#gCIPxI|4t$8OEwIU0w zC;za!C38yi_GBgp4Oplvm~w3#412OrSSu*i#(@cpgeLcF9G%Qzk(ccQ0Amuk2hhKy zJV080!*tdJ{7v@Mk%dU%{ zP?&qwmW2?#mHX(ag=z`DyLt=XaR_4`W7nlE)(1mynm)eeZ(A=}Q*%B)+h+?3&uQDt z$I$a?yc@II9>XT{hs}h1SeNSuVehJ}E`Rb_Q!;fB{m)K)fyc9`+tBmM^=bVP z!HDy(CXu_g$75io)!O;1d*}4sN`K%JX8KnC7~STRi1sj$_{`U_exXcD9(T7qAM^1K zO9^BGJA3EG%>zUoU)=hW!UPr+XeQRs#DGgE?#z_x%`Ml|+SBhKV!Rkc!tIcRGpN=~ z!=peNGnmNgC58(r4$L61WWZQ=H?5Sd9BPG6IlwDa>k`) zpRiU&#&k6@s%NnVL>$Gbxtoop3>M$GDZpwP2`CL(&V3OSmR6xeBzU_@!;0rX6P=QK zTR|lIFc-mKqB0DQB|F zUs(4Hi%pi{$l-%eee#peJmaq4`t9HO53hUsxBTF*|Mld#?g;(wXNkPdEiFnkpCaJ{K|XHT?VX2!rso zm)zw(XPyv0|GT$+@{a20h#!l>ANlOTFC1E(urEF3=bn4_&8^Ka)ZTvKmf6-pFL;E$e_g zByj4qiHHiJhQdimlo%wM0XWKq(#FML&4HbOj4W5$oD*f{^vuqN=9z~a8iL*;zIM5wwEXITD6zKrP~pA&8TbFlzxqFa;KE)o*s6 zEF=W?Qfo4S3#3*R8C13V;-{pM5+)cpyi7rL^F<9OpaoMIoez0K$mP-`*Ir~36-WGS zQrJ|9Vm9PsRcDwYqS4Jr;nm&D#|n4XNPITyV`(%|{JgcCIlV1wf*lVF-_?h#Rr`}h zsj01KXIIc>)U!Tiwno^|^7vfel~CUG^4P5pRDEZQLDSbU(|*weRg4PQZSE=0b)`)m z)wBzlh2mwG*L&*t?;!G*)H{FfIWQihGq;|?D__`nA~@UNc#7vKDhXTRrTpZdL*zV+We^O0PN z5Wr?ob`>sd)@RYnk#JQbC$O^!A#(FVIw>4Uk>U#`DO{LKVJ^HVr4&F2g~9$kKlWQM zd-dgKo_W{5{L4ST_~QEvi{+Q4s1hlgTL*4AbkqIrci%t#(?5FVGoSs!mtFQ>|M>5J z=($hED2Twm5)`-!Y&COapN2JSDFMZxtucnPfNQ4rdqZrC)%jPKA>(EmNltjX7 ziAhP!%{Cfda1D@`sanU%8_zHAz_dho`8=t^8<(D1Mz2CexLIS(;V*vaYXEFs^k9il zPs$-zEIQo%_T|L*?E+DkPfi4;{|pMCvF8S9jKoWAD3Jiu7ROR%OY&Pi(Qh zvG*lrc7uY5#G#Q85-Eychbb6j&Q74x%G&sz>QrS-otO_pP$)^2+tZ#@T_mie;4I$_ zQ&feM07fj5HS*+aq4|@#pMN3y43d>dYfDU=;$@S_heXZ9R-xijT@m3`W?rjlb%m>1 zFvk_)-)$)r-qP0Qi4^OjaWh}9SNGc9`fNrvS01fLNZEQZOKX^_wZ6wOmrm{e$C~nX z`rxTIXtoreK8d&Y#W3HqOn-B3epouBV z9aBp?UqjmS1>SQ9;>Wxa*?XU{_8Yz)U5#9T=yAhBU@cst`@g6q;&ok~c~vWgEoKxsWzA2X5+-6YM4!?w56eU)hc>me znvYe(!(Fy@v6SV)N-1{u2;3IK;ETfUtL>2&E@O3Za~Dx}Wf8TM%9?45$nZ2!Nx=UA zhpA<8$Ly*U#48q3Ej*2R+}uS8#8SfD5bd<7c|(f3yO}bxYVA6%Omb}!uM})JyC;X; zW`Uec%w>>Zewuml65ZMg%EVUS=2D1J7RwTFs0eimjuQ#BB~)OFdCGs98lZ>)X)`%< zV+feo$Qn<{h10zp+x_4sMSkK7|DTt?@zN{qeCIp=#h?G_`4`-C7#3ePt%bTLSRARAPa9_$D448O?+ds2ob>q zAi;tmCAdR82oFUH$F>1)xctgLdfuxSi^XsM*WbGMk}q4!(W(mB+B$Ia&0l!H{qOf{ zzxtoP=eghasXEB!yf*y-5{)MZn))x*BucjWUH3*{px&Rr>S7ss{_D1tEz(%W3 z_0VEc(mR-7FxFfvI3*u9_2F^$vC$ZK<33cLdcy*9L z+^vPo(u={3z@gPRGEyd4osS?A5=Ygs`WS1&kliNJqLs?c>TTYoz1?TiyX9FbgPUWW zR^}6qHVh&*1N7J&6sx|6a@Naq5J;_dGP&+q<*Dr;oK9gAvxYGkaP)ZpWi#_a~%dFnb)!q-7r5 z5jUCp+}F{_5=3h8eTFu1fW$34?ZI(UO@d7`o&e;q1ge`u0%q4;=I*LBa8Z#;>!t=F zBGOvBT21?x9rl;RI8oOdc?e9@&}*%p=;MuoxSJAn=8`7am}Q$|HNQ#z`1M zDNG_PK_W5AWHroo(0x-$?J0;ffkf-aWDFQfN{WS~ajq2<@4pkpXqd^}tAFmsFZ}WI zUj*P+e&v@gzT`e%#+G9$(DxlUc+(di@WA{3^iTcdPyW({qT#=9R?lT7;aXX zfFcAg!b$=-F~}u2i$jqJdL=NqF&S}TauzD&g^A%(cqlwDXd$ua{@MTZJOKaO|MtH; z{s~W5{)>fGM{B4K-gM(rp7P{>eEl2#;xC@}lfV4D7yr>u!4%j842xyM-fRPlwP3wg zi%)03#E&!P7U5w=?cnW?VK<||J+#qEB$>yN+4bLR0cRW$z5r0vAY5w=mrwx*K8~s~ z5EpOj%rn6yAazV;6rnys64w_ChuXv-!|r`Y5)4&I@|fvr0;rp5oG9+D>gHye8RXOM zZs)0KyZ7{-z7f_)uu?>{nK~12^Pxik7R$}!Pq~}Z{2@05E#oV>>UhS3&${nfC&tg; z`mr0{^3l)Z{{ugkgS`2}*MH`wBc~q7WWXmr>4|^yH!nJP@ZjxB?Wnch`IJ+h^rR>4 z{;gNN@6$&{-M9SGKJ89~ZX|d_(lr3!?hkz2+h6i$m%Z)1AN%B|&$;Veh*`jH9zFpN zCMua{4;?xlclRQ)sx`Nn8OR-aei3*g?P8-rEY+L?0NvPv$<8+7jKt$2a0C&8ldm|J ze#G#Rx<3L<`kUl>_J#$Ye4s5$bee{HBLhw4Rt|SVXc70Ot%0s)5*js^lCyv`8cdtl z;*R+)Dy$bmooS!pRc#@>qXFr6Rc1Rl08xt z6k&@xefCJ;ZC?vn(}u80#_$5bXzGT-VpcO!by^*0f_F#{H$3|;xlU2xibFf_myfBLmG-(7Vv8Sv$;u02ItdVH7(r-#Z`hR+IkrwpkE%eXjLf4w?ZR zy^xNn=P*@iA`5%EjvWIBkDlmc;7HfTlW$Octl)DDGUw>Mk5o3+(JqE!WCl{G#nmlj&dxye8$_~@h--tC;%>xRMBJ+w%HU!yg{82B8CnF)fBeEX z{?nybUU=b!Kl&s8c57?@SE#fahQ)GY>+mgye)LCv_%*M2&HwX?%U|`+@A#U>+#gm^ zSCE1dZV~%U8BWg*?F~p0nr7NOny(`Q zaVFw$Q?R&3wu!(=LGa4LlG!+n@IDFLQL@($n`)XQIg?I+4EoBlC9?dyQ`Zc(NB;$fZ+_5O z@$>CbpMTlM)%;&=t59_!-V$L^r10&uVHBq8Z{B{{yFT?@k32Vi<&;xS`L=KSwqN_T zUpw){6K}^SJap*LcYpVHpL*(@cl`PdhgPqA&vnZpx9{uh2;B&Y?Fd}}`%XCd+y^}7 zy|4Y7m%i#vKlt2d7Bf*(t`MEa6XcFVjg=$9jCLN0Pc>gubjWY4ZYD+$%U`*I}mw ziLo)r8)3E!ei*Ezly$1i!Y$nhq{Z)sz|TRtO`E*hphN9NM2o+VDUNWSONAeAwQuVBOHJ@wj3}NA(_g zH=&-Uorq6l+DW9erWf;;qCxYM*=GF-Xwm{x&)J}M$kQ4He*GuY1e{XlH1!rU>w50T zeYaGp#kKp4PHVkDoqwsAy0jVB#GC!Ssj9r^aJf%|tC^v4Y7C~|nm!lJ6li;Sz-e~N z?VSWjM~w*F^R`)Aoa{&{Y%gq?n!6^c41b1M4BgF*%-F<-U@2GxapmF;jyC^CH8VA$ z9`+ZPBN0X0ji4Q+JK4cb)r{gco%6*UFslSq6iL(odjj#hnyq(@VF)pwnI-@jY1$!7 z%^XzKMyU%GGcz;yV&rgf<65mOvOP?!N`NbNq}?AOQ$ikn*mNm%tNO>+n%~*Y2Wa0(ZC=__9!U5B@t!e>_U zuV@Ew`th4T{MGkZ7cV7Fo7oUE5gU>$g>EHDJ_h0#{SG{_3bMs5GmEU~x&5wKBW1sb{&)WT4 ze{=aYpZVgE{TsJue=_rwqna0Yam;o27e3+}u6+HAU-kO8{J?XbUKWB-K?!M(vr%u) z-EfS9m7Ft;kBa~{0$c{r%2i2SqlBO>HZB$; zM&^`Zzd;X>cKz!#qoJl?Hzg`D(}`D0-QC$5STB1oGh$Ayk(vKYYB1<)!oP#Ol;6Uf&fPV5Ga1zcqn*OG zeYb5(i&29jVs1-Iyi$c;8A< z$Su_-B{()v9J%eCZ3es&+z*C<5tk;4yp@Pi-qs7Jo;b^rLrcYOFMkGxon zS%@I)>eZawgcdBJn35tw5E)pA3Bt@0bN3qKwT#YIcQpgsYMU8Xe(000c>TN1I_s=& z`lfGMd|B-rd+En`xv_cZ=7UfBrf>Y+-~GK8y!g`J{*~`I`Q#HJ3#@LzAdmo?3`oLB z3);yj4{Zl=MRQehETxcf9Y7(ouxxl{a8V0h;g~5Jj2hD_?!RD^i4ldzks9L3KrSFC zhcwUNOk(1Qg(VAn5UdMGAxhw!jTMxH?y|TWlZZ$mCN9!rS*dS*CzD5S{CuLYTZe=k z^_*pL^Qmdv1>VWOV498uoz1ue>P4?4mc<2+U{^)2I`oFuzu~}v1IN;Mxcf~v-Sp6he${{Y`Tww7>=b`q zdF>bf=88{jE&l}vS9%a(OloethS0t9ITxIMkNaNx{wrSjhRdG#)sO7tp}aj!Szt=U zga}>O#HbZi5FAv<0>nkDs(H-ODRX$;oGdMj z2BBEn6I*|Tad7HqGDn^og#(f)n&Z=Qo@+Dbd7rN}t<0{sk$Uhnwd4wJ zjP8mj`GM%&^|svfInb!E#iF#yD+NqCyVEmaNE?n#I>lo}urjH8K= zI~Wu;nUq11akzWc)x4^yYYi<)%SrH_z1M;OQ-`lkw8s7LxqE=7mtq$z3hSJzX>*Z- zf9s+ufWlC*bByonVHoqB^}I^;nQSjA$S(HkF8OIU<$%v3Ms{|^=v%l5Rh|`lnb(vU zDr%u2Ye63FJ!3GYSS_R`*k{d^z8C0l1_#^038S^%e!kOLzm4|NNYQ%3Mtl9<9v%}~ zcen5O?^e>UtGPmBp>AxZW^86k1oy1_jSb*DE4@Rw+-ERNpY#Onb5qd9TL>u;Ji&&A zp+F1!XfurLQwgpfVWBMKrpc$9wvMf3v;@w?qdg1r2=_Htt8S`V8C6Rur4}94s@b@* z#i)x#S#GM-;_5oc;AUFPU3_C;@mUIMJ&}_m`wnMNHH_ywt}3*U>s*= zd_2uMTz8lSScD^22yCV;s+m)!(i*E4vTB&N%r-@xe6nigWN#Ai~D!E&sOt~VEGiO#CzvDeu0eH$&pR&2R z^_4De7K=qG!)mp9>QkQjy4U^Vdp`Q3C_eoL@jOXEi z)Rp5zySs~ZmSUT%&TSjVrbM#2{5Ad#g*CbM%{LzbKpUIKpLLH0VyAq*OxyG?|0PkF ze((wBcU11Dzj*k+yz;7>4v+sTw;VpI{m@rm@U#cqb;oa=cKpVVe$54o!Y{h~n&Eb7 zt@bVDmGAlVgYI_HMM~;};;~xLGpZtk` zzkmNuo#f$_{?=}>-2Sekk2XVLrRIgH!wg6B3m^65Yu|sxWmmlCNni8mwel4Z z7Xm;HF-@HF4>%FANHKL1Ko=q=uIeylD^?st#%xx^>R2l$Ro98E5?C#|iujCVMB&o% zjy$FGkhg-7Tb>|?sSvR$C3oUT&T1N%9h^Kx3J+D9w%&^v)K@4?-afW@Rs(b%tcrRWrYcm5fz9>lz<1mG9Rx;>onI2 z!Tj}*yIND-aB4RwMJ3JK(%|_$K_iPG2M1*)sCse!srFnr(+H^tnL8UuTDmDnhyvQF zP&Z<+8bE$l2uu?OqHJ@jZScb^7^hJ|?|^Hz_opd*n)=IkPS9;TA70etkWeuBB{v4|D1yPV7i$#(Xa^`)<*maK832NLG88%GWfy zsU_dK|_O)Am z`eQqG9Tb%^o0?0Atg1P40KANtv?a(JK-3h2L>gI-{lQOb9A)aghhx&^I0d+rnYjTG z@-?I&-?%de?#3nD>>5y|d{MY(Po@A+n?2Oq7wKvm(bVp>y6Q^CIxdE|qes=Hmd$Ea zZLyH5b)ieEYKy_l%Rp8Ng-wsc`Pa%I6M)B}anuaHumTRJjB8P8tMKX8A>z z210-uZ&>Up`fbug^Bhtel1vYb{YL~fQ43XOVU1N{q~j*q-LJX!y34M3_nCLS>q8#$ zklSbR{E`dw#m4rL?FT>P!3Pc;c-=cb^zWYWxD%I~ASWRK3?Aa>046b^Fqa~WrLYt( z!cNS@q+Xe&=xTH`ut4Dot3Hl?(-&`k-Yc%yzkmPNe(l#TmdpPM-&83@imX=SBOd^x7uaK$ZJ0Edwud_e#`9r_@viDzo{h@!Ii;g4JzU4t@?QS{xj~{rzQBw4PU?eGq0-s@=LFL-zUF#`?OU%i%^2Pho@Z4nL&o_Y9}AJ_<`?u#?`O= z^LM@PgYS6H2kv+Ah3nU}PPcV979<>y%F%=qiIA(fs2EWpH!@WbC!%q5E&zl|@fy$) zV`dR@oaYmMyaGr18J?Vx*Svk8)OxKyHrdr#4KG|LiaM+_Cn>&m> zHypO^jcSZmpA|l-Fm}n7%AWj4US7(69+Lz@mcBbdqIcA%wmTA!&3Eoxsy5EZV z*yrKYn3HN7Y&nY5+$)jO+8^q3{5|PY)4GJ_0{yinhI|&2GJUBuTbj7rS%nGrm1RXS2zqw7B} z)2-X(0}eA+RkbLH*-Xa@5#humgoZgJ776axB+^9AkUPinD-$-D+kHztKMrsg<{D0h zh{I0hXzuG&-L!UYU11iH)G81rvW9tFf1WF_6vDWNf1~-!HEr5Tre^NGiAKwSS2Z2W zLe0mqE(c&M;MYYpc-JI60wo>fBwQd2BQ63GEoy2aKoufbyR9uPNz|l`9z|fQ@(k-p zzm^FabbsYYNdq}CF&P(th?1VETa>Pqf9dWhgOfA%K5Vs~TaSf5*vTHHVQk*fjR`=WcFaQq4Xb4r|Hv0#zA z+~qD8UU=bK-}=_8KYPO|C!Q(7;D%WQ%RpsV$WWFGS!@i;K}sn!urP^>2)vp}D9a2~ zMySI@h{zAG#t(h+a{$gba;v{YGDO_?Kw5Cfju!6MGY0zw5mp1aSP>7ZS6ZRS-5U zbnk~h;$e?|)T0;6#h#L|U;2mlz2<$_9l!bIxxp>+Qr*>kG+!O@llCv3aM9_Hx##I8 z?_a+EIp6+sKlgL5dBbH7xa3~elP@vL0MA9E6Pd(X!k9=^7|J3Bu#&K|V-**WRVOzKm5{Xs=4{~*=83d2*)&0Rn=-}b z>j$4~vV@(p<6d$lky5>*h-l}iH55aU#jZg%DeNR5VPfIJ$#CtUiJdWl7JFyTeXY9NY0VdE`b$gHKHluFw zkFg#1^3`X5hqnp=yGxc`6QNnTzoS_Rr^c+CX@8U7%BtFT^RB!vF{W#A7HdA`m(SBe zW?yT@kh{12B&{pLCd-Ad?QRSmjXPuQ&YBkLU5&3Vf4Y*H)^f}{#(l5Lbw^0~?1t$y zt)n#_J1&mf7{d9y3)=CgdF; z>AOqBlC5R>ati>LLmmF%rtBDdwhElaTqrD zs)?4i_SK+yS7M^OSeU6*)j`U*@J+Ki$fCL%FKk)ZheaVSEZ`cEM7f_*Rx83R>`sHS zGf|1yM3$fon~k6%fH_!mD8)g<@@inhI=4+&!e_g4HRf%Zt7hChET%CP-qD^0Z=?sm6x|L0Wau@+z!_;}V?XT9~UZ~e^YZyF?`*CCt^!{x9jiv=?_ z78@HI8zfw0U?CJi@N*e5R;Y?F6?U~CHm<5G`PJ9m5M9Tqr=9vgL0;9quffevJMFZS zPCEJ8Yd>|}bzeB^&L=<*!4&G)Fo-9P9n=~RoyI#m4kLj8ZeAd8n6Z&E6P%qKmQuMK zgc0E8Tv!O|Ek`hOJliszh&WR^5`f?=0I{385V?>5(Bk6eU?U7Da5!pkbz0NlEwlqo zpFH_4cz0EcV{`KFUUW<*^63e9TMfblhs>_y+E0HL!1DMzd97fEb2V0O=BKZKoBV>) z4t(EZ?jApX>AODlNB{KEL)-OBY6He5BF-^NPt5%)Od z`ER-U`h(j=zGN_i1IxmA3Xd zJm)#j`OV+_%{N^7wr~IDC!Thf4$*RAAtSfdth8_hB-+}OmC22r1s*!u5ZzQ3F?AV8 zAgWqNV*&=~SlO{yFxY8ZXal;faG0~Xr}&Ymq)EWZQ5!Q>)5an_;sOj%KOI*mFVKlvW;}(5D3JwrtWdCi!hYV_=8Zb=@;3 zTrfJM_UiP~Ibs4Sp`=vZCFlJD@)G+o2pLl;7=s7S96d|yr^&!un)Mdk=6kO>cd4|ZB{8fwD(hEYTN})m8I!YPhjPiLByw68 ze(l6Uwe?(QOSRd7?eXDGYnL=l-t<|+6AH(;k9=xK%+`C4J(4%pk{SKhHyD1@)dubO zth3f-r;}toGkwn$O4&7rF;jA4gI6`FMpWZ<7Rac|9Fc!C6Hxg~E7lT?Th2;cK>6x8 zS`9Jtz{jT2X2h?y`D#P}Q-_+l2!K8LiG=U5~To=C7T0JZ9307-W zRaILIL-@&E)rQ5Y=+e!P*r+_nqO!=6$caltVK7VK0>En6HCzB!49g`*nB0_z;b0Pw zOS;7s=|M{XhmoZWRH(%!!!nXdqXOa@AZ;Zkw`yf5u^A8V4Jb68slP&pa740NTLv?; zS!JJb7l@gdogopi7yh%s2Vx5LURc>l z=rf=BJb=?rKb^nAKJw`(;?VB-si&R_;KqZuEK3R5ZV@KNAiP{~kx~|AYiq$$Fcb^} z3TNJXa)TLQ6f0o1a%3D^FYDLcco4veC!Y9~_L1)xm6`j20|!n%`D6f3|F?hq9Zz}C zfB3<#E!A+OVq+Vs*w5f200S|;)g3f?pkymj1Wbh#74c>YR1x^eSk)!_45mx}dpL?FwuG`x0{>u41dV{5c5n%R3V2>#gm8LF2(r6k zI3BvhY=k|19edY*(?G;_b}zd>*mwW&I9IGO{P3ZVegeS0lkZ~Vb`a2r1uWjot+Sc$ zm!YJ;({amx_jMN@w=sO-merrV>FSrg`%}kS_&N@cO27&GhVxF`+8E@(Mmb??K}0v+ zvij^7j~qNQUU$=xTej;$WI24WPDQ9YZrQFI13&bXi@mOqNt&`}bYiNQ}h7>7P zXfX*p1~XlMpN`Hp(6wYQWRdF=v<5q6=v{CkOg!)~3`1FzQVN#{bRB3>$_|Wp(Bqk= zxRmCeIr`j!2nG{khenus%2Qp#g`eWfKK$FI$GnZP1JVD>-haniT2=Ss_Q9iX}0|k{DY)b}T_qR1{GJK~ReHUS{Y6 zGfcnboW0lj{jv6bp68rcjQ`rZA9i(2sD`L)nu1uD>+rQ zeu}D!qQjvk3cayLFrYWpODTp>jdUti)u^e`lv2O1ohnup_q!t8BLPzgAuvhkaH1$x zu+RzF5;L2VR~`>XfEkGbY@Rk)$O9f>Nh)ah^wl1A<`@VXgp#wXNVZ<9!#avyiITP2 zXB`~Qq>?BFBe-)@O0~6lpg>&s!B+Uj%vFcjGfhcAEEO{ei_bnoaDIzxHc+gsAk4%T zSiIBnoK80|L>4C6#MC5!(QemL(v$hN*J#K0on%%lGVsE38yy93 z&x33K;nP1p^So^U7I?6_>u#V7nG>s;nUE?h z!u?G^#74~78G$M1hcPI#CR|rXL~PkiM*PATH+pawK0$Jpi>WIg6egibz~WXjAfX1; z#IcTg(&NEEXoZv$riXp`HMIq{OHG)aVfh@G$CZZ^pw_h-ZeEXx$*GHfc@0 zYTQX*B*Du8;sEC2t-~ODl)cC7ZuqO`9=ykbv0vQ2>Z_M7zvH2e+w!QSHqlSBI^l`? zFM9I+i;muN!J;|cYOuKX7>&Ch8Ncj~RhQrS$aVLv4b0u}81x>(^w5SW8%&3q@%D^E zclq8m_w|$RFyhh;tU_PCZ25Kfu6x(#Jcyo}fpT=c~fxFQyZJd8BYI*Hu}&li)N`c_=; z+jH`n&QEIyBUE&x&OCAt$dnyifN2InrQcvC&3-W21aOoYher%*?Z%l?gLOcskgcPV z#blNcofxKO#!4x9|HI5i&?;0ZB|uDLsKjknYqKqL&YUC2O6n4GE0lQ=4#EbCDLW4{ zvj>=G2_G>H-~^0Jd&t;P#>i=a7S%3HTSO!qWaA7@fpS89Q{NkN;|tgj_G&KifTa@; z5Pz)olGY?x40uTmer@G`t>_NZy0skAsMJ=tfaV;xf*_Ap?bYCl& zBfDVDASlNS!6UW>Le!S~1lruArbV#WOe*!J9kR{6kPo>-=4PYjR~nT-6&Ru>N=UW- zN^)Lk2q6f&<1G=icBb^`UvnvQ@x^Q9zT~16Iq@MMNn#_-)?j3=ZtyEF^T`zi4+e=a z;~+4W(z^JzPX=R0BTY4tYSRv;l4hT@eg3gqm_;?~n_7$-E7N4Dl9;p?x#~+-Lsh9% zETn3YCFoRT0VyF$3f-zB%*viC+6Ssm$9z;v;wn2B8HC(^otzGt2H-yN@e#<+}8EWy+bR#DO~mkOUD4 z;`wY8g7|6B2_ZsrhysU_Zb9s7V#?-u?r}!!s*j|a0EmdDq$!yyG5_Xz4}XaiV~Vi~ z0YFM=v>S-v=zFItp^{G3MPQ7MpxcEALKjS^1T4@5>w_7Q5g5IKqvyoXyg@pslKTCW z5}C1EU;So!56i*Yswrh7Y2Y9K`ek=6zyI@JyW}7K^T%iY=-N}B_4vPk`->p~95712 zBv56KvYg}LfA6$HJQ6seA}|6GCvc(|lPZH00&@7yC00UCZWK{w*IBtCu`dRVV~Lp4 z0AP{H8yu08k`O?mW)dnkjWLM?V^gTxY?~VxD4JfH$ynXP+D-avI172CTF}(?o<$7H zM0KLnjwJPft6B^$ZSGmVcodA><0PdLt;NY7rlwB6&a2Lb^&0_H-La|~NmJvQZzw`i zkpv1AN#*TFncNb#;+ejs+v2$+cdgoV&eiu_eA}vR0(K1Jy|`dj=LJXX{(>Wx?7Mig zS(ZU4NH}=6xd-ny_tj6_`&W0a{?ad&Uw7}?PT-C_s@|g#zHiO=L+hq?nK!cKdmgas zoTK)df6*-uk9Br@ePE*bqn%qHT>nq!+;G6IbDn+J?nf-!X`jVg3h~_3i`U$}_WTg3w^Kz{!XuAz6?rCPM)FYDN?S#bg@mK7lkV5!;j?s$AVF{dN z;>1D(770YbwN{Xj>jU?|C~JFzpbkb{xK&rO;+f+-3QNYuDgfC9A zLSYF;maMQq>MNL=zmq#0M_6*Fm*Qm%O(~`XhDBJ3`l3EUNC@nZFat4CsEEzo788=N zB!I*X{ax)MNJ*3vk^yYOmXgmO0U?cz_8!cnRS+{HO{ST-lI5W0b4c>sVQS@d4C@Qp z%%tM{lSi+GZC5Yv2219Pb4iHuhYK=;x0(32U7*@{$#7}jq;gm-X0AE^gK~Gu+~twS{;!VTv^fH@J)x_lZPpM+)b5zzCLdH{-+o3|#me9&QFz zgR*9nV6c=_v)i#YC;31saQ5h}L4}l5wV$Gd+49$l(Rnpo zKGb8_dt`N`s;Z_KHAYRzPw72&oBtPo^sG1i;WIw{295K~L(K_DOmuyNEZJU5PsESjfpE10E_g^jsDul3&Vp~TE&);GU8 zSI;ro z@~Y$ZT()pKOsj?Ig#8vBv-g7YZ(RB53vORC-Wv(B!zZ;ctz0*8!ObgQdEA~`z4Nmk zx7#JRt+GeQMKfTe5;NTL;D#ITzj?u|?tZ(>-fPk9y%&uwoZTI%WHP4N-LQT#-u2MN zyH;(w`GNHhteuFe-5|3bJBUNg#;4LA3r1gg+@8O4@iM2`lHG-cZ`jX6D3_^)BkWoktCF>gX73F1AiRf!FLkc&$loNT25+Y9> zB68wEU?wIOs)&eKm{^2;v`Q2}0mXnfo1;7Kky>>EwROW;>A?fp((W0PYQ9^0<}t*5 zZ%@>1n6f#T43USaen1#xDJ4aMnWdCeHRiHFqrVArLo>IvsydtyiO7U3Q6du-(?C^I z7MBE7W2g!^F#>b1r-?|IqYx#cKoWyiK`dHdB1I)qVj?5*l7^Wr)3&G%NGabA<;J*< zm1{xu$QzGrVPax1sF7wicbSUk>RGA9fFdj2rD(Mjbpm4x7$Bgw{Vg3qJ-;6$b~WFK z)x9uHqkYw%N|4J_gVwkN4N>dNd$= zl$Dbucjtp@1eit0<3$00ePdHDT{SalG)ORME* z%@!EYX3g~c6h?NM^5udw0Va7uEFx41XApx~0x?s?Ohn3AtS;g+CKh2~LL><#njR3z zj=K#eubNUyF*?v;=7Hb#nAGU)(mb~uFXDpVbejUog{2c0eu z;9mvRP<-#rybW;EryMC`hR3L(${)%@t_QbPyz>t ziY0Nss$eMroIRhJjA}m@B3CLEJq1yNx}l}HuxaAH2vllP1sY%rcO^)=b1gbh* zjaX-d(+E`^4jo8EBF6O`X1jZjxXtcc{iFci_UwaRaKw@w#web9*ltHG+v)Qc-T9Ln zS5`v2qnBzWa{dh~UwqUaTje_)xA(&Rcbg#Sk>hOaBQBx*1G7*?k%3|i+xH7Vls~AiGbql#nx+N=I6LK~_gSA|%isCUX zo`dd!;q0sp_CgA+$)-8CgfP^2P_wL1i8fD`pUvk8byRbiA8TzLM7e%8R<#Cr0T&Bi z@-5P1$C<@99%lc$h$q12e}DuekdW2o1rZ@HMTnR~PQxNr);!k`2acMtdEG`?3H)>~ zZ(?E-g+hf1>V~#XUrq+nhV$R*J@Rf2@&NdTv#+Mv9?S{UUK*V4THS#GCIt?`0C3TIcqtpDk>^=yZ-?54 zI;Bdr)e8)IYPBBNfF>FKQfL#bG4#xEr`BTYr0tl(+VQBaim5Hv0HBskNqxTnmk*-( z%y*xLVgr@w1csTV+cTTR&+K-E86HeqU|VgW5gFJ$XNpQk;gbQOmQ%oHCSp+|&{Q)~ zuMrgrjRiwuaFy2vSDh5YIJtN910ldhJ$K)jBs@n=B@JG&OqW0=HU@T%G6K+mh5Ogf64Q z2!u+|2?#(ZAao%C6u{Zb95F&V=m9aIqcA`dx+cjyLerVVc~D<}D9d6RW#-Zq>~KSs z*Q!>_QS;NRO&FrAeLLiUC13rIH~#FBoBs6OU;f@tuKnImu6^_CpYw@-e=DjQ)8Nw9 zV}=9|zd}M$8>s}4Mgv7swqQ_5AWQ6BD-pX{Eg5CLA{k`{bK?r-Fo@*#+P54fc&wyZ zQXz&WB1HE~F%hwT@`hdV7*aiYnA@vI+Z05nhjf{4bqGDZM77~Dr1zlh?!y2rD`)=U zk%t`sV9h z842%v{vl7?Z_%TCs@>*|{>=*y-FfcF7cahZcDLHGGrC*xtt&TNe%B)>9JHj8rc?bk|dkS-S7ev$xW3B>mN$tIxas zzPnd#>;#@Scg}%NeD<%-`s`0GyzHpM4?*@=PwrX^&t579&^6-dalSt2fl{6@mzW14boA z(grL@od97i7CvR3Np5+VgD{bQ9yco?5fT#OKpZ$gq+$tRV)1<`u+PUt40$ikXe!9S znzh_;CTFQNb+BSHwd8_sQ>5Gwn7ZQ4G9A;CRS16gBB0TIRZMfBoaQK!0+b@>TFOm`xdv_^?ua)x^|awX1Y`v{bhCCdEg5JXe*jlz9o zgh7NLh^|aG5@B=D%uhVeeuvK+AuaBTUkl9BCOU%)t5WtKpd1c8ax>D-3+vcE@3V2(o_k>_N3iWa2bcU`wuli{rXfC#brOQbLzdn zabyEZ5LIVfDa>Q51VrR|pNtoohch>vthQ)*dSlT>E?QUP^!Zx*wAf-;#~_l|)_u(2 z(>P2Uu(pTQusw1U)<;x~@$(?kW8s*Yv)yV=c2BA`^jXBFncH8Z7d6n9rvg^2E{bne z%iNa$e@d^9K<${-wy5HAqEmB8UBHPQXgp?UIocmEr96|-m^I*KKKPU;9(39F|Mn|q z{^HO7?!Q0z*&kkc-SW4+{S~L2^31YBjR2i;y{Ewrr1;GQcJeh04C*A;88U(b%%W=9 z8bU-ovd9l`y$d+EirxI5ogtVruTTOsN!6<;&+{>O%8ZK}v&o}xjO5*il{TgzW7g(( z*i052+jyvHcy?94G6r_})ao>}y{8?p-_m1`IQa6bZ@T?QUs|%yVT%qvL9!5@O{S+0Gqn099T?!qx3M_ehc`Q`sgN3Y(b@+WRIqb+~^B=2X`VA-V+Y$c4#dmgh zm}+JAgKO{KYS#haX$SA}-#WQanHE=hi6=H@#TMb>M4sB&MjR%pvq3Tb?X->lQ?I; zaBjd>a6bl=jB8?d7VkkJfCbT*9F(J_CRzODr#l(xwmXFvMnhN1JMnt0~ks}g{b>iD=*yu3&IQ?z>uAzqUL={etUI5 zO4g$=FwD$q=rzVf+I~0Ij^;3@M1eqTrXYnUzo?Zk`pgq6Z>=4BG0>*Bkdx*hZdTeo zokcv5wDBlb#2KQ}r}Z9TI%HCuRrC2og%eS?8&u5stfpm|6G^GnWejvsHENR;N7;vt zxKv8Tl&nsl%&L-lG*ZsBrg)p-;N-9X)c3z zbNzVEL}9Kk$w38E@v+VggkNg0^+o@*PQAfLdjKg_a-w^P2 zwB500bL_O#!1w-gQhN5Ry?Z&&;ThpfY;~X&hf0C)P_fl8aZck&TUYU;q0jKkMW}-u=OEpZ%lj zU;5Jbz3Npz|IBCJIeT`7)`8Ki`p*}HmVK-cFN+lk*v~K{BUpBtlE#>s^2Xu+RQ1V3 zY2|ZPMV)r!wW@OkiH(T;e!i?|0ztuSfIta_$CM30glMy6`EbjzHK1dL>Gal~atH_Z ze!gx%{`13c|A&u$>8x`vy!Vc4RzH02o`;`2w$siaGL4j?rM^Y~)3eyOPMu3Go zEvLV#IU(I2h1d~npA|3@5*Y`82vL()FqE9UY7kNb8xt3|Rf>LXM}i77iKdvGzGZ5z zA5k-AXflSSOiy;d>*9_`R0~Bi+)^_aYyjLq)_tMvI8@(-YU@=rS527LgMbA>DpdI(L#Xk=%N(H`yq=Tq7^YSaTibPgp7k4uks{Yr zaX`zTOdq296O4O^)c*f(X$ zRxrW@O$edz3bH)LYM)=vwt|2d?E2%OQmrnt8uq`WAM+uOX4(nv~^!d9GqD3c0};X?s3cuXYwh&UTG zvI#gQZ4-ZJW`)P#Pf8`dIi2FnKPGHNvN4l=HMJoWnr0Dg!>4IzJyV`FSgWQbDhwbZ zb`UKy+A~)r>*HzAVav=4^|$6QWtmqyP=;zQC;>{=Sb+`k)eK6y8T@Aur=VK8Rfw$F zvku9I4%Oz8hw6SgmV^~CgTv`A!(X42+RqbKEwXl!!dcBO?Rla;$v_wxve5HrR=#GOyc@`Uc=rXJ7iMvoD?gBu5;!&%F6_ zTpYgFUQ71eb2q^D-g}Qd_uLtljyP=p`EzEW>SAgNOppMn(3?bz2!c+i$9HB1)jBW2 zn-CNp@wR`cq0eP#f_j^_t>w@$xoXA413Oo97KPEd+!-a7T;dz;xyPcfeB$(T&cEi} zANckeXZ-Z)tMB;u$N%CP&v;7dH^$(898DRW$`s#<3>8QOB_x0oR0_=BHbm5VxtC{o%PkIQOo*?wXjG$a$d5n%pWx z4me={m%j9+&v@oDhI)@bdD{Nh-@9(b>PVa1Il(mtcIBPJvfHRKe24N1j=g_r=I;VdWZBxP*1@p5C4&M>WK&gRn75-u zL_+NM4$K6iKphccv_c;8f7r_tq|l~S4Ik8u(Pc+yg$6Sq<4BQamiuB*W zrBGC}fuwU+R=9el4LXqf#}5e7{b7k}p-1M$Xq|FRP2tf(GmwewnM9Hy8Ed4i)`UZp zTnE<$FoP6+x|v#`vlaU*YO%HkgF7&dt<X$-WYDH|T(vZPEWV)mzv?$&! zk%QZ-FxTS?B4Wx8s}u)VG!ewhbMF`lSZZ zbE=tcOawO70^Xu-73;S+pztp^bVlxyB{gMF&d8Q{vF>+uvL>I>=*U=Pl0>YWRLqh= z6&y8%2oAv%iBy7UvTP^Iq^9gKp^ge7N~$2jY-~Y<10x8; zt?d{>Ih3H`n#Qc_uv9CkGAL2z_f%+0h3jPmVB2AV+F)WpO4jN(wpLtTeche)-!HuI zsu}OI=dxY*+H=>vmhQagZu9qEvS`m;=brfZy+Z|bq+u$%(R2NwTD=e&Plc^F9&I8* z8|WDNT=lxR`u;T!-*&^Cg>$>}cdzCw3ZwJ5GeRt7bVx6F#^J{wx%c}&dd~m(=H<_P z=3C$V=9hos6YnZ*MhEDk*)?T2Pf!XgN&uDywNyhW5)t!I-d3P$CgBUEQqLRH4aY-%?*v-%{T+aVN3Q7ekd3 zdLCWlG1b?@m+kcGC+)R``&@9r1)u)U&)jjx9i2|6sw&U48N90OmRoN9n|HtGM?X66 zO>cVRK?fgH|8}$^fAaMG-}d!i@7P=HR{XPD9zOMiy%uauU46*z^A6i%-j&NA*{-yW z|KVFNYD{|2?(<%D?9!(lyvtTIM%In@&%Wy3Z(n)Os*O`~x|Il-SyD=B$@jCeBki)^ z5et_cuzJNUKfmnC6OTJexo}6+K+d_y$vH4nHU_JT`-ZpQ@43cEHK|MzV(L!>xWDsf7C0Y#Xb= zqk7T`0mPdtG(BO#ob#P{@Dmse42|wk1GPw+V5t~;`1C2WvrAwGh~e}H7?`Q5goHvM zPEyor#4Oq_`ZWyV#r0f=troYaQeY=Uq_P_pkKxQLD3iBh>}J-FTKu^R?qS9)pvcUe z_pj8r-M0BxocZcaj)y7&n=kGqEe(uDJ>sDbB-}PhWo>N@+@#K$#|?_NL&(Y$7YVs( zf)W@~GB!=k^#$Z4z$X4|KogTCn{B@=8c0RidT`+2K!0mM2L`MA8OW;xot_S7dxSy% ztz4`#k+^n4d{rVLmQ1hW0$e!LB4d6IpQ4TN5oxL5t&Rk&&3>&MARBN}wm~`?5veuZ znIiK!Q4bzl!`Z6Q_fH=B8$CLIC%oKDUcdeYNTb72_cNC zvT9I`lamvGbvj+mLW?Ya>&M6}VoJoUAYmw2e65G4!;=`0$OA~6-D$~G31+H^O_a!@ zWw(Q5FrSkl2&)hoNTk$=W~wQ{jd2-j9G zsR|y%L=Zt0AOb<|H_Da+RHbWTI0sk`r7KWFvi{Dtf1ESS@szoeSGD2&eI zs*6l!q(uv6fBgNgc;eCfy#5{E_~a+QdB+|1eC9Ln*<+6-KmsDrEfOys9A}hKOjX)= zPv`MjnX2mzk=*-52ZjpSpxmfsUyl;3p^QA#2h?I-7qUHvkz}*y9PLvt+nk9Ib@$WI zuIuxm-K8{PQ7&*V!>PUO)`ZuhdwF1!Bv>;L&*K77y`- z%W`gO5WT_+%IX0>9m|llWUM(73o{^TjGTN_(qf3aTYUyK6e*W>FpcVXN3Mnh&Lg#y zL-yLKWj09DHn!GO&)pd*!~LpoW(k9g+-23+lSK)MjB1(_=W98$y_txNhy?KXx?G@0 zkPt%Xh*UyBI0WuU2p~|X2n-eo6PR6?08yw5pzBpy*>X3M$vaw4!_`uTm;i%s+vqSnCFpk4#C8pu}K?MvyS6dGMF-&R!3C0T?PKDf8+P z1|Uw3ArbGUv}oS71{8eJFRU+1`95k1nic47oEp_k8HTq8of^|R%n<|MVrS(T6`sH zE{AEF$xu9vsj)Z9@m3Ik0xrwir#&O_cZXA zd{)@-w9>1OCjWzKPDE>xI%r&6M=fv*G_irzBF|(7PQyYoRJSck#Gn))DLTR}DfRjU zN<>qg;0G!M2|()irT}z0l`3mYTm`=Z{Aw~&kXTX*1S6mM_{tt*xt0bUzkCIh+>@~- zO==8_0I9`<)Qb`Vhadt{GA=_WqB_3FtvS@R2B&<6RZ(!5TUaV#$vmsdQ%XbNARHo$z9+c4f>8f~nmMn9(U0C!Aj&;~#} z!zS-(z~n@Hw6p4_U5jh+-c#4xeMoY7c8mfERvBq96DwGK(BbwF((|g_aD9U ztLL73=@Xvt2cP)F+fO;=d4K{D=m4QyC*0y$QNE~Bkzl%WB&*ZOVFYJYWp{mRGED|t z{0I6$CaLF4EL?^s!KYYx*k#C!hn-@f?WA7Ap|ZC9?l@0Q&TI)10!_k$TMW}lh?-BAwOBBD%y z-=V8wqL+@{d%{@cHOtkdbpwqlk)cSpM>crH?Dl~k$Y?v8F=FUi}zSK>;5(4oyXc{>QUatdvV@q=jBgW z_R8ay%^9h-dgpVmeempG-+R}?8#}_aB*qH&S`AT6vbSL-ha|<4BToMHcRqX3rC0vp zD}QJ4qB*&R7zzh&5##ffYlGI5rtOJq{TDHF%lJHa%S;v{WbcutC@B+qcBYK`bF`w+ zT$h(eMa>G>BJ0B~a#m5V=D_XU`#&&llLk~9g# zc~$ObVo(?>B4-OXpI~!;s!t`TjFb(g$wA|WK7WP8U}dkWR|MAn!d z8IdOE6B)9MNa0gijp3=1FxAoL+Rhv-1Mb2WAa!2^%WukwUrC949-UlP0;Bq@ zvBAz@h+{Qf<??jo7D-6UvUvRAL~h4bZm!*)Hb>k`y^x=BApA zRjP0_F+((nF_mF&If^;(yO@V4!To|$jx$6r7w)J6O-xReE{I0DojwtzNPQp_TWe-w z(xjePls{lh#++1*O_N%3M=MGhk&Q4W^{`}ar1k1!fZVrh#x6*s1vLw*A(=9Y%a>|m zVlz#em>HJsD?quT1Zmw}iZC<7OqeR+D!813gY&7XkgHE7hyYbtQK-a0#4^(`ARFXge5$qh57dG;OGvrT0%=Yo7b`=ax7vFo@GTFl|MlH#j@fI$mhU-xBs~4#UH$H;vi}e@7CxpRGpLLAoJW8r&aJE(s2gsdb}?l-iZ!!Lbx*wP zcc05mlp(tnew7Omz~XWwVPQ|4A`vhXQQ*KrlJDUT^&&__lEulb9QRhE0jHK*p;(Fp zq+ZIzD`=|wHEY%w7B{_}X@NkKhpi|w4a-*lYDInnVfI&XCR(A&6`;Vp10f|VLtt|A z`qJfjXT`O-tpgi*-Bh=X(O4R}9FpLtPW^4WL4KT458*HsCZ)z^k^v?PAxnTMA8clk z!fXMFe+QoXozP;)4d>1`)?Wfs)&${z%oQ}VXmzs$bIx{$0i=|h83KvGOxcZYTWhB& zk`-@B%k8~c6FOeM4QH5HU8b5bl{64*>eGUnTjp|T={U1jXWe00O;M~b5vZw&nmI8` zlLk++!Edbir zMg5Mc<(zAjI{?q!@pQO6QeYAmVt68tH{q>kE)_~4#A)V3W`&5>?|m>Nppl~%bEBak zl5$d7eaN=S*lVb_EJH(Tg{%%teW(o(`5IRYw_ANT6bXSaLq7 zrj$>N1m(z)I0U1>EV&~v)jSd6jMfnm8<9DF6@(ZRghF6psseWc2SErVB7sGi5dwms z3Sg%vQVZp%+8y&?vy# z=Rj=&-OTIr`!4j#g4zEn3u)_ zIsOXF$Z@iI# zcPXPPGY#a*ZhL3a`o&R)9eCuS2Ym3~zk2o$FWRtj#Vu=A?z;CO3-&%LRM6P-nW6iq zkpyNo7I+h~{cwk>%^&MLX*0gGQ&Ur)`qY1>l)ByS_V)9mqoWTz@W2=U&llePo_Du- zRu|l~at97D5l!{exz{|f)vg1;(+}C@?5pk_??w6T5S90$9<=-1e>~;zt*T9~SpLY@ zf4SoFJ0D@f+|5{i)uogwB6;nHy6Z@ac}ow(6+gc2rrS?E?(jkAdze?JNT#ViW3{l` z>+}a$LXO%}AQ?OW#0*MV!;nw?#^V!8MbO>EZVV*(!hqOzM{NP@nN`%9qB~83D5EDR z6q3Q&4`~g~w|C)s&dxqUr;vyIB%auj2c^P+L;{2;2niI4s3Ktl4B7Xe5S(c_M3ncn ziD?E%l(K7Y+WhE&Oe5+9z(R2=GWwdnO~vq}Rg_VaeNFC%=)y8$h_P`|xtXIsWaQR9 z24jYZ&n|*ws*~$AIl~{I2o2n*LPP@kQ7xIzQM0cgEa#q^ftXo|VJR~q%((A4O90@c zYZ7ASAY_CPIue3gI|`G6gH)j4G`8$1Y{TRBEWZwAY!ZtjJlD+_RJDWP{?TfRBp?c? z%&hOTUn*{h5Njncw*7SS50Y97Vliu?VGM|=f#x-u0+iG;56pL~JT2E$=gj0OT5-2E z;-;jK{C#_#I&!`Xf&JW2Be6ur2~BtaG`Wb^MKngWyuZO8TdN086CJjA!>9J=joV zy6xtW0M3#&%R>W2RHBqPQs}cxk%(y0*qiK?^+;fmiJ4O}(?rb7!I~fxADKAiHmR9< zwv%OaChKv`4C<=(n0iSQSj9%2uQ?%b90`h6SehtW)YH@S#sTu zFo%jHa0nEHs){NW34~5Sw*v+$DavE-IzkIQZ3}Jtz$AJT=uM(GdB=)}ruPMpc@bgT zRDIG+{~F4#G#VHPlsO00{m8H>+G8T&*m4QGWpRAzJ!0(Z)MOgp7&mR`&0p7>zj$?b z;nL3B#nPRfK@ZULpZ2)x&VAeOy#6!a``#t1SO3+QzVwg#?YDR9>uXzr4|V4;f8%1= zYKO8nJG5*^Nt+9@nJd&HF)Er0u31uAo6kErz|_Esq|{WJ?r%}XFeO}>sjZ9L!U?e1 z65h1HIL-c~DH&8XyTF<1j7+V;vd=bW*K4M4`=eLB@eh9I1E2Wvg_m7@&n;IyeE;&L z2Od3l*Zqw9+MlFQS*SErB*7$*3RqiKqT4)!k9xv>J8iDOJ@35puDkZS&1pHdg=+QF z3odxYt6s6+e*5`Pj#xH-&PWy2cAy;??Z_|hTz&WIP0JR}+VVY@EgU;^$-GN$dw8_- zTcIiMC4KrKyKK4Txb~j4U;pLZm))@{s*P4#%Qnd-BHn3aCb*hKwWv0-cuyk!(FK>D ze(DQ}^DNcL>Dg*E$MUN0zDd2-O|I!9MbfC6%-qSKmw|FkW=Yj78KRjgqNb>p)SuUb zv{PM-YFnSh?LlFae=x}D&W5ssfO9*m8@0|VbJuHt)tF3+J!}R(iib_k3d;HhPb;PD z`A!+Bmk_|N9cPe1#N6@(M1dPDb|wtjGDFE2(sXWly)uA=De6EzP+?TH?0?mW#E{$< ziv^?_Q&R=AFe#EZFv3U*7I-|L5{QLetHUhTi|$R+dLb_;i>F^b4E9q^#8ZGoAp~#` z^^`7xuqc>8QiYU|G&Ta{5|EZkxt{W*-aCs;C!+-Oqrqxs*?GT}ZVU70NlfCV2|gmLs%{g9oRk3wCoQdVt3@P0)i`ji zwN*8DZOa|4p%Sxf;sXjqnth^+{ssUkd5T{{Blhn_#Od5LptB%SGb3<5&$IMg-3*vP z3T95(ca&I@QV~isA-3ICTa7+7N(O7$Mm6(@AdmB z?4cd8RRBeYG{i4nVGiP1b_H3ZVkMDV@*E7rLQb+)%7`4-(g9zC2&~j@dTcX;pX^gc z)_CEf@ukY6mYNbvHUo&+REG`zNLl^Xn%)j|6)hwxv&P73qfV;nj6?$yakH3GpSagc z%wS=bo~J9SSyF?g4rvdl&=DjOaT1k?pCfFg$w(=ASfDw&#+s5cY0{)AC68;;6g63L z`&>3l);CKE%2dwmflW%{L|gW_p$zjWn1ukM!~|w$Rw1~MM+(C#h=sr*K$t_t=u`*+ zm9Gy{=$Q_2NK1?C2e$`AU;>jHZol!)FMjcdKe_1IUtPO=bM^E<`|%sA-A$9mDHkip9LGVX?1MlW}}w+_a&;aO33c z#cR9scMr4XbLjfOaoLjj7ytKL-}LTpe&;9GAAb1DFS_V+#~gF$;NlWm4L-F9o?6^m zC<{DDo2Yr`S*bQyFAFpgvtt)qnyw6Bq3Vp_#9O@oQ2(%b)OY*nRgdXc=AJ`ivq#_m zSEpTe<@H}V^StYBzU#It&!4^Mre%koIBU`F8haFbJMW&CYLjBzKXoyN+aYmmSodw_tMZ zsz=tWUASPLJ5j5bhS|d)<@HSqJK3Y#G8 z56qln!31Gq27@HK_On~NvcQa3%+wQ!v^ZHcA2Kt@2RQIPmoBvyPop*ZFqMQDBI@43 z$@3l@;kC?&$|$d@88Nxvk(yZ%wG&u4dny@&6){011G^a^4oyaqD`Z%}EUp_RVU*#p zJ8(*nlv@SP<9LCAIdnKOG)C>0uw~Vx{tcz%*}}rn182sJQS%C&&1RY6MZ<6tOS zMmelTa;OY(n)o}a%XjjAEQ{&Y;EHWz?@cqO9)VK+93)bcmIy?wE@H}4aaAh$0mBZm zLYdK)seJhyvq4&`+mN`OR4Su10kaJ_>{>DW<=VQjH7~CRV}_g)NdTLre7z_JZgh&eK8xbX7qKFrB;@%F zDUl&2jXj#ANSO3Vc?Dyl35vbg3qeOlEQp9H2MR`_086U9do1~EDHCSRG$l=jkgOz_ z!k`K$k|m3<#OA6DRTF}$FJ1{6loBE2Bj-{PDg@T-3s!VD8OS1H5egzA6ha7rE8>b7 z-42AaoC92Xj9Nr4Mb2SG70?Ib?YG?izQ6t4ncw}z#AFY^9=p%K_x?5Xf3Hlp{$zjs zDp2dvA!-6tIa~c9Cu35Hi!QBpZ6aNFvO5%Pyn{-Q&2z3Uzh~m|d+vJ4VRN5y;6m>` zvX;JYDOta-Q@HYalx_2{=w%y z_t&SL_Ts^{#|oCkgQ#6>_V9y`IqblXe)gN+`^jY+ zAHMgtOTTmQ(@q`jj97~9sB0;jBr>V9gSH(K>jv6uGtj{U4?J-D?YD0)w`%Ct?RGD_ z?9w;B@sFyi^3`|0UFKYK_u6i?L(dlYCpWEp*|AHvs>a^bi~L)Y*`cu28++4#zG1Te z)k{}=_t*Dsn2ci`q3vq$vZmZEOmiqfU(Hk{bm#20*W}t&EAD<^;oLdN-TkwzTJnIo z;&z+d_ckThM`&?tjYvsV8A(&$EJDp<^r@I8<)m&~lw4b^jZZ@HkZiEMR7Nf(mB7@H zTH{OC2`9_ceqTv*IvQ*S5I2)YvRt7ysA*h;-4c%nBDQ>K&ZB)|5y^h^ZhDi&)eKlp zm?|O9zO2_EDi>}>>-+Umf>CJtFo8fVSxPKoF_N&rtzTeum??~fQDg={LS%(nZag^m z4hE0utye$Sa%f5!Iq^|Lj)-d9?8^KD2$j4P(vW00FlaqAc!i!Dxo8x zBOIV9CA9#Ukw8N5udnKKHBoPJYTklH6O$9GRzH-q@1bGki=|{hG)rdcdE|A`LtQwW^z0R?R1Cxfh{!-7~%!B zN&wsZe9mTmDu2VFMMI)&ua=9jvKR=%v+hNNS;)ac5Gbqrgxvbt?TwMxTBb7GXz9xu zVs&BP3UVaaW`~{l8*v{d6+ze@u=nPLE3z}uWaM98okp*^t3b)XF*Bq+xqBP2dw zaa)WWKa!uqe1Kw6wV#NhPE7P$hkG(0sDz{wNn@uw(g{_SK}JXbIFGhGWx&*oT}d9n z2B^l&STO~GRa3vOE>=sqnN}h4n4@xRJ&h14C6Nl+wh-l_C?|q**^UMn-CZ+)V{X1Xsyk{Kw;ZJ`5 z8)yI0{%;H{{UnPM>nB$&Z_c0^{UXoWVj>2MqxJCrHl#us_*Hf$B-`Eq?BBrc_(PUn zbNhp5UAO+M>(-yR*T^#uUA)Kqk=%PE>rJK4qhi8wJH7fswTd-2BZPP@tIT#^dF z*l6|VuRCe(tj^m%_@mQL|0h6CJM9IHgv0#+a(7YxL|THjvUj_kCR^5~WzIyt{))al z!y&~Gvvs+1k(U?d7TRQv>4X%<(1fz_jcHlsH1iY;0PXd*HEmMl)s+s%_zW|wnn?0G zIc;ko31<+MU`B6!-An)I_g?V9fB)JgSKj!@y|*lxzcW-#qdV$Clc^G`m3@0#dJltD zBAW}rxaOK`)~#DNIy(AjPPVG5?!D)}JMOsSpo4OJ$6gC(?QlQP5x!^jrc3Ww{j5WG z-NN10j`!|-Xk#V6EnP=P_!qaYdd-ve4ufxLqL;pX#XV7NR(D4LB{gStdW;yN$IGjl zX=nCg0IOE7jY-RV3Z5I6xwUGR5fD!}PRLfI21_YL(?oEdRkWmT7MGH$d#M%AI?5A$ zttV3r%ha-4X(?#xs0e?2<6mXdsH@bzYN(W7GZrb-Xi$d;Te(=Rr3&m6Dz4Z=rLx4s z)r&+@su?08@pyX=_F&GE-IR&<7@~ox5L+vCsvI8$EK~boS@tSY)&^#RsA_AiaV>W! zi-QIcHPe(NkE}ru5P~I->nIr~Y?`FJG*x8EDFLWpan;(54?Mi_{?+T(uAflFtg+65 zxg$##@3iOci$_PhFbGMf>ZzI2pO_(#CT;C%M$E>RB0T;>Ezi2^QD6~l)Vc$ArXnq_ZSuW9nD^PN%B4G9z#bBEm32N=6#3T~)=TW*`SVxW@Af z3<$A&ol;CSy2>8Z#-6!`+*9Q8$%xpb{&EGxmOZ@*OqPRwm_;ZA?o<@mIxHQj0tpFIFJO5lRNfimfv;9l~?}i=9_L9A0Mwm*mJMF zk2?CeLk@jh2-`h0{{811^@)R*{`1!^y7Yz>KVQD?=gaRoaj%gVK7N-)b2@ph7Ik9W zV$}YWPEDjm6LF`hO(P5TaJH3SOsBo<*nO8Rc*!51ar)^W1njiaey0>7Qi^sS#y6T3 ztp+tqlogjDWsVo-c5`0>Wz7aA1yqwUj1|h6;-D>E2XbBqGi&WBk_F|IFC-`4+O#a6 z4C#}T9da3C>J7QF0uV@UFjz}Rp|t?CPDRN7Oj#E1N>Q&goS5$S;{g za>9O#etOf&9kAP~InsW5=JQIEX@Y8JbQXYh8#cz?l$T*SnKG$wr74+abzlOJl2d!5 zSwb>sOeqB}mG0Jm$ z6ft-{?aR2a<*Q#3d)>vRAn?>KW~g?>(_+-0vDLg>mnEEqMMR{S zq#nGGq>TF%1I%?W2nsE0h=*C_8HyTA83=^F!j#mAm<@@QG-qV_P+W*23zuVHqHI2O z7iq5#QI(0zh=nYf5h=`=Od-Mm#K?dEB0=50`yYDbN0;7w{;zJ`!dZ0k(fc2H$R1BR zeBXtOcCEUd*iZdlnwXjh)hK{@bLXYLuG_E<%u~ID1O{SE;4nHi+MAph8yne47fkkJ zCDr)aO%@|kBvp$pF86?BGbIIXxb2?h_dRsyy$@~v?OX%ksKfR<>ahJDchKIR%Ls;; zs>j}O0YNAcNxfV6)==9i=U902Du^_*vl_QZVF3u1)FAAJ2v++8yNMK0vkf)A@R_ye zR=VEU zh2vIA)ZB;wEs0+@$1-aN;-DFLjp*4pB1In)cD zcVLBKm7NLv@MWGAkO#t)732~aS(n5OYpn=rl3Ed+!7ZVfGInWZ#AL}@r%nww430jW zVK@^frA=<3fyrw#*Dvs1-JH}OJ1(itjMSp7Zg7#NXR1?7GRDEoS=UmJQiQWyBx|Tu zQ{Tr-y)>#i(uq-f{a$xe!R`}ETnuW6g|u0KEGd|*m7JP;67@4knK^pEsjH$Idp}yf`@X;A>t0XL4<{>AX0TudCMVSY4NE-IU7TZqnkee`LBHB zBcHzMraJ+=|1V$o+E<>uXwh6ML3KOUb*x$Q$dy<8>Y86)@zBF7O?A%Pd50W&*b|=c z#HGvj-0o3ge==@*WbpJUq$w&)x{TXrC-y$@|e?3d(+dO_1x`x!hY0U7ta0opS{owANl%4=Uj5r&zG!r!bv}kgCbkWkz+{N4(_2Y2z6ZSsq-(T^PKl#S#r+)~*X{WsaP#^#! zt=>a0I3F0~ToEXMqmP5o1f=9Wq@=ZwV!*(CV8c(?%Bod+o;36)GIcA<%}T{)sL)Hx zF>T~r4?*&b^RWiBs2(RAcf>)59k|zZw=7?C{~e3=d3>%iz46dQn&4H_HeWmaWRrcJ zGcxlheyor~ZmAj`<d9S#qF!Ubje-6RoUbO^kTaBwpBx22Y{y? zvdaZGKeVGvP#=KiAze;%F*Qxyd5Zx&w0cd{Xqvq{71=nQ$Oq`|p_@$IS;W+$DJUk@ z2-5@=HC4o@NXn@sdz5;bOVW|Rk~bDG$yFLDOw3#B>|txgbEQr#%wkLocAh}Mhei~xL7z3c1s|O8c zQ1V>g?AOZoJ+$^4KfL0SYwq-`Z_hoK9dzJ<2OO~9uDkA1Rn^+H>y|HHar4c$+;sEJ z7hZYWg;(Bo-oCdy?@e0Hnbp@+jm?sj=2ew+Mhau9$1I(ZE`&6u zs;Wju*N<;pzhT3sxnrYU!ua^6DV;JlBvVr}jZtq~@!-`ruUNTy9e^cEc0cx*qfa>g zxTVYXSTKKn)#*%4POe(D`nKEexb)IrUVg=uS6z4eRoC5q;J$l2{~1qMy8Ge`0%>ZW z0^~fcLjEqMquIjP#U@gsV4280p*@@dMkHn_`2z~21@*U@%Uf+uEp3~`WU7Cu30#Q- zH_LVFA273%mNR*sGUcCqSY^mlWK+**&lho?gnQ1lcRslW&3g;M{Q(N)n7q;@t0$sN z&>Tum!#xMJr5tsUM@^WB*+52KX`r{bz0$z;KA^Ul4x-Go%WjK{eapkj&Aga}q-I*y z7zYzcKAI$wooa;1vR|9H0iJPG0Sl>uV?NqGhornD6&T8zXf-PNDwr|K#EN#jH4O3L z%Al~Np>nlOU91030I@;6u`Jc53&zci$g~)*p;uR+u)+Z~xR@jQ;*qcOEN z#fcKAPl#ZLw^JuUL1Yw?2B|_YhNc|E%=tnZB%c^y5Os$zBvUo*TV_1ALk!rU(g^s` zsOySF1$i6*lZYqKlLW2;2a!;5sH!SR2;8kg6$B#zfx!%xk|O6VM=0)9S;%qky?4Lq zO>h6+_kIH4b+0`Bk6-)rgAd%Jh-e&D;q7fY#>Y2(?JHmS+E@PTzWeSS`qi8{bD#6P z7rp6^|7^(~OSf$XoHIi;_GTdPxBu3N%WL@tXFP-puEz`xEPpFjW0 z=l%Mu>(*a*%f^=+wcttn&G+gs_H|tQ4tn&a(&FBV*>S2fZx`vz@{{DGWA{4ilP`P8 zo4-{Wj~BMOgV+*yq(R;TwSMS^CLUW(umPymtqyc%iCeydQr1D_Ymf&94by$Y>r1{^ z%Q-JnhnOpvxxLux09v!5WxL(ZW1^}uvzGk~Myf3E+u^4kspO2yR?O~(7aXyqopio_vj6>S z?*GEi@9HQ0ZHox30{`mH)tjEY_YeYe#Il{1%pZMd{p1#c;kQDPbGDKzSXI3d9i6`m zfRzug=}q;sdn&YqbJU`84{!Fcj%3L)W*(DiG*dPcwWO9(awi=h>64=pW@JjpN#`=g;Fp{vx9iu#d>LuYJ+h`C~zA@zxp zS=z96T_=Q!MrV(7J2ZQQW#@VGQjBZYKhlqVP3e&}kE~v|sn?@#U3|@rcRm2%h$9aF zlRtjb3t#wxg$oxk3$>>4W~Lf7#k=mh^S{qL`@jC{i?`fy*DZJ4d&={l_@rYGq5QqH z`cls#%isOLYF$%Xt-WO%iWM&m$=vMLx6zgvW$$^I5}k; z(M3>1Y)^YX0j${RJFVtMlEZ-)>&$UzFt~17z2JtwGSTUlcfG= zg^HDraprq45jntJ_l1R2&6$i>_+@CwXoYJ>gEf*{eZ*cGHw%F!Foh^nk*O~drXarL zCy1C3DG>vSNJO*Z$^a4eOEkH%%Ggw6Np+?K3ho!^RMx)BEjuRWU{X>2KoNvGL9dA|L%H;eD|Mlq@-Rc4?J6U)JG6RU$HP-rV}1 zk8JA2WFyt1ctR#s`}763pL5N9PdRXx-F6x^*qtjkUV7)MdmowT2L5epIRJE+?_Ry> zy8G50zt6(<&*zPHj@fI$*;n1W16@bs?C6tK&FS?}wTVptLJ*Bf)$^GmaaMhJjDV&D zGP9KR9_BrWL6fN=JK;i$B`(Djok+w+$xO@ROmp6HM*XZ#*D12zY)4wV+|JNa3@@fO z+*h?%Ua}HqM#F@K#^*jKd{E8^tOE=@f;$%>PC#%U9QRxF5E4r^XpY?;Z2CIWOx%k~zjXeR%(&>21W(8uq8;6bnZ!`FWMth4{_@BZPJ*WCJs zzxnv5|Nb3&?6G)!Vm$Tw6Bhjy`~7HY1Vx;zy40WSO-*iCuyAp|VlrjbZXhB~9Cn&D zD``KaNZRXg__weB^u{|Mm^*jwd;aEKZ+z1m$HwN&I2|K^r9y@M4>;s)Z`OfYOKSD&6VIOp4T5Zv|EHaHa>YCNp&I;glc zF;NpoQN!uAg%ip!kx1RpDW~s&h@BRllD}1^pavo(CL^C?~-7Em`!YomoOvb<|0S#R8fE<5Dp-yEr;K}@}t51w`8hrV{vFK)Q|Z@+)f?;SP&$p)EHD{?CA%cG}CDYNIKtr}H|w#k1nf zqM{~_r)^EW)pLP}ZLptU%5XNfgis0vaSoqqe+k@LG7=0>9+I9vhOP$MfYR-a#`2Y5 zfEA&M6-klh(EyK)jy&thN1b=^RS(~B_3WLOnX0K;il!OvAeN%M+sY)0iNQ&rUtTBx-;uCZCO4m|Ln=EPn-{^$`DA8g(C$ix>fzOy(Zp<@sovCv$;sZ>=*Xst@u~jQNF^g9GBQ#nixo+4avU*fimBH#sHskjPfSdXk8j$T zdQ(yDKfd#;Yj1yG$&w{sKjX_MobY7X1_>fdH8NW5wxs&d2mk5lqmTO2xBkTy*WS)d zuYA#oW~h&T4y7;OpvM`z$CKk1&TevkzP7AJHKn@YG{CtgObv`}1MEGmX$4$fn4mJYMv}8>2pYZN$rb{|DU+0xELj4?Z74lddkAc$&7nj#je0iy z-?X`@a7I9gz*c(HrbB5Ya|PLjv67YtGBu`Exi_QIZR9SMhUw0&Q{F65AIeNT)sI!` z$0Vv0695DvBSSJGVj&Pa2P3Gt_{ap=ZZ%Jlt#n92ED|KJ1nGn>Qy>8mIKY%)#v#Ri z@~{AA69KbH_Vl2NIS5q}0#g+@Fe;|1k}3!or~;TFT=-O>^d9*nyyA*q|LLE;RZsW%L@1OkFt+pJwKUurx{qKF(m%n=E$jHe5 zXw8v(5Sw1_&UlNl|CKNQ*F!5G-1b-auh0MIGoSgqs?*tq_oB&nDy1x(2$I;M*$Ia( z`@x4^^TDrP_`x$S`s!6{ZhT##~obO3Tr_hHps!|fm5FuNgFe%(rVQ5xGhnVe4Lnl^y_Y? zc5#@7jpzXIi)lHm+wsNf^oogQB(@E#T3amBi+WMHO_^-nUikDA&b#=kM^@al$K#*c znY~j@vVtZ{$ykZDiJ(Y?e$rc3ZhYeYGh~w=cGzJH7cN}4Zr!7a?CAA+hd%C*Idf(g zoXu{3XyapoMG&F$TM27y?lxA1%kEgcW>ateplR3<%XZprr?LCjj(2v9WR)%abIaj> z{95S8m^7*ItT1T^742~#8HN~?n=Mal3%{G`dYfqio(nEl2K!#jIHgM1CG zi-nX71gXS46i^wW-}=#&KfCgldGqG|_qV?O)TcgOw%KKbC5+CRw{#hQ<;!1q!yEqi zyXSoG9UuJUpTFWcy~(M`-sHwjy|IyMs+amP?!0K$;>A0S_a+TJ8k;q~VZC;`{n&?U z)#*%5O-)Ts#1w^t1^wC&uDJTP2X@|h=kI>!tRs#*YO4g`0bsB*!ptu{<&@FU(La3M z>wk6iZI9c3>B0LiHF$=ifwkd65Sb=JDyCKuje(B#!S81 zV>X4K*BQk!&3jaqU%2{%%XOg}3eA{G|k83;A@QWsF( zzM5J}+MDW2Cx+NZ04dPVLlh#9?hp|*vVforRsN)&{ z#Ls{JtEZp-Rsg^AjDtS<-j^*}G#3~QWAyQZC*P*1{izu=6*Jv#zx~#4edDX!zM@@! z{nh83^X-?t?9|`p0_BDquD|et^SA3EH{E#s)mLA6>=RDd>OGSpCiU?NNAo;MVU9^u z(M|dnuXysajy>RApZ(!4Z@Tx_-&ye|C+>Xop7XM|)h4e&EG1i%;z({h*vw8mYRS7# zKk6Spchwu-@PTiB^Fw>=u}3j0lhSp}M4xDY=f?VWdYfQdYz8tx&zvAp`&SOP1O)&| z+1W+~MSPgm9a#yMc9>#CkS#Qpx^2&E4(I9+dEGrF2u%Af+x7S(4!Z2>n^&*6akoQG zfF=}8IY}^exWh@9TZcQYxqFS--qQ!|3l=Uo;e_MQI_vBm&L;P+LuCnzv9$Y*5 z@cKz1!vDUTFsNXHAOa>JP6YQi4I%iXp6J5s|5;r~t&2%~VyP43C)BkS(ON*oPX_64Ya% zti6fV*Oh}Et-5?0`C~NnZ`;bubjJ8HElhVN5+h=U2(cimH$0l$RjMw?y75g@oi6iytBgG6B3kNiij(7;VpLP~V!HpKwLiQ1 zE)n_cXa4i?M;y6bEk_=2htBBO?B_iD*?;wyZ~yy$_{Z~pe)WO-?q(#JI*`oyF;<(S zaWhO};$-UXo^=kf6;*}-$@)!e+d5_3U9j##Ra2H7LM=6bR@(!*PPWb5E&wf6cD(`B zm|&(ncv6Yai%aFo1f?9+k^Ld+M%wC>VVIWfpl&|MvVzwXJIt;W0y< zzj=&;W~{0QnvZFitqp0}2d-@!1lq89G5c=#M)g5K9$8 zU}#QU_lt6{Asitp#_WSTi)`{Pk!=q0RH8#pa1$-J&8)FYH{`AoQI%h zsjvMh?N6qu@zk5dK(jaV?dKQ$bbNf%cCBbX{mFSxecH1YE?D?mTcF%{C}oRH17K+w@yKSrGc6=E2m+TJz*^&~X1rr9 zhpADq-7euIj0ix9ged!86T7)JPI|&&mtB4H!?$0x^8rUY6l^J4>YG-i$xO-nsjZdw z-HLC1VEsLhY+5!`R^acR^1J7r`$Ko;*|C;m-~IM|_OqW=|K#$!R<9lJ{q}g;{?Feo zzU|?mt^>e{`!D|Q%kS15QP`KvGfPF=lagwP8vq2M7^5Y3zDaJ@qFH(2%34k4JY{w3 z0#Z0-&s_k5<#Y|t5QL^k5Cf?qGv~ohyYiSUFY}CMXcijp+(AYHVbI;P!G_fa!^)bW z>kK0d8b%svaLnkj79cW0%7iPA>1ctjOqBa0?>qALNkptkxsj_Qu`(KeZ6+Acmn!;&0w{UtqZL^|NhH!z<5DS28Dc3JD97J@@jI9F`tg;oe8umc@>1DR zWO8J5_D(zX-~V^-eev(U^oAAp@3Z@YS>2ARj*X7&vD4hX>h*U#V3y{Mjx3xv8UhOk zPzCGvV~i7hE!N>`_T7tb2JrHizw9~Bd2UWV+5TJA>2^oP-t?wF`rh}x|Ld!-zUY@X zo_NebM(inv23X3HA%Y=UUB0KB32lU=Em?r zW;wRmRwX3Js7|IRBt%OFF;nA?8^IX@XIdBo%FcNNj9H*bIn(YmJ0=q`i9e8P1I~tb zVNK{_gO%AZ)Z-X{H5OmR9Jdz#Q`^(+d9d)UR|`K?*tF;nP)EV!JPbni%_xF& z&r5B5bICa%)Bt4lSI7`z4(wTT4XIVw&l@FjKj@N0BEh=~b|(c`N|t7P$f)3I51aIRe`I(6;nqT0#pPUVsvncZqQRt zJ^hR`z760zpZ&e!~shyPVy2+s*gi zd(Urk*RgulLoxQZ_facXKCnebN}db+>ZW^N`%h<{_WYwyeEeQH;+`SONiCXA#VEof zBHh4$|GK9=`Ou|r{OCDnUAKPus);w8ysR5olTA)WTbtYdh3UbOo%+%p1IRRe?Cnpw z;r8!*?|T=2TN}%VD#rsi{}L`qew_v{U`VU)=uiZ%<_S|NN~R`1*U--M409$@~E! z&4Ihm-GA3PH{HK}dklZ`1(=84#l6Z>BuyK~Hvt$KsV4hgjv zDf5xh4rMbki>4u0*6PXRUgt`y4sp&wYo5Ti)^~uRHDax88OC6OTRsmf32Vxu$B!IER(sc2#vVTMx}dNup3SgA%bN zEjWe$C3hgHB*E7dEwiKv4r}Gk1O{tpb(XIn)MyH!HAZWtnP+_yTE%MSQ?)?422in< zFxzUaiDj{pm20jDHmta3=Vd|L6M3t{I&6^PNNtDQq7<yX4{j_wcL2dN3N7KwU zSvJEqKP?sAfv*|qTje;{LRwQJGD{#z#zG3?0c~hrSu~+mv8ieskYWN$<2NNtk%^7L zWXXmO*--D)*o$orw6$#1+2Y~VhP+wb>RKIe4(ezPOFg)( zR@@g2N$q~y&`h!tghhk`f&GedoX#gBC}waj*v_>Mhs-w#0cIqO*e9ZBl7l~_;=mk2 zU}h0&GDe_m8o^``4#E;B5DSN@l2FG21`1Mj1R;o2Kqcr@sKOx7k$Ewvp8EPT&iMA; zOJ<+_pRZlE$HGC3jB>E9CQE(oPwLcon%b16##3)x`x6@b+k$nhS-X0B*Rl=k);+xH z;os)!B*wS{kLvfgsZn{#3H$x*(%b*`^FKM^(4~L=(i0ZXpGCwb8k2^|LBs-2iuMzA zM4o!gK0p2FYyb4)=U#rxeeeGEUGIGE(nWJRnrvz!t;dvu9`mD)%^Blr1fVXbkNw3l zzw?e?eB>ive$8uMv}n;T<*dM9RC#P=3f0!=4Bb*`-md0#vz2|Ri>3`7>&sAxlJG!o z^5$UX%wM0e=h-aYGP6%sy>c^?s^whvVusN?*5MdsA{JOe;1JE!lG|~Jv9b#IxlcLv z+@D?k&}~=lw8w#2(b2ZhRR(R7g>EPCdDlI7%F#<_gdkq~hp)Neh8u3a`R47FLT%i* z@g*;L@$;Ymy!t2C+_Uz|6>CO<;D75)m{x6=x^np=OXe>b;FB<&uVoBU8;zzyq&DxvWX#$JZy4nzXIvZLK9*n_Qp-P6!7#%VDUtHD~3HIUvt>d{c;6 zN-j)E$;j+yzq$#)OJ4Glz4zYtQJ$Ywrz;X(`qEP_`uWfAzyJQe?iyoyVAbli>o*Xr z3M?!Pnw*S2>D(~YU$d#da{Z)$W_5xmv|oPPJpi8i)Ti#V@1uP`%-rdWoOIGj%a$#> zZTa1+9$7no-WVAZ5QQlL#O69{)tm+E!x~E26vR>%(rDcz*AXB|2LoX&QB7)6xag*V zAWCo( z!SZHO1mM#yu0eAs+A^VPdj@Bl`S;AN2u;uH*wPLaW?cJ9d)Fitk!j6$q$0)6?Gbw> zchb}t@w@3C7ZneR6k3rol-yU%ORE=M^4vt&svPNm+2PK~Fj zjcICJ`xDxqved`6**EP#fgWSpGLq01as9t{d(F$A^u|9p>90TV?MrXC=azd`z3k*e zU-p#8sWO1X7DYqiARGc&Ff-Y0(VS2H+4JA^x$}Q~<((fq_nzE%s7*~KV9Ly5U*}Gw zk+BI0L_~+~G4h7z?f#h`-2bP4`k}9V?Vo)+Yppjt(<0OYXKDD7Em6eVv=ZhVo7$6i zkj7Mx3D{Jb-O&mFlruO#?KGJARSewhCNqNK&G@VAprk3+B@VXagxPvpR6;zJKqOfl zNt%s0%G63&z!o+B-iw}o?$0h?d+%)%>mC}LziZ1sH=0H=*+vW9O8Cx)H-7Kx`(JU~ zvgyBFxNzYIKlFjWeEVPCaKnvr=FHg^KPxj^zkb8Bp8d?X|K;1;KmW!rSM;NHx{UwD zHzNG-`Ujr>_}zzMQl7ZqqBDNEBHK1@2fa#*b(I#1UDE#4`057$ESNPK`!N-ZDMO>Y zNI9Fpqoec2ZOyb4WN=|+K<+xslvo3S+o8PqDOxkYmM>)E>_~Z>N;XuK(9FBGZNX?~ zb3e8gGsALRZkq&NJN!rS2HqHa{f1uu0k0AnSDY(YoK zz zujp)pmB>~X&#Kcs@~9(^KmNFHfBUQlSFK$*%A7y8G_C@4j!{GML@Kt6 zMK@Kz`+`Si9e5MDmoG{G5dPw=o>s{VNowK()rL)J$^BQ_rqWcBZ*#R-a&R{nDsFA& z)mEk(w6(0jX zpx&~S^~?xb3^>V^S5};FDChKLvq`HFq^&e#HI=l5Yt*bTk9lmF=#(__df^(Vj{``~Yo_)zJA3XP-H$7#yeRm%7C=b(K?CaD-8l4q7U6DY{^s1Bh_`#(s z&p6|U?|=WF?YG}v)5xDxQailLmqC5`_BiG?mn9cK+u=aQ5R2SxN34M>3m}K~vfY$0 zTge3E)@sQ!f-3En!`iruwV2-QSPEyTC$}{9`%cE9QZGu1$Y5m=ifQ3a^PYPA<1e`E znul-u^|E80O}XwYGwgAd+gILm@nf=b_4ITcy>~iL5c0&i)SCQ z`@AccKeBBkD=W@bYMP*_6&4w%)~}je_b`C5(avNq*5nN*QE4&n@vvhp8V@&tMJaBa zWoV{KN`Sxw=0OOFNP)%@VE8h%b}ymzDNilXf94{_rin4yCCyg44=WSU!hmihx72!R zbE*{~@-!^e9gEzE0tyJ#!wP9FHZAQ2WzvmqeMY4v@j5GNj2KDDff56}_i)NNH2H+x z$-q=QvirWOw*=KlQG4I*KP!G=pl#hfQWp?_oHU}?Y|#@3og5P zwAsd+J0w0+dQF;E6;N`Q-*tj^{3(@(6hMz<2c0 z0m{rM)9G925YVt4pvD%&ojZ3R z3QgHq*%A~f#pE-Vgjm`Y)0|7=1cdCKukEN3Mav`{Xz74zd(zDgD3zSGg+aI~C%Txs zDVzVbh`tBQlorCqF#{ zlz;>-GF_?{^i20;gE0pnQT9g%)gHQTRm>t)6+(b8L;$E72N7}WE|CBNLPvtzh~Ot+_mypPaJ8hzqS8|Dh^o7qXwN>Sh^$0i9eY{M%ce2coktzWE=|yYFpJ+x5`h=V-FtR7%PEJ>9fXIwMk5 zEPk7Nx5~L- z$i#(A=Q5`_5}8?vkeV4}<9Z-c4;LElrIf2*xBRxPBz2bzDHMn8Y{gZ=X#FQ{3z48O z7i~DPYTPv2|6++eNbfl=lVCcvG)YKF+A9BdSr=EK1GoJa3_QO|g zoci?7?jR8Ux6TO0doeJdbimH19>3=yOJ)$s2-6|E&%5l7Rog7>$n`~5bhNsTwfEhr zDIU1zu7xet5I8g^ZFo_l1p;xEt-999yAI7hok}nlRx@%yhq5s!!6ZvyfgE93XMS02 zFmK?L`)F^TiMHgLW7GfX@ijD!Z9a3&Qkc6su<2x^#cHrUODnk!2J`@9B4U=z#^M6q z2;0DU%Vm;UB1nkMQl6M<&Sa=d&!O#xh{5WU05(?3cIu5Kk!IMbXaj1Qi})HuO3WUd zZK^uiivVV~jOOmTm8!!3!`8Qs7)uv7By4}vw zW&0d;%!&IQ@VIT>saVw(FWwozBkMMO<-5Pwf6rZxJ$#>i_S^;06sZw+T`B)Jg`ElB6UqvIkQ!b2r-wEwf}5Rdi3}| z%jUe$0XHowM4r+VH5SyF=#{}q(^fq85bLIXmvy`cx$NGCAe+sX`&5c*+Dx0#^4H2i zBDBSUKiLpNimW{av^sZZxcCdxI1#nWmuViAkRuX}pNo=_no&|uqf>*Wm@H+1bP?&m zq9J8u7l|TiSUC- z($y?WHX1@zlZ#5l^p=Y%jL7Lzt^T?EkC=(1QxOS~5O?atcgnxaizSILh?$w#EdtFw z)5(?jmJ|vI6IeP`Ma&{hZbeQ+AurWpuwWjRB1}OfFo#feIuw|La8;oa;SNCW!z#jj1=T{Yi^GOUc@3*LIKa z@jvsx|G#ZCYK4ZuwlYnPyC7aJ}}s# z5d@MXAmMQb>~qwi`(Jg#ZI9f2(=G=bJ5+s=1n+XT#X@&>H+=uP2M*a|-iwY{GIM9r z>Ad_EFMq}}pLza|e|*K2SKe~-Eo;}V1rTFo=G}MS?a)IHJ@KTIPCW6+L-`(R_Tlf} zbl;lsvCjWG>ne|aC!(YFT=3Fkmp*x>T$K9OPifo6)s10p>l^Qv%$EMDJFW(>%YwPR ze#&Ff0_bT&L-*!a^SG?cd_Bt`^N*lzkHVBOga9a%l#CIK)Ii1dKJRpX@)mYe_E@NO z-XI#hBFv1Y@t@7Mompx_?BoLd zHa^koB4XquqU4J-M@*2214_;!72la|x5_D5(&YfYRvwB@yEEs>v^ zW|N~@nYxrfm z>nN63Susr|KU5V=s;(qwgQlE5ntQ=Oq|h=6s4Xi>N0-bJ%*>)G0HEW&|n*KyQtyaF&~ZBmXS6hDrY_{9*Igo8p; zN`5^PNnURyd6^;{n1hH&2*O}75e|Y-F#>}bLI~0tS_8oCx3751TiylWzd!Q4qYmEL zOtYjggGmZgOMUH4rm0P7YLiZlYn;?H1H@4*nEyWl)nna$xIssDw4g-`W`FtLUh~A(H>KG%3SX00iu zNIg~$0-YrU;OeVyDvKU(5wpcMr&(;hTd?NhoN+OvmLg;OnoqSE-uKMUFztu6t^+L> zT2dI~-0^rHe*6zXbrz*a9@>e;IMw|Oy~2Xkf-#tdS(0?`Z+2rc8P z95wE<{5nFrA!3sN$*4qnqjB6XmbxXF*UG$iz{B6R&ix?E30j3W?FvfI=;dr3$xLo` z$6V)&uJB&12MVc6o9IZZ`$~qwC8Qps+*FtRrg%F%eTMyj&pwa z%MX6+%-fc)ylwf)qYvBr8Bcy(HuB^=PfsaxKuD}@YFaxy)xBzJsUplksU0aXFbv8F zfelWMJnz{W52U(=uY;ru-6><~t^}y{=cM^^(AMm!Mg?-vPUFj-sXe7{@mxZ*x(3s1 zplZ1+FEG!v$c$;N2&NauZJN;LFF?c0JB$sGafacJX*uaMEuy^Dbx<=n%{Wf^aK476 zq%OW<2$K^EU`9qzGuB!=Q>?%;;~;$rUTDG1ZlBHiI^A#0V%Z!5lEQX zNZhh3gCbtt`v96cfkV#S5D6SO1d_lcL?Z05f8;9&`BLnGtd53ynz%_uJeUb!W+qi- z1`{+0cLG&`DnVch%oTGG&M1cnf?M>4Hpl(duYSwK#N=PU?uaKJxnzcxBdKZB-h_Kq zX>VL(&nu)YQse%gu1&UBs{W>4E5mN;0hlnH{;DS)aq#Z1f9Dw&UVYc5iK#z**$KNY zn9T$RB_>K5h*B~lW1@Gw^2v9vTzBS0H`e0vOg~lg5e-GeX`F1(lc0tpE>FGg>pk=_AwjY}AUIeG_v&RGyU5 zitFU7B55aKa^a*nTMDS-dD$R-#g*(V=GyNcss{E!I-|u+&w4H0YOI>CX4+1v0|Uth zv#^I?8_v~=YVbafl7dVV3pZH=iM!S4u1j{GyyGtaetVOXpZoN`f9VUK1JJ2bzaOg* zLM2s@5ahB;FaFrSy!UV3_tC9Vtu&<+qw62ctly8;7$g~BRaJqg-;XJ!-o`!)RT6SZ zmb720@HjR3#sB)x^M8CUfPO#rs!;Wu+0CvM{pdfxZ~y%dS+aDmt-P6jKgF0*@>6MS zwDa;8Kl%C3Jo=0?FZ#>(eeKHY?pl8D!zUek;DLMZ1|zjR((yOzApj-Z!>A~{8=Rm- z0%mBc9>Uj7MQtTdn$c`2TVge*W7Bw)JcZIk=PYyMa@G&WUh<$3D_R$$O^e9PO;mAL z(i+li_*VJy(H0SF*h|eYnFn!}^H+=fSd*A+?y}E(h69FPj#ROp9yg7rtht5Qhu-3xg5J8{~ zBgAZThs9R|@fX!xPh^y_psKZ{XWstVm6|1ED=S%&VSt2L-n2n;#E5PS96ShlZwY%Q zfHQh53S|m_Wwxa@N?OhCoXlb=0ivWt#2i3LLS@fB@z@{z{PKry|Mk4x_RSW$jhR*0 zb_-nqm2g!1r*m$+{@!(Oc*?%pJbItucI$&1KKYYdf4ySO|EiW_vY&+c!~=GI`4g5s ze(6qIy?;#h;~O6Q#;;b~zH;O2k*&f(b+_x>s${XRv1hSg;Ewdjo!0?ay7T-}9M|=G zZY>)76SsG=c^*;b(QHKXnUDnznc zKuuUQ8E1h8sCM_RS0v3LiSCG+e@EuLW~cfSkpjtwI3Tb5H5u5w^Eg?or$GP=DRe54 zj%rU6nVNw$CGGWk{a)<%HF5|cT3oPbksp#PF8}4{Kl|^_E9v!PKc*03)ej;r$mH|R zJNE@Ie$`P&pRk1zUsY3#8l&f*uG=(m{fY++2uyRvx~5Q5CZ0Xo5h5ib@KlU3CgD1j zJAX$v-FW@izy6gR+m|$@USBx$V+az2nR$GC>YVTV_Z#2*_RVcl`Tg|!sl1=qo9a)F zbEw8fJFok_r$6K5!$10|bH4PgOU^p)%7gb^^6V!a*6CES@dztj1d+GU4YA7oq>A#P zHo+A2=AvbL?1&SSmY|yfq)P`B62<6hsG4X_S?}|y3|Ot@tJU~iIf*eVhK4u3PUEXG95k!PU zpnk@$R4tjsEYyc;)B5G*%yaJY>$cXZHoi0Mv$Yvh^-6_7T2EeKVgWM=2rQCk zJCup7=GaZD=R8t$B?KlUa9}brg|7u zpZw(i0r0nPc*1Cx8!(c}`mIUhl(VW*f5Q4b)3~j|akIx(hx*$l>L|Vo10C0Is>z8{ z8hezbz-(-Jk`64}eW!2z$7|p8H{bm3Pi}kTN51>-fA)g?mMltYqLvh*ri|>4ZT5w? zzj*z4@7!PA_L&Rs_5i{5*LC?_>j0d1;xX=N)^dRvP`PanyJ>seHVB)WM-nrV5lNuw^Jm)Dt`uXLL zthjOVh}EO>78kgqk5ri?GRgStws}DZrlj`uU#+u$@3(kc9`(yRR)6Kv<-cCBrV6|bEl1Nmn5v~@ zsjmg)u+-O-CfD4z;f@;sEZucsp@@5IING@|4Ly0VuF)baZvhqAp3#QO7k@r(nZcEL zrLj??qjaAXLdoQ{>DMVuKQU*Pby%6cQf(EP(|@JSBFRZtrNRPl=7VHId1Vn0hc3r{$B@KgFHXh& z)TT|FrY6@O?!Mq(-~Z}oobYS~1jZIMABfq{-(SKqK0I zZpACPm8nt3P886BO1IzC=XrWi<0m=Z&aZ8)x2)Rty1tfC8+7UR?Y1R{1hjQP-)QD= zydfaOrnM*oIaymY=M5mERzSGbvq-gUQ31E8(v;0%vR}6_8z@F2cd#<;ClBEC7mj&E zU~m?Pq6}t;A}prd&^g-Sy+>;qF4K{Eb1f+A;GbrJD`^{nF7JT5^rp%O(hW) z*O#bQS3+bID)G`LbI2rzjx&f!OyCh}A}k^ygsPJNA9w#9AjfgtiR16Rs-D@11$L2h zP6P;oV2%-LAiXuf)1T#Sr zU;sc68CawRcCl$fch`HrKdP#`dS(__fTVstjVTz|Fw@i1UG?7kB&`Ue$oW)RU5B$# zrfkdkgFpCl0Ql?QzI4IN4x7%NH@d>i#^-X3o46)v-8yhgrsbHZ;A^?=zx1r9m#0Sg z86Ce54k~bx>J?KTqo@s)&a-5Y1Q`T7+VtQ3@mnrh{m>u%?ft*`S3mgd$8TFczn26f zM#F;43L#}>L=utDef0J3_@Cc+_}PPh@uU53ym-dK-uCV`T~GPh{?RWyauNVO`q5vs zw>E$PL=c1+HydR(iP>b*@3@t7r^vaoo+f^NKEI1c&gkSV1o>Fl;*NlTO2pSh;%((I zGd?8(U{ub#i&((SnKkR$OE28~_|qr%Y+JDLM(3mI&8&nOiN!}IOp2EY2~!6){g5`oF~8+j^sAm>P8Nn%N3P7`1=ui(#`PKiYE{yj z22Px=))M=)!^1-oK(*pI@@Z;}VWWr;j~zYIymE>$Z2vSyEY@L+)dFqWxZ*><_Idyq z9j!e5?B49R?%lj~&%P4?FkYW9_Np>IE=B(yI~}&Y2N_ZdM@B{)55~6~5_CcKD*!M) zGIn&=vt7NtozrHvbx$p|can;3x#6NqH!S_rzy8j@e&gY9{P@v}Rxf(RC2LJiM-iv^ zCT}w(j#I*7zhJ{?8j!Sn0*{j45dqCFXFy4&__pTA&b3wYrMtjufTE|mZB2`k@r;$k z!TrbuoIo-=UCw^ddfM5Ue4za(W?fBkLB|RuCbSLX^XutPg+qzdii$6SrP5 zXK6)J{6Gc4KXuQshU59hH~#chui6BV`U}PcBr9(5F^Uu` zpYsGdn%G=fGvnl47LUDl`pSuhAv~f<>5dt&-5Gr)-3YKo|BL5J+)|h=atK*ubba9 ze_H$8X&pKc>yOpbBSY2xp~}O1PCl`J=)_1(E9z>C;6Ir6v6&GVlfRAZwF zFJ0RE=1mK(T0VU;zxB`yC%^f`p(hUvF-u#dCjIKch>eYyMABH2n3FoEbx9L2X*_=V z*q)~WVAZ18nXXkpnlMH`0c~=rm4Naf#W+9l;TxPQ58M);f&2ESjgxjDdsRgCOl<8f z1x(-rc{a>aids$Ak=S821KF@~YaJgt)mY`4^K~RtN@*g}q_ol$DIfeN%#*rbIcsIm z68W9HnAv%C=BJG_aTyr&N)Eds8DsMB2g`%8X+=m(K8-^F84Q4=i2+bb*-A=jUGDDg z85TKxa-=psE&vKK@xZJxoX@fHLf`3O($o;4;i8L%9qZcS-gX@#VvHEad0sGY#xK78 z#+Ft?_WvC?cx-&UcKpQ9vEze>kDNSk@OajcgtL9j{gxaI#>^tf;qkDI+vdFSU>irl z%xoirtK-Sxy@Oq+Dm}fYy8HUNdS{iprbcZYz0*4X;t$_-`NhjV^ocKR-Fe{jNae=M z)^|;5_g2s#;y(ly5kay`L0-b!TLoM2c=I+>yis!V z(>6ah^I~`OHq>IX*1Z^-v-iXq${`rs+Id12HXGw+VuS*Vs_-#mi+o;zv){M*4J(bE zOl$C@MUY4S%Q}Y(oH)%(>g_*lREurk1yLkrMgd_#LKY#iPJ56r8)HPWBotexlJ(Iv zNs69xV66p&g$0Z-unSmeau{%5LUb^gz0SQN-HzX#+6{|FUUn(8#3K-J`RC0i1tipX zNDe!LEB#G|r`SInUPhj;36>O!DCA7~EJF$q*mA588S;EVpP5Qo=aZT25&)7?mTiR& z)esk`st_%O#DO9Tvse#pM-D6)QB)!g1O!OLfJ|f=utG#iE3GMtD2m7j0wP#Km}@?5 z`=NI4KKO+%d<6hL`AZi8TbYYwJBkPk8%}EMLIC5*qZ~zO60>?5<)xFJ7prsmS&^^8 ze!~q*vP-(5VK@g`QBeugqWJ&-FmWXv9}<(Oaw?^E(k094K{v;AgT{}(|7sEWrOKsc z3222gy2?ErQD;dbz<6vz;z8o6Rw-!7fqgQV8AkNUd%ZKda8_ zrOfpKK+tC8qL25sU60DWvj8$zM?@mhM5Iw`t7_DwRQAIKrrB9P1eV;+sO2mIy|F0^ zm<&{MDgq>@KKA5(yPX@$69b$2O9-q$fFf;;Woo7#*J`y|9RxH*rAVC`ub-|~YsSQh z2^ar~8V|4>XO_m6!@~=%=(o5>7FmJ0EEbB{5cVY&FPsA)Yu79ePe`3eGJ{HJC;U)fp5W_?q5FN1K45gxW4>$RTdHYari z@Aqs218A)p&wL>=u?PnDY@^NtK?*5>dG&+^k|^fXBeY62i|-3E3n{x)ffZ@6qlgDL z3jq)b2r>Y2#?Ub$!eUZq1_-%z7DEy72?oSuW00|VWbM+^(%hZoy;6oC$r2I<$!^6|L#Bk{#zH%ofg`_ zxzM7N!SFBNcG)k#>uTukhPHMnbwE@CX!G?s`*Pm|F1ogoQ7!Jp;zz(DXW%o4@VQr^ zAOy@U#O*ve0HeWFG5CFM_16h6Z_WW_ORu7AHS)i$EI}7Z&`nqs0H6Xgc6vaF3dx{S zS6;mCxn28Cyzs>Ir5k`l|6C)=04WffJjtrzP)iz1nna+U@C(OBL&g9RD#HJmq2tT~ zh_j}&UASQC#fzpbpVi&frmgNRPWjY$eBe}N$C2S@4xK)7x|*_R!bx63vwPY<^r{t? zE$N%g&p)>J)E6Jz_w=FDgm^CaMoVs$ku;SwmblJIos+uNkylR-9NGCK0IXg#E2ANY z;C`Np)x5|_p_j%`j^}StvDS$IjFvqG#wN)i7{p+AvO;mc0izqdN;Xz4OiJ^}X3B5J zj1=z`n^N2X-E0M!fj!$h^N#oL!0)}zb($hYT3flIH>+}9@mX*}<~x;zJToFqG^Y|i zL+vJDUH=InWfw-rMvMoOjQF5(Af=dX%7_9KGKNsw3sKmZ)TC)l!iZ3-j1LT)7(P{r zV>X6kW5%krCwBFVG<>KHB1j3s;vtvu_(DJHKEk3u>oAa1&MCp{TFgH^*A}|oFi_E+ z)A2y2b;t?x*+J&kv@G>%n#3lqrq%Iye5^h`T%S5J*ga!jdrx1~);WL9w14~TZ~Wo^ z{>GQS{rK1KeCQRIu3fcwt~gIy@S%D@#WvF`GDL+=%@R0S8EJ*|w4!DNWramMJm%=P z^#BX8=Tri-soZQ z5h6usfCm!Y%!O^?XyyltrZ&*%Dna@LyHNB!DLgS zJmb{kT^56IZaMaz3CuUeXP;sY_7;$B*o4g2u)46my{(X5j31JqZ9K$)k=0|dZXSSmRGBdw+8)K5Hh_Q21 z#VM3KQJ0;yioI-o&aGNr^R4YB)}e0@9I!b^*hX z7%1C&5v+bL64^EN&gz`cjB-p^D6^d7CD9uAmB~L3pEKpkG2iX9 z)|$<;*iV6&!N=@c0Lq$f8_!rk5@1GDgiNRi)Qwkd`iHN6fAsi)(Sbu#W-l(n9r~Os zbkEQ;E4$GAzwk(nbhqhOu93h~=G7D;NU%NSbH03H$IiJCB~R+ZY_jV^ zeO-1Qd69-ozVc5;00srKLbk}Qf`D#L1d7P`D$RGL&oq-=L@ z31Z}pS2A2A=v^GY23rkBY=Use!*Lu8_XY)w@e@%&n@eZ0WMGRP5g-Wwa~5_YASRdK zi==EoxH3LIHaY?#Vm!j>SOiz_na zWiDS$&o2QKCHWU6q~)LGcpyBUrmqyHfdBw-YOFq5O}g8odM!y3Q?I4f@uV_VpE?%z z%oy(Kn_ceeX^TpK_Q_vZvvTh5|Jir%dwjcLUb$$l3F<)!Ko8s2dK22_8wA8nb^*df z?}FqsxTbGDknwd&*Xx`i&~a!p+oc* z7UI@V${jO6LUUsKBj^@UdoaowPmvO4XMr3iuTUZ6Z7%R2=s6;Y&>5Ly#ECCGr5>Lm(^i9jQ23IYL@ z$|zMKJLJ=!{vrT;?CmSsBg~AUgYMIC8gp8g9%5w(HHg?Q9{>o9qzQ}ngJUDis%*$N9*EAL zz&_!xzIEf)9Y=p~|H1$DrTahqky}$ltuQr`fN0_vjjkI=1yX^e4ylH6IY2ow!*o-; zayX%zVu_6{kL!?WkwpU(p@x6~cIk5Z5?wJdb zIrq;s#+q4qUbVcK-sAs~mV;+ZX?xcdi(b8M&Y5-aM7VTD*U}kXSFf1y&BqUI-gTm$ zGG(?b0#=Dnh%>s&%V%}}&TH0ml+O1)eBWSVxTB=c8@%-WHH%k}JKWg* zm&9Vykt4fK9o$}y^u;R|wi??2wwhQLtAT9EZn_#Xbx}5%Lr)BZoZ3JblRK0%{rx=0qS8Eo8ub_mM3p3{|g%5H{4grps;;T%^8l_ISP32jc5!#JH2 z5arxL3LSVG7zYR@l?g@(EXHIpj_3e4K?E@%4%f&r8E+VD>1N8U6Cwbhbt&b#eWuaV zgU1gKj*TYOB>w4hd$;U4k{Skp54`jGFMe%v9?Ei#2!C_MUuZ}QIT4LbU>4SnL5rGw z+LIjzHXKjL3oe2l0I>g5^$)+d^EGRFuUs*+yFIFnCuw5hT3V|nwMrb1k9N@h- zhtTmuFyx zAN=4a3#aRwFPklF+`z_PU?N6L%4yvatH4G9o+DWZvjQCeh?rRsF*Es(?R=>hg-(MV zq@EY+@UqrrUdBg0(3FiqMB95HA~T;)(;<+tV8g%IhXk|}5o1RHM#M2U#7N0d)Q0YA zq)fcg-ljkE`!}B&`u4-m9Qx$n-~B&+SH|BX4g2kpH~4k#r? z183mxk>i{M$>Nx+FI-u~&fgsXn8{Wl+0Qr;aI7oKFzIcqjf$#YHmGf|M=2mXT24omSi6*4Thue}uR3I9eP?UFkp^2I?%Q;@ z<_l}Hd{zwPf*LUbj06f$To|^Ac9R#rA-MC=6*pE5#cUx{PVhx3U>Ifpu(yEjnNf$D zagJ6QGg6rZ!o(mR)4nXyut-6d9~Rfz5ViX9ehr9B;3d znb*2RHAIC-xqKA!n#-Ov3fZ%yfEl#~J=_F|6e^W7zyJV@LDEPKmSe?E+K07jq?8R1 zXhLIz2#82>*KkBcVevs~VjCpO=pypYB$zo?*+aIqBY*LW-voe(?9hMjlpM#YzN3NSDAO9xlBX0idHz|IP2;^wy7k z`>ri}Rxh0X-dAq`#E5iCtO--YQ9Xsa0!0udki?LdK-*?R0mPnOB}M04EG$A{u#OOL znvFc0uNpZw0#zpL;}`$gQA;WL88aVStgqon*-^o zkQU9Ied+quk3X~X)V^ouuDb@%K{upx!h7AoL2HQRi+eOCyTgFEO9Yc-?N z#e3cYq~2B7FDr;7V1xyU*cgRmfUW2k5R4H*V4*_w3J5~EHdRv3K?6y-TB{5Woj7#h zaJ`nE9Ikxr{^xe~p9FySz5SYBd*7?qtXj}gb^_-@i92n2T_63z{=+9g2uT=K?#0aFmC!DoQjCpn6t-JAyJ;$OW{=$j zzJzZiRD4V*;W&e~1M`e?44&F$KX}t632~GrUo312We>ln5i)aGU=N7;ab3v9#8%OK z?n)v6!^W^lQwt8!=SVbDe0V4>x@0ayd#$xB(|+kq{t%S1b~dB15`#BiAW)VHM62fE3^;? z0%+ywG1@x{nBBV%e)F3@0)T7R&nO5YFk=uIwmDYkXj&EG+IcfzO!ieVMr`BZPb*Hk zK$n2vR4@(n$*eyEhLwm|TXZ+U^Aj^=JCI=UI)|piUKYk=orcY1a(`xcQ32TnG=@FW z?sJklNSEve1J3su1Z2Ui?$3VmrdvPs{lEFvqZhB7vtiksBrzo-CShU|8&x+DDM%QS zDkKr8GN1|kCk#NzA8aTn$HL&qYe+qv>D)`sV5aJ}_}s(lY~8?FpZ?rubMb^WSYmo4pWi*m+P zr0|uiXP)beKG#3|pDV|PHp%%2K9KY^_k6(RzoPa=1r=2=#g#YG*Zg&fG|hj&G; z2?ia7G=@`QOP){Gh)7|l4jL5}Pz)OFw9IR$oXS!P{Iav(_f#m9IAd^H){6l!B7zJE z${4nSEC2;4%BH%zPnTW3qVWY9A}JzZ1Z9nDNvWg`-JRX@=ghd{;b;H(&TXUB`jQ3H z{^GyC@A|7RKq4%PE{gDY%P6FCuJV(5W%$@ZUn7u91hWkWDI!9pi4-X-n$e^bDIHR* zTI* zdaY~v>{92HIWxNcpQAPhRXAR!rw; z-Uug2#M2F3h|Bc@FC~L;CCC%mef(aoq(J~*m@+F7rIm7G=p4DT zlL^5bi)ui=8bwSQ@6>k!l0_Ugtz!N`-VM2fODnT6z_LfG9*3L!c0VnWHGm zmBWBaBd4g8{@%?TVx!A4NpK);bAr3g=bF zXRA+|rktkOpk>U32Qc{pT{7zf`>>_C%_K6$BuSbi5+sqnd~HV>$0kjwAW+HZ&=|m~ zXP>c#pV&VhO=r24S*nAwqfnE z1#|ZtIx>7@Pw&FD5}H}DK{mGL`gv_TQkLmmH6BjS){pIVHuAVdH{9f_Esmhlg+IR2H6ZOQr2>nLOmV+%+#YxO@o$FOo zuW-G>^{OOwNz=GGy#L7`gUIsvv-+k?$(=IK_ZSLmO;&6ArPfZ}YzUxTsZ>svay2ly zaUC>C=H#5Y z{Rm~H=xb00K!pG(#;qN$3`7B76w5|K0yHAnz@fMAAT>sq!4M0AnAB7&W0lIt-+ueS z+aGxz06z4A8~*ceyuP!uJ+nXZvj$f)Oaj|D$Ga)6jh#9g(5M2$!<8tCl>Jka)=EXB zqnB@HXO)Nu(A8Gnv|`@8=~MO{8$5V={4ajI=Zza?T(NwnQ<5f}#3qhScW%oO}Y-u z{3aT@4lLG}`IyxufI{XMl@qAZ2_U>|Gs^=6L?fKCK^7xG$|xq$AdDsjO@a!E?ai)=6Nduk$mZ(98=1 zC`kZG6iTKvAp}GrCE(Kh+|8|!jHSo1kYZFBJH-en76W#80tUS0yEqqKAginqB<7*ns+*qAg;End`U(Id_$gP|6DwH;OD=Wygk zCnE2A!`jVH9=`p-BY*O*_y6gy+z2RKl9*K&fKq9>uAp6kF_1DS29@axEnO<{^FnMf zAjscN5vFXQ$QGLiVpmpRP`C(rx(9nx2?NcP)sBM^ati`T8%bLhy4T~AC~um+ryl{K?6q71NdVW>Zk z0uK?na{2Ui3#MjYsi*w8dw1Wy?T8`_F%1P6DPWPu_MJLZ*0iPnLqc!Bg_f*I zcakXrv{C69(&>BKmGgLx9mCs0RQ-ZK5*-e7dfRR z1b$oRehZ%^cp_Y{Od3~417=Jv@bGS57Wc5aeML%>(&z4GKH0~~;jyu5y;RmVtZe3# z&gq@)drl1PI5hB`Z3DZGj=cHOMbo8?xoT2l#U5QfBc+b+i&swj%inqB$N&7^$DZDO z(^VZ^9pwg9M%Xb(A=6I^7AGNxs`c6)0*-|lA zJ`?eKz_0l8PSRdzR8Vq9a0J6*QU(+PAtqKJ$bc^3Q zf!QcfmPSHoRkhYPgMqcTD{>K-WJlKmD4a3B?Ege88H}t$jv|E!L)MsE>R2kz%?HA?E0lhP(`-36$}0Y0LY(x z^y=q!fA4N5@VH1MW>%W0O`B59V4b0jAx=P9aKmZAf&~c!=u83yoxkn){9J=M1pcHj zYQ=MVo>sf2yhuo-)c9rq3& z*)6>GF_@aGZkFf83|(eRQ>di zcm3gQ>z2*zn#>FBKRN!LC;RW&e(dB}+*wwg<(Dd}q@m?7Y;!s4RjyS`t>WlaNsPuE zdj8Ro69*S9T=<1A{G(#N>$_in^zp|^8ifEvtRk|ptdz468n6ZMVfVgFJM91B_D!4G zk?oxfEt=VeswGPhX<0F2Ar-x44sziYETKy<^A0Ky^Th!$(i9@Wg*8<8493~Qtq;|{ z4}~uFI-iBJzg@{7Q#K7z3Q}PLk<_<`*?}@yyu;dL6VQR91ON4}zqRYosYUaqeD$-x zxoE+R%mFM@*Z=^tdm=tx(b^dXB{{KqLR`$7hq?Lz5$WZ_Ix6+#CtF`wI;(g2yy=SE zRk&*IjJds2x9;uVexlNU*Y5XSvuMf8ZsvNLa$GmHO5EO6FO~J>D|;YSYj=NGo?l6qFX~jZpbr5En_q1Rolt9T-z{70Q z6*|Ij^y2E9%rDN{v1M@{01ZE%r5k}#s5NS>6=@bx>Op2jf%jE;=~KzGMWpR#P9b98L1R;`YWjg_K^jUlB( zDa9=8B;C%X0uc)~l8B8Xhj6hIW;RJ;lEm0|l%{ME1grL=#}2>cmp?eQ zukVL<{7`FD3RpxzqfdS|+r%b5m4qP-SsX0{=JryG+;kcHxkCn>pQB+d5T)JrUll{*f9DaWPk>v|# zx193Zh0)o$n5=ySXR0j4m0du)Gged-I^kTlp(XZ zp;{0_D$eFASoE-f2U|5O<(bVv(VllS0Rg<2&_0p%kd5TYUQGhv0vk?d=5K4gsU-AM z%e~4&b3JKj7$sP(ea}N+9mLVb{vnY73kahk1XND0r<{}=5tOooCudz7_yrOHGbjaY zKx<|pvYEA(>6a={M93y3ipZs{1cUb+kyuj>2Fx2*WvZ@%znU*7yzAHKy9qy}q= zE=8tnvpd8%FwmLQiRVvexLGD8w;tFQH}z2%-pAMt5z)KpH!n%Tzyw4R61N)DJDSCy zJV7@?fGV6rW+PArkVcM`;5nC-VK%Lg53yLKc;ZhZBR+QqLGVmdU<7A<<9Ht6CS7P) zgs;DB!z0_apWOTO-1XO%I(pD|9l!>dh1q-L{ro&cfCx7(n${kqq~Ejs_`y?^a&&eq zB8upt7fwF5YVews(;L1uR!jcwp52;oq?SCsZ*Z)ZwwKgP#HVVwldUtn*K#B^k8+H0 ztzzP;Br&AP$iTsa&)g3HmtOYjTHKjXd1yS@{NR%}zxi!Yj&A?n_ms*M62TA?b2G_c zhEcr6f_j=9p$f9}DahO<+&?G>xIG>c6f4+78nF_G0^9qnw@ZL;VBX6>CjQD6_B;(8 z8#Brpp4ADlCc*}60Dwbnu*LL(y_gpf1xXAG5r&I{upf|M_|Y;j8=K%^69e72TtE;Q z-C_p_@LQky%Co!sUvuq>Pkr*OZDo~_aNL^{Ymv&FCTU!IY3sZfrD<$P+iS`PJo7Z? ztkkay*Dn04KY7o8`knu~@6gZ#I}WUz+qY;&4+0qxX4$xGUQcKFxq}0rzyIKC*7Uym z!g;l7lBQg%rlqnjm6eXvyKY$ViGSXD=b%Iu|TAfO1qh%rhl06}sBF;ZgX@7^!h1;Bb@75O}J_~}m{K6>=T`)`~zwX-DLP<%N8 zlgNt#IsjnFoDKju)Zfo(Ix;+5*4l=vvoVyWthLgbqlhiB7JLM5P|vmK3q43@OltMq zS#@3+ACGG_yO*387yy7deQhs!Z8WR53;+YCP95s+pV`+pJTx@5r^oVQNozKSv}R_L zq#14_-jNMkE*CktFD6ZsYSq3eV~iM+B+1z5s4)fr4j(x(c=|K|^z}p&uRnsu2qc{N zwi6LaJ0CT6M!F*M@prBN!RGxBJ$vw9e)QD)ZrP}a>ne>CZR)HNhEyP~1D0HuK_*Bd zw>L@}uDrmOKO~_zTL72}7$rMTr^dt#L6y}^IfohmKoy3Ug4zDxq)_$m-(*at;DQFP z;A_|mB|yF12f-5o9V`Mu4UHoM5GX(p%S=EeK!_+dgTwx=jZ0;QlzeO|p`au4f^#Ef zV4Fh*VwTODy?({wXI|Jpxc|A?YpxKJqSD}_%7GM;5^;WMKOb-hi}bWd>*x1mU#X}3 z(C(9yWWFoJ@i@I_$FZwdOmAW{;uHG^hboDPL<+mwUUCSun9Gqx0oE&AubA4nsf}~J zDrqcfI$9mvzx5tA>9se!;Xi%!PvY_M{-f2!D^@@H@B`Zq9((0$-+17K9ou*8>L@9& z%YLEulYH=2s1aNPE0&H>&%8+#*o9;vQtPPj<(iA5qVG$CSq?UzD5D}rE2+PEZEfyvu2Mji-Ui_Od zfM{*yf*b=zpH~JT2rPzyz4sRYfzo7B0K*p6am59L0Q{G~{I{of9lH6NWq*`?HB}rS6?_U;WSN5Qcr7|v{th_%NH;1dUF5RiNWC+ zy;A}#qB!KwR(B32%3MT63SEG=*5zQbB+#Hu3}f~Dv{r0)fz6-<<`R=)1McWl4RdeF zkKJD|ff+T1q}++wRt=uE4Vi$gC_fZ5WT zAz8&%%zZOULKX4xfP`oySa&gRVKQ5DOQf=^A!QN{@+=YxI4B<75GTv9CI~j|9Re&B zom(ooS*bJ3X1BJ5R>A1qP{BKc*%K*<0lmuk1=}!kMc%_y0yVz*&UfwvfD4!QWb2_{ zhduJ^Loi;<`n76d7Xa)%aG+kRr9`7zcXV_R5h9Y-Mr)Q2`rIgm3rfHG{>k1Z3(^|bVXW^2hakXlUF-aoE7-L38M&eq{o|_%Jc8!gX zzv1fHJ)O~+HX;OI18E{iY%Lw5Ha8$Zn;r-N&{k5P`7c+!{y+cp`w#7UW}axmy#r$>N9!}Dl*6ybDO-N)WFi93rx5e}NMR!;k;IzhR!ptJ zwQ*Cca9oun7Ea@#fjv+B(9|mHFS_ajzxIjR*f=7N43ACgZJ$1K*8TU~yYO9azu}hK zo`3#RsbNLZr0R6rDiVr!mkvo5#i}|}4+CX;E?O?Gmt|wajhvSm00l3V@JeeYI!lO@ zWVj3n;zakmv@Uz3P(ZX;BPP0|8El>ro$&_GtBU5v6j6j23=lx--#EKkijV|EIJLS? z6k#LCAQtiv|BE`)fC}MdUf`Zm#B7RVGd2dQz_>)k;#Y2uv1R zI1A3upq6|oFq4T6WWu$s=nmT$6Yf%Lqu>A7o36WJ_3!-Am-in&otVSx7S1YbG6s=h zPH%TlXWIkY58B4#ruB1CAYqfHoRA?!>laLWa{t(=(_=HHP04y#DXy_L@2^nyOL5qg z>pAlIle8$@r7@#g^4OWIVs&vK64+PgR!+#?%rWONaY6G=f$TeH`JGwie70TbTpL+D zD_9vU4QHZzH5>*40_p%b&CpIe%@^yNM>)T!&_>we*2!}uM-Li~DL^5zZ)0;?BEedD z#*>gGczD>t^P`H<8fX1nq`~{gt5#eOf(43JuqcW6)+2Mfw%(QGng<)agM@$@6)4{g z_$!YAY#?{x8ej&CqdN^PXY&{~2GK<>q6IoIur?PUv9IZL{f-#!cNawEIv65jZ#<{r%7H*|TcNlA)m?g{YN6B1%)z+9;)R zL)f4j7isJ#Gs9fJq@{6eVFBwcTd7nkV`KLHzOZ-iv4H^qm^;1g(;m3dMg184Gr~8or*-H6cQ<|DM?I{XJ446>Wd zU~Z!FALT492e*n%kO>Y{fWgt8&Iu2vGqgsRtXuid-~I9Ez@g!zd#BA`m0ReVR8)k_ zKrfA^oJHc44U113!E*GorI`DVWp+>7l=i%%J~mRb(HxU}5aH=ca(txL&~=Q*X=3>0 z>CT*#*_r;OiKH>dwOq?l8|SztX)MN6#s>F1`6E*uU$|)X)z`mi|DHXoRxKGmUFm2q zpB^0V>6tz_Gn{3Vcw5i?>VqoomBhp>?F^T$Bohf+|FyZ)RfXg^q# zvboO+TitpHz(#}}=ictrIls{W1a~1^_t~H*mDji+iuk#)wHD-n#4a|9&?B zeC7||ICo~ZbMlp(qGb}>a@3MqC8<@?S|v^Dz9QgOZCK76nXt+aVmh+@@g=ylTQ`7b zoZ1wVI&weQ(5J^EKG$5j@@t>_&__P`FOP0L_|)Db>le=ID3<_%jVWuoV%7Xdp6~zB zj=@FKyH?JbVigr^1XJnM3IHnAdczFy8lbDQ)4r`#DW!E9$Bl0)um~$I&H1Wr zlB8a#WD$Xq_sF{t0qvZgHAvjAcoWcF;M1?AIK`Ql$$0Cb@6Js!iJy! zq8-;eATszi20IyN)%iKi@ECxFnLrFkfhqOU(HI)$z{s{{6EJ}sPFnsn`~M`o#>J1o zyzcy}4XYp8wsTfa%3p=o*%K$^g*Q9<7=^<$`%VOQv@!!n?K~ ze{|2u@=K7EcW%TDLYUE24ktq+l{7Ijd4K`|Qf|@1B`Gt%9ES{f%VCU|gp)eQR?9JN zYU5n1a9raw2IhEt_`s8Q$Cc4}^On8p)$eZa=$zWyvv2SIfL7wpDy65_M@c+L3Hv#SV*(83*-tep)A#N;JD00^XPn2mhqD?b8&KmF({mM@rQ zlW@Tgu7z17;WSO-YEr8twQ5?gnxt+_>fXDfa7=tFOR!r=<_9Dhu)x;B4*33cb~d#+^62|G2C_DT`slsR0INBN%djnqqGX^Vu_e z+Kpo}nYcj_oD{$oMuIfG5(c`N7E6c@j?@p8DWeM6;L4)yMdqzy8A=Ml2$Di#^b44T zB}d2z%FzSo&WpK^i&Jj6;Rs9XyR2Xz=;k;S_8t)S8QFT8N1~(Wm1ed+1$2a*dW12v z_H9^^F~@!g*dBvI&q%VTOZh+}2Vc9kjR=*phF11a?M`l+YSMPW761WaB4#jbz15M} z+lmvR^Fwk&7o%-lA))OT6p^(kA_P*TY@mtGvZ0i3JY4qCPk;Id09>-NS6D<9;$uBf z%ef@##Xa79-JGxdr2n3W9=h#@8#>$DN9%PE>1=N&?-5Q~b7~wJDX7syBrf-_%BYjf zNxfFDR4ff?Xn43*uiI-jHRgfG9s_{euAcoeRY-*RuAAon+g*o$aL+w!mn;$H)2B~! zns&6cIq!3&(l}{&Q^n0Y+_UmQWf~{-@o}5EK0Go~snt9yitc;(VP^itSIyIEk`e9# z%z}xe$fRuJYp+(x8V``(DbZhjWc|nf`kAlZ``lIQ7jp?kz2;3;=yyrK{#oy>j{Vixy6sHKi>(*{@tP>$CT~@b8Zu z>UhcgWGBGvn@+DT+D|!t=sCPKn9>$?H_0|eYe{0vOWH&=XvYnwv81t$9=8yOsaH6z zSp$IT=+K_W@2HOt&z!aJHLrXB?78!eG26F3ajbvGzU@o8rcPPBbZJ{@!T3mRWOQKB z;`x13y05?S=5KucD_v!c#oR!T@Y_m>3sqNugb-yOb`b949<3LJ;yhjuQNZKnMRzQ0 zq=H+&8|%d${v;QsgVM-WkZhD#7(uv_!sTpwzHsiOZ`l{fh#+7@QW0j){WZ)YdF-9n zR)VVm$&s1;0$~pkiG+a-0}@c4(V3rIlh3n>$TAU(F(4p@5ZP9;Aft^H{GDMi#fwKJ%#B@5fbtog{8H+i&h z@uGCGv<>|j|PLM6iGQ`gB@c!~;`+s0eYK%c9 zCSt>oLLvqbg+N#)AX#B(Rd>eES+F6X0)oKrj3^`%cwmPU!XlHYb#;i1;f>i3>89Q_ ztCC%2B?c~;+2TTog2-aIjMkf#g4olRfJ5<+r~zcb(5|(C!P;O^C3(k*d4!>#g0`TZ zWqnAax?eC{Eo}^aXb;>l1PbyA^6M|Zcrgzoq%bkb{t~(H*Px1GB3od2*@r*Z+1U~6 z=>rTXfGVrC9A}D<6e?x=LUEEC5fCIr3W>mL11*9Xi?q)I(1`dHC3|tJd{izINKnH=6yew=KQ%u@etJ_0&_(J-2?v3Sk}^8cI7m zv&KVZb|9GV-I<68iiK*n)M=umT4miOqH{y=7dRMJ>1 zw@O9!83idr3~#w&?q7ao$Aixvy!(kgufKYY(_BRoDAHN7>-j`gxzh?rbWHitekP_lD?Tm zCX%o9@%`5 zC&w!>zjU;*1|df(X(CD8#8s|2`8d}r9M{F9AUrm7Y~Pc2$Cc3~OV_>o1HUsgIJonv zhej*M6sn#nbB-O~nf51ppMUhmTYq7EymIv50f3v196dd6(VF>l=A0TFh=|0A2Bjsg z5nSu}un#jRBHIcvFB&kXV72bWngo-L-_4W5Gdp;XS=taag-#q1UYhJnLYwRCwi>c4 zB`VA-ZS<@zYr1W9EC66!^es183RCl(zF4=rY(NH3)UC_i15i}7n8-~<% zcG*)Qf*7_2bk?j~j7iO*{^Q@i=Wzh|t@m8c%!G!SNVHpGj1f*uQcvpDq*gI;&7=t% z1HwU|9Tuwm79=Yx5Y2ERSI~3zr~k@X(@rPJSIl01g4`*IqR3_E*&d_S@vxgj`JFrC z$2%&Cw3qd7yytph^S}S^y^riVboq+;Z5mT%NV&H&+O%Ts6E7V3>Xu{Sv0c1oVRw5e zq#1>(&)_RanN*^n@^uXd1x<@nal3bm`G*m34AGh7G9f9glvWBAX;MmSr4UJJLPT~x z4USomZ2|&p*q#G6%xuJ@+OSE}G)>VE+akfZT?zT@Wmro9LqcKt*?v2}+^{8is+F?3 z<$`!7+Dp?@+o3sOQP7Zq2G)E#yB!e;h%FR}MIKRLMGd)M6#CMumH9YGV^@^lUO5f5 zfxlYJOqC!?y$IAcHf$|aPkz_~xifOp=i)p)EQ;a$bHzGjlGT=xQg+o-fb2PCgvtf1 zDlfVxaxkk&0YPG6meipDbpZUV+Zqv7IocHOwc9mX+oXv2x z7l2x9db>)S7EZf$!`#c4^@TqY^1ZRr5EC-G78DW)5!p<#{%3DhG7wk z@(JY#kddn?{H%g7IhH~f(V)rB#D{k0R|JNgg^SBM1b<$QH=7 z?0oa*U;IHmPJZ)k7tHQ!7q;B0fceDCNo?gDXFUm_e91zsF^p1} zIb&ANU-I3BSi5%XN@M?fancU05$Z5&*6g;n_FAp#(JDWE%@ZDA_N+M#n1;o5EQVtb zMuOvEV>nG*sJ$;yY$ovs-+i43|M}nl^yve~H!Pk-NT~=i&YaTz>PuD}9UMJ2I0gbe zT^)TrU2|qk36uS>m{I45`ECMzN42lp`hLL*`VuU`^Cty~TVFrx@6tKvX~AS|Sb zNFf;)4yde`qVgmVx0r9)vJC*PU)w2`-BQ%~dxHjk38P}J+tBxht7m`j!DIjO-S7U^ zd){N$rqjd2wQ9Ayt4k|2rL!}T>tdMQ*tE^KWu~XAt0Rg|o;(>RNyb4UqB}Nk-rwK9 zX=Ts5&jk}WzsE=3vgEEU1JCR|_}!oUDqxk&#-h*45FmaOUiJGiL2Oau~gj z8?+!H6nZK}G-JxN69WUrr^zCs5IwVJ&pnSmT8il7Z(DlqWs(Rmm{brYRT98%UREw3 za?@qAE?e3D*sf#Wxc}LAziMMGO;tiu#$qS|lh0UO-qhYCOlY`{1M zs~aA1rYOy;YagJVvmY2Fy8-OX42jNly%aaMV(&TVBupr5>ki<;B`wT63A9974wkYM zAQsE0bTwIMx{f(`(bN=4#$$9dHlGcZ_ohKBw0yywRg305f1rQp(9W4FHi=btus5@E zg^M)U{KTm-A_y>RO8cctdaqeIWBvS|?zU+17tU+e&-wNfhfa*tqnEVt2+P#&c76Gh zzN=Qu=x&eJ&Y9Az!kXSyS~a`-!QCg@NloU%BE+Rl+2qe39eMKL&`aT7)yS$6lW^i% z4xa-!&T);C*j{gg{ksoryO&Kmcg~{gu6jdTxg8@lbMD;kDV?2N-I@S^<}T>#OQx>7 zaA|uRTyyRE9nWsxzx&{>6EE!Bb#UgamE}@9n@a8}*+eR6n2u$nf^54aDozr81XVzz z@`ygRt|l<3b1?s@ResD`RBYcxIR}B* zmz-imBKsaJyUG?SNTdNQwn6R~m_(dnp2gTrmkE$9QHqI(h1so3#!gwSXxzQ76$;xl zBO;rh^XN0X?|)+F+`i}+Zd%F4{uVjwDrSb1jY;ELTCb*Y-K4Rw3Fms&9d!M=4L`o; z&XM6^SGEW?Hy)Q=dWExm6mgw~_fxS3B(}kkfVg!YkCIjZ$@(=HUUBIa_uhXmdKQi! zpylCOH@*56PE&VV_?Na~OKU92wj*+eF~Dh()T%0qT&5}pOcLf_f9KT)`%iuChtEED z@WcfRXWHtg7AG^OcFkQnr?!AoLEA})Hy4A@8!ESovJOC4%!3j1-J@?ULJw%cJenNP zT`yw8%UoaMrpZ*Y305^7jDIKY(q)2JYZX_$;C1rVf%!Y-_V$wKeBWxr| zI87-{i2w*mD@WWRfFwyA0KhYi|B}1RyAe5fuTG>sdTd8)_&WB;k$82vIoKNC(qUlvemm z=KF_5IZU(iLLgg4J*N*5L@0nUe81$!JMJPw7RIbcDTYnv2j0NAvAny~dk$0n#uUUIkZ|L+5<9^F3l_;b(Q`QU@E zy6iGrpjXngR;zWkx38GD@E&={Z=(~~^%ceSbNXh2K&@KMduO8kCr*6xuDbx>gSRb) zpULC*-nIM}|MWz-nQ!9|6}WSH}81c zD=&qhZTd}{7TmCU=A5Z#LR}Qm>o1zSW&faIIjb{7YIyFn_KO$yHr!iZ zee~c+HEEC3i|#i9uPT#BnmSgM)sEZTaWCWmk)tm>arA{Jgn7aI#czJg``50$uy=Z2 zxxGx0;$-a5p~3wx>^gPg#DjN#D>0QwD~(-?mR|72cfV@Qx+Pa!ed$ksa9?TpnvQbU zNTrG**vgIpTjg!LomwCxDWG?V&;Rp)IZ5v05T*x&9uD@;O!6$n7q+L>__NJWa4K~} z=Fs3jU^lQQ<2xFaINSJO(*$No4HKfI3}uA|Tr`l4+(IRwP-zBaP&TjE0BASkRD?Q+ zRs=!;%qmv25hHm{n7gIPy#g3u044>@D5L?5AfPCbL~Pi#Wk`JK2M++iuiSP)NrSKv zLa_o`5oQByOcJMYEluj2CJik|#$~$jg7xos>pMUHh0l54V#ym106@I)hMP8Be5p;0 zbzKLu>ojcdVc`X93;80t4tptew6}lY-5+>z>yyJH!|`xqZN3K*q*v zZ90myVk?HrB;$T&Y(oaJ1lACJCh&Fu;(mrReLuJ=F)uJNr{(6ej4W{r1d(*4v{s~5 zq$3?gI#Q8R<&us{8WlxRNoh?=BPctiW&|7O%*Fr;2*zZJRFdZcKV|6CY(wyrN1gbatQ#CrlI;#o^ifk`@k(Rt;$wR;)rwq2z zb@+8e*$jmY=m5+Eh60wQXStz5uzd$os}8I{o(gPqi*cilHJHH+(i-f+CL$|g3zJ^T z2&S1EV4x5Pe?bD$76xv8KA=006@+4X5%w#rC7XH28VheY^um_$SqINvKJMb;JlsRh z*vbmyt-c|65Qr7Xp(D2wBU#BhsqE&+KP^OLH{}6R?#P^Npa4XW4~bygw(S70a7Krd zxcIzA!i0Gwe0M1!NFfBV(1R%*4|u9UDQB%^<^_woWbF6G4Fj}kq?bpA4WMJT`b-f>c z^OEx|nJmu=!K91{p#r7-HIG@NcjX0rm#%1k{Douxe(%%ox#^-fHPzH~)eTnb5LE#* z2tqpnDKIGz0sERHEm|>2?o(2p^+2&d*&>Y+{`K!)?!SY3XtmU zEM2~A+T~08E?zWkc2E0@H*kCXhPmH=s()xao~(hv1kFaAG63{;mR8K}UNfg>v26NVE?Mx^M-SQ(a-ttg3`dIIa>;@v(+d$j556$)zzYNA7u7h05C;pV zk|vxclGM3gHT4Qxliau}i4}5)h#cJU@X0;f0N{ePm;T0wKfZ9;LP^rCTOQxO?a`sp z;lZIXMJm#|v%TCmZ5CqZoOuh4$TQE}f8bBHE?%;9;iAQF_=VR#^XS%TQ+rR194$u# zayDK=z+k4F`-EYif(tIlxwxVCKx~@+oRJ)e&3n3)A6b6|@xf4`B`6?E zE);d5Z2^EZB~(mqux58lBC^F9Ig3>CD~>PPEMGub_AV*~%tjhov;4py*9^M(hyV~8 zApmhTqvcTNceXLiaOlX%$DZB;0M}nUk68c>GI>>>2pby+Xp)Rr)q1Wc#=PTAZ$Eta z(Ct6^fphfF-Vnkin=bpk|MCZ%rVN?QB6{cYo)T#xsE>gI_Y>#nP)pOp@3R#9|%w@ewvADjOA*fCwa@ zZi%#&^nd^Gt9R`FmqW+L%aL9%y+>H;aZ*px?yg9HV__7bjLG6ZIajL@y52V!R1=D@ zHDL!3CYPp>`KL>R!;5DCWP67@JXEA3UD6RMrBqakbScv1QWUkRQlxcMA{~)ZfGX0F z0FfeL21QOSq7?!P8>O`EI^ud=6DF}i0Y#Xg$tSN48)8G`F1eQ3-xEcEVXK{Q^5m$% zEvsR5!N8-X@hGI_iy#1K@FG{+&RA!g+!V<=5ND!tLKnB^7AImcS*AxgCM^ zjxB_Q9@ogXJbY|z670=zThOfBCkyTGMu*DaYdFI!a+V0dio(_jDk;S(n=TQlv`A6^GP!^fZg>Y9=9^al?g z|C_IW{nu{0ZQZhEx%fos+pfFei$DDC==iuaH&cZ%CBE+J>*vp$9d1a&V`HEF<~Mg8 zJh*yc*Z=*`7rwYM*)|@j7!p!J-Xub9Tm~P0%Zm5@ucz;MV(;5ud7)Mkr^Y0yt^!13 z018S5v<4wyfHD9^Aj%TGT?NeoY=9A&!PzKa9*)s!uSM}D=~hzSq#d8A<(Tx2${_?V zXZ_Juok_Du1c^e}BwKLk4Ba|T*a$HfKo_xoR@Uak7!V+$%h#@Wbo&bfyPoWsz0~T+ z(;$HDmfo;&-skVz-KF%o zUvW@R4GT=`EM2~|=epH1H!heqqm_95tOd}oT(_*Vq`&g$fzeuOp^{+mBvzd{Z(93X zE?Mw~jRjuiXf65TgZomJ^X)o9h(mJWcp7tD<$5h^IWl`(0I5|+4?VkildW?LWHjw%6S{bB5mYl^waOQ_)twRR|x39AGz@@*eBtzmlPxS;3tR z7ybAQTh70mFYkt%!-*z*i&7{G1O>&;2&|gJ_8gq;zsN582g4yFVdgPSj#Q$^rGbZV z41*|PvDhX>c9hN*j74B(BvOI56Ne#-P5_TUOol-uwLlJvnACPMXjs@X$PrM177^4a zU%q{FJx+f0^~+0I35y^%NH2^@OcJw~kGHn`2S}4djQQ=~_}GRE)_?y;x9{5hd_9g8 z(b6T$Zn^o^UwGRumP)0hR`bhs&~^BJ!+s^H*Dc&}-rGf_5CE!`N*c!(tX%V%Kl`hD zAH4sb`|lkb8q|?qy<+t(H^26Z%daGWxLVDuFSFyx55^c_PLd=$9%d6)$E^*6=5`g8 zGM_bPUnV?lO511t+ikaf=&OfL4tKYgrgfGR!()|7M`yVl5ho@^K=vwV$$3Dzkz44! z%I;1UW(ETn@hZj5EbQ*~sEk~LH!hp+f>Z}eE`1R0`GOyqMEOo5gT zS8`6%Pah+H-YX2$5s+Fk)6+5XS+N-V(<&{|q~iJbdQ_EATf zsDslq-MaNz0GK_kO~k&phBNWf)2p(_pZ)sUTFl>l;Mm`O;~VdJ&1Ef4-E|b!}q>-;MlQsOS(V*+ZV#m{PCHOt!I%RK62tS z-}uHayy{i2y!c{I(t|nEXT1NlZ~XRscOO1+e4>C^pKrgt ze_&wMg06r4{foQW^@~1CYou$$BuFHrT}Th)jmJgHr!DAHo1Z?g`I&t;T)d)gu#%*m zbyW2PbRAGZJqFMK3NV34J1o~Co}8s?Iini16oJWIPy#0BU-{Lw<+zUW{63e%VPCw^ zp9p~Sq!mFEW;h2|4hNM}VW*h@3~Bx%35&-seR`A|g=W@z9E{5$19~J^z&Ke4X9tc1 z=sXtPPZQj*Y2BmSUl=<4d}VZq+NWxvnO*G{F7CT{`P}tOW-XdMRh3Fgog0a$5}T(F z4Q+m5V0-__-hr`qUcTsquUy{nGp|`c=lfgxPmR?lsf!SRIOQbe&a%3AQSY@YXI!y- z`kbC~3+o)MC7}dG5x)DX#Tyq*`{C0^b{-uW9FOaXNm&q}9I2`8(N)W*zh?cMB{Lco z9bbBA|E^=BZ6$S{_e*99+5mC5mczzzR5PzC5g9#ot)@_mp4#;BQ~Dal>8T zx&4tX_njOb?dj=RxBiu{f9IR$FDR41zFkL89v(Px^wiY8`F%4w5A8d&|M_I*%xS}? z#+R&Kw*ImWU;2l?{PP{3`kjyeMps9BtyWVwc?qXehX)Wxu6ZN?704j5(Jk_fVG&IP z@7$9bat}^d-ys^5tnm_jEIPNa>qUZxbcz&_J&15 z$eEKyggHr?9jgjV!mP^g>H?9AF1T>`^y#jSj!LZ>>1f>r>#o>znIuVUOb!EiW2j8G zoh3okYc-Q3@*=v9_BIUwgF{30T1_j}UMgR5;YCS3J~nW?REjQGvu@4umA2o&5Sg;Y zvTZr6=7bqU>h-!w65Dl%a9XcA?^t1BR#5~+4Tfwt28^iyyWz%@bT#nuhWFzy#MGweE<6gPn>w&RabSjJ7V{1uDqtJ zqvPH!kJdbB+dOQ$c-7iluDZ6ZRLUY9AK13--|x9+v{Ko)qUQ_0d(pJ+2>$=^`0U3o z{O!Me?wj`?{g*rL*s*{Ao36ipc5kme$XUI8zx;-`Y<*$p*5`K|IXRG|X~wean>uyP z;$@dzuzqS+ceWc<>-C>(*>d~C57*=PvNh8__uCitz9etT8~2GxnG^*%G+7DXR-zBT zdD(yY`(5ANyz`n1mqbd%#*|{EY6f%_P=Ss>M}QGv3Y5CW+IkN#hs161+ln*a5cY}% zJ7S6&uQ--)W(fsyYO87xyg@tzIANuuY_Kq}pfIulNxf)WCOj(u5a>pj!=uVG=RzNP zk(^WsS!V#i%uZg8g@hUVEDpf{78XmSV-PlMb4`SWIeYJ9Os01P0GK{?%7x1oJ-z3^ z=)q@ix%u^%E}pS&(TwT6J>{;hwob*y5VIhnQq2P2CS*gl9UOXS_sPfiojN#JNsW{> z5yG9%9(}{b^X3-qt!8wWUw_fO&)v8C%w31IzBMfEky<*V^U7t@Z(KWj$&Ai(x`}ob!&$7lq%wU|!D!^Lj>W$+6+u(0E*lQxWKHj~4cJ%$(AqtGWOA zfp0%~xE!4a&#YO+5kMSqjqA>?DhnOA*YDBYPac2%aS@p}Z|Q&gvp*jn9{tD9fA++Q z;dygrE?#``{8g9FTDo|&Mk6CUqlZ>3nbU#M(Idx>9oF*}%via0;qcIq)={}#pE!1O zU{JmHH$VR1y>~zK(8FujUhw#1PpF8)2&3j5R0{1wE)yrqz4dGb2dRr4Cx-5Y8EkHG zfX36Nq+sIC`7k(xH9WK44U>h4*lWXGP8CbmsW{L2Vj&(Rjb-CAo9&a4MhM7So7#TD zN+l69t^q_!5wM^DS{n>2VFas4ryL1l769ds7fCTQf&wxO3RwZiels<0nRDD5NeqiH zOLEr(Pd&fy$TjPFXHM&|32*idIa>=$uQG`kGa>&Ipsl3GtLf0t(6sJuh1gYYd+m)k zzwTA9u_o-+D5X9=4gnE5>pC*C+ANi?IzDdFv{tJDK>57nOubXedjO6dJ62h`w4<#} zM0&e>UVG!KGuIY0ranH7#pAIHVCbx6SKaZkF_Wfa!eGqITfA>1`4m84XKBRf|0Z7W zk>6Sc8)G*vRsevCh)5}=+saY7R4TQVO6^gpT-H&fqc*Kn6qU7wZb&Io0@gv8ESreQ zf_jEQN0F8&WlrN-4T(TVgajaRwg?V4N)+25Wi$+-$wHz1Zv{ajHhWuzLxM2#6I$wM zgHzbNI_B~PY3O)Fng|{CHMReT6M4JIx(h$S%;SP2@Tc+{nH|e{w|{Ih&ckM0AxJlB z>Zn?IST*O2hU-@IlG`$!)!Pua+)WA`>~L&jL|paL90-e{EDqR3lN04yFLWAo1Zz%} zPeeU8%C|Oz5!Tj~4qKQzX04E&pde}iWD$+l%)zd$i0GYvys$p749l<%IB?)F z0L+=z=FUw>Rx2>9UdG3#e)EFM)=c}|&u{*2w#dGFvTC;BX{Ds-`>^gMlj)x!KwtF`K+C9kDVN-C$Unh zuV?DA`3tA_OwFEQtXh3+`}VuHY&mx76ac*Wx;g*nH!pZe&%J=KumMg52_4T5L-V$4 z)=vl6_1KQX1E`oUh>;pKl4 z;I$!!p{(_Ur4`aSkf$cguyT$iMGyPdK*!n7V1W+RP~Qj2uZb~|Jl+_ZxE8`bm&=4F z!bY53yn5Nwdk!T1&%JZq2fDhuN+c#pEN9xJsnS}A&Ok6dIa=ScfAFb;L)-g@`-iHr z;gY5{ttfH_cw(gfgQxm`?G=r1$7?st{nitQMyg56#v@KSWiD&AZvNEEm-b!0w0H6J zu57f5+q3uGcUP^J zE?u%_?L{|En?0wab4q7-M4X&FJQkmX=~Fsq&hF`+TI%SEB8@X=c1)k%ktF7V3l|Q^yYPx$>&ZPwqW5f7Zfho_>zgT0W@CHiy*|^EDCjrZ40iD+wp${Y|(4 zHreJl2Bil~$mbmpq4A_jMPRtGFhUGSNFl%|Uc#DhPCiyNv&PGEpV6oDqSB<0l(n%} z$YSibwF^tM69EfB`VlvqJUf_JQVhHr);7!2#8e0C{aplGO5x^ z8%h&*&J9Zoc%kuMt>BPWNM*L*h1(dO2mk1dykhZKM}AK`>nbEbvffKU;tB=Y?4X7Q z)2LPPvE>N4*{i=I1zqA-7VDU|l1--v{bCxJUWnL`fV>}Rt-8pls9w6Azw5$T#as%~ z5IE>vKrvi>14mbP7(p}aD5-3{Gu#cRK!B9ZBX=i({EUFyh?IOn3L+_wkXf zg-5oZ{HNP*|H+muS6_JHhULp=PMbD;>a<&~x^Cm@wR;X9Iz2kVBAspRi)PPVJa?{D z!;DobyABVTW?yx|wEyv?7ry(zu^&J7*!^3#u3xrn)2daA=gjGyGNq%f?ZV|NFI>K|;e?Nj zj~_m9;+Z{ro_zlKlf%ORaMilr558g1bsPF#;`46F0b;-y!PMWXl#>ZXrgfEm`R3VQ zxbxU|e)`<6zTr|uP*REnxUMLQLC2sYND?S%FexYkECVs5oYS4$5FecnyI4Pam(j`% zYI1OsC=o(L2oy~dB@7nUOlyQCd%4h}^;?V> z=dC9U!UmB9VC|Cmi)PO_aOl96XP&wKiYtsUCQWVQVQJH(bu-X$x)N{MKlIQG16vOc z9UrL?Vx%cjl$GPzp|qFO54Ik8Ig24wN{&MTKqzjoD( z)w8FZYsW4kJCBY&@WR06T_^URtZ0R0m7CCf`-#KP^$-8TWecxdKAq0xsZWj7|Llj` zj}F()(YLCBQsuKal9-d4#5Lzquu8vBXqy%w$yPnb4(b=Ie!oHra6sVpUPFWF^BZY)Z z7xl`b-qGRl%5ZJL!X**$yjcql9@>u>+pfXhQGpkvgj5li6AQ?hGfW-`h`}yR!6q39 z&~3(Fp2!^BcZ9@f$BrhaF`z;~w%Wv8wqfNYf}%(aThmn`%c}Plec%(L@_`<6ULskO z_`r25m!nu8E3J^6=O#HT83H6CWxr42XQNcOIoagd!Xg63ASfUPA#ry-qmTd)F@i=h z%+`t9l|L-NVuab!tJW^=WoATTMB+?G&fsFp8P1r0wQzR#u7kq|4jo!LZ=Pia z6aopdQa{|!sr``VG!RPnvdF2&Xj3Ty`N?BJE1}ijg zk=emyKU|IDTD6Kq`wkuifF<*~MHm=3P12x*Q&B0*i?i=*YIpgAZ{PIEzkR5GaI~x3 zTQ%|6c&)dyt)z85Vb^wGhP(yolBB#XE+gk|vSGnUz5+x*A;4y6-38Mi5t1TMRMNU# zN99OIWnC)kC@SkHBCT|rCXAGmlA}^uSQIE_i$a1V1p(2d9mXf3gg{7>F-nOb8&fKm z(gcNp8CZnbXrq-e_Bp{>hy|{%MIx2FsM@U&>&Tfvt|rtHWPaSt2=Q zF@f1Bx37ra`W~%z0fdm)1&{`}MK)p~XUqi7Xxk;87q(z*poO*uFY;$QL*#kOnGFX3 zQv+<_ru^)UzzSUO29)58bTIElh=8QXw{Z4cC~r$ljn9Tb$cW`(qn*b{!-UrVnoTnU zW*`CDbhXkUWMo?ML3rlGYyxcK+V*s#i+j9UgudiLCs7ylm89z2GoAT8^-1Lq6 zj(qti{ZH;Xe(^jr==kxyM~>|2 z?;kjQ+CIrUZ=CmucdzJb*AmcRB+p2-^ig2r#JM&jL5f`my1`i{v9_EzAhgUl_eI1e zG_CcNsQl>{@x;!ZeLX!3X3d(@*Voh8+1}Qsh(x5GB%|Zw zCr+O}bo}_SQ>WrI1%Ovv)c2O_=f3``Suf+M7XeO%y@jsd%`-;kt1h1Pg*%Vk`_$fd z-@E}qB2pNkRFZZAg*6}rHrY}OAb`>!=n5DT8%kr0h-I=GK>(7*@;#HpvM@2&{@i!^ zOF(m=S%TN;^Qq{IHUQu#?`_Jqb@!Ij4O zl5IK2KZW-)#p2PBm*0!GfdBwlyJW$EV*}s+$xp7k>@xN(N17x$O^q>RjIB;sVBg8{ zokvHWI57D1q0<8+brvZ{>dYvCCOkDB-~M#}2d-(1g?aO)d3Qf|?C9w#BG`cQzOM4+ z7tDUe>Y3~3Pi;SU;l!cA$|Ji^-M{O^u45x(^|Y*2dr38q=yn|&{p0UFcgf=3w_LJd zh6gM6M<}46#yuutmpthkPt{Cr(mqYlF8boB7;zB@*_^! zSWUjor2v5Eb{{%AFm%V;R`%Wf*x@bPwq3n(qg8Y` zV0L0>&PGjL}orcG9rkBBO^Qa>;Zramh{?@4KT1tO;XQ7;YjNO_AVkKw_dyKo=5lHv*l?2 z(AexL<>9gM>a?!1R%w!2piMAf$M|bkp#VBy!+LuPqH8}~@C!Oe+&nER?_rz`taHS& zB>^d=N?JvVqDYn6lrEQ*);iKkmo!DBOIm4E8jvET0U))SaJH@9g>rA?V&&hj)|ivf8$dB&yk1p)f;Tb4P9VZczq8^bkn2mvJG zOFpk-Cm+G>Na>As%fa)68Nxp8Tw0JY#54FjjFSt~F}R7cL`A22AsZ*x_pe<5PN?vdw$l`S5XV!bX^%Zm9`ii+feB{IrA36SmhmSvh z@Zjmu(Gx>M(|dZlIyy>GgaD~Am0E3RboB7Rz|m8u#wwNTHuPP0Vc%P>pEI>93Y!gQ z7oNI5(}ax?W4*#nPJ(rdr(`;6D;ESJufb8M6e>kZyT914kV{D^bRaGFf(w^U`O6Po z@L%7x{L|mq`{ld)2Tq^PI;At5iub&F{)S~!Ufwei!8|RIiL+9{ z#`_X!*EBE)04m0SZfHl{>{r`d9|FLxkF-z7){@qCovr}|G1j895!N$)v>Ieo2HXHH zA|#{|Q3hNf3aI*~u>tBDCZzW|I$c5zyFMl+v8!X0sU-2w9jIgn$vq0Klfz zOYV61$%mhMYR`cK%a<%MX__X9P7)Kx97R>Z?I%t@y6^P%qa%j~tE2T45z1P%l_qO^ z+ZNFew;p-JMf3W)3UEhHd+8T0U-YLxcy9TOu1l8mZd%-X!MvW{&U20ddExlzwnL{M z*?n@y(UIXwq7{}jos}`QW&hw4`v)&s()Y?WGcTM!b$WMe(#Uu{y>I7

~*j(&{a|U3)`jt1o{Ng(we{%Hb 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 vuS+ltl-`ve@%vqG6y|d3@eFecQHrHh{gt%8z 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 (2-_ZMMS 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

Uq7(JbZ#2v$|Z8eHnCm3w!vAVpzZZeUOX;3u&D+ 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 I)oM|;Lxh8yPB$RNNAOD`K; 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 diff --git a/addons/loggie/assets/updater_bg.png.import b/addons/loggie/assets/updater_bg.png.import deleted file mode 100644 index 81cb406..0000000 --- a/addons/loggie/assets/updater_bg.png.import +++ /dev/null @@ -1,40 +0,0 @@ -[remap] - -importer="texture" -type="CompressedTexture2D" -uid="uid://cgh6hd3u8nlpj" -path="res://.godot/imported/updater_bg.png-c90bec38cc1681b029907f694c893180.ctex" -metadata={ -"vram_texture": false -} - -[deps] - -source_file="res://addons/loggie/assets/updater_bg.png" -dest_files=["res://.godot/imported/updater_bg.png-c90bec38cc1681b029907f694c893180.ctex"] - -[params] - -compress/mode=0 -compress/high_quality=false -compress/lossy_quality=0.7 -compress/uastc_level=0 -compress/rdo_quality_loss=0.0 -compress/hdr_compression=1 -compress/normal_map=0 -compress/channel_pack=0 -mipmaps/generate=false -mipmaps/limit=-1 -roughness/mode=0 -roughness/src_normal="" -process/channel_remap/red=0 -process/channel_remap/green=1 -process/channel_remap/blue=2 -process/channel_remap/alpha=3 -process/fix_alpha_border=true -process/premult_alpha=false -process/normal_map_invert_y=false -process/hdr_as_srgb=false -process/hdr_clamp_exposure=false -process/size_limit=0 -detect_3d/compress_to=1 diff --git a/addons/loggie/channels/custom_channels/template.gd.example b/addons/loggie/channels/custom_channels/template.gd.example deleted file mode 100644 index 25bcc99..0000000 --- a/addons/loggie/channels/custom_channels/template.gd.example +++ /dev/null @@ -1,28 +0,0 @@ -extends LoggieMsgChannel - -func _init() -> void: - self.ID = "" - - # Example - Customize preprocess flags: - # self.preprocess_flags = LoggieEnums.PreprocessStep.APPEND_TIMESTAMPS | LoggieEnums.PreprocessStep.APPEND_DOMAIN_NAME | LoggieEnums.PreprocessStep.APPEND_CLASS_NAME - -func send(msg : LoggieMsg, msg_type : LoggieEnums.MsgType): - # Validate that the message is coming from a valid logger if you are going to be requiring access to a [Loggie] instance. - var loggie = msg.get_logger() # Access a [Loggie] instance directly from the message. - if loggie == null: - push_error("Attempt to send a message that's coming from an invalid logger.") - return - - # To access the most recently preprocessed version of the message - use: - # msg.last_preprocess_result - - # To access a string version of the message (no preprocessing) - use: - var msg_text = msg.string() - - # Optionally - # We can use `LoggieTools.convert_string_to_format_mode` to apply one of the Loggie format modes to it. - # Explore more functions in [LoggieTools] and [LoggieMsg]. - # var converted = LoggieTools.convert_string_to_format_mode(msg.last_preprocess_result, loggie.settings.msg_format_mode) - - # Do something with the message. - print(msg_text) diff --git a/addons/loggie/channels/discord.gd b/addons/loggie/channels/discord.gd deleted file mode 100644 index ead09ae..0000000 --- a/addons/loggie/channels/discord.gd +++ /dev/null @@ -1,75 +0,0 @@ -class_name DiscordLoggieMsgChannel extends LoggieMsgChannel - -const discord_msg_character_limit = 2000 # The max. amount of characters the content of the message can contain before discord refuses to post it. -var debug_domain = "_d_loggie_discord" -var debug_enabled = false - -func _init() -> void: - self.ID = "discord" - self.preprocess_flags = 0 # For this type of channel, this will be applied dynamically by Loggie after it loads LoggieSettings. - -func send(msg : LoggieMsg, msg_type : LoggieEnums.MsgType): - # Validate variables. - var loggie = msg.get_logger() - if loggie == null: - push_error("Attempt to send a message that's coming from an invalid logger.") - return - - # Wait until loggie is inside tree so that we can use add_child(http) on it without errors. - if !loggie.is_inside_tree(): - loggie.tree_entered.connect(func(): - send(msg, msg_type) - , CONNECT_ONE_SHOT) - return - - var webhook_url = loggie.settings.discord_webhook_url_live if loggie.is_in_production() else loggie.settings.discord_webhook_url_dev - if webhook_url == null or (webhook_url is String and webhook_url.is_empty()): - push_error("Attempt to send a message to the Discord channel with an invalid webhook_url.") - return - - var output_text = LoggieTools.convert_string_to_format_mode(msg.last_preprocess_result, LoggieEnums.MsgFormatMode.MARKDOWN) - - # Chunk the given string into chunks of maximum supported size by Discord, so we don't end up hitting the character limit - # which would prevent the message from getting posted. - var chunks = LoggieTools.chunk_string(output_text, discord_msg_character_limit) - if chunks.size() > 1: - loggie.debug("Chunking a long (", output_text.length(), "length ) message while sending to Discord into:", chunks.size(), "chunks.") - for chunk : String in chunks: - call_deferred("send_post_request", loggie, chunk, webhook_url) - -func send_post_request(logger : Variant, output_text : String, webhook_url : String): - # Enable debug messages if configured. - logger.set_domain_enabled(debug_domain, debug_enabled) - - # Create a new HTTPRequest POST request that will be sent to Discord and add it into the scenetree. - var http = HTTPRequest.new() - logger.add_child(http) - - # When the request is completed, destroy it. - http.request_completed.connect(func(result, response_code, headers, body): - var debug_msg = logger.msg("HTTP Request Completed:").color(Color.ORANGE).header().domain(debug_domain).channel("terminal") - debug_msg.nl().msg("Result:").color(Color.ORANGE).bold().space().msg(result).nl() - debug_msg.msg("Response Code:").color(Color.ORANGE).bold().space().msg(response_code).nl() - debug_msg.msg("Headers:").color(Color.ORANGE).bold().space().msg(headers).nl() - debug_msg.msg("Body:").color(Color.ORANGE).bold().space().msg(body) - debug_msg.debug() - - ## Inform the user about a received non-success response code. - if response_code < 200 or response_code > 299: - logger.msg("Discord responded with a non-success code: ").bold().msg(response_code, " - This is an indicator that something about the message you tried to send to Discord does not comply with their request body standards (e.g. content is too long, invalid format, etc.)").channel("terminal").warn() - - http.queue_free() - ) - - # Convert the [LoggieMsg]'s contents into markdown and post that to the target webhook url. - var json = JSON.stringify({"content": output_text}) - var header = ["Content-Type: application/json"] - - # Construct debug message. - if debug_enabled: - var debug_msg_post = logger.msg("Sending POST Request:").color(Color.CORNFLOWER_BLUE).header().channel("terminal").domain(debug_domain).nl() - debug_msg_post.msg("JSON stringified (length {size}):".format({"size": output_text.length()})).color(Color.LIGHT_SLATE_GRAY).bold().space().msg(json).color(Color.SLATE_GRAY) - debug_msg_post.debug() - - # Send the request. - http.request(webhook_url, header, HTTPClient.METHOD_POST, json) diff --git a/addons/loggie/channels/discord.gd.uid b/addons/loggie/channels/discord.gd.uid deleted file mode 100644 index 27dea4b..0000000 --- a/addons/loggie/channels/discord.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://byj005gxsloio diff --git a/addons/loggie/channels/slack.gd b/addons/loggie/channels/slack.gd deleted file mode 100644 index b380105..0000000 --- a/addons/loggie/channels/slack.gd +++ /dev/null @@ -1,65 +0,0 @@ -class_name SlackLoggieMsgChannel extends LoggieMsgChannel - -var debug_domain = "_d_loggie_slack" -var debug_enabled = false - -func _init() -> void: - self.ID = "slack" - self.preprocess_flags = 0 # For this type of channel, this will be applied dynamically by Loggie after it loads LoggieSettings. - -func send(msg : LoggieMsg, msg_type : LoggieEnums.MsgType): - # Validate variables. - var loggie = msg.get_logger() - if loggie == null: - push_error("Attempt to send a message that's coming from an invalid logger.") - return - - # Wait until loggie is inside tree so that we can use add_child(http) on it without errors. - if !loggie.is_inside_tree(): - loggie.tree_entered.connect(func(): - send(msg, msg_type) - , CONNECT_ONE_SHOT) - return - - var webhook = loggie.settings.slack_webhook_url_live if loggie.is_in_production() else loggie.settings.slack_webhook_url_dev - if webhook == null or (webhook is String and webhook.is_empty()): - push_error("Attempt to send a message to the Slack channel with an invalid webhook.") - return - - # Enable debug messages if configured. - loggie.set_domain_enabled(debug_domain, debug_enabled) - - # Create a new HTTPRequest POST request that will be sent to Slack and add it into the scenetree. - var http = HTTPRequest.new() - loggie.add_child(http) - - # When the request is completed, destroy it. - http.request_completed.connect(func(result, response_code, headers, body): - var debug_msg = loggie.msg("HTTP Request Completed:").color(Color.ORANGE).header().domain(debug_domain) - debug_msg.nl().msg("Result:").color(Color.ORANGE).bold().space().msg(result).nl() - debug_msg.msg("Response Code:").color(Color.ORANGE).bold().space().msg(response_code).nl() - debug_msg.msg("Headers:").color(Color.ORANGE).bold().space().msg(headers).nl() - debug_msg.msg("Body:").color(Color.ORANGE).bold().space().msg(body) - debug_msg.debug() - - ## Inform the user about a received non-success response code. - if response_code < 200 or response_code > 299: - loggie.msg("Slack responded with a non-success code: ").bold().msg(response_code, " - This is an indicator that something about the message you tried to send to Slack does not comply with their request body standards (e.g. content is too long, invalid format, etc.)").channel("terminal").warn() - - http.queue_free() - ) - - # Convert the [LoggieMsg]'s contents into markdown and post that to the target webhook url. - var md_text = LoggieTools.convert_string_to_format_mode(msg.last_preprocess_result, LoggieEnums.MsgFormatMode.PLAIN) - var json = JSON.stringify({"text": md_text}) - var header = ["Content-Type: application/json"] - - # Construct debug message. - if debug_enabled: - var debug_msg_post = loggie.msg("Sending POST Request:").color(Color.ORANGE).header().domain(debug_domain).nl() - debug_msg_post.msg("Preprocessed message:").color(Color.ORANGE).bold().space().msg(msg.last_preprocess_result).nl() - debug_msg_post.msg("JSON stringified:").color(Color.ORANGE).bold().space().msg(json) - debug_msg_post.debug() - - # Send the request. - http.request(webhook, header, HTTPClient.METHOD_POST, json) diff --git a/addons/loggie/channels/slack.gd.uid b/addons/loggie/channels/slack.gd.uid deleted file mode 100644 index 606adb9..0000000 --- a/addons/loggie/channels/slack.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://dj1jdugf244ho diff --git a/addons/loggie/channels/terminal.gd b/addons/loggie/channels/terminal.gd deleted file mode 100644 index 572ba64..0000000 --- a/addons/loggie/channels/terminal.gd +++ /dev/null @@ -1,21 +0,0 @@ -class_name TerminalLoggieMsgChannel extends LoggieMsgChannel - -func _init() -> void: - self.ID = "terminal" - self.preprocess_flags = 0 # For this type of channel, this will be applied dynamically by Loggie after it loads LoggieSettings. - -func send(msg : LoggieMsg, msg_type : LoggieEnums.MsgType): - var loggie = msg.get_logger() - var text = LoggieTools.convert_string_to_format_mode(msg.last_preprocess_result, loggie.settings.msg_format_mode) - - match loggie.settings.msg_format_mode: - LoggieEnums.MsgFormatMode.ANSI, LoggieEnums.MsgFormatMode.BBCODE: - print_rich(text) - LoggieEnums.MsgFormatMode.PLAIN, _: - print(text) - - # Dump a non-preprocessed terminal-ready version of the message in additional ways if that has been configured. - if msg_type == LoggieEnums.MsgType.ERROR and loggie.settings.print_errors_to_console: - push_error(LoggieTools.convert_string_to_format_mode(msg.string(), LoggieEnums.MsgFormatMode.PLAIN)) - if msg_type == LoggieEnums.MsgType.WARN and loggie.settings.print_warnings_to_console: - push_warning(LoggieTools.convert_string_to_format_mode(msg.string(), LoggieEnums.MsgFormatMode.PLAIN)) diff --git a/addons/loggie/channels/terminal.gd.uid b/addons/loggie/channels/terminal.gd.uid deleted file mode 100644 index dcaecb0..0000000 --- a/addons/loggie/channels/terminal.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://cd82p0vffosco diff --git a/addons/loggie/custom_settings.gd.example b/addons/loggie/custom_settings.gd.example deleted file mode 100644 index 35f066e..0000000 --- a/addons/loggie/custom_settings.gd.example +++ /dev/null @@ -1,52 +0,0 @@ -class_name CustomLoggieSettings extends LoggieSettings - -func load(): - # Omit settings from here to have them use their default value instead. - # Otherwise, directly set the value of the setting to your liking. - # Any variable in [LoggieSettings] except `project_settings` is a valid target to alter. - # You could also have them loaded here in some custom way, for example, from a .json or .ini file. - # See the documentation of the [LoggieSettings] class to see all available options and their descriptions. - # This template doesn't contain *all* the available options. - - # Example: Customize Loggie preferences. - self.update_check_mode = LoggieEnums.UpdateCheckType.CHECK_AND_SHOW_UPDATER_WINDOW - self.msg_format_mode = LoggieEnums.MsgFormatMode.BBCODE - self.log_level = LoggieEnums.LogLevel.INFO - self.show_loggie_specs = LoggieEnums.ShowLoggieSpecsMode.ESSENTIAL - self.show_system_specs = true - self.enforce_optimal_settings_in_release_build = true - - # Example: Customize logging settings. - self.print_errors_to_console = true - self.print_warnings_to_console = true - self.nameless_class_name_proxy = LoggieEnums.NamelessClassExtensionNameProxy.BASE_TYPE - self.timestamps_use_utc = true - - # Example: Customize formats. - self.format_info_msg = "{msg}" - self.format_notice_msg = "[b][color=cyan][NOTICE]:[/color][/b] {msg}" - self.format_warning_msg = "[b][color=orange][WARN]:[/color][/b] {msg}" - self.format_error_msg = "[b][color=red][ERROR]:[/color][/b] {msg}" - self.format_debug_msg = "[b][color=pink][DEBUG]:[/color][/b] {msg}" - - # Example: Customize boxes. - self.h_separator_symbol = "-" - self.box_characters_mode = LoggieEnums.BoxCharactersMode.COMPATIBLE - - self.box_symbols_compatible = { - "top_left" : "-", - "top_right" : "-", - "bottom_left" : "-", - "bottom_right" : "-", - "h_line" : "-", - "v_line" : ":", - } - - self.box_symbols_pretty = { - "top_left" : "┌", - "top_right" : "┐", - "bottom_left" : "└", - "bottom_right" : "┘", - "h_line" : "─", - "v_line" : "│", - } diff --git a/addons/loggie/loggie.gd b/addons/loggie/loggie.gd deleted file mode 100644 index 09da21a..0000000 --- a/addons/loggie/loggie.gd +++ /dev/null @@ -1,310 +0,0 @@ -@tool - -## Loggie is a basic logging utility for those who need common minor improvements and helpers around the basic [method print], [method print_rich] -## and other default Godot printing functions. Loggie creates instances of [LoggieMsg], which are a wrapper around a string that needs to manipulated, -## then uses them to properly format, arrange and present them in the console and .log files. Loggie uses the default Godot logging mechanism under the hood. -extends Node - -## The current version of Loggie. -## Needs to be updated manually when changing the version. -var version : LoggieVersion = LoggieVersion.new(3,0) - -## Emitted any time Loggie attempts to log a message. -## Useful for capturing the messages that pass through Loggie. -## [br][param msg] is the message Loggie attempted to log (before any preprocessing). -## [br][param msg_string] is a shortcut providing the string content of that message. -## [br][param result] describes the final result of the attempt to log that message. -signal log_attempted(msg : LoggieMsg, msg_string : String, result : LoggieEnums.LogAttemptResult) - -## A reference to the settings of this Loggie. Read more about [LoggieSettings]. -var settings : LoggieSettings - -## Holds a mapping between all registered domains (string keys) and bool values representing whether -## those domains are currently enabled. Enable domains with [method set_domain_enabled]. -## You can then place [LoggieMsg] messages into a domain by calling [method LoggieMsg.domain]. -## Messages belonging to a disabled domain will never be outputted. -var domains : Dictionary = {} - -## Holds a mapping between script paths and the names of the classes defined in those scripts. -var class_names : Dictionary = {} - -## Holds a mapping between channel IDs (string) and the -## [LoggieMsgChannel] objects those IDs are representing. -var available_channels = {} - -## Stores a reference to a [LoggieVersionManager] that will be used to manage the -## version of this instance. -var version_manager : LoggieVersionManager = LoggieVersionManager.new() - -## Stores a reference to each [LoggiePreset] that was created. -## The key is the ID (string) of the preset, and the value is the [LoggieMsg] that was saved as a preset. -var presets : Dictionary = {} - -func _init() -> void: - # Connect the version manager to this logger. - version_manager.connect_logger(self) - - # Load and initialize the settings. - var uses_original_settings_file = true - var default_settings_path = get_script().get_path().get_base_dir().path_join("loggie_settings.gd") - var custom_settings_path = get_script().get_path().get_base_dir().path_join("custom_settings.gd") - - if self.settings == null: - if custom_settings_path != null and custom_settings_path != "" and ResourceLoader.exists(custom_settings_path): - var loaded_successfully = load_settings_from_path(custom_settings_path) - if loaded_successfully: - uses_original_settings_file = false - - if uses_original_settings_file: - var _settings = ResourceLoader.load(default_settings_path) - if _settings != null: - self.settings = _settings.new() - self.settings.load() - else: - push_error("Loggie loaded neither a custom nor a default settings file. This will break the plugin. Make sure that a valid loggie_settings.gd is in the same directory where loggie.gd is.") - return - - # Enforce certain settings if configured to do so. - if self.settings.enforce_optimal_settings_in_release_build == true and is_in_production(): - apply_production_optimal_settings() - - # Set the default custom string converter. - self.settings.custom_string_converter = LoggieTools.convert_to_string - - # Install all the built-in channels. - var terminal_channel : TerminalLoggieMsgChannel = load("res://addons/loggie/channels/terminal.gd").new() - terminal_channel.preprocess_flags = self.settings.preprocess_flags_terminal_channel - add_channel(terminal_channel) - var discord_channel : DiscordLoggieMsgChannel = load("res://addons/loggie/channels/discord.gd").new() - discord_channel.preprocess_flags = self.settings.preprocess_flags_discord_channel - add_channel(discord_channel) - var slack_channel : SlackLoggieMsgChannel = load("res://addons/loggie/channels/slack.gd").new() - slack_channel.preprocess_flags = self.settings.preprocess_flags_slack_channel - add_channel(slack_channel) - - # Already cache the name of the singleton found at loggie's script path. - class_names[self.get_script().resource_path] = LoggieSettings.loggie_singleton_name - - # Prepopulate class data from ProjectSettings to avoid needing to read files. - if OS.has_feature("debug"): - for class_data: Dictionary in ProjectSettings.get_global_class_list(): - class_names[class_data.path] = class_data.class - - for autoload_setting: String in ProjectSettings.get_property_list().map(func(prop): return prop.name).filter(func(prop): return prop.begins_with("autoload/") and ProjectSettings.has_setting(prop)): - var autoload_class: String = autoload_setting.trim_prefix("autoload/") - var class_path: String = ProjectSettings.get_setting(autoload_setting) - class_path = class_path.trim_prefix("*") - if not class_names.has(class_path): - class_names[class_path] = autoload_class - - # And don't proceed further if we're in Editor mode, since we don't need to show loggie boot messages in that case. - if Engine.is_editor_hint(): - return - - # Print the Loggie boot messages. - if self.settings.show_loggie_specs != LoggieEnums.ShowLoggieSpecsMode.DISABLED: - msg("👀 Loggie {version}{isproxy} booted.".format({ - "version" : self.version_manager.version, - "isproxy" : " (proxy for {original})".format({"original": self.version_manager.version.proxy_for}) if self.version_manager.version.proxy_for != null else "" - })).color(Color.ORANGE).header().nl().info() - var loggie_specs_msg = LoggieSystemSpecsMsg.new().use_logger(self) - loggie_specs_msg.add(msg("|\t Using Custom Settings File: ").bold(), !uses_original_settings_file).nl().add("|\t ").hseparator(35).nl() - - match self.settings.show_loggie_specs: - LoggieEnums.ShowLoggieSpecsMode.ESSENTIAL: - loggie_specs_msg.embed_essential_logger_specs() - LoggieEnums.ShowLoggieSpecsMode.ADVANCED: - loggie_specs_msg.embed_advanced_logger_specs() - - loggie_specs_msg.preprocessed(false).info() - - if self.settings.show_system_specs: - var system_specs_msg = LoggieSystemSpecsMsg.new().use_logger(self) - system_specs_msg.embed_specs().preprocessed(false).info() - -## Attempts to instantiate and use a LoggieSettings object from the script at the given [param path]. -## Returns true if successful, otherwise false and prints an error. -func load_settings_from_path(path : String) -> bool: - var settings_resource = ResourceLoader.load(path) - var settings_instance - - if settings_resource != null: - settings_instance = settings_resource.new() - - if (settings_instance is LoggieSettings): - self.settings = settings_instance - self.settings.load() - return true - else: - push_error("Unable to instantiate a LoggieSettings object from the script at path {path}. Check that loggie.gd -> custom_settings_path is pointing to a valid .gd script that contains the class definition of a class that either extends LoggieSettings, or is LoggieSettings.".format({"path": path})) - return false - -## Checks if Loggie is running in production (release) mode of the game. -## While it is, every [LoggieMsg] will have plain output. -## Uses a sensible default check for most projects, but -## you can rewrite this function to your needs if necessary. -## TODO: Port this out of Loggie into LoggieSettings so users can override it easier. -func is_in_production() -> bool: - return OS.has_feature("release") - -## Returns a custom list of channels that messages from the given [param domain_name] will be sent to. -## This list can be set through the [method set_domain_enabled] method. -## If the list is empty, default channels will be used. -func get_domain_custom_target_channels(domain_name : String) -> Array: - if domains.has(domain_name): - return domains[domain_name].custom_target_channels - return [] - -## Sets whether the domain with the given name is enabled. -## If [param custom_target_channels] is provided, it will be used as the list of channels that messages from the given domain will be sent to. -## It can be provided as a string (if only one channel is used), or an array of strings (if multiple channels are used). -## Otherwise, the default channels will be used. -func set_domain_enabled(domain_name : String, enabled : bool, custom_target_channels : Variant = []) -> void: - var pruned_target_channels = [] - - if custom_target_channels is String: - custom_target_channels = [custom_target_channels] - - # Prune the array to ensure only string content is used. - if custom_target_channels is Array: - for entry in custom_target_channels: - if entry is String or entry is StringName: - pruned_target_channels.push_back(entry) - else: - push_error("Attempt to set a custom target channel for domain {domain_name} with an invalid value: {custom_target_channels}. The value must be a string or an array of strings. Default channels will be used instead.".format({ - "domain_name": domain_name, - "custom_target_channels": custom_target_channels - })) - - domains[domain_name] = {"enabled": enabled, "custom_target_channels": pruned_target_channels} - -## Checks whether the domain with the given name is enabled. -## The domain name "" (empty string) is the default one for all newly created messages, -## and is designed to always be enabled. -func is_domain_enabled(domain_name : String) -> bool: - if domain_name == "": - return true - - if domains.has(domain_name) and domains[domain_name].enabled == true: - return true - - return false - -## Returns an available channel with the given ID (if one exists), otherwise null. -func get_channel(channel_id : String) -> LoggieMsgChannel: - if available_channels.has(channel_id): - return available_channels[channel_id] - return null - -## Adds a new channel for sending messages to. -## Multiple channels with the same ID can not be added, so make sure your ID -## does not clash with one of the existing channels' IDs, which are: -## [param terminal], [param discord], [param slack]. -func add_channel(channel : LoggieMsgChannel): - if not available_channels.has(channel.ID): - available_channels[channel.ID] = channel - else: - push_error("Attempt to add a channel with ID {ID} failed, a channel with that ID already exists in Loggie.".format({ - "ID": channel.ID - })) - -## Gets a [LoggiePreset] message with the given ID, or creates one if it doesn't exist and returns it. -## The ID cannot be an empty string. -func preset(id : String) -> LoggiePreset: - if id.is_empty(): - push_error("Attempt to create or get a LoggiePreset with an empty ID - not allowed.") - return null - - if presets.has(id): - return presets[id] - else: - var newPreset : LoggiePreset = LoggiePreset.new() - newPreset.use_logger(self) - presets[id] = newPreset - return newPreset - -## Creates a new [LoggieMsg] out of the given [param msg] and extra arguments (by converting them to strings and concatenating them to the msg). -## You may continue to modify the [LoggieMsg] with additional functions from that class, then when you are ready to output it, use methods like: -## [method LoggieMsg.info], [method LoggieMsg.warn], etc. -func msg(message = "", arg1 = null, arg2 = null, arg3 = null, arg4 = null, arg5 = null) -> LoggieMsg: - var loggieMsg = LoggieMsg.new(message, arg1, arg2, arg3, arg4, arg5) - loggieMsg.use_logger(self) - return loggieMsg - -## A shortcut method that instantly creates a [LoggieMsg] with the given arguments and outputs it at the info level. -## Can be used when you have no intention of customizing a LoggieMsg in any way using helper methods. -## For customization, use [method msg] instead. -func info(message = "", arg1 = null, arg2 = null, arg3 = null, arg4 = null, arg5 = null) -> LoggieMsg: - return msg(message, arg1, arg2, arg3, arg4, arg5).info() - -## A shortcut method that instantly creates a [LoggieMsg] with the given arguments and outputs it at the warn level. -## Can be used when you have no intention of customizing a LoggieMsg in any way using helper methods. -## For customization, use [method msg] instead. -func warn(message = "", arg1 = null, arg2 = null, arg3 = null, arg4 = null, arg5 = null) -> LoggieMsg: - return msg(message, arg1, arg2, arg3, arg4, arg5).warn() - -## A shortcut method that instantly creates a [LoggieMsg] with the given arguments and outputs it at the error level. -## Can be used when you have no intention of customizing a LoggieMsg in any way using helper methods. -## For customization, use [method msg] instead. -func error(message = "", arg1 = null, arg2 = null, arg3 = null, arg4 = null, arg5 = null) -> LoggieMsg: - return msg(message, arg1, arg2, arg3, arg4, arg5).error() - -## A shortcut method that instantly creates a [LoggieMsg] with the given arguments and outputs it at the debug level. -## Can be used when you have no intention of customizing a LoggieMsg in any way using helper methods. -## For customization, use [method msg] instead. -func debug(message = "", arg1 = null, arg2 = null, arg3 = null, arg4 = null, arg5 = null) -> LoggieMsg: - return msg(message, arg1, arg2, arg3, arg4, arg5).debug() - -## A shortcut method that instantly creates a [LoggieMsg] with the given arguments and outputs it at the notice level. -## Can be used when you have no intention of customizing a LoggieMsg in any way using helper methods. -## For customization, use [method msg] instead. -func notice(message = "", arg1 = null, arg2 = null, arg3 = null, arg4 = null, arg5 = null) -> LoggieMsg: - return msg(message, arg1, arg2, arg3, arg4, arg5).notice() - -## Returns the path to the directory from which within this script is running. -func get_directory_path() -> String: - return get_script().resource_path.get_base_dir() - -## Returns a [LoggieMsg] that comes inserted with stylized content describing the stack trace obtained via [method get_stack]. -## This function only works in debug builds, and on the main thread, because it uses [method get_stack]. -## Read more about why in that function's documentation. -func stack() -> LoggieMsg: - if !OS.has_feature("debug"): - return msg() - - const FALLBACK_TXT_TO_FORMAT = "{index}: {fn_name}:{line} (in {source_path})" - var stack = get_stack() - var stack_msg = msg() - - var text_to_format = settings.format_stacktrace_entry if is_instance_valid(settings) else FALLBACK_TXT_TO_FORMAT - - stack.reverse() - - for index in stack.size(): - var file_name = stack[index].source.get_file().get_basename() - - if settings.skipped_filenames_in_stack_trace.has(file_name): - continue - - var entry_msg = LoggieMsg.new() - entry_msg.add(text_to_format.format({ - "index": index, - "source_path": stack[index].source, - "fn_name": stack[index].function, - "line": stack[index].line - })) - - if index == 0 or index < stack.size(): - entry_msg.prefix("\n ") - entry_msg.endseg() - - stack_msg.add(entry_msg) - - return stack_msg - -## Changes the values of certain members of [member settings] to values which are optimal for -## use in production builds. Used when [member LoggieSettings.enforce_optimal_settings_in_release_build] -## needs to be enforced. -func apply_production_optimal_settings(): - self.settings.msg_format_mode = LoggieEnums.MsgFormatMode.PLAIN - self.settings.box_characters_mode = LoggieEnums.BoxCharactersMode.COMPATIBLE diff --git a/addons/loggie/loggie.gd.uid b/addons/loggie/loggie.gd.uid deleted file mode 100644 index a77b9fa..0000000 --- a/addons/loggie/loggie.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://bmh2auo806k0k diff --git a/addons/loggie/loggie_message.gd b/addons/loggie/loggie_message.gd deleted file mode 100644 index 4b67313..0000000 --- a/addons/loggie/loggie_message.gd +++ /dev/null @@ -1,566 +0,0 @@ -@tool - -## LoggieMsg represents a mutable object that holds an array of strings ([member content]) [i](referred to as 'content segments')[/i], and -## a bunch of helper methods that make it easy to manipulate these segments and chain together additions and changes to them. -## [br][br]For example: -## [codeblock] -### Prints: "Hello world!" at the INFO debug level. -##var msg = LoggieMsg.new("Hello world").color(Color.RED).suffix("!").info() -##[/codeblock] -## [br] You can also use [method Loggie.msg] to quickly construct a message. -## [br] Example of usage: -## [codeblock]Loggie.msg("Hello world").color(Color("#ffffff")).suffix("!").info()[/codeblock] -class_name LoggieMsg extends RefCounted - -## The full content of this message. By calling various helper methods in this class, this content is further altered. -## The content is an array of strings which represents segments of the message which are ultimately appended together -## to form the final message. You can start a new segment by calling [method msg] on this class. -## You can then output the whole message with methods like [method info], [method debug], etc. -var content : Array = [""] - -## The segment of [member content] that is currently being edited. -var current_segment_index : int = 0 - -## The (key string) domain this message belongs to. -## "" is the default domain which is always enabled. -## If this message attempts to be outputted, but belongs to a disabled domain, it will not be outputted. -## You can change which domains are enabled in Loggie at any time with [Loggie.set_domain_enabled]. -## This is useful for creating blocks of debugging output that you can simply turn off/on with a boolean when you actually need them. -var domain_name : String = "" - -## Stores a reference to the logger that generated this message, from which we need to read settings and other data. -## This variable should be set with [method use_logger] before an attempt is made to log this message out. -var _logger : Variant - -## Stores an array of IDs of all channels this message should be sent to when being outputted. -var used_channels : Array = ["terminal"] - -## Whether this message should be preprocessed and modified during [method output]. -var preprocess : bool = true - -## Usually, the [LoggieMsgChannel] this message gets outputted on sets the preprocessing steps this message should use. -## But sometimes we may want to use a specific set of preprocessing steps on this message, -## overriding the channel's set of rules. -## In that case, set this variable to the value of the [LoggieEnums.PreprocessStep] flags you want this message to use with -## [method preprocess]. -var custom_preprocess_flags : int = -1 - -## Stores the string which was obtained the last time the [method get_preprocessed] was called on this message. -## You need to call it at least once for this to have any results. -var last_preprocess_result : String = "" - -## Stores the integer value of a [enum LoggieEnums.LogLevel], matching the log level -## this message was most recently outputted at. If value is `-1`, the message was never -## outputted yet. -var last_outputted_at_log_level : int = -1 - -## Whether this message should append the stack trace during preprocessing. -var appends_stack : bool = false - -## Controls whether the [enum LoggieEnums.MsgType] of this message, during [method output], -## will be decided dynamically, based on the [enum LoggieEnums.LogLevel] the message is being output at. -## If disabled, the [member strict_type] will be used instead. -var dynamic_type : bool = true - -## The [LoggieEnums.MsgType] this message will be considered typed as, if [member dynamic_type] is set -## to [param false]. -var strict_type : LoggieEnums.MsgType = LoggieEnums.MsgType.INFO - -## The environment in which this message should be outputted based on the context the output is being requested from. -## (e.g. only in-engine (during tool scripts), or only ingame, or both). -var environment_mode : LoggieEnums.MsgEnvironment = LoggieEnums.MsgEnvironment.BOTH - -## If set to true, the [signal Loggie.log_attempted] signal will not be emitted when this message attempts to be outputted. -var dont_emit_log_attempted_signal : bool = false - -func _init(message = "", arg1 = null, arg2 = null, arg3 = null, arg4 = null, arg5 = null) -> void: - var args = [message, arg1, arg2, arg3, arg4, arg5] - self.content[0] = LoggieTools.concatenate_args(args) - self.set_meta("initial_args", args) - -## Returns a reference to the logger object that created this message. -func get_logger() -> Variant: - return self._logger - -## Sets this message to use the given [param logger] as the logger from which it will be reading -## settings. The given logger should be of class [Loggie] or an extension of it. -func use_logger(logger_to_use : Variant) -> LoggieMsg: - self._logger = logger_to_use - self.used_channels = self._logger.settings.default_channels - - # Now that a logger is connected, we can re-format the first segment - # using that Logger's converter function if it has a custom one defined. - if self.has_meta("initial_args"): - var initial_args = self.get_meta("initial_args") - if initial_args is Array: - var converter_fn = self._logger.settings.custom_string_converter if is_instance_valid(self._logger) and is_instance_valid(self._logger.settings) else null - if converter_fn != LoggieTools.convert_to_string: - self.content[0] = LoggieTools.concatenate_args(initial_args, converter_fn) - self.remove_meta("initial_args") # Clean up. - - return self - -## Sets the list of channels this message should be sent to when outputted. -## [param channels] should either be provided as a single channel ID (String), or -## as an array of channel IDs (Array of strings). -func channel(channels : Variant) -> LoggieMsg: - if typeof(channels) != TYPE_ARRAY and typeof(channels) != TYPE_PACKED_STRING_ARRAY: - channels = [str(channels)] - self.used_channels = channels - return self - -## Returns a processed version of the content of this message, which has modifications applied to -## it based on the requested [param type] and other settings defined by the provided preprocess [param flags]. -## Available preprocess flags are found in [enum LoggieEnums.PreprocessStep]. -func get_preprocessed(flags : int, _level : LoggieEnums.LogLevel, type : LoggieEnums.MsgType) -> String: - var loggie = get_logger() - var message = self.string() - - match type: - LoggieEnums.MsgType.ERROR: - message = loggie.settings.format_error_msg.format({"msg": message}) - LoggieEnums.MsgType.WARN: - message = loggie.settings.format_warning_msg.format({"msg": message}) - LoggieEnums.MsgType.NOTICE: - message = loggie.settings.format_notice_msg.format({"msg": message}) - LoggieEnums.MsgType.INFO: - message = loggie.settings.format_info_msg.format({"msg": message}) - LoggieEnums.MsgType.DEBUG: - message = loggie.settings.format_debug_msg.format({"msg": message}) - - if (flags & LoggieEnums.PreprocessStep.APPEND_DOMAIN_NAME != 0) and !self.domain_name.is_empty(): - message = _apply_format_domain(message) - - if (flags & LoggieEnums.PreprocessStep.APPEND_CLASS_NAME != 0) and OS.has_feature("debug"): - message = _apply_format_class_name(message) - - if (flags & LoggieEnums.PreprocessStep.APPEND_TIMESTAMPS != 0): - message = _apply_format_timestamp(message) - - if self.appends_stack or (loggie.settings.debug_msgs_print_stack_trace and type == LoggieEnums.MsgType.DEBUG): - message = _apply_format_stack(message) - - return message - -## Outputs the given string [param message] at the given output [param level] to the standard output using either [method print_rich] or [method print]. -## The domain from which the message is considered to be coming can be provided via [param target_domain]. -## The message type can be provided via [param msg_type], but it will be ignored if [member dynamic_type] is false, -## in which case, the [member strict_type] will be used. -## It also does a number of changes to the given [param msg] based on various Loggie settings. -## Designed to be called internally. You should consider using [method info], [method error], [method warn], [method notice], [method debug] instead. -func output(level : LoggieEnums.LogLevel, msg_type : LoggieEnums.MsgType = LoggieEnums.MsgType.INFO) -> void: - var loggie = get_logger() - var message = self.string() - var target_domain = self.domain_name - var target_channels = self.used_channels - - if loggie == null: - push_error("Attempt to log output with an invalid _logger. Make sure to call LoggieMsg.use_logger to set the appropriate logger before working with the message.") - return - - if loggie.settings == null: - push_error("Attempt to use a _logger with invalid settings to print: {msg}".format({"msg": message})) - return - - # We don't output the message if the settings dictate that messages of that level shouldn't be outputted. - if level > loggie.settings.log_level: - _emit_log_attempted_signal(LoggieEnums.LogAttemptResult.LOG_LEVEL_INSUFFICIENT) - return - - # We don't output the message if the domain from which it comes is not enabled. - if not loggie.is_domain_enabled(target_domain): - _emit_log_attempted_signal(LoggieEnums.LogAttemptResult.DOMAIN_DISABLED) - return - - # We don't output the message if the environment the output is being requested from is not compatible with - # the environment this message is configured to be outputted in. - match environment_mode: - LoggieEnums.MsgEnvironment.ENGINE: - if not Engine.is_editor_hint(): - _emit_log_attempted_signal(LoggieEnums.LogAttemptResult.WRONG_ENVIRONMENT) - return - LoggieEnums.MsgEnvironment.RUNTIME: - if Engine.is_editor_hint(): - _emit_log_attempted_signal(LoggieEnums.LogAttemptResult.WRONG_ENVIRONMENT) - return - - # Enforce the strict type of this message if it is configured not to allow dynamic type. - if !dynamic_type: - msg_type = strict_type - - # Send the message on all configured channels. - var custom_target_channels = loggie.get_domain_custom_target_channels(target_domain) - if custom_target_channels.size() > 0: - target_channels = custom_target_channels - - for channel_id : String in target_channels: - var channel : LoggieMsgChannel = loggie.get_channel(channel_id) - - if channel == null: - _emit_log_attempted_signal(LoggieEnums.LogAttemptResult.INVALID_CHANNEL) - continue - - # Preprocessing Stage: - # Apply full preprocessing only if explicitly enabled. - # Otherwise, simply concatenate together all the [member content]. - if self.preprocess: - var flags = self.custom_preprocess_flags if self.custom_preprocess_flags != -1 else channel.preprocess_flags - self.last_preprocess_result = get_preprocessed(flags, level, msg_type) - else: - self.last_preprocess_result = self.string() - - self.last_outputted_at_log_level = int(level) - channel.send(self, msg_type) - - # Emit signal deferred so if this is called from a thread, it doesn't cry about it. - _emit_log_attempted_signal(LoggieEnums.LogAttemptResult.SUCCESS, true) - -## Outputs this message from Loggie as an Error type message. -## The [Loggie.settings.log_level] must be equal to or higher to the ERROR level for this to work. -func error() -> LoggieMsg: - output(LoggieEnums.LogLevel.ERROR, LoggieEnums.MsgType.ERROR) - return self - -## Outputs this message from Loggie as an Warning type message. -## The [Loggie.settings.log_level] must be equal to or higher to the WARN level for this to work. -func warn() -> LoggieMsg: - output(LoggieEnums.LogLevel.WARN, LoggieEnums.MsgType.WARN) - return self - -## Outputs this message from Loggie as an Notice type message. -## The [Loggie.settings.log_level] must be equal to or higher to the NOTICE level for this to work. -func notice() -> LoggieMsg: - output(LoggieEnums.LogLevel.NOTICE, LoggieEnums.MsgType.NOTICE) - return self - -## Outputs this message from Loggie as an Info type message. -## The [Loggie.settings.log_level] must be equal to or higher to the INFO level for this to work. -func info() -> LoggieMsg: - output(LoggieEnums.LogLevel.INFO, LoggieEnums.MsgType.INFO) - return self - -## Outputs this message from Loggie as a Debug type message. -## The [Loggie.settings.log_level] must be equal to or higher to the DEBUG level for this to work. -func debug() -> LoggieMsg: - output(LoggieEnums.LogLevel.DEBUG, LoggieEnums.MsgType.DEBUG) - return self - -## Returns the string content of this message. -## If [param segment] is provided, it should be an integer indicating which segment of the message to return. -## If its value is -1, all segments are concatenated together and returned. -func string(segment : int = -1) -> String: - if segment == -1: - return "".join(self.content) - else: - if segment < self.content.size(): - return self.content[segment] - else: - push_error("Attempt to access a non-existent segment of a LoggieMsg. Make sure to use a valid segment index.") - return "" - -## Converts the current content of this message to an ANSI compatible form. -func to_ANSI() -> LoggieMsg: - var new_content : Array = [] - for segment in self.content: - new_content.append(LoggieTools.rich_to_ANSI(segment)) - self.content = new_content - return self - -## Strips all the BBCode in the current content of this message. -func strip_BBCode() -> LoggieMsg: - var new_content : Array = [] - for segment in self.content: - new_content.append(LoggieTools.remove_BBCode(segment)) - self.content = new_content - return self - -## Wraps the content of the current segment of this message in the given color. -## The [param color] can be provided as a [Color], a recognized Godot color name (String, e.g. "red"), or a color hex code (String, e.g. "#ff0000"). -func color(_color : Variant) -> LoggieMsg: - if _color is Color: - _color = _color.to_html() - - self.content[current_segment_index] = "[color={colorstr}]{msg}[/color]".format({ - "colorstr": _color, - "msg": self.content[current_segment_index] - }) - - return self - -## Stylizes the current segment of this message to be bold. -func bold() -> LoggieMsg: - self.content[current_segment_index] = "[b]{msg}[/b]".format({"msg": self.content[current_segment_index]}) - return self - -## Stylizes the current segment of this message to be italic. -func italic() -> LoggieMsg: - self.content[current_segment_index] = "[i]{msg}[/i]".format({"msg": self.content[current_segment_index]}) - return self - -## Makes the current segment of this message a hyperlink to the given [param url]. -## Optionally, you can provide a [param color], as the same type of parameter that [method color] uses, -## to colorize the link. This is a shortcut for additionally calling [method color] on the link. -## [br][br]If the link doesn't work when rendered inside of a [RichTextLabel], you may need to connect to the [signal RichTextLabel.meta_clicked] signal, -## and handle the opening of the link there. Read the docs of that signal for more info. -## [br][br][WARNING]: Appending URLs to messages is potentially dangerous. -## Please read this article for more info: https://docs.godotengine.org/en/latest/tutorials/ui/bbcode_in_richtextlabel.html#handling-user-input-safely -func link(url : String, _color : Variant = null) -> LoggieMsg: - self.content[current_segment_index] = "[url={url}]{msg}[/url]".format({"url": url, "msg": self.content[current_segment_index]}) - if _color: - self.color(_color) - return self - -## Stylizes the current segment of this message as a header. -func header() -> LoggieMsg: - var loggie = get_logger() - self.content[current_segment_index] = loggie.settings.format_header.format({"msg": self.content[current_segment_index]}) - return self - -## Sets whether this message should append the stack trace during preprocessing. -## If used in a different thread, it doesn't work, because it relies on [method get_stack] and -## that method doesn't work within threads. -func stack(enabled : bool = true) -> LoggieMsg: - self.appends_stack = enabled - return self - -## Constructs a decorative box with the given horizontal padding around the current segment -## of this message. Messages containing a box are not going to be preprocessed, so they are best -## used only as a special header or decoration. -func box(h_padding : int = 4) -> LoggieMsg: - var loggie = get_logger() - var stripped_content = LoggieTools.remove_BBCode(self.content[current_segment_index]).strip_edges(true, true) - var content_length = stripped_content.length() - var h_fill_length = content_length + (h_padding * 2) - var box_character_source = loggie.settings.box_symbols_compatible if loggie.settings.box_characters_mode == LoggieEnums.BoxCharactersMode.COMPATIBLE else loggie.settings.box_symbols_pretty - - var top_row_design = "{top_left_corner}{h_fill}{top_right_corner}".format({ - "top_left_corner" : box_character_source.top_left, - "h_fill" : box_character_source.h_line.repeat(h_fill_length), - "top_right_corner" : box_character_source.top_right - }) - - var middle_row_design = "{vert_line}{padding}{content}{space_fill}{padding}{vert_line}".format({ - "vert_line" : box_character_source.v_line, - "content" : self.content[current_segment_index], - "padding" : " ".repeat(h_padding), - "space_fill" : " ".repeat(h_fill_length - stripped_content.length() - h_padding*2) - }) - - var bottom_row_design = "{bottom_left_corner}{h_fill}{bottom_right_corner}".format({ - "bottom_left_corner" : box_character_source.bottom_left, - "h_fill" : box_character_source.h_line.repeat(h_fill_length), - "bottom_right_corner" : box_character_source.bottom_right - }) - - self.content[current_segment_index] = "{top_row}\n{middle_row}\n{bottom_row}\n".format({ - "top_row" : top_row_design, - "middle_row" : middle_row_design, - "bottom_row" : bottom_row_design - }) - - self.preprocessed(false) - return self - -## Appends additional content to this message at the end of the current content and its stylings. -## This does not create a new message segment, just appends to the current one. -func add(message : Variant = null, arg1 : Variant = null, arg2 : Variant = null, arg3 : Variant = null, arg4 : Variant = null, arg5 : Variant = null) -> LoggieMsg: - var converter_fn = self._logger.settings.custom_string_converter if is_instance_valid(self._logger) and is_instance_valid(self._logger.settings) else null - self.content[current_segment_index] = self.content[current_segment_index] + LoggieTools.concatenate_args([message, arg1, arg2, arg3, arg4, arg5], converter_fn) - return self - -## Adds a specified amount of newlines to the end of the current segment of this message. -func nl(amount : int = 1) -> LoggieMsg: - self.content[current_segment_index] += "\n".repeat(amount) - return self - -## Adds a specified amount of spaces to the end of the current segment of this message. -func space(amount : int = 1) -> LoggieMsg: - self.content[current_segment_index] += " ".repeat(amount) - return self - -## Adds a specified amount of tabs to the end of the current segment of this message. -func tab(amount : int = 1) -> LoggieMsg: - self.content[current_segment_index] += "\t".repeat(amount) - return self - -## Sets this message to belong to the domain with the given name. -## If it attempts to be outputted, but the domain is disabled, it won't be outputted. -func domain(_domain_name : String) -> LoggieMsg: - self.domain_name = _domain_name - return self - -## Prepends the given prefix string to the start of the message (first segment) with the provided separator. -func prefix(str_prefix : String, separator : String = "") -> LoggieMsg: - self.content[0] = "{prefix}{separator}{content}".format({ - "prefix" : str_prefix, - "separator" : separator, - "content" : self.content[0] - }) - return self - -## Appends the given suffix string to the end of the message (last segment) with the provided separator. -func suffix(str_suffix : String, separator : String = "") -> LoggieMsg: - self.content[self.content.size() - 1] = "{content}{separator}{suffix}".format({ - "suffix" : str_suffix, - "separator" : separator, - "content" : self.content[self.content.size() - 1] - }) - return self - -## Appends a horizontal separator with the given length to the current segment of this message. -## If [param alternative_symbol] is provided, it should be a String, and it will be used as the symbol for the separator instead of the default one. -func hseparator(size : int = 16, alternative_symbol : Variant = null) -> LoggieMsg: - var loggie = get_logger() - var symbol = loggie.settings.h_separator_symbol if alternative_symbol == null else str(alternative_symbol) - self.content[current_segment_index] = self.content[current_segment_index] + (symbol.repeat(size)) - return self - -## Ends the current segment of the message and starts a new one. -func endseg() -> LoggieMsg: - self.content.push_back("") - self.current_segment_index = self.content.size() - 1 - return self - -## Sets the environment in which this message should be outputted based on the context the output is being requested from. -## (e.g. only in-engine (during tool scripts), or only ingame, or both). -func env(mode : LoggieEnums.MsgEnvironment) -> LoggieMsg: - self.environment_mode = mode - return self - -## Creates a new segment in this message and sets its content to the given message. -## Acts as a shortcut for calling [method endseg] + [method add]. -func msg(message = "", arg1 = null, arg2 = null, arg3 = null, arg4 = null, arg5 = null) -> LoggieMsg: - self.endseg() - var converter_fn = self._logger.settings.custom_string_converter if is_instance_valid(self._logger) and is_instance_valid(self._logger.settings) else null - self.content[current_segment_index] = LoggieTools.concatenate_args([message, arg1, arg2, arg3, arg4, arg5], converter_fn) - return self - -## Sets whether this message should be preprocessed and potentially modified with prefixes and suffixes during [method output]. -## If turned off, while outputting this message, Loggie will skip the steps where it appends the messaage domain, class name, timestamp, etc. -## Whether preprocess is set to true doesn't affect the final conversion from RICH to ANSI or PLAIN, which always happens -## under some circumstances that are based on other settings. -func preprocessed(shouldPreprocess : bool) -> LoggieMsg: - self.preprocess = shouldPreprocess - return self - -## Sets this message's [LoggieEnums.MsgType] to be strictly the provided value, -## instead of dynamically decided by the log level at which it is being outputted. -## [br][param loggie_enums_msgtype_key_or_value] should either be provided as a direct value of the enum, -## (e.g. [enum LoggieEnum.MsgType.INFO]) or as a string matching one of the keys in that enum (e.g. -## `"info"` or `"INFO"`, case-insensitive). -func type(loggie_enums_msgtype_key_or_value : Variant) -> LoggieMsg: - var isValid = false - var _type : LoggieEnums.MsgType - - if loggie_enums_msgtype_key_or_value is LoggieEnums.MsgType: - _type = loggie_enums_msgtype_key_or_value - isValid = true - elif loggie_enums_msgtype_key_or_value is String: - var uppercase_key = loggie_enums_msgtype_key_or_value.to_upper() - if LoggieEnums.MsgType.keys().has(uppercase_key): - _type = LoggieEnums.MsgType[uppercase_key] - isValid = true - - if isValid: - dynamic_type = false - strict_type = _type - else: - push_error("Attempt to set LoggieMsg type to {value} - could not be converted to a proper [LoggieEnums.MsgType]. Either provide a [LoggieEnums.MsgType], or a string that matches a key in that enum (case-insensitive).".format({"value": str(loggie_enums_msgtype_key_or_value)})) - - return self - -## If [param enabled], the [signal Loggie.log_attempted] signal will not be emitted when this message attempts to be outputted. -func no_signal(enabled : bool = true) -> LoggieMsg: - dont_emit_log_attempted_signal = enabled - return self - -## Applies the [LoggiePreset] with the given [param id] to this message. -## [br]If [param apply_only_to_current_segment] is [param true], the styles from the preset will only be -## applied to the current content segment of this message. Otherwise, the entire content of this message -## will be collapsed into a single segment, and the styles will be applied to that. -func preset(id : String, apply_only_to_current_segment : bool = false) -> LoggieMsg: - var loggie = get_logger() - var preset_to_use : LoggiePreset = loggie.preset(id) - if preset_to_use: - preset_to_use.apply_to(self, apply_only_to_current_segment) - else: - push_error("Attempt to obtain LoggiePreset with ID {id} returned null. Something went terribly wrong, as this should usually be impossible.") - return self - -## Internal method. Emits the [signal Loggie.log_attempted] signal (unless that feature is disabled). -## Used during [method output]. If [param call_deferred] is true, the string of the message's content will -## be prepared immediately, but the emission of the signal will be deferred. -func _emit_log_attempted_signal(result : LoggieEnums.LogAttemptResult, call_deferred : bool = false) -> void: - if dont_emit_log_attempted_signal: - return - - var loggie = get_logger() - var string_content = self.string() - - if call_deferred: - loggie.call_deferred("emit_signal", "log_attempted", self, string_content, result) - else: - loggie.log_attempted.emit(self, string_content, result) - -## Adds this message's configured domain to the start of the given [param message] and returns the modifier version of it. -func _apply_format_domain(message : String) -> String: - var loggie = get_logger() - message = loggie.settings.format_domain_prefix.format({"domain" : self.domain_name, "msg" : message}) - return message - -## Adds a formatted class name to the given [param message] and returns the modified version of it. -func _apply_format_class_name(message : String) -> String: - var loggie = get_logger() - var stack_frame : Dictionary = LoggieTools.get_current_stack_frame_data() - var _class_name : String - - var scriptPath = stack_frame.source - if loggie.class_names.has(scriptPath): - _class_name = loggie.class_names[scriptPath] - else: - _class_name = LoggieTools.get_class_name_from_script(scriptPath, loggie.settings.nameless_class_name_proxy) - loggie.class_names[scriptPath] = _class_name - - if _class_name != "": - message = "[b]({class_name})[/b] {msg}".format({ - "class_name" : _class_name, - "msg" : message - }) - return message - -## Adds a formatted timestamp to the given [param message] and returns the modified version of it. -func _apply_format_timestamp(message : String) -> String: - var loggie = get_logger() - var format_dict : Dictionary = Time.get_datetime_dict_from_system(loggie.settings.timestamps_use_utc) - for field in ["month", "day", "hour", "minute", "second"]: - format_dict[field] = "%02d" % format_dict[field] - - # Add the millisecond - var unix_time: float = Time.get_unix_time_from_system() - var millisecond: int = int((unix_time - int(unix_time)) * 1000.0) - format_dict["millisecond"] = "%03d" % millisecond - - # Add the startup time to the format dictionary. - var elapsed_millisecond: int = Time.get_ticks_msec() - var startup_hour: int = elapsed_millisecond / 3_600_000 - var startup_minute: int = (elapsed_millisecond % 3_600_000) / 60_000 - var startup_second: int = (elapsed_millisecond % 60_000) / 1000 - var startup_millisecond: int = elapsed_millisecond % 1000 - format_dict["startup_hour"] = "%02d" % startup_hour - format_dict["startup_minute"] = "%02d" % startup_minute - format_dict["startup_second"] = "%02d" % startup_second - format_dict["startup_millisecond"] = "%03d" % startup_millisecond - - message = "{formatted_time} {msg}".format({ - "formatted_time" : loggie.settings.format_timestamp.format(format_dict), - "msg" : message - }) - - return message - -## Adds the stack trace to the given [param message] and returns the modified version of it. -func _apply_format_stack(message : String) -> String: - var loggie = get_logger() - var stack_msg = loggie.stack() - message = message + stack_msg.string() - return message diff --git a/addons/loggie/loggie_message.gd.uid b/addons/loggie/loggie_message.gd.uid deleted file mode 100644 index e1c7a5c..0000000 --- a/addons/loggie/loggie_message.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://bd3hgca3nslui diff --git a/addons/loggie/loggie_message_channel.gd b/addons/loggie/loggie_message_channel.gd deleted file mode 100644 index 5a4d44e..0000000 --- a/addons/loggie/loggie_message_channel.gd +++ /dev/null @@ -1,24 +0,0 @@ -@tool - -## A class that describes a channel that can be used to output Loggie Messages. -class_name LoggieMsgChannel extends RefCounted - -## The ID of the channel. -var ID : String = "" - -## The preprocessing steps a [method LoggieMsg] that's about to be -## sent to this channel has to go through. See: [LoggieEnums.PreprocessStep] for -## the list of flags that can be used. -var preprocess_flags : int = 0 - -## Defines what happens when some [LoggieMsg] wants to be sent with this channel. -## [br]If you're implementing your own channel, override this function to define -## how your channel outputs the message. -## -## You can access the last known preprocessed version of the message -## in [LoggieMsg.last_preprocess_result]. -## -## If your channel requires extra data, the data can be embedded into a message -## with [method LoggieMsg.set_meta] and read here with [method LoggieMsg.get_meta]. -func send(msg : LoggieMsg, type : LoggieEnums.MsgType): - pass diff --git a/addons/loggie/loggie_message_channel.gd.uid b/addons/loggie/loggie_message_channel.gd.uid deleted file mode 100644 index acf9e4b..0000000 --- a/addons/loggie/loggie_message_channel.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://bunns8okgi81c diff --git a/addons/loggie/loggie_preset.gd b/addons/loggie/loggie_preset.gd deleted file mode 100644 index b0d42aa..0000000 --- a/addons/loggie/loggie_preset.gd +++ /dev/null @@ -1,83 +0,0 @@ -## An extension of the [LoggieMsg] class, meant to clearly differentiate between a message -## that was created with the sole purpose of being used as a Preset. -## Future behaviors of the message may diverge from regular behaviors of LoggieMsg, hence -## being separated into a different class. -class_name LoggiePreset extends LoggieMsg - -## A placeholder that will be placed into the content of this preset as soon as it's initialized. -## This placeholder then gets wrapped with various styles as you call methods (e.g. [method bold], -## [method italic], etc.) on the preset. Later, only this string part of the content -## gets replaced by the actual content of a message this preset is being applied to, keeping the -## wrapped styles around it. -const content_placeholder = "{content}" - -func _init(message = "", arg1 = null, arg2 = null, arg3 = null, arg4 = null, arg5 = null) -> void: - self.content = [content_placeholder] - -## Applies the settings and styles from this preset onto the given [LoggieMsg], modifying that message -## (does not create a duplicate) and returning that same message after it has been modified. -## -## [br][br]If any styles are applied to this [LoggiePreset], the entire content of the given [LoggieMsg] will -## be collapsed into a single segment, then have this preset's styles wrapped around that segment. -## [b]This directly resizes the [member LoggieMsg.content] array on the modified message.[/b] -## -## [br][br]However, if [param only_to_current_segment] is true, only the [member LoggieMsg.content] of -## the message found at its [member LoggieMsg.current_segment_index] will be wrapped in this preset's styles and modified, -## hence no resizing of the [member LoggieMsg.content] array will occur. -## -## [br]Neither of the above described actions will occur if this preset's content was not modified by any styles in any way. -func apply_to(msg : LoggieMsg, only_to_current_segment : bool = false) -> LoggieMsg: - if msg is LoggiePreset: - push_error("Attempt to apply a [LoggiePreset] to another [LoggiePreset] - unsupported behavior.") - return - - # Apply the settings from this setting on the given message. - msg.domain_name = self.domain_name - msg.used_channels = self.used_channels.duplicate() - msg.preprocess = self.preprocess - msg.custom_preprocess_flags = self.custom_preprocess_flags - msg.appends_stack = self.appends_stack - msg.dynamic_type = self.dynamic_type - msg.strict_type = self.strict_type - msg.environment_mode = self.environment_mode - msg.dont_emit_log_attempted_signal = self.dont_emit_log_attempted_signal - - # If no modifications were done to this preset's content (no styles applied), - # we don't need to go further. - if self.content[0] == content_placeholder: - return msg - - # Otherwise, - # Based on the value of [param only_to_current_segment], either: - # 1. (if true): Replace the content of the [param msg] on its current segment to be that same content, but wrapped in the styles of this preset. - # 2. (if false): Smush the entire content of the [param msg] into a single segment, then wrap that segment in the styles of this preset. - var content_to_apply_preset_to : String - - if only_to_current_segment: - content_to_apply_preset_to = msg.string(msg.current_segment_index) - var new_segment_content = self.content[0].format({"content": content_to_apply_preset_to}) - msg.content[msg.current_segment_index] = new_segment_content - else: - content_to_apply_preset_to = msg.string() - var new_message_content = self.content[0].format({"content": content_to_apply_preset_to}) - msg.content = [new_message_content] - - return msg - -## Overrides the parent class method by the same name to disable its functionality. -## Presets cannot have additional segments added. -func endseg() -> LoggieMsg: - push_warning("Attempt to call LoggieMsg.endseg on a LoggiePreset. This is not allowed. Presets shouldn't have more than 1 string content segment.") - return self - -## Overrides the parent class method by the same name to disable its functionality. -## Presets cannot have their content modified. -func msg(message = "", arg1 = null, arg2 = null, arg3 = null, arg4 = null, arg5 = null) -> LoggieMsg: - push_warning("Attempt to call LoggieMsg.msg on a LoggiePreset. This is not allowed. Presets cannot have string content.") - return self - -## Overrides the parent class method by the same name to disable its functionality. -## Presets cannot be outputted, they are only meant to be applied to other [LoggieMsg]s. -func output(level : LoggieEnums.LogLevel, msg_type : LoggieEnums.MsgType = LoggieEnums.MsgType.INFO) -> void: - push_warning("Attempt to call LoggieMsg.output on a LoggiePreset. This is not allowed. Presets should only be applied to other [LoggieMsg] instances, not used directly.") - return diff --git a/addons/loggie/loggie_preset.gd.uid b/addons/loggie/loggie_preset.gd.uid deleted file mode 100644 index ad6f8a1..0000000 --- a/addons/loggie/loggie_preset.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://b2oby5841g2bw diff --git a/addons/loggie/loggie_settings.gd b/addons/loggie/loggie_settings.gd deleted file mode 100644 index 48a1334..0000000 --- a/addons/loggie/loggie_settings.gd +++ /dev/null @@ -1,521 +0,0 @@ -@tool - -## Defines a set of variables through which all the relevant settings of Loggie can have their -## values set, read and documented. An instance of this class is found in [member Loggie.settings], and that's where Loggie -## ultimately reads from when it's asking for the value of a setting. For user convenience, settings are (by default) exported -## as custom Godot project settings and are loaded from there into these variables during [method load], however, -## you can extend or overwrite this class' [method load] method to define a different way of loading these settings if you prefer. -## [i](e.g. loading from a config.ini file, or a .json file, etc.)[/i].[br][br] -## -## Loggie calls [method load] on this class during its [method _ready] function. -class_name LoggieSettings extends Resource - -## The name that will be used for the singleton referring to Loggie. -## [br][br][i][b]Note:[/b] You may change this to something you're more used to, such as "log" or "logger".[/i] -## When doing so, make sure to either do it while the Plugin is enabled, then disable and re-enable the plugin, -## or that you manually clear out the previously created autoload (should be called "Loggie") in Project Settings -> Autoloads. -static var loggie_singleton_name = "Loggie" - -# ----------------------------------------------- # -#region Project Settings -# ----------------------------------------------- # -## The dictionary which is used to grab the defaults and other values associated with each setting -## relevant to Loggie, particularly important for the default way of loading [LoggieSettings] and -## setting up Godot Project Settings related to Loggie. -const project_settings = { - "update_check_mode" = { - "path": "loggie/general/check_for_updates", - "default_value" : LoggieEnums.UpdateCheckType.CHECK_AND_SHOW_UPDATER_WINDOW, - "type" : TYPE_INT, - "hint" : PROPERTY_HINT_ENUM, - "hint_string" : "Never:0,Only print notice if available:1,Print notice and auto-install:2,Yes and show updater window:3", - "doc" : "Sets which behavior Loggie should use when checking for updates.", - }, - "remove_settings_if_plugin_disabled" = { - "path": "loggie/general/remove_settings_if_plugin_disabled", - "default_value" : true, - "type" : TYPE_BOOL, - "hint" : PROPERTY_HINT_NONE, - "hint_string" : "", - "doc" : "Choose whether you want Loggie project settings to be wiped from ProjectSettings if the Loggie plugin is disabled.", - }, - "msg_format_mode" = { - "path": "loggie/general/msg_format_mode", - "default_value" : LoggieEnums.MsgFormatMode.BBCODE, - "type" : TYPE_INT, - "hint" : PROPERTY_HINT_ENUM, - "hint_string" : "Plain:0,ANSI:1,BBCode:2,Markdown:3", - "doc" : "Choose the format for which loggie should preprocess the output so that it displays correctly on the intended output medium.[br][br]Use BBCode for Godot console.[br]Use ANSI for Powershell, Bash, etc.[br]Use MARKDOWN for Discord.[br]Use PLAIN for log files.", - }, - "log_level" = { - "path": "loggie/general/log_level", - "default_value" : LoggieEnums.LogLevel.INFO, - "type" : TYPE_INT, - "hint" : PROPERTY_HINT_ENUM, - "hint_string" : "Error:0,Warn:1,Notice:2,Info:3,Debug:4", - "doc" : "Choose the level of messages which should be displayed. Loggie displays all messages that are outputted at the currently set level (or any lower level).", - }, - "show_system_specs" = { - "path": "loggie/general/show_system_specs", - "default_value" : true, - "type" : TYPE_BOOL, - "hint" : PROPERTY_HINT_NONE, - "hint_string" : "", - "doc" : "Should Loggie log the system and device specs of the user as soon as it is booted?", - }, - "show_loggie_specs" = { - "path": "loggie/general/show_loggie_specs", - "default_value" : LoggieEnums.ShowLoggieSpecsMode.ESSENTIAL, - "type" : TYPE_INT, - "hint" : PROPERTY_HINT_ENUM, - "hint_string" : "Disabled:0,Essential:1,Advanced:2", - "doc" : "Defines which way Loggie should print its own specs when it is booted.", - }, - "enforce_optimal_settings_in_release_build" = { - "path": "loggie/general/enforce_optimal_settings_in_release_build", - "default_value" : true, - "type" : TYPE_BOOL, - "hint" : PROPERTY_HINT_NONE, - "hint_string" : "", - "doc" : "Should Loggie enforce certain settings to automatically change to optimal values in production/release builds?", - }, - "default_channels" = { - "path": "loggie/general/default_channels", - "default_value" : ["terminal"], - "type" : TYPE_PACKED_STRING_ARRAY, - "hint" : PROPERTY_HINT_TYPE_STRING, - "hint_string" : "", - "doc" : "The channels messages outputted from Loggie will be sent to by default (if not modified with LoggieMsg.channel method).", - }, - "skipped_filenames_in_stack_trace" = { - "path": "loggie/general/skipped_filenames_in_stack_trace", - "default_value" : ["loggie", "loggie_message"], - "type" : TYPE_PACKED_STRING_ARRAY, - "hint" : PROPERTY_HINT_TYPE_STRING, - "hint_string" : "", - "doc" : "The file names, which, when appearing in a stack trace, should be omitted from the output.", - }, - "discord_webhook_url_live" = { - "path": "loggie/general/discord/live_webhook", - "default_value" : "", - "type" : TYPE_STRING, - "hint" : PROPERTY_HINT_MULTILINE_TEXT, - "hint_string" : "", - "doc" : "The endpoint URL for the Discord webhook used when Loggie is running in a production build.", - }, - "discord_webhook_url_dev" = { - "path": "loggie/general/discord/dev_webhook", - "default_value" : "", - "type" : TYPE_STRING, - "hint" : PROPERTY_HINT_MULTILINE_TEXT, - "hint_string" : "", - "doc" : "The endpoint URL for the Discord webhook used when Loggie is not running in a production build.", - }, - "slack_webhook_url_live" = { - "path": "loggie/general/slack/live_webhook", - "default_value" : "", - "type" : TYPE_STRING, - "hint" : PROPERTY_HINT_MULTILINE_TEXT, - "hint_string" : "", - "doc" : "The endpoint URL for the Slack webhook used when Loggie is running in a production build.", - }, - "slack_webhook_url_dev" = { - "path": "loggie/general/slack/dev_webhook", - "default_value" : "", - "type" : TYPE_STRING, - "hint" : PROPERTY_HINT_MULTILINE_TEXT, - "hint_string" : "", - "doc" : "The endpoint URL for the Slack webhook used when Loggie is not running in a production build.", - }, - "timestamps_use_utc" = { - "path": "loggie/preprocessing/timestamps_use_utc", - "default_value" : true, - "type" : TYPE_BOOL, - "hint" : PROPERTY_HINT_NONE, - "hint_string" : "", - "doc" : "If 'Output Timestamps' is true, should those timestamps use the UTC time. If not, local system time is used instead.", - }, - "output_errors_to_console" = { - "path": "loggie/preprocessing/terminal/output_errors_also_to_console", - "default_value" : true, - "type" : TYPE_BOOL, - "hint" : PROPERTY_HINT_NONE, - "hint_string" : "", - "doc" : "If true, errors printed by Loggie will also be visible through an additional print in the main output.", - }, - "output_warnings_to_console" = { - "path": "loggie/preprocessing/terminal/output_warnings_also_to_console", - "default_value" : true, - "type" : TYPE_BOOL, - "hint" : PROPERTY_HINT_NONE, - "hint_string" : "", - "doc" : "If true, warnings printed by Loggie will also be visible through an additional print in the main output.", - }, - "debug_msgs_print_stack_trace" = { - "path": "loggie/preprocessing/terminal/debug_msgs_print_stack_trace", - "default_value" : false, - "type" : TYPE_BOOL, - "hint" : PROPERTY_HINT_NONE, - "hint_string" : "", - "doc" : "If true, 'debug' level messages outputted by Loggie will also print the stack trace.", - }, - "nameless_class_name_proxy" = { - "path": "loggie/preprocessing/nameless_class_name_proxy", - "default_value" : LoggieEnums.NamelessClassExtensionNameProxy.BASE_TYPE, - "type" : TYPE_INT, - "hint" : PROPERTY_HINT_ENUM, - "hint_string" : "Nothing:0,ScriptName:1,BaseType:2", - "doc" : "If 'Derive and Display Class Names From Scripts' is enabled, and a script doesn't have a 'class_name', which text should we use as a substitute?", - }, - "preprocess_flags_terminal_channel" = { - "path": "loggie/preprocessing/terminal/preprocess_flags", - "default_value" : LoggieEnums.PreprocessStep.APPEND_TIMESTAMPS | LoggieEnums.PreprocessStep.APPEND_DOMAIN_NAME | LoggieEnums.PreprocessStep.APPEND_CLASS_NAME, - "type" : TYPE_INT, - "hint" : PROPERTY_HINT_FLAGS, - "hint_string" : "Append Timestamp:1,Append Domain Name:2,Append Class Name:4", - "doc" : "Defines the flags which LoggieMessages sent to the terminal channel will use during preprocessing.", - }, - "preprocess_flags_discord_channel" = { - "path": "loggie/preprocessing/discord/preprocess_flags", - "default_value" : LoggieEnums.PreprocessStep.APPEND_DOMAIN_NAME | LoggieEnums.PreprocessStep.APPEND_CLASS_NAME, - "type" : TYPE_INT, - "hint" : PROPERTY_HINT_FLAGS, - "hint_string" : "Append Timestamp:1,Append Domain Name:2,Append Class Name:4", - "doc" : "Defines the flags which LoggieMessages sent to the Discord channel will use during preprocessing.", - }, - "preprocess_flags_slack_channel" = { - "path": "loggie/preprocessing/slack/preprocess_flags", - "default_value" : LoggieEnums.PreprocessStep.APPEND_DOMAIN_NAME | LoggieEnums.PreprocessStep.APPEND_CLASS_NAME, - "type" : TYPE_INT, - "hint" : PROPERTY_HINT_FLAGS, - "hint_string" : "Append Timestamp:1,Append Domain Name:2,Append Class Name:4", - "doc" : "Defines the flags which LoggieMessages sent to the Slack channel will use during preprocessing.", - }, - "format_timestamp" = { - "path": "loggie/formats/timestamp", - "default_value" : "[{day}.{month}.{year} {hour}:{minute}:{second}]", - "type" : TYPE_STRING, - "hint" : PROPERTY_HINT_NONE, - "hint_string" : "", - "doc" : "The format used for timestamps which are prepended to the message when the appending of timestamps is enabled.", - }, - "format_stacktrace_entry" = { - "path": "loggie/formats/stacktrace_entry", - "default_value" : "{index}: [color=#ff7085]func[/color] [color=#53b1c3][b]{fn_name}[/b]:{line}[/color] [color=slate_gray][i](in {source_path})[/i][/color]", - "type" : TYPE_STRING, - "hint" : PROPERTY_HINT_NONE, - "hint_string" : "", - "doc" : "The format used for stack trace entries when trace logging is enabled.", - }, - "format_debug_msg" = { - "path": "loggie/formats/debug_message", - "default_value" : "[b][color=pink][DEBUG]:[/color][/b] {msg}", - "type" : TYPE_STRING, - "hint" : PROPERTY_HINT_NONE, - "hint_string" : "", - "doc" : "The format used for debug messages.", - }, - "format_info_msg" = { - "path": "loggie/formats/info_message", - "default_value" : "{msg}", - "type" : TYPE_STRING, - "hint" : PROPERTY_HINT_NONE, - "hint_string" : "", - "doc" : "The format used for info messages.", - }, - "format_notice_msg" = { - "path": "loggie/formats/notice_message", - "default_value" : "[b][color=cyan][NOTICE]:[/color][/b] {msg}", - "type" : TYPE_STRING, - "hint" : PROPERTY_HINT_NONE, - "hint_string" : "", - "doc" : "The format used for notice messages.", - }, - "format_warning_msg" = { - "path": "loggie/formats/warning_message", - "default_value" : "[b][color=orange][WARN]:[/color][/b] {msg}", - "type" : TYPE_STRING, - "hint" : PROPERTY_HINT_NONE, - "hint_string" : "", - "doc" : "The format used for warning messages.", - }, - "format_error_msg" = { - "path": "loggie/formats/error_message", - "default_value" : "[b][color=red][ERROR]:[/color][/b] {msg}", - "type" : TYPE_STRING, - "hint" : PROPERTY_HINT_NONE, - "hint_string" : "", - "doc" : "The format used for error messages.", - }, - "format_domain_prefix" = { - "path": "loggie/formats/domain_prefix", - "default_value" : "[b]({domain})[/b] {msg}", - "type" : TYPE_STRING, - "hint" : PROPERTY_HINT_NONE, - "hint_string" : "", - "doc" : "The format used for domain prefixes.", - }, - "format_header" = { - "path": "loggie/formats/header", - "default_value" : "[b][i]{msg}[/i][/b]", - "type" : TYPE_STRING, - "hint" : PROPERTY_HINT_NONE, - "hint_string" : "", - "doc" : "The format used for headers.", - }, - "h_separator_symbol" = { - "path": "loggie/formats/h_separator_symbol", - "default_value" : "-", - "type" : TYPE_STRING, - "hint" : PROPERTY_HINT_NONE, - "hint_string" : "", - "doc" : "The symbol used for the horizontal separator.", - }, - "box_characters_mode" = { - "path": "loggie/formats/box_characters_mode", - "default_value" : LoggieEnums.BoxCharactersMode.COMPATIBLE, - "type" : TYPE_INT, - "hint" : PROPERTY_HINT_ENUM, - "hint_string" : "Compatible:0,Pretty:1", - "doc" : "There are two sets of box characters defined in LoggieSettings - one set contains prettier characters that produce a nicer looking box, but may not render correctly in the context of various terminals. The other set contains characters that produce a less pretty box, but are compatible with being shown in most terminals.", - } -} - -#endregion -# ----------------------------------------------- # -#region Variables -# ----------------------------------------------- # - -## The current behavior Loggie uses to check for updates. -var update_check_mode : LoggieEnums.UpdateCheckType = LoggieEnums.UpdateCheckType.CHECK_AND_SHOW_UPDATER_WINDOW - -## The current Message Format Mode of Loggie. -## Message Format Mode determines whether BBCode, ANSI or some other type of -## formatting is used to convey text effects, such as bold, italic, colors, etc. -## [br][br]BBCode is compatible with the Godot console. -## [br]ANSI is compatible with consoles like Powershell and Windows CMD. -## [br]PLAIN is used to strip any effects and use plain text instead, which is good for saving raw logs into log files. -var msg_format_mode : LoggieEnums.MsgFormatMode = LoggieEnums.MsgFormatMode.BBCODE - -## The current log level of Loggie. -## It determines which types of messages are allowed to be logged. -## Set this using [method setLogLevel]. -var log_level : LoggieEnums.LogLevel = LoggieEnums.LogLevel.INFO - -## Whether or not Loggie should log the loggie specs on ready. -var show_loggie_specs : LoggieEnums.ShowLoggieSpecsMode = LoggieEnums.ShowLoggieSpecsMode.ESSENTIAL - -## Whether or not Loggie should log the system specs on ready. -var show_system_specs : bool = true - -## Whether to, in addition to logging errors with [method push_error], -## Loggie should also print the error as a message in the standard output. -var print_errors_to_console : bool = true - -## Whether to, in addition to logging errors with [method push_warning], -## Loggie should also print the error as a message in the standard output. -var print_warnings_to_console : bool = true - -## Defines which text will be used as a substitute for the 'class_name' of scripts that do not have a 'class_name'. -## Relevant only during the [member LoggieEnums.PreprocessStep.APPEND_CLASS_NAME] step of preprocessing. -var nameless_class_name_proxy : LoggieEnums.NamelessClassExtensionNameProxy - -## Whether the outputted timestamps use UTC or local machine time. -var timestamps_use_utc : bool = true - -## If true, when outputting Debug level messages, the stack trace will also be appended. -var debug_msgs_print_stack_trace : bool = false - -## Whether Loggie should enforce optimal values for certain settings when in a Release/Production build. -## [br]If true, Loggie will enforce: -## [br] * [member msg_format_mode] to [member LoggieEnums.MsgFormatMode.PLAIN] -## [br] * [member box_characters_mode] to [member LoggieEnums.BoxCharactersMode.COMPATIBLE] -var enforce_optimal_settings_in_release_build : bool = true - -## Endpoint URL for the Discord webhook (used in dev environment) -## [br][b]NEVER[/b] distribute your webhook in your project's repository, source code, or built game, where it can be accessed by other people. -## This is meant to be used only in controlled circumstances. -var discord_webhook_url_dev : String = "" - -## Endpoint URL for the Discord webhook (used in production/release environment) -## [br][b]NEVER[/b] distribute your webhook in your project's repository, source code, or built game, where it can be accessed by other people. -## This is meant to be used only in controlled circumstances. -var discord_webhook_url_live : String = "" - -## Endpoint URL for the Slack webhook (used in dev environment) -## [br][b]NEVER[/b] distribute your webhook in your project's repository, source code, or built game, where it can be accessed by other people. -## This is meant to be used only in controlled circumstances. -var slack_webhook_url_dev : String = "" - -## Endpoint URL for the Slack webhook (used in production/release environment) -## [br][b]NEVER[/b] distribute your webhook in your project's repository, source code, or built game, where it can be accessed by other people. -## This is meant to be used only in controlled circumstances. -var slack_webhook_url_live : String = "" - -## Defines the flags which LoggieMessages sent to the terminal channel will use during preprocessing. -var preprocess_flags_terminal_channel = LoggieEnums.PreprocessStep.APPEND_TIMESTAMPS | LoggieEnums.PreprocessStep.APPEND_DOMAIN_NAME | LoggieEnums.PreprocessStep.APPEND_CLASS_NAME - -## Defines the flags which LoggieMessages sent to the Discord channel output will use during preprocessing. -var preprocess_flags_discord_channel = LoggieEnums.PreprocessStep.APPEND_DOMAIN_NAME | LoggieEnums.PreprocessStep.APPEND_CLASS_NAME - -## Defines the flags which LoggieMessages sent to the Slack channel output will use during preprocessing. -var preprocess_flags_slack_channel = LoggieEnums.PreprocessStep.APPEND_DOMAIN_NAME | LoggieEnums.PreprocessStep.APPEND_CLASS_NAME - -## The list of channels a message outputted from Loggie should be sent to by default. -var default_channels : PackedStringArray = ["terminal"] - -## The list of file names, which, when appearing in a stack trace, should be omitted from the output.. -var skipped_filenames_in_stack_trace : PackedStringArray = ["loggie", "loggie_message"] - -#endregion -# ----------------------------------------------- # -#region Formats for prints -# ----------------------------------------------- # -# As per the `print_rich` documentation, supported colors are: black, red, green, yellow, blue, magenta, pink, purple, cyan, white, orange, gray. -# Any other color will be displayed in the Godot console or an ANSI based console, but the color tag (in case of BBCode) won't be properly stripped -# when written to the .log file, resulting in BBCode visible in .log files. - -## The format used to decorate a message as a header when using [method LoggieMsg.header].[br] -## The [param {msg}] is a variable that will be replaced with the contents of the message.[br] -var format_header = "[b][i]{msg}[/i][/b]" - -## The format used when appending a domain to a message.[br] -## The [param {msg}] is a variable that will be replaced with the contents of the message.[br] -## The [param {domain}] is a variable that will be replaced with the domain key.[br] -## You can customize this in your ProjectSettings, or custom_settings.gd (if using it).[br] -var format_domain_prefix = "[b]({domain})[/b] {msg}" - -## The format used when outputting error messages.[br] -## The [param {msg}] is a variable that will be replaced with the contents of the message.[br] -## You can customize this in your ProjectSettings, or custom_settings.gd (if using it).[br] -var format_error_msg = "[b][color=red][ERROR]:[/color][/b] {msg}" - -## The format used when outputting warning messages.[br] -## The [param {msg}] is a variable that will be replaced with the contents of the message.[br] -## You can customize this in your ProjectSettings, or custom_settings.gd (if using it).[br] -var format_warning_msg = "[b][color=orange][WARN]:[/color][/b] {msg}" - -## The format used when outputting notice messages.[br] -## The [param {msg}] is a variable that will be replaced with the contents of the message.[br] -## You can customize this in your ProjectSettings, or custom_settings.gd (if using it).[br] -var format_notice_msg = "[b][color=cyan][NOTICE]:[/color][/b] {msg}" - -## The format used when outputting info messages.[br] -## The [param {msg}] is a variable that will be replaced with the contents of the message.[br] -## You can customize this in your ProjectSettings, or custom_settings.gd (if using it).[br] -var format_info_msg = "{msg}" - -## The format used when outputting debug messages.[br] -## The [param {msg}] is a variable that will be replaced with the contents of the message.[br] -## You can customize this in your ProjectSettings, or custom_settings.gd (if using it).[br] -var format_debug_msg = "[b][color=pink][DEBUG]:[/color][/b] {msg}" - -## The format used for timestamps when they are prepended to the output.[br] -## The variables [param {day}], [param {month}], [param {year}], [param {hour}], [param {minute}], [param {second}], [param {weekday}], and [param {dst}] are supported. -## You can customize this in your ProjectSettings, or custom_settings.gd (if using it).[br] -var format_timestamp = "[{day}.{month}.{year} {hour}:{minute}:{second}]" - -## The format used for each entry in a stack trace that is obtained through [method Loggie.stack]. -## The variables [param {fn_name}], [param {index}], [param {source_path}], [param {line}] are supported. -## You can customize this in your ProjectSettings, or custom_settings.gd (if using it).[br] -var format_stacktrace_entry = "{index}: [color=#ff7085]func[/color] [color=#53b1c3][b]{fn_name}[/b]:{line}[/color] [color=slate_gray][i](in {source_path})[/i][/color]" - -## The symbol which will be used for the HSeparator. -var h_separator_symbol = "-" - -## The mode used for drawing boxes. -var box_characters_mode : LoggieEnums.BoxCharactersMode - -## The symbols which will be used to construct a box decoration that will properly -## display on any kind of terminal or text reader. -## For a prettier but potentially incompatible box, use [member box_symbols_pretty] instead. -var box_symbols_compatible = { - # ANSI and .log compatible box characters: - "top_left" : "-", - "top_right" : "-", - "bottom_left" : "-", - "bottom_right" : "-", - "h_line" : "-", - "v_line" : ":", -} - -## The symbols which will be used to construct pretty box decoration. -## These may not be compatible with some terminals or text readers. -## Use the [member box_symbols_compatible] instead as an alternative. -var box_symbols_pretty = { - "top_left" : "┌", - "top_right" : "┐", - "bottom_left" : "└", - "bottom_right" : "┘", - "h_line" : "─", - "v_line" : "│", -} - -#endregion -# ----------------------------------------------- # - -## A [Callable] function that takes 1 parameter [param something] (Variant), -## and returns a [String] which represents the given [param something] in text. -## By default, Loggie sets this to `LoggieTools.convert_to_string` when initialized. -## [br][br] -## You can, however, override that by changing this value to a valid replacement [Callable], -## after Loggie has initialized. -var custom_string_converter : Callable - -## Loads the initial (default) values for all of the LoggieSettings variables. -## (By default, loads them from ProjectSettings (if any modifications there exist), -## or looks in [LoggieEditorPlugin..project_settings] for default values). -## [br][br]Extend this class and override this function to write your own logic for -## how loggie should obtain these settings if you have a need for a different approach. -func load(): - update_check_mode = ProjectSettings.get_setting(project_settings.update_check_mode.path, project_settings.update_check_mode.default_value) - msg_format_mode = ProjectSettings.get_setting(project_settings.msg_format_mode.path, project_settings.msg_format_mode.default_value) - log_level = ProjectSettings.get_setting(project_settings.log_level.path, project_settings.log_level.default_value) - show_loggie_specs = ProjectSettings.get_setting(project_settings.show_loggie_specs.path, project_settings.show_loggie_specs.default_value) - show_system_specs = ProjectSettings.get_setting(project_settings.show_system_specs.path, project_settings.show_system_specs.default_value) - timestamps_use_utc = ProjectSettings.get_setting(project_settings.timestamps_use_utc.path, project_settings.timestamps_use_utc.default_value) - enforce_optimal_settings_in_release_build = ProjectSettings.get_setting(project_settings.enforce_optimal_settings_in_release_build.path, project_settings.enforce_optimal_settings_in_release_build.default_value) - default_channels = ProjectSettings.get_setting(project_settings.default_channels.path, project_settings.default_channels.default_value) - skipped_filenames_in_stack_trace = ProjectSettings.get_setting(project_settings.skipped_filenames_in_stack_trace.path, project_settings.skipped_filenames_in_stack_trace.default_value) - - print_errors_to_console = ProjectSettings.get_setting(project_settings.output_errors_to_console.path, project_settings.output_errors_to_console.default_value) - print_warnings_to_console = ProjectSettings.get_setting(project_settings.output_warnings_to_console.path, project_settings.output_warnings_to_console.default_value) - debug_msgs_print_stack_trace = ProjectSettings.get_setting(project_settings.debug_msgs_print_stack_trace.path, project_settings.debug_msgs_print_stack_trace.default_value) - - nameless_class_name_proxy = ProjectSettings.get_setting(project_settings.nameless_class_name_proxy.path, project_settings.nameless_class_name_proxy.default_value) - box_characters_mode = ProjectSettings.get_setting(project_settings.box_characters_mode.path, project_settings.box_characters_mode.default_value) - - format_timestamp = ProjectSettings.get_setting(project_settings.format_timestamp.path, project_settings.format_timestamp.default_value) - format_stacktrace_entry = ProjectSettings.get_setting(project_settings.format_stacktrace_entry.path, project_settings.format_stacktrace_entry.default_value) - format_info_msg = ProjectSettings.get_setting(project_settings.format_info_msg.path, project_settings.format_info_msg.default_value) - format_notice_msg = ProjectSettings.get_setting(project_settings.format_notice_msg.path, project_settings.format_notice_msg.default_value) - format_warning_msg = ProjectSettings.get_setting(project_settings.format_warning_msg.path, project_settings.format_warning_msg.default_value) - format_error_msg = ProjectSettings.get_setting(project_settings.format_error_msg.path, project_settings.format_error_msg.default_value) - format_debug_msg = ProjectSettings.get_setting(project_settings.format_debug_msg.path, project_settings.format_debug_msg.default_value) - h_separator_symbol = ProjectSettings.get_setting(project_settings.h_separator_symbol.path, project_settings.h_separator_symbol.default_value) - - discord_webhook_url_live = ProjectSettings.get_setting(project_settings.discord_webhook_url_live.path, project_settings.discord_webhook_url_live.default_value) - discord_webhook_url_dev = ProjectSettings.get_setting(project_settings.discord_webhook_url_dev.path, project_settings.discord_webhook_url_dev.default_value) - preprocess_flags_discord_channel = ProjectSettings.get_setting(project_settings.preprocess_flags_discord_channel.path, project_settings.preprocess_flags_discord_channel.default_value) - slack_webhook_url_live = ProjectSettings.get_setting(project_settings.slack_webhook_url_live.path, project_settings.slack_webhook_url_live.default_value) - slack_webhook_url_dev = ProjectSettings.get_setting(project_settings.slack_webhook_url_dev.path, project_settings.slack_webhook_url_dev.default_value) - preprocess_flags_slack_channel = ProjectSettings.get_setting(project_settings.preprocess_flags_slack_channel.path, project_settings.preprocess_flags_slack_channel.default_value) - preprocess_flags_terminal_channel = ProjectSettings.get_setting(project_settings.preprocess_flags_terminal_channel.path, project_settings.preprocess_flags_terminal_channel.default_value) - -## Returns a dictionary where the indices are names of relevant variables in the LoggieSettings class, -## and the values are their current values. -func to_dict() -> Dictionary: - var dict = {} - var included = [ - "preprocess_flags_discord_channel", "preprocess_flags_slack_channel", "preprocess_flags_terminal_channel", - "default_channels", "skipped_filenames_in_stack_trace", "msg_format_mode", "log_level", "show_loggie_specs", "show_system_specs", "enforce_optimal_settings_in_release_build", - "print_errors_to_console", "print_warnings_to_console", - "debug_msgs_print_stack_trace", "nameless_class_name_proxy", - "timestamps_use_utc", "format_header", "format_domain_prefix", "format_error_msg", - "format_warning_msg", "format_notice_msg", "format_info_msg", "format_debug_msg", "format_timestamp", - "h_separator_symbol", "box_characters_mode", "box_symbols_compatible", "box_symbols_pretty", - ] - - for var_name in included: - dict[var_name] = get(var_name) - return dict diff --git a/addons/loggie/loggie_settings.gd.uid b/addons/loggie/loggie_settings.gd.uid deleted file mode 100644 index 83257f7..0000000 --- a/addons/loggie/loggie_settings.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://cs4ybo1axktlw diff --git a/addons/loggie/plugin.cfg b/addons/loggie/plugin.cfg deleted file mode 100644 index 36e9eea..0000000 --- a/addons/loggie/plugin.cfg +++ /dev/null @@ -1,7 +0,0 @@ -[plugin] - -name="Loggie" -description="Simple functional stylish logger for your basic logging needs." -author="Shiva Shadowsong" -version="3.0" -script="plugin.gd" diff --git a/addons/loggie/plugin.gd b/addons/loggie/plugin.gd deleted file mode 100644 index b695b65..0000000 --- a/addons/loggie/plugin.gd +++ /dev/null @@ -1,50 +0,0 @@ -@tool -class_name LoggieEditorPlugin extends EditorPlugin - -func _enter_tree(): - add_loggie_project_settings() - Engine.set_meta("LoggieEditorPlugin", self) - if Engine.is_editor_hint(): - Engine.set_meta("LoggieEditorInterfaceBaseControl", EditorInterface.get_base_control()) - -func _enable_plugin() -> void: - add_autoload_singleton(LoggieSettings.loggie_singleton_name, "res://addons/loggie/loggie.gd") - add_loggie_project_settings() - -func _disable_plugin() -> void: - var wipe_setting_exists = ProjectSettings.has_setting(LoggieSettings.project_settings.remove_settings_if_plugin_disabled.path) - if (not wipe_setting_exists) or (wipe_setting_exists and ProjectSettings.get_setting(LoggieSettings.project_settings.remove_settings_if_plugin_disabled.path, true)): - push_warning("The Loggie plugin is being disabled, and all of its ProjectSettings are erased from Godot. If you wish to prevent this behavior, look for the 'Project Settings -> Loggie -> General -> Remove Settings if Plugin Disabled' option while the plugin is enabled.") - remove_loggie_project_setings() - else: - push_warning("The Loggie plugin is being disabled, but its ProjectSettings have been prevented from being removed from Godot. If you wish to allow that behavior, look for the 'Project Settings -> Loggie -> General -> Remove Settings if Plugin Disabled' option while the plugin is enabled.") - remove_autoload_singleton(LoggieSettings.loggie_singleton_name) - -## Adds new Loggie related ProjectSettings to Godot. -func add_loggie_project_settings(): - for setting in LoggieSettings.project_settings.values(): - add_project_setting(setting["path"], setting["default_value"], setting["type"], setting["hint"], setting["hint_string"], setting["doc"]) - -## Removes Loggie related ProjectSettings from Godot. -func remove_loggie_project_setings(): - for setting in LoggieSettings.project_settings.values(): - ProjectSettings.set_setting(setting["path"], null) - - var error: int = ProjectSettings.save() - if error != OK: - push_error("Loggie - Encountered error %d while saving project settings." % error) - -## Adds a new project setting to Godot. -## (WARNING): Unfortunately, as of Godot 4.3, it has been confirmed that it is not possible to set the -## popup tooltip text for a project setting. This should be implemented here as soon as that becomes possible. -func add_project_setting(setting_name: String, default_value : Variant, value_type: int, type_hint: int = PROPERTY_HINT_NONE, hint_string: String = "", documentation : String = ""): - if !ProjectSettings.has_setting(setting_name): - ProjectSettings.set_setting(setting_name, default_value) - - ProjectSettings.set_initial_value(setting_name, default_value) - ProjectSettings.add_property_info({ "name": setting_name, "type": value_type, "hint": type_hint, "hint_string": hint_string}) - ProjectSettings.set_as_basic(setting_name, true) - - var error: int = ProjectSettings.save() - if error: - push_error("Loggie - Encountered error %d while saving project settings." % error) diff --git a/addons/loggie/plugin.gd.uid b/addons/loggie/plugin.gd.uid deleted file mode 100644 index 8c5b93e..0000000 --- a/addons/loggie/plugin.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://ct2hpdyg7gd81 diff --git a/addons/loggie/tools/loggie_enums.gd b/addons/loggie/tools/loggie_enums.gd deleted file mode 100644 index 375dc27..0000000 --- a/addons/loggie/tools/loggie_enums.gd +++ /dev/null @@ -1,88 +0,0 @@ -@tool -class_name LoggieEnums extends Node - -## Based on which log level is currently set to be used by the Loggie., attempting to log a message that's on -## a higher-than-configured log level will result in nothing happening. -enum LogLevel { - ERROR, ## Log level which includes only the logging of Error type messages. - WARN, ## Log level which includes the logging of Error and Warning type messages. - NOTICE, ## Log level which includes the logging of Error, Warning and Notice type messages. - INFO, ## Log level which includes the logging of Error, Warning, Notice and Info type messages. - DEBUG ## Log level which includes the logging of Error, Warning, Notice, Info and Debug type messages. -} - -## The classification of message types that can be used to distinguish two identical strings in nature -## of their origin. This is different from [enum LogLevel]. -enum MsgType { - ERROR, ## A message that is considered to be an error message. - WARN, ## A message that is considered to be a warning message. - NOTICE, ## A message that is considered to be a notice. - INFO, ## A message that is considered a standard text that is not special in any way. - DEBUG, ## A message that is considered to be a message used only during debugging. -} - -enum MsgFormatMode { - PLAIN, ## Prints will be plain text. - ANSI, ## Prints will be styled using the ANSI standard. Compatible with Powershell, Win CMD, etc. - BBCODE, ## Prints will be styled using the Godot BBCode rules. Compatible with the Godot console. - MARKDOWN, ## Prints will be styled using the Markdown standard. Compatible with most Markdown readers. -} - -## Classifies various steps that can happen during preprocessing. -enum PreprocessStep { - ## A timestamp will be added to the message. - APPEND_TIMESTAMPS = 1 << 0, - - ## The name of the domain from which the message is coming will be added to the message. - APPEND_DOMAIN_NAME = 1 << 1, - - ## Whether Loggie should use the scripts from which it is being called to - ## figure out a class name for the class that called a loggie function, - ## and append it to the outputted message. - ## This only works in debug builds because it uses [method @GDScript.get_stack]. - ## See that method's documentation to see why that can't be used in release builds. - APPEND_CLASS_NAME = 1 << 2, -} - -enum BoxCharactersMode { - COMPATIBLE, ## Boxes are drawn using characters that compatible with any kind of terminal or text reader. - PRETTY ## Boxes are drawn using special unicode characters that create a prettier looking box which may not display properly in some terminals or text readers. -} - -## Defines a list of possible approaches that can be taken to derive some kind of a class name proxy from a script that doesn't have a 'class_name' clause. -enum NamelessClassExtensionNameProxy { - NOTHING, ## If there is no class_name, nothing will be displayed. - SCRIPT_NAME, ## Use the name of the script whose class_name we tried to read. (e.g. "my_script.gd"). - BASE_TYPE, ## Use the name of the base type which the script extends (e.g. 'Node2D', 'Control', etc.) -} - -## Defines a list of possible behaviors for the 'show_loggie_specs' setting. -enum ShowLoggieSpecsMode { - DISABLED, ## Loggie specs won't be shown. - ESSENTIAL, ## Show only the essentials. - ADVANCED ## Show all loggie specs. -} - -## Defines a list of possible outcomes that can happen when attempting to log a message. -enum LogAttemptResult { - SUCCESS, ## Message will be logged successfully. - LOG_LEVEL_INSUFFICIENT, ## Message won't be logged because it was output at a log level higher than what Loggie is currently set to. - DOMAIN_DISABLED, ## Message won't be logged because it was outputted from a disabled domain. - INVALID_CHANNEL, ## Message won't be logged because the channel which was supposed to send it doesn't exist. - WRONG_ENVIRONMENT, ## Message won't be logged because the environment the output is being requested from is not compatible with the environment this message is configured to be outputted in. -} - -## Defines a list of possible ways to configure Loggie to check for updates. -enum UpdateCheckType { - DONT_CHECK, ## If the user doesn't want Loggie to check for updates at all. - CHECK_AND_SHOW_MSG, ## If the user wants Loggie to check for updates, and display info in a terminal message. - CHECK_DOWNLOAD_AND_SHOW_MSG, ## If the user wants Loggie to check for updates, download the update, and display info in a terminal message. - CHECK_AND_SHOW_UPDATER_WINDOW, ## If the user wants Loggie to check for updats, and display the updater window. -} - -## Defines a lists of possible environments in which a [LoggieMsg] can be outputted. -enum MsgEnvironment { - BOTH, ## The message will be outputted both in-engine (tool scripts) and when the project is running. - ENGINE, ## The message will be outputted only in-engine (tool scripts). - RUNTIME, ## The message will be outputted only when the project is running. -} diff --git a/addons/loggie/tools/loggie_enums.gd.uid b/addons/loggie/tools/loggie_enums.gd.uid deleted file mode 100644 index 4263530..0000000 --- a/addons/loggie/tools/loggie_enums.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://dh3dmjky74fuo diff --git a/addons/loggie/tools/loggie_system_specs.gd b/addons/loggie/tools/loggie_system_specs.gd deleted file mode 100644 index b40eaac..0000000 --- a/addons/loggie/tools/loggie_system_specs.gd +++ /dev/null @@ -1,186 +0,0 @@ -@tool - -## LoggieSystemSpecs is a helper class that defines various functions on how to access data about the local machine and its specs -## and creates displayable strings out of them. -class_name LoggieSystemSpecsMsg extends LoggieMsg - -## Embeds various system specs into the content of this message. -func embed_specs() -> LoggieSystemSpecsMsg: - self.embed_system_specs() - self.embed_localization_specs() - self.embed_date_data().nl() - self.embed_hardware_specs().nl() - self.embed_video_specs().nl() - self.embed_display_specs().nl() - self.embed_audio_specs().nl() - self.embed_engine_specs().nl() - self.embed_input_specs() - return self - -## Embeds essential data about the logger into the content of this message. -func embed_essential_logger_specs() -> LoggieSystemSpecsMsg: - var loggie = get_logger() - self.add(loggie.msg("|\t Is in Production:").bold(), loggie.is_in_production()).nl() - self.add(loggie.msg("|\t Default Channel(s):").bold(),loggie.settings.default_channels).nl() - self.add(loggie.msg("|\t Msg Format Mode:").bold(), LoggieEnums.MsgFormatMode.keys()[loggie.settings.msg_format_mode]).nl() - self.add(loggie.msg("|\t Log Level:").bold(), LoggieEnums.LogLevel.keys()[loggie.settings.log_level]).nl() - return self - -## Embeds advanced data about the logger into the content of this message. -func embed_advanced_logger_specs() -> LoggieSystemSpecsMsg: - var loggie = get_logger() - - self.add(loggie.msg("|\t Is in Production:").bold(), loggie.is_in_production()).nl() - - var settings_dict = loggie.settings.to_dict() - for setting_var_name : String in settings_dict.keys(): - var setting_value = settings_dict[setting_var_name] - var content_to_print = setting_value - - match setting_var_name: - "msg_format_mode": - content_to_print = LoggieEnums.MsgFormatMode.keys()[setting_value] - "log_level": - content_to_print = LoggieEnums.LogLevel.keys()[setting_value] - "box_characters_mode": - content_to_print = LoggieEnums.BoxCharactersMode.keys()[setting_value] - - self.add(loggie.msg("|\t", setting_var_name.capitalize(), ":").bold(), content_to_print).nl() - - return self - -## Adds data about the user's software to the content of this message. -func embed_system_specs() -> LoggieSystemSpecsMsg: - var loggie = get_logger() - var header = loggie.msg("Operating System: ").color(Color.ORANGE).add(OS.get_name()).box(4) - self.add(header) - return self - -## Adds data about localization to the content of this message. -func embed_localization_specs() -> LoggieSystemSpecsMsg: - var loggie = get_logger() - var header = loggie.msg("Localization: ").color(Color.ORANGE).add(OS.get_locale()).box(7) - self.add(header) - return self - -## Adds data about the current date/time to the content of this message. -func embed_date_data() -> LoggieSystemSpecsMsg: - var loggie = get_logger() - var header = loggie.msg("Date").color(Color.ORANGE).box(15) - self.add(header) - self.add(loggie.msg("Date and time (local):").bold(), Time.get_datetime_string_from_system(false, true)).nl() - self.add(loggie.msg("Date and time (UTC):").bold(), Time.get_datetime_string_from_system(true, true)).nl() - self.add(loggie.msg("Date (local):").bold(), Time.get_date_string_from_system(false)).nl() - self.add(loggie.msg("Date (UTC):").bold(), Time.get_date_string_from_system(true)).nl() - self.add(loggie.msg("Time (local):").bold(), Time.get_time_string_from_system(false)).nl() - self.add(loggie.msg("Time (UTC):").bold(), Time.get_time_string_from_system(true)).nl() - self.add(loggie.msg("Timezone:").bold(), Time.get_time_zone_from_system()).nl() - self.add(loggie.msg("UNIX time:").bold(), Time.get_unix_time_from_system()).nl() - return self - -## Adds data about the user's hardware to the content of this message. -func embed_hardware_specs() -> LoggieSystemSpecsMsg: - var loggie = get_logger() - var header = loggie.msg("Hardware").color(Color.ORANGE).box(13) - self.add(header) - self.add(loggie.msg("Model name:").bold(), OS.get_model_name()).nl() - self.add(loggie.msg("Processor name:").bold(), OS.get_processor_name()).nl() - return self - -## Adds data about the video system to the content of this message. -func embed_video_specs() -> LoggieSystemSpecsMsg: - const adapter_type_to_string = ["Other (Unknown)", "Integrated", "Discrete", "Virtual", "CPU"] - var adapter_type_string = adapter_type_to_string[RenderingServer.get_video_adapter_type()] - var video_adapter_driver_info = OS.get_video_adapter_driver_info() - var loggie = get_logger() - - var header = loggie.msg("Video").color(Color.ORANGE).box(15) - self.add(header) - self.add(loggie.msg("Adapter name:").bold(), RenderingServer.get_video_adapter_name()).nl() - self.add(loggie.msg("Adapter vendor:").bold(), RenderingServer.get_video_adapter_vendor()).nl() - self.add(loggie.msg("Adapter type:").bold(), adapter_type_string).nl() - self.add(loggie.msg("Adapter graphics API version:").bold(), RenderingServer.get_video_adapter_api_version()).nl() - - if video_adapter_driver_info.size() > 0: - self.add(loggie.msg("Adapter driver name:").bold(), video_adapter_driver_info[0]).nl() - if video_adapter_driver_info.size() > 1: - self.add(loggie.msg("Adapter driver version:").bold(), video_adapter_driver_info[1]).nl() - - return self - -## Adds data about the display to the content of this message. -func embed_display_specs() -> LoggieSystemSpecsMsg: - const screen_orientation_to_string = [ - "Landscape", - "Portrait", - "Landscape (reverse)", - "Portrait (reverse)", - "Landscape (defined by sensor)", - "Portrait (defined by sensor)", - "Defined by sensor", - ] - var screen_orientation_string = screen_orientation_to_string[DisplayServer.screen_get_orientation()] - var loggie = get_logger() - - var header = loggie.msg("Display").color(Color.ORANGE).box(13) - self.add(header) - self.add(loggie.msg("Screen count:").bold(), DisplayServer.get_screen_count()).nl() - self.add(loggie.msg("DPI:").bold(), DisplayServer.screen_get_dpi()).nl() - self.add(loggie.msg("Scale factor:").bold(), DisplayServer.screen_get_scale()).nl() - self.add(loggie.msg("Maximum scale factor:").bold(), DisplayServer.screen_get_max_scale()).nl() - self.add(loggie.msg("Startup screen position:").bold(), DisplayServer.screen_get_position()).nl() - self.add(loggie.msg("Startup screen size:").bold(), DisplayServer.screen_get_size()).nl() - self.add(loggie.msg("Startup screen refresh rate:").bold(), ("%f Hz" % DisplayServer.screen_get_refresh_rate()) if DisplayServer.screen_get_refresh_rate() > 0.0 else "").nl() - self.add(loggie.msg("Usable (safe) area rectangle:").bold(), DisplayServer.get_display_safe_area()).nl() - self.add(loggie.msg("Screen orientation:").bold(), screen_orientation_string).nl() - return self - -## Adds data about the audio system to the content of this message. -func embed_audio_specs() -> LoggieSystemSpecsMsg: - var loggie = get_logger() - var header = loggie.msg("Audio").color(Color.ORANGE).box(14) - self.add(header) - self.add(loggie.msg("Mix rate:").bold(), "%d Hz" % AudioServer.get_mix_rate()).nl() - self.add(loggie.msg("Output latency:").bold(), "%f ms" % (AudioServer.get_output_latency() * 1000)).nl() - self.add(loggie.msg("Output device list:").bold(), ", ".join(AudioServer.get_output_device_list())).nl() - self.add(loggie.msg("Capture device list:").bold(), ", ".join(AudioServer.get_input_device_list())).nl() - return self - -## Adds data about the godot engine to the content of this message. -func embed_engine_specs() -> LoggieSystemSpecsMsg: - var loggie = get_logger() - var header = loggie.msg("Engine").color(Color.ORANGE).box(14) - self.add(header) - self.add(loggie.msg("Version:").bold(), Engine.get_version_info()["string"]).nl() - self.add(loggie.msg("Command-line arguments:").bold(), str(OS.get_cmdline_args())).nl() - self.add(loggie.msg("Is debug build:").bold(), OS.is_debug_build()).nl() - self.add(loggie.msg("Filesystem is persistent:").bold(), OS.is_userfs_persistent()).nl() - return self - -## Adds data about the input device to the content of this message. -func embed_input_specs() -> LoggieSystemSpecsMsg: - var has_virtual_keyboard = DisplayServer.has_feature(DisplayServer.FEATURE_VIRTUAL_KEYBOARD) - var loggie = get_logger() - - var header = loggie.msg("Input").color(Color.ORANGE).box(14) - self.add(header) - self.add(loggie.msg("Device has touch screen:").bold(), DisplayServer.is_touchscreen_available()).nl() - self.add(loggie.msg("Device has virtual keyboard:").bold(), has_virtual_keyboard).nl() - - if has_virtual_keyboard: - self.add(loggie.msg("Virtual keyboard height:").bold(), DisplayServer.virtual_keyboard_get_height()) - - return self - -## Prints out a bunch of useful data about a given script. -## Useful for debugging. -func embed_script_data(script : Script): - var loggie = get_logger() - self.add("Script Data for:", script.get_path()).color("pink") - self.add(":").nl() - self.add(loggie.msg("get_class(): ").color("slate_blue").bold()).add(script.get_class()).nl() - self.add(loggie.msg("get_global_name(): ").color("slate_blue").bold()).add(script.get_global_name()).nl() - self.add(loggie.msg("get_base_script(): ").color("slate_blue").bold()).add(script.get_base_script().resource_path if script.get_base_script() != null else "No base script.").nl() - self.add(loggie.msg("get_instance_base_type(): ").color("slate_blue").bold()).add(script.get_instance_base_type()).nl() - self.add(loggie.msg("get_script_property_list(): ").color("slate_blue").bold()).add(script.get_script_property_list()).nl() - return self diff --git a/addons/loggie/tools/loggie_system_specs.gd.uid b/addons/loggie/tools/loggie_system_specs.gd.uid deleted file mode 100644 index 919f66c..0000000 --- a/addons/loggie/tools/loggie_system_specs.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://dnd34kic4p8bv diff --git a/addons/loggie/tools/loggie_tools.gd b/addons/loggie/tools/loggie_tools.gd deleted file mode 100644 index 2bc0764..0000000 --- a/addons/loggie/tools/loggie_tools.gd +++ /dev/null @@ -1,530 +0,0 @@ -@tool -class_name LoggieTools extends Node - -## Removes BBCode from the given text. -## If [param specific_tags] is an array, it removes only the tags found in that array. -## Otherwise, it removes the tags found in the default_tags array:[br] -## [param ["b", "i", "u", "s", "indent", "code", "url", "center", "right", "color", "bgcolor", "fgcolor"]] -static func remove_BBCode(text: String, specific_tags = null) -> String: - # The bbcode tags to remove. - var default_tags = ["b", "i", "u", "s", "indent", "code", "url", "center", "right", "color", "bgcolor", "fgcolor"] - var tags = specific_tags if specific_tags is Array else default_tags - - var regex = RegEx.new() - var tags_pattern = "|".join(tags) - regex.compile("\\[/?(" + tags_pattern + ")(=[^\\]]*)?\\]") - - var stripped_text = regex.sub(text, "", true) - return stripped_text - -## Concatenates all elements of the given [param args] array into one single string, in consecutive order. -## If [param custom_converter_fn] is provided, and is a [Callable], that function will be used to convert each element of the array into a string -## instead of using [method convert_to_string]. That function will receive 1 argument, which will be a 'Variant', and it has to return a 'String'. -static func concatenate_args(args : Array, custom_converter_fn : Variant = null) -> String: - if args.size() == 0: - return "" - - var converter_fn : Callable = LoggieTools.convert_to_string - if custom_converter_fn is Callable and custom_converter_fn.is_valid() and !custom_converter_fn.is_null(): - converter_fn = custom_converter_fn - - # Start with first element without modifying array - var final_msg : String = converter_fn.call(args[0]) - - # Start from index 1 since we already handled index 0 - for i in range(1, args.size()): - var arg = args[i] - var is_not_followed_by_a_null_arg = true if (i + 1 <= args.size() - 1) and (args[i + 1] != null) else false - if (arg != null) or (arg == null and is_not_followed_by_a_null_arg): - var converted_arg : String = converter_fn.call(arg) - final_msg += (" " + converted_arg) - - return final_msg - -## Converts a text with BBCode in it to markdown. -## A limited set of BBCode tags are supported for this conversion, because standard Markdown can't handle everything -## that BBCode can. For example, colors will be entirely stripped. -static func convert_BBCode_to_markdown(text: String) -> String: - # Purge the unsupported tags. - var unsupported_tags = ["indent", "url", "center", "right", "color", "bgcolor", "fgcolor"] - text = LoggieTools.remove_BBCode(text, unsupported_tags) - - # Space out all instances where "*" characters from multiple tags are strung together, - # since that would break them from rendering with the proper effect in markdown. - # This is only an issue with [b] and [i] tags because they both use the same "*" character - # in markdown to be represented. - text = text.replace("[/b][i]", "** *") - text = text.replace("[/b][/i]", "** *") - text = text.replace("[/i][b]", "* **") - text = text.replace("[/i][/b]", "* **") - text = text.replace("[/i][i]", "* *") - text = text.replace("[/i][/i]", "* *") - text = text.replace("[/b][b]", "** **") - text = text.replace("[/b][/b]", "** **") - - # Perform all supported conversion. - var supported_conversions = { - "[b]" : "**", "[/b]" : "**", - "[i]" : "*", "[/i]" : "*", - "[u]" : "__", "[/u]" : "__", - "[s]" : "~~", "[/s]" : "~~", - } - for bbcodetag in supported_conversions.keys(): - text = text.replace(bbcodetag, supported_conversions[bbcodetag]) - - return text - -## Converts [param something] into a string, with custom handling for -## certain native and custom classes. -static func convert_to_string(something : Variant) -> String: - var result : String - if something is Dictionary: - result = JSON.new().stringify(something, " ", false, true) - elif something is LoggieMsg: - result = something.string() - else: - result = str(something) - return result - -## Takes the given [param str] and returns a terminal-ready version of it by converting its content -## to the appropriate format required to display the string correctly in the provided [param mode] -## msg format mode. -## [b]The provided [param str] is expected to be either in Plain or BBCode format.[/b] -static func convert_string_to_format_mode(str : String, mode : LoggieEnums.MsgFormatMode) -> String: - match mode: - LoggieEnums.MsgFormatMode.ANSI: - # We put the message through the rich_to_ANSI converter which takes care of converting BBCode - # to appropriate ANSI. (Only if the MsgFormatMode is set to ANSI). - # Godot claims to be already preparing BBCode output for ANSI, but it only works with a small - # predefined set of colors, and I think it totally strips stuff like [b], [i], etc. - # It is possible to display those stylings in ANSI, but we have to do our own conversion here - # to support these features instead of having them stripped. - str = LoggieTools.rich_to_ANSI(str) - LoggieEnums.MsgFormatMode.BBCODE: - # No need to do anything for BBCODE mode, because we already expect all strings to - # start out with this format in mind. - pass - LoggieEnums.MsgFormatMode.MARKDOWN: - str = LoggieTools.convert_BBCode_to_markdown(str) - LoggieEnums.MsgFormatMode.PLAIN, _: - str = LoggieTools.remove_BBCode(str) - return str - -## Converts a given [Color] to an ANSI compatible representation of it in code. -static func color_to_ANSI(color: Color) -> String: - var r = int(color.r * 255) - var g = int(color.g * 255) - var b = int(color.b * 255) - return "\u001b[38;2;%d;%d;%dm" % [r, g, b] - -## Strips the BBCode from the given text, and converts all [b], [i] and [color] tags to appropriate ANSI representable codes, -## then returns the converted string. The result of this conversion becomes an ANSI compatible representation of the given [param text]. -static func rich_to_ANSI(text: String) -> String: - var regex_color = RegEx.new() - regex_color.compile("\\[color=(.*?)\\](.*?)\\[/color\\]") - - # Process color tags first. - while regex_color.search(text): - var match = regex_color.search(text) - var color_str = match.get_string(1).to_upper() - var color: Color - var color_code: String - var reset_code = "\u001b[0m" - - # Try to parse the color string - if LoggieTools.NamedColors.has(color_str): - color = LoggieTools.NamedColors[color_str] - else: - color = Color(color_str) - - if color: - color_code = color_to_ANSI(color) - else: - color_code = "" - reset_code = "" - - var replacement = color_code + match.get_string(2) + reset_code - text = text.replace(match.get_string(0), replacement) - - # Process bold and italic tags. - var bold_on = "\u001b[1m" - var bold_off = "\u001b[22m" - var italic_on = "\u001b[3m" - var italic_off = "\u001b[23m" - - text = text.replace("[b]", bold_on).replace("[/b]", bold_off) - text = text.replace("[i]", italic_on).replace("[/i]", italic_off) - - # Remove any other BBCode tags but retain the text between them. - var regex_bbcode = RegEx.new() - regex_bbcode.compile("\\[(b|/b|i|/i|color=[^\\]]+|/color)\\]") - text = regex_bbcode.sub(text, "", true) - - return text - -## Returns a dictionary of call stack data related to the stack the call to this function is a part of. -## This function only works in debug builds, and on the main thread, because it uses [method get_stack]. -## Read more about why in that function's documentation. -static func get_current_stack_frame_data() -> Dictionary: - var stack = get_stack() - if stack.size() > 0: - stack.reverse() - # Prune the frames starting from the first one that comes from loggie_message and onwards. - var pruned_stack = [] - for index in stack.size(): - var source : String = stack[index].source - var prune_breakpoint_files = ["loggie", "loggie_message"] - if prune_breakpoint_files.has(source.get_file().get_basename()): - break - pruned_stack.push_back(stack[index]) - - # The back-most remaining entry in the pruned stack is the first non-Loggie caller. - if pruned_stack.size() >= 1: - return pruned_stack.back() - - return { - "source" : "UnknownStackFrameSource", - "line" : 0, - "function" : "UnknownFunction" - } - -## Returns the `class_name` of a script. -## [br][param path_or_script] should be either an absolute path to the script -## (String, e.g. "res://my_script.gd"), or a [Script] object. -## [br][param proxy] defines which kind of text will be used as a replacement -## for the class name if the script has no 'class_name'. -static func get_class_name_from_script(path_or_script : Variant, proxy : LoggieEnums.NamelessClassExtensionNameProxy) -> String: - var script - var _class_name = "" - - if path_or_script is String or path_or_script is StringName: - if !ResourceLoader.exists(path_or_script, "Script"): - return _class_name - script = load(path_or_script) - elif path_or_script is Script: - script = path_or_script - - if not (script is Script): - push_error("Invalid 'path_or_script' param provided to get_class_name_from_script: {path}".format({"path" : path_or_script})) - else: - if not script.has_method("get_global_name"): - # User is using a pre-4.3 version of Godot that doesn't have Script.get_global_name. - # We must use a different method to achieve this then. - return extract_class_name_from_gd_script(path_or_script, proxy) - - # Try to get the class name directly. - _class_name = script.get_global_name() - - if _class_name != "": - return _class_name - - # If that's empty, the script is either a base class, or a class without a name. - # Check if this script has a base script, and if so, use that one as the target whose name to obtain. - # If it doesn't have it, use what the [param proxy] demands. - var base_script = script.get_base_script() - if base_script != null: - return get_class_name_from_script(base_script, proxy) - else: - match proxy: - LoggieEnums.NamelessClassExtensionNameProxy.BASE_TYPE: - _class_name = script.get_instance_base_type() - LoggieEnums.NamelessClassExtensionNameProxy.SCRIPT_NAME: - _class_name = script.get_script_property_list().front()["name"] - - return _class_name - -## Opens and reads a .gd script file to find out its 'class_name' or what it 'extends'. -## [param path_or_script] should be either an absolute path to the script -## (String, e.g. "res://my_script.gd"), or a [Script] object. -## [br][param proxy] defines which kind of text will be used as a replacement -## for the class name if the script has no 'class_name'. -## [br][br][b]Note:[/b] This is a compatibility method that will be used on older versions of Godot which -## don't support [method Script.get_global_name]. -static func extract_class_name_from_gd_script(path_or_script : Variant, proxy : LoggieEnums.NamelessClassExtensionNameProxy) -> String: - var path : String - - if path_or_script is String: - path = path_or_script - elif path_or_script is Script: - path = path_or_script.resource_path - else: - push_error("Invalid 'path_or_script' param provided to extract_class_name_from_gd_script: {path}".format({"path" : path_or_script})) - return "" - - var file = FileAccess.open(path, FileAccess.READ) - if not file: - return "File Open Error {filepath}".format({"filepath" : path}) - - var _class_name: String = "" - - for line_num in 40: # Loop only up to 40 lines - if file.eof_reached(): - break - - var line = file.get_line().strip_edges() - - if line.begins_with("class_name"): - _class_name = line.split(" ")[1] - break - - if _class_name == "": - var script = load(path) - if script is Script: - match proxy: - LoggieEnums.NamelessClassExtensionNameProxy.BASE_TYPE: - _class_name = script.get_instance_base_type() - LoggieEnums.NamelessClassExtensionNameProxy.SCRIPT_NAME: - _class_name = script.get_script_property_list().front()["name"] - - file.close() - return _class_name - -## Takes the given [param string] and returns an array made out of chunks of the given size. -## The string is chunked from start to end. -static func chunk_string(string : String, chunk_size : int) -> Array: - var message_chunks = [] - if string.length() >= chunk_size: - # Cut chunk_size pieces from the left side of the string and push them to message_chunks. - while string.length() >= chunk_size: - message_chunks.append(string.left(chunk_size)) - string = string.substr(chunk_size, -1) - - # Append the remaining slice as the final chunk. - if string.length() > 0: - message_chunks.append(string) - return message_chunks - else: - return [string] - -## Copies the directory at the given [param path_dir_to_copy] path and places the copy at the given [param path_dir_to_copy_into] path. -## Returns a dictionary with 2 keys: -##[codeblock] -##`errors` : Array[Error] # An array of all errors that occured during the process. ('Error.OK' is an exception and won't be included here) -##`messages` : Array[LoggieMsg] # An array of messages describing the process, including informational or error related content. -##[/codeblock] -static func copy_dir_absolute(path_dir_to_copy: String, path_dir_to_copy_into: String, overwrite_existing_files_with_same_name : bool = false) -> Dictionary: - const debug_enabled = false - var result = { - "errors" : [], - "messages" : [] - } - - # Ensure source directory is openable. - var source_dir = DirAccess.open(path_dir_to_copy) - if source_dir == null: - var open_error = DirAccess.get_open_error() - result.errors.push_back(open_error) - result.messages.push_back(LoggieMsg.new("Failed to open source directory: ", path_dir_to_copy, " with error: ", error_string(open_error))) - return result - - # Ensure target directory is openable. - var target_dir = DirAccess.open(path_dir_to_copy_into) - var target_dir_path_abs = ProjectSettings.globalize_path(path_dir_to_copy_into) - if target_dir == null: - var msg = LoggieMsg.new("📂 Target directory not found - creating it at:").msg(path_dir_to_copy_into).color(Color.CADET_BLUE) - result.messages.push_back(msg) - DirAccess.make_dir_recursive_absolute(path_dir_to_copy_into) - target_dir = DirAccess.open(path_dir_to_copy_into) - - # Copy all files from the current source directory into the target directory. - for file_name : String in source_dir.get_files(): - var file_path_abs = ProjectSettings.globalize_path(path_dir_to_copy.path_join(file_name)) - var target_file_path_abs = target_dir_path_abs.path_join(file_name) - var copying_msg = LoggieMsg.new("📝 Copying file...") - copying_msg.msg(file_path_abs).italic().color(Color.CORNFLOWER_BLUE).add(" -> ") - copying_msg.msg(target_file_path_abs).bold().color(Color.CORNFLOWER_BLUE) - - var is_overwrite_required = false - if FileAccess.file_exists(target_file_path_abs): - is_overwrite_required = true - if overwrite_existing_files_with_same_name: - copying_msg.nl().msg("\t[!] Target file already exists and will be overwritten.").bold().color(Color.DARK_KHAKI) - else: - copying_msg.nl().msg("\t🛑 File will not be copied as overwriting existing files is disabled.").bold().color(Color.SALMON) - - result.messages.push_back(copying_msg) - - if (not is_overwrite_required) or (is_overwrite_required and overwrite_existing_files_with_same_name): - var copy_error = DirAccess.copy_absolute(file_path_abs, target_file_path_abs) - if copy_error != OK: - result.errors.push_back(copy_error) - result.messages.push_back(LoggieMsg.new("Attempt to copy file failed with error: '", error_string(copy_error))) - - # Create all of source directory's subdirectories in the target directory and copy their contents. - for dir_name : String in source_dir.get_directories(): - var source_subdir_path = path_dir_to_copy.path_join(dir_name) - var source_subdir_path_abs = ProjectSettings.globalize_path(source_subdir_path) - var target_subdir_path = path_dir_to_copy_into.path_join(dir_name) - var dir_path_abs = ProjectSettings.globalize_path(target_subdir_path) - - result.messages.push_back(LoggieMsg.new("📂 Creating directory: ").msg("{dir}".format({"dir": dir_path_abs})).color(Color.CADET_BLUE)) - var make_dir_error = DirAccess.make_dir_recursive_absolute(dir_path_abs) - if make_dir_error != OK: - result.errors.push_back(make_dir_error) - var error_msg = LoggieMsg.new("Attempt to create directory at absolute path recursively failed with error: '", error_string(make_dir_error)) - result.messages.push_back(error_msg) - continue - - # Recursively copy the contents of the subdirectory - var subdir_copy_result = copy_dir_absolute(source_subdir_path_abs, target_subdir_path, overwrite_existing_files_with_same_name) - result.errors = result.errors + subdir_copy_result.errors - result.messages = result.messages + subdir_copy_result.messages - - if debug_enabled: - for msg : LoggieMsg in result.messages: - print_rich(msg.string()) - - return result - -## A dictionary of named colors matching the constants from [Color] used to help with rich text coloring. -## There may be a way to obtain these Color values without this dictionary if one can somehow check for the -## existence and value of a constant on the Color class (since they're already there), -## but I can't seem to find a way, so this will have to do for now. -static var NamedColors = { - "ALICE_BLUE": Color(0.941176, 0.972549, 1, 1), - "ANTIQUE_WHITE": Color(0.980392, 0.921569, 0.843137, 1), - "AQUA": Color(0, 1, 1, 1), - "AQUAMARINE": Color(0.498039, 1, 0.831373, 1), - "AZURE": Color(0.941176, 1, 1, 1), - "BEIGE": Color(0.960784, 0.960784, 0.862745, 1), - "BISQUE": Color(1, 0.894118, 0.768627, 1), - "BLACK": Color(0, 0, 0, 1), - "BLANCHED_ALMOND": Color(1, 0.921569, 0.803922, 1), - "BLUE": Color(0, 0, 1, 1), - "BLUE_VIOLET": Color(0.541176, 0.168627, 0.886275, 1), - "BROWN": Color(0.647059, 0.164706, 0.164706, 1), - "BURLYWOOD": Color(0.870588, 0.721569, 0.529412, 1), - "CADET_BLUE": Color(0.372549, 0.619608, 0.627451, 1), - "CHARTREUSE": Color(0.498039, 1, 0, 1), - "CHOCOLATE": Color(0.823529, 0.411765, 0.117647, 1), - "CORAL": Color(1, 0.498039, 0.313726, 1), - "CORNFLOWER_BLUE": Color(0.392157, 0.584314, 0.929412, 1), - "CORNSILK": Color(1, 0.972549, 0.862745, 1), - "CRIMSON": Color(0.862745, 0.0784314, 0.235294, 1), - "CYAN": Color(0, 1, 1, 1), - "DARK_BLUE": Color(0, 0, 0.545098, 1), - "DARK_CYAN": Color(0, 0.545098, 0.545098, 1), - "DARK_GOLDENROD": Color(0.721569, 0.52549, 0.0431373, 1), - "DARK_GRAY": Color(0.662745, 0.662745, 0.662745, 1), - "DARK_GREEN": Color(0, 0.392157, 0, 1), - "DARK_KHAKI": Color(0.741176, 0.717647, 0.419608, 1), - "DARK_MAGENTA": Color(0.545098, 0, 0.545098, 1), - "DARK_OLIVE_GREEN": Color(0.333333, 0.419608, 0.184314, 1), - "DARK_ORANGE": Color(1, 0.54902, 0, 1), - "DARK_ORCHID": Color(0.6, 0.196078, 0.8, 1), - "DARK_RED": Color(0.545098, 0, 0, 1), - "DARK_SALMON": Color(0.913725, 0.588235, 0.478431, 1), - "DARK_SEA_GREEN": Color(0.560784, 0.737255, 0.560784, 1), - "DARK_SLATE_BLUE": Color(0.282353, 0.239216, 0.545098, 1), - "DARK_SLATE_GRAY": Color(0.184314, 0.309804, 0.309804, 1), - "DARK_TURQUOISE": Color(0, 0.807843, 0.819608, 1), - "DARK_VIOLET": Color(0.580392, 0, 0.827451, 1), - "DEEP_PINK": Color(1, 0.0784314, 0.576471, 1), - "DEEP_SKY_BLUE": Color(0, 0.74902, 1, 1), - "DIM_GRAY": Color(0.411765, 0.411765, 0.411765, 1), - "DODGER_BLUE": Color(0.117647, 0.564706, 1, 1), - "FIREBRICK": Color(0.698039, 0.133333, 0.133333, 1), - "FLORAL_WHITE": Color(1, 0.980392, 0.941176, 1), - "FOREST_GREEN": Color(0.133333, 0.545098, 0.133333, 1), - "FUCHSIA": Color(1, 0, 1, 1), - "GAINSBORO": Color(0.862745, 0.862745, 0.862745, 1), - "GHOST_WHITE": Color(0.972549, 0.972549, 1, 1), - "GOLD": Color(1, 0.843137, 0, 1), - "GOLDENROD": Color(0.854902, 0.647059, 0.12549, 1), - "GRAY": Color(0.745098, 0.745098, 0.745098, 1), - "GREEN": Color(0, 1, 0, 1), - "GREEN_YELLOW": Color(0.678431, 1, 0.184314, 1), - "HONEYDEW": Color(0.941176, 1, 0.941176, 1), - "HOT_PINK": Color(1, 0.411765, 0.705882, 1), - "INDIAN_RED": Color(0.803922, 0.360784, 0.360784, 1), - "INDIGO": Color(0.294118, 0, 804, 1), - "IVORY": Color(1, 1, 0.941176, 1), - "KHAKI": Color(0.941176, 0.901961, 0.54902, 1), - "LAVENDER": Color(0.901961, 0.901961, 0.980392, 1), - "LAVENDER_BLUSH": Color(1, 0.941176, 0.960784, 1), - "LAWN_GREEN": Color(0.486275, 0.988235, 0, 1), - "LEMON_CHIFFON": Color(1, 0.980392, 0.803922, 1), - "LIGHT_BLUE": Color(0.678431, 0.847059, 0.901961, 1), - "LIGHT_CORAL": Color(0.941176, 0.501961, 0.501961, 1), - "LIGHT_CYAN": Color(0.878431, 1, 1, 1), - "LIGHT_GOLDENROD": Color(0.980392, 0.980392, 0.823529, 1), - "LIGHT_GRAY": Color(0.827451, 0.827451, 0.827451, 1), - "LIGHT_GREEN": Color(0.564706, 0.933333, 0.564706, 1), - "LIGHT_PINK": Color(1, 0.713726, 0.756863, 1), - "LIGHT_SALMON": Color(1, 0.627451, 0.478431, 1), - "LIGHT_SEA_GREEN": Color(0.12549, 0.698039, 0.666667, 1), - "LIGHT_SKY_BLUE": Color(0.529412, 0.807843, 0.980392, 1), - "LIGHT_SLATE_GRAY": Color(0.466667, 0.533333, 0.6, 1), - "LIGHT_STEEL_BLUE": Color(0.690196, 0.768627, 0.870588, 1), - "LIGHT_YELLOW": Color(1, 1, 0.878431, 1), - "LIME": Color(0, 1, 0, 1), - "LIME_GREEN": Color(0.196078, 0.803922, 0.196078, 1), - "LINEN": Color(0.980392, 0.941176, 0.901961, 1), - "MAGENTA": Color(1, 0, 1, 1), - "MAROON": Color(0.690196, 0.188235, 0.376471, 1), - "MEDIUM_AQUAMARINE": Color(0.4, 0.803922, 0.666667, 1), - "MEDIUM_BLUE": Color(0, 0, 0.803922, 1), - "MEDIUM_ORCHID": Color(0.729412, 0.333333, 0.827451, 1), - "MEDIUM_PURPLE": Color(0.576471, 0.439216, 0.858824, 1), - "MEDIUM_SEA_GREEN": Color(0.235294, 0.701961, 0.443137, 1), - "MEDIUM_SLATE_BLUE": Color(0.482353, 0.407843, 0.933333, 1), - "MEDIUM_SPRING_GREEN": Color(0, 0.980392, 0.603922, 1), - "MEDIUM_TURQUOISE": Color(0.282353, 0.819608, 0.8, 1), - "MEDIUM_VIOLET_RED": Color(0.780392, 0.0823529, 0.521569, 1), - "MIDNIGHT_BLUE": Color(0.0980392, 0.0980392, 0.439216, 1), - "MINT_CREAM": Color(0.960784, 1, 0.980392, 1), - "MISTY_ROSE": Color(1, 0.894118, 0.882353, 1), - "MOCCASIN": Color(1, 0.894118, 0.709804, 1), - "NAVAJO_WHITE": Color(1, 0.870588, 0.678431, 1), - "NAVY_BLUE": Color(0, 0, 0.501961, 1), - "OLD_LACE": Color(0.992157, 0.960784, 0.901961, 1), - "OLIVE": Color(0.501961, 0.501961, 0, 1), - "OLIVE_DRAB": Color(0.419608, 0.556863, 0.137255, 1), - "ORANGE": Color(1, 0.647059, 0, 1), - "ORANGE_RED": Color(1, 0.270588, 0, 1), - "ORCHID": Color(0.854902, 0.439216, 0.839216, 1), - "PALE_GOLDENROD": Color(0.933333, 0.909804, 0.666667, 1), - "PALE_GREEN": Color(0.596078, 0.984314, 0.596078, 1), - "PALE_TURQUOISE": Color(0.686275, 0.933333, 0.933333, 1), - "PALE_VIOLET_RED": Color(0.858824, 0.439216, 0.576471, 1), - "PAPAYA_WHIP": Color(1, 0.937255, 0.835294, 1), - "PEACH_PUFF": Color(1, 0.854902, 0.72549, 1), - "PERU": Color(0.803922, 0.521569, 0.247059, 1), - "PINK": Color(1, 0.752941, 0.796078, 1), - "PLUM": Color(0.866667, 0.627451, 0.866667, 1), - "POWDER_BLUE": Color(0.690196, 0.878431, 0.901961, 1), - "PURPLE": Color(0.627451, 0.12549, 0.941176, 1), - "REBECCA_PURPLE": Color(0.4, 0.2, 0.6, 1), - "RED": Color(1, 0, 0, 1), - "ROSY_BROWN": Color(0.737255, 0.560784, 0.560784, 1), - "ROYAL_BLUE": Color(0.254902, 0.411765, 0.882353, 1), - "SADDLE_BROWN": Color(0.545098, 0.270588, 0.0745098, 1), - "SALMON": Color(0.980392, 0.501961, 0.447059, 1), - "SANDY_BROWN": Color(0.956863, 0.643137, 0.376471, 1), - "SEA_GREEN": Color(0.180392, 0.545098, 0.341176, 1), - "SEASHELL": Color(1, 0.960784, 0.933333, 1), - "SIENNA": Color(0.627451, 0.321569, 0.176471, 1), - "SILVER": Color(0.752941, 0.752941, 0.752941, 1), - "SKY_BLUE": Color(0.529412, 0.807843, 0.921569, 1), - "SLATE_BLUE": Color(0.415686, 0.352941, 0.803922, 1), - "SLATE_GRAY": Color(0.439216, 0.501961, 0.564706, 1), - "SNOW": Color(1, 0.980392, 0.980392, 1), - "SPRING_GREEN": Color(0, 1, 0.498039, 1), - "STEEL_BLUE": Color(0.27451, 0.509804, 0.705882, 1), - "TAN": Color(0.823529, 0.705882, 0.54902, 1), - "TEAL": Color(0, 0.501961, 0.501961, 1), - "THISTLE": Color(0.847059, 0.74902, 0.847059, 1), - "TOMATO": Color(1, 0.388235, 0.278431, 1), - "TRANSPARENT": Color(1, 1, 1, 0), - "TURQUOISE": Color(0.25098, 0.878431, 0.815686, 1), - "VIOLET": Color(0.933333, 0.509804, 0.933333, 1), - "WEB_GRAY": Color(0.501961, 0.501961, 0.501961, 1), - "WEB_GREEN": Color(0, 0.501961, 0, 1), - "WEB_MAROON": Color(0.501961, 0, 0, 1), - "WEB_PURPLE": Color(0.501961, 0, 0.501961, 1), - "WHEAT": Color(0.960784, 0.870588, 0.701961, 1), - "WHITE": Color(1, 1, 1, 1), - "WHITE_SMOKE": Color(0.960784, 0.960784, 0.960784, 1), - "YELLOW": Color(1, 1, 0, 1), - "YELLOW_GREEN": Color(0.603922, 0.803922, 0.196078, 1) -} diff --git a/addons/loggie/tools/loggie_tools.gd.uid b/addons/loggie/tools/loggie_tools.gd.uid deleted file mode 100644 index 5261ecd..0000000 --- a/addons/loggie/tools/loggie_tools.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://c857kew4i5tgp diff --git a/addons/loggie/version_management/loggie_update.gd b/addons/loggie/version_management/loggie_update.gd deleted file mode 100644 index e8cce0a..0000000 --- a/addons/loggie/version_management/loggie_update.gd +++ /dev/null @@ -1,335 +0,0 @@ -@tool -class_name LoggieUpdate extends Node - -## Emitted when this update fails. -signal failed() - -## Emitted when this update succeeds. -signal succeeded() - -## Emitted when this declares that it has made some progress. -signal progress(value : float) - -## Emitted when this declares that it wants a new status/substatus message to be used. -signal status_changed(status_msg : Variant, substatus_msg : Variant) - -## Emitted when this update is starting. -signal starting() - -## Emitted when the 'is_in_progress' status of this update changes. -signal is_in_progress_changed(new_value : bool) - -## The path to the directory that should have a temporary file created and filled with the patch zipball buffer. -const TEMP_FILES_DIR = "user://" - -## If this is set to a non-empty string, it will be used as the directory into which the new update will be -## installed. Used for testing/debugging. When set to empty string, Loggie will automatically figure out -## where it is being updated from and use that directory instead. -const ALT_LOGGIE_PLUGIN_CONTAINER_DIR = "" - -## The domain from which status report [LoggieMsg]s from this update will be logged from. -const REPORTS_DOMAIN : String = "loggie_update_status_reports" - -## Stores a reference to the logger that's requesting this update. -var _logger : Variant - -## The URL used to visit a page that contains the release notes for this update. -var release_notes_url = "" - -## Stores a reference to the previous version the connected [member _logger] is/was using. -var prev_version : LoggieVersion = null - -## Stores a reference to the new version the connected [member _logger] should be using after the update. -var new_version : LoggieVersion = null - -## Indicates whether this update is currently in progress. -var is_in_progress : bool = false - -## Whether the update should retain or purge the backup it makes of the previous version files once it is done -## installing and applying the new update. -var _clean_up_backup_files : bool = true - -func _init(_prev_version : LoggieVersion, _new_version : LoggieVersion) -> void: - self.prev_version = _prev_version - self.new_version = _new_version - -## Returns a reference to the logger that's requesting this update. -func get_logger() -> Variant: - return self._logger - -## Sets the URL used to visit a page that contains the release notes for this update. -func set_release_notes_url(url : String) -> void: - self.release_notes_url = url - -## Sets whether this window is currently performing the update. -func set_is_in_progress(value : bool) -> void: - self.is_in_progress = value - self.is_in_progress_changed.emit(value) - -## Tries to start the version update. Prevents the update from starting -## if something is not configured correctly and pushes a warning/error. -func try_start(): - if Engine.has_meta("LoggieUpdateSuccessful") and Engine.get_meta("LoggieUpdateSuccessful"): - # No plan to allow multiple updates to run during a single Engine session anyway so no need to start another one. - # Also, this helps with internal testing of the updater and prevents an updated plugin from auto-starting another update - # when dealing with proxy versions. - return - - if self._logger == null: - push_warning("Attempt to start Loggie update failed - member '_logger' on the LoggieUpdate object is null.") - return - - if self.is_in_progress: - push_warning("Attempt to start Loggie update failed - the update is already in progress.") - return - - if self.new_version == null or self.prev_version == null: - push_warning("Attempt to start Loggie update failed - the updater prompt has the 'new_version' or 'prev_version' variable at null value.") - return - elif !self.new_version.is_higher_than(self.prev_version): - push_warning("Attempt to start Loggie update failed - the 'new_version' is not higher than 'prev_version'.") - return - - if self.new_version.has_meta("github_data"): - var github_data = self.new_version.get_meta("github_data") - if !github_data.has("zipball_url"): - push_error("Attempt to start Loggie update failed - the meta key 'github_data' on the 'new_version' is a dictionary that does not contain the required 'zipball_url' key/value pair.") - return - else: - push_error("Attempt to start Loggie update failed - the meta key 'github_data' on the 'new_version' was not found.") - return - - _start() - -## Internal function. Starts the updating of the [param _logger] to the [param new_version]. -## Do not run without verification that configuration is correct. -## Use [method try_start] to call this safely. -func _start(): - var loggie = self.get_logger() - - loggie.msg("Loggie is updating from version {v_prev} to {v_new}.".format({ - "v_prev" : self.prev_version, - "v_new" : self.new_version - })).domain(REPORTS_DOMAIN).color(Color.ORANGE).box(12).info() - - set_is_in_progress(true) - starting.emit() - - # Make request to configured endpoint. - var update_data = self.new_version.get_meta("github_data") - var http_request = HTTPRequest.new() - loggie.add_child(http_request) - http_request.request_completed.connect(_on_download_request_completed) - http_request.request(update_data.zipball_url) - -## Internal callback function. -## Defines what happens when new update content is successfully downloaded from GitHub. -## Called automatically during [method _start] if everything is going according to plan. -func _on_download_request_completed(result: int, response_code: int, headers: PackedStringArray, body: PackedByteArray) -> void: - var loggie = self.get_logger() - - if loggie == null: - _failure("The _logger used by the updater window is null.") - return - - if result != HTTPRequest.RESULT_SUCCESS: - _failure("Download request returned non-zero code: " + str(result)) - return - - #region || Prepare: Define variables and callbacks that will be used throughout. - # The path to the directory which is supposed to contain the plugin directory. - # This will usually be 'res://addons/', but could be anything else too. We'll read it dynamically - # from the connected logger to guarantee correctness. - var LOGGIE_PLUGIN_CONTAINER_DIR = ALT_LOGGIE_PLUGIN_CONTAINER_DIR if !ALT_LOGGIE_PLUGIN_CONTAINER_DIR.is_empty() else loggie.get_directory_path().get_base_dir() + "/" - - # The path to the `loggie` plugin directory. - var LOGGIE_PLUGIN_DIR = ProjectSettings.globalize_path(LOGGIE_PLUGIN_CONTAINER_DIR.path_join("loggie/")) - - # The full path filename of the temporary .zip archive that will be created to store the downloaded data. - var TEMP_ZIP_FILE_PATH = ProjectSettings.globalize_path(TEMP_FILES_DIR.path_join("_temp_loggie_{ver}.zip".format({"ver": str(new_version)}))) - - # The path to the directory where a temporary backup of current loggie plugin files will be copied to. - # (will be created if doesn't exist). - var TEMP_PREV_VER_FILES_DIR_PATH = ProjectSettings.globalize_path(TEMP_FILES_DIR.path_join("_temp_loggie_{ver}_backup".format({"ver": str(prev_version)}))) - - # A callable that can be reused within this function that cleans up the temporary and unused directories, - # once this function comes to a conclusion. - var clean_up : Callable = func(): - if FileAccess.file_exists(TEMP_ZIP_FILE_PATH): - OS.move_to_trash(TEMP_ZIP_FILE_PATH) - if DirAccess.dir_exists_absolute(TEMP_PREV_VER_FILES_DIR_PATH) and self._clean_up_backup_files: - OS.move_to_trash(TEMP_PREV_VER_FILES_DIR_PATH) - - # A callable that can be used to replace the currently existing Loggie plugin directory - # with whatever is currently (temporarily) stored as its backup. - var revert_to_backup = func(): - if FileAccess.file_exists(LOGGIE_PLUGIN_DIR): - OS.move_to_trash(LOGGIE_PLUGIN_DIR) - if DirAccess.dir_exists_absolute(TEMP_PREV_VER_FILES_DIR_PATH): - DirAccess.rename_absolute(TEMP_PREV_VER_FILES_DIR_PATH, LOGGIE_PLUGIN_DIR) - - #endregion - - #region || Step 1: Store the downloaded content into a temporary zip file. - send_progress_update(20, "Processing Files", "Storing patch locally...") - - var zip_file: FileAccess = FileAccess.open(TEMP_ZIP_FILE_PATH, FileAccess.WRITE) - if zip_file == null: - _failure("Failed to open temp. file for writing: {path}".format({"path": TEMP_ZIP_FILE_PATH})) - clean_up.call() - return - - zip_file.store_buffer(body) - zip_file.close() - #endregion - - #region || Step 2: Make a temporary backup of the currently used Loggie plugin directory. - send_progress_update(30, "Processing Files", "Backing up previous version files...") - - if !DirAccess.dir_exists_absolute(LOGGIE_PLUGIN_DIR): - _failure("The Loggie plugin directory ({path}) could not be found.".format({ - "path" : LOGGIE_PLUGIN_DIR - })) - clean_up.call() - return - - var copy_prev_ver_result = LoggieTools.copy_dir_absolute(LOGGIE_PLUGIN_DIR, TEMP_PREV_VER_FILES_DIR_PATH, true) - if copy_prev_ver_result.errors.size() > 0: - var copy_prev_var_result_errors_msg = LoggieMsg.new("Errors encountered:") - for error in copy_prev_ver_result.errors: - copy_prev_var_result_errors_msg.nl().add(error_string(error)) - _failure(copy_prev_var_result_errors_msg.string()) - clean_up.call() - return - #endregion - - #region || Step 3: Remove currently used Loggie plugin directory and create a new one in its place populated with new version files. - send_progress_update(50, "Processing Files", "Copying new version files...") - var zip_reader: ZIPReader = ZIPReader.new() - var zip_reader_open_error = zip_reader.open(TEMP_ZIP_FILE_PATH) - if zip_reader_open_error != OK: - _failure("Attempt to open temp. file(s) archive at {path} failed with error: {err_str}".format({ - "path": LOGGIE_PLUGIN_DIR, - "err_str" : error_string(zip_reader_open_error) - })) - clean_up.call() - return - - # Trash the previously existing loggie plugin dir entirely. - # A new one will be created in a moment. - OS.move_to_trash(LOGGIE_PLUGIN_DIR) - - # Get a list of all files and dirs in the zip. - var files : PackedStringArray = zip_reader.get_files() - - # This will always be the "addons" directory in the zip archive in which we expect - # to find the "loggie" directory containing the plugin. - var base_path_in_zip = files[1] - - # Remove the first 2 parts of the path that we won't be needing at all. - files.remove_at(0) - files.remove_at(0) - - # Create all needed files and directories. - for path in files: - var new_file_path: String = path.replace(base_path_in_zip, "") - if path.ends_with("/"): - DirAccess.make_dir_recursive_absolute(LOGGIE_PLUGIN_CONTAINER_DIR + new_file_path) - else: - var abs_path = LOGGIE_PLUGIN_CONTAINER_DIR + new_file_path - var file : FileAccess = FileAccess.open(abs_path, FileAccess.WRITE) - if file == null: - _failure("Error while storing buffer data into temporary files - write target directory or file {target} gave the error: {error}".format({ - "error" : error_string(FileAccess.get_open_error()), - "target" : abs_path - })) - revert_to_backup.call() - clean_up.call() - return - else: - var file_content = zip_reader.read_file(path) - file.store_buffer(file_content) - file.close() - - zip_reader.close() - #endregion - - #region || Step 4: Move the user's 'custom_settings.gd' to the new version directory if it existed in prev version. - send_progress_update(70, "Processing Files", "Reapplying custom settings...") - var CUSTOM_SETTINGS_IN_PREV_VER_PATH = TEMP_PREV_VER_FILES_DIR_PATH.path_join("custom_settings.gd") - if FileAccess.file_exists(CUSTOM_SETTINGS_IN_PREV_VER_PATH): - var CUSTOM_SETTINGS_IN_NEW_VER_PATH = ProjectSettings.globalize_path(LOGGIE_PLUGIN_DIR.path_join("custom_settings.gd")) - var custom_settings_copy_error = DirAccess.copy_absolute(CUSTOM_SETTINGS_IN_PREV_VER_PATH, CUSTOM_SETTINGS_IN_NEW_VER_PATH) - if custom_settings_copy_error != OK: - push_error("Attempt to copy the 'custom_settings.gd' file from {p1} to {p2} failed with error: {error}".format({ - "p1" : CUSTOM_SETTINGS_IN_PREV_VER_PATH, - "p2" : CUSTOM_SETTINGS_IN_NEW_VER_PATH, - "error" : error_string(custom_settings_copy_error) - })) - #endregion - - #region || Step 5: Move the user's 'channels/custom_channels' directory to the new version if it existed in prev version. - send_progress_update(80, "Processing Files", "Reapplying custom channels...") - var CUSTOM_CHANNELS_IN_PREV_VER_PATH = ProjectSettings.globalize_path(TEMP_PREV_VER_FILES_DIR_PATH.path_join("channels/custom_channels/")) - if DirAccess.dir_exists_absolute(CUSTOM_CHANNELS_IN_PREV_VER_PATH): - var CUSTOM_CHANNELS_IN_NEW_VER_PATH = ProjectSettings.globalize_path(LOGGIE_PLUGIN_DIR.path_join("channels/custom_channels/")) - var copy_prev_ver_custom_channels_result = LoggieTools.copy_dir_absolute(CUSTOM_CHANNELS_IN_PREV_VER_PATH, CUSTOM_CHANNELS_IN_NEW_VER_PATH, true) - if copy_prev_ver_custom_channels_result.errors.size() > 0: - var copy_prev_var_result_errors_msg = LoggieMsg.new("Errors encountered:") - for error in copy_prev_ver_result.errors: - copy_prev_var_result_errors_msg.nl().add(error_string(error)) - push_error("Attempt to copy the 'channels/custom_channels' directory from {p1} to {p2} failed with error: {error}".format({ - "p1" : CUSTOM_CHANNELS_IN_PREV_VER_PATH, - "p2" : CUSTOM_CHANNELS_IN_NEW_VER_PATH, - "error" : copy_prev_var_result_errors_msg.string() - })) - else: - print("The {path} directory doesn't exist.".format({"path": CUSTOM_CHANNELS_IN_PREV_VER_PATH})) - #endregion - - #region || Step 6: Clean up temporarily created files and close filewrite. - send_progress_update(90, "Processing Files", "Cleaning up...") - clean_up.call() - #endregion - - #region || Step 7: Declare successful. Wrap up. - send_progress_update(100, "Finishing up", "") - _success() - #endregion - -## Internal function used at the end of the updating process if it is successfully completed. -func _success(): - set_is_in_progress(false) - - var msg = "💬 You may see temporary errors in the console due to Loggie files being re-scanned and reloaded on the spot.\nIt should be safe to dismiss them, but for the best experience, reload the Godot editor (and the plugin, if something seems wrong).\n\n🚩 If you see a 'Files have been modified on disk' window pop up, choose 'Discard local changes and reload' to accept incoming changes." - status_changed.emit(null, msg) - succeeded.emit() - - print_rich(LoggieMsg.new("👀 Loggie updated to version {new_ver}!".format({"new_ver": self.new_version})).bold().color(Color.ORANGE).string()) - print_rich(LoggieMsg.new("\t📚 Release Notes: ").bold().msg("[url={url}]{url}[/url]".format({"url": release_notes_url})).color(Color.CORNFLOWER_BLUE).string()) - print_rich(LoggieMsg.new("\t💬 Support, Development & Feature Requests: ").bold().msg("[url=https://discord.gg/XPdxpMqmcs]https://discord.gg/XPdxpMqmcs[/url]").color(Color.CORNFLOWER_BLUE).string()) - - if Engine.is_editor_hint(): - var editor_plugin = Engine.get_meta("LoggieEditorPlugin") - editor_plugin.get_editor_interface().get_resource_filesystem().scan() - editor_plugin.get_editor_interface().call_deferred("set_plugin_enabled", "loggie", true) - editor_plugin.get_editor_interface().set_plugin_enabled("loggie", false) - Engine.set_meta("LoggieUpdateSuccessful", true) - print_rich("[b]Updater:[/b] ", msg) - -## Internal function used to interrupt an ongoing update and cause it to fail. -func _failure(status_msg : String): - var loggie = self.get_logger() - loggie.msg(status_msg).color(Color.SALMON).preprocessed(false).error() - loggie.msg("\t💬 If this issue persists, consider reporting: ").bold().msg("https://github.com/Shiva-Shadowsong/loggie/issues").color(Color.CORNFLOWER_BLUE).preprocessed(false).info() - set_is_in_progress(false) - failed.emit() - status_changed.emit(null, status_msg) - -## Informs the listeners of the [signal progress] / [signal status_changed] signals about a change in the progress of the update. -func send_progress_update(progress_amount : float, status_msg : String, substatus_msg : String): - var loggie = self.get_logger() - if !substatus_msg.is_empty(): - loggie.msg("•• ").msg(substatus_msg).domain(REPORTS_DOMAIN).preprocessed(false).info() - progress.emit(progress_amount) - status_changed.emit(status_msg, substatus_msg) diff --git a/addons/loggie/version_management/loggie_update.gd.uid b/addons/loggie/version_management/loggie_update.gd.uid deleted file mode 100644 index 18b5122..0000000 --- a/addons/loggie/version_management/loggie_update.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://cx6w7o7nxwoob diff --git a/addons/loggie/version_management/loggie_version.gd b/addons/loggie/version_management/loggie_version.gd deleted file mode 100644 index 54de640..0000000 --- a/addons/loggie/version_management/loggie_version.gd +++ /dev/null @@ -1,39 +0,0 @@ -## A utility class that helps with storing data about a Loggie Version and converting and comparing version strings. -class_name LoggieVersion extends Resource - -var minor : int = -1 ## The minor component of the version. -var major : int = -1 ## The major component of the version. -var proxy_for : LoggieVersion = null ## The version that this version is a proxy for. (Internal use only) - -func _init(_major : int = -1, _minor : int = -1) -> void: - self.minor = _minor - self.major = _major - -func _to_string() -> String: - return str(self.major) + "." + str(self.minor) - -## Checks if this version is valid. -## (neither minor nor major component can be less than 0). -func is_valid() -> bool: - return (minor >= 0 and major >= 0) - -## Checks if the given [param version] if higher than this version. -func is_higher_than(version : LoggieVersion): - if self.major > version.major: - return true - if self.minor > version.minor: - return true - return false - -## Given a string that has 2 sets of digits separated by a ".", breaks that down -## into a version with a major and minor version component (ints). -static func from_string(version_string : String) -> LoggieVersion: - var version : LoggieVersion = LoggieVersion.new() - var regex = RegEx.new() - regex.compile("(\\d+)\\.(\\d+)") - - var result = regex.search(version_string) - if result: - version.major = result.get_string(1).to_int() - version.minor = result.get_string(2).to_int() - return version diff --git a/addons/loggie/version_management/loggie_version.gd.uid b/addons/loggie/version_management/loggie_version.gd.uid deleted file mode 100644 index b0edc52..0000000 --- a/addons/loggie/version_management/loggie_version.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://dgetf62kxei2g diff --git a/addons/loggie/version_management/loggie_version_manager.gd b/addons/loggie/version_management/loggie_version_manager.gd deleted file mode 100644 index 0bc5979..0000000 --- a/addons/loggie/version_management/loggie_version_manager.gd +++ /dev/null @@ -1,225 +0,0 @@ -@tool -## A class that can be used to inquire about, generate, and operate on [LoggieVersion]s. -## It is also responsible for notifying about an available update, and starting it, if configured to do so. -class_name LoggieVersionManager extends RefCounted - -## Emitted when this version manager updates the known [member latest_version]. -signal latest_version_updated() - -## Emitted when this version manager has created a valid [LoggieUpdate] and is ready to use it. -signal update_ready() - -## The URL where loggie releases on GitHub can be found. -const REMOTE_RELEASES_URL = "https://api.github.com/repos/Shiva-Shadowsong/loggie/releases" - -## The domain from which [LoggieMsg]s from this version manager will be logged from. -const REPORTS_DOMAIN : String = "loggie_version_check_reports" - -## Stores the result of reading the Loggie version with [method get_current_Version]. -var version : LoggieVersion = null - -## Stores the result of reading the latest Loggie version with [method get_latest_version]. -var latest_version : LoggieVersion = null - -## Stores a reference to a ConfigFile which will be loaded from [member CONFIG_PATH] during [method find_and_store_current_version]. -var config : ConfigFile = ConfigFile.new() - -## Stores a reference to the logger that's using this version manager. -var _logger : Variant = null - -## Stores a reference to the [LoggieUpdate] that has been created to handle an available update. -var _update : LoggieUpdate = null - -## Internal debug variable. -## If not null, this version manager will treat the [LoggieVersion] provided under this variable to be the current [param version]. -## Useful for debugging this module when you want to simulate that the current version is something different than it actually is. -var _version_proxy : LoggieVersion = null - -## Initializes this version manager, connecting it to the logger that's using it and updating the version cache based on that logger, -## which will further prompt the emission of signals in this class, and so on. -func connect_logger(logger : Variant) -> void: - self.latest_version_updated.connect(on_latest_version_updated) - self._logger = logger - - # Set to true during development to enable debug prints related to version management. - self._logger.set_domain_enabled(self.REPORTS_DOMAIN, false) - - update_version_cache() - -## Returns a reference to the logger object that is using this version manager. -func get_logger() -> Variant: - return self._logger - -## Reads the current version of Loggie from plugin.cfg and stores it in [member version]. -func find_and_store_current_version(): - var detected_version = self._logger.version - if self._version_proxy != null: - self.version = self._version_proxy - self.version.proxy_for = detected_version - else: - self.version = detected_version - -## Reads the latest version of Loggie from a GitHub API response and stores it in [member latest_version]. -func find_and_store_latest_version(): - var loggie = self.get_logger() - var http_request = HTTPRequest.new() - loggie.add_child(http_request) - loggie.msg("Retrieving version(s) info from endpoint:", REMOTE_RELEASES_URL).domain(REPORTS_DOMAIN).debug() - http_request.request_completed.connect(_on_get_latest_version_request_completed, CONNECT_ONE_SHOT) - http_request.request(REMOTE_RELEASES_URL) - -## Defines what happens once this version manager emits the signal saying that an update is available. -func on_update_available_detected() -> void: - var loggie = self.get_logger() - if loggie.settings.update_check_mode == LoggieEnums.UpdateCheckType.DONT_CHECK: - return - - self._update = LoggieUpdate.new(self.version, self.latest_version) - self._update._logger = loggie - - var github_data = self.latest_version.get_meta("github_data") - var latest_release_notes_url = github_data.html_url - self._update.set_release_notes_url(latest_release_notes_url) - loggie.add_child(self._update) - update_ready.emit() - - # No plan to allow multiple updates to run during a single Engine session anyway so no need to start another one. - # Also, this helps with internal testing of the updater and prevents an updated plugin from auto-starting another update - # when dealing with proxy versions. - var hasUpdatedAlready = Engine.has_meta("LoggieUpdateSuccessful") and Engine.get_meta("LoggieUpdateSuccessful") - - match loggie.settings.update_check_mode: - LoggieEnums.UpdateCheckType.CHECK_AND_SHOW_UPDATER_WINDOW: - if hasUpdatedAlready: - loggie.info("Update already performed. ✔️") - return - create_and_show_updater_widget(self._update) - LoggieEnums.UpdateCheckType.CHECK_AND_SHOW_MSG: - loggie.msg("👀 Loggie update available!").color(Color.ORANGE).header().msg(" > Current version: {version}, Latest version: {latest}".format({ - "version" : self.version, - "latest" : self.latest_version - })).info() - LoggieEnums.UpdateCheckType.CHECK_DOWNLOAD_AND_SHOW_MSG: - if hasUpdatedAlready: - loggie.info("Update already performed. ✔️") - return - loggie.set_domain_enabled("loggie_update_status_reports", true) - self._update.try_start() - -## Defines what happens when the request to GitHub API which grabs all the Loggie releases is completed. -func _on_get_latest_version_request_completed(result : int, response_code : int, headers : PackedStringArray, body: PackedByteArray): - var loggie = self.get_logger() - loggie.msg("Response for request received:", response_code).domain(REPORTS_DOMAIN).debug() - - if result != HTTPRequest.RESULT_SUCCESS: - return - - var response = JSON.parse_string(body.get_string_from_utf8()) - - if typeof(response) != TYPE_ARRAY: - loggie.error("The response parsed from GitHub was not an array. Response received in an unsupported format.") - return - - var latest_version_data = response[0] # GitHub releases are in order of creation, so grab the first one from the response, that's the latest one. - self.latest_version = LoggieVersion.from_string(latest_version_data.tag_name) - self.latest_version.set_meta("github_data", latest_version_data) - - loggie.msg("Current version of Loggie:", self.version).msg(" (proxy for: {value})".format({"value": self.version.proxy_for})).domain(REPORTS_DOMAIN).debug() - loggie.msg("Latest version of Loggie:", self.latest_version).domain(REPORTS_DOMAIN).debug() - latest_version_updated.emit() - -## Executes every time this version manager updates the known latest_version. -func on_latest_version_updated() -> void: - var loggie = self.get_logger() - if loggie == null: - return - - # Check if update is available. - if loggie.settings.update_check_mode != LoggieEnums.UpdateCheckType.DONT_CHECK: - loggie.msg("👀 Loggie:").bold().color("orange").msg(" Checking for updates...").info() - if is_update_available(): - on_update_available_detected() - else: - loggie.msg("👀 Loggie:").bold().color("orange").msg(" Up to date. ✔️").color(Color.LIGHT_GREEN).info() - -## Displays the widget which informs the user of the available update and offers actions that they can take next. -func create_and_show_updater_widget(update : LoggieUpdate) -> Window: - const PATH_TO_WIDGET_SCENE = "addons/loggie/version_management/update_prompt_window.tscn" - var WIDGET_SCENE = load(PATH_TO_WIDGET_SCENE) - if !is_instance_valid(WIDGET_SCENE): - push_error("Loggie Update Prompt Window scene not found on expected path: {path}".format({"path": PATH_TO_WIDGET_SCENE})) - return - - var loggie = self.get_logger() - if loggie == null: - return - - var popup_parent = null - if Engine.is_editor_hint() and Engine.has_meta("LoggieEditorInterfaceBaseControl"): - popup_parent = Engine.get_meta("LoggieEditorInterfaceBaseControl") - else: - popup_parent = SceneTree.current_scene - - # Configure popup window. - var _popup = Window.new() - update.succeeded.connect(func(): - _popup.queue_free() - var success_dialog = AcceptDialog.new() - var msg = "💬 You may see temporary errors in the console due to Loggie files being re-scanned and reloaded on the spot.\nIt should be safe to dismiss them, but for the best experience, reload the Godot editor (and the plugin, if something seems wrong).\n\n🚩 If you see a 'Files have been modified on disk' window pop up, choose 'Discard local changes and reload' to accept incoming changes." - success_dialog.dialog_text = msg - success_dialog.title = "Loggie Updater" - if is_instance_valid(popup_parent): - popup_parent.add_child(success_dialog) - success_dialog.popup_centered() - ) - var on_close_requested = func(): - _popup.queue_free() - - _popup.close_requested.connect(on_close_requested, CONNECT_ONE_SHOT) - _popup.borderless = false - _popup.unresizable = true - _popup.transient = true - _popup.title = "Update Available" - - # Configure window widget and add it as a child of the popup window. - var widget : LoggieUpdatePrompt = WIDGET_SCENE.instantiate() - widget.connect_to_update(update) - widget.set_anchors_preset(Control.PRESET_FULL_RECT) - widget._logger = loggie - widget.close_requested.connect(on_close_requested, CONNECT_ONE_SHOT) - - if is_instance_valid(popup_parent): - popup_parent.add_child(_popup) - _popup.popup_centered(widget.host_window_size) - _popup.add_child(widget) - - return _popup - -## Updates the local variables which point to the current and latest version of Loggie. -func update_version_cache(): - # Read and cache the current version of Loggie from plugin.cfg. - find_and_store_current_version() - - # Read and cache the latest version of Loggie from GitHub. - # (Do it only if running in editor, no need for this if running in a game). - var logger = self.get_logger() - if logger is Node: - if !Engine.is_editor_hint(): - return - if logger.is_node_ready(): - find_and_store_latest_version() - else: - logger.ready.connect(func(): - find_and_store_latest_version() - , CONNECT_ONE_SHOT) - -## Checks if an update for Loggie is available. Run only after running [method update_version_cache]. -func is_update_available() -> bool: - var loggie = self.get_logger() - if !(self.version is LoggieVersion and self.version.is_valid()): - loggie.error("The current version of Loggie is not valid. Run `find_and_store_current_version` once to obtain this value first.") - return false - if !(self.latest_version is LoggieVersion and self.latest_version.is_valid()): - loggie.error("The latest version of Loggie is not valid. Run `find_and_store_latest_version` once to obtain this value first.") - return false - return self.latest_version.is_higher_than(self.version) diff --git a/addons/loggie/version_management/loggie_version_manager.gd.uid b/addons/loggie/version_management/loggie_version_manager.gd.uid deleted file mode 100644 index 36f8e28..0000000 --- a/addons/loggie/version_management/loggie_version_manager.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://cqp1sp4ovt6pd diff --git a/addons/loggie/version_management/update_prompt_window.gd b/addons/loggie/version_management/update_prompt_window.gd deleted file mode 100644 index ce97d0a..0000000 --- a/addons/loggie/version_management/update_prompt_window.gd +++ /dev/null @@ -1,192 +0,0 @@ -@tool -## The Loggie Update Prompt is a control node that is meant to be created and added as a child of some other node, most commonly a [Window]. -## It connects to a [LoggieUpdate] via its [method connect_to_update] method, then displays data about that update depending on what kind of -## data that [LoggieUpdate] provides with its signals. -class_name LoggieUpdatePrompt extends Panel - -## Emitted when the user requests to close the update prompt. -signal close_requested() - -## The animation player that will be used to animate the appearance of this window. -@export var animator : AnimationPlayer - -## The size the window that's hosting this panel will be forced to assume when -## it's ready to pop this up on the screen. -@export var host_window_size : Vector2 = Vector2(1063, 672) - -## Stores a reference to the logger that's using this window. -var _logger : Variant - -## The update this window is visually representing. -var _update : LoggieUpdate - -## Stores a boolean which indicates whether the update is currently in progress. -var is_currently_updating : bool = false - -func _ready() -> void: - connect_control_effects() - %UpdateNowBtn.grab_focus() - refresh_remind_later_btn() - animator.play("RESET") - -## Connects this window to an instance of [LoggieUpdate] whose progress and properties this window is supposed to track. -func connect_to_update(p_update : LoggieUpdate) -> void: - self._update = p_update - _update.is_in_progress_changed.connect(is_update_in_progress_changed) - _update.starting.connect(on_update_starting) - _update.succeeded.connect(on_update_succeeded) - _update.failed.connect(on_update_failed) - _update.progress.connect(on_update_progress) - _update.status_changed.connect(on_update_status_changed) - -## Returns a reference to the logger object that is using this widget. -func get_logger() -> Variant: - return self._logger - -## Defines what happens when the update this window is representing updates its "is in progress" status. -func is_update_in_progress_changed(is_in_progress : bool) -> void: - self.is_currently_updating = is_in_progress - - # The first time we enter the UpdateMonitor view and start an update, - # the %Notice node and its children should no longer (ever) be interactive or processing, - # since there is no way to get back to that view anymore. - if is_in_progress and %Notice.process_mode != Node.PROCESS_MODE_DISABLED: - %Notice.process_mode = Node.PROCESS_MODE_DISABLED - for child in %NoticeButtons.get_children(): - if child is Button: - child.focus_mode = Button.FOCUS_NONE - -## Connects the effects and functionalities of various controls in this window. -func connect_control_effects(): - if !is_instance_valid(self._update): - return - - # Configure version(s) labels. - %LabelCurrentVersion.text = str(self._update.prev_version) - %LabelLatestVersion.text = str(self._update.new_version) - %LabelOldVersion.text = str(self._update.prev_version) - %LabelNewVersion.text = str(self._update.new_version) - - # Configure onhover/focused effects. - var buttons_with_on_focushover_effect = [%OptionExitBtn, %OptionRestartGodotBtn, %OptionRetryUpdateBtn, %ReleaseNotesBtn, %RemindLaterBtn, %UpdateNowBtn] - for button : Button in buttons_with_on_focushover_effect: - button.focus_entered.connect(_on_button_focus_entered.bind(button)) - button.focus_exited.connect(_on_button_focus_exited.bind(button)) - button.mouse_entered.connect(_on_button_focus_entered.bind(button)) - button.mouse_exited.connect(_on_button_focus_exited.bind(button)) - button.pivot_offset = button.size * 0.5 - - # Connect behavior which executes when "Update Now" is pressed. - %UpdateNowBtn.pressed.connect(func(): - self._update.try_start() - ) - - # Configure Release Notes button. - %ReleaseNotesBtn.visible = !self._update.release_notes_url.is_empty() - %ReleaseNotesBtn.tooltip_text = "Opens {url} in browser.".format({"url": self._update.release_notes_url}) - %ReleaseNotesBtn.pressed.connect(func(): - if !self._update.release_notes_url.is_empty(): - OS.shell_open(self._update.release_notes_url) - ) - - # Connect behavior which executes when the "Remind Me Later / Close" is pressed. - %RemindLaterBtn.pressed.connect(func(): close_requested.emit()) - %OptionExitBtn.pressed.connect(func(): close_requested.emit()) - - # Connect behavior which executes when the "Retry" button is pressed. - %OptionRetryUpdateBtn.pressed.connect(self._update.try_start) - - # Connect behavior which executes when the "Restart Godot" button is pressed. - %OptionRestartGodotBtn.pressed.connect(func(): - close_requested.emit() - if Engine.is_editor_hint(): - var editor_plugin = Engine.get_meta("LoggieEditorPlugin") - editor_plugin.get_editor_interface().restart_editor(true) - ) - - # The "Don't show again checkbox" updates project settings whenever it is toggled. - %DontShowAgainCheckbox.toggled.connect(func(toggled_on : bool): - var loggie = self.get_logger() - if Engine.is_editor_hint() and loggie != null: - if toggled_on: - loggie.settings.update_check_mode = LoggieEnums.UpdateCheckType.CHECK_AND_SHOW_MSG - ProjectSettings.set_setting(loggie.settings.project_settings.update_check_mode.path, LoggieEnums.UpdateCheckType.CHECK_AND_SHOW_MSG) - else: - loggie.settings.update_check_mode = LoggieEnums.UpdateCheckType.CHECK_AND_SHOW_UPDATER_WINDOW - ProjectSettings.set_setting(loggie.settings.project_settings.update_check_mode.path, LoggieEnums.UpdateCheckType.CHECK_AND_SHOW_UPDATER_WINDOW) - refresh_remind_later_btn() - ) - -## Updates the content of the "Remind Later Btn" to show text appropriate to the current state of the "Don't show again" checkbox. -func refresh_remind_later_btn(): - if %DontShowAgainCheckbox.button_pressed: - %RemindLaterBtn.text = "close" - else: - %RemindLaterBtn.text = "remind later" - -## Defines what happens when the [member _update] is detected to be starting. -func on_update_starting(): - if animator.current_animation != "show_update_overview": - animator.queue("show_update_overview") - %ProgressBar.value = 0 - %LabelMainStatus.text = "Downloading" - %LabelUpdateStatus.text = "Waiting for server response." - %OptionExitBtn.disabled = true - %OptionExitBtn.visible = false - %OptionRetryUpdateBtn.disabled = true - %OptionRetryUpdateBtn.visible = false - %OptionRestartGodotBtn.disabled = true - %OptionRestartGodotBtn.visible = false - -## Defines what happens when the [member _update] declares it has made progress. -func on_update_progress(value : float): - %ProgressBar.value = value - -## Defines what happens when the [member _update] declares it has succeeded. -func on_update_succeeded(): - %LabelMainStatus.text = "Updated" - %OptionExitBtn.disabled = false - %OptionExitBtn.visible = true - %OptionRestartGodotBtn.disabled = false - %OptionRestartGodotBtn.visible = true - if animator.is_playing(): - animator.stop() - animator.play("finish_success") - -## Defines what happens when the [member _update] declares it wants the status message to change. -func on_update_status_changed(status_msg : Variant, substatus_msg : Variant): - if status_msg is String: - %LabelMainStatus.text = status_msg - if substatus_msg is String: - %LabelUpdateStatus.text = substatus_msg - -## Defines what happens when the [member _update] declares it has failed. -func on_update_failed(): - %ProgressBar.value = 0 - %LabelMainStatus.text = "Failed" - %OptionExitBtn.disabled = false - %OptionExitBtn.visible = true - %OptionRetryUpdateBtn.disabled = false - %OptionRetryUpdateBtn.visible = true - %OptionRestartGodotBtn.disabled = true - %OptionRestartGodotBtn.visible = false - -func _on_button_focus_entered(button : Button): - if button.has_meta("scale_tween"): - var old_tween = button.get_meta("scale_tween") - old_tween.kill() - button.set_meta("scale_tween", null) - - var tween : Tween = button.create_tween() - tween.tween_property(button, "scale", Vector2(1.2, 1.2), 0.1) - button.set_meta("scale_tween", tween) - -func _on_button_focus_exited(button : Button): - if button.has_meta("scale_tween"): - var old_tween = button.get_meta("scale_tween") - old_tween.kill() - button.set_meta("scale_tween", null) - - var tween : Tween = button.create_tween() - tween.tween_property(button, "scale", Vector2(1.0, 1.0), 0.1).from_current() - button.set_meta("scale_tween", tween) diff --git a/addons/loggie/version_management/update_prompt_window.gd.uid b/addons/loggie/version_management/update_prompt_window.gd.uid deleted file mode 100644 index df14153..0000000 --- a/addons/loggie/version_management/update_prompt_window.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://b48scbgtjloqx diff --git a/addons/loggie/version_management/update_prompt_window.tscn b/addons/loggie/version_management/update_prompt_window.tscn deleted file mode 100644 index 2997221..0000000 --- a/addons/loggie/version_management/update_prompt_window.tscn +++ /dev/null @@ -1,818 +0,0 @@ -[gd_scene load_steps=32 format=3 uid="uid://d2eq0khfi3s15"] - -[ext_resource type="Script" path="res://addons/loggie/version_management/update_prompt_window.gd" id="1_xb7je"] -[ext_resource type="Texture2D" uid="uid://cgh6hd3u8nlpj" path="res://addons/loggie/assets/updater_bg.png" id="2_lbawe"] -[ext_resource type="FontFile" uid="uid://e3rpni7mpu0p" path="res://addons/loggie/assets/theme/fonts/coffee_soda.ttf" id="3_a36jf"] -[ext_resource type="FontFile" uid="uid://btuvtbhws7p8s" path="res://addons/loggie/assets/theme/fonts/PatrickHandSC-Regular.ttf" id="4_lnh27"] -[ext_resource type="StyleBox" uid="uid://ckw36egxdynxc" path="res://addons/loggie/assets/theme/loggie_border_box.tres" id="5_avea8"] -[ext_resource type="Texture2D" uid="uid://bfnp2a0sbhi2x" path="res://addons/loggie/assets/theme/checkbox/checkbox_checked.png" id="6_yoxpw"] -[ext_resource type="Texture2D" uid="uid://bib1lwikra5kr" path="res://addons/loggie/assets/theme/checkbox/checkbox_unchecked.png" id="7_xu2hn"] -[ext_resource type="Texture2D" uid="uid://dqf5cye21gyw8" path="res://addons/loggie/assets/theme/checkbox/checkbox_checked_disabled.png" id="8_4h2cx"] -[ext_resource type="Texture2D" uid="uid://cloe7vx2ej0nf" path="res://addons/loggie/assets/theme/checkbox/checkbox_unchecked_disabled.png" id="9_51n7f"] -[ext_resource type="Texture2D" uid="uid://2fr6et0qni2y" path="res://addons/loggie/assets/icon.png" id="10_abt8m"] -[ext_resource type="Theme" uid="uid://bntkg3oi4b314" path="res://addons/loggie/assets/theme/loggie_theme.tres" id="11_5uxhl"] - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_3bh8r"] -draw_center = false -border_width_bottom = 4 -border_color = Color(0.86, 0.6794, 0.344, 1) - -[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_rjg43"] - -[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_bwgrr"] - -[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_qbrxo"] - -[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_3asxb"] - -[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_86pfv"] - -[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_rw12e"] - -[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_j1ttd"] - -[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_3sc8x"] - -[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_ndum7"] - -[sub_resource type="Gradient" id="Gradient_wnvcb"] -colors = PackedColorArray(0.0311948, 0.0139167, 0.0080977, 1, 0.125625, 0.1125, 0.15, 1) - -[sub_resource type="GradientTexture1D" id="GradientTexture1D_k1b6u"] -gradient = SubResource("Gradient_wnvcb") - -[sub_resource type="Gradient" id="Gradient_rkgx7"] -interpolation_mode = 2 -offsets = PackedFloat32Array(0, 0.270059, 1) -colors = PackedColorArray(0.584314, 0.337255, 0.145098, 1, 0.495303, 0.287021, 0.13981, 1, 0.188235, 0.113725, 0.121569, 1) - -[sub_resource type="GradientTexture2D" id="GradientTexture2D_p6ad4"] -gradient = SubResource("Gradient_rkgx7") -fill_from = Vector2(0.239316, 0) -fill_to = Vector2(0.303419, 0.876068) - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_y40yc"] -bg_color = Color(0.12, 0.0528, 0.09088, 0.556863) -border_width_left = 3 -border_width_top = 3 -border_width_right = 3 -border_width_bottom = 6 -border_color = Color(0.533576, 0.418125, 0.23421, 1) -border_blend = true -corner_radius_top_left = 11 -corner_radius_top_right = 11 -corner_radius_bottom_right = 11 -corner_radius_bottom_left = 11 - -[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_h3ybw"] -bg_color = Color(0.69, 0.49128, 0.2484, 0.486275) -border_width_right = 4 -border_color = Color(0.94, 0.6768, 0.282, 0.541176) -corner_radius_top_left = 18 -corner_radius_top_right = 18 -corner_radius_bottom_right = 18 -corner_radius_bottom_left = 18 - -[sub_resource type="Animation" id="Animation_almc7"] -length = 0.001 -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath(".:position") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 0, -"values": [Vector2(0, -673)] -} -tracks/1/type = "value" -tracks/1/imported = false -tracks/1/enabled = true -tracks/1/path = NodePath(".:visible") -tracks/1/interp = 1 -tracks/1/loop_wrap = true -tracks/1/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [false] -} -tracks/2/type = "value" -tracks/2/imported = false -tracks/2/enabled = true -tracks/2/path = NodePath("VBoxContainer/OptionButtons/OptionRetryUpdateBtn:disabled") -tracks/2/interp = 1 -tracks/2/loop_wrap = true -tracks/2/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [true] -} -tracks/3/type = "value" -tracks/3/imported = false -tracks/3/enabled = true -tracks/3/path = NodePath("VBoxContainer/OptionButtons/OptionExitBtn:disabled") -tracks/3/interp = 1 -tracks/3/loop_wrap = true -tracks/3/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [true] -} -tracks/4/type = "value" -tracks/4/imported = false -tracks/4/enabled = true -tracks/4/path = NodePath("VBoxContainer/OptionButtons/OptionRetryUpdateBtn:visible") -tracks/4/interp = 1 -tracks/4/loop_wrap = true -tracks/4/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [false] -} -tracks/5/type = "value" -tracks/5/imported = false -tracks/5/enabled = true -tracks/5/path = NodePath("VBoxContainer/OptionButtons/OptionExitBtn:visible") -tracks/5/interp = 1 -tracks/5/loop_wrap = true -tracks/5/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [false] -} -tracks/6/type = "value" -tracks/6/imported = false -tracks/6/enabled = true -tracks/6/path = NodePath("%LabelOldVersion:modulate") -tracks/6/interp = 1 -tracks/6/loop_wrap = true -tracks/6/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 0, -"values": [Color(1, 1, 1, 1)] -} -tracks/7/type = "value" -tracks/7/imported = false -tracks/7/enabled = true -tracks/7/path = NodePath("%LabelNewVersion:modulate") -tracks/7/interp = 1 -tracks/7/loop_wrap = true -tracks/7/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 0, -"values": [Color(1, 1, 1, 1)] -} -tracks/8/type = "value" -tracks/8/imported = false -tracks/8/enabled = true -tracks/8/path = NodePath("%ProgressBar:modulate") -tracks/8/interp = 1 -tracks/8/loop_wrap = true -tracks/8/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 0, -"values": [Color(1, 1, 1, 1)] -} -tracks/9/type = "value" -tracks/9/imported = false -tracks/9/enabled = true -tracks/9/path = NodePath("VBoxContainer:position") -tracks/9/interp = 1 -tracks/9/loop_wrap = true -tracks/9/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 0, -"values": [Vector2(0, 532)] -} -tracks/10/type = "value" -tracks/10/imported = false -tracks/10/enabled = true -tracks/10/path = NodePath("LoggieIcon:scale") -tracks/10/interp = 1 -tracks/10/loop_wrap = true -tracks/10/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 0, -"values": [Vector2(1, 1)] -} - -[sub_resource type="Animation" id="Animation_dewq5"] -resource_name = "finish_success" -length = 0.5 -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath(".:position") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 0, -"values": [Vector2(0, 0)] -} -tracks/1/type = "value" -tracks/1/imported = false -tracks/1/enabled = true -tracks/1/path = NodePath(".:visible") -tracks/1/interp = 1 -tracks/1/loop_wrap = true -tracks/1/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [true] -} -tracks/2/type = "value" -tracks/2/imported = false -tracks/2/enabled = true -tracks/2/path = NodePath("%LabelOldVersion:modulate") -tracks/2/interp = 1 -tracks/2/loop_wrap = true -tracks/2/keys = { -"times": PackedFloat32Array(0, 0.2), -"transitions": PackedFloat32Array(1, 1), -"update": 0, -"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)] -} -tracks/3/type = "value" -tracks/3/imported = false -tracks/3/enabled = true -tracks/3/path = NodePath("%LabelNewVersion:modulate") -tracks/3/interp = 1 -tracks/3/loop_wrap = true -tracks/3/keys = { -"times": PackedFloat32Array(0, 0.2), -"transitions": PackedFloat32Array(1, 1), -"update": 0, -"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)] -} -tracks/4/type = "value" -tracks/4/imported = false -tracks/4/enabled = true -tracks/4/path = NodePath("%ProgressBar:modulate") -tracks/4/interp = 1 -tracks/4/loop_wrap = true -tracks/4/keys = { -"times": PackedFloat32Array(0, 0.2), -"transitions": PackedFloat32Array(1, 1), -"update": 0, -"values": [Color(1, 1, 1, 1), Color(1, 1, 1, 0)] -} -tracks/5/type = "value" -tracks/5/imported = false -tracks/5/enabled = true -tracks/5/path = NodePath("VBoxContainer:position") -tracks/5/interp = 1 -tracks/5/loop_wrap = true -tracks/5/keys = { -"times": PackedFloat32Array(0, 0.466667), -"transitions": PackedFloat32Array(1, 1), -"update": 0, -"values": [Vector2(0, 532), Vector2(1, 432)] -} -tracks/6/type = "value" -tracks/6/imported = false -tracks/6/enabled = true -tracks/6/path = NodePath("LoggieIcon:scale") -tracks/6/interp = 1 -tracks/6/loop_wrap = true -tracks/6/keys = { -"times": PackedFloat32Array(0, 0.166667, 0.2, 0.3, 0.366667, 0.433333), -"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), -"update": 0, -"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1.33, 1), Vector2(1.075, 1.575), Vector2(0.735, 1.465), Vector2(1, 1)] -} - -[sub_resource type="Animation" id="Animation_jm1cu"] -resource_name = "show_update_overview" -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath(".:position") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0, 0.2, 0.266667, 0.333333), -"transitions": PackedFloat32Array(1, 1, 1, 1), -"update": 0, -"values": [Vector2(0, -673), Vector2(0, 0), Vector2(0, 16), Vector2(0, 0)] -} -tracks/1/type = "value" -tracks/1/imported = false -tracks/1/enabled = true -tracks/1/path = NodePath(".:visible") -tracks/1/interp = 1 -tracks/1/loop_wrap = true -tracks/1/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [true] -} -tracks/2/type = "value" -tracks/2/imported = false -tracks/2/enabled = true -tracks/2/path = NodePath("%ProgressBar:modulate") -tracks/2/interp = 1 -tracks/2/loop_wrap = true -tracks/2/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 0, -"values": [Color(1, 1, 1, 1)] -} -tracks/3/type = "value" -tracks/3/imported = false -tracks/3/enabled = true -tracks/3/path = NodePath("%LabelOldVersion:modulate") -tracks/3/interp = 1 -tracks/3/loop_wrap = true -tracks/3/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 0, -"values": [Color(1, 1, 1, 1)] -} -tracks/4/type = "value" -tracks/4/imported = false -tracks/4/enabled = true -tracks/4/path = NodePath("%LabelNewVersion:modulate") -tracks/4/interp = 1 -tracks/4/loop_wrap = true -tracks/4/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 0, -"values": [Color(1, 1, 1, 1)] -} -tracks/5/type = "value" -tracks/5/imported = false -tracks/5/enabled = true -tracks/5/path = NodePath("LoggieIcon:scale") -tracks/5/interp = 1 -tracks/5/loop_wrap = true -tracks/5/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 0, -"values": [Vector2(1, 1)] -} -tracks/6/type = "value" -tracks/6/imported = false -tracks/6/enabled = true -tracks/6/path = NodePath("VBoxContainer:position") -tracks/6/interp = 1 -tracks/6/loop_wrap = true -tracks/6/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 0, -"values": [Vector2(0, 532)] -} - -[sub_resource type="AnimationLibrary" id="AnimationLibrary_lwiu5"] -_data = { -"RESET": SubResource("Animation_almc7"), -"finish_success": SubResource("Animation_dewq5"), -"show_update_overview": SubResource("Animation_jm1cu") -} - -[node name="UpdatePromptWindow" type="Panel" node_paths=PackedStringArray("animator")] -anchors_preset = -1 -anchor_right = 0.923 -anchor_bottom = 1.037 -offset_right = -0.296021 -offset_bottom = 0.0239868 -grow_horizontal = 2 -grow_vertical = 2 -script = ExtResource("1_xb7je") -animator = NodePath("AnimationPlayer") - -[node name="Notice" type="Control" parent="."] -unique_name_in_owner = true -layout_mode = 1 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 - -[node name="Background" type="TextureRect" parent="Notice"] -layout_mode = 1 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -texture = ExtResource("2_lbawe") -expand_mode = 1 - -[node name="LabelLatestVersion" type="Label" parent="Notice"] -unique_name_in_owner = true -layout_mode = 1 -anchors_preset = -1 -anchor_left = 0.148 -anchor_top = 0.549 -anchor_right = 0.352 -anchor_bottom = 0.735 -offset_left = 0.414978 -offset_top = 0.115936 -offset_right = -0.122009 -offset_bottom = 0.123932 -grow_horizontal = 2 -grow_vertical = 0 -theme_override_colors/font_color = Color(0.878431, 0.662745, 0.266667, 1) -theme_override_colors/font_shadow_color = Color(0, 0, 0, 1) -theme_override_colors/font_outline_color = Color(0, 0, 0, 1) -theme_override_constants/shadow_offset_x = 3 -theme_override_constants/shadow_offset_y = 3 -theme_override_constants/outline_size = 18 -theme_override_constants/shadow_outline_size = 3 -theme_override_fonts/font = ExtResource("3_a36jf") -theme_override_font_sizes/font_size = 133 -text = "X.Y" - -[node name="LabelCurrentVersion" type="Label" parent="Notice"] -unique_name_in_owner = true -layout_mode = 1 -anchors_preset = -1 -anchor_left = 0.76 -anchor_top = 0.454 -anchor_right = 0.869 -anchor_bottom = 0.571 -offset_left = 0.0449829 -offset_top = 0.18399 -offset_right = 57.004 -offset_bottom = -0.107056 -grow_horizontal = 0 -grow_vertical = 2 -theme_override_colors/font_color = Color(0.784314, 0.619608, 0.317647, 1) -theme_override_colors/font_shadow_color = Color(0, 0, 0, 1) -theme_override_colors/font_outline_color = Color(0, 0, 0, 1) -theme_override_constants/shadow_offset_x = 3 -theme_override_constants/shadow_offset_y = 3 -theme_override_constants/outline_size = 18 -theme_override_constants/shadow_outline_size = 3 -theme_override_fonts/font = ExtResource("3_a36jf") -theme_override_font_sizes/font_size = 73 -text = "X.Y" - -[node name="VBoxContainer" type="VBoxContainer" parent="Notice"] -layout_mode = 1 -anchors_preset = -1 -anchor_left = 0.229 -anchor_top = 0.789 -anchor_right = 0.771 -anchor_bottom = 0.926 -offset_left = 0.0729828 -offset_top = -0.208008 -offset_right = -0.0730591 -offset_bottom = 9.72797 -grow_horizontal = 2 -theme_override_constants/separation = -15 - -[node name="Label" type="Label" parent="Notice/VBoxContainer"] -layout_mode = 2 -size_flags_horizontal = 4 -theme_override_colors/font_color = Color(0.872047, 0.774098, 0.671572, 1) -theme_override_constants/outline_size = 7 -theme_override_fonts/font = ExtResource("4_lnh27") -theme_override_font_sizes/font_size = 32 -text = "a new version of Loggie is available for download." -horizontal_alignment = 1 - -[node name="HBoxContainer" type="HBoxContainer" parent="Notice/VBoxContainer"] -layout_mode = 2 -size_flags_vertical = 4 -alignment = 1 - -[node name="NoticeButtons" type="HBoxContainer" parent="Notice/VBoxContainer/HBoxContainer"] -unique_name_in_owner = true -layout_mode = 2 -size_flags_horizontal = 6 -theme_override_constants/separation = 51 - -[node name="ReleaseNotesBtn" type="Button" parent="Notice/VBoxContainer/HBoxContainer/NoticeButtons"] -unique_name_in_owner = true -visible = false -layout_mode = 2 -mouse_default_cursor_shape = 2 -theme_override_colors/font_disabled_color = Color(0.53, 0.475145, 0.3869, 1) -theme_override_colors/font_hover_pressed_color = Color(0.996078, 0.94902, 0.882353, 1) -theme_override_colors/font_hover_color = Color(0.98, 0.67571, 0.1862, 1) -theme_override_colors/font_pressed_color = Color(0.994326, 0.950716, 0.88154, 1) -theme_override_colors/font_focus_color = Color(0.996078, 0.94902, 0.882353, 1) -theme_override_colors/font_color = Color(0.980932, 0.843799, 0.621104, 1) -theme_override_colors/font_outline_color = Color(0, 0, 0, 1) -theme_override_constants/outline_size = 8 -theme_override_fonts/font = ExtResource("4_lnh27") -theme_override_font_sizes/font_size = 43 -theme_override_styles/focus = SubResource("StyleBoxFlat_3bh8r") -theme_override_styles/disabled_mirrored = SubResource("StyleBoxEmpty_rjg43") -theme_override_styles/disabled = SubResource("StyleBoxEmpty_bwgrr") -theme_override_styles/hover_pressed_mirrored = SubResource("StyleBoxEmpty_qbrxo") -theme_override_styles/hover_pressed = SubResource("StyleBoxEmpty_3asxb") -theme_override_styles/hover_mirrored = SubResource("StyleBoxEmpty_86pfv") -theme_override_styles/hover = SubResource("StyleBoxFlat_3bh8r") -theme_override_styles/pressed_mirrored = SubResource("StyleBoxEmpty_rw12e") -theme_override_styles/pressed = SubResource("StyleBoxEmpty_j1ttd") -theme_override_styles/normal_mirrored = SubResource("StyleBoxEmpty_3sc8x") -theme_override_styles/normal = SubResource("StyleBoxEmpty_ndum7") -text = "release notes" - -[node name="UpdateNowBtn" type="Button" parent="Notice/VBoxContainer/HBoxContainer/NoticeButtons"] -unique_name_in_owner = true -layout_mode = 2 -mouse_default_cursor_shape = 2 -theme_override_colors/font_disabled_color = Color(0.53, 0.475145, 0.3869, 1) -theme_override_colors/font_hover_pressed_color = Color(0.996078, 0.94902, 0.882353, 1) -theme_override_colors/font_hover_color = Color(0.98, 0.67571, 0.1862, 1) -theme_override_colors/font_pressed_color = Color(0.994326, 0.950716, 0.88154, 1) -theme_override_colors/font_focus_color = Color(0.996078, 0.94902, 0.882353, 1) -theme_override_colors/font_color = Color(0.980932, 0.843799, 0.621104, 1) -theme_override_colors/font_outline_color = Color(0, 0, 0, 1) -theme_override_constants/outline_size = 8 -theme_override_fonts/font = ExtResource("4_lnh27") -theme_override_font_sizes/font_size = 43 -theme_override_styles/focus = SubResource("StyleBoxFlat_3bh8r") -theme_override_styles/disabled_mirrored = SubResource("StyleBoxEmpty_rjg43") -theme_override_styles/disabled = SubResource("StyleBoxEmpty_bwgrr") -theme_override_styles/hover_pressed_mirrored = SubResource("StyleBoxEmpty_qbrxo") -theme_override_styles/hover_pressed = SubResource("StyleBoxEmpty_3asxb") -theme_override_styles/hover_mirrored = SubResource("StyleBoxEmpty_86pfv") -theme_override_styles/hover = SubResource("StyleBoxFlat_3bh8r") -theme_override_styles/pressed_mirrored = SubResource("StyleBoxEmpty_rw12e") -theme_override_styles/pressed = SubResource("StyleBoxEmpty_j1ttd") -theme_override_styles/normal_mirrored = SubResource("StyleBoxEmpty_3sc8x") -theme_override_styles/normal = SubResource("StyleBoxEmpty_ndum7") -text = "update now" - -[node name="RemindLaterBtn" type="Button" parent="Notice/VBoxContainer/HBoxContainer/NoticeButtons"] -unique_name_in_owner = true -layout_mode = 2 -mouse_default_cursor_shape = 2 -theme_override_colors/font_disabled_color = Color(0.53, 0.475145, 0.3869, 1) -theme_override_colors/font_hover_pressed_color = Color(0.996078, 0.94902, 0.882353, 1) -theme_override_colors/font_hover_color = Color(0.98, 0.67571, 0.1862, 1) -theme_override_colors/font_pressed_color = Color(0.994326, 0.950716, 0.88154, 1) -theme_override_colors/font_focus_color = Color(0.996078, 0.94902, 0.882353, 1) -theme_override_colors/font_color = Color(0.98, 0.49, 0.5635, 1) -theme_override_colors/font_outline_color = Color(0, 0, 0, 1) -theme_override_constants/outline_size = 8 -theme_override_fonts/font = ExtResource("4_lnh27") -theme_override_font_sizes/font_size = 43 -theme_override_styles/focus = SubResource("StyleBoxFlat_3bh8r") -theme_override_styles/disabled_mirrored = SubResource("StyleBoxEmpty_rjg43") -theme_override_styles/disabled = SubResource("StyleBoxEmpty_bwgrr") -theme_override_styles/hover_pressed_mirrored = SubResource("StyleBoxEmpty_qbrxo") -theme_override_styles/hover_pressed = SubResource("StyleBoxEmpty_3asxb") -theme_override_styles/hover_mirrored = SubResource("StyleBoxEmpty_86pfv") -theme_override_styles/hover = SubResource("StyleBoxFlat_3bh8r") -theme_override_styles/pressed_mirrored = SubResource("StyleBoxEmpty_rw12e") -theme_override_styles/pressed = SubResource("StyleBoxEmpty_j1ttd") -theme_override_styles/normal_mirrored = SubResource("StyleBoxEmpty_3sc8x") -theme_override_styles/normal = SubResource("StyleBoxEmpty_ndum7") -text = "remind later" - -[node name="DontShowAgainCheckbox" type="CheckBox" parent="Notice"] -unique_name_in_owner = true -layout_mode = 1 -anchors_preset = 1 -anchor_left = 1.0 -anchor_right = 1.0 -offset_left = -289.0 -offset_top = 9.0 -offset_right = -20.0 -offset_bottom = 62.0 -grow_horizontal = 0 -mouse_default_cursor_shape = 2 -theme_override_colors/font_hover_color = Color(0.490196, 0.701961, 0.501961, 1) -theme_override_colors/font_focus_color = Color(0.92549, 0.92549, 0.756863, 1) -theme_override_colors/font_color = Color(0.980932, 0.843799, 0.621104, 1) -theme_override_constants/outline_size = 7 -theme_override_fonts/font = ExtResource("4_lnh27") -theme_override_font_sizes/font_size = 27 -theme_override_styles/focus = ExtResource("5_avea8") -theme_override_icons/checked = ExtResource("6_yoxpw") -theme_override_icons/unchecked = ExtResource("7_xu2hn") -theme_override_icons/radio_checked = ExtResource("6_yoxpw") -theme_override_icons/radio_unchecked = ExtResource("7_xu2hn") -theme_override_icons/checked_disabled = ExtResource("8_4h2cx") -theme_override_icons/unchecked_disabled = ExtResource("9_51n7f") -theme_override_icons/radio_checked_disabled = ExtResource("8_4h2cx") -theme_override_icons/radio_unchecked_disabled = ExtResource("9_51n7f") -text = "do not show this again" - -[node name="UpdateMonitor" type="Control" parent="."] -visible = false -layout_mode = 1 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -offset_top = -673.0 -offset_bottom = -673.0 -grow_horizontal = 2 -grow_vertical = 2 - -[node name="BackgroundUnder" type="TextureRect" parent="UpdateMonitor"] -modulate = Color(1, 1, 1, 0.811765) -layout_mode = 1 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -texture = SubResource("GradientTexture1D_k1b6u") - -[node name="BackgroundOver" type="TextureRect" parent="UpdateMonitor"] -modulate = Color(1, 1, 1, 0.752941) -layout_mode = 1 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -texture = SubResource("GradientTexture2D_p6ad4") - -[node name="ProgressBar" type="ProgressBar" parent="UpdateMonitor"] -unique_name_in_owner = true -layout_mode = 1 -anchors_preset = 7 -anchor_left = 0.5 -anchor_top = 1.0 -anchor_right = 0.5 -anchor_bottom = 1.0 -offset_left = -448.5 -offset_top = -224.0 -offset_right = 449.5 -offset_bottom = -160.0 -grow_horizontal = 2 -grow_vertical = 0 -theme_override_constants/outline_size = 19 -theme_override_fonts/font = ExtResource("3_a36jf") -theme_override_font_sizes/font_size = 31 -theme_override_styles/background = SubResource("StyleBoxFlat_y40yc") -theme_override_styles/fill = SubResource("StyleBoxFlat_h3ybw") - -[node name="LabelMainStatus" type="Label" parent="UpdateMonitor"] -unique_name_in_owner = true -layout_mode = 1 -anchors_preset = 8 -anchor_left = 0.5 -anchor_top = 0.5 -anchor_right = 0.5 -anchor_bottom = 0.5 -offset_left = -201.0 -offset_top = -13.0 -offset_right = 201.0 -offset_bottom = 63.0 -grow_horizontal = 2 -grow_vertical = 2 -theme_override_colors/font_color = Color(0.878431, 0.662745, 0.266667, 1) -theme_override_colors/font_shadow_color = Color(0, 0, 0, 1) -theme_override_colors/font_outline_color = Color(0, 0, 0, 1) -theme_override_constants/outline_size = 14 -theme_override_fonts/font = ExtResource("3_a36jf") -theme_override_font_sizes/font_size = 81 -text = "status" -horizontal_alignment = 1 - -[node name="LabelOldVersion" type="Label" parent="UpdateMonitor"] -unique_name_in_owner = true -layout_mode = 1 -anchors_preset = 8 -anchor_left = 0.5 -anchor_top = 0.5 -anchor_right = 0.5 -anchor_bottom = 0.5 -offset_left = -426.5 -offset_top = 77.0 -offset_right = -24.5 -offset_bottom = 153.0 -grow_horizontal = 2 -grow_vertical = 2 -theme_override_colors/font_color = Color(0.878431, 0.662745, 0.266667, 1) -theme_override_colors/font_shadow_color = Color(0, 0, 0, 1) -theme_override_colors/font_outline_color = Color(0, 0, 0, 1) -theme_override_constants/outline_size = 14 -theme_override_fonts/font = ExtResource("3_a36jf") -theme_override_font_sizes/font_size = 25 -text = "v_old" - -[node name="LabelNewVersion" type="Label" parent="UpdateMonitor"] -unique_name_in_owner = true -layout_mode = 1 -anchors_preset = 8 -anchor_left = 0.5 -anchor_top = 0.5 -anchor_right = 0.5 -anchor_bottom = 0.5 -offset_left = 33.5 -offset_top = 76.0 -offset_right = 435.5 -offset_bottom = 152.0 -grow_horizontal = 2 -grow_vertical = 2 -theme_override_colors/font_color = Color(0.878431, 0.662745, 0.266667, 1) -theme_override_colors/font_shadow_color = Color(0, 0, 0, 1) -theme_override_colors/font_outline_color = Color(0, 0, 0, 1) -theme_override_constants/outline_size = 14 -theme_override_fonts/font = ExtResource("3_a36jf") -theme_override_font_sizes/font_size = 25 -text = "V_NEW" -horizontal_alignment = 2 - -[node name="LoggieIcon" type="TextureRect" parent="UpdateMonitor"] -layout_mode = 1 -anchors_preset = 8 -anchor_left = 0.5 -anchor_top = 0.5 -anchor_right = 0.5 -anchor_bottom = 0.5 -offset_left = -79.5 -offset_top = -213.0 -offset_right = 80.5 -offset_bottom = -53.0 -grow_horizontal = 2 -grow_vertical = 2 -pivot_offset = Vector2(80, 84) -texture = ExtResource("10_abt8m") - -[node name="VBoxContainer" type="VBoxContainer" parent="UpdateMonitor"] -layout_mode = 1 -anchors_preset = 12 -anchor_top = 1.0 -anchor_right = 1.0 -anchor_bottom = 1.0 -offset_top = -140.0 -offset_bottom = 77.0002 -grow_horizontal = 2 -grow_vertical = 0 -theme_override_constants/separation = 5 - -[node name="OptionButtons" type="HBoxContainer" parent="UpdateMonitor/VBoxContainer"] -layout_mode = 2 -theme_override_constants/separation = 24 -alignment = 1 - -[node name="OptionRetryUpdateBtn" type="Button" parent="UpdateMonitor/VBoxContainer/OptionButtons"] -unique_name_in_owner = true -visible = false -custom_minimum_size = Vector2(100, 0) -layout_mode = 2 -mouse_default_cursor_shape = 2 -theme = ExtResource("11_5uxhl") -disabled = true -text = "Retry" - -[node name="OptionRestartGodotBtn" type="Button" parent="UpdateMonitor/VBoxContainer/OptionButtons"] -unique_name_in_owner = true -visible = false -custom_minimum_size = Vector2(100, 0) -layout_mode = 2 -mouse_default_cursor_shape = 2 -theme = ExtResource("11_5uxhl") -disabled = true -text = "Reload Godot" - -[node name="OptionExitBtn" type="Button" parent="UpdateMonitor/VBoxContainer/OptionButtons"] -unique_name_in_owner = true -visible = false -custom_minimum_size = Vector2(100, 0) -layout_mode = 2 -mouse_default_cursor_shape = 2 -theme = ExtResource("11_5uxhl") -theme_override_colors/font_color = Color(0.980919, 0.500031, 0.570874, 1) -theme_override_colors/font_outline_color = Color(0.224555, 0.120107, 0.0255992, 1) -theme_override_constants/outline_size = 8 -disabled = true -text = "Exit" - -[node name="LabelUpdateStatus" type="Label" parent="UpdateMonitor/VBoxContainer"] -unique_name_in_owner = true -layout_mode = 2 -theme = ExtResource("11_5uxhl") -theme_override_font_sizes/font_size = 20 -text = "UPDATE_STATUS_DETAILED" -horizontal_alignment = 1 -autowrap_mode = 2 - -[node name="AnimationPlayer" type="AnimationPlayer" parent="."] -unique_name_in_owner = true -root_node = NodePath("../UpdateMonitor") -libraries = { -"": SubResource("AnimationLibrary_lwiu5") -} diff --git a/helpers/TimeHelpers.gd b/helpers/TimeHelpers.gd new file mode 100644 index 0000000..3197339 --- /dev/null +++ b/helpers/TimeHelpers.gd @@ -0,0 +1,31 @@ +extends Node + +var latest_sensor_timestamp: float = 0 +var sys_time_at_sensor_time: float = 0 + +func on_time_data_received(timestamp_list: Array): + latest_sensor_timestamp = 3600.*timestamp_list[0] + 60.*timestamp_list[1] + timestamp_list[2] + timestamp_list[3] + sys_time_at_sensor_time = utc_timestamp_24h() + +func get_current_sensor_time(): + var sys_time = utc_timestamp_24h() + var sys_time_diff = calc_time_diff_24h(sys_time_at_sensor_time, sys_time) + var sensor_time = latest_sensor_timestamp + sys_time_diff + if sensor_time >= 86400: + return sensor_time - 86400 + return sensor_time + +func calc_time_diff_24h(timestamp_1, timestamp_2): + if timestamp_2 < 3600 and timestamp_1 > 82800: + return (timestamp_2 + 86400) - timestamp_1 + return timestamp_2 - timestamp_1 + +func is_timestamp_newer_24h(old_timestamp: float, new_timestamp: float) -> bool: + if old_timestamp > 82800. and new_timestamp < 3600: # earlier than 23 hours + return true + return old_timestamp < new_timestamp + +func utc_timestamp_24h(): + var time_dict = Time.get_time_dict_from_system(true) + var unix_time = Time.get_unix_time_from_system() + return time_dict["hour"] * 3600 + time_dict["minute"] * 60 + time_dict["second"] + (unix_time - int(unix_time)) diff --git a/helpers/TimeHelpers.gd.uid b/helpers/TimeHelpers.gd.uid new file mode 100644 index 0000000..4d83f72 --- /dev/null +++ b/helpers/TimeHelpers.gd.uid @@ -0,0 +1 @@ +uid://dqtc81pc74lcr diff --git a/networking/scripts/udp_broadcast.gd b/networking/scripts/udp_broadcast.gd index a7b9b00..621c0f1 100644 --- a/networking/scripts/udp_broadcast.gd +++ b/networking/scripts/udp_broadcast.gd @@ -12,23 +12,55 @@ var last_broadcast = 0 var ip_address: String = "" +var thread: Thread +var mutex: Mutex +var signal_queue = [] +var exit_thread = false + func _ready(): _try_set_ip() udp.set_broadcast_enabled(true) udp.set_dest_address("192.168.0.255", 5000) SensorSignals.new_sensor_connected.connect(_on_sensor_connected) + + thread = Thread.new() + mutex = Mutex.new() + + thread.start(_thread_function) -func _process(delta): - if ip_address.length() == 0: - _try_set_ip() - return +func _process(delta: float) -> void: + mutex.lock() last_broadcast += delta - if last_broadcast >= current_broadcast_rate: - # Try to contact server - last_broadcast = 0 - var broadcast_str = ip_address + "|%s" % Time.get_datetime_string_from_system(true) - print('Broadcasting to UDP: ', broadcast_str) - udp.put_packet(broadcast_str.to_utf8_buffer()) + mutex.unlock() + +func _exit_tree() -> void: + mutex.lock() + exit_thread = true + mutex.unlock() + thread.wait_to_finish() + +func _thread_function(): + while true: + mutex.lock() + var should_exit = exit_thread + mutex.unlock() + if should_exit: + break + + if ip_address.length() == 0: + _try_set_ip() + return + mutex.lock() + var do_broadcast = last_broadcast >= current_broadcast_rate + mutex.unlock() + if do_broadcast: + # Try to contact server + mutex.lock() + last_broadcast = 0 + mutex.unlock() + var broadcast_str = ip_address + "|%s" % Time.get_datetime_string_from_system(true) + print('Broadcasting to UDP: ', broadcast_str) + udp.put_packet(broadcast_str.to_utf8_buffer()) func _try_set_ip(): for address in IP.get_local_addresses(): diff --git a/networking/scripts/udp_server.gd b/networking/scripts/udp_server.gd index 08617e5..d44c886 100644 --- a/networking/scripts/udp_server.gd +++ b/networking/scripts/udp_server.gd @@ -12,6 +12,12 @@ var awaiting_sensors = {} var invalid_sensors = {} var valid_sensors = {} +var thread: Thread +var mutex: Mutex +var exit_thread = false + +var signal_queue = [] + func _ready(): ServerSignals.sensor_approved.connect(_on_sensor_approved) ServerSignals.sensor_declined.connect(_on_sensor_declined) @@ -19,33 +25,73 @@ func _ready(): if not server.is_listening(): print('Unable to listen on port: ', port) print('Listening on port: ', port) + + mutex = Mutex.new() + thread = Thread.new() + thread.start(_thread_function) + +func _process(delta: float) -> void: + while signal_queue.size() > 0: + mutex.lock() + var signal_data = signal_queue.pop_front() + mutex.unlock() + if signal_data[0] == "new_sensor_connected": + SensorSignals.new_sensor_connected.emit(signal_data[1], signal_data[2]) + elif signal_data[0] == "sensor_request_received": + ServerSignals.sensor_request_received.emit(signal_data[1], signal_data[2]) + elif signal_data[0] == "on_time_data_received": + TimeHelpers.on_time_data_received(signal_data[1]) + elif signal_data[0] == "gps_data_received": + DataSignals.gps_data_received.emit(signal_data[1], signal_data[2], signal_data[3], signal_data[4], signal_data[5]) + elif signal_data[0] == "sat_data_received": + DataSignals.sat_data_received.emit(signal_data[1], signal_data[2], signal_data[3], signal_data[4]) + elif signal_data[0] == "accelerometer_data_received": + DataSignals.accelerometer_data_received.emit(signal_data[1], signal_data[2], signal_data[3], signal_data[4], signal_data[5]) + elif signal_data[0] == "magnetometer_data_received": + DataSignals.magnetometer_data_received.emit(signal_data[1], signal_data[2], signal_data[3]) + +func _exit_tree() -> void: + mutex.lock() + exit_thread = true + mutex.unlock() + thread.wait_to_finish() func _on_sensor_approved(sensor_ip: String): + mutex.lock() valid_sensors[sensor_ip] = awaiting_sensors[sensor_ip] if sensor_ip in awaiting_sensors: awaiting_sensors.erase(sensor_ip) - SensorSignals.new_sensor_connected.emit(sensor_ip, valid_sensors[sensor_ip]) + signal_queue.append(["new_sensor_connected", sensor_ip, valid_sensors[sensor_ip]]) + mutex.unlock() func _on_sensor_declined(sensor_ip: String): + mutex.lock() invalid_sensors[sensor_ip] = 0 if sensor_ip in awaiting_sensors: awaiting_sensors.erase(sensor_ip) + mutex.unlock() -func _process(delta): - _process_connections(delta) +func _thread_function(): + while true: + mutex.lock() + var should_exit = exit_thread + mutex.unlock() + if should_exit: + break + _process_connections() -func _process_connections(delta): +func _process_connections(): server.poll() if server.is_connection_available(): var peer = server.take_connection() var packet = peer.get_packet() if not _verify_checksum(packet): print('Received packet with incorrect checksum: %s' % peer.get_packet_ip()) - _handle_six_fps_message(peer, packet) else: - _handle_new_connection(delta, peer, packet) + + _handle_new_connection(peer, packet) -func _handle_new_connection(delta: float, peer: PacketPeerUDP, packet: PackedByteArray): +func _handle_new_connection(peer: PacketPeerUDP, packet: PackedByteArray): if packet.get(0) == 0xD4 and packet.get(1) == 0x53: """ | 2 bytes | 2 bytes | 2 bytes | variable length | 2 bytes | @@ -66,14 +112,9 @@ func _handle_new_connection(delta: float, peer: PacketPeerUDP, packet: PackedByt packet[packet.size()-1] = ck_b """ _handle_six_fps_message(peer, packet) - elif packet.get(0) == 0xb5 and packet.get(1) == 0x62: - _handle_racebox_message(delta, packet) else: print("Received: '%s' %s:%s" % [packet.get_string_from_utf8(), peer.get_packet_ip(), peer.get_packet_port()]) - for i in range(0, valid_sensors.size()): - pass # Do something with the connected peers. - func _calculate_checksum(packet) -> Array: var ck_a = 0 var ck_b = 0 @@ -92,7 +133,9 @@ func _handle_six_fps_message(peer: PacketPeerUDP, packet: PackedByteArray): return if peer_ip in awaiting_sensors: return + mutex.lock() var valid_sensor: bool = peer.get_packet_ip() in valid_sensors + mutex.unlock() var message_class = packet.get(2) var message_id = packet.get(3) if (not valid_sensor) and (message_class == 0x6e and message_id == 0x77): @@ -133,6 +176,7 @@ func _handle_new_peer_request(peer_ip: String, packet: PackedByteArray): 9 | 1 byte | bool | peer provides euler orientation 10 | 1 byte | bool | peer provides quaternion orientation """ + mutex.lock() awaiting_sensors[peer_ip] = [ #packet.decode_u8(4), packet.decode_u8(5), @@ -142,31 +186,38 @@ func _handle_new_peer_request(peer_ip: String, packet: PackedByteArray): #packet.decode_u8(9), #packet.decode_u8(10), ] - print('sensor request') - ServerSignals.sensor_request_received.emit(peer_ip, awaiting_sensors[peer_ip]) + signal_queue.append(["sensor_request_received", peer_ip, awaiting_sensors[peer_ip]]) + mutex.unlock() func _parse_timestamp_slice(packet: PackedByteArray): - var hour = packet.decode_u8(0) - var minute = packet.decode_u8(1) - var second = packet.decode_u8(2) - var nanosecond = packet.decode_u32(3) * pow(10,-9) + var hour = float(packet.decode_u8(0)) + var minute = float(packet.decode_u8(1)) + var second = float(packet.decode_u8(2)) + var nanosecond = float(packet.decode_u32(3)) * pow(10,-9) return [hour, minute, second, nanosecond] func _handle_heartbeat_packet(peer_ip: String, packet: PackedByteArray): #print('heartbeat') - var hour = packet.decode_u8(4) - var minute = packet.decode_u8(5) - var second = packet.decode_u8(6) + var timestamp_list = _parse_timestamp_slice(packet.slice(4, 11)) + mutex.lock() + signal_queue.append(["on_time_data_received", timestamp_list]) + mutex.unlock() #print(hour, ' ', minute, ' ', second) func _handle_time_packet(peer_ip: String, packet: PackedByteArray): #print('time') var timestamp_list = _parse_timestamp_slice(packet.slice(4, 11)) + mutex.lock() + signal_queue.append(["on_time_data_received", timestamp_list]) + mutex.unlock() #print(timestamp_list) func _handle_position_packet(peer_ip: String, packet: PackedByteArray): #print('gps') var timestamp_list = _parse_timestamp_slice(packet.slice(4, 11)) + mutex.lock() + signal_queue.append(["on_time_data_received", timestamp_list]) + mutex.unlock() var lat: float = (float(packet.decode_u64(11)) / 10.**9) - 90 var lon: float = (float(packet.decode_u64(19)) / 10.**9) - 180 var alt_neg = packet.decode_u8(27) @@ -178,10 +229,15 @@ func _handle_position_packet(peer_ip: String, packet: PackedByteArray): var pdop: float = packet.decode_u32(40) / 1000.0 var hdop: float = packet.decode_u32(44) / 1000.0 var vdop: float = packet.decode_u32(49) / 1000.0 - DataSignals.pnt_data_received.emit(peer_ip, timestamp_list, [lat, lon, alt_m, goid_m], speed_kmh, [pdop, hdop, vdop]) + mutex.lock() + signal_queue.append(["gps_data_received", peer_ip, timestamp_list, [lat, lon, alt_m, goid_m], speed_kmh, [pdop, hdop, vdop]]) + mutex.unlock() func _handle_gps_sats_packet(peer_ip: String, packet: PackedByteArray): var timestamp_list = _parse_timestamp_slice(packet.slice(4, 11)) + mutex.lock() + signal_queue.append(["on_time_data_received", timestamp_list]) + mutex.unlock() var ga = packet.decode_u8(11) var gb = packet.decode_u8(12) var gi = packet.decode_u8(13) @@ -200,10 +256,15 @@ func _handle_gps_sats_packet(peer_ip: String, packet: PackedByteArray): var elevation = packet.decode_u8(start_offset+el_offset) var azimuth = packet.decode_u16(start_offset+az_offset) sat_data.append([sat_name, elevation, azimuth]) - DataSignals.sat_data_received.emit(peer_ip, timestamp_list, [ga, gb, gi, gl, gp, gq, gn], sat_data) + mutex.lock() + signal_queue.append(["sat_data_received", peer_ip, timestamp_list, [ga, gb, gi, gl, gp, gq, gn], sat_data]) + mutex.unlock() func _handle_accel_packet(peer_ip: String, packet: PackedByteArray): var timestamp_list = _parse_timestamp_slice(packet.slice(4, 11)) + mutex.lock() + signal_queue.append(["on_time_data_received", timestamp_list]) + mutex.unlock() var neg = packet.decode_u8(11) var x = (packet.decode_s32(12) / 1000000.0) * (-1 ** neg) neg = packet.decode_u8(16) @@ -225,28 +286,44 @@ func _handle_accel_packet(peer_ip: String, packet: PackedByteArray): neg = packet.decode_u8(51) var g_z = (packet.decode_s32(52) / 1000000.0) * (-1 ** neg) - DataSignals.accelerometer_data_received.emit(peer_ip, timestamp_list, [x, y, z], [lin_x, lin_y, lin_z], [g_x, g_y, g_z]) + mutex.lock() + signal_queue.append(["accelerometer_data_received", peer_ip, timestamp_list, Vector3(x, y, z), Vector3(lin_x, lin_y, lin_z), Vector3(g_x, g_y, g_z)]) + mutex.unlock() func _handle_magnetic_packet(peer_ip: String, packet: PackedByteArray): var timestamp_list = _parse_timestamp_slice(packet.slice(4, 11)) + mutex.lock() + signal_queue.append(["on_time_data_received", timestamp_list]) + mutex.unlock() var neg = packet.decode_u8(11) var x = (packet.decode_u32(12) / 1000.0) * (-1 ** neg) neg = packet.decode_u8(16) var y = (packet.decode_u32(17) / 1000.0) * (-1 ** neg) neg = packet.decode_u8(21) var z = (packet.decode_u32(22) / 1000.0) * (-1 ** neg) - DataSignals.magnetometer_data_received.emit(peer_ip, timestamp_list, [x, y, z]) + mutex.lock() + signal_queue.append(["magnetometer_data_received", peer_ip, timestamp_list, Vector3(x, y, z)]) + mutex.unlock() func _handle_public_key_packet(peer_ip: String, packet: PackedByteArray): var timestamp_list = _parse_timestamp_slice(packet.slice(4, 11)) + mutex.lock() + signal_queue.append(["on_time_data_received", timestamp_list]) + mutex.unlock() func _handle_euler_packet(peer_ip: String, packet: PackedByteArray): var timestamp_list = _parse_timestamp_slice(packet.slice(4, 11)) + mutex.lock() + signal_queue.append(["on_time_data_received", timestamp_list]) + mutex.unlock() func _handle_quaternion_packet(peer_ip: String, packet: PackedByteArray): var timestamp_list = _parse_timestamp_slice(packet.slice(4, 11)) + mutex.lock() + signal_queue.append(["on_time_data_received", timestamp_list]) + mutex.unlock() func _handle_racebox_message(delta, packet): diff --git a/project.godot b/project.godot index 56897aa..f684a19 100644 --- a/project.godot +++ b/project.godot @@ -26,18 +26,13 @@ SensorSignals="*uid://b2pc7sfvudvig" SettingSignals="*uid://csng7b51505w0" DisplayData="*uid://xunxbytiofa2" Bisect="*uid://crwgaltrjx4ff" -Loggie="*uid://bmh2auo806k0k" -LoggieConsoleAutoload="*uid://d0sxs0is80byx" +TimeHelpers="*uid://dqtc81pc74lcr" [display] window/size/viewport_width=800 window/size/viewport_height=800 -[editor_plugins] - -enabled=PackedStringArray("res://addons/loggie-console/plugin.cfg", "res://addons/loggie/plugin.cfg") - [physics] 3d/physics_engine="Jolt Physics" diff --git a/sensors/accelerometer_sensor_node.gd b/sensors/accelerometer_sensor_node.gd deleted file mode 100644 index c6b9f46..0000000 --- a/sensors/accelerometer_sensor_node.gd +++ /dev/null @@ -1,30 +0,0 @@ -extends BaseSensorNode -class_name AccelSensorNode - - -var accel_vector: Vector3 = Vector3.ZERO -var linear_accel_vector: Vector3 = Vector3.ZERO -var g_accel_vector: Vector3 = Vector3.ZERO - -var DOWN = Vector2(0, -1.) - - -# Called when the node enters the scene tree for the first time. -func _ready() -> void: - super._ready() - DataSignals.accelerometer_data_received.connect(_on_data_received) - -func _on_data_received(source_ip: String, timestamp_list: Array, accel: Array, linear_accel: Array, g_accel: Array): - if source_ip != ip_address: - return - var msg_timestamp = timestamp_list[0] * 3600 + timestamp_list[1] * 60 + timestamp_list[2] + timestamp_list[3] - if not Constants.is_timestamp_newer(timestamp, msg_timestamp): - return - timestamp = msg_timestamp - Signals.linear_acceleration_updated.emit(ip_address, linear_accel) - var x_z = Vector2(g_accel[0], g_accel[2]).normalized() - var y_z = Vector2(g_accel[1], g_accel[2]).normalized() - var pitch = DOWN.angle_to(x_z) - var roll = y_z.angle_to(DOWN) - SensorSignals.pitch_updated.emit(ip_address, pitch) - SensorSignals.roll_updated.emit(ip_address, roll) diff --git a/sensors/accelerometer_sensor_node.gd.uid b/sensors/accelerometer_sensor_node.gd.uid deleted file mode 100644 index 7de80d4..0000000 --- a/sensors/accelerometer_sensor_node.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://b8tbp8y3ic2hi diff --git a/sensors/base_sensor_node.gd b/sensors/base_sensor_node.gd index 9f44a98..72ba8d0 100644 --- a/sensors/base_sensor_node.gd +++ b/sensors/base_sensor_node.gd @@ -5,7 +5,15 @@ var max_measurement_size: float = 10 @export var ip_address: String var id: String = UUID.new().as_string() -var timestamp: float = 0. +var max_measurement_history_s: float = 10. +var latest_timestamp: float = 0. + +var sensor_class: String: + get: + return _get_sensor_class() func _ready() -> void: pass + +func _get_sensor_class(): + return null diff --git a/sensors/magnetometer_sensor_node.gd b/sensors/magnetometer_sensor_node.gd deleted file mode 100644 index 193dac6..0000000 --- a/sensors/magnetometer_sensor_node.gd +++ /dev/null @@ -1,24 +0,0 @@ -extends BaseSensorNode -class_name MagnetSensorNode - - -var heading_rad: float = 0 - - -# Called when the node enters the scene tree for the first time. -func _ready() -> void: - super._ready() - DataSignals.magnetometer_data_received.connect(_on_data_received) - -func _on_data_received(source_ip: String, timestamp_list: Array, mag_vec: Array): - if source_ip != ip_address: - return - var msg_timestamp = timestamp_list[0] * 3600 + timestamp_list[1] * 60 + timestamp_list[2] + timestamp_list[3] - if not Constants.is_timestamp_newer(timestamp, msg_timestamp): - return - timestamp = msg_timestamp - var mag = Vector2(mag_vec[0], mag_vec[1]) - mag.normalized() - heading_rad = atan2(-mag[1], mag[0]) - Signals.sensor_mag_updated.emit(ip_address) - Signals.heading_updated.emit(ip_address, heading_rad) diff --git a/sensors/magnetometer_sensor_node.gd.uid b/sensors/magnetometer_sensor_node.gd.uid deleted file mode 100644 index 055f6b4..0000000 --- a/sensors/magnetometer_sensor_node.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://gwr7babnfojp diff --git a/sensors/pnt_sensor_node.gd b/sensors/pnt_sensor_node.gd deleted file mode 100644 index 8e6d77f..0000000 --- a/sensors/pnt_sensor_node.gd +++ /dev/null @@ -1,56 +0,0 @@ -extends BaseSensorNode -class_name PntSensorNode - - -var lat_rad: float = 0. -var lon_rad: float = 0. -var alt_km: float = 0. -var speed_kmh: float = 0. -var gps_position = Vector3(1., 1., 1.) -var speed_data: Array = [] -var lat_data: Array = [] -var lon_data: Array = [] -var alt_data: Array = [] -var position_data: Array = [] -var measurement_times: Array = [] - - -# Called when the node enters the scene tree for the first time. -func _ready() -> void: - super._ready() - DataSignals.pnt_data_received.connect(_on_data_received) - -func _on_data_received(source_ip: String, timestamp_list: Array, coordinates: Array, pnt_speed_kmh: float, dop: Array): - if source_ip != ip_address: - return - var msg_timestamp = timestamp_list[0] * 3600. + timestamp_list[1] * 60. + timestamp_list[2] + timestamp_list[3] - var insert_idx = Bisect.bisect(measurement_times, msg_timestamp) - measurement_times.insert(insert_idx, msg_timestamp) - - speed_kmh = pnt_speed_kmh - speed_data.insert(insert_idx, speed_data) - lat_rad = deg_to_rad(coordinates[0]) - lat_data.insert(insert_idx, lat_rad) - lon_rad = deg_to_rad(coordinates[1]) - lon_data.insert(insert_idx, lon_rad) - alt_km = (coordinates[2] + coordinates[3]) / 1000 - alt_data.insert(insert_idx, alt_km) - var radius_km = (coordinates[2] + coordinates[3] + Constants.EARTH_RADIUS_M) / 1000. - var pos_x = radius_km * sin(lon_rad) * cos(lat_rad) - var pos_z = radius_km * sin(lon_rad) * sin(lat_rad) - var pos_y = radius_km * cos(lon_rad) - gps_position = Vector3(pos_x, pos_y, pos_z) - position_data.insert(insert_idx, gps_position) - - Signals.sensor_pnt_updated.emit(ip_address, self) - Signals.altitude_updated.emit(ip_address, alt_km) - Signals.position_updated.emit(ip_address, gps_position) - SensorSignals.speed_updated.emit(ip_address, speed_kmh) - - while measurement_times.size() > max_measurement_size: - measurement_times.pop_back() - speed_data.pop_back() - lat_data.pop_back() - lon_data.pop_back() - alt_data.pop_back() - position_data.pop_back() diff --git a/sensors/pnt_sensor_node.gd.uid b/sensors/pnt_sensor_node.gd.uid deleted file mode 100644 index c9322ca..0000000 --- a/sensors/pnt_sensor_node.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://ddxquur7spfsf diff --git a/sensors/satelites_sensor_node.gd b/sensors/satelites_sensor_node.gd index d9db9ab..beb79b7 100644 --- a/sensors/satelites_sensor_node.gd +++ b/sensors/satelites_sensor_node.gd @@ -11,9 +11,9 @@ func _on_data_received(source_ip: String, timestamp_list: Array, sat_counts: Arr if source_ip != ip_address: return var msg_timestamp = timestamp_list[0] * 3600 + timestamp_list[1] * 60 + timestamp_list[2] + timestamp_list[3] - if not Constants.is_timestamp_newer(timestamp, msg_timestamp): + if not Constants.is_timestamp_newer(latest_timestamp, msg_timestamp): return - timestamp = msg_timestamp + latest_timestamp = msg_timestamp var sat_ids = [] for sat_data in sat_positions: sat_ids.append(sat_data[0]) diff --git a/sensors/sensor_spawner.gd b/sensors/sensor_spawner.gd index 06d3230..283b434 100644 --- a/sensors/sensor_spawner.gd +++ b/sensors/sensor_spawner.gd @@ -1,7 +1,6 @@ extends Node3D class_name SensorSpawner -@export var sensor_scene: PackedScene var vehicle: VehicleNode # Called when the node enters the scene tree for the first time. @@ -10,21 +9,7 @@ func _ready() -> void: SensorSignals.new_sensor_connected.connect(_on_new_sensor_connected) func _on_new_sensor_connected(sensor_ip: String, provider_data: Array) -> void: - var sensor_suite = sensor_scene.instantiate() - sensor_suite.ip_address = sensor_ip - vehicle.sensor_suites[sensor_ip] = sensor_suite - if provider_data[0]: - sensor_suite.provides_pnt = true - sensor_suite.create_pnt() - sensor_suite.create_sats() - if provider_data[1]: - sensor_suite.provides_accel = true - sensor_suite.create_accel() - if provider_data[2]: - sensor_suite.provides_gyro = true - sensor_suite.create_gyro() - if provider_data[3]: - sensor_suite.provides_mag = true - sensor_suite.create_mag() - add_child(sensor_suite) - vehicle.add_sensor_node(sensor_suite) + var sensor_node = VehicleSensorNode.new() + sensor_node.ip_address = sensor_ip + add_child(sensor_node) + vehicle.add_sensor_node(sensor_node) diff --git a/sensors/sensor_suite.tscn b/sensors/sensor_suite.tscn index 3e67edd..1c26887 100644 --- a/sensors/sensor_suite.tscn +++ b/sensors/sensor_suite.tscn @@ -1,7 +1,3 @@ [gd_scene format=3 uid="uid://trl3gugdy3hw"] -[ext_resource type="Script" uid="uid://xm4wqedyteei" path="res://sensors/sensor_suite_node.gd" id="1_1i1as"] - [node name="SensorSuite" type="Node3D" unique_id=1330923752] -script = ExtResource("1_1i1as") -metadata/_custom_type_script = "uid://xm4wqedyteei" diff --git a/sensors/sensor_suite_node.gd b/sensors/sensor_suite_node.gd deleted file mode 100644 index e961f9f..0000000 --- a/sensors/sensor_suite_node.gd +++ /dev/null @@ -1,54 +0,0 @@ -extends Node3D -class_name SensorSuiteNode - - -@export var ip_address: String -var provides_pnt: bool = false -var provides_accel: bool = false -var provides_gyro: bool = false -var provides_mag: bool = false - -var sensors = {} - -""" - sensor_suite.provides_pnt = true - sensor_suite.create_pnt() - sensor_suite.create_sats() - if provider_data[1]: - sensor_suite.provides_accel = true - sensor_suite.create_accel() - if provider_data[2]: - sensor_suite.provides_gyro = true - sensor_suite.create_gyro() - if provider_data[3]: - sensor_suite.provides_mag = true - sensor_suite.create_mag() -""" - -func create_pnt(): - var sensor = PntSensorNode.new() - sensor.ip_address = ip_address - sensors[sensor.id] = sensor - add_child(sensor) - -func create_sats(): - var sensor = SatelliteSensorNode.new() - sensor.ip_address = ip_address - sensors[sensor.id] = sensor - add_child(sensor) - -func create_accel(): - var sensor = AccelSensorNode.new() - sensor.ip_address = ip_address - sensors[sensor.id] = sensor - add_child(sensor) - -func create_gyro(): - return - -func create_mag(): - var sensor = MagnetSensorNode.new() - sensor.ip_address = ip_address - sensors[sensor.id] = sensor - add_child(sensor) - diff --git a/sensors/sensor_suite_node.gd.uid b/sensors/sensor_suite_node.gd.uid deleted file mode 100644 index 3d1a671..0000000 --- a/sensors/sensor_suite_node.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://xm4wqedyteei diff --git a/sensors/vehicle_sensor_node.gd b/sensors/vehicle_sensor_node.gd new file mode 100644 index 0000000..605f446 --- /dev/null +++ b/sensors/vehicle_sensor_node.gd @@ -0,0 +1,190 @@ +extends BaseSensorNode +class_name VehicleSensorNode + +""" +Vehicle sensor can provide the following data fields: + - GPS + - Contributing satellites + - Accelerometer + - Magnetometer + - Gyroscope +""" + + +var max_data_length: int = 10 +var gps_timestamps = [] +var coordinates = [] +var gps_positions = [] +var altitudes = [] +var altitude_m: + get: + return _get_current_altitude() +var speed_data = [] +var speed_kmh: + get: + return _get_current_speed() + +static var DOWN = Vector2(0, -1.) +var accel_timestamps = [] +var g_vecs = [] +var linear_vecs = [] +var pitch_data = [] +var pitch_rad: float +var roll_data = [] +var roll_rad: float + +var mag_timestamps = [] +var mag_vecs = [] +var heading_data = [] +var heading_rad: float + + +func _ready() -> void: + DataSignals.gps_data_received.connect(_on_gps_data_received) + #DataSignals.sat_data_received.connect(_on_sat_data_received) + DataSignals.accelerometer_data_received.connect(_on_accel_data_received) + DataSignals.magnetometer_data_received.connect(_on_mag_data_received) + #DataSignals.gyroscope_data_received.connect(_on_gyro_data_received) + +func _get_sensor_class(): + return "VEHICLE" + +func _on_gps_data_received(source_ip: String, timestamp_list: Array, new_coordinates: Array, speed_kmh: float, dop: Array): + # coordinates = [lat rad, lon rad, alt m, geoid diff m] + # dop = [pdop, hdop, vdop] + if source_ip != ip_address: + return + var timestamp: float = 3600.*timestamp_list[0] + 60.*timestamp_list[1] + timestamp_list[2] + timestamp_list[3] + if gps_timestamps.size() == max_data_length and not TimeHelpers.is_timestamp_newer_24h(gps_timestamps[-1], timestamp): + return + var insert_idx = Bisect.bisect(gps_timestamps, timestamp) + var altitude_m = new_coordinates[2] + new_coordinates[3] + var radius_km = (new_coordinates[2] + new_coordinates[3] + Constants.EARTH_RADIUS_M) / 1000. + var pos_x = radius_km * sin(new_coordinates[1]) * cos(new_coordinates[0]) + var pos_z = radius_km * sin(new_coordinates[1]) * sin(new_coordinates[0]) + var pos_y = radius_km * cos(new_coordinates[1]) + gps_timestamps.insert(insert_idx, timestamp) + coordinates.insert(insert_idx, [new_coordinates[0], new_coordinates[1]]) + gps_positions.insert(insert_idx, Vector3(pos_x, pos_y, pos_z)) + altitudes.insert(insert_idx, altitude_m) + speed_data.insert(insert_idx, speed_kmh) + if gps_timestamps.size() > max_data_length: + gps_timestamps.pop_front() + coordinates.pop_front() + gps_positions.pop_front() + altitudes.pop_front() + speed_data.pop_front() + +func _on_sat_data_received(source_ip: String, timestamp: float): + if source_ip != ip_address: + return + +func _on_accel_data_received(source_ip: String, timestamp_list: Array, accel: Vector3, linear_accel: Vector3, g_accel: Vector3): + if source_ip != ip_address: + return + var timestamp: float = 3600.*timestamp_list[0] + 60.*timestamp_list[1] + timestamp_list[2] + timestamp_list[3] + if accel_timestamps.size() == max_data_length and not TimeHelpers.is_timestamp_newer_24h(accel_timestamps[-1], timestamp): + return + var insert_idx = Bisect.bisect(accel_timestamps, timestamp) + var x_z = Vector2(g_accel.x, g_accel.z).normalized() + var y_z = Vector2(g_accel.y, g_accel.z).normalized() + var pitch = DOWN.angle_to(x_z) + var roll = y_z.angle_to(DOWN) + accel_timestamps.insert(insert_idx, timestamp) + linear_vecs.insert(insert_idx, linear_accel) + g_vecs.insert(insert_idx, g_accel) + pitch_data.insert(insert_idx, pitch) + roll_data.insert(insert_idx, roll) + if accel_timestamps.size() > max_data_length: + accel_timestamps.pop_front() + linear_vecs.pop_front() + g_vecs.pop_front() + pitch_data.pop_front() + roll_data.pop_front() + _update_avg_pitch() + _update_avg_roll() + +func _on_mag_data_received(source_ip: String, timestamp_list: Array, mag_vec: Vector3): + if source_ip != ip_address: + return + var timestamp: float = 3600.*timestamp_list[0] + 60.*timestamp_list[1] + timestamp_list[2] + timestamp_list[3] + if mag_timestamps.size() == max_data_length and not TimeHelpers.is_timestamp_newer_24h(mag_timestamps[-1], timestamp): + return + var insert_idx = Bisect.bisect(mag_timestamps, timestamp) + var mag_2d = Vector2(mag_vec.x, mag_vec.y) + mag_2d.normalized() + var new_heading_rad = atan2(-mag_2d.y, mag_2d.x) + mag_timestamps.insert(insert_idx, timestamp) + mag_vecs.insert(insert_idx, mag_vec) + heading_data.insert(insert_idx, new_heading_rad) + if mag_timestamps.size() > max_data_length: + mag_timestamps.pop_front() + mag_vecs.pop_front() + heading_data.pop_front() + _update_avg_heading() + +func _on_gyro_data_received(source_ip: String, timestamp: float): + if source_ip != ip_address: + return + +func _get_current_altitude(): + if gps_timestamps.size() < 3: + return null + var altitude_dx = [] + var alt_dx_sum = 0 + var current_timestamp = TimeHelpers.get_current_sensor_time() + for i in range(gps_timestamps.size()-1, 0, -1): + var alt_dx = altitudes[i] - altitudes[i-1] + alt_dx_sum += alt_dx + altitude_dx.append(alt_dx) + var altitude_dx2 = [] + var alt_dx2_sum = 0 + for i in range(altitude_dx.size()-1): + var alt_dx2 = altitude_dx[i] - altitude_dx[i+1] + alt_dx2_sum += alt_dx2 + altitude_dx2.append(alt_dx2) + var time_diff = max(0, TimeHelpers.calc_time_diff_24h(gps_timestamps[-1], current_timestamp)) + var dv = alt_dx2_sum/altitude_dx2.size() + var dx = alt_dx_sum / altitude_dx.size() + return altitudes[-1] + ((dx + (dv * time_diff)) * time_diff) + +func _get_current_speed(): + if gps_timestamps.size() < 3: + return null + var speed_dx = [] + var speed_dx_sum = 0 + var current_timestamp = TimeHelpers.get_current_sensor_time() + for i in range(gps_timestamps.size()-1, 0, -1): + var spd_dx = speed_data[i] - speed_data[i-1] + speed_dx_sum += spd_dx + speed_dx.append(spd_dx) + var speed_dx2 = [] + var speed_dx2_sum = 0 + for i in range(speed_dx.size()-1): + var spd_dx2 = speed_dx[i] - speed_dx[i+1] + speed_dx2_sum += spd_dx2 + speed_dx2.append(spd_dx2) + var time_diff = max(0, TimeHelpers.calc_time_diff_24h(gps_timestamps[-1], current_timestamp)) + var dv = speed_dx2_sum/speed_dx2.size() + var dx = speed_dx_sum / speed_dx.size() + return speed_data[-1] + ((dx + (dv * time_diff)) * time_diff) + +func _update_avg_pitch(): + var pitch_sum = 0 + for i in range(accel_timestamps.size()): + pitch_sum += pitch_data[i] + pitch_rad = pitch_sum / pitch_data.size() + +func _update_avg_roll(): + var roll_sum = 0 + for i in range(accel_timestamps.size()): + roll_sum += roll_data[i] + roll_rad = roll_sum / roll_data.size() + +func _update_avg_heading(): + var heading_sum = 0 + for i in range(mag_timestamps.size()): + heading_sum += heading_data[i] + heading_rad = heading_sum / heading_data.size() + + diff --git a/sensors/vehicle_sensor_node.gd.uid b/sensors/vehicle_sensor_node.gd.uid new file mode 100644 index 0000000..01f5661 --- /dev/null +++ b/sensors/vehicle_sensor_node.gd.uid @@ -0,0 +1 @@ +uid://c30nkkqcp0orm diff --git a/signals/data_signals.gd b/signals/data_signals.gd index 9eb3f56..7b391ef 100644 --- a/signals/data_signals.gd +++ b/signals/data_signals.gd @@ -1,7 +1,9 @@ extends Node -signal pnt_data_received(source_ip: String, timestamp_list: Array, coordinates: Array, speed_kmh: float, dop: Array) -signal sat_data_received(source_ip: String, timestamp_list: Array, sat_count: Array, sat_position: Array) -signal accelerometer_data_received(source_ip: String, timestamp_list: Array, accel: Array, linear_accel: Array, g_accel: Array) -signal magnetometer_data_received(source_ip: String, timestamp_list: Array, mag_vec: Array) +signal time_data_received(source_ip: String, timestamp_list: Array) +signal gps_data_received(source_ip: String, timestamp_list: Array, coordinates: Array, speed_kmh: float, dop: Array) +signal sat_data_received(source_ip: String, timestamp: float, sat_count: Array, sat_position: Array) +signal accelerometer_data_received(source_ip: String, timestamp: float, accel: Vector3, linear_accel: Vector3, g_accel: Vector3) +signal magnetometer_data_received(source_ip: String, timestamp: float, mag_vec: Vector3) +signal gyroscope_data_received(source_ip: String, timestamp: float, data: Array) diff --git a/vehicle/scripts/vehicle_node.gd b/vehicle/scripts/vehicle_node.gd index 14fd699..c4f296e 100644 --- a/vehicle/scripts/vehicle_node.gd +++ b/vehicle/scripts/vehicle_node.gd @@ -13,35 +13,39 @@ var UUID = preload('res://addons/uuid/uuid.gd') var host_id: String = '' @export var host: bool = true -var axis_scene_template: PackedScene = preload("res://axis/Axis.tscn") -var sensor_suites = {} +var sensor_nodes = {} var sensor_classes = { - "PNT": [], - "ACCEL": [], - "GYRO": [], - "MAG": [] + "VEHICLE": [], } -var datetime_sensors = {} -var gps_sensors = {} -var accelerometer_sensors = {} -var gyro_sensors = {} -var magnet_sensors = {} -var current_timestamp = 0. -var lat_rad: float = 0. -var long_rad: float = 0. -var alt_km: float = 0. +var timer: float = 0. +static var timer_1: float = 1. -var position_3d: Vector3 = Vector3.ZERO +var altitude_m: float: + get: + return _get_altitude_m() -var heading_rad: float = 0. +var speed_kmh: float: + get: + return _get_speed_kmh() + +var roll_rad: float: + get: + return _get_roll_rad() + +var pitch_rad: float: + get: + return _get_pitch_rad() + +var heading_rad: float: + get: + return _get_heading_rad() # Called when the node enters the scene tree for the first time. func _ready() -> void: if host: _load_id() - Signals.position_updated.connect(_on_pnt_position_updated) print('VehicleNode ready') #var axis_scene = axis_scene_template.instantiate() #axis_scene.axis_length = 2. @@ -50,14 +54,10 @@ func _ready() -> void: # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta: float) -> void: - var time_dict = Time.get_time_dict_from_system(true) - var unix_time = Time.get_unix_time_from_system() - current_timestamp = time_dict["hour"] * 3600 + time_dict["minute"] * 60 + time_dict["second"] + pass func _physics_process(delta: float) -> void: pass - #_update_position() - #_update_rotation() func _load_id(): var file_path = "user://host_id.idf" @@ -71,51 +71,74 @@ func _load_id(): func _generate_id(): return UUID.new().as_string() + +func _get_altitude_m(): + var alt_sum: float = 0 + var alt_count: int = 0 + for sensor_ip in sensor_classes["VEHICLE"]: + var sensor_alt = sensor_nodes[sensor_ip].altitude_m + if sensor_alt == null: + continue + alt_sum += sensor_alt + alt_count += 1 + if alt_count == 0: + return 0 + return alt_sum / alt_count -func _update_position(): - var time_offset = 0. - var sensor_data_array = [] - for sensor_id in gps_sensors: - var sensor = sensor_suites[sensor_id] - var sensor_time_offset = Constants.calc_time_diff(sensor.gps_timestamp, current_timestamp) - time_offset += sensor_time_offset - sensor_data_array.append([sensor_time_offset, sensor.gps_position]) - var avg_position = Vector3.ZERO - for sensor_data in sensor_data_array: - avg_position += (sensor_data[0]/time_offset) * sensor_data[1] - position = avg_position - #print(position) - #print(position.length()) - var camera: Camera3D = get_node("/root/Main/Node3D/Camera3D") - camera.position = position + position.normalized() * 1 - if camera.position != position: - camera.look_at(position, Vector3(0, 1, 0)) +func _get_speed_kmh(): + var speed_sum: float = 0 + var speed_count: int = 0 + for sensor_ip in sensor_classes["VEHICLE"]: + var sensor_speed = sensor_nodes[sensor_ip].speed_kmh + if sensor_speed == null: + continue + speed_sum += sensor_speed + speed_count += 1 + if speed_count == 0: + return 0 + return speed_sum / speed_count + +func _get_roll_rad(): + var roll_sum: float = 0 + var roll_count: int = 0 + for sensor_ip in sensor_classes["VEHICLE"]: + var sensor_roll = sensor_nodes[sensor_ip].roll_rad + if sensor_roll == null: + continue + roll_sum += sensor_roll + roll_count += 1 + if roll_count == 0: + return 0 + return roll_sum / roll_count + +func _get_pitch_rad(): + var pitch_sum: float = 0 + var pitch_count: int = 0 + for sensor_ip in sensor_classes["VEHICLE"]: + var sensor_pitch= sensor_nodes[sensor_ip].pitch_rad + if sensor_pitch == null: + continue + pitch_sum += sensor_pitch + pitch_count += 1 + if pitch_count == 0: + return 0 + return pitch_sum / pitch_count -func _update_rotation(): - if position.length() == 0: +func _get_heading_rad(): + var heading_sum: float = 0 + var heading_count: int = 0 + for sensor_ip in sensor_classes["VEHICLE"]: + var sensor_heading = sensor_nodes[sensor_ip].heading_rad + if sensor_heading == null: + continue + heading_sum += sensor_heading + heading_count += 1 + if heading_count == 0: + return 0 + return heading_sum / heading_count + +func add_sensor_node(sensor_node: BaseSensorNode): + sensor_nodes[sensor_node.ip_address] = sensor_node + if sensor_node.sensor_class not in sensor_classes: return - var down_vec = -1 * position.normalized() - var up_axis = Vector3(0, 1, 0) - up_axis = (up_axis * quaternion).normalized() - var rot_axis = down_vec.cross(up_axis).normalized() - var rot_deg = up_axis.angle_to(down_vec) - var rot_quat = Quaternion(rot_axis, rot_deg).normalized() - quaternion = (quaternion * rot_quat).normalized() - -func _on_pnt_position_updated(sensor_ip: String, sensor_position_3d: Vector3): - if sensor_ip not in sensor_suites: - return - if sensor_ip not in sensor_classes["PNT"]: - return - position_3d = sensor_position_3d - -func add_sensor_node(sensor_node: SensorSuiteNode): - sensor_suites[sensor_node.ip_address] = sensor_node - if sensor_node.provides_pnt: - sensor_classes["PNT"].append(sensor_node.ip_address) - if sensor_node.provides_accel: - sensor_classes["ACCEL"].append(sensor_node.ip_address) - if sensor_node.provides_gyro: - sensor_classes["GYRO"].append(sensor_node.ip_address) - if sensor_node.provides_mag: - sensor_classes["MAG"].append(sensor_node.ip_address) + sensor_classes[sensor_node.sensor_class].append(sensor_node.ip_address) diff --git a/vehicle/vehicle.tscn b/vehicle/vehicle.tscn index c7d4796..7e10a14 100644 --- a/vehicle/vehicle.tscn +++ b/vehicle/vehicle.tscn @@ -2,7 +2,6 @@ [ext_resource type="Script" uid="uid://d264hr5vl2kqv" path="res://vehicle/scripts/vehicle_node.gd" id="1_2o63x"] [ext_resource type="Script" uid="uid://bflafrhk4eq4w" path="res://sensors/sensor_spawner.gd" id="2_2fi1b"] -[ext_resource type="PackedScene" uid="uid://trl3gugdy3hw" path="res://sensors/sensor_suite.tscn" id="3_1ktiy"] [node name="Vehicle" type="Node3D" unique_id=1694630995] script = ExtResource("1_2o63x") @@ -10,5 +9,4 @@ metadata/_custom_type_script = "uid://d264hr5vl2kqv" [node name="SensorSpawner" type="Node3D" parent="." unique_id=1875871474] script = ExtResource("2_2fi1b") -sensor_scene = ExtResource("3_1ktiy") metadata/_custom_type_script = "uid://bflafrhk4eq4w" diff --git a/views/2d/View2D.tscn b/views/2d/View2D.tscn index 898ff1d..6848e46 100644 --- a/views/2d/View2D.tscn +++ b/views/2d/View2D.tscn @@ -8,7 +8,6 @@ [ext_resource type="PackedScene" uid="uid://c61d1lcpgyld" path="res://widgets/rotation/roll_widget.tscn" id="6_s8d37"] [ext_resource type="PackedScene" uid="uid://bosjd085m7dnh" path="res://widgets/rotation/pitch_widget.tscn" id="7_5f0oj"] [ext_resource type="PackedScene" uid="uid://c71ads44rsa4u" path="res://widgets/speed/speed_widget.tscn" id="8_5f0oj"] -[ext_resource type="PackedScene" uid="uid://c1tptpc2xsvix" path="res://widgets/network/network_widget.tscn" id="9_r0eod"] [node name="View2D" type="Node" unique_id=1186202682] script = ExtResource("1_n6fjn") @@ -78,6 +77,3 @@ position = Vector2(400, 101) [node name="SpeedWidget" parent="HUD" unique_id=186354912 instance=ExtResource("8_5f0oj")] position = Vector2(314, 613) - -[node name="NetworkWidget" parent="HUD" unique_id=864131213 instance=ExtResource("9_r0eod")] -position = Vector2(97, 134) diff --git a/views/ViewController.gd b/views/ViewController.gd index bcc7528..85d3c8a 100644 --- a/views/ViewController.gd +++ b/views/ViewController.gd @@ -26,7 +26,6 @@ func add_widget(widget_type: String, widget_position: Vector2, widget_scale: flo pass func _on_sensor_request_received(sensor_ip, sensor_data): - print('here') _on_open_settings_pressed() func _on_sensor_approced(sensor_ip): diff --git a/widgets/altitude/scripts/altitude_widget_node.gd b/widgets/altitude/scripts/altitude_widget_node.gd index b98ca1a..3ce441f 100644 --- a/widgets/altitude/scripts/altitude_widget_node.gd +++ b/widgets/altitude/scripts/altitude_widget_node.gd @@ -10,7 +10,8 @@ func _ready() -> void: super._ready() label_node = get_node("Label") label_node.text = "0 ft" - Signals.altitude_updated.connect(_on_altitude_updated) - -func _on_altitude_updated(sensor_ip: String, altitude_km: float): - label_node.text = 'Altitude: ' + str(int(round(altitude_km * Constants.M2FT * 1000))) + ' ft' + +func _update_data(): + if label_node == null: + return + label_node.text = 'Altitude: ' + str(int(round(host_vehicle.altitude_m * Constants.M2FT))) + ' ft' diff --git a/widgets/base_widget_node.gd b/widgets/base_widget_node.gd index 3bf54f6..1c16258 100644 --- a/widgets/base_widget_node.gd +++ b/widgets/base_widget_node.gd @@ -6,16 +6,27 @@ var used_sensors: Dictionary = {} var host_vehicle: VehicleNode +var timer: float = 0. +static var timer_1_60: float = 1/60 + # Called when the node enters the scene tree for the first time. func _ready() -> void: Signals.vehicle_added.connect(_on_vehicle_added) Signals.requested_host_vehicle.emit(self) func _process(delta: float): + timer += delta if host_vehicle != null: + if timer < timer_1_60: + return + timer = 0 + _update_data() return Signals.requested_host_vehicle.emit(self) +func _update_data(): + pass + func _on_vehicle_added(new_vehicle): host_vehicle = new_vehicle diff --git a/widgets/compass/scripts/compass_widget_node.gd b/widgets/compass/scripts/compass_widget_node.gd index 940103a..493f9e7 100644 --- a/widgets/compass/scripts/compass_widget_node.gd +++ b/widgets/compass/scripts/compass_widget_node.gd @@ -12,10 +12,9 @@ func _ready() -> void: if north_deg == null: north_deg = 0. north_rad = deg_to_rad(north_deg) - Signals.heading_updated.connect(_on_heading_updated) indicator = get_node("CompassIndicator") -func _on_heading_updated(sensor_ip: String, heading_rad: float): - if not check_valid_sensor(sensor_ip, "MAG"): +func _update_data(): + if indicator == null: return - indicator.rotation = north_rad + heading_rad + indicator.rotation = host_vehicle.heading_rad diff --git a/widgets/network/scripts/network_widget_node.gd b/widgets/network/scripts/network_widget_node.gd index ce66780..a22c29c 100644 --- a/widgets/network/scripts/network_widget_node.gd +++ b/widgets/network/scripts/network_widget_node.gd @@ -1,6 +1,10 @@ extends BaseWidgetNode class_name NetworkWidgetNode +var network_timer = 0. +static var timer_1 = 1. + +var label: Node # Called when the node enters the scene tree for the first time. func _ready() -> void: @@ -13,7 +17,12 @@ func _ready() -> void: # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(delta: float) -> void: - var label = get_node("Label") + network_timer += delta + if network_timer < timer_1: + return + network_timer = 0 + if label == null: + return var label_text: String = '' for address in IP.get_local_addresses(): label_text += address + '\n' diff --git a/widgets/rotation/scripts/pitch_widget_node.gd b/widgets/rotation/scripts/pitch_widget_node.gd index 1c0d12a..c9f4a85 100644 --- a/widgets/rotation/scripts/pitch_widget_node.gd +++ b/widgets/rotation/scripts/pitch_widget_node.gd @@ -8,11 +8,12 @@ var label: Label # Called when the node enters the scene tree for the first time. func _ready() -> void: - SensorSignals.pitch_updated.connect(_on_pitch_updated) sprite = get_node("Sprite2D") label = get_node("Label") var label_size = label.size -func _on_pitch_updated(sensor_ip: String, pitch_rad: float): - sprite.rotation = pitch_rad - label.text = str(round(rad_to_deg(pitch_rad)*10)/10) + " \u00B0" +func _update_data(): + if sprite == null or label == null: + return + sprite.rotation = host_vehicle.pitch_rad + label.text = str(round(rad_to_deg(host_vehicle.pitch_rad)*10)/10) + " \u00B0" diff --git a/widgets/rotation/scripts/roll_widget_node.gd b/widgets/rotation/scripts/roll_widget_node.gd index b62ac80..ea13430 100644 --- a/widgets/rotation/scripts/roll_widget_node.gd +++ b/widgets/rotation/scripts/roll_widget_node.gd @@ -7,11 +7,12 @@ var label: Label # Called when the node enters the scene tree for the first time. func _ready() -> void: - SensorSignals.roll_updated.connect(_on_roll_updated) sprite = get_node("Sprite2D") label = get_node("Label") var label_size = label.size -func _on_roll_updated(sensor_ip: String, roll_rad: float): - sprite.rotation = roll_rad - label.text = str(round(rad_to_deg(abs(roll_rad))*10)/10) + " \u00B0" +func _update_data(): + if sprite == null or label == null: + return + sprite.rotation = host_vehicle.roll_rad + label.text = str(abs(round(rad_to_deg(host_vehicle.roll_rad)*10)/10)) + " \u00B0" diff --git a/widgets/satellites/scripts/satellite_widget_3d_node.gd b/widgets/satellites/scripts/satellite_widget_3d_node.gd index b527d6f..a5d430c 100644 --- a/widgets/satellites/scripts/satellite_widget_3d_node.gd +++ b/widgets/satellites/scripts/satellite_widget_3d_node.gd @@ -42,19 +42,6 @@ func set_host_vehicle(new_vehicle): vehicle_3d_node = Node3D.new() add_child(vehicle_3d_node) -func check_valid_sensor(sensor_ip: String, sensor_class: String): - if host_vehicle == null: - return false - if sensor_ip not in host_vehicle.sensors: - return false - if sensor_class == null: - return true - if sensor_class not in host_vehicle.sensor_classes: - return false - if sensor_ip not in host_vehicle.sensor_classes[sensor_class]: - return false - return true - func _on_sat_position_updated(sensor_ip: String, sat_position_data: Array): if vehicle_3d_node == null: return diff --git a/widgets/speed/scripts/speed_widget_node.gd b/widgets/speed/scripts/speed_widget_node.gd index 88af6ca..0b04ec3 100644 --- a/widgets/speed/scripts/speed_widget_node.gd +++ b/widgets/speed/scripts/speed_widget_node.gd @@ -3,19 +3,17 @@ class_name SpeedWidgetNode var K2MI = 0.6213712 -var speed_kmh: float -var speed_mph: float var label_node: Label # Called when the node enters the scene tree for the first time. func _ready() -> void: label_node = get_node("VBoxContainer/SpeedLabel") - SensorSignals.speed_updated.connect(_on_speed_updated) -func _on_speed_updated(ip_address: String, pnt_speed_kmh: float): - speed_kmh = pnt_speed_kmh - speed_mph = speed_kmh * K2MI +func _update_data(): + if label_node == null: + return + var speed_mph = host_vehicle.speed_kmh * K2MI var display_speed: int = 0 if speed_mph >= 1: display_speed = int(round(speed_mph))

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�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