From fa348657f9f5b7c1d23645b8c4e60454a79331cf Mon Sep 17 00:00:00 2001 From: CaypenNow <66198468+CaypenNow@users.noreply.github.com> Date: Fri, 21 Jun 2024 15:24:13 +0500 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BC=D0=BE=D0=B4=D1=83=D0=BB=D0=B5=D0=B9?= =?UTF-8?q?=20(#365)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * base aim module * sprites, prototypes * more prototypes * fix * fix * fix2 --- .../WeaponsModules/WeaponModulesVisuals.cs | 7 +++ .../WeaponModules/WeaponModulesSystem.cs | 28 ++++++++++- .../WeaponModules/AimModuleComponent.cs | 8 +++ .../WeaponModules/BaseModuleComponent.cs | 1 - .../FlameHiderModuleComponent.cs | 3 -- .../WeaponModules/WeaponModulesComponent.cs | 3 +- .../Catalog/Fills/Lockers/heads.yml | 1 + .../Objects/Weapons/Guns/Rifles/rifles.yml | 38 +++++++++++++- .../Objects/Weapons/Guns/SMGs/smgs.yml | 47 ++++++++++++++++++ .../Prototypes/Recipes/Lathes/security.yml | 9 ++++ .../Objects/Weapons/Guns/Modules/modules.yml | 30 +++++++++++ Resources/Prototypes/_White/tags.yml | 3 ++ .../Weapons/modules.rsi/aim_module.png | Bin 0 -> 2772 bytes .../Objects/Weapons/modules.rsi/eightaim.png | Bin 0 -> 2772 bytes .../Objects/Weapons/modules.rsi/meta.json | 6 +++ .../Weapons/modulesOnSMGs.rsi/aim_module.png | Bin 0 -> 157 bytes .../Weapons/modulesOnSMGs.rsi/eightaim.png | Bin 0 -> 157 bytes .../Weapons/modulesOnSMGs.rsi/meta.json | 6 +++ .../modulesOnWeapon.rsi/aim_module.png | Bin 0 -> 157 bytes .../Weapons/modulesOnWeapon.rsi/eightaim.png | Bin 0 -> 157 bytes .../Weapons/modulesOnWeapon.rsi/meta.json | 6 +++ 21 files changed, 189 insertions(+), 7 deletions(-) create mode 100644 Content.Shared/_White/WeaponModules/AimModuleComponent.cs create mode 100644 Resources/Textures/White/Objects/Weapons/modules.rsi/aim_module.png create mode 100644 Resources/Textures/White/Objects/Weapons/modules.rsi/eightaim.png create mode 100644 Resources/Textures/White/Objects/Weapons/modulesOnSMGs.rsi/aim_module.png create mode 100644 Resources/Textures/White/Objects/Weapons/modulesOnSMGs.rsi/eightaim.png create mode 100644 Resources/Textures/White/Objects/Weapons/modulesOnWeapon.rsi/aim_module.png create mode 100644 Resources/Textures/White/Objects/Weapons/modulesOnWeapon.rsi/eightaim.png diff --git a/Content.Client/_White/WeaponsModules/WeaponModulesVisuals.cs b/Content.Client/_White/WeaponsModules/WeaponModulesVisuals.cs index cdd8ef309d..109276264d 100644 --- a/Content.Client/_White/WeaponsModules/WeaponModulesVisuals.cs +++ b/Content.Client/_White/WeaponsModules/WeaponModulesVisuals.cs @@ -18,6 +18,7 @@ public sealed partial class WeaponModulesVisuals : VisualizerSystem(uid, ModuleVisualState.HandGuardModule, out var handguardModule, args.Component) && handguardModule.Length != 0 && handguardModule != "none") { @@ -31,6 +32,12 @@ public sealed partial class WeaponModulesVisuals : VisualizerSystem(uid, ModuleVisualState.AimModule, out var aimModule, args.Component) && aimModule.Length != 0 && aimModule != "none") + { + args.Sprite.LayerSetState(ModuleVisualState.AimModule, aimModule); + args.Sprite.LayerSetVisible(ModuleVisualState.AimModule, true); + } + if (AppearanceSystem.TryGetData(uid, Modules.Light, out var data, args.Component)) { if (TryComp(uid, out var pointLightComponent)) diff --git a/Content.Server/_White/WeaponModules/WeaponModulesSystem.cs b/Content.Server/_White/WeaponModules/WeaponModulesSystem.cs index 82edaec690..0540f54f80 100644 --- a/Content.Server/_White/WeaponModules/WeaponModulesSystem.cs +++ b/Content.Server/_White/WeaponModules/WeaponModulesSystem.cs @@ -1,4 +1,5 @@ using System.Diagnostics.CodeAnalysis; +using Content.Shared._White.Telescope; using Content.Shared._White.WeaponModules; using Content.Shared.Weapons.Ranged.Components; using Content.Shared.Weapons.Ranged.Systems; @@ -11,7 +12,7 @@ public sealed class WeaponModulesSystem : EntitySystem { protected static readonly Dictionary Slots = new() { - { "handguard_module", ModuleVisualState.HandGuardModule }, { "barrel_module", ModuleVisualState.BarrelModule } + { "handguard_module", ModuleVisualState.HandGuardModule }, { "barrel_module", ModuleVisualState.BarrelModule }, { "aim_module", ModuleVisualState.AimModule } }; [Dependency] private readonly PointLightSystem _lightSystem = default!; @@ -36,6 +37,9 @@ public sealed class WeaponModulesSystem : EntitySystem SubscribeLocalEvent(AcceleratorModuleOnInsert); SubscribeLocalEvent(AcceleratorModuleOnEject); + + SubscribeLocalEvent(EightAimModuleOnInsert); + SubscribeLocalEvent(EightAimModuleOnEject); } private bool TryInsertModule(EntityUid module, EntityUid weapon, BaseModuleComponent component, @@ -154,6 +158,18 @@ public sealed class WeaponModulesSystem : EntitySystem _gunSystem.SetFireRate(weapon, component.OldFireRate + component.FireRateAdd); } + + private void EightAimModuleOnInsert(EntityUid module, AimModuleComponent component, EntGotInsertedIntoContainerMessage args) + { + EntityUid weapon = args.Container.Owner; + + if (!TryComp(weapon, out var gunComp)) return; + + if(!TryInsertModule(module, weapon, component, args.Container.ID, out var weaponModulesComponent)) + return; + + EnsureComp(weapon).Divisor = component.Divisor; + } #endregion #region EjectModules @@ -213,5 +229,15 @@ public sealed class WeaponModulesSystem : EntitySystem _gunSystem.SetFireRate(weapon, component.OldFireRate); } + + private void EightAimModuleOnEject(EntityUid module, AimModuleComponent component, EntGotRemovedFromContainerMessage args) + { + EntityUid weapon = args.Container.Owner; + + if(!TryEjectModule(module, weapon, args.Container.ID, out var weaponModulesComponent)) + return; + + RemComp(weapon); + } #endregion } diff --git a/Content.Shared/_White/WeaponModules/AimModuleComponent.cs b/Content.Shared/_White/WeaponModules/AimModuleComponent.cs new file mode 100644 index 0000000000..2421a00d58 --- /dev/null +++ b/Content.Shared/_White/WeaponModules/AimModuleComponent.cs @@ -0,0 +1,8 @@ +namespace Content.Shared._White.WeaponModules; + +[RegisterComponent] +public sealed partial class AimModuleComponent : BaseModuleComponent +{ + [ViewVariables(VVAccess.ReadWrite), DataField("divisor")] + public float Divisor = 0.3F; +} diff --git a/Content.Shared/_White/WeaponModules/BaseModuleComponent.cs b/Content.Shared/_White/WeaponModules/BaseModuleComponent.cs index 56a6f952e1..cfeae08f14 100644 --- a/Content.Shared/_White/WeaponModules/BaseModuleComponent.cs +++ b/Content.Shared/_White/WeaponModules/BaseModuleComponent.cs @@ -2,7 +2,6 @@ namespace Content.Shared._White.WeaponModules; - [RegisterComponent, NetworkedComponent] public partial class BaseModuleComponent : Component { diff --git a/Content.Shared/_White/WeaponModules/FlameHiderModuleComponent.cs b/Content.Shared/_White/WeaponModules/FlameHiderModuleComponent.cs index 94c9a9f02b..705b545e17 100644 --- a/Content.Shared/_White/WeaponModules/FlameHiderModuleComponent.cs +++ b/Content.Shared/_White/WeaponModules/FlameHiderModuleComponent.cs @@ -1,8 +1,5 @@ namespace Content.Shared._White.WeaponModules; -/// -/// This is used for... -/// [RegisterComponent] public sealed partial class FlameHiderModuleComponent : BaseModuleComponent { diff --git a/Content.Shared/_White/WeaponModules/WeaponModulesComponent.cs b/Content.Shared/_White/WeaponModules/WeaponModulesComponent.cs index 380fcb14f7..2db828cf4a 100644 --- a/Content.Shared/_White/WeaponModules/WeaponModulesComponent.cs +++ b/Content.Shared/_White/WeaponModules/WeaponModulesComponent.cs @@ -20,7 +20,8 @@ public partial class WeaponModulesComponent : Component public enum ModuleVisualState : byte { BarrelModule, - HandGuardModule + HandGuardModule, + AimModule } [Serializable, NetSerializable] diff --git a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml index 3ab4121740..8ab18cbcb8 100644 --- a/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml +++ b/Resources/Prototypes/Catalog/Fills/Lockers/heads.yml @@ -285,6 +285,7 @@ - id: MagazinePistol - id: BoxMindshield - id: TagillaHammer + - id: EightAimModule - type: entity id: LockerFreezerVaultFilled suffix: Vault, Locked diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml index 080b8212db..ce6cb07e13 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/Rifles/rifles.yml @@ -15,7 +15,6 @@ - Back - suitStorage - type: AmmoCounter - - type: WeaponModules - type: Gun fireRate: 5 selectedMode: FullAuto @@ -81,10 +80,15 @@ visible: false sprite: White/Objects/Weapons/modulesOnWeapon.rsi map: [ "enum.ModuleVisualState.HandGuardModule" ] + - state: aim_module + visible: false + sprite: White/Objects/Weapons/modulesOnWeapon.rsi + map: [ "enum.ModuleVisualState.AimModule" ] - type: Gun fireRate: 5 soundGunshot: path: /Audio/Weapons/Guns/Gunshots/ak.ogg + - type: WeaponModules - type: ChamberMagazineAmmoProvider soundRack: path: /Audio/Weapons/Guns/Cock/ltrifle_cock.ogg @@ -122,12 +126,21 @@ whitelist: tags: - BaseBarrelModule + aim_module: + name: Aim Module + insertSound: /Audio/White/Gun/Modules/insertmodule.ogg + ejectSound: /Audio/White/Gun/Modules/ejectmodule.ogg + priority: 3 + whitelist: + tags: + - BaseAimModule - type: ContainerContainer containers: gun_magazine: !type:ContainerSlot gun_chamber: !type:ContainerSlot handguard_module: !type:ContainerSlot barrel_module: !type:ContainerSlot + aim_module: !type:ContainerSlot - type: MagazineVisuals magState: mag steps: 1 @@ -201,11 +214,16 @@ visible: false sprite: White/Objects/Weapons/modulesOnWeapon.rsi map: [ "enum.ModuleVisualState.HandGuardModule" ] + - state: aim_module + visible: false + sprite: White/Objects/Weapons/modulesOnWeapon.rsi + map: [ "enum.ModuleVisualState.AimModule" ] - type: Clothing sprite: Objects/Weapons/Guns/Rifles/lecter.rsi - type: Gun soundGunshot: path: /Audio/Weapons/Guns/Gunshots/ltrifle.ogg + - type: WeaponModules - type: ItemSlots slots: gun_magazine: @@ -240,12 +258,21 @@ whitelist: tags: - BaseBarrelModule + aim_module: + name: Aim Module + insertSound: /Audio/White/Gun/Modules/insertmodule.ogg + ejectSound: /Audio/White/Gun/Modules/ejectmodule.ogg + priority: 3 + whitelist: + tags: + - BaseAimModule - type: ContainerContainer containers: gun_magazine: !type:ContainerSlot gun_chamber: !type:ContainerSlot handguard_module: !type:ContainerSlot barrel_module: !type:ContainerSlot + aim_module: !type:ContainerSlot - type: MagazineVisuals magState: mag steps: 1 @@ -261,6 +288,7 @@ id: WeaponRifleLecterRubber suffix: Non-lethal components: + - type: WeaponModules - type: ItemSlots slots: gun_magazine: @@ -295,3 +323,11 @@ whitelist: tags: - BaseBarrelModule + aim_module: + name: Aim Module + insertSound: /Audio/White/Gun/Modules/insertmodule.ogg + ejectSound: /Audio/White/Gun/Modules/ejectmodule.ogg + priority: 3 + whitelist: + tags: + - BaseAimModule diff --git a/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml b/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml index ab7968570a..95bb4556e0 100644 --- a/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml +++ b/Resources/Prototypes/Entities/Objects/Weapons/Guns/SMGs/smgs.yml @@ -108,6 +108,10 @@ visible: false sprite: White/Objects/Weapons/modulesOnSMGs.rsi map: [ "enum.ModuleVisualState.HandGuardModule" ] + - state: aim_module + visible: false + sprite: White/Objects/Weapons/modulesOnSMGs.rsi + map: [ "enum.ModuleVisualState.AimModule" ] - type: Clothing sprite: Objects/Weapons/Guns/SMGs/c20r.rsi - type: Gun @@ -150,12 +154,21 @@ whitelist: tags: - BaseHandGuardModule + aim_module: + name: Aim Module + insertSound: /Audio/White/Gun/Modules/insertmodule.ogg + ejectSound: /Audio/White/Gun/Modules/ejectmodule.ogg + priority: 3 + whitelist: + tags: + - BaseAimModule - type: ContainerContainer containers: gun_magazine: !type:ContainerSlot gun_chamber: !type:ContainerSlot handguard_module: !type:ContainerSlot barrel_module: !type:ContainerSlot + aim_module: !type:ContainerSlot - type: MagazineVisuals magState: mag steps: 6 @@ -186,6 +199,10 @@ visible: false sprite: White/Objects/Weapons/modulesOnWeapon.rsi map: [ "enum.ModuleVisualState.HandGuardModule" ] + - state: aim_module + visible: false + sprite: White/Objects/Weapons/modulesOnWeapon.rsi + map: [ "enum.ModuleVisualState.AimModule" ] - type: Clothing sprite: Objects/Weapons/Guns/SMGs/drozd.rsi - type: Gun @@ -230,12 +247,21 @@ whitelist: tags: - BaseHandGuardModule + aim_module: + name: Aim Module + insertSound: /Audio/White/Gun/Modules/insertmodule.ogg + ejectSound: /Audio/White/Gun/Modules/ejectmodule.ogg + priority: 3 + whitelist: + tags: + - BaseAimModule - type: ContainerContainer containers: gun_magazine: !type:ContainerSlot gun_chamber: !type:ContainerSlot handguard_module: !type:ContainerSlot barrel_module: !type:ContainerSlot + aim_module: !type:ContainerSlot - type: MagazineVisuals magState: mag steps: 1 @@ -319,6 +345,10 @@ visible: false sprite: White/Objects/Weapons/modulesOnWeapon.rsi map: [ "enum.ModuleVisualState.HandGuardModule" ] + - state: aim_module + visible: false + sprite: White/Objects/Weapons/modulesOnWeapon.rsi + map: [ "enum.ModuleVisualState.AimModule" ] - type: Clothing sprite: Objects/Weapons/Guns/SMGs/wt550.rsi - type: ChamberMagazineAmmoProvider @@ -363,12 +393,21 @@ whitelist: tags: - BaseHandGuardModule + aim_module: + name: Aim Module + insertSound: /Audio/White/Gun/Modules/insertmodule.ogg + ejectSound: /Audio/White/Gun/Modules/ejectmodule.ogg + priority: 2 + whitelist: + tags: + - BaseAimModule - type: ContainerContainer containers: gun_magazine: !type:ContainerSlot gun_chamber: !type:ContainerSlot handguard_module: !type:ContainerSlot barrel_module: !type:ContainerSlot + aim_module: !type:ContainerSlot - type: MagazineVisuals magState: mag steps: 6 @@ -419,6 +458,14 @@ whitelist: tags: - BaseHandGuardModule + aim_module: + name: Aim Module + insertSound: /Audio/White/Gun/Modules/insertmodule.ogg + ejectSound: /Audio/White/Gun/Modules/ejectmodule.ogg + priority: 3 + whitelist: + tags: + - BaseAimModule - type: entity name: Vector diff --git a/Resources/Prototypes/Recipes/Lathes/security.yml b/Resources/Prototypes/Recipes/Lathes/security.yml index 9036844cdf..692d097189 100644 --- a/Resources/Prototypes/Recipes/Lathes/security.yml +++ b/Resources/Prototypes/Recipes/Lathes/security.yml @@ -701,3 +701,12 @@ Plastic: 1000 Glass: 500 Gold: 1000 + +- type: latheRecipe + id: EightAimRecipe + result: EightAimModule + completetime: 15 + materials: + Steel: 500 + Plastic: 700 + Glass: 300 \ No newline at end of file diff --git a/Resources/Prototypes/_White/Entities/Objects/Weapons/Guns/Modules/modules.yml b/Resources/Prototypes/_White/Entities/Objects/Weapons/Guns/Modules/modules.yml index 9b08736e80..88799e627f 100644 --- a/Resources/Prototypes/_White/Entities/Objects/Weapons/Guns/Modules/modules.yml +++ b/Resources/Prototypes/_White/Entities/Objects/Weapons/Guns/Modules/modules.yml @@ -32,6 +32,23 @@ - 0,0,0,0 - type: Appearance +- type: entity + id: BaseAimModule + parent: BaseItem + abstract: true + components: + - type: Sprite + sprite: White/Objects/Weapons/modules.rsi + - type: Tag + tags: + - BaseAimModule + - type: Item + sprite: White/Objects/Weapons/modules.rsi + size: Small + shape: + - 0,0,0,0 + - type: Appearance + # modules - type: entity id: LightModule @@ -97,3 +114,16 @@ - type: Sprite state: accelerator - type: Appearance + +- type: entity + id: EightAimModule + description: 8X Aim Module for rifles. + name: "aim module" + parent: BaseAimModule + components: + - type: AimModule + value: "eightaim" + module_type: "aim_module" + - type: Sprite + state: eightaim + - type: Appearance \ No newline at end of file diff --git a/Resources/Prototypes/_White/tags.yml b/Resources/Prototypes/_White/tags.yml index 74ec9443c5..3a54188103 100644 --- a/Resources/Prototypes/_White/tags.yml +++ b/Resources/Prototypes/_White/tags.yml @@ -75,3 +75,6 @@ - type: Tag id: BaseHandGuardModule + +- type: Tag + id: BaseAimModule diff --git a/Resources/Textures/White/Objects/Weapons/modules.rsi/aim_module.png b/Resources/Textures/White/Objects/Weapons/modules.rsi/aim_module.png new file mode 100644 index 0000000000000000000000000000000000000000..f6e4d623e42f8ec14430b06e7773d761c44a66e1 GIT binary patch literal 2772 zcmV;_3M=)AP)uJ@VVD_U zC<6{NG_fI~0ue<-1QkJoA_k0xBC#Thg@9ne9*`iQ#9$OrQF$}6R&?d%y_c8YA7_1Q zpS|}zXYYO1x&V;8{kgn!SPFnNo`4_X z6{c}T{8k*B#$jdxfFg<9uYy1K45IaYvHg`_dOZM)Sy63ve6hvv1)yUy0P^?0*fb9UASvow z`@mQCp^4`uNg&9uGcn1|&Nk+9SjOUl{-OWr@Hh0;_l(8q{wNRKos+;6rV8ldy0Owz z(}jF`W(JeRp&R{qi2rfmU!TJ;gp(Kmm5I1s5m_f-n#TRsj}B0%?E` zvOzxB2#P=n*a3EfYETOrKoe*ICqM@{4K9Go;5xVgZi5G41dM~{UdP z6d+Yd3o?MrAqM0Kc|iV92owdyL5UC#5<>aVCa44|hpM4Es0sQWIt5*Tu0n&*J!lk~ zf_{hI!w5`*sjxDv4V%CW*ah~3!{C*0BD@;TgA3v9a1~q+AA{TB3-ERLHar49hi4Ih z5D^-ph8Q6X#0?2VqLBoIkE}zAkxHZUgRb+f=natP#6>iMMoK->`~sRLq)(kHo*Vn{;LcG6+e zdD1=7D>9j^O?D{Qg|tCDK{ym)H7&wDr6*;uGTJg8GHjVb znL{!cWyUB7MT6o-VNo_w8Yq`2<5Ub)hw4L3rj}5@qxMs0WMyP6Wy582WNT#4$d1qu znl{acmP#w5ouJ*Jy_Zv#bCKi7ZIf$}8dZdVy&)LYdbX%I9R8VMQ|8r>Q*nyQ)sn)#Z|n)kKvS`4iutvy=3T65Yu+7a4Yv^%sX zb>ww?bn(=Yu(!=O6^iuTp>)p_Y^{w=i^lS773}6Fm1Fpe-gF!>I zp{*g$u-szvGhed; zvo5pW&GpS$<~8QGEXWp~7V9lKEnZq0SaK{6Sl+dwSOr*ZvFf(^Xl-N7w{EeXveC4O zv)N}e%%C!Y7^RFWwrE>d+x51mZQt2h+X?JW*!^a2WS?Sx)P8cQ&Qi|OhNWW;>JChY zI)@QQx?`Nj^#uJBl~d&PK+RZLOLos~K(b5>qmrMN0})tOkySZ3_WICNY@+|jrX%s^&6b2i>5 zeqa0y%Z;^%^_=a@u3%4b9605ii3Ep)@`TAmhs0fpQ%O!ql}XcFH*PieWwLj2ZSq`7 zV9Mc?h17`D)-+sNT-qs~3@?S(ldh7UlRlVXkWrK|vf6I-?$tAVKYn8-l({mqQ$Q8{ zO!WzMg`0(=S&msXS#Pt$vrpzo=kRj+a`kh!z=6$;cwT88(J6|n-WB%w`m$h~4 zpmp)YIh_3ETV2tjiAU!0h1dxU-n=E9e!)6|Z;4?!H=SSy{V>ut&IOq{_dlbFb#!9eY1iCsp6Bajj|H zr?hX|zPbJE{X++w546-O*Ot`2Kgd0Jx6Z4syTu9enWavU5N9)I?I-1m1* z_?_rJ$vD~agVqoG+9++s?NEDe`%Fht$4F;X=in*dQ{7$mU2Q)a|9JSc+Uc4zvS-T9 z63!N$T{xF_ZuWe}`RNOZ7sk3{yB}PPym+f8xTpV;-=!;;JuhGEb?H5K#o@~7t9DmU zU1MD9xNd#Dz0azz?I)|B+WM{g+Xrk0I&awC=o(x)cy`EX=)z6+o0o6-+`4{y+3mqQ z%kSJBju{@g%f35#FZJHb`&swrA8dGtepviS>QUumrN{L@>;2q1Vm)$Z)P1z?N$8UY zW2~{~zhwUMVZ87u`Dx{Z>O|9|`Q+&->FRy-Sjp7DHsy69KwU-!MxeeuI@&cF4| zM9z%AE>^<<9^B a0AF5bkP~(R2!ECU0000uJ@VVD_U zC<6{NG_fI~0ue<-1QkJoA_k0xBC#Thg@9ne9*`iQ#9$OrQF$}6R&?d%y_c8YA7_1Q zpS|}zXYYO1x&V;8{kgn!SPFnNo`4_X z6{c}T{8k*B#$jdxfFg<9uYy1K45IaYvHg`_dOZM)Sy63ve6hvv1)yUy0P^?0*fb9UASvow z`@mQCp^4`uNg&9uGcn1|&Nk+9SjOUl{-OWr@Hh0;_l(8q{wNRKos+;6rV8ldy0Owz z(}jF`W(JeRp&R{qi2rfmU!TJ;gp(Kmm5I1s5m_f-n#TRsj}B0%?E` zvOzxB2#P=n*a3EfYETOrKoe*ICqM@{4K9Go;5xVgZi5G41dM~{UdP z6d+Yd3o?MrAqM0Kc|iV92owdyL5UC#5<>aVCa44|hpM4Es0sQWIt5*Tu0n&*J!lk~ zf_{hI!w5`*sjxDv4V%CW*ah~3!{C*0BD@;TgA3v9a1~q+AA{TB3-ERLHar49hi4Ih z5D^-ph8Q6X#0?2VqLBoIkE}zAkxHZUgRb+f=natP#6>iMMoK->`~sRLq)(kHo*Vn{;LcG6+e zdD1=7D>9j^O?D{Qg|tCDK{ym)H7&wDr6*;uGTJg8GHjVb znL{!cWyUB7MT6o-VNo_w8Yq`2<5Ub)hw4L3rj}5@qxMs0WMyP6Wy582WNT#4$d1qu znl{acmP#w5ouJ*Jy_Zv#bCKi7ZIf$}8dZdVy&)LYdbX%I9R8VMQ|8r>Q*nyQ)sn)#Z|n)kKvS`4iutvy=3T65Yu+7a4Yv^%sX zb>ww?bn(=Yu(!=O6^iuTp>)p_Y^{w=i^lS773}6Fm1Fpe-gF!>I zp{*g$u-szvGhed; zvo5pW&GpS$<~8QGEXWp~7V9lKEnZq0SaK{6Sl+dwSOr*ZvFf(^Xl-N7w{EeXveC4O zv)N}e%%C!Y7^RFWwrE>d+x51mZQt2h+X?JW*!^a2WS?Sx)P8cQ&Qi|OhNWW;>JChY zI)@QQx?`Nj^#uJBl~d&PK+RZLOLos~K(b5>qmrMN0})tOkySZ3_WICNY@+|jrX%s^&6b2i>5 zeqa0y%Z;^%^_=a@u3%4b9605ii3Ep)@`TAmhs0fpQ%O!ql}XcFH*PieWwLj2ZSq`7 zV9Mc?h17`D)-+sNT-qs~3@?S(ldh7UlRlVXkWrK|vf6I-?$tAVKYn8-l({mqQ$Q8{ zO!WzMg`0(=S&msXS#Pt$vrpzo=kRj+a`kh!z=6$;cwT88(J6|n-WB%w`m$h~4 zpmp)YIh_3ETV2tjiAU!0h1dxU-n=E9e!)6|Z;4?!H=SSy{V>ut&IOq{_dlbFb#!9eY1iCsp6Bajj|H zr?hX|zPbJE{X++w546-O*Ot`2Kgd0Jx6Z4syTu9enWavU5N9)I?I-1m1* z_?_rJ$vD~agVqoG+9++s?NEDe`%Fht$4F;X=in*dQ{7$mU2Q)a|9JSc+Uc4zvS-T9 z63!N$T{xF_ZuWe}`RNOZ7sk3{yB}PPym+f8xTpV;-=!;;JuhGEb?H5K#o@~7t9DmU zU1MD9xNd#Dz0azz?I)|B+WM{g+Xrk0I&awC=o(x)cy`EX=)z6+o0o6-+`4{y+3mqQ z%kSJBju{@g%f35#FZJHb`&swrA8dGtepviS>QUumrN{L@>;2q1Vm)$Z)P1z?N$8UY zW2~{~zhwUMVZ87u`Dx{Z>O|9|`Q+&->FRy-Sjp7DHsy69KwU-!MxeeuI@&cF4| zM9z%AE>^<<9^B a0AF5bkP~(R2!ECU0000Eak- z(VLtgv8`d^1RG^W(J5L9Eeu>DJxzfI8yFZo)EOiEak- z(VLtgv8`d^1RG^W(J5L9Eeu>DJxzfI8yFZo)EOiEak- z(VLtgv8`d^1RG^W(J5L9Eeu>DJxzfI8yFZo)EOiEak- z(VLtgv8`d^1RG^W(J5L9Eeu>DJxzfI8yFZo)EOi