From f5c7808446af643c6177f010dd55ab51656d4ee1 Mon Sep 17 00:00:00 2001 From: Velcroboy <107660393+IamVelcroboy@users.noreply.github.com> Date: Tue, 9 Apr 2024 22:12:36 -0500 Subject: [PATCH] Fix shuttle structure construction (#1069) Co-authored-by: Velcroboy --- Content.Client/Wall/ShuttleWallVisuals.cs | 6 ++ Content.Shared/Wall/ShuttleWallVisuals.cs | 8 ++ .../Entities/Structures/Walls/walls.yml | 70 ++++++++-------- .../Entities/Structures/Walls/walls.yml | 19 ----- .../Recipes/Construction/structures.yml | 75 ------------------ .../Construction/Graphs/structures/girder.yml | 49 +++--------- .../Recipes/Construction/structures.yml | 73 +++++++++++++++++ .../Structures/Walls/shuttle.rsi/meta.json | 20 ++++- .../Walls/shuttle.rsi/shuttle_construct-0.png | Bin 0 -> 632 bytes .../Walls/shuttle.rsi/shuttle_construct-1.png | Bin 0 -> 652 bytes .../Walls/shuttle.rsi/shuttle_construct-2.png | Bin 0 -> 689 bytes .../Walls/shuttle.rsi/shuttle_construct-3.png | Bin 0 -> 690 bytes .../Walls/shuttle.rsi/shuttle_construct-4.png | Bin 0 -> 675 bytes .../Walls/shuttle.rsi/shuttle_construct-5.png | Bin 0 -> 671 bytes .../Walls/shuttleinterior.rsi/full.png | Bin .../Walls/shuttleinterior.rsi/meta.json | 0 .../Walls/shuttleinterior.rsi/state0.png | Bin .../Walls/shuttleinterior.rsi/state1.png | Bin .../Walls/shuttleinterior.rsi/state2.png | Bin .../Walls/shuttleinterior.rsi/state3.png | Bin .../Walls/shuttleinterior.rsi/state4.png | Bin .../Walls/shuttleinterior.rsi/state5.png | Bin .../Walls/shuttleinterior.rsi/state6.png | Bin .../Walls/shuttleinterior.rsi/state7.png | Bin 24 files changed, 154 insertions(+), 166 deletions(-) create mode 100644 Content.Client/Wall/ShuttleWallVisuals.cs create mode 100644 Content.Shared/Wall/ShuttleWallVisuals.cs create mode 100644 Resources/Textures/Structures/Walls/shuttle.rsi/shuttle_construct-0.png create mode 100644 Resources/Textures/Structures/Walls/shuttle.rsi/shuttle_construct-1.png create mode 100644 Resources/Textures/Structures/Walls/shuttle.rsi/shuttle_construct-2.png create mode 100644 Resources/Textures/Structures/Walls/shuttle.rsi/shuttle_construct-3.png create mode 100644 Resources/Textures/Structures/Walls/shuttle.rsi/shuttle_construct-4.png create mode 100644 Resources/Textures/Structures/Walls/shuttle.rsi/shuttle_construct-5.png rename Resources/Textures/{Nyanotrasen => }/Structures/Walls/shuttleinterior.rsi/full.png (100%) rename Resources/Textures/{Nyanotrasen => }/Structures/Walls/shuttleinterior.rsi/meta.json (100%) rename Resources/Textures/{Nyanotrasen => }/Structures/Walls/shuttleinterior.rsi/state0.png (100%) rename Resources/Textures/{Nyanotrasen => }/Structures/Walls/shuttleinterior.rsi/state1.png (100%) rename Resources/Textures/{Nyanotrasen => }/Structures/Walls/shuttleinterior.rsi/state2.png (100%) rename Resources/Textures/{Nyanotrasen => }/Structures/Walls/shuttleinterior.rsi/state3.png (100%) rename Resources/Textures/{Nyanotrasen => }/Structures/Walls/shuttleinterior.rsi/state4.png (100%) rename Resources/Textures/{Nyanotrasen => }/Structures/Walls/shuttleinterior.rsi/state5.png (100%) rename Resources/Textures/{Nyanotrasen => }/Structures/Walls/shuttleinterior.rsi/state6.png (100%) rename Resources/Textures/{Nyanotrasen => }/Structures/Walls/shuttleinterior.rsi/state7.png (100%) diff --git a/Content.Client/Wall/ShuttleWallVisuals.cs b/Content.Client/Wall/ShuttleWallVisuals.cs new file mode 100644 index 00000000000..9060e892a8a --- /dev/null +++ b/Content.Client/Wall/ShuttleWallVisuals.cs @@ -0,0 +1,6 @@ +namespace Content.Client.Wall; + +public enum ShuttleWallVisualLayers : byte +{ + Deconstruction, +} diff --git a/Content.Shared/Wall/ShuttleWallVisuals.cs b/Content.Shared/Wall/ShuttleWallVisuals.cs new file mode 100644 index 00000000000..31fef9f399c --- /dev/null +++ b/Content.Shared/Wall/ShuttleWallVisuals.cs @@ -0,0 +1,8 @@ +namespace Content.Shared.Wall; +using Robust.Shared.Serialization; + +[Serializable, NetSerializable] +public enum ShuttleWallVisuals +{ + DeconstructionStage, +} diff --git a/Resources/Prototypes/Entities/Structures/Walls/walls.yml b/Resources/Prototypes/Entities/Structures/Walls/walls.yml index 9ef0ef95d37..ff9a7ef9ae2 100644 --- a/Resources/Prototypes/Entities/Structures/Walls/walls.yml +++ b/Resources/Prototypes/Entities/Structures/Walls/walls.yml @@ -530,9 +530,6 @@ !type:DamageTrigger damage: 600 behaviors: - - !type:PlaySoundBehavior #Nyano - sound: - collection: MetalBreak - !type:DoActsBehavior acts: ["Destruction"] - !type:PlaySoundBehavior @@ -793,19 +790,13 @@ !type:DamageTrigger damage: 300 behaviors: + - !type:ChangeConstructionNodeBehavior + node: girder - !type:PlaySoundBehavior sound: collection: MetalSlam - !type:DoActsBehavior acts: ["Destruction"] - - trigger: #this trigger is a Nyano addition - !type:DamageTrigger - damage: 300 - behaviors: - - !type:ChangeConstructionNodeBehavior - node: girder - - !type:DoActsBehavior - acts: ["Destruction"] destroySound: collection: MetalBreak - type: Construction @@ -813,45 +804,54 @@ node: diagonalshuttleWall - type: entity - parent: WallReinforced #Nyano, basically Reinforced Wall (shuttle variant) + parent: WallReinforced id: WallShuttle name: shuttle wall components: - - type: Tag - tags: - - Wall - type: Sprite sprite: Structures/Walls/shuttle.rsi - type: Icon sprite: Structures/Walls/shuttle.rsi state: full -# - type: Destructible -# thresholds: -# - trigger: -# !type:DamageTrigger -# damage: 1000 -# behaviors: -# - !type:DoActsBehavior -# acts: [ "Destruction" ] -# - trigger: -# !type:DamageTrigger -# damage: 500 -# behaviors: -# - !type:PlaySoundBehavior -# sound: -# path: /Audio/Effects/metalbreak.ogg -# - !type:DoActsBehavior -# acts: ["Destruction"] -# destroySound: -# path: /Audio/Effects/metalbreak.ogg + - type: Construction + graph: Girder + node: shuttleWall + - type: IconSmooth + key: walls + base: state + - type: Appearance + - type: GenericVisualizer + visuals: + enum.ShuttleWallVisuals.DeconstructionStage: + ShuttleWallVisualLayers.Deconstruction: + -1: { visible: false } + 0: { state: shuttle_construct-0, visible: true} + 1: { state: shuttle_construct-1, visible: true} + 2: { state: shuttle_construct-2, visible: true} + 3: { state: shuttle_construct-3, visible: true} + 4: { state: shuttle_construct-4, visible: true} + 5: { state: shuttle_construct-5, visible: true} - type: Reflect reflectProb: 1 + +- type: entity + parent: WallSolid + id: WallShuttleInterior + name: shuttle wall + suffix: Interior + components: + - type: Sprite + sprite: Structures/Walls/shuttleinterior.rsi + - type: Icon + sprite: Structures/Walls/shuttleinterior.rsi - type: Construction graph: Girder - node: shuttleWall + node: shuttleInteriorWall - type: IconSmooth key: walls base: state + - type: Reflect + reflectProb: 1 - type: entity parent: BaseWall diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Structures/Walls/walls.yml b/Resources/Prototypes/Nyanotrasen/Entities/Structures/Walls/walls.yml index 12548299910..0d398128af5 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Structures/Walls/walls.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Structures/Walls/walls.yml @@ -1,22 +1,3 @@ -- type: entity - parent: WallSolid #basically non-Reinforced Wall (shuttle variant) - id: WallShuttleInterior - name: shuttle wall - suffix: Interior - components: - - type: Sprite - sprite: Nyanotrasen/Structures/Walls/shuttleinterior.rsi - - type: Icon - sprite: Nyanotrasen/Structures/Walls/shuttleinterior.rsi - - type: Construction - graph: Girder - node: shuttleInteriorWall - - type: IconSmooth - key: walls - base: state - - type: Reflect - reflectProb: 1 - - type: entity parent: BaseWall id: WallPaper diff --git a/Resources/Prototypes/Nyanotrasen/Recipes/Construction/structures.yml b/Resources/Prototypes/Nyanotrasen/Recipes/Construction/structures.yml index 16dc3dcbbdc..16a85346b36 100644 --- a/Resources/Prototypes/Nyanotrasen/Recipes/Construction/structures.yml +++ b/Resources/Prototypes/Nyanotrasen/Recipes/Construction/structures.yml @@ -15,78 +15,3 @@ canBuildInImpassable: false conditions: - !type:TileNotBlocked - -- type: construction - name: shuttle wall - id: ShuttleWall - graph: Girder - startNode: start - targetNode: shuttleWall - category: construction-category-structures - description: Keeps the air in and the greytide out. - icon: - sprite: Structures/Walls/shuttle.rsi - state: full - objectType: Structure - placementMode: SnapgridCenter - canRotate: false - canBuildInImpassable: false - conditions: - - !type:TileNotBlocked - -- type: construction - name: interior shuttle wall - id: InteriorShuttleWall - graph: Girder - startNode: start - targetNode: shuttleInteriorWall - category: construction-category-structures - description: Keeps the air in and the greytide out. - icon: - sprite: Nyanotrasen/Structures/Walls/shuttleinterior.rsi - state: full - objectType: Structure - placementMode: SnapgridCenter - canRotate: false - canBuildInImpassable: false - conditions: - - !type:TileNotBlocked - - -- type: construction - name: diagonal shuttle wall - id: DiagonalShuttleWall - graph: Girder - startNode: start - targetNode: diagonalshuttleWall - category: construction-category-structures - description: Keeps the air in and the greytide out. - icon: - sprite: Structures/Walls/shuttle_diagonal.rsi - state: state0 - objectType: Structure - placementMode: SnapgridCenter - canRotate: true - canBuildInImpassable: false - conditions: - - !type:TileNotBlocked - -- type: construction - name: shuttle window - id: ShuttleWindow - graph: Window - startNode: start - targetNode: shuttleWindow - category: construction-category-structures - canBuildInImpassable: true - description: Extra sturdy to resist the pressure of FTL or sustain damage from munitions. - conditions: - - !type:EmptyOrWindowValidInTile - - !type:NoWindowsInTile - icon: - sprite: Structures/Windows/shuttle_window.rsi - state: full - objectType: Structure - placementMode: SnapgridCenter - canRotate: false - \ No newline at end of file diff --git a/Resources/Prototypes/Recipes/Construction/Graphs/structures/girder.yml b/Resources/Prototypes/Recipes/Construction/Graphs/structures/girder.yml index 9f18fe8f2f9..9e9087fbd79 100644 --- a/Resources/Prototypes/Recipes/Construction/Graphs/structures/girder.yml +++ b/Resources/Prototypes/Recipes/Construction/Graphs/structures/girder.yml @@ -156,7 +156,7 @@ amount: 2 doAfter: 2 - - to: shuttleInteriorWall #Nyano + - to: shuttleInteriorWall completed: - !type:SnapToGrid southRotation: true @@ -290,7 +290,7 @@ - tool: Prying doAfter: 5 - - node: shuttleInteriorWall #Nyano + - node: shuttleInteriorWall entity: WallShuttleInterior edges: - to: girder @@ -321,7 +321,7 @@ amount: 2 doAfter: 1 - - to: shuttleWall #Nyano + - to: shuttleWall completed: - !type:SnapToGrid southRotation: true @@ -337,7 +337,7 @@ amount: 2 doAfter: 1 - - to: diagonalshuttleWall #Nyano + - to: diagonalshuttleWall completed: - !type:SnapToGrid southRotation: false @@ -418,7 +418,7 @@ - tool: Cutting doAfter: 1 - - node: shuttleWall #Nyano + - node: shuttleWall entity: WallShuttle edges: - to: reinforcedGirder @@ -436,7 +436,7 @@ doAfter: 1 completed: - !type:VisualizerDataInt - key: "enum.ReinforcedWallVisuals.DeconstructionStage" + key: "enum.ShuttleWallVisuals.DeconstructionStage" data: 5 - tool: Screwing doAfter: 2 @@ -444,7 +444,7 @@ doAfter: 5 completed: - !type:VisualizerDataInt - key: "enum.ReinforcedWallVisuals.DeconstructionStage" + key: "enum.ShuttleWallVisuals.DeconstructionStage" data: 4 - tool: Prying doAfter: 2 @@ -452,30 +452,30 @@ doAfter: 1 completed: - !type:VisualizerDataInt - key: "enum.ReinforcedWallVisuals.DeconstructionStage" + key: "enum.ShuttleWallVisuals.DeconstructionStage" data: 3 - tool: Welding doAfter: 10 completed: - !type:VisualizerDataInt - key: "enum.ReinforcedWallVisuals.DeconstructionStage" + key: "enum.ShuttleWallVisuals.DeconstructionStage" data: 2 - tool: Prying doAfter: 1 completed: - !type:VisualizerDataInt - key: "enum.ReinforcedWallVisuals.DeconstructionStage" + key: "enum.ShuttleWallVisuals.DeconstructionStage" data: 1 - tool: Screwing doAfter: 1 completed: - !type:VisualizerDataInt - key: "enum.ReinforcedWallVisuals.DeconstructionStage" + key: "enum.ShuttleWallVisuals.DeconstructionStage" data: 0 - tool: Cutting doAfter: 4 - - node: diagonalshuttleWall #Nyano + - node: diagonalshuttleWall entity: WallShuttleDiagonal edges: - to: reinforcedGirder @@ -487,48 +487,25 @@ prototype: SheetSteel1 amount: 1 steps: + #To-Do: Add deconstruct visuals - tool: Welding doAfter: 5 - tool: Cutting doAfter: 1 - completed: - - !type:VisualizerDataInt - key: "enum.ReinforcedWallVisuals.DeconstructionStage" - data: 5 - tool: Screwing doAfter: 1 - tool: Welding doAfter: 5 - completed: - - !type:VisualizerDataInt - key: "enum.ReinforcedWallVisuals.DeconstructionStage" - data: 4 - tool: Prying doAfter: 1 - tool: Anchoring doAfter: 1 - completed: - - !type:VisualizerDataInt - key: "enum.ReinforcedWallVisuals.DeconstructionStage" - data: 3 - tool: Welding doAfter: 10 - completed: - - !type:VisualizerDataInt - key: "enum.ReinforcedWallVisuals.DeconstructionStage" - data: 2 - tool: Prying doAfter: 1 - completed: - - !type:VisualizerDataInt - key: "enum.ReinforcedWallVisuals.DeconstructionStage" - data: 1 - tool: Screwing doAfter: 1 - completed: - - !type:VisualizerDataInt - key: "enum.ReinforcedWallVisuals.DeconstructionStage" - data: 0 - tool: Cutting doAfter: 1 diff --git a/Resources/Prototypes/Recipes/Construction/structures.yml b/Resources/Prototypes/Recipes/Construction/structures.yml index be793ed1890..a1f370cc1bd 100644 --- a/Resources/Prototypes/Recipes/Construction/structures.yml +++ b/Resources/Prototypes/Recipes/Construction/structures.yml @@ -214,6 +214,60 @@ conditions: - !type:TileNotBlocked +- type: construction + name: shuttle wall + id: ShuttleWall + graph: Girder + startNode: start + targetNode: shuttleWall + category: construction-category-structures + description: Keeps the air in and the greytide out. + icon: + sprite: Structures/Walls/shuttle.rsi + state: full + objectType: Structure + placementMode: SnapgridCenter + canRotate: false + canBuildInImpassable: false + conditions: + - !type:TileNotBlocked + +- type: construction + name: interior shuttle wall + id: InteriorShuttleWall + graph: Girder + startNode: start + targetNode: shuttleInteriorWall + category: construction-category-structures + description: Keeps the air in and the greytide out. + icon: + sprite: Structures/Walls/shuttleinterior.rsi + state: full + objectType: Structure + placementMode: SnapgridCenter + canRotate: false + canBuildInImpassable: false + conditions: + - !type:TileNotBlocked + +- type: construction + name: diagonal shuttle wall + id: DiagonalShuttleWall + graph: Girder + startNode: start + targetNode: diagonalshuttleWall + category: construction-category-structures + description: Keeps the air in and the greytide out. + icon: + sprite: Structures/Walls/shuttle_diagonal.rsi + state: state0 + objectType: Structure + placementMode: SnapgridCenter + canRotate: true + canBuildInImpassable: false + conditions: + - !type:TileNotBlocked + - type: construction name: bananium wall id: ClownWall @@ -488,6 +542,25 @@ placementMode: SnapgridCenter canRotate: false +- type: construction + name: shuttle window + id: ShuttleWindow + graph: Window + startNode: start + targetNode: shuttleWindow + category: construction-category-structures + canBuildInImpassable: true + description: Extra sturdy to resist the pressure of FTL or sustain damage from munitions. + conditions: + - !type:EmptyOrWindowValidInTile + - !type:NoWindowsInTile + icon: + sprite: Structures/Windows/shuttle_window.rsi + state: full + objectType: Structure + placementMode: SnapgridCenter + canRotate: false + - type: construction name: diagonal plasma window id: PlasmaWindowDiagonal diff --git a/Resources/Textures/Structures/Walls/shuttle.rsi/meta.json b/Resources/Textures/Structures/Walls/shuttle.rsi/meta.json index 97ca2aa3b00..9aff20a66c8 100644 --- a/Resources/Textures/Structures/Walls/shuttle.rsi/meta.json +++ b/Resources/Textures/Structures/Walls/shuttle.rsi/meta.json @@ -41,6 +41,24 @@ { "name": "state7", "directions": 4 + }, + { + "name": "shuttle_construct-0" + }, + { + "name": "shuttle_construct-1" + }, + { + "name": "shuttle_construct-2" + }, + { + "name": "shuttle_construct-3" + }, + { + "name": "shuttle_construct-4" + }, + { + "name": "shuttle_construct-5" } ] -} \ No newline at end of file +} diff --git a/Resources/Textures/Structures/Walls/shuttle.rsi/shuttle_construct-0.png b/Resources/Textures/Structures/Walls/shuttle.rsi/shuttle_construct-0.png new file mode 100644 index 0000000000000000000000000000000000000000..dde7f67085c33178ecb82b20793d7e242ce38b19 GIT binary patch literal 632 zcmV-;0*C#HP)9K}pVm;=nMt*LGqJ_Ao4JqnfvI{;?+{d@NqCQh9MmXMYb z$EpA6vzJ)qh|!auoyVZ4qy*Lvas=D~Aj@+L3mC3my2PNZrw67%0K~=yVDd0ILh4{< zg6PTp6TprDJHXV!@jr-DP+Y*Uaoq;E$PtuS4s$Wg5wNISxnU23y`3dt2iVyAknMBy-~u_~ z$iXdO;i2Pz*hFA~p{M}&j3ls#77`U@c=!4>LHapbaeM#%1BS)(Aq5=KA%N}xPyqt6 zoDcvx61|Wj$^oE)2viQh5+Sw_09g*Q00clG0s}A~!yHH`1hAF^u#ymz4M6}`2*9EN z*%I{V!50FcY>2ZY1Qo@&902n%C@S{s+{xhL?hX$D7$0Uaz7QbW0kAYc$N_}X0ND

2xG!1~VA9K}pVm;=nMt*LGqJ_Ao4JqnfvI{;?+{d@NqCQh9MmXMYb z$EpA6vzJ)qh|!auoyVZ4qy*Lvas=D~Aj@+L3mC3my2PNZrw67%0K~=yVDd0ILh4{< zg6PTp6TprDJHXV!@jr-DP+Y*Uaoq;E$PtuS4s$Wg5wNISxnU23y`3dt2iVyAknMBy-~u_~ z$iXdO;i2Pz*hFA~p{M}&%+iIk7@jKfMM}`NC8K52%tNl zv$d9?ytM2Ig0+Ipuj?Af^!ZikDzJ401* z4$crlcL3IM09F!$vLOhdI{+jGN=%^Q`rYf-49}5jHA!F%DkLfjE@H7|S!4%*vLVir z5L6Tsa)73mCIiSqbO(U=*RNe4bpT}{fG-hJD-D3MA9K}pVm;=nMt*LGqJ_Ao4JqnfvI{;?+{d@NqCQh9MmXMYb z$EpA6vzJ)qh|!auoyVZ4qy*Lvas=D~Aj@+L3mC3my2PNZrw67%0K~=yVDd0ILh4{< zg6PTp6TprDJHXV!@jr-DP+Y*Uaoq;E$PtuS4s$Wg5wNISxnU23y`3dt2iVyAknMBy-~u_~ z$iXdO;i2Pz*hFA~p{M}&%+iIk7@jKfMM}`NC8K52%tNl zv$d9?ytM2IT{Kn5>bxe;Dcg7~1)EiT+2 zY$vu5LU#bxasXBmg0dk9pgRC021-nz;u>VxmD`UQ&Ye5QU}R*(pra}ab`+?H#g=7} z9RSLPI7>oMQB24IAPZs>62O*rPME<^UXTHH%;E(Lzz(E~13*Fk99XY|EC)G464-_S z72$Mq0L?-GUm~Pd8USTOoRtxBQB2ERKvYpo_i_MK8zP4QdR;(CNjNm?f&rk^x&qAOLGlW7I@w0%SGGV3pB;HA)ApSq|$N4OquyP;|{eX=p$@r^tzz-raKm X_sHm<;lFx500000NkvXXu0mjf_TU|m literal 0 HcmV?d00001 diff --git a/Resources/Textures/Structures/Walls/shuttle.rsi/shuttle_construct-3.png b/Resources/Textures/Structures/Walls/shuttle.rsi/shuttle_construct-3.png new file mode 100644 index 0000000000000000000000000000000000000000..7098ec309a42368ab631fc9bca706b12cd0010e4 GIT binary patch literal 690 zcmV;j0!{siP)9K}pVm;=nMt*LGqJ_Ao4JqnfvI{;?+{d@NqCQh9MmXMYb z$EpA6vzJ)qh|!auoyVZ4qy*Lvas=D~Aj@+L3mC3my2PNZrw67%0K~=yVDd0ILh4{< zg6PTp6TprDJHXV!@jr-DP+Y*Uaoq;E$PtuS4s$Wg5wNISxnU23y`3dt2iVyA5cGLxYb`^0 zbu+=x0XgEx!7X5QRC55#a$+1omIGoFfdz)50^D~?7tUgM^5ij`kL+`hBVa&AMwTHu zJ`E*Q?%#jFuy{VCfFn8t&>ev6V_?~V5$vZ=><32&wh$r80ic2iR1UxrAvOoVYz0{a z3RYO|0I@+1K$b^#A-V&wmIJVo5R?r;0Gk6qK1a3`oegscdcs6@04N*cED1qHF*XOl zf)!)|GC+0!OdKSJ9t{*Z0NF6)V8@pCkmZr}QRD!SMaUt5uT+FNfb0+;lnBvNKei}< z0S9K}pVm;=nMt*LGqJ_Ao4JqnfvI{;?+{d@NqCQh9MmXMYb z$EpA6vzJ)qh|!auoyVZ4qy*Lvas=D~Aj@+L3mC3my2PNZrw67%0K~=yVDd0ILh4{< zg6PTp6TprDJHXV!@jr-DP+Y*Uaoq;E$PtuS4s$Wg5wNISxnU23y`3dt2iVyA5cGLxYb`^0 zbu+=x0XgEx!7X5QRC55#a$+1omIGoFfdz)50^D~?7tUgM^5ij`kL+`hBVa&AMwTHu zJ`E*Q?%#jFuy{VCfFn8t&>ev6Q;?6)0W6_n3lX9m04j(; zaRAnG09F!$vLOgya{#c^#A+$b0U-MHiTxM}6FCGx*$`(*2r7!PIRNG>^q@x$0a%oP z#Lz>5A_t(yJ-$K-S5#2s0Fcj+Lx30ukR1Yq5+NuJAOmbsKqw7>vLVjO2)QVxWiBA9 zD5iTk0ICgk^x&qAOLGl z6KVjE)g*&eMg!I;9k6COtY9K}pVm;=nMt*LGqJ_Ao4JqnfvI{;?+{d@NqCQh9MmXMYb z$EpA6vzJ)qh|!auoyVZ4qy*Lvas=D~Aj@+L3mC3my2PNZrw67%0K~=yVDd0ILh4{< zg6PTp6TprDJHXV!@jr-DP+Y*Uaoq;E$PtuS4s$Wg5wNISxnU23y`3dt2iVyA5cGLxYb`^0 zbu+=x0XgEx!7X5QRC55#a$+1omIGoFfdz)50^D~?7tUgM^5ij`kL+`hBVa&AMwTHu zJ`E*Q?%#jFuy{VCfFn8t&>ev6Q;?6)0W6_n3lX9m04j(; zaRAnG09F!$vLOgya{#c^#A+$b0U-MHiTxM}6FCGx*$`(*2r7!PIRNG>Y(bALD$qlL zA_t(yJ+@#+4gqXwfg%The25$Z#5jQL5FnHYL1};xAe06`*$`)Cgj^KUG8Yh46w|#N z0M&-bA%I>NP*M_-RTLAdjA&jL5K|o!TM>a8CPY=opw`NOHb`(b$$+gQ5P&tO31vmH znq;ubXuuk!1J*2u^^69rV=^eZW}rkhpq*3XR88;hIRKrH<)7+